Typed wrapper for persisted idempotency entries.
@spec delete(term(), term()) :: :ok | {:error, term()}
@spec get(term(), term()) :: term() | nil
@spec key(term(), term()) :: binary()
@spec list() :: [{term(), term()}]
@spec put(term(), term(), term()) :: :ok | {:error, term()}