send() waited forever when the server never answered. In apps that awaited
a read during page setup, a dropped response left the old layout on screen
with an empty body until a reload.
- sendTimeout (ms, default 0 = off): reject unanswered sends with
{ message, code: 'timeout' }. The clock starts at the call, so a send
stuck behind the connect or channel subscribe times out too.
- send(event, data, channel, { timeout, progress }): per-call override;
a bare function as 4th argument still means progress. timeout 0 opts out.
- A send that timed out before it was written is dropped from the queue
instead of going out late after a reconnect.
- Protocol events (websocket.*) never time out.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>