mirror of
https://github.com/matrix-org/matrix-spec
synced 2026-04-30 22:24:09 +02:00
Compare commits
16 commits
8de60898af
...
d900f684a3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d900f684a3 | ||
|
|
67743d5715 | ||
|
|
338047ec7b | ||
|
|
0439707624 | ||
|
|
f4e6e6dea9 | ||
|
|
73fcf366a0 | ||
|
|
0a1efd8c9c | ||
|
|
2c6ddafb43 | ||
|
|
fc81171081 | ||
|
|
c74befd111 | ||
|
|
110ae95ce8 | ||
|
|
264f8fed7a | ||
|
|
2933ab5f52 | ||
|
|
03c96e505b | ||
|
|
5be34d8f2b | ||
|
|
5e9f6dd130 |
5
.github/workflows/main.yml
vendored
5
.github/workflows/main.yml
vendored
|
|
@ -284,10 +284,11 @@ jobs:
|
||||||
npm i
|
npm i
|
||||||
npm run get-proposals
|
npm run get-proposals
|
||||||
- name: "⚙️ hugo"
|
- name: "⚙️ hugo"
|
||||||
|
env:
|
||||||
|
HUGO_PARAMS_VERSION_STATUS: "historical"
|
||||||
# Create a baseURL like `/v1.2` out of the `v1.2` tag
|
# Create a baseURL like `/v1.2` out of the `v1.2` tag
|
||||||
run: |
|
run: |
|
||||||
echo -e '[params.version]\nstatus="historical"' > historical.toml
|
hugo --baseURL "/${GITHUB_REF/refs\/tags\//}" -d "spec"
|
||||||
hugo --config config.toml,historical.toml --baseURL "/${GITHUB_REF/refs\/tags\//}" -d "spec"
|
|
||||||
|
|
||||||
- name: "📥 Spec definition download"
|
- name: "📥 Spec definition download"
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
|
|
|
||||||
1
changelogs/client_server/newsfragments/2095.feature
Normal file
1
changelogs/client_server/newsfragments/2095.feature
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Add `m.topic` content block to enable rich text in `m.room.topic` events as per [MSC3765](https://github.com/matrix-org/matrix-spec-proposals/pull/3765).
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
"Public" rooms in profile look-ups are defined through their join rule and history visibility.
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
"Public" rooms in user directory queries are defined through their join rule and history visibility.
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
Rooms published in `/publicRooms` don't necessarily have `public` join rules or `world_readable` history visibility.
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
"Public" rooms with respect to call invites are defined through their join rule.
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
"Public" rooms have no specific meaning with respect to moderation policy lists.
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
"Public" rooms with respect to presence are defined through their join rule.
|
||||||
1
changelogs/internal/newsfragments/2123.clarification
Normal file
1
changelogs/internal/newsfragments/2123.clarification
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Fix the historical info box when generating the historical spec in CI.
|
||||||
1
changelogs/server_server/newsfragments/2095.feature
Normal file
1
changelogs/server_server/newsfragments/2095.feature
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Add `m.topic` content block to enable rich text in `m.room.topic` events as per [MSC3765](https://github.com/matrix-org/matrix-spec-proposals/pull/3765).
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
Clarify that auth event of `content.join_authorised_via_users_server` is only necessary for `m.room.member` with a `membership` of `join`.
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
Rooms published in `/publicRooms` don't necessarily have `public` join rules or `world_readable` history visibility.
|
||||||
|
|
@ -2846,7 +2846,38 @@ re-invited.
|
||||||
|
|
||||||
{{% http-api spec="client-server" api="banning" %}}
|
{{% http-api spec="client-server" api="banning" %}}
|
||||||
|
|
||||||
### Listing rooms
|
### Room directory
|
||||||
|
|
||||||
|
Homeservers MAY publish a room directory to allow users to discover rooms. A room
|
||||||
|
can have one of two visibility settings in the directory:
|
||||||
|
|
||||||
|
`public`
|
||||||
|
The room will be shown in the published room directory.
|
||||||
|
|
||||||
|
`private`
|
||||||
|
The room will be hidden from the published room directory.
|
||||||
|
|
||||||
|
Clients can define a room's initial visibility in the directory via the `visibility`
|
||||||
|
parameter in [`/createRoom`](#post_matrixclientv3createroom). Irrespective of room
|
||||||
|
creation, clients can query and change a room's visibility in the directory through
|
||||||
|
the endpoints listed below, provided that the server permits this.
|
||||||
|
|
||||||
|
{{% boxes/warning %}}
|
||||||
|
The visibility setting merely defines whether a room is included in the published
|
||||||
|
room directory or not. It doesn't make any guarantees about the room's
|
||||||
|
[join rule](#mroomjoin_rules) or [history visibility](#room-history-visibility).
|
||||||
|
|
||||||
|
In particular, a visibility setting of `public` should not be confused with a `public`
|
||||||
|
join rule. Rooms with a join rule of `knock`, for instance, could reasonably be published
|
||||||
|
in the directory, too.
|
||||||
|
|
||||||
|
Similarly, a visibility setting of `public` does not necessarily imply a `world_readable`
|
||||||
|
history visibility.
|
||||||
|
|
||||||
|
To increase performance, servers MAY apply additional filters when listing the
|
||||||
|
directory, for instance, by automatically excluding rooms with `invite` join rules
|
||||||
|
that are not `world_readable` regardless of their visibility.
|
||||||
|
{{% /boxes/warning %}}
|
||||||
|
|
||||||
{{% http-api spec="client-server" api="list_public_rooms" %}}
|
{{% http-api spec="client-server" api="list_public_rooms" %}}
|
||||||
|
|
||||||
|
|
@ -2862,10 +2893,15 @@ re-invited.
|
||||||
|
|
||||||
#### Server behaviour
|
#### Server behaviour
|
||||||
|
|
||||||
Homeservers MUST at a minimum allow profile look-up for:
|
Homeservers MUST at a minimum allow profile look-up for users who are
|
||||||
|
visible to the requester based on their membership in rooms known to the
|
||||||
|
homeserver. This means:
|
||||||
|
|
||||||
- users that share a room with the requesting user
|
- users that share a room with the requesting user
|
||||||
- users that reside in public rooms known to the homeserver
|
- users who are joined to rooms known to the homeserver that have a
|
||||||
|
`public` [join rule](#mroomjoin_rules)
|
||||||
|
- users who are joined to rooms known to the homeserver that have a
|
||||||
|
`world_readable` [history visibility](#room-history-visibility)
|
||||||
|
|
||||||
In all other cases, homeservers MAY deny profile look-up by responding with
|
In all other cases, homeservers MAY deny profile look-up by responding with
|
||||||
403 and an error code of `M_FORBIDDEN`.
|
403 and an error code of `M_FORBIDDEN`.
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,9 @@ the entity making the decisions on filtering is best positioned to
|
||||||
interpret the rules how it sees fit.
|
interpret the rules how it sees fit.
|
||||||
|
|
||||||
Moderation policy lists are stored as room state events. There are no
|
Moderation policy lists are stored as room state events. There are no
|
||||||
restrictions on how the rooms can be configured (they could be public,
|
restrictions on how the rooms can be configured in terms of
|
||||||
private, encrypted, etc).
|
[join rules](#mroomjoin_rules), [history visibility](#room-history-visibility),
|
||||||
|
encryption, etc.
|
||||||
|
|
||||||
There are currently 3 kinds of entities which can be affected by rules:
|
There are currently 3 kinds of entities which can be affected by rules:
|
||||||
`user`, `server`, and `room`. All 3 are described with
|
`user`, `server`, and `room`. All 3 are described with
|
||||||
|
|
|
||||||
|
|
@ -68,5 +68,7 @@ will cause the server to automatically set their presence to `online`.
|
||||||
|
|
||||||
#### Security considerations
|
#### Security considerations
|
||||||
|
|
||||||
Presence information is shared with all users who share a room with the
|
Presence information is published to all users who share a room with the
|
||||||
target user. In large public rooms this could be undesirable.
|
target user. If the target user is a member of a room with a `public`
|
||||||
|
[join rule](#mroomjoin_rules), any other user in the federation is
|
||||||
|
able to gain access to the target user's presence. This could be undesirable.
|
||||||
|
|
|
||||||
|
|
@ -26,9 +26,10 @@ on certain keys of certain event types.
|
||||||
|
|
||||||
The supported keys to search over are:
|
The supported keys to search over are:
|
||||||
|
|
||||||
- `content.body` in `m.room.message`
|
- `content.body` in [`m.room.message`](/client-server-api/#mroommessage)
|
||||||
- `content.name` in `m.room.name`
|
- `content.name` in [`m.room.name`](/client-server-api/#mroomname)
|
||||||
- `content.topic` in `m.room.topic`
|
- In [`m.room.topic`](/client-server-api/#mroomtopic), `content.topic`
|
||||||
|
as well as the `body` of the `text/plain` representation in `content['m.topic']`.
|
||||||
|
|
||||||
The search will *not* include rooms that are end to end encrypted.
|
The search will *not* include rooms that are end to end encrypted.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -202,11 +202,13 @@ specific user, and should be set to the Matrix user ID of that user. Invites
|
||||||
without an `invitee` field are defined to be intended for any member of the
|
without an `invitee` field are defined to be intended for any member of the
|
||||||
room other than the sender of the event.
|
room other than the sender of the event.
|
||||||
|
|
||||||
Clients should consider an incoming call if they see a non-expired invite event where the `invitee` field is either
|
Clients should consider an incoming call if they see a non-expired invite event
|
||||||
absent or equal to their user's Matrix ID, however they should evaluate whether or not to ring based on their
|
where the `invitee` field is either absent or equal to their user's Matrix ID.
|
||||||
user's trust relationship with the callers and/or where the call was placed. As a starting point, it is
|
They should, however, evaluate whether or not to ring based on their user's trust
|
||||||
suggested that clients ignore call invites from users in public rooms. It is strongly recommended that
|
relationship with the callers and/or where the call was placed. As a starting
|
||||||
when clients do not ring for an incoming call invite, they still display the call invite in the room and
|
point, it is RECOMMENDED that clients ignore call invites in rooms with a
|
||||||
|
[join rule](#mroomjoin_rules) of `public`. When clients suppress ringing for an
|
||||||
|
incoming call invite, they SHOULD still display the call invite in the room and
|
||||||
annotate that it was ignored.
|
annotate that it was ignored.
|
||||||
|
|
||||||
##### Glare
|
##### Glare
|
||||||
|
|
|
||||||
|
|
@ -544,8 +544,8 @@ the following subset of the room state:
|
||||||
`third_party_invite` property, the current
|
`third_party_invite` property, the current
|
||||||
`m.room.third_party_invite` event with `state_key` matching
|
`m.room.third_party_invite` event with `state_key` matching
|
||||||
`content.third_party_invite.signed.token`, if any.
|
`content.third_party_invite.signed.token`, if any.
|
||||||
- If `content.join_authorised_via_users_server` is present,
|
- If `membership` is `join`, `content.join_authorised_via_users_server`
|
||||||
and the [room version supports restricted rooms](/rooms/#feature-matrix),
|
is present, and the [room version supports restricted rooms](/rooms/#feature-matrix),
|
||||||
then the `m.room.member` event with `state_key` matching
|
then the `m.room.member` event with `state_key` matching
|
||||||
`content.join_authorised_via_users_server`.
|
`content.join_authorised_via_users_server`.
|
||||||
|
|
||||||
|
|
@ -1048,11 +1048,10 @@ user's Matrix ID and the token delivered when the invite was stored,
|
||||||
this verification will prove that the `m.room.member` invite event comes
|
this verification will prove that the `m.room.member` invite event comes
|
||||||
from the user owning the invited third-party identifier.
|
from the user owning the invited third-party identifier.
|
||||||
|
|
||||||
## Public Room Directory
|
## Room Directory
|
||||||
|
|
||||||
To complement the [Client-Server
|
To complement the [room directory in the Client-Server API](/client-server-api#room-directory),
|
||||||
API](/client-server-api)'s room directory,
|
homeservers need a way to query the published rooms of another server.
|
||||||
homeservers need a way to query the public rooms for another server.
|
|
||||||
This can be done by making a request to the `/publicRooms` endpoint for
|
This can be done by making a request to the `/publicRooms` endpoint for
|
||||||
the server the room directory should be retrieved for.
|
the server the room directory should be retrieved for.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -87,12 +87,8 @@ paths:
|
||||||
- public
|
- public
|
||||||
- private
|
- private
|
||||||
description: |-
|
description: |-
|
||||||
A `public` visibility indicates that the room will be shown
|
The room's visibility in the server's [room directory](#room-directory).
|
||||||
in the published room list. A `private` visibility will hide
|
Defaults to `private`.
|
||||||
the room from the published room list. Rooms default to
|
|
||||||
`private` visibility if this key is not included. NB: This
|
|
||||||
should not be confused with `join_rules` which also uses the
|
|
||||||
word `public`.
|
|
||||||
room_alias_name:
|
room_alias_name:
|
||||||
type: string
|
type: string
|
||||||
description: |-
|
description: |-
|
||||||
|
|
@ -109,15 +105,17 @@ paths:
|
||||||
name:
|
name:
|
||||||
type: string
|
type: string
|
||||||
description: |-
|
description: |-
|
||||||
If this is included, an `m.room.name` event will be sent
|
If this is included, an [`m.room.name`](/client-server-api/#mroomname) event
|
||||||
into the room to indicate the name of the room. See Room
|
will be sent into the room to indicate the name for the room.
|
||||||
Events for more information on `m.room.name`.
|
This overwrites any [`m.room.name`](/client-server-api/#mroomname)
|
||||||
|
event in `initial_state`.
|
||||||
topic:
|
topic:
|
||||||
type: string
|
type: string
|
||||||
description: |-
|
description: |-
|
||||||
If this is included, an `m.room.topic` event will be sent
|
If this is included, an [`m.room.topic`](/client-server-api/#mroomtopic)
|
||||||
into the room to indicate the topic for the room. See Room
|
event with a `text/plain` mimetype will be sent into the room
|
||||||
Events for more information on `m.room.topic`.
|
to indicate the topic for the room. This overwrites any
|
||||||
|
[`m.room.topic`](/client-server-api/#mroomtopic) event in `initial_state`.
|
||||||
invite:
|
invite:
|
||||||
type: array
|
type: array
|
||||||
description: |-
|
description: |-
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
type: object
|
type: object
|
||||||
title: "PublicRoomsChunk"
|
title: "PublishedRoomsChunk"
|
||||||
properties:
|
properties:
|
||||||
canonical_alias:
|
canonical_alias:
|
||||||
type: string
|
type: string
|
||||||
|
|
@ -33,7 +33,9 @@ properties:
|
||||||
example: "!abcdefg:example.org"
|
example: "!abcdefg:example.org"
|
||||||
topic:
|
topic:
|
||||||
type: string
|
type: string
|
||||||
description: The topic of the room, if any.
|
description: |-
|
||||||
|
The plain text topic of the room. Omitted if no `text/plain` mimetype
|
||||||
|
exists in [`m.room.topic`](/client-server-api/#mroomtopic).
|
||||||
example: "All things general"
|
example: "All things general"
|
||||||
world_readable:
|
world_readable:
|
||||||
type: boolean
|
type: boolean
|
||||||
|
|
|
||||||
|
|
@ -13,28 +13,15 @@
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
type: object
|
type: object
|
||||||
description: A list of the rooms on the server.
|
description: A list of the published rooms on the server.
|
||||||
required: ["chunk"]
|
required: ["chunk"]
|
||||||
properties:
|
properties:
|
||||||
chunk:
|
chunk:
|
||||||
type: array
|
type: array
|
||||||
description: |-
|
description: |-
|
||||||
A paginated chunk of public rooms.
|
A paginated chunk of published rooms.
|
||||||
items:
|
items:
|
||||||
allOf:
|
$ref: "public_rooms_chunk.yaml"
|
||||||
- $ref: "public_rooms_chunk.yaml"
|
|
||||||
- type: object
|
|
||||||
title: PublicRoomsChunk
|
|
||||||
properties:
|
|
||||||
# Override description of join_rule
|
|
||||||
join_rule:
|
|
||||||
type: string
|
|
||||||
description: |-
|
|
||||||
The room's join rule. When not present, the room is assumed to
|
|
||||||
be `public`. Note that rooms with `invite` join rules are not
|
|
||||||
expected here, but rooms with `knock` rules are given their
|
|
||||||
near-public nature.
|
|
||||||
example: "public"
|
|
||||||
next_batch:
|
next_batch:
|
||||||
type: string
|
type: string
|
||||||
description: |-
|
description: |-
|
||||||
|
|
@ -50,7 +37,7 @@ properties:
|
||||||
total_room_count_estimate:
|
total_room_count_estimate:
|
||||||
type: integer
|
type: integer
|
||||||
description: |-
|
description: |-
|
||||||
An estimate on the total number of public rooms, if the
|
An estimate on the total number of published rooms, if the
|
||||||
server has an estimate.
|
server has an estimate.
|
||||||
example: {
|
example: {
|
||||||
"chunk": [
|
"chunk": [
|
||||||
|
|
|
||||||
|
|
@ -19,8 +19,7 @@ paths:
|
||||||
"/directory/list/room/{roomId}":
|
"/directory/list/room/{roomId}":
|
||||||
get:
|
get:
|
||||||
summary: Gets the visibility of a room in the directory
|
summary: Gets the visibility of a room in the directory
|
||||||
description: Gets the visibility of a given room on the server's public room
|
description: Gets the visibility of a given room in the server's room directory.
|
||||||
directory.
|
|
||||||
operationId: getRoomVisibilityOnDirectory
|
operationId: getRoomVisibilityOnDirectory
|
||||||
parameters:
|
parameters:
|
||||||
- in: path
|
- in: path
|
||||||
|
|
@ -32,7 +31,7 @@ paths:
|
||||||
type: string
|
type: string
|
||||||
responses:
|
responses:
|
||||||
"200":
|
"200":
|
||||||
description: The visibility of the room in the directory
|
description: The visibility of the room in the directory.
|
||||||
content:
|
content:
|
||||||
application/json:
|
application/json:
|
||||||
schema:
|
schema:
|
||||||
|
|
@ -50,7 +49,7 @@ paths:
|
||||||
"visibility": "public"
|
"visibility": "public"
|
||||||
}
|
}
|
||||||
"404":
|
"404":
|
||||||
description: The room is not known to the server
|
description: The room is not known to the server.
|
||||||
content:
|
content:
|
||||||
application/json:
|
application/json:
|
||||||
schema:
|
schema:
|
||||||
|
|
@ -66,12 +65,11 @@ paths:
|
||||||
put:
|
put:
|
||||||
summary: Sets the visibility of a room in the room directory
|
summary: Sets the visibility of a room in the room directory
|
||||||
description: |-
|
description: |-
|
||||||
Sets the visibility of a given room in the server's public room
|
Sets the visibility of a given room in the server's room directory.
|
||||||
directory.
|
|
||||||
|
|
||||||
Servers may choose to implement additional access control checks
|
Servers MAY implement additional access control checks, for instance,
|
||||||
here, for instance that room visibility can only be changed by
|
to ensure that a room's visibility can only be changed by the room creator
|
||||||
the room creator or a server administrator.
|
or a server administrator.
|
||||||
operationId: setRoomVisibilityOnDirectory
|
operationId: setRoomVisibilityOnDirectory
|
||||||
security:
|
security:
|
||||||
- accessTokenQuery: []
|
- accessTokenQuery: []
|
||||||
|
|
@ -97,7 +95,7 @@ paths:
|
||||||
- public
|
- public
|
||||||
description: |-
|
description: |-
|
||||||
The new visibility setting for the room.
|
The new visibility setting for the room.
|
||||||
Defaults to 'public'.
|
Defaults to `public`.
|
||||||
example: {
|
example: {
|
||||||
"visibility": "public"
|
"visibility": "public"
|
||||||
}
|
}
|
||||||
|
|
@ -114,7 +112,7 @@ paths:
|
||||||
response:
|
response:
|
||||||
value: {}
|
value: {}
|
||||||
"404":
|
"404":
|
||||||
description: The room is not known to the server
|
description: The room is not known to the server.
|
||||||
content:
|
content:
|
||||||
application/json:
|
application/json:
|
||||||
schema:
|
schema:
|
||||||
|
|
@ -129,9 +127,9 @@ paths:
|
||||||
- Room discovery
|
- Room discovery
|
||||||
/publicRooms:
|
/publicRooms:
|
||||||
get:
|
get:
|
||||||
summary: Lists the public rooms on the server.
|
summary: Lists a server's published room directory
|
||||||
description: |-
|
description: |-
|
||||||
Lists the public rooms on the server.
|
Lists a server's published room directory.
|
||||||
|
|
||||||
This API returns paginated responses. The rooms are ordered by the number
|
This API returns paginated responses. The rooms are ordered by the number
|
||||||
of joined members, with the largest rooms first.
|
of joined members, with the largest rooms first.
|
||||||
|
|
@ -154,13 +152,13 @@ paths:
|
||||||
- in: query
|
- in: query
|
||||||
name: server
|
name: server
|
||||||
description: |-
|
description: |-
|
||||||
The server to fetch the public room lists from. Defaults to the
|
The server to fetch the room directory from. Defaults to the
|
||||||
local server. Case sensitive.
|
local server. Case sensitive.
|
||||||
schema:
|
schema:
|
||||||
type: string
|
type: string
|
||||||
responses:
|
responses:
|
||||||
"200":
|
"200":
|
||||||
description: A list of the rooms on the server.
|
description: A list of the published rooms on the server.
|
||||||
content:
|
content:
|
||||||
application/json:
|
application/json:
|
||||||
schema:
|
schema:
|
||||||
|
|
@ -168,9 +166,9 @@ paths:
|
||||||
tags:
|
tags:
|
||||||
- Room discovery
|
- Room discovery
|
||||||
post:
|
post:
|
||||||
summary: Lists the public rooms on the server with optional filter.
|
summary: Lists a server's published room directory with an optional filter
|
||||||
description: |-
|
description: |-
|
||||||
Lists the public rooms on the server, with optional filter.
|
Lists a server's published room directory with an optional filter.
|
||||||
|
|
||||||
This API returns paginated responses. The rooms are ordered by the number
|
This API returns paginated responses. The rooms are ordered by the number
|
||||||
of joined members, with the largest rooms first.
|
of joined members, with the largest rooms first.
|
||||||
|
|
@ -182,7 +180,7 @@ paths:
|
||||||
- in: query
|
- in: query
|
||||||
name: server
|
name: server
|
||||||
description: |-
|
description: |-
|
||||||
The server to fetch the public room lists from. Defaults to the
|
The server to fetch the room directory from. Defaults to the
|
||||||
local server. Case sensitive.
|
local server. Case sensitive.
|
||||||
schema:
|
schema:
|
||||||
type: string
|
type: string
|
||||||
|
|
@ -253,7 +251,7 @@ paths:
|
||||||
required: true
|
required: true
|
||||||
responses:
|
responses:
|
||||||
"200":
|
"200":
|
||||||
description: A list of the rooms on the server.
|
description: A filtered list of the published rooms on the server.
|
||||||
content:
|
content:
|
||||||
application/json:
|
application/json:
|
||||||
schema:
|
schema:
|
||||||
|
|
|
||||||
|
|
@ -20,10 +20,17 @@ paths:
|
||||||
post:
|
post:
|
||||||
summary: Searches the user directory.
|
summary: Searches the user directory.
|
||||||
description: |-
|
description: |-
|
||||||
Performs a search for users. The homeserver may
|
Performs a search for users. The homeserver may determine which
|
||||||
determine which subset of users are searched, however the homeserver
|
subset of users are searched. However, the homeserver MUST at a
|
||||||
MUST at a minimum consider the users the requesting user shares a
|
minimum consider users who are visible to the requester based
|
||||||
room with and those who reside in public rooms (known to the homeserver).
|
on their membership in rooms known to the homeserver. This means:
|
||||||
|
|
||||||
|
- users that share a room with the requesting user
|
||||||
|
- users who are joined to rooms known to the homeserver that have a
|
||||||
|
`public` [join rule](#mroomjoin_rules)
|
||||||
|
- users who are joined to rooms known to the homeserver that have a
|
||||||
|
`world_readable` [history visibility](#room-history-visibility)
|
||||||
|
|
||||||
The search MUST consider local users to the homeserver, and SHOULD
|
The search MUST consider local users to the homeserver, and SHOULD
|
||||||
query remote users as part of the search.
|
query remote users as part of the search.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,16 +13,20 @@
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
openapi: 3.1.0
|
openapi: 3.1.0
|
||||||
info:
|
info:
|
||||||
title: Matrix Federation Public Rooms API
|
title: Matrix Federation Room Directory API
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
paths:
|
paths:
|
||||||
/publicRooms:
|
/publicRooms:
|
||||||
get:
|
get:
|
||||||
summary: Get all the public rooms for a homeserver
|
summary: Lists the server's published room directory.
|
||||||
description: |-
|
description: |-
|
||||||
Gets all the public rooms for the homeserver. This should not return
|
Lists the server's published room directory.
|
||||||
rooms that are listed on another homeserver's directory, just those
|
|
||||||
listed on the receiving homeserver's directory.
|
This API returns paginated responses. The rooms are ordered by the number
|
||||||
|
of joined members, with the largest rooms first.
|
||||||
|
|
||||||
|
This SHOULD not return rooms that are listed on another homeserver's directory,
|
||||||
|
just those listed on the receiving homeserver's directory.
|
||||||
operationId: getPublicRooms
|
operationId: getPublicRooms
|
||||||
security:
|
security:
|
||||||
- signedRequest: []
|
- signedRequest: []
|
||||||
|
|
@ -62,21 +66,18 @@ paths:
|
||||||
type: string
|
type: string
|
||||||
responses:
|
responses:
|
||||||
"200":
|
"200":
|
||||||
description: The public room list for the homeserver.
|
description: A list of the published rooms on the server.
|
||||||
content:
|
content:
|
||||||
application/json:
|
application/json:
|
||||||
schema:
|
schema:
|
||||||
$ref: ../client-server/definitions/public_rooms_response.yaml
|
$ref: ../client-server/definitions/public_rooms_response.yaml
|
||||||
post:
|
post:
|
||||||
summary: Gets the public rooms on the server with optional filter.
|
summary: Lists the server's published room directory with an optional filter
|
||||||
description: |-
|
description: |-
|
||||||
Lists the public rooms on the server, with optional filter.
|
Lists the server's published room directory with an optional filter.
|
||||||
|
|
||||||
This API returns paginated responses. The rooms are ordered by the number
|
This API returns paginated responses. The rooms are ordered by the number
|
||||||
of joined members, with the largest rooms first.
|
of joined members, with the largest rooms first.
|
||||||
|
|
||||||
Note that this endpoint receives and returns the same format that is seen
|
|
||||||
in the Client-Server API's `POST /publicRooms` endpoint.
|
|
||||||
operationId: queryPublicRooms
|
operationId: queryPublicRooms
|
||||||
security:
|
security:
|
||||||
- signedRequest: []
|
- signedRequest: []
|
||||||
|
|
@ -147,69 +148,11 @@ paths:
|
||||||
required: true
|
required: true
|
||||||
responses:
|
responses:
|
||||||
"200":
|
"200":
|
||||||
description: A list of the rooms on the server.
|
description: A filtered list of the published rooms on the server.
|
||||||
content:
|
content:
|
||||||
application/json:
|
application/json:
|
||||||
schema:
|
schema:
|
||||||
type: object
|
$ref: ../client-server/definitions/public_rooms_response.yaml
|
||||||
description: A list of the rooms on the server.
|
|
||||||
required:
|
|
||||||
- chunk
|
|
||||||
properties:
|
|
||||||
chunk:
|
|
||||||
title: PublicRoomsChunks
|
|
||||||
type: array
|
|
||||||
description: A paginated chunk of public rooms.
|
|
||||||
items:
|
|
||||||
allOf:
|
|
||||||
- $ref: ../client-server/definitions/public_rooms_chunk.yaml
|
|
||||||
- type: object
|
|
||||||
properties:
|
|
||||||
# Override description of join_rule
|
|
||||||
join_rule:
|
|
||||||
type: string
|
|
||||||
description: |-
|
|
||||||
The room's join rule. When not present, the room is assumed to
|
|
||||||
be `public`. Note that rooms with `invite` join rules are not
|
|
||||||
expected here, but rooms with `knock` rules are given their
|
|
||||||
near-public nature.
|
|
||||||
next_batch:
|
|
||||||
type: string
|
|
||||||
description: |-
|
|
||||||
A pagination token for the response. The absence of this token
|
|
||||||
means there are no more results to fetch and the client should
|
|
||||||
stop paginating.
|
|
||||||
prev_batch:
|
|
||||||
type: string
|
|
||||||
description: |-
|
|
||||||
A pagination token that allows fetching previous results. The
|
|
||||||
absence of this token means there are no results before this
|
|
||||||
batch, i.e. this is the first batch.
|
|
||||||
total_room_count_estimate:
|
|
||||||
type: integer
|
|
||||||
description: |-
|
|
||||||
An estimate on the total number of public rooms, if the
|
|
||||||
server has an estimate.
|
|
||||||
examples:
|
|
||||||
response:
|
|
||||||
value: {
|
|
||||||
"chunk": [
|
|
||||||
{
|
|
||||||
"avatar_url": "mxc://bleecker.street/CHEDDARandBRIE",
|
|
||||||
"guest_can_join": false,
|
|
||||||
"name": "CHEESE",
|
|
||||||
"num_joined_members": 37,
|
|
||||||
"room_id": "!ol19s:bleecker.street",
|
|
||||||
"topic": "Tasty tasty cheese",
|
|
||||||
"world_readable": true,
|
|
||||||
"join_rule": "public",
|
|
||||||
"room_type": "m.space"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"next_batch": "p190q",
|
|
||||||
"prev_batch": "p1902",
|
|
||||||
"total_room_count_estimate": 115
|
|
||||||
}
|
|
||||||
servers:
|
servers:
|
||||||
- url: "{protocol}://{hostname}{basePath}"
|
- url: "{protocol}://{hostname}{basePath}"
|
||||||
variables:
|
variables:
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,14 @@
|
||||||
"type": "m.room.topic",
|
"type": "m.room.topic",
|
||||||
"state_key": "",
|
"state_key": "",
|
||||||
"content": {
|
"content": {
|
||||||
"topic": "A room topic"
|
"m.topic": {
|
||||||
|
"m.text": [ {
|
||||||
|
"mimetype": "text/html",
|
||||||
|
"body": "An <em>interesting</em> room topic"
|
||||||
|
}, {
|
||||||
|
"body": "An interesting room topic"
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
"topic": "An interesting room topic"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
type: array
|
||||||
|
description: |-
|
||||||
|
An ordered array of textual representations in different mimetypes.
|
||||||
|
|
||||||
|
Senders SHOULD specify at least one representation and SHOULD always
|
||||||
|
include a plaintext representation.
|
||||||
|
|
||||||
|
Receivers SHOULD use the first representation in the array that
|
||||||
|
they understand.
|
||||||
|
title: TextContentBlock
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
title: TextualRepresentation
|
||||||
|
properties:
|
||||||
|
mimetype:
|
||||||
|
type: string
|
||||||
|
description: The mimetype. Defaults to `text/plain` if omitted.
|
||||||
|
example: "text/html"
|
||||||
|
body:
|
||||||
|
type: string
|
||||||
|
description: |-
|
||||||
|
The string content.
|
||||||
|
|
||||||
|
Clients SHOULD validate and sanitize the content as they do
|
||||||
|
for rich content associated with [`msgtype`](/client-server-api/#mroommessage-msgtypes)
|
||||||
|
of [`m.room.message`](/client-server-api/#mroommessage).
|
||||||
|
required:
|
||||||
|
- body
|
||||||
|
|
@ -2,19 +2,40 @@
|
||||||
allOf:
|
allOf:
|
||||||
- $ref: core-event-schema/state_event.yaml
|
- $ref: core-event-schema/state_event.yaml
|
||||||
description: |-
|
description: |-
|
||||||
A topic is a short message detailing what is currently being discussed in the room.
|
A topic is a short message detailing what is currently being discussed
|
||||||
It can also be used as a way to display extra information about the room, which may not
|
in the room. It can also be used as a way to display extra information
|
||||||
be suitable for the room name.
|
about the room, which may not be suitable for the room name. The room
|
||||||
The room topic can also be set when creating a room using `/createRoom` with the `topic` key.'
|
topic can also be set when creating a room using
|
||||||
|
[`/createRoom`](client-server-api/#post_matrixclientv3createroom), either
|
||||||
|
with the `topic` key or by specifying a full event in `initial_state`.
|
||||||
|
|
||||||
If the `topic` property is absent, null, or empty then the topic is unset. In other words,
|
If the `topic` property is absent, null, or empty then the topic is unset. In other words,
|
||||||
an empty `topic` property effectively resets the room to having no topic.
|
an empty `topic` property effectively resets the room to having no topic.
|
||||||
|
|
||||||
|
In order to prevent formatting abuse in room topics, clients SHOULD
|
||||||
|
limit the length of topics during both entry and display, for instance,
|
||||||
|
by capping the number of displayed lines. Additionally, clients SHOULD
|
||||||
|
ignore things like headings and enumerations (or format them as regular
|
||||||
|
text).
|
||||||
properties:
|
properties:
|
||||||
content:
|
content:
|
||||||
properties:
|
properties:
|
||||||
topic:
|
topic:
|
||||||
description: The topic text.
|
description: |-
|
||||||
|
The topic in plain text.
|
||||||
|
|
||||||
|
This SHOULD duplicate the content of the `text/plain`
|
||||||
|
representation in `m.topic` if any exists.
|
||||||
type: string
|
type: string
|
||||||
|
m.topic:
|
||||||
|
type: object
|
||||||
|
title: TopicContentBlock
|
||||||
|
x-addedInMatrixVersion: "1.15"
|
||||||
|
description: |-
|
||||||
|
Textual representation of the room topic in different mimetypes.
|
||||||
|
properties:
|
||||||
|
m.text:
|
||||||
|
$ref: components/m_text_content_block.yaml
|
||||||
required:
|
required:
|
||||||
- topic
|
- topic
|
||||||
type: object
|
type: object
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue