mirror of
https://github.com/element-hq/synapse.git
synced 2025-03-14 09:45:51 +00:00
Merge 816ce0d373
into 59a15da433
This commit is contained in:
commit
6ea77b4326
6 changed files with 32 additions and 11 deletions
1
changelog.d/17881.feature
Normal file
1
changelog.d/17881.feature
Normal file
|
@ -0,0 +1 @@
|
|||
Stabilize MSC2409 (Send typing, presence and receipts to appservices).
|
|
@ -86,6 +86,7 @@ class ApplicationService:
|
|||
rate_limited: bool = True,
|
||||
ip_range_whitelist: Optional[IPSet] = None,
|
||||
supports_ephemeral: bool = False,
|
||||
supports_ephemeral_legacy: bool = False,
|
||||
msc3202_transaction_extensions: bool = False,
|
||||
msc4190_device_management: bool = False,
|
||||
):
|
||||
|
@ -100,6 +101,7 @@ class ApplicationService:
|
|||
self.id = id
|
||||
self.ip_range_whitelist = ip_range_whitelist
|
||||
self.supports_ephemeral = supports_ephemeral
|
||||
self.supports_ephemeral_legacy = supports_ephemeral_legacy
|
||||
self.msc3202_transaction_extensions = msc3202_transaction_extensions
|
||||
self.msc4190_device_management = msc4190_device_management
|
||||
|
||||
|
|
|
@ -353,7 +353,16 @@ class ApplicationServiceApi(SimpleHttpClient):
|
|||
if service.supports_ephemeral:
|
||||
body.update(
|
||||
{
|
||||
# TODO: Update to stable prefixes once MSC2409 completes FCP merge.
|
||||
"ephemeral": ephemeral,
|
||||
# NOTE: This is actually https://github.com/matrix-org/matrix-spec-proposals/blob/tulir/appservice-to-device/proposals/4203-appservice-to-device.md
|
||||
# but for legacy reasons uses an older MSC number.
|
||||
"de.sorunome.msc2409.to_device": to_device_messages,
|
||||
}
|
||||
)
|
||||
elif service.supports_ephemeral_legacy:
|
||||
# Support to be removed in a future spec version.
|
||||
body.update(
|
||||
{
|
||||
"de.sorunome.msc2409.ephemeral": ephemeral,
|
||||
"de.sorunome.msc2409.to_device": to_device_messages,
|
||||
}
|
||||
|
|
|
@ -170,7 +170,14 @@ def _load_appservice(
|
|||
if as_info.get("ip_range_whitelist"):
|
||||
ip_range_whitelist = IPSet(as_info.get("ip_range_whitelist"))
|
||||
|
||||
supports_ephemeral = as_info.get("de.sorunome.msc2409.push_ephemeral", False)
|
||||
supports_ephemeral = as_info.get("receive_ephemeral", False)
|
||||
|
||||
# For ASes that haven't transitioned to the stable fields yet
|
||||
supports_ephemeral_legacy = False
|
||||
if not supports_ephemeral:
|
||||
supports_ephemeral_legacy = as_info.get(
|
||||
"de.sorunome.msc2409.push_ephemeral", False
|
||||
)
|
||||
|
||||
# Opt-in flag for the MSC3202-specific transactional behaviour.
|
||||
# When enabled, appservice transactions contain the following information:
|
||||
|
@ -206,6 +213,7 @@ def _load_appservice(
|
|||
rate_limited=rate_limited,
|
||||
ip_range_whitelist=ip_range_whitelist,
|
||||
supports_ephemeral=supports_ephemeral,
|
||||
supports_ephemeral_legacy=supports_ephemeral_legacy,
|
||||
msc3202_transaction_extensions=msc3202_transaction_extensions,
|
||||
msc4190_device_management=msc4190_enabled,
|
||||
)
|
||||
|
|
|
@ -405,10 +405,12 @@ class ExperimentalConfig(Config):
|
|||
# MSC3266 (room summary api)
|
||||
self.msc3266_enabled: bool = experimental.get("msc3266_enabled", False)
|
||||
|
||||
# MSC2409 (this setting only relates to optionally sending to-device messages).
|
||||
# MSC4203 (Sending to-device events to appservices).
|
||||
# NOTE: This used to be used to be part of MSC2409 but was split out, hence the config
|
||||
# key not matching the MSC.
|
||||
# Presence, typing and read receipt EDUs are already sent to application services that
|
||||
# have opted in to receive them. If enabled, this adds to-device messages to that list.
|
||||
self.msc2409_to_device_messages_enabled: bool = experimental.get(
|
||||
self.msc4203_to_device_messages_enabled: bool = experimental.get(
|
||||
"msc2409_to_device_messages_enabled", False
|
||||
)
|
||||
|
||||
|
|
|
@ -81,8 +81,8 @@ class ApplicationServicesHandler:
|
|||
self.clock = hs.get_clock()
|
||||
self.notify_appservices = hs.config.worker.should_notify_appservices
|
||||
self.event_sources = hs.get_event_sources()
|
||||
self._msc2409_to_device_messages_enabled = (
|
||||
hs.config.experimental.msc2409_to_device_messages_enabled
|
||||
self._msc4203_to_device_messages_enabled = (
|
||||
hs.config.experimental.msc4203_to_device_messages_enabled
|
||||
)
|
||||
self._msc3202_transaction_extensions_enabled = (
|
||||
hs.config.experimental.msc3202_transaction_extensions
|
||||
|
@ -242,9 +242,8 @@ class ApplicationServicesHandler:
|
|||
will cause this function to return early.
|
||||
|
||||
Ephemeral events will only be pushed to appservices that have opted into
|
||||
receiving them by setting `push_ephemeral` to true in their registration
|
||||
file. Note that while MSC2409 is experimental, this option is called
|
||||
`de.sorunome.msc2409.push_ephemeral`.
|
||||
receiving them by setting `recieve_ephemeral` to true in their registration
|
||||
file.
|
||||
|
||||
Appservices will only receive ephemeral events that fall within their
|
||||
registered user and room namespaces.
|
||||
|
@ -270,7 +269,7 @@ class ApplicationServicesHandler:
|
|||
# Ignore to-device messages if the feature flag is not enabled
|
||||
if (
|
||||
stream_key == StreamKeyType.TO_DEVICE
|
||||
and not self._msc2409_to_device_messages_enabled
|
||||
and not self._msc4203_to_device_messages_enabled
|
||||
):
|
||||
return
|
||||
|
||||
|
@ -588,7 +587,7 @@ class ApplicationServicesHandler:
|
|||
new_token,
|
||||
)
|
||||
|
||||
# According to MSC2409, we'll need to add 'to_user_id' and 'to_device_id' fields
|
||||
# According to MSC4203, we'll need to add 'to_user_id' and 'to_device_id' fields
|
||||
# to the event JSON so that the application service will know which user/device
|
||||
# combination this messages was intended for.
|
||||
#
|
||||
|
|
Loading…
Add table
Reference in a new issue