mirror of
https://github.com/matrix-org/matrix-spec
synced 2026-04-01 16:54:09 +02:00
Compare commits
6 commits
0dae1d0876
...
3ab0f37c22
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3ab0f37c22 | ||
|
|
7470c72d94 | ||
|
|
7b3083885b | ||
|
|
a96aeb5882 | ||
|
|
54842585db | ||
|
|
cbcbde8f3c |
|
|
@ -0,0 +1 @@
|
|||
Spaces are subject to the same access mechanisms as rooms.
|
||||
1
changelogs/client_server/newsfragments/2125.feature
Normal file
1
changelogs/client_server/newsfragments/2125.feature
Normal file
|
|
@ -0,0 +1 @@
|
|||
Add `/_matrix/client/v1/room_summary/{roomIdOrAlias}` and extend `/_matrix/client/v1/rooms/{roomId}/hierarchy` with the new optional properties `allowed_room_ids`, `encryption` and `room_version` as per [MSC3266](https://github.com/matrix-org/matrix-spec-proposals/pull/3266).
|
||||
1
changelogs/server_server/newsfragments/2125.feature
Normal file
1
changelogs/server_server/newsfragments/2125.feature
Normal file
|
|
@ -0,0 +1 @@
|
|||
Extend `/_matrix/federation/v1/hierarchy/{roomId}` with the new optional properties `encryption` and `room_version` as per [MSC3266](https://github.com/matrix-org/matrix-spec-proposals/pull/3266).
|
||||
|
|
@ -2878,6 +2878,10 @@ that are not `world_readable` regardless of their visibility.
|
|||
|
||||
{{% http-api spec="client-server" api="list_public_rooms" %}}
|
||||
|
||||
### Room Summaries
|
||||
|
||||
{{% http-api spec="client-server" api="room_summary" %}}
|
||||
|
||||
## User Data
|
||||
|
||||
### User Directory
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
{{% added-in v="1.2" %}}
|
||||
|
||||
Often used to group rooms of similar subject matter (such as a public "Official
|
||||
matrix.org rooms" space or personal "Work stuff" space), spaces are a way to
|
||||
Often used to group rooms of similar subject matter (such as an "Official
|
||||
matrix.org rooms" space or a "Work stuff" space), spaces are a way to
|
||||
organise rooms while being represented as rooms themselves.
|
||||
|
||||
A space is defined by the [`m.space` room type](#types), making it known as a
|
||||
|
|
@ -18,11 +18,11 @@ In the default power level structure, this would be `100`. Clients might wish to
|
|||
go a step further and explicitly ignore notification counts on space-rooms.
|
||||
|
||||
Membership of a space is defined and controlled by the existing mechanisms which
|
||||
govern a room: [`m.room.member`](#mroommember), [`m.room.history_visibility`](#mroomhistory_visibility),
|
||||
and [`m.room.join_rules`](#mroomjoin_rules). Public spaces are encouraged to have
|
||||
a similar setup to public rooms: `world_readable` history visibility, published
|
||||
canonical alias, and suitably public `join_rule`. Invites, including third-party
|
||||
invites, still work just as they do in normal rooms as well.
|
||||
govern a room: [`m.room.member`](/client-server-api#mroommember), [`m.room.history_visibility`](/client-server-api#mroomhistory_visibility),
|
||||
and [`m.room.join_rules`](/client-server-api#mroomjoin_rules). Canonical aliases and invites, including
|
||||
third-party invites, still work just as they do in normal rooms as well. Furthermore,
|
||||
spaces can also be published in the [room directory](/client-server-api#published-room-directory) to make them
|
||||
discoverable.
|
||||
|
||||
All other aspects of regular rooms are additionally carried over, such as the
|
||||
ability to set arbitrary state events, hold room account data, etc. Spaces are
|
||||
|
|
@ -87,10 +87,9 @@ the state of `#space:example.org` would consist of:
|
|||
}
|
||||
```
|
||||
|
||||
No state events in the child rooms themselves would be required (though they
|
||||
can also be present). This allows for users
|
||||
to define personal/private spaces to organise their own rooms without needing explicit
|
||||
permission from the room moderators/admins.
|
||||
No state events in the child rooms themselves would be required (though they can also
|
||||
be present). This allows for users to define spaces without needing explicit permission
|
||||
from the room moderators/admins.
|
||||
|
||||
Child rooms can be removed from a space by omitting the `via` key of `content` on the
|
||||
relevant state event, such as through redaction or otherwise clearing the `content`.
|
||||
|
|
|
|||
48
data/api/client-server/definitions/room_summary.yaml
Normal file
48
data/api/client-server/definitions/room_summary.yaml
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
# Copyright 2025 The Matrix.org Foundation C.I.C.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
type: object
|
||||
title: RoomSummary
|
||||
allOf:
|
||||
- $ref: public_rooms_chunk.yaml
|
||||
- type: object
|
||||
properties:
|
||||
room_type:
|
||||
type: string
|
||||
description: The `type` of room (from
|
||||
[`m.room.create`](/client-server-api/#mroomcreate)),
|
||||
if any.
|
||||
allowed_room_ids:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
description: |-
|
||||
If the room is a [restricted room](/server-server-api/#restricted-rooms), these are the room IDs which
|
||||
are specified by the join rules. Empty or omitted otherwise.
|
||||
encryption:
|
||||
type: string
|
||||
enum:
|
||||
- "m.megolm.v1.aes-sha2"
|
||||
description: |-
|
||||
The encryption algorithm to be used to encrypt messages sent in the
|
||||
room.
|
||||
room_version:
|
||||
description: The version of the room.
|
||||
type: string
|
||||
|
||||
required:
|
||||
- room_id
|
||||
- num_joined_members
|
||||
- world_readable
|
||||
- guest_can_join
|
||||
138
data/api/client-server/room_summary.yaml
Normal file
138
data/api/client-server/room_summary.yaml
Normal file
|
|
@ -0,0 +1,138 @@
|
|||
# Copyright 2025 The Matrix.org Foundation C.I.C.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
openapi: 3.1.0
|
||||
info:
|
||||
title: Matrix Client-Server Room Summary API
|
||||
version: 1.0.0
|
||||
paths:
|
||||
"/room_summary/{roomIdOrAlias}":
|
||||
get:
|
||||
x-addedInMatrixVersion: "1.15"
|
||||
summary: Retrieves a summary for a room.
|
||||
description: |-
|
||||
Retrieves a summary for a room.
|
||||
|
||||
Clients should note that requests for rooms where the user's membership
|
||||
is `invite` or `knock` might yield outdated, partial or even no data
|
||||
since the server may not have access to the current state of the room.
|
||||
|
||||
Servers MAY allow unauthenticated access to this API if at least one of
|
||||
the following conditions holds true:
|
||||
|
||||
- The room has a [join rule](#mroomjoin_rules) of `public`, `knock` or
|
||||
`knock_restricted`.
|
||||
- The room has a `world_readable` [history visibility](#room-history-visibility).
|
||||
|
||||
Servers should consider rate limiting federation requests more heavily,
|
||||
if the client is unauthenticated.
|
||||
operationId: getRoomSummary
|
||||
security:
|
||||
- signedRequest: []
|
||||
parameters:
|
||||
- in: path
|
||||
name: roomIdOrAlias
|
||||
description: The room identifier or alias to summarise.
|
||||
required: true
|
||||
example: "#monkeys:matrix.org"
|
||||
schema:
|
||||
type: string
|
||||
- in: query
|
||||
name: via
|
||||
description: |-
|
||||
The servers to attempt to request the summary from when
|
||||
the local server cannot generate it (for instance, because
|
||||
it has no local user in the room).
|
||||
example:
|
||||
- matrix.org
|
||||
- elsewhere.ca
|
||||
schema:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
responses:
|
||||
"200":
|
||||
description: A summary of the room.
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
description: A summary of the room.
|
||||
allOf:
|
||||
- $ref: ../client-server/definitions/room_summary.yaml
|
||||
- type: object
|
||||
properties:
|
||||
room_type:
|
||||
x-addedInMatrixVersion: # Overrides room_summary.yaml
|
||||
membership:
|
||||
description: |-
|
||||
The membership state of the user if the user is joined to the room. Absent
|
||||
if the API was called unauthenticated.
|
||||
enum:
|
||||
- invite
|
||||
- join
|
||||
- knock
|
||||
- leave
|
||||
- ban
|
||||
type: string
|
||||
required:
|
||||
- guest_can_join
|
||||
- num_joined_members
|
||||
- room_id
|
||||
- world_readable
|
||||
examples:
|
||||
response:
|
||||
value: {
|
||||
room_id: "!ol19s:bleecker.street",
|
||||
avatar_url: "mxc://bleecker.street/CHEDDARandBRIE",
|
||||
guest_can_join: false,
|
||||
name: "CHEESE",
|
||||
num_joined_members: 37,
|
||||
topic: "Tasty tasty cheese",
|
||||
world_readable: true,
|
||||
join_rule: "public",
|
||||
room_type: "m.space",
|
||||
membership: "invite",
|
||||
encryption: "m.megolm.v1.aes-sha2",
|
||||
room_version: "9001",
|
||||
}
|
||||
"404":
|
||||
description: |-
|
||||
The room could not be found.
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: ../client-server/definitions/errors/error.yaml
|
||||
examples:
|
||||
response:
|
||||
value: {
|
||||
"errcode": "M_NOT_FOUND",
|
||||
"error": "Room not found."
|
||||
}
|
||||
servers:
|
||||
- url: "{protocol}://{hostname}{basePath}"
|
||||
variables:
|
||||
protocol:
|
||||
enum:
|
||||
- http
|
||||
- https
|
||||
default: https
|
||||
hostname:
|
||||
default: localhost:8008
|
||||
basePath:
|
||||
default: /_matrix/client/v1
|
||||
components:
|
||||
securitySchemes:
|
||||
accessTokenQuery:
|
||||
$ref: definitions/security.yaml#/accessTokenQuery
|
||||
accessTokenBearer:
|
||||
$ref: definitions/security.yaml#/accessTokenBearer
|
||||
|
|
@ -102,15 +102,10 @@ paths:
|
|||
* The room's [`m.room.history_visibility`](#room-history-visibility) is set to `world_readable`.
|
||||
items:
|
||||
allOf:
|
||||
- $ref: definitions/public_rooms_chunk.yaml
|
||||
- $ref: definitions/room_summary.yaml
|
||||
- type: object
|
||||
title: SpaceHierarchyRoomsChunk
|
||||
properties:
|
||||
room_type:
|
||||
type: string
|
||||
description: The `type` of room (from
|
||||
[`m.room.create`](/client-server-api/#mroomcreate)),
|
||||
if any.
|
||||
children_state:
|
||||
type: array
|
||||
description: |-
|
||||
|
|
@ -130,6 +125,12 @@ paths:
|
|||
description: The `origin_server_ts` for the event.
|
||||
required:
|
||||
- origin_server_ts
|
||||
allowed_room_ids:
|
||||
x-addedInMatrixVersion: "1.15" # Extends room_summary.yaml
|
||||
encryption:
|
||||
x-addedInMatrixVersion: "1.15" # Extends room_summary.yaml
|
||||
room_version:
|
||||
x-addedInMatrixVersion: "1.15" # Extends room_summary.yaml
|
||||
required:
|
||||
- children_state
|
||||
next_batch:
|
||||
|
|
|
|||
|
|
@ -61,22 +61,10 @@ paths:
|
|||
room:
|
||||
description: A summary of the room requested.
|
||||
allOf:
|
||||
- $ref: ../client-server/definitions/public_rooms_chunk.yaml
|
||||
- $ref: ../client-server/definitions/room_summary.yaml
|
||||
- type: object
|
||||
title: SpaceHierarchyParentRoom
|
||||
properties:
|
||||
room_type:
|
||||
type: string
|
||||
description: The `type` of room (from
|
||||
[`m.room.create`](/client-server-api/#mroomcreate)),
|
||||
if any.
|
||||
allowed_room_ids:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
description: |-
|
||||
If the room is a [restricted room](/server-server-api/#restricted-rooms), these are the room IDs which
|
||||
are specified by the join rules. Empty or omitted otherwise.
|
||||
children_state:
|
||||
type: array
|
||||
description: |-
|
||||
|
|
@ -96,6 +84,10 @@ paths:
|
|||
description: The `origin_server_ts` for the event.
|
||||
required:
|
||||
- origin_server_ts
|
||||
encryption:
|
||||
x-addedInMatrixVersion: "1.15" # Extends room_summary.yaml
|
||||
room_version:
|
||||
x-addedInMatrixVersion: "1.15" # Extends room_summary.yaml
|
||||
required:
|
||||
- children_state
|
||||
children:
|
||||
|
|
@ -105,22 +97,14 @@ paths:
|
|||
be excluded.
|
||||
items:
|
||||
allOf:
|
||||
- $ref: ../client-server/definitions/public_rooms_chunk.yaml
|
||||
- $ref: ../client-server/definitions/room_summary.yaml
|
||||
- type: object
|
||||
title: SpaceHierarchyChildRoomsChunk
|
||||
properties:
|
||||
room_type:
|
||||
type: string
|
||||
description: The `type` of room (from
|
||||
[`m.room.create`](/client-server-api/#mroomcreate)),
|
||||
if any.
|
||||
allowed_room_ids:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
description: |-
|
||||
If the room is a [restricted room](/server-server-api/#restricted-rooms), these are the room IDs which
|
||||
are specified by the join rules. Empty or omitted otherwise.
|
||||
encryption:
|
||||
x-addedInMatrixVersion: "1.15" # Extends room_summary.yaml
|
||||
room_version:
|
||||
x-addedInMatrixVersion: "1.15" # Extends room_summary.yaml
|
||||
inaccessible_children:
|
||||
type: array
|
||||
items:
|
||||
|
|
|
|||
Loading…
Reference in a new issue