# `Decibel.Session`
[🔗](https://github.com/ausimian/decibel/blob/1.2.1/lib/decibel/session.ex#L1)

An opaque, process-owned Decibel session handle.

Session handles may only be used by their owner process. An in-progress
handshake may be transferred once with `Decibel.handoff/2` and
`Decibel.accept_handoff/1`; acceptance creates a new handle for the target.
Calls from another process raise `Decibel.SessionError` with
`reason: :not_owner`, even after the owner closes the session or exits.
Session state lives until `Decibel.close/1` is called or the owner process
exits, and the owner's operations on a closed handle use `reason: :closed`.

Their fields are private implementation details and must not be inspected,
altered, or constructed by callers. See `Decibel`'s **Ownership and
lifetime** section for the complete concurrency, supervision, phase, and
lifecycle contract.

# `phase`

```elixir
@type phase() :: Decibel.SessionError.phase()
```

# `t`

```elixir
@opaque t()
```

---

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