Structural subset of the Hibernatable-WebSocket surface the DO stream
channels touch: send() fans a frame to the client, close() ends the socket,
and the attachment (de)serializers let the hub hold per-socket presence
ACROSS hibernation (workerd persists the attachment, not instance fields).
Kept structural — never the workers-types WebSocket — so the do-runner
module graph stays node/vitest-loadable and no workers-types import reaches
the emitted .d.ts (same posture as the rest of this file).
Structural subset of the Hibernatable-WebSocket surface the DO stream channels touch: send() fans a frame to the client, close() ends the socket, and the attachment (de)serializers let the hub hold per-socket presence ACROSS hibernation (workerd persists the attachment, not instance fields). Kept structural — never the workers-types
WebSocket— so the do-runner module graph stays node/vitest-loadable and no workers-types import reaches the emitted .d.ts (same posture as the rest of this file).