ruwuma/crates/ruma-common/CHANGELOG.md
Ivan Enderlin ea41901211
events: Transform Markdown soft line breaks into hard line breaks
This patch transforms Markdown soft line breaks into hard line breaks
when rendering to HTML.

The [CommonMark specification about soft line
breaks](https://spec.commonmark.org/0.30/#soft-line-breaks) specifies:

> A renderer may also provide an option to render soft line breaks as
> hard line breaks.

Refering to https://github.com/vector-im/element-x-ios/issues/1418, some
people are expecting to get soft line breaks rendered at hard ones.

This patch updates the Markdown test to include this conversion of soft
to hard line breaks. It includes a list and a code block, to ensure
not _all_ soft breaks are transformed into hard breaks; only the ones
we expect.
2023-08-24 11:12:37 +02:00

18 KiB

[unreleased]

Bug fixes:

  • Set the predefined server-default .m.rule.tombstone push rule as enabled by default, as defined in the spec.
  • Parse m.tag order as a f64 value or a stringified f64 value, if the compat-tag-info feature is enabled.

Breaking changes:

  • Make in_reply_to field of Thread optional
    • It was wrong to be mandatory, spec was unclear (clarified here)
  • FlattenedJson::get returns a FlattenedJsonValue instead of a string
  • Remove the DontNotify and Coalesce variants of push::Action according to MSC3987
    • Old push rules will still deserialize successfully but the Coalesce variant will not return true for Action::should_notify() anymore
  • Remove AnswerSessionDescription and OfferSessionDescription types, use SessionDescription instead.
    • Remove SessionDescriptionType, use a String instead. A clarification in MSC2746 / Matrix 1.7 explains that the type field should not be validated but passed as-is to the WebRTC API. It also avoids an unnecessary conversion between the WebRTC API and the Ruma type.
  • The reason field in CallHangupEventContent is now required and defaults to Reason::UserHangup (MSC2746 / Matrix 1.7)
  • The Replacement relation for RoomMessageEventContent now takes a RoomMessageEventContentWithoutRelation instead of a MessageType
  • Make the redacts field of Original(Sync)RoomRedactionEvent optional to handle the format where the redacts key is moved inside the content, as introduced in room version 11, according to MSC2174 / MSC3820
    • RoomRedactionEventContent::new() was renamed to new_v1(), and with_reason() is no longer a constructor but a builder-type method
  • Make the creator field of RoomCreateEventContent optional and deprecate it, as it was removed in room version 11, according to MSC2175 / MSC3820
    • RoomCreateEventContent::new() was renamed to new_v1()
    • RedactedRoomCreateEventContent is now a typedef over RoomCreateEventContent
  • Add preserved fields to match the new redaction algorithm in room version 11, according to MSC2176 / MSC3821 / MSC3820, for the following types:
    • RedactedRoomRedactionEventContent,
    • RedactedRoomPowerLevelsEventContent,
    • RedactedRoomMemberEventContent
  • RoomMessageEventContent::make_reply_to() and make_for_thread() have an extra parameter to support the recommended behavior for intentional mentions in replies according to Matrix 1.7
  • In Markdown, soft line breaks are transformed into hard line breaks when compiled into HTML.

Improvements:

  • Add convenience methods for push::Ruleset:
    • To update the server-default push rules
    • To remove a user-defined push rule
  • Add AsRef<[u8]> implementations for identifier types
  • Add InitialStateEvent::{new, to_raw, to_raw_any}
  • Add a convenience method to construct RoomEncryptionEventContent with the recommended defaults.
  • PushCondition::EventMatch and FlattenedJson now use escaped dotted paths (MSC3873 / Matrix 1.7)
  • Add support for event_property_is push condition (MSC3758 / Matrix 1.7)
  • Add support for event_property_contains push condition (MSC3966 / Matrix 1.7)
  • Add FullStateEventContent::redact
  • Add new methods for RoomPowerLevels:
    • user_can_ban
    • user_can_invite
    • user_can_kick
    • user_can_redact
    • user_can_send_message
    • user_can_send_state
    • user_can_trigger_room_notification
  • Add MessageType::sanitize behind the unstable-sanitize feature
  • Add MatrixVersion::V1_7
  • Stabilize support for annotations and reactions (MSC2677 / Matrix 1.7)
  • Add support for intentional mentions push rules (MSC3952 / Matrix 1.7)
  • Stabilize support for VoIP signalling improvements (MSC2746 / Matrix 1.7)
  • Make the generated and stripped plain text reply fallback behavior more compatible with most of the Matrix ecosystem.
  • Add support for intentional mentions according to MSC3952 / Matrix 1.7

0.11.3

Bug fixes:

  • Move .m.rule.roomnotif push rule before .m.rule.tombstone in the server default push rules, according to a spec clarification in Matrix 1.6

Improvements:

  • Add MatrixVersion::V1_6
  • Stabilize support for fixed base64 for SAS verification (MSC3783 / Matrix 1.6)
    • Deprecate MessageAuthenticationCode::HkdfHmacSha256

0.11.2

Bug fixes:

  • Don't accept colons in the localpart given to UserId::parse_with_servername even with feature = "compat"

Improvements:

  • Derive Hash for ReceiptType and ReceiptThread
  • Update EventContent derive macro to emit new type definitions and type aliases under the same visibility as the input type (this fixes a future- compatibility warning when deriving EventContent on a non-pub type)

0.11.1

Improvements:

  • Make alternate Debug representation of MilliSecondsSinceUnixEpoch and SecondsSinceUnixEpoch more compact (remove newlines)

0.11.0

Bug fixes:

  • HTML-relevant characters (<, >, etc) in plaintext replies are now escaped during creation of the rich reply
  • Don't include sensitive information in Debug-format of types from the events::key and events::secret modules
  • Fix deserialization of RoomMessageEventContent and RoomEncryptedEventContent when there is no relation
  • Fix deserialization of StateUnsigned when the prev_content is redacted
  • Allow to deserialize PushCondition with unknown kind
  • Allow to deserialize push::Action with unknown value
  • Only percent-encode reserved characters in endpoint URL path

Breaking changes:

  • Remove deprecated EventType enum
  • Remove deprecated constructors for RoomMessageEventContent
  • Remove serde::vec_as_map_of_empty from the public API
  • Remove the api::AuthScheme::QueryOnlyAccessToken variant, which is no longer used
  • The #[ruma_api(header)] attribute of the ruma_api macro now accepts an arbitrary http::header::HeaderName
    • To continue using constants from http::header, they must be imported in the module calling the macro.
  • Make name optional on SecretStorageKeyEventContent. Default constructor has been adjusted as well to not require this field.
  • Rename push::PusherData to HttpPusherData and make the url field required
  • Remove Ruleset::add and the implementation of Extend<AnyPushRule> for Ruleset
  • Make EndpointError construction infallible
    • EndpointError::try_from_http_request has been replaced by EndpointError::from_http_request
    • FromHttpResponseError<E>::Server now contains E instead of ServerError<E>
    • ServerError<E> has been removed
    • MatrixError is now an enum with the Json variant containing the previous fields
  • Change the ignored_users field of IgnoredUserListEventContent to a map of empty structs, to allow eventual fields to be added, as intended by the spec
  • Make SimplePushRule and associated types generic over the expected type of the rule_id
  • Deduplicate and group relation structs in events::relation:
    • Move relation structs under events::room::message to events::relation
    • Move common relation structs under events::room::encrypted to events::relation and remove duplicate types
    • Remove events::reaction::Relation and use events::relation::Annotation instead
    • Remove events::key::verification::Relation and use events::relation::Reference instead
  • Rename events::relation::Relations to BundledRelations
  • Make the redacted_because field in UnsignedRedacted non-optional and replace parameterless new constructor by one that takes a redaction event (like new_because previously, which is now removed)
  • Move the Unsigned associated type from StateEventContent to OriginalStateEventContent
    • Redacted*EventContents don't have an unsigned type anymore
  • Remove the serde::urlencoded module
    • Query string (de)serialization is now done by the serde_html_form crate
  • Rename RoomEventType to TimelineEventType
  • Remove SecretStorageKeyEventContent's implementation of Deserialize
    • Use EventContentFromType::from_parts instead
  • Remove StateUnsignedFromParts
    • Replace it with a bound on DeserializeOwned
  • Remove Raw::deserialize_content
    • Instead, use .deserialize_as::<T>() or .cast_ref::<T>().deserialize_with_type()
  • Remove EventContent::from_parts
    • Replace it with EventContentFromType::from_parts
  • The serde::StringEnum derive now also generates a Debug implementation

Improvements:

  • Add MatrixVersion::V1_4 and MatrixVersion::V1_5
  • Stabilize default room server ACL push rule
  • Stabilize room_types in directory::Filter and room_type in directory::PublicRoomsChunk
  • Stabilize support for private read receipts
  • Add stable support for threads
    • Move Relation::Thread and associated types and methods out of unstable-msc3440
    • Add parameter to RoomMessageEventContent::make_reply_to to be thread-aware
    • Add RoomMessageEventContent::make_for_reply
  • Stabilize support for event replacements (edits)
  • Add support for read receipts for threads (MSC3771 / Matrix 1.4)
  • Add push::PredefinedRuleId and associated types as a list of predefined push rule IDs
  • Add convenience methods to Ruleset
    • Ruleset::get to access a push rule
    • Ruleset::insert to add or update user push rules
    • Ruleset::set_enabled to change the enabled state of push rules
    • Ruleset::set_actions to change the actions of push rules
  • Add support for bundled reference relations (MSC3267 / Matrix 1.5)
  • Add the formatted field on KeyVerificationRequestEventContent (Matrix 1.5)
  • Add content accessors for Any*StateEvent enums
  • Add the DebugAsRefStr derive macro to ruma_common::serde

0.10.5

Improvements:

  • Add support for #[incoming_derive(!Debug)] to the Incoming derive macro

0.10.4

Bug fixes:

  • Fix MatrixToUri parsing for non-url-encoded room aliases

0.10.3

Bug fixes:

  • Fix ruma-common not compiling with the Cargo features events and unstable-msc2677 active, and unstable-msc2676 inactive

0.10.2

Improvements:

  • Add relations accessors to event enum types:
    • AnyMessageLikeEvent and AnySyncMessageLikeEvent
    • AnyStateEvent and AnySyncStateEvent
    • AnyTimelineEvent and AnySyncTimelineEvent

0.10.1

Improvements:

  • Add RoomMessageEventContent::make_reply_to
    • Deprecate reply constructors in favor of the new method

0.10.0

Bug fixes:

Breaking changes:

  • Add user_id field to PushConditionRoomCtx
  • Remove PartialEq implementation on NotificationPowerLevels
  • Remove PartialEq implementation for events::call::SessionDescription
  • Use new events::call::AnswerSessionDescription for CallAnswerEventContent and OfferSessionDescription for CallInviteEventContent
  • Use new VoipVersionId and VoipId types for events::call events
  • Remove RoomName / OwnedRoomName and replace usages with str / String
  • Remove RoomMessageFeedbackEvent and associated types and variants according to MSC3582
  • Move CanonicalJson, CanonicalJsonObject and CanonicalJsonError out of the serde module and behind the cargo feature flag canonical-json
  • Make identifiers matrix URI constructors generic over owned parameters
    • Split RoomId matrix URI constructors between methods with and without routing
  • Allow to add routing servers to RoomId::matrix_to_event_uri()
  • Move receipt::ReceiptType to events::receipt
  • Make Clone as supertrait of api::OutgoingRequest
  • Rename Any[Sync]RoomEvent to Any[Sync]TimelineEvent
  • RoomMemberEvent and related types now have a custom unsigned type including the invite_room_state field, instead of the StateUnsigned type used by other state events

Improvements:

  • All push rules are now considered to not apply to events sent by the user themselves
  • Change events::relation::BundledAnnotation to a struct instead of an enum
    • Remove BundledReaction
  • Add unstable support for polls (MSC3381)
  • Add unstable support for Improved Signalling for 1:1 VoIP (MSC2746)
  • Add support for knocking in events::room::member::MembershipChange
  • Add MatrixVersion::V1_3
  • Deprecate the sender_key and device_id fields for encrypted events (MSC3700)
  • Move the relations field of events::unsigned types out of unstable-msc2675
  • Deserialize stringified integers for power levels without the compat feature
  • Add JoinRule::KnockRestricted (MSC3787)
  • Add MatrixVersionId::V10 (MSC3604)
  • Add methods to sanitize messages according to the spec behind the unstable-sanitize feature
    • Can also remove rich reply fallbacks
  • Implement From<Owned*Id> for identifiers::matrix_uri::MatrixId
  • Add unstable default push rule to ignore room server ACLs events (MSC3786)
  • Add unstable support for private read receipts (MSC2285)
  • Add unstable support for filtering public rooms by room type (MSC3827)

0.9.2

Bug fixes:

  • Fix serialization and deserialization of events with a dynamic event_type

0.9.1

Improvements:

  • Add StrippedPowerLevelsEvent::power_levels
  • Add (Sync)RoomMemberEvent::membership
  • Export events::room::member::Change
    • Prior to this, you couldn't actually do anything with the membership_change functions on various member event types

0.9.0

Bug fixes:

Breaking changes:

  • Several ruma crates have been merged into ruma-common
    • ruma-api has moved into api, behind a feature flag
    • ruma-events has moved into events, behind a feature flag
    • ruma-identifiers types are available at the root of the crate
    • ruma-serde has moved into serde
  • The events::*MessageEvent types have been renamed to *MessageLikeEvent
  • Change events::room media types to accept either a plain file or an encrypted file, not both simultaneously
  • Change events::room media types to use Duration where applicable
  • Move prev_content into unsigned
  • Rename identifiers::Error to IdParseError
  • Fix the RoomMessageEventContent::*_reply_plain methods that now return a message with a formatted_body, according to the spec. Therefore, they only accept OriginalRoomMessageEvents like their HTML counterparts.
  • Update the state_key field of state events to be of a different type depending on the content type. You now no longer need to validate manually that m.room.member events have a user ID as their state key!

Improvements:

  • Add unstable support for extensible events (MSCs 1767, 3551, 3552, 3553, 3246, 3488)
  • Add unstable support for translatable text content (MSC3554)
  • Add unstable support for voice messages (MSC3245)
  • Add unstable support for threads (MSC3440)
  • Add ReceiptEventContent::user_receipt
  • Make Restricted::allow public
  • Conversion from RoomPowerLevels to RoomPowerLevelsEventContent

0.8.0

Breaking changes:

  • Update ruma-identifiers dependency

0.7.0

Breaking changes:

  • Update ruma-identifiers dependency
  • Use new Base64 type for key field of SignedKey

0.6.0

Breaking changes:

  • Make a few enums non-exhaustive
  • Upgrade dependencies

0.5.4

Improvements:

  • Add to_device module containing DeviceIdOrAllDevices

0.5.3

Improvements:

  • Add instance_id field to ProtocolInstance[Init] under the unstable-pre-spec feature

0.5.2

Improvements:

  • Add thirdparty::ThirdPartyIdentifier

0.5.1

Improvements:

  • Add receipt::ReceiptType
  • Add MilliSecondsSinceUnixEpoch and SecondsSinceUnixEpoch types
  • Bump dependency versions

0.5.0

Breaking changes:

  • Rename push::RulesetIter to push::RulesetIntoIter
  • Change the return type of push::Ruleset::get_actions from an iterator to a slice

Improvements:

  • Add push::Ruleset::iter() for borrowing iteration of rulesets
  • Add conversions between AnyPushRule and AnyPushRuleRef (AnyPushRule::as_ref and AnyPushRuleRef::to_owned)
  • Add push::Ruleset::get_match() for finding the first matching push rule for an event. This is pretty much the same thing as get_actions() but returns the entire push rule, not just its actions.

0.4.0

Breaking changes:

  • Use ruma_identifiers::MxcUri instead of String for avatar_url field in directory::PublicRoomsChunk
  • Use ruma_identifiers::RoomId instead of String for room_id field in push::PushConditionRoomCtx
  • Upgrade ruma-identifiers dependency to 0.19.0

0.3.1

Bug fixes:

  • Fix push::PushCondition::applies for empty value and pattern

0.3.0

Breaking changes:

  • Update set of conversion trait implementations for enums
  • Replace Vec by IndexSet in push::Ruleset
  • Replace push::AnyPushRule with an enum (the original struct still exists as just PushRule in ruma-client-api)
  • … (there's a lot more, but this changelog was not kept up to date; PRs to improve it are welcome)

Improvements:

  • Add the thirdparty module
  • Add directory::{Filter, PublicRoomsChunk, RoomNetwork} (moved from ruma_client_api::r0::directory)
  • Add push::{PusherData, PushFormat} (moved from ruma_client_api::r0::push)
  • Add authentication::TokenType (moved from ruma_client_api::r0::account:request_openid_token)
  • Add an IntoIterator implementation for Ruleset
  • Add push::Ruleset::get_actions
    • Add push::PushCondition::applies
    • Add push::{FlattenedJson, PushConditionRoomCtx}

0.2.0

Breaking changes:

  • Make most types defined by the crate #[non_exhaustive]