mirror of
https://github.com/matrix-org/matrix-spec
synced 2026-05-02 07:04:09 +02:00
Compare commits
8 commits
1a07f01d9a
...
eb7dddda85
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eb7dddda85 | ||
|
|
81273df88e | ||
|
|
65b1db721d | ||
|
|
c39c7d0680 | ||
|
|
7b3083885b | ||
|
|
a96aeb5882 | ||
|
|
54842585db | ||
|
|
cbcbde8f3c |
|
|
@ -316,13 +316,19 @@ Custom SCSS for the Matrix spec
|
||||||
h2 {
|
h2 {
|
||||||
font-weight: $font-weight-bold;
|
font-weight: $font-weight-bold;
|
||||||
font-size: 1.3rem;
|
font-size: 1.3rem;
|
||||||
margin: 3rem 0 .5rem 0;
|
margin: 1.5rem 0 1rem 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
h3 {
|
h3 {
|
||||||
font-weight: $font-weight-bold;
|
font-weight: $font-weight-bold;
|
||||||
font-size: 1.1rem;
|
font-size: 1.1rem;
|
||||||
margin: 1.5rem 0 .75rem 0;
|
margin: 1.5rem 0 1rem 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reduce top margin of h3 if previous sibling is a h2 */
|
||||||
|
h2 + h3 {
|
||||||
|
margin-top: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
hr {
|
hr {
|
||||||
|
|
@ -367,11 +373,6 @@ Custom SCSS for the Matrix spec
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// add some space between two tables when they are right next to each other
|
|
||||||
& + table {
|
|
||||||
margin-top: 4rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
caption {
|
caption {
|
||||||
caption-side: top;
|
caption-side: top;
|
||||||
color: $dark;
|
color: $dark;
|
||||||
|
|
@ -443,6 +444,17 @@ Custom SCSS for the Matrix spec
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Have consistent spacing around tables and examples */
|
||||||
|
table, .highlight {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
|
||||||
|
/* We don't need the margin on the last child of the .rendered-data block */
|
||||||
|
&:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pre {
|
pre {
|
||||||
border: 0;
|
border: 0;
|
||||||
border-left: solid 5px $secondary;
|
border-left: solid 5px $secondary;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
Clarify behaviour when the `topic` key of a `m.room.topic` event is absent, null, or empty.
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
Fix the example of the `GET /sync` endpoint and the `m.room.member` example used in several places.
|
||||||
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/internal/newsfragments/2081.clarification
Normal file
1
changelogs/internal/newsfragments/2081.clarification
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Adjust margins in rendered endpoints.
|
||||||
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).
|
||||||
|
|
@ -2835,6 +2835,10 @@ re-invited.
|
||||||
|
|
||||||
{{% http-api spec="client-server" api="list_public_rooms" %}}
|
{{% http-api spec="client-server" api="list_public_rooms" %}}
|
||||||
|
|
||||||
|
### Room Summaries
|
||||||
|
|
||||||
|
{{% http-api spec="client-server" api="room_summary" %}}
|
||||||
|
|
||||||
## User Data
|
## User Data
|
||||||
|
|
||||||
### User Directory
|
### User Directory
|
||||||
|
|
|
||||||
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`.
|
* The room's [`m.room.history_visibility`](#room-history-visibility) is set to `world_readable`.
|
||||||
items:
|
items:
|
||||||
allOf:
|
allOf:
|
||||||
- $ref: definitions/public_rooms_chunk.yaml
|
- $ref: definitions/room_summary.yaml
|
||||||
- type: object
|
- type: object
|
||||||
title: SpaceHierarchyRoomsChunk
|
title: SpaceHierarchyRoomsChunk
|
||||||
properties:
|
properties:
|
||||||
room_type:
|
|
||||||
type: string
|
|
||||||
description: The `type` of room (from
|
|
||||||
[`m.room.create`](/client-server-api/#mroomcreate)),
|
|
||||||
if any.
|
|
||||||
children_state:
|
children_state:
|
||||||
type: array
|
type: array
|
||||||
description: |-
|
description: |-
|
||||||
|
|
@ -130,6 +125,12 @@ paths:
|
||||||
description: The `origin_server_ts` for the event.
|
description: The `origin_server_ts` for the event.
|
||||||
required:
|
required:
|
||||||
- origin_server_ts
|
- 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:
|
required:
|
||||||
- children_state
|
- children_state
|
||||||
next_batch:
|
next_batch:
|
||||||
|
|
|
||||||
|
|
@ -441,17 +441,57 @@ paths:
|
||||||
"state": {
|
"state": {
|
||||||
"events": [
|
"events": [
|
||||||
{
|
{
|
||||||
"$ref": "../../event-schemas/examples/m.room.member.yaml"
|
"content": {
|
||||||
|
"avatar_url": "mxc://example.org/SFHyPlCeYUSFFxlgbQYZmoEoe",
|
||||||
|
"displayname": "Example user",
|
||||||
|
"membership": "join"
|
||||||
|
},
|
||||||
|
"event_id": "$143273976499sgjks:example.org",
|
||||||
|
"origin_server_ts": 1432735824653,
|
||||||
|
"sender": "@example:example.org",
|
||||||
|
"state_key": "@example:example.org",
|
||||||
|
"type": "m.room.member",
|
||||||
|
"unsigned": {
|
||||||
|
"age": 45603,
|
||||||
|
"membership": "join"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"timeline": {
|
"timeline": {
|
||||||
"events": [
|
"events": [
|
||||||
{
|
{
|
||||||
"$ref": "../../event-schemas/examples/m.room.member.yaml"
|
"content": {
|
||||||
|
"avatar_url": "mxc://example.org/SEsfnsuifSDFSSEF",
|
||||||
|
"displayname": "Alice Margatroid",
|
||||||
|
"membership": "join",
|
||||||
|
"reason": "Looking for support"
|
||||||
|
},
|
||||||
|
"event_id": "$143273582443PhrSn:example.org",
|
||||||
|
"origin_server_ts": 1432735824653,
|
||||||
|
"sender": "@alice:example.org",
|
||||||
|
"state_key": "@alice:example.org",
|
||||||
|
"type": "m.room.member",
|
||||||
|
"unsigned": {
|
||||||
|
"age": 1234,
|
||||||
|
"membership": "join"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"$ref": "../../event-schemas/examples/m.room.message$m.text.yaml"
|
"content": {
|
||||||
|
"body": "This is an example text message",
|
||||||
|
"format": "org.matrix.custom.html",
|
||||||
|
"formatted_body": "<b>This is an example text message</b>",
|
||||||
|
"msgtype": "m.text"
|
||||||
|
},
|
||||||
|
"event_id": "$143273582443PhrSn:example.org",
|
||||||
|
"origin_server_ts": 1432735824653,
|
||||||
|
"sender": "@example:example.org",
|
||||||
|
"type": "m.room.message",
|
||||||
|
"unsigned": {
|
||||||
|
"age": 1234,
|
||||||
|
"membership": "join"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"limited": true,
|
"limited": true,
|
||||||
|
|
|
||||||
|
|
@ -61,22 +61,10 @@ paths:
|
||||||
room:
|
room:
|
||||||
description: A summary of the room requested.
|
description: A summary of the room requested.
|
||||||
allOf:
|
allOf:
|
||||||
- $ref: ../client-server/definitions/public_rooms_chunk.yaml
|
- $ref: ../client-server/definitions/room_summary.yaml
|
||||||
- type: object
|
- type: object
|
||||||
title: SpaceHierarchyParentRoom
|
title: SpaceHierarchyParentRoom
|
||||||
properties:
|
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:
|
children_state:
|
||||||
type: array
|
type: array
|
||||||
description: |-
|
description: |-
|
||||||
|
|
@ -96,6 +84,10 @@ paths:
|
||||||
description: The `origin_server_ts` for the event.
|
description: The `origin_server_ts` for the event.
|
||||||
required:
|
required:
|
||||||
- origin_server_ts
|
- origin_server_ts
|
||||||
|
encryption:
|
||||||
|
x-addedInMatrixVersion: "1.15" # Extends room_summary.yaml
|
||||||
|
room_version:
|
||||||
|
x-addedInMatrixVersion: "1.15" # Extends room_summary.yaml
|
||||||
required:
|
required:
|
||||||
- children_state
|
- children_state
|
||||||
children:
|
children:
|
||||||
|
|
@ -105,22 +97,14 @@ paths:
|
||||||
be excluded.
|
be excluded.
|
||||||
items:
|
items:
|
||||||
allOf:
|
allOf:
|
||||||
- $ref: ../client-server/definitions/public_rooms_chunk.yaml
|
- $ref: ../client-server/definitions/room_summary.yaml
|
||||||
- type: object
|
- type: object
|
||||||
title: SpaceHierarchyChildRoomsChunk
|
title: SpaceHierarchyChildRoomsChunk
|
||||||
properties:
|
properties:
|
||||||
room_type:
|
encryption:
|
||||||
type: string
|
x-addedInMatrixVersion: "1.15" # Extends room_summary.yaml
|
||||||
description: The `type` of room (from
|
room_version:
|
||||||
[`m.room.create`](/client-server-api/#mroomcreate)),
|
x-addedInMatrixVersion: "1.15" # Extends room_summary.yaml
|
||||||
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.
|
|
||||||
inaccessible_children:
|
inaccessible_children:
|
||||||
type: array
|
type: array
|
||||||
items:
|
items:
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
{
|
{
|
||||||
"$ref": "core/state_event.json",
|
"$ref": "core/state_event.json",
|
||||||
"state_key": "@alice:example.org",
|
"state_key": "@alice:example.org",
|
||||||
|
"sender": "@alice:example.org",
|
||||||
"type": "m.room.member",
|
"type": "m.room.member",
|
||||||
"content": {
|
"content": {
|
||||||
"membership": "join",
|
"membership": "join",
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,14 @@
|
||||||
---
|
---
|
||||||
allOf:
|
allOf:
|
||||||
- $ref: core-event-schema/state_event.yaml
|
- $ref: core-event-schema/state_event.yaml
|
||||||
description: 'A topic is a short message detailing what is currently being discussed in the room. It can also be used as a way to display extra information about the room, which may not be suitable for the room name. The room topic can also be set when creating a room using `/createRoom` with the `topic` key.'
|
description: |-
|
||||||
|
A topic is a short message detailing what is currently being discussed in the room.
|
||||||
|
It can also be used as a way to display extra information about the room, which may not
|
||||||
|
be suitable for the room name.
|
||||||
|
The room topic can also be set when creating a room using `/createRoom` with the `topic` key.'
|
||||||
|
|
||||||
|
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.
|
||||||
properties:
|
properties:
|
||||||
content:
|
content:
|
||||||
properties:
|
properties:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue