mirror of
https://github.com/gesellix/Bose-SoundTouch.git
synced 2026-08-18 08:36:13 +00:00
Fold soundtouch-web into soundtouch-service as an additive mount, so a single process serves both the speaker/cloud-replacement API and the LAN control UI. No new auth and no opt-in flag: the web surface sits at the same LAN-trust tier as /setup (which -web already calls without credentials), and -web is LAN-only by nature. - newEmbeddedWebApp builds the web app with release metadata, a loopback ServiceURL (plain HTTP, no CA needed) for the TTS / Play URL proxy, and an initial discovery sweep. setupRouter gains the web app + discovery service and mounts the portable surface (MountWeb) additively: /api/control/* and /app/* (+ /app/static/*). The service keeps its own /, /health and /static; nothing collides. webApp is optional so the router unit tests that only exercise the service surface pass nil. - Manual devices with discovery off: the web app's ExtraDeviceHosts hook is pointed at the service datastore (ListAllDevices), and SeedExtraDevices (run from DiscoverDevices, i.e. at startup and on each /api/control/discover) registers them via the existing AddDeviceByHost. So speakers added via /setup show up in the UI even when periodic discovery is disabled. - The admin page at / now links to the player UI at /app; the speaker / JSON contract is unchanged. - Router golden file regenerated: the diff is purely the additive /api/control + /app routes. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>