Arc.Plug.Hub (cratis_arc v0.1.0)

Copy Markdown View Source

The multiplexed WebSocket hub at /.cratis/queries/ws.

One connection carries many observable-query subscriptions. Messages share an envelope with a PascalCase type (Subscribe, Unsubscribe, QueryResult, Unauthorized, Error, Ping, Pong, Connected), a client-assigned queryId, an optional revision and a payload.

A connection opens with Connected, whose payload is the server-assigned connection id. Each subscription is authorized independently by the ordinary query pipeline: a denied subscription ends with Unauthorized for its queryId without disturbing the others.

Revisions order operations for one queryId: a stale message is ignored, a duplicate is idempotent, and an unsubscribe is remembered so a delayed subscribe cannot resurrect it.

Each subscription's transferMode shapes its emissions (see Arc.Plug.HubSession): full sends snapshots, delta a snapshot and then change sets, anything else both on every emission. The same protocol is served over Server-Sent Events by Arc.Plug.SseHub.