# `Attesto.PresentationSessionStore.ETS`
[🔗](https://github.com/XukuLLC/attesto/blob/v2.1.0/lib/attesto/presentation_session_store/ets.ex#L1)

Single-node ETS implementation of `Attesto.PresentationSessionStore`.

Presentation sessions live in a `:protected` named ETS table owned by a
`GenServer`. Every write runs inside that owner process, so `complete/2`
atomically guards the `pending` to `completed` transition on status and
expiry and concurrent submissions have exactly one possible winner on this
node; no other process can write the table directly.

This is a per-node store. A multi-node deployment MUST use a shared store,
or explicitly acknowledge the limitation with
`multi_node_acknowledged?: true`.

## Start options

  * `:sweep_interval_ms` (default `30_000`) - how often expired entries are
    deleted.
  * `:multi_node_acknowledged?` (default `false`) - permit this per-node store
    to start on a clustered BEAM.

## Wiring

    children = [Attesto.PresentationSessionStore.ETS]

# `reset`

```elixir
@spec reset() :: :ok
```

Clear every entry. Test-facing.

# `start_link`

```elixir
@spec start_link(keyword()) :: GenServer.on_start()
```

---

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