# `Relyra.SessionAdapter`
[🔗](https://github.com/szTheory/relyra/blob/v1.1.0/lib/relyra/session_adapter.ex#L1)

Public extension contract for handing off authenticated subjects to host sessions.

# `establish_session`

```elixir
@callback establish_session(subject :: map(), context :: map(), opts :: keyword()) ::
  {:ok, map() | Plug.Conn.t()} | {:error, Relyra.Error.t()}
```

# `revoke_session`

```elixir
@callback revoke_session(
  subject :: map(),
  session_index :: binary() | nil,
  context :: map(),
  opts :: keyword()
) :: {:ok, term()} | {:error, Relyra.Error.t()}
```

# `establish_session`

```elixir
@spec establish_session(map(), map(), keyword()) ::
  {:ok, map() | Plug.Conn.t()} | {:error, Relyra.Error.t()}
```

# `revoke_session`

```elixir
@spec revoke_session(map(), binary() | nil, map(), keyword()) ::
  {:ok, term()} | {:error, Relyra.Error.t()}
```

---

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