Single-node ETS implementation of Attesto.PreAuthorizedCodeStore.
Pre-authorized codes live in a public ETS table owned by a GenServer that
sweeps expired rows on a fixed interval. take/1 uses :ets.take/2, which
fetches and deletes a row in one atomic step, so the single-use guarantee
holds against concurrent redemptions on a node. This is a per-node store: a
multi-node deployment MUST back Attesto.PreAuthorizedCodeStore with a
shared store so a code issued on one node can be redeemed once on another.
Start options
:sweep_interval_ms(default30_000) - how often expired rows are bulk-deleted. Correctness does not depend on sweeping;Attesto.PreAuthorizedCodere-checks expiry aftertake/1.
Wiring
children = [Attesto.PreAuthorizedCodeStore.ETS]then pass the module as the store:
Attesto.PreAuthorizedCode.issue(Attesto.PreAuthorizedCodeStore.ETS, attrs)
Summary
Functions
@spec reset() :: :ok
Clear every entry. Test-facing.
@spec start_link(keyword()) :: GenServer.on_start()