# Changelog

## Unreleased

## 0.14.0

Breaking changes:

- Add support for extended profile fields to `get_profile_information` endpoint.
  - The `field` field of `Request` takes a `ProfileFieldName` rather than a
    custom enum.
  - `Response` has no public fields anymore but stores all profile fields. The
    fields can be accessed with `.get()`, `.iter()` or `.into_iter()`.
    `Response::new()` takes no arguments and creates an empty response. Fields
    can be added using `.set()`, or the `FromIterator` and `Extend`
    implementations.
- The `compat-empty-string-null` cargo feature was removed because it is now
  unused.
- The `create_join_event::v1` and `create_leave_event::v1` endpoints were
  removed, according to MSC4376 / Matrix 1.18.

Improvements:

- Add the Policy Server event signing endpoint, according to MSC4284 / Matrix
  1.18.
- Add unstable support for MSC4373.

## 0.13.1

Bug fixes:

- Fix code that was not properly gated behind `client` or `server` features.

## 0.13.0

Breaking changes:

- All the endpoints use a `SinglePath` rather than a `VersionHistory` as
  `Metadata::PathBuilder`. Making a request doesn't require to provide a dummy
  `SupportedVersions` anymore.
  - The endpoints that became stable from Matrix 1.1 onwards have a new
    `unstable` module to be able to support the unstable endpoint defined in
    their MSC.

Improvements:

- `RawStrippedState::Stripped` is deprecated in favor of the `Pdu` variant,
  according to Matrix 1.16.
- `ServerSignatures` supports adding the `X-Matrix` header to outgoing requests.
- `XMatrix::request_object()` allows to construct the canonical JSON object to
  sign from a request.
- `XMatrix` can be constructed from a request with `try_from_http_request()`.
- The signature in the `sig` field of `XMatrix` can be used to verify a request
  with `verify_request()`.

## 0.12.0

Breaking changes:

- Remove the `origin` field in `create_join_event::{v1/v2}::RoomState` due to a
  clarification in the spec.
- The type of `signed` in `thirdparty::bind_callback::v1::Request` was fixed. It
  uses `Raw<SignedContent>` from `RoomMemberEventContent`.
- The type of `content` in `thirdparty::exchange_invite::v1::Request` was fixed.
  It is a `RoomMemberEventContent`. A new constructor was added,
  `with_third_party_invite()` that constructs the event content from a
  `ThirdPartyInvite`.
- Update the endpoint metadata definitions to use the new syntax for variables.
- Use `ruma_common::RoomSummary` for the `space::get_hierarchy` endpoint.
  - `SpaceHierarchyParentSummary` is now built around `RoomSummary`, and
    `SpaceHierarchyParentSummaryInit` was removed.
  - `SpaceHierarchyChildSummary` was replaced by `RoomSummary` and
    `SpaceHierarchyChildSummaryInit` was removed.
- Merge the `knock` module into `membership`, and rename `create_knock_event_template` and
  `send_knock` to `prepare_knock_event` and `create_knock_event` respectively for consistency.
- Use `RawStrippedState` instead of `Raw<AnyStrippedStateEvent>`, to allow non-stripped events to be
  represented for `create_invite` and `create_knock_event`.

Bug fixes:

- Add constructor for `thirdparty::bind_callback::v1::Response`.

Improvements:

- ruma-server-util was merged into this crate. `XMatrix` is available in the
  `authentication` module.
- Add a method to construct a `thirdparty::exchange_invite::v1::Request` from a
  `thirdparty::bind_callback::v1::ThirdPartyInvite` and a
  `RoomThirdPartyInviteEventContent`.
- Add unstable support for full PDUs in `create_invite` and `create_knock_event` alongside stripped
  events from MSC4311 behind the `unstable-msc4311` feature.

## 0.11.2

Bug fixes:

- Restore the `unstable-unspecified` cargo feature. There are still a few places
  that rely on that feature that would require a breaking change to remove the
  feature.

Improvements:

- Add the `encryption` and `room_version` fields to
  `SpaceHierarchyParentSummary` and `SpaceHierarchyChildSummary`, according to
  MSC3266 / Matrix 1.15.

## 0.11.1

Improvements:

- The `unstable-unspecified` cargo feature was removed. The `pdus` field of
  `send_transaction_message::v1::Request` is always serialized. To allow this
  field to be missing during deserialization, use the `compat-optional-txn-pdus`
  cargo feature.

## 0.11.0

Improvements:

- The `unstable-exhaustive-types` cargo feature was replaced by the
  `ruma_unstable_exhaustive_types` compile-time `cfg` setting. Like all `cfg`
  settings, it can be enabled at compile-time with the `RUSTFLAGS` environment
  variable, or inside `.cargo/config.toml`. It can also be enabled by setting
  the `RUMA_UNSTABLE_EXHAUSTIVE_TYPES` environment variable.

## 0.10.0

Breaking changes:

- Remove the unused `KeyObject` struct. It is actually supposed to be the same type
  as `ruma_common::encryption::SignedKey`.
- Use `OwnedOneTimeKeyId` and `OneTimeKeyAlgorithm` instead of
  `OwnedDeviceKeyId` and `DeviceKeyAlgorithm` respectively to identify one-time
  and fallback keys and their algorithm.
- Use `ServerSignatures` for the `signatures` or `ServerSigningKeys`.

Bug fixes:

- `ServerSigningKeys` can be deserialized when `old_verify_keys` is missing, due to a
  clarification in the spec.

Improvements:

- Add support for authenticated media endpoints, according to MSC3916 / Matrix 1.11
- Make `Content-Type` and `Content-Disposition` mandatory when creating media
  responses, according to MSC2701 / MSC2702 / Matrix 1.12.

## 0.9.0

Breaking changes:

- Use `RawValue` to represent body of `/v1/send_join` request, rather than incorrectly using
  query parameters
- The http crate had a major version bump to version 1.1

Improvements:

- Implement `From<SpaceHierarchyParentSummary>` for `SpaceHierarchyChildSummary`
- Add unstable support for optional `via` field on the `create_invite` endpoint request from
  MSC4125 behind the `unstable-msc4125` feature.
- Add unstable support for the `report_content` endpoint from MSC3843 behind the
  `unstable-msc3843` feature.

## 0.8.0

Bug fixes:

- Use `SpaceRoomJoinRule` for `SpaceHierarchy(Parent/Child)Summary(Init)`. Even if
  (de)serialization worked before, it is more correct to expect any join rule, like in the CS API

Improvements:

- Deprecate the `v1/send_join` and `v1/send_leave` endpoints according to a spec clarification

## 0.7.1

Improvements:

- Stabilize support for getting an event by timestamp (MSC3030 / Matrix 1.6)
- Stabilize support for partial state in `v2/send_join` (MSC3706 / Matrix 1.6)

## 0.7.0

Bug fixes:

- Add the `event` field to `RoomState` according to MSC3083 / Matrix v1.2

Breaking changes:

- Split `membership::create_join_event::RoomState` into separate types in the `v1` and `v2` modules

Improvements:

- Add unstable support to get an event by timestamp (MSC3030)
- Add unstable support to request partial state in `send_join` (MSC3706)

## 0.6.0

Breaking changes:

- Upgrade dependencies

## 0.5.0

Improvements:

- Add support for the space summary API in `space::get_hierarchy` according to MSC2946.
- Add `transactions::edu::Edu::SigningKeyUpdate` according to MSC1756
- Add Add cross-signing fields to `get_devices::Response` according to MSC1756
- Add unstable endpoint `discovery::get_server_versions` according to MSC3723

## 0.4.0

Breaking changes:

- Replace `Raw<Pdu>` with `Box<RawJsonValue>` or `&RawJsonValue`
- Borrow more request fields
- Make `device_display_name` field optional in `DeviceListUpdateContent` and update constructor accordingly
- Remove unneeded `minimum_valid_until_ts` query parameter from `get_remote_server_keys_batch` endpoint

Improvements:

- Move `knock` module out of `unstable-pre-spec`
  - `knock:::send_knock::v1::Request` requires a PDU instead of the `knock_event`
- Move cross-signing properties of `keys::get_keys::v1::Response` out of `unstable-pre-spec`
- Move MSC implementations from `unstable-pre-spec` to per-msc features:

  ```text
  unstable-msc2448
  unstable-msc3618
  ```

## 0.3.1

Bug fixes:

- Fix JSON body (de)serialization of `discovery::get_remote_server_keys::batch::v2::Request`
- Fix query parameter deserialization of `discovery::get_remote_server_keys::batch::v2::Request`

## 0.3.0

Breaking changes:

- Upgrade dependencies

Improvements:

- Add more endpoints:

  ```rust
  knock::{
    create_knock_event::v1,
    send_knock::v1,
  }
  ```

  - Add unstable support for room knocking.

## 0.2.0

Breaking Changes:

- Change types of keys::claim_keys::v1 response to match the client-server endpoint
- Update `thirdparty::bind_callback::v1::Request::new` to have a `medium` parameter

Improvements:

- Add master_keys and self_signing keys to keys::get_keys::v1 response
- Add `thirdparty::bind_callback::v1::Request::email` convenience constructor

## 0.1.0

Breaking Changes:

- Replace `directory::get_public_rooms::v1::{PublicRoomsChunk, RoomNetwork}` with types from
  `ruma_common::directory`
- Wrap `PduStub`s in `membership::create_join_event` in `Raw`
- Remove `PduStub` (it only existed because of the spec being misleading)
  - Rename `pdu_stub` fields to `pdu`
- Upgrade dependencies
- Wrap `Pdu`s in `backfill::get_backfill` in `Raw`
- Use `ruma_identifiers::MxcUri` instead of `String` for `avatar_url` in
  `query::get_profile_information::v1`
- Rename `homeserver` property to `server` on `discover_homeserver::Response`

Improvements:

- Add endpoints:

  ```text
  backfill::get_backfill::v1,
  device::get_devices::v1,
  directory::get_public_rooms_filtered::v1,
  event::get_missing_events::v1,
  keys::{
      claim_keys::v1,
      query_keys::v1,
  },
  membership::{
      create_invite::{v1, v2},
      create_join_event::v2,
      create_leave_event::{v1, v2},
      get_leave_event::v1,
  },
  query::get_custom_information::v1,
  thirdparty::{
      bind_callback::v1,
      exchange_invite::v1,
  },
  ```

Bug fixes:

- Fixes `discover_homeserver::Response` serialization and deserialization

## 0.0.3

Breaking Changes:

- Replace `RoomV3Pdu` with `ruma_events::pdu::{Pdu, PduStub}`.

Improvements:

- Add endpoints:

  ```text
  authorization::get_event_authorization::v1,
  openid::get_openid_userinfo::v1,
  query::get_profile_information::v1,
  transactions::send_transaction_message::v1,
  ```

## 0.0.2

Improvements:

- Add endpoints:

  ```text
  directory::get_public_rooms::v1,
  discovery::{
      discover_homeserver,
      get_server_keys::v2,
      get_server_version::v1
  },
  membership::{
      create_join_event::v1,
      create_join_event_template::v1
  },
  query::get_room_information::v1,
  version::get_server_version::v1
  ```

## 0.0.1

Improvements:

- Provide `RoomV3Pdu` type for room versions 3 and above
