diff --git a/synapse/rest/client/relations.py b/synapse/rest/client/relations.py index 6ce64906e5..bab109f21e 100644 --- a/synapse/rest/client/relations.py +++ b/synapse/rest/client/relations.py @@ -20,7 +20,10 @@ import logging import re -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Annotated + +from pydantic import StrictBool, StrictStr +from pydantic.types import StringConstraints from synapse.api.constants import Direction, Membership from synapse.api.errors import SynapseError @@ -43,7 +46,7 @@ from synapse.streams.config import ( ) from synapse.types import JsonDict, RoomStreamToken, StreamKeyType, StreamToken, UserID from synapse.types.handlers.sliding_sync import PerConnectionState, SlidingSyncConfig -from synapse.types.rest.client import ThreadUpdatesBody +from synapse.types.rest.client import RequestBodyModel, SlidingSyncBody if TYPE_CHECKING: from synapse.server import HomeServer @@ -51,6 +54,39 @@ if TYPE_CHECKING: logger = logging.getLogger(__name__) +class ThreadUpdatesBody(RequestBodyModel): + """ + Thread updates companion endpoint request body (MSC4360). + + Allows paginating thread updates using the same room selection as a sliding sync + request. This enables clients to fetch thread updates for the same set of rooms + that were included in their sliding sync response. + + Attributes: + lists: Sliding window API lists, using the same structure as SlidingSyncBody.lists. + If provided along with room_subscriptions, the union of rooms from both will + be used. + room_subscriptions: Room subscription API rooms, using the same structure as + SlidingSyncBody.room_subscriptions. If provided along with lists, the union + of rooms from both will be used. + include_roots: Whether to include the thread root events in the response. + Defaults to False. + + If neither lists nor room_subscriptions are provided, thread updates from all + joined rooms are returned. + """ + + lists: ( + dict[ + Annotated[str, StringConstraints(max_length=64, strict=True)], + SlidingSyncBody.SlidingSyncList, + ] + | None + ) = None + room_subscriptions: dict[StrictStr, SlidingSyncBody.RoomSubscription] | None = None + include_roots: StrictBool = False + + class RelationPaginationServlet(RestServlet): """API to paginate relations on an event by topological ordering, optionally filtered by relation type and event type. diff --git a/synapse/types/rest/client/__init__.py b/synapse/types/rest/client/__init__.py index 28d5a2b566..1b040a7e1f 100644 --- a/synapse/types/rest/client/__init__.py +++ b/synapse/types/rest/client/__init__.py @@ -429,34 +429,3 @@ class SlidingSyncBody(RequestBodyModel): return value -class ThreadUpdatesBody(RequestBodyModel): - """ - Thread updates companion endpoint request body (MSC4360). - - Allows paginating thread updates using the same room selection as a sliding sync - request. This enables clients to fetch thread updates for the same set of rooms - that were included in their sliding sync response. - - Attributes: - lists: Sliding window API lists, using the same structure as SlidingSyncBody.lists. - If provided along with room_subscriptions, the union of rooms from both will - be used. - room_subscriptions: Room subscription API rooms, using the same structure as - SlidingSyncBody.room_subscriptions. If provided along with lists, the union - of rooms from both will be used. - include_roots: Whether to include the thread root events in the response. - Defaults to False. - - If neither lists nor room_subscriptions are provided, thread updates from all - joined rooms are returned. - """ - - lists: ( - dict[ - Annotated[str, StringConstraints(max_length=64, strict=True)], - SlidingSyncBody.SlidingSyncList, - ] - | None - ) = None - room_subscriptions: dict[StrictStr, SlidingSyncBody.RoomSubscription] | None = None - include_roots: StrictBool = False