diff --git a/synapse/events/utils.py b/synapse/events/utils.py
index f937fd4698..54f94add4d 100644
--- a/synapse/events/utils.py
+++ b/synapse/events/utils.py
@@ -49,7 +49,7 @@ from synapse.api.errors import Codes, SynapseError
from synapse.api.room_versions import RoomVersion
from synapse.types import JsonDict, Requester
-from . import EventBase, make_event_from_dict
+from . import EventBase, StrippedStateEvent, make_event_from_dict
if TYPE_CHECKING:
from synapse.handlers.relations import BundledAggregations
@@ -854,3 +854,30 @@ def strip_event(event: EventBase) -> JsonDict:
"content": event.content,
"sender": event.sender,
}
+
+
+def parse_stripped_state_event(raw_stripped_event: Any) -> Optional[StrippedStateEvent]:
+ """
+ Given a raw value from an event's `unsigned` field, attempt to parse it into a
+ `StrippedStateEvent`.
+ """
+ if isinstance(raw_stripped_event, dict):
+ # All of these fields are required
+ type = raw_stripped_event.get("type")
+ state_key = raw_stripped_event.get("state_key")
+ sender = raw_stripped_event.get("sender")
+ content = raw_stripped_event.get("content")
+ if (
+ isinstance(type, str)
+ and isinstance(state_key, str)
+ and isinstance(sender, str)
+ and isinstance(content, dict)
+ ):
+ return StrippedStateEvent(
+ type=type,
+ state_key=state_key,
+ sender=sender,
+ content=content,
+ )
+
+ return None
|