# `WardrikTriggers.Records`

Stores triggers. Each record holds the trigger, its next and last run, and what its feeds and
webhook have seen.

# `all`

```elixir
@spec all(WardrikStore.t()) :: [{String.t(), String.t()}]
```

Returns every stored trigger as `{agent_id, name}`.

# `delete`

```elixir
@spec delete(WardrikStore.t(), String.t(), String.t()) :: :ok | {:error, term()}
```

Deletes trigger `name` of `agent_id`.

# `lookup`

```elixir
@spec lookup(WardrikStore.t(), String.t(), String.t()) ::
  {map(), WardrikStore.vsn()} | nil
```

Returns the record for trigger `name` of `agent_id` and its version, or `nil`.

# `next_at`

```elixir
@spec next_at(map()) :: DateTime.t() | nil
```

Returns the record's next run, or `nil` for a webhook.

# `of`

```elixir
@spec of(WardrikStore.t(), String.t()) :: [String.t()]
```

Returns the trigger names of `agent_id`.

# `put`

```elixir
@spec put(WardrikStore.t(), map(), WardrikStore.vsn() | nil) ::
  :ok | {:error, :conflict | term()}
```

Writes `record` if the stored version is `vsn`. Pass `nil` to create it.

Returns `{:error, :conflict}` if the version differs.

# `trigger`

```elixir
@spec trigger(map()) :: WardrikTriggers.Trigger.t()
```

Returns the record's trigger.

# `update`

```elixir
@spec update(WardrikStore.t(), String.t(), String.t(), (map() -&gt; map())) ::
  :ok | {:error, term()}
```

Updates the record with `fun`. Retries on a conflicting write.

Returns `{:error, :not_found}` if there's no record.

---

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