Stripped state; remove room versions

kegan/spaces-summary
Kegan Dougal 5 years ago
parent 09b0848cc8
commit 7b2f3dc59f

@ -83,14 +83,18 @@ which returns:
"present": true, "present": true,
"order": "abcd", "order": "abcd",
"auto_join": true "auto_join": true
} },
"room_id": "!ol19s:bleecker.street",
"sender": "@alice:bleecker.street"
}, },
{ {
"type": "m.space.parent", "type": "m.space.parent",
"state_key": "!space:example.com", "state_key": "!space:example.com",
"content": { "content": {
"via": ["example.com"] "via": ["example.com"]
} },
"room_id": "!ol19s:bleecker.street",
"sender": "@alice:bleecker.street"
} }
] ]
} }
@ -130,8 +134,9 @@ Justifications for the response API shape are as follows:
this room as a parent. this room as a parent.
* `room_type` which is the room type, which is `m.space` for subspaces. It can be omitted if there is no room type * `room_type` which is the room type, which is `m.space` for subspaces. It can be omitted if there is no room type
in which case it should be interpreted as a normal room. in which case it should be interpreted as a normal room.
- `events`: These are the edges of the graph. The objects in the array are complete (or stripped?) `m.space.parent` - `events`: These are the edges of the graph. The objects in the array are stripped `m.space.parent`
or `m.space.child` events. or `m.space.child` events. This means that they only contain the `type`, `state_key`, `content`, `room_id` and `sender`
keys, similar to `invite_state` in the `/sync` API.
- `next_batch`: Its presence indicates that there are more results to return. - `next_batch`: Its presence indicates that there are more results to return.
Server behaviour: Server behaviour:
@ -225,10 +230,16 @@ Justifications for the request API shape are the same as before with one excepti
the server should not return node information under `rooms` nor should it return _any state events in this room_. NB: state the server should not return node information under `rooms` nor should it return _any state events in this room_. NB: state
events which _point to_ this room should still be included. events which _point to_ this room should still be included.
The response body remains unchanged from the client format with the exception of a `version` field added to each room object under `rooms`. The response body remains unchanged from the client format. Servers are unable to verify the auth chain of the returned events
Servers MUST use this field to determine how to decode the events in `events`. If the room version is unknown, the server may ignore these as they are typically not joined to the rooms returned. Servers MUST NOT persist these events in any potential room DAG that
events/rooms. Servers are unable to verify the auth chain of the returned events as they are typically not joined to the rooms returned. may be created if the server were to join the room. The decision to use stripped state events instead of the actual events
Servers MUST NOT persist these events in any potential room DAG that may be created if the server were to join the room. was made because:
- Clients just care about the data, and servers shouldn't be persisting the unverified events in the DAG, meaning data like
`prev_events` and `auth_events` would be useless.
- Events deserialise differently based on the room version which would need to be injected into the response if we decided
to use full events. In addition, because this endpoint returns events from multiple rooms then servers would need to partially
deserialise the event to extract the `room_id` field to work out which room version to use. This is bad because it relies on
the `room_id` field never changing in a future room version.
Sending server behaviour: Sending server behaviour:
- When walking the spaces graph, if the server is not joined to a given room, remember the `via` server names and the room ID. - When walking the spaces graph, if the server is not joined to a given room, remember the `via` server names and the room ID.

Loading…
Cancel
Save