# `Electric.Client.Authenticator`
[🔗](https://github.com/electric-sql/electric/tree/%40core/elixir-client%400.9.4/packages/elixir-client/lib/electric/client/authenticator.ex#L1)

Behaviour to authenticate a `Electric.Client.Fetch.Request`.

The assumption here is that authentication is per
[`ShapeDefinition`](`Electric.Client.ShapeDefinition`) not per request.

# `headers`

```elixir
@type headers() :: Electric.Client.Fetch.Request.headers()
```

# `authenticate_request`

```elixir
@callback authenticate_request(Electric.Client.Fetch.Request.t(), config :: term()) ::
  Electric.Client.Fetch.Request.authenticated()
```

Update the given `Request` struct with authentication headers.

Independent of the actual authentication mechanism, implementations of this
Behaviour **MUST** set the `authenticated` field in the `Request` to `true`.

# `authenticate_shape`

```elixir
@callback authenticate_shape(Electric.Client.ShapeDefinition.t(), config :: term()) ::
  headers()
```

Get authentication headers for the given ShapeDefinition

---

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