# `LivePanels.Canvas.Shared.Session`
[🔗](https://github.com/livepanels/livepanels/blob/v0.1.0/lib/livepanels/canvas/shared/session.ex#L1)

Application-provided shared-mode participant session metadata.

Put participant metadata under `session_key/0` in the LiveView session. The
runtime reads only `viewer_id`, `role`, `capabilities`, and optional
`region_id`; authentication and display data stay with the application.
Missing shared-mode roles resolve to `:viewer` unless the runtime caller
passes another `:default_role`.

# `participant_options`

```elixir
@type participant_options() :: [
  viewer_id: String.t(),
  role: :viewer | :editor,
  capabilities: [atom() | String.t()],
  region_id: String.t() | nil
]
```

# `participant_options`

```elixir
@spec participant_options(map(), String.t(), keyword()) ::
  {:ok, participant_options()} | {:error, {atom(), String.t(), term()}}
```

Extracts participant runtime options from a LiveView session.

# `participant_options!`

```elixir
@spec participant_options!(map(), String.t(), keyword()) :: participant_options()
```

Bang variant of `participant_options/3`.

# `participant_session`

```elixir
@spec participant_session(keyword() | map()) :: map()
```

Returns a LiveView session map containing shared participant metadata.

# `session_fields`

```elixir
@spec session_fields() :: [:viewer_id | :role | :capabilities | :region_id]
```

Participant fields LivePanels reads from the application session payload.

# `session_key`

```elixir
@spec session_key() :: String.t()
```

Session key used for app-provided shared-mode participant metadata.

---

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