schemars 1.0 dropped the type parameter from a generic's default schema name
(SingleResponse_for_User -> SingleResponse with numeric dedup like
SingleResponse2/3...). Those names become the OpenAPI $defs keys and, downstream,
the generated TypeScript type names in element-admin's SDK — so the change both
renamed every wrapper type and made the names positional/unstable.
Restore the 0.9 '_for_T' naming via schemars 1.0's rename format string on the
three generic wrappers (SingleResponse/PaginatedResponse/SingleResource), keeping
the published admin API schema stable for consumers.
Use the icu_locale fallbacker with a default LocaleFallbackConfig, build
PluralRules and the RelativeTimeFormatter from compiled data, format times with
the fieldset-based NoCalendarFormatter, and adopt the new data-error model
(IdentifierNotFound / MarkerNotFound).
Building the HTTP client now relies on a process-level rustls crypto
provider being installed (we no longer pass a pre-configured TLS config
that bundled one). Tests going through TestState that didn't call
setup() — e.g. the login_sso_redirect tests — panicked when building the
client. Call setup() from from_pool_with_site_config so every TestState
installs the provider.
branding.logo_uri was accepted and validated by the config layer but never
plumbed through to SiteConfig or any template, so it had no effect. Remove the
field and regenerate the committed config schema to remove the confusion.
MSC2965 changed the discovery mechanism to stop relying on .well-known
documents a while back. We removed references to this in the configuration
manual some time ago (see e3d1b8abfa) but
`mas-cli doctor` was still checking for it.
See element-hq/backend-internal#5 as well
Mirror the authorization code grant: render a human-readable device name
from the client and the polling device's user-agent, using the locale
captured on the grant, and provision it on the homeserver instead of
sending no display name.
Capture the preferred language from the browser view which accepts the
device code grant and store it on the grant, so it can later be used to
render a human-readable device name.
This adds a new trait to help generate ULIDs with `chrono::DateTime` and the
workspace-level `rand` crate. This is to help decouple `rand` and `ulid`
upgrades from each other.
Swaps ExecuteExt to return a Traced<Q> wrapper whose fetch_*/execute
methods run the query through the RecordingExecutor, replacing the old
blanket impl that only recorded db.query.text. Adds the per-query-type
Traced<T> impls and the supporting test.
Introduces a RecordingExecutor (an sqlx Executor wrapper) and the
RecordingStream it returns, which record the SQL as db.query.text and
accumulate per-context query count/timing.
Add db_queries / db_time / db_rows_fetched / db_rows_affected counters to
LogContext, mirroring Synapse's LoggingContext db_txn_count / db_txn_duration_sec.
They are exposed through LogContextStats and its Display, so they appear
automatically in the existing HTTP request-completion and job-completion log
lines.
Prepares for the sqlx 0.9 upgrade: sea-query-binder is pinned to sqlx 0.8,
and its sqlx-0.9 successor is the renamed sea-query-sqlx crate which requires
sea-query 1.0. This change does the sea-query 0.32 -> 1.0 major migration while
staying on sqlx 0.8 (via sea-query-sqlx 0.8.1), to keep it decoupled from the
sqlx bump itself.
We need to group the sentry and opentelemetry bumps together because they both
upgraded reqwest to 0.13.
- reqwest 0.12 -> 0.13: rename the rustls feature to rustls-no-provider,
add the now-opt-in 'form' feature.
- sentry 0.46 -> 0.48: add rustls-no-provider so Sentry's reqwest 0.13
transport reuses our process-wide aws-lc-rs provider.
- opentelemetry 0.31 -> 0.32 / tracing-opentelemetry 0.33: update the
get_otel_context call in mas-context for the new signature.
opentelemetry-jaeger-propagator 0.32 is deprecated upstream but still
published; we keep it for now (with an expect(deprecated)) and will
vendor it in-tree once it's actually removed.
Read the `GraphQlOperation` set by the GraphQL handler from the response
extensions in the logging middleware, and record the operation type and name
on the `http.server.response` log line when present.
Define a `GraphQlOperation` type holding the operation type and name, and
attach it to the GraphQL response via the response extensions, so the HTTP
logging middleware can pick it up. The operation type is resolved from the
parsed query document, which is cached on the request and reused by the
executor.
Record the requester for the admin API, GraphQL, the compat
login/logout/logout_all/refresh endpoints, and the OAuth2 token (the
authenticated client) and introspection (the introspecting client, or the
homeserver) endpoints. Introspection records the caller, never the subject
of the introspected token.
The request test helper now runs each request inside a `LogContext`, with
a helper to assert the recorded requester.
Add a `RecordAsRequester` trait mapping domain types (User, BrowserSession,
OAuth2 Session, CompatSession, Client) to a `Requester`, and record it from
the two shared auth-resolution points: `SessionInfo::load_active_session`
(browser sessions) and `AccessToken::fetch` (OAuth2 bearer tokens).
Add a `Requester` enum (a user, an OAuth2 client, or the homeserver) stored
in a set-once slot on the `LogContext`. This lets request handlers record
which entity authenticated a request so it can be logged later.