Odin/scripts/start-hermodr.ps1
2026-07-10 21:29:50 +01:00

57 lines
2.3 KiB
PowerShell

param(
[string] $HostAddress = $(if ($env:HERMODR_BIND_HOST) { $env:HERMODR_BIND_HOST } else { "127.0.0.1" }),
[int] $Port = $(if ($env:HERMODR_PORT) { [int]$env:HERMODR_PORT } else { 8798 }),
[string] $OdinCultMeshUri = $(if ($env:HERMODR_ODIN_CULTMESH_URI) { $env:HERMODR_ODIN_CULTMESH_URI } elseif ($env:ODIN_CULTMESH_URI) { $env:ODIN_CULTMESH_URI } else { "cultmesh://odin/rendezvous/provider-catalog" }),
[string] $IdunnRudpHealth = $(if ($env:HERMODR_IDUNN_RUDP_HEALTH) { $env:HERMODR_IDUNN_RUDP_HEALTH } else { $env:IDUNN_RUDP_HEALTH }),
[string] $IdunnDaemon = "hermodr",
[string] $IdunnHealthContract = "hermodr.cultnet-rudp-browser-lowering-health",
[string] $StateDir = $(Join-Path $PSScriptRoot "..\scratch\Hermodr"),
[switch] $NoWindow
)
$ErrorActionPreference = "Stop"
foreach ($name in @(
"HERMODR_ODIN_HTTP_BASE",
"HERMODR_ODIN_WS_BASE",
"HERMODR_ODIN_STATE_PATH",
"HERMODR_SLEIPNIR_COMMAND_RUDP",
"HERMODR_SLEIPNIR_COMMAND_ENDPOINT",
"HERMODR_MUNINN_RUDP",
"HERMODR_AETHERIA_COMMAND_RUDP",
"HERMODR_ODIN_CULTMESH_STORE",
"ODIN_CULTMESH_STORE"
)) {
if (-not [string]::IsNullOrWhiteSpace([Environment]::GetEnvironmentVariable($name))) {
throw "$name was removed. Hermodr lowers Odin/CultMesh state for browsers and may only publish typed CultMesh command documents."
}
}
if (-not [string]::IsNullOrWhiteSpace($env:HERMODR_COMMAND_STORE)) {
throw "HERMODR_COMMAND_STORE was removed. Hermodr publishes typed commands through provider-advertised CultMesh routes and records visible witnesses in Odin's CultMesh cache."
}
$node = "node"
$Hermodr = Join-Path $PSScriptRoot "..\src\hermodr-daemon.cjs"
$arguments = @(
$Hermodr,
"--host", $HostAddress,
"--port", $Port,
"--odin-cultmesh-uri", $OdinCultMeshUri
)
if (-not [string]::IsNullOrWhiteSpace($IdunnRudpHealth)) {
$arguments += @(
"--idunn-rudp-health", $IdunnRudpHealth,
"--idunn-daemon", $IdunnDaemon,
"--idunn-health-contract", $IdunnHealthContract
)
}
if ($NoWindow) {
New-Item -ItemType Directory -Force -Path $StateDir | Out-Null
$proc = Start-Process -FilePath $node -ArgumentList $arguments -WindowStyle Hidden -PassThru
$proc.Id | Set-Content -Encoding ASCII -LiteralPath (Join-Path $StateDir "hermodr.pid")
Write-Host "Started Hermodr browser lowering at http://${HostAddress}:${Port}/"
return
}
& $node @arguments