Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MSC3567: Allow requesting events from the start/end of the room history #3567

Merged
merged 5 commits into from
Jan 16, 2022
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 57 additions & 0 deletions proposals/3567-optional-from-on-messages.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# MSC3567: Allow requesting events from the start/end of the room history

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a reason why synapse supports pagination from the start of the room history?


It can be useful to request the latest events in a room directly without calling
`/_matrix/client/v3/sync` first to fetch the room state. Some use-casse include:
clokep marked this conversation as resolved.
Show resolved Hide resolved

* Requesting events using a different filter after receiving a `/sync` response.
clokep marked this conversation as resolved.
Show resolved Hide resolved
* A client which does not need to fully sync an account, but wishes to inspect a
specific room's history (perhaps for exporting or auditing).
richvdh marked this conversation as resolved.
Show resolved Hide resolved


## Proposal

The `from` field on the [`/_matrix/client/v3/rooms/{roomId}/messages`](https://spec.matrix.org/v1.1/client-server-api/#get_matrixclientv3roomsroomidmessages)
becomes optional. If it is not provided, the homeserver shall return a list of
messages from the start or end (per the value of the `dir` parameter) of the
room history.
clokep marked this conversation as resolved.
Show resolved Hide resolved

Note that Synapse already implements this, but it is not spec-compliant. It is
known to be used by Element Android [^1], and there are other cases involving
threads [^2], which shows real-world usage that this would be valuable.
clokep marked this conversation as resolved.
Show resolved Hide resolved


## Potential issues

None.


## Alternatives

The alternative is today's status quo: a client must first make a request to
`/_matrix/client/v3/sync` and then follow-up that request with queries to
`/_matrix/client/v3/rooms/{roomId}/messages`. This is clunky if the client is
going to throw away most of the information received from the `/sync` request.
richvdh marked this conversation as resolved.
Show resolved Hide resolved

The behavior also seems undefined if a different `filter` parameter is provided
for the call to `/sync` compared to the one used for `/messages`.


## Security considerations

None.


## Unstable prefix

Since this is modifying the endpoint to support not including a field, no unstable
prefix is necessary.


## Dependencies

N/A

[^1]: https://github.com/matrix-org/synapse/issues/5538

[^2]: In order to list all threads in a room without pulling the history locally
it uses `/messages` to push the filtering onto the homeserver. See https://github.com/matrix-org/matrix-js-sdk/pull/2065