# `NervesHubLink.UpdateManager`
[🔗](https://github.com/nerves-hub/nerves_hub_link/blob/v2.12.0/lib/nerves_hub_link/update_manager.ex#L8)

GenServer responsible for brokering messages between:
  * an external controlling process
  * FWUP
  * HTTP

Should be started in a supervision tree

# `status`

```elixir
@type status() :: :idle | :updating
```

# `apply_update`

```elixir
@spec apply_update(GenServer.server(), NervesHubLink.Message.UpdateInfo.t(), [
  String.t()
]) :: status()
```

Must be called when an update payload is dispatched from
NervesHub. The map must contain a `"firmware_url"` key.

# `change_updater`

```elixir
@spec change_updater(GenServer.server(), NervesHubLink.UpdateManager.Updater.t()) ::
  :ok
```

Change `Updater` used for the next firmware update.

`Updater`s orchestrate firmware downloads and installation.

# `currently_downloading_uuid`

```elixir
@spec currently_downloading_uuid(GenServer.server()) :: uuid :: String.t() | nil
```

Returns the UUID of the currently downloading firmware, or nil.

# `status`

```elixir
@spec status(GenServer.server()) :: status()
```

Returns the current status of the update manager

---

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