# `Ankusa.RouteResolver`
[🔗](https://github.com/jamescarr/ankusa/blob/ankusa-v0.7.0/packages/ankusa/lib/ankusa/route_resolver.ex#L1)

Maps a raw ingest request (`Plug.Conn`) to a `Ankusa.Route`. This is the seam
that makes the catch-URL scheme pluggable, so the framework fits a single
static server, a multi-tenant SaaS handing every customer their own path, or a
product minting opaque catch URLs of its own shape at runtime —
without touching the hot path.

This module is both the **behaviour** every resolver implements and the
instance-scoped **facade** (resolves `config.route_resolver` and delegates).

A resolver does URL-scheme work only. It never reads the body, verifies
signatures, or touches storage: it answers "which endpoint is this?" and hands
back a `Ankusa.Route`. Policy (verify/sinks) still comes from the
`Ankusa.SourceStore` keyed by the returned `source_id`.

# `resolve`

```elixir
@callback resolve(instance :: atom(), conn :: Plug.Conn.t(), opts :: keyword()) ::
  {:ok, Ankusa.Route.t()} | :error
```

# `resolve`

```elixir
@spec resolve(atom(), Plug.Conn.t()) :: {:ok, Ankusa.Route.t()} | :error
```

---

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