mirror of
https://github.com/jackwener/OpenCLI.git
synced 2026-09-14 18:25:42 +08:00
75ddb6319b
* fix(extension): probe daemon via HTTP before WebSocket to eliminate console noise When the daemon is offline, `new WebSocket()` logs uncatchable ERR_CONNECTION_REFUSED errors to Chrome's extension error page. Add `probeAndConnect()` that checks daemon reachability with a silent `fetch(HEAD)` before attempting WebSocket connection. All three auto-connect paths (initialize, keepalive alarm, eager reconnect) now go through the probe, eliminating the error noise entirely. Closes #505 * refactor(extension): inline probe into connect(), add /ping to daemon Instead of a separate probeAndConnect() wrapper that all call sites had to remember to use, bake the HTTP probe directly into connect() itself. This makes the guard impossible to accidentally skip when adding new connection paths in the future. Also adds a dedicated GET /ping endpoint to the daemon (no X-OpenCLI header required) so the probe has a clear semantic contract instead of relying on a 403 side-effect from the root path. - daemon: GET /ping → 200 {ok:true}, no auth needed, placed before the X-OpenCLI header check; only chrome-extension:// and no-origin requests reach it (origin check is still enforced above) - background: connect() is now async; probes /ping with a 1 s timeout before new WebSocket(); all call sites (initialize, keepalive alarm, scheduleReconnect) remain unchanged - probeAndConnect() removed — no longer needed * fix(extension/daemon): address review feedback on probe refactor - protocol.ts: replace DAEMON_HTTP_URL with DAEMON_PING_URL (clearer semantics, single source of truth for the health-check URL) - background.ts: import DAEMON_PING_URL from protocol instead of defining a local constant; check res.ok so an unexpected non-200 response doesn't fall through to WebSocket; annotate all fire-and- forget connect() call sites with `void` to make intent explicit - daemon.ts: add security comment on /ping documenting the timing side-channel tradeoff (loopback-only, accepted risk) --------- Co-authored-by: jackwener <jakevingoo@gmail.com>