What I did: - juggle the bare client data between the page and SW - mock the WebSocket class to perform async ops There are still bugs: - new WebSocket().constructor is the mock class - eventTarget() feels very stomp-like