# `Hyper.Img.Db.Blob`
[🔗](https://github.com/harmont-dev/hyper/blob/main/lib/hyper/img/db/blob.ex#L1)

An immutable, content-addressed leaf object stored on NFS - a base (`P.img`) or
a delta (`L.img`). The `id` is both primary key and identity, so inserts are
conflict-free: two nodes publishing the same bytes write the same row.

The only field that ever changes is `state`, flipped to `:deleting` as a tombstone
during a coordinated delete so no new lease can be taken against it.

# `t`

```elixir
@type t() :: %Hyper.Img.Db.Blob{
  __meta__: term(),
  id: term(),
  inserted_at: term(),
  kind: term(),
  size: term(),
  state: term()
}
```

# `changeset`

# `present_after`

```elixir
@spec present_after(String.t() | nil, pos_integer()) :: [
  {String.t(), non_neg_integer()}
]
```

Keyset page of `{id, size}` for `:present` blobs after `after_id` (nil to start), ordered by id.

---

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