every.channel/evolution/proposals/ECP-0068-iroh-control-web-directory-bridge.md

41 lines
1.6 KiB
Markdown

# ECP-0068: Iroh Control To Web Directory Bridge
Status: Draft
## Decision
Add a first-class bridge from iroh control gossip to the public website directory:
1. `ec-node control-bridge-web`:
- subscribes to control announcements on `every.channel/control/v1`,
- selects relay transports (`relay_url` + `broadcast_name` + `track_name`),
- upserts them into the website API (`/api/stream-upsert`).
2. Extend the Cloudflare Worker API with:
- `POST /api/stream-upsert` (optional bearer token auth),
- `GET /api/public-streams` (read-only list for browsers).
3. Extend the web watcher UI to render `Live Now` from `/api/public-streams`, with one-click watch.
## Motivation
The site currently requires manual broadcast names even when streams are already announced over iroh control gossip. This bridge makes `every.channel` discoverable from published control state and gives browser users a single “open site and click watch” flow.
## Scope
In scope:
- Control gossip -> web directory bridge command.
- Worker storage/API for public stream entries.
- Browser UI list and refresh loop.
- Control gossip join behavior updated to work without bootstrap peers (`subscribe` without blocking join).
Out of scope:
- Browser-native iroh direct playback.
- Signed/authenticated control announcements.
- Replacing relay playback with direct iroh in browsers.
## Rollout / Reversibility
- Additive change; existing `/api/directory` and watch-by-link behavior remain intact.
- Bridge can be disabled by stopping `control-bridge-web`.
- Public listing auth can be tightened by setting `EC_STREAM_UPSERT_TOKEN`.