# `Latch.Config`

The internal configuration that drives the library.

## Fields
  * `:store` - a module implementing `Latch.Store`
  * `:name` - the name of the Latch instance
  * `:mode` - `:confidential`, `:public`, or `:localhost`
  * `:redirect_uri_path` - the OAuth callback path
  * `:scope` - the requsted scopes
  * `:client_id_path` - the path of the published client metadata document
  * `:signing_key` - the JSON-encoded ES256 private JWK for `private_key_jwt` as string
  * `:client_name` - shown on the authorization consent screen
  * `:client_uri` - client home page
  * `:base_url_fun` - function to build the base URL for `redirect_uri` and `client_id`, because the host is frequently only known at runtime.
  * `:finch` - an optional Finch override to the Req client, refer to https://req.hexdocs.pm/Req.html#new/2 for the full set of options
  * `:plc_directory` - optional override for the default PLC
  * `:slingshot_url` - an optional slingshot instance for identity resolution, eg `https://slingshot.cove.town`

# `mode`

```elixir
@type mode() :: :confidential | :public | :localhost
```

# `t`

```elixir
@type t() :: %Latch.Config{
  base_url_fun: (-&gt; String.t()),
  client_id_path: String.t() | nil,
  client_name: String.t() | nil,
  client_uri: String.t() | nil,
  mode: mode(),
  name: atom() | pid(),
  plc_directory: String.t() | nil,
  pool: keyword(),
  redirect_uri_path: String.t(),
  request_ttl: non_neg_integer() | nil,
  scope: String.t(),
  signing_key: map() | nil,
  slingshot_url: String.t() | nil,
  store: module()
}
```

# `client_id`

# `confidential?`

# `localhost?`

# `redirect_uri`

---

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