# `ExWapp.Client.Transport.RawWebSocket`
[🔗](https://github.com/elchemista/ex_wapp/blob/v0.1.5/lib/ex_wapp/client/transport/raw_web_socket.ex#L1)

Diagnostic client adapter backed directly by the low-level WebSocket transport.

This adapter exposes connection and raw transport events to a caller-owned
process. It intentionally cannot send high-level `ExWapp.Message` values,
because doing so would bypass session synchronization, device fanout, Signal
encryption, sender keys, retries, and persistence.

Use `ExWapp.Client.Transport.Session` for production messaging. Advanced
protocol tooling can call `WebSocket.send_node/2` with
already-prepared nodes.

# `connect`

```elixir
@spec connect(ExWapp.Client.t()) :: {:ok, ExWapp.Client.t()} | {:error, term()}
```

Starts the low-level WebSocket/Noise process and stores its pid on the client.

# `disconnect`

```elixir
@spec disconnect(ExWapp.Client.t()) :: {:ok, ExWapp.Client.t()}
```

Stops the caller-owned raw WebSocket process.

# `send_message`

```elixir
@spec send_message(ExWapp.Client.t(), ExWapp.Message.t()) :: {:error, atom()}
```

Rejects high-level messages so they cannot bypass the complete session pipeline.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
