# `Relyra.ConnectionResolver`
[🔗](https://github.com/szTheory/relyra/blob/v1.1.0/lib/relyra/connection_resolver.ex#L1)

Public extension contract for resolving the SAML connection context.

Resolvers must return a fully normalized `%Relyra.Connection{}` runtime
snapshot. Persistence details stay behind the adapter boundary; runtime
consumers receive one canonical shape:

- `:connection_id`
- `:idp_entity_id`
- `:sp_entity_id`
- `:acs_url`
- `:idp_sso_url`
- `:idp_certificates`

`:cert_chain` remains compatibility-only glue during the certificate
contract migration window. Callers should treat `:idp_certificates` as the
canonical trust field.

# `resolve_connection`

```elixir
@callback resolve_connection(request_context :: map(), opts :: keyword()) ::
  {:ok, Relyra.Connection.t()} | {:error, Relyra.Error.t()}
```

# `resolve_connection`

```elixir
@spec resolve_connection(
  map(),
  keyword()
) :: {:ok, Relyra.Connection.t()} | {:error, Relyra.Error.t()}
```

---

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