# `Wardrik.HTTP`

Serves Wardrik over HTTP. See `WardrikHTTP` for the routes.

It serves:

  * every operation at its route
  * streaming operations as server-sent events
  * the tool workers' WebSocket at `/v1/workers`
  * chat apps' requests to channels
  * sign-in callback pages

Run it as a child, with Bandit:

    children = [MyApp.AgentRuntime, {Wardrik.HTTP, wardrik: MyApp.AgentRuntime, port: 4000}]

Or forward to it from your router, as a `Plug`:

    forward "/agents", Wardrik.HTTP, wardrik: MyApp.AgentRuntime

## Options

  * `:wardrik` - required. The module to serve, as `MyApp.AgentRuntime`.
  * `:authenticator` - see `WardrikHTTP`.
  * `:keepalive` - see `WardrikHTTP`.

As a child it also takes Bandit's options, such as `:port`. That needs `:bandit` in your deps.

# `body_reader`

```elixir
@spec body_reader() :: {module(), atom(), list()}
```

Returns a `:body_reader` for `Plug.Parsers`.

Use it if your app parses bodies before Wardrik. It keeps the raw body so webhook signatures
can still be checked.

    plug Plug.Parsers, parsers: [:json], json_decoder: JSON, body_reader: Wardrik.HTTP.body_reader()

# `child_spec`

```elixir
@spec child_spec(keyword()) :: Supervisor.child_spec()
```

Returns a child spec that serves Wardrik with Bandit.

---

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