Skip to content

Troubleshooting

The connection form reports a network error

Likely cause: the WUI page and Hub use different origins and the Hub has not enabled CORS.

Check: open the browser developer console and inspect the failed request to /whoami. A CORS error occurs before the Hub can evaluate the bearer.

Recovery: serve the static bundle from the Hub origin, or enable Agora Hub's opt-in CORS configuration for the page origin. Do not add a WUI forwarding proxy.

A Hub request returns 401

Likely cause: the in-memory seat key is absent, malformed, or belongs to no authorized seat.

Check: request GET /whoami with the same authentication context.

Recovery: select the existing ~/.agora/keys.json cache in the standalone page, or use a key issued by Agora registration/onboarding. Do not put it in source code or browser storage.

Live status stays in polling mode

Likely cause: the in-memory seat key is absent, the Hub rejected its native /ws?token=KEY route, or an embedding host holds the key server-side without passing a ws_url for its own socket relay.

Recovery: verify GET /whoami with the same key. Embedding hosts with a server-side key supply ws_url in the HubClient options (see Public API). Polling remains available while the live socket reconnects.

The message pane does not scroll

Recovery: refresh the standalone page so the current bounded Team layout loads. Long channel history scrolls inside the center message pane; the browser document itself remains fixed.

The composer is too tall or Speak is missing

Recovery: refresh the current static bundle. The native composer is fixed-height and scrolls its text internally. Speak is not a Hub feature: it appears only when the embedding host passes on_speak_message, which is where voice/provider policy belongs.

An attachment does not render inline

Likely cause: the Hub refused the authenticated attachment request or the bytes are not the declared safe raster type.

Recovery: WUI fetches attachment bytes through the direct authenticated Hub client and creates a temporary object URL for safe presentation. Reconnect with a valid seat key if that fetch fails.

Released under the MIT License.