Use `patternProperties` in more places with supported formats (#1813)

Allows to have more places where the property name's type is better defined.

Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr>
tulir/msc4142
Kévin Commaille 7 months ago committed by GitHub
parent df1e799c51
commit b0df8e7fb5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1 @@
Use `patternProperties` in more places with supported formats.

@ -0,0 +1 @@
Use `patternProperties` in more places with supported formats.

@ -165,10 +165,12 @@ paths:
type: object type: object
description: |- description: |-
A map of user ID to a map of key ID to signed JSON object. A map of user ID to a map of key ID to signed JSON object.
additionalProperties: patternProperties:
type: object "^@":
additionalProperties: x-pattern-format: mx-user-id
type: object type: object
additionalProperties:
type: object
example: { example: {
"@alice:example.com": { "@alice:example.com": {
"HIJKLMN": { "HIJKLMN": {
@ -238,11 +240,13 @@ paths:
A map from user ID to key ID to an error for any signatures A map from user ID to key ID to an error for any signatures
that failed. If a signature was invalid, the `errcode` will that failed. If a signature was invalid, the `errcode` will
be set to `M_INVALID_SIGNATURE`. be set to `M_INVALID_SIGNATURE`.
additionalProperties: patternProperties:
type: object "^@":
additionalProperties:
type: object type: object
title: Error x-pattern-format: mx-user-id
additionalProperties:
type: object
title: Error
example: example:
"@alice:example.com": "@alice:example.com":
HIJKLMN: HIJKLMN:

@ -53,10 +53,12 @@ properties:
`<algorithm>:<device_id>` to the signature. `<algorithm>:<device_id>` to the signature.
The signature is calculated using the process described at [Signing JSON](/appendices/#signing-json). The signature is calculated using the process described at [Signing JSON](/appendices/#signing-json).
additionalProperties: patternProperties:
type: object "^@":
additionalProperties: x-pattern-format: mx-user-id
type: string type: object
additionalProperties:
type: string
example: example:
"@alice:example.com": "@alice:example.com":
"ed25519:JLAFKJWSCS": "dSO80A01XiigH3uBiDVx/EjzaoycHcjq9lfQX0uWsqxl2giMIiSPR8a4d291W1ihKJL/a+myXS367WT6NAIcBA" "ed25519:JLAFKJWSCS": "dSO80A01XiigH3uBiDVx/EjzaoycHcjq9lfQX0uWsqxl2giMIiSPR8a4d291W1ihKJL/a+myXS367WT6NAIcBA"

@ -20,6 +20,8 @@ additionalProperties:
Signature for the device. Mapped from user ID to signature object, Signature for the device. Mapped from user ID to signature object,
containing mapping from _key signing identifier_ to the signature containing mapping from _key signing identifier_ to the signature
(see also: [Signing JSON](/appendices/#signing-json)) (see also: [Signing JSON](/appendices/#signing-json))
additionalProperties: patternProperties:
type: object "^@":
x-pattern-format: mx-user-id
type: object
required: ['key', 'signatures'] required: ['key', 'signatures']

@ -840,8 +840,11 @@ paths:
rooms: rooms:
type: object type: object
description: A map of room IDs to room key backup data. description: A map of room IDs to room key backup data.
additionalProperties: patternProperties:
$ref: definitions/room_key_backup.yaml "^!":
x-pattern-format: mx-room-id
allOf:
- $ref: definitions/room_key_backup.yaml
example: example:
"!room:example.org": "!room:example.org":
sessions: sessions:
@ -944,8 +947,11 @@ paths:
rooms: rooms:
type: object type: object
description: A map of room IDs to room key backup data. description: A map of room IDs to room key backup data.
additionalProperties: patternProperties:
$ref: definitions/room_key_backup.yaml "^!":
x-pattern-format: mx-room-id
allOf:
- $ref: definitions/room_key_backup.yaml
example: example:
"!room:example.org": "!room:example.org":
sessions: sessions:

@ -137,11 +137,13 @@ paths:
The keys to be downloaded. A map from user ID, to a list of The keys to be downloaded. A map from user ID, to a list of
device IDs, or to an empty list to indicate all devices for the device IDs, or to an empty list to indicate all devices for the
corresponding user. corresponding user.
additionalProperties: patternProperties:
type: array "^@":
items: x-pattern-format: mx-user-id
type: string type: array
description: device ID items:
type: string
description: device ID
example: example:
"@alice:example.com": [] "@alice:example.com": []
required: required:
@ -177,24 +179,26 @@ paths:
the information returned will be the same as uploaded via the information returned will be the same as uploaded via
`/keys/upload`, with the addition of an `unsigned` `/keys/upload`, with the addition of an `unsigned`
property. property.
additionalProperties: patternProperties:
type: object "^@":
additionalProperties: x-pattern-format: mx-user-id
title: DeviceInformation type: object
allOf: additionalProperties:
- $ref: definitions/device_keys.yaml title: DeviceInformation
properties: allOf:
unsigned: - $ref: definitions/device_keys.yaml
title: UnsignedDeviceInfo properties:
type: object unsigned:
description: |- title: UnsignedDeviceInfo
Additional data added to the device key information type: object
by intermediate servers, and not covered by the description: |-
signatures. Additional data added to the device key information
properties: by intermediate servers, and not covered by the
device_display_name: signatures.
type: string properties:
description: The display name which the user set on the device. device_display_name:
type: string
description: The display name which the user set on the device.
example: example:
"@alice:example.com": "@alice:example.com":
JLAFKJWSCS: JLAFKJWSCS:
@ -221,8 +225,11 @@ paths:
`/keys/device_signing/upload`, along with the signatures `/keys/device_signing/upload`, along with the signatures
uploaded via `/keys/signatures/upload` that the requesting user uploaded via `/keys/signatures/upload` that the requesting user
is allowed to see. is allowed to see.
additionalProperties: patternProperties:
$ref: definitions/cross_signing_key.yaml "^@":
x-pattern-format: mx-user-id
allOf:
- $ref: definitions/cross_signing_key.yaml
example: example:
"@alice:example.com": "@alice:example.com":
user_id: "@alice:example.com" user_id: "@alice:example.com"
@ -238,8 +245,11 @@ paths:
from user ID, to self-signing key information. For each key, the from user ID, to self-signing key information. For each key, the
information returned will be the same as uploaded via information returned will be the same as uploaded via
`/keys/device_signing/upload`. `/keys/device_signing/upload`.
additionalProperties: patternProperties:
$ref: definitions/cross_signing_key.yaml "^@":
x-pattern-format: mx-user-id
allOf:
- $ref: definitions/cross_signing_key.yaml
example: example:
"@alice:example.com": "@alice:example.com":
user_id: "@alice:example.com" user_id: "@alice:example.com"
@ -258,8 +268,11 @@ paths:
from user ID, to user-signing key information. The from user ID, to user-signing key information. The
information returned will be the same as uploaded via information returned will be the same as uploaded via
`/keys/device_signing/upload`. `/keys/device_signing/upload`.
additionalProperties: patternProperties:
$ref: definitions/cross_signing_key.yaml "^@":
x-pattern-format: mx-user-id
allOf:
- $ref: definitions/cross_signing_key.yaml
example: example:
"@alice:example.com": "@alice:example.com":
user_id: "@alice:example.com" user_id: "@alice:example.com"
@ -297,12 +310,14 @@ paths:
description: |- description: |-
The keys to be claimed. A map from user ID, to a map from The keys to be claimed. A map from user ID, to a map from
device ID to algorithm name. device ID to algorithm name.
additionalProperties: patternProperties:
type: object "^@":
additionalProperties: x-pattern-format: mx-user-id
type: string type: object
description: algorithm additionalProperties:
example: signed_curve25519 type: string
description: algorithm
example: signed_curve25519
example: example:
"@alice:example.com": "@alice:example.com":
JLAFKJWSCS: signed_curve25519 JLAFKJWSCS: signed_curve25519
@ -342,10 +357,12 @@ paths:
If necessary, the claimed key might be a fallback key. Fallback If necessary, the claimed key might be a fallback key. Fallback
keys are re-used by the server until replaced by the device. keys are re-used by the server until replaced by the device.
additionalProperties: patternProperties:
type: object "^@":
additionalProperties: x-pattern-format: mx-user-id
$ref: "definitions/one_time_keys.yaml" type: object
additionalProperties:
$ref: "definitions/one_time_keys.yaml"
example: example:
"@alice:example.com": "@alice:example.com":
JLAFKJWSCS: JLAFKJWSCS:

@ -299,18 +299,20 @@ paths:
type: object type: object
properties: properties:
joined: joined:
additionalProperties: patternProperties:
title: RoomMember "^@":
type: object x-pattern-format: mx-user-id
properties: title: RoomMember
display_name: type: object
type: string properties:
description: The display name of the user this object is representing. display_name:
avatar_url: type: string
type: string description: The display name of the user this object is representing.
format: uri avatar_url:
description: The avatar of the user this object is representing, as an [`mxc://` type: string
URI](/client-server-api/#matrix-content-mxc-uris). format: uri
description: The avatar of the user this object is representing, as an [`mxc://`
URI](/client-server-api/#matrix-content-mxc-uris).
description: A map from user ID to a RoomMember object. description: A map from user ID to a RoomMember object.
type: object type: object
examples: examples:

@ -225,19 +225,21 @@ paths:
The historic profile information of the The historic profile information of the
users that sent the events returned. users that sent the events returned.
The `string` key is the user ID for which The key is the user ID for which
the profile belongs to. the profile belongs to.
additionalProperties: patternProperties:
type: object "^@":
title: User Profile x-pattern-format: mx-user-id
properties: type: object
displayname: title: User Profile
type: string properties:
title: Display name displayname:
avatar_url: type: string
type: string title: Display name
format: uri avatar_url:
title: Avatar Url type: string
format: uri
title: Avatar Url
events_before: events_before:
type: array type: array
title: Events Before title: Events Before
@ -262,13 +264,15 @@ paths:
This is included if the request had the This is included if the request had the
`include_state` key set with a value of `true`. `include_state` key set with a value of `true`.
The `string` key is the room ID for which the `State The key is the room ID for which the `State
Event` array belongs to. Event` array belongs to.
additionalProperties: patternProperties:
type: array "^!":
title: Room State x-pattern-format: mx-room-id
items: type: array
$ref: definitions/client_event.yaml title: Room State
items:
$ref: definitions/client_event.yaml
groups: groups:
type: object type: object
title: Groups title: Groups

@ -141,223 +141,233 @@ paths:
description: |- description: |-
The rooms that the user has joined, mapped as room ID to The rooms that the user has joined, mapped as room ID to
room information. room information.
additionalProperties: patternProperties:
title: Joined Room "^!":
type: object x-pattern-format: mx-room-id
properties: title: Joined Room
summary: type: object
title: RoomSummary properties:
type: object summary:
description: |- title: RoomSummary
Information about the room which clients may need to type: object
correctly render it to users. description: |-
properties: Information about the room which clients may need to
m.heroes: correctly render it to users.
type: array properties:
description: |- m.heroes:
The users which can be used to generate a room name type: array
if the room does not have one. Required if the room's description: |-
`m.room.name` or `m.room.canonical_alias` state events The users which can be used to generate a room name
are unset or empty. if the room does not have one. Required if the room's
`m.room.name` or `m.room.canonical_alias` state events
This should be the first 5 members of the room, ordered are unset or empty.
by stream ordering, which are joined or invited. The
list must never include the client's own user ID. When
no joined or invited members are available, this should
consist of the banned and left users. More than 5 members
may be provided, however less than 5 should only be provided
when there are less than 5 members to represent.
When lazy-loading room members is enabled, the membership
events for the heroes MUST be included in the `state`,
unless they are redundant. When the list of users changes,
the server notifies the client by sending a fresh list of
heroes. If there are no changes since the last sync, this
field may be omitted.
items:
type: string
m.joined_member_count:
type: integer
description: |-
The number of users with `membership` of `join`,
including the client's own user ID. If this field has
not changed since the last sync, it may be omitted.
Required otherwise.
m.invited_member_count:
type: integer
description: |-
The number of users with `membership` of `invite`.
If this field has not changed since the last sync, it
may be omitted. Required otherwise.
state:
title: State
type: object
description: |-
Updates to the state, between the time indicated by
the `since` parameter, and the start of the
`timeline` (or all state up to the start of the
`timeline`, if `since` is not given, or
`full_state` is true).
N.B. state updates for `m.room.member` events will This should be the first 5 members of the room, ordered
be incomplete if `lazy_load_members` is enabled in by stream ordering, which are joined or invited. The
the `/sync` filter, and only return the member events list must never include the client's own user ID. When
required to display the senders of the timeline events no joined or invited members are available, this should
in this response. consist of the banned and left users. More than 5 members
allOf: may be provided, however less than 5 should only be provided
- $ref: definitions/state_event_batch.yaml when there are less than 5 members to represent.
timeline:
title: Timeline
type: object
description: |-
The timeline of messages and state changes in the
room.
allOf:
- $ref: definitions/timeline_batch.yaml
ephemeral:
title: Ephemeral
type: object
description: |-
The new ephemeral events in the room (events that
aren't recorded in the timeline or state of the
room). In this version of the spec, these are
[typing notification](#typing-notifications) and
[read receipt](#receipts) events.
allOf:
- $ref: definitions/event_batch.yaml
account_data:
title: Account Data
type: object
description: |-
The private data that this user has attached to
this room.
allOf:
- $ref: definitions/event_batch.yaml
unread_notifications:
title: Unread Notification Counts
type: object
description: |-
Counts of unread notifications for this room. See the
[Receiving notifications](/client-server-api/#receiving-notifications) section
for more information on how these are calculated.
If `unread_thread_notifications` was specified as `true` on the `RoomEventFilter`, When lazy-loading room members is enabled, the membership
these counts will only be for the main timeline rather than all events in the room. events for the heroes MUST be included in the `state`,
See the [threading module](#threading) for more information. unless they are redundant. When the list of users changes,
x-changedInMatrixVersion: the server notifies the client by sending a fresh list of
"1.4": | heroes. If there are no changes since the last sync, this
Updated to reflect behaviour of having `unread_thread_notifications` as `true` in field may be omitted.
the `RoomEventFilter` for `/sync`. items:
properties: type: string
highlight_count: m.joined_member_count:
title: Highlighted notification count type: integer
type: integer description: |-
description: The number of unread notifications for this room with the highlight The number of users with `membership` of `join`,
flag set. including the client's own user ID. If this field has
notification_count: not changed since the last sync, it may be omitted.
title: Total notification count Required otherwise.
type: integer m.invited_member_count:
description: The total number of unread notifications for this room. type: integer
unread_thread_notifications: description: |-
title: Unread Thread Notification Counts The number of users with `membership` of `invite`.
type: object If this field has not changed since the last sync, it
description: |- may be omitted. Required otherwise.
If `unread_thread_notifications` was specified as `true` on the `RoomEventFilter`, state:
the notification counts for each [thread](#threading) in this room. The object is title: State
keyed by thread root ID, with values matching `unread_notifications`. type: object
description: |-
Updates to the state, between the time indicated by
the `since` parameter, and the start of the
`timeline` (or all state up to the start of the
`timeline`, if `since` is not given, or
`full_state` is true).
If a thread does not have any notifications it can be omitted from this object. If N.B. state updates for `m.room.member` events will
no threads have notification counts, this whole object can be omitted. be incomplete if `lazy_load_members` is enabled in
x-addedInMatrixVersion: "1.4" the `/sync` filter, and only return the member events
additionalProperties: required to display the senders of the timeline events
title: ThreadNotificationCounts in this response.
allOf:
- $ref: definitions/state_event_batch.yaml
timeline:
title: Timeline
type: object
description: |-
The timeline of messages and state changes in the
room.
allOf:
- $ref: definitions/timeline_batch.yaml
ephemeral:
title: Ephemeral
type: object
description: |-
The new ephemeral events in the room (events that
aren't recorded in the timeline or state of the
room). In this version of the spec, these are
[typing notification](#typing-notifications) and
[read receipt](#receipts) events.
allOf:
- $ref: definitions/event_batch.yaml
account_data:
title: Account Data
type: object
description: |-
The private data that this user has attached to
this room.
allOf:
- $ref: definitions/event_batch.yaml
unread_notifications:
title: Unread Notification Counts
type: object type: object
description: |-
Counts of unread notifications for this room. See the
[Receiving notifications](/client-server-api/#receiving-notifications) section
for more information on how these are calculated.
If `unread_thread_notifications` was specified as `true` on the `RoomEventFilter`,
these counts will only be for the main timeline rather than all events in the room.
See the [threading module](#threading) for more information.
x-changedInMatrixVersion:
"1.4": |
Updated to reflect behaviour of having `unread_thread_notifications` as `true` in
the `RoomEventFilter` for `/sync`.
properties: properties:
highlight_count: highlight_count:
title: ThreadedHighlightNotificationCount title: Highlighted notification count
type: integer type: integer
description: The number of unread notifications for this *thread* with the description: The number of unread notifications for this room with the highlight
highlight flag set. flag set.
notification_count: notification_count:
title: ThreadedTotalNotificationCount title: Total notification count
type: integer type: integer
description: The total number of unread notifications for this *thread*. description: The total number of unread notifications for this room.
unread_thread_notifications:
title: Unread Thread Notification Counts
type: object
description: |-
If `unread_thread_notifications` was specified as `true` on the `RoomEventFilter`,
the notification counts for each [thread](#threading) in this room. The object is
keyed by thread root ID, with values matching `unread_notifications`.
If a thread does not have any notifications it can be omitted from this object. If
no threads have notification counts, this whole object can be omitted.
x-addedInMatrixVersion: "1.4"
patternProperties:
"^\\$":
x-pattern-format: mx-event-id
title: ThreadNotificationCounts
type: object
properties:
highlight_count:
title: ThreadedHighlightNotificationCount
type: integer
description: The number of unread notifications for this *thread* with the
highlight flag set.
notification_count:
title: ThreadedTotalNotificationCount
type: integer
description: The total number of unread notifications for this *thread*.
invite: invite:
title: Invited Rooms title: Invited Rooms
type: object type: object
description: |- description: |-
The rooms that the user has been invited to, mapped as room ID to The rooms that the user has been invited to, mapped as room ID to
room information. room information.
additionalProperties: patternProperties:
title: Invited Room "^!":
type: object x-pattern-format: mx-room-id
properties: title: Invited Room
invite_state: type: object
title: InviteState properties:
type: object invite_state:
description: |- title: InviteState
The [stripped state](#stripped-state) of a room that the user has been invited type: object
to. description: |-
properties: The [stripped state](#stripped-state) of a room that the user has been invited
events: to.
description: The [stripped state events](#stripped-state) that form the invite properties:
state. events:
items: description: The [stripped state events](#stripped-state) that form the invite
$ref: ../../event-schemas/schema/core-event-schema/stripped_state.yaml state.
type: array items:
$ref: ../../event-schemas/schema/core-event-schema/stripped_state.yaml
type: array
knock: knock:
title: Knocked rooms title: Knocked rooms
type: object type: object
description: The rooms that the user has knocked upon, mapped as room ID to room description: The rooms that the user has knocked upon, mapped as room ID to room
information. information.
additionalProperties: patternProperties:
title: Knocked Room "^!":
type: object x-pattern-format: mx-room-id
properties: title: Knocked Room
knock_state: type: object
title: KnockState properties:
type: object knock_state:
description: The [stripped state](#stripped-state) of a room that the user has title: KnockState
knocked upon. type: object
properties: description: The [stripped state](#stripped-state) of a room that the user has
events: knocked upon.
description: The [stripped state events](#stripped-state) that form the knock properties:
state. events:
items: description: The [stripped state events](#stripped-state) that form the knock
$ref: ../../event-schemas/schema/core-event-schema/stripped_state.yaml state.
type: array items:
$ref: ../../event-schemas/schema/core-event-schema/stripped_state.yaml
type: array
leave: leave:
title: Left rooms title: Left rooms
type: object type: object
description: |- description: |-
The rooms that the user has left or been banned from, mapped as room ID to The rooms that the user has left or been banned from, mapped as room ID to
room information. room information.
additionalProperties: patternProperties:
title: Left Room "^!":
type: object x-pattern-format: mx-room-id
properties: title: Left Room
state: type: object
title: State properties:
type: object state:
description: The state updates for the room up to the start of the timeline. title: State
allOf: type: object
- $ref: definitions/state_event_batch.yaml description: The state updates for the room up to the start of the timeline.
timeline: allOf:
title: Timeline - $ref: definitions/state_event_batch.yaml
type: object timeline:
description: |- title: Timeline
The timeline of messages and state changes in the type: object
room up to the point when the user left. description: |-
allOf: The timeline of messages and state changes in the
- $ref: definitions/timeline_batch.yaml room up to the point when the user left.
account_data: allOf:
title: Account Data - $ref: definitions/timeline_batch.yaml
type: object account_data:
description: |- title: Account Data
The private data that this user has attached to type: object
this room. description: |-
allOf: The private data that this user has attached to
- $ref: definitions/event_batch.yaml this room.
allOf:
- $ref: definitions/event_batch.yaml
presence: presence:
title: Presence title: Presence
type: object type: object

@ -57,12 +57,14 @@ paths:
The messages to send. A map from user ID, to a map from The messages to send. A map from user ID, to a map from
device ID to message body. The device ID may also be `*`, device ID to message body. The device ID may also be `*`,
meaning all known devices for the user. meaning all known devices for the user.
additionalProperties: patternProperties:
type: object "^@":
additionalProperties: x-pattern-format: mx-user-id
type: object type: object
title: EventContent additionalProperties:
description: Message content type: object
title: EventContent
description: Message content
example: example:
"@alice:example.com": "@alice:example.com":
TLLBEANAAG: TLLBEANAAG:

@ -51,13 +51,15 @@ allOf:
The contents of the messages to be sent. These are arranged in The contents of the messages to be sent. These are arranged in
a map of user IDs to a map of device IDs to message bodies. a map of user IDs to a map of device IDs to message bodies.
The device ID may also be `*`, meaning all known devices for the user. The device ID may also be `*`, meaning all known devices for the user.
additionalProperties: patternProperties:
type: object "^@":
title: User Devices x-pattern-format: mx-user-id
additionalProperties:
type: object type: object
title: Device Message Contents title: User Devices
properties: {} additionalProperties:
type: object
title: Device Message Contents
properties: {}
example: { example: {
"@alice:example.org": { "@alice:example.org": {
"IWHQUZUIAH": { "IWHQUZUIAH": {

@ -33,54 +33,58 @@ allOf:
description: |- description: |-
Receipts for a particular room. The string key is the room ID for Receipts for a particular room. The string key is the room ID for
which the receipts under it belong. which the receipts under it belong.
additionalProperties: patternProperties:
type: object "^!":
title: Room Receipts x-pattern-format: mx-room-id
properties: type: object
# We strongly define the receipt type to help spec future ones later title: Room Receipts
# on. At that point, m.read can become optional (maybe). properties:
"m.read": # We strongly define the receipt type to help spec future ones later
type: object # on. At that point, m.read can become optional (maybe).
description: |- "m.read":
Read receipts for users in the room. The string key is the user
ID the receipt belongs to.
additionalProperties:
type: object type: object
title: User Read Receipt description: |-
properties: Read receipts for users in the room. The string key is the user
event_ids: ID the receipt belongs to.
type: array patternProperties:
description: |- "^@":
The extremity event IDs that the user has read up to. x-pattern-format: mx-user-id
minItems: 1
maxItems: 1
items:
type: string
example: ['$read_this_event:matrix.org']
data:
type: object type: object
description: Metadata for the read receipt. title: User Read Receipt
title: Read Receipt Metadata
properties: properties:
ts: event_ids:
type: integer type: array
format: int64
description: |- description: |-
A POSIX timestamp in milliseconds for when the user read The extremity event IDs that the user has read up to.
the event specified in the read receipt. minItems: 1
example: 1533358089009 maxItems: 1
thread_id: items:
type: string type: string
x-addedInMatrixVersion: "1.4" example: ['$read_this_event:matrix.org']
description: |- data:
The root thread event's ID (or `main`) for which type: object
thread this receipt is intended to be under. If description: Metadata for the read receipt.
not specified, the read receipt is *unthreaded* title: Read Receipt Metadata
(default). properties:
example: "$threadroot" ts:
required: ['ts'] type: integer
required: ['event_ids', 'data'] format: int64
required: ['m.read'] description: |-
A POSIX timestamp in milliseconds for when the user read
the event specified in the read receipt.
example: 1533358089009
thread_id:
type: string
x-addedInMatrixVersion: "1.4"
description: |-
The root thread event's ID (or `main`) for which
thread this receipt is intended to be under. If
not specified, the read receipt is *unthreaded*
(default).
example: "$threadroot"
required: ['ts']
required: ['event_ids', 'data']
required: ['m.read']
example: { example: {
"!some_room:example.org": { "!some_room:example.org": {
"m.read": { "m.read": {

@ -74,17 +74,19 @@ paths:
description: |- description: |-
The PDUs from the original transaction. The string key represents the ID of the The PDUs from the original transaction. The string key represents the ID of the
PDU (event) that was processed. PDU (event) that was processed.
additionalProperties: patternProperties:
type: object "^\\$":
title: PDU Processing Result x-pattern-format: mx-event-id
description: Information about how the PDU was handled. type: object
properties: title: PDU Processing Result
error: description: Information about how the PDU was handled.
type: string properties:
description: |- error:
A human readable description about what went wrong in processing this PDU. type: string
If no error is present, the PDU can be considered successfully handled. description: |-
example: You are not allowed to send a message to this room. A human readable description about what went wrong in processing this PDU.
If no error is present, the PDU can be considered successfully handled.
example: You are not allowed to send a message to this room.
required: required:
- pdus - pdus
examples: examples:

@ -36,12 +36,14 @@ paths:
The keys to be claimed. A map from user ID, to a map from The keys to be claimed. A map from user ID, to a map from
device ID to algorithm name. Requested users must be local device ID to algorithm name. Requested users must be local
to the receiving homeserver. to the receiving homeserver.
additionalProperties: patternProperties:
type: object "^@":
additionalProperties: x-pattern-format: mx-user-id
type: string type: object
description: algorithm additionalProperties:
example: signed_curve25519 type: string
description: algorithm
example: signed_curve25519
example: example:
"@alice:example.com": "@alice:example.com":
JLAFKJWSCS: signed_curve25519 JLAFKJWSCS: signed_curve25519
@ -65,35 +67,37 @@ paths:
See the [Client-Server Key Algorithms](/client-server-api/#key-algorithms) section for more information on See the [Client-Server Key Algorithms](/client-server-api/#key-algorithms) section for more information on
the Key Object format. the Key Object format.
# User # User
additionalProperties: patternProperties:
type: object "^@":
# Device x-pattern-format: mx-user-id
additionalProperties:
type: object type: object
# Key # Device
additionalProperties: additionalProperties:
oneOf: type: object
- type: string # Key
- type: object additionalProperties:
title: KeyObject oneOf:
properties: - type: string
key: - type: object
type: string title: KeyObject
description: The key, encoded using unpadded base64. properties:
signatures: key:
type: object type: string
title: Signatures description: The key, encoded using unpadded base64.
additionalProperties: signatures:
type: object type: object
title: Signatures
additionalProperties: additionalProperties:
type: string type: object
description: |- additionalProperties:
Signature of the key object. type: string
description: |-
Signature of the key object.
The signature is calculated using the process described at [Signing JSON](/appendices/#signing-json). The signature is calculated using the process described at [Signing JSON](/appendices/#signing-json).
required: required:
- key - key
- signatures - signatures
example: example:
"@alice:example.com": "@alice:example.com":
JLAFKJWSCS: JLAFKJWSCS:
@ -124,11 +128,13 @@ paths:
device IDs, or to an empty list to indicate all devices for the device IDs, or to an empty list to indicate all devices for the
corresponding user. Requested users must be local to the corresponding user. Requested users must be local to the
receiving homeserver. receiving homeserver.
additionalProperties: patternProperties:
type: array "^@":
items: x-pattern-format: mx-user-id
type: string type: array
description: Device ID items:
type: string
description: Device ID
example: example:
"@alice:example.com": [] "@alice:example.com": []
required: required:
@ -150,23 +156,25 @@ paths:
the information returned will be the same as uploaded via the information returned will be the same as uploaded via
`/keys/upload`, with the addition of an `unsigned` `/keys/upload`, with the addition of an `unsigned`
property. property.
additionalProperties: patternProperties:
type: object "^@":
additionalProperties: x-pattern-format: mx-user-id
allOf: type: object
- $ref: ../client-server/definitions/device_keys.yaml additionalProperties:
properties: allOf:
unsigned: - $ref: ../client-server/definitions/device_keys.yaml
title: UnsignedDeviceInfo properties:
type: object unsigned:
description: |- title: UnsignedDeviceInfo
Additional data added to the device key information type: object
by intermediate servers, and not covered by the description: |-
signatures. Additional data added to the device key information
properties: by intermediate servers, and not covered by the
device_display_name: signatures.
type: string properties:
description: The display name which the user set on the device. device_display_name:
type: string
description: The display name which the user set on the device.
master_keys: master_keys:
x-addedInMatrixVersion: "1.1" x-addedInMatrixVersion: "1.1"
type: object type: object
@ -177,8 +185,11 @@ paths:
`/keys/device_signing/upload`, along with the signatures `/keys/device_signing/upload`, along with the signatures
uploaded via `/keys/signatures/upload` that the user is uploaded via `/keys/signatures/upload` that the user is
allowed to see. allowed to see.
additionalProperties: patternProperties:
$ref: ../client-server/definitions/cross_signing_key.yaml "^@":
x-pattern-format: mx-user-id
allOf:
- $ref: ../client-server/definitions/cross_signing_key.yaml
example: example:
"@alice:example.com": "@alice:example.com":
user_id: "@alice:example.com" user_id: "@alice:example.com"
@ -194,8 +205,11 @@ paths:
from user ID, to self-signing key information. For each key, the from user ID, to self-signing key information. For each key, the
information returned will be the same as uploaded via information returned will be the same as uploaded via
`/keys/device_signing/upload`. `/keys/device_signing/upload`.
additionalProperties: patternProperties:
$ref: ../client-server/definitions/cross_signing_key.yaml "^@":
x-pattern-format: mx-user-id
allOf:
- $ref: ../client-server/definitions/cross_signing_key.yaml
example: example:
"@alice:example.com": "@alice:example.com":
user_id: "@alice:example.com" user_id: "@alice:example.com"

@ -32,6 +32,11 @@ mx-event-id:
url: /appendices#event-ids url: /appendices#event-ids
# regex: "^\\$" # regex: "^\\$"
mx-room-id:
title: Room ID
url: /appendices#room-ids
# regex: "^!"
uri: uri:
title: URI title: URI
url: http://tools.ietf.org/html/rfc3986 url: http://tools.ietf.org/html/rfc3986

@ -9,10 +9,12 @@ description: |-
that user ID. that user ID.
properties: properties:
content: content:
additionalProperties: patternProperties:
type: array "^@":
items: x-pattern-format: mx-user-id
type: string type: array
items:
type: string
type: object type: object
description: |- description: |-
The mapping of user ID to a list of room IDs of the 'direct' rooms for The mapping of user ID to a list of room IDs of the 'direct' rooms for

@ -67,8 +67,10 @@ properties:
by the `events` key. Defaults to 50 if unspecified. by the `events` key. Defaults to 50 if unspecified.
type: integer type: integer
users: users:
additionalProperties: patternProperties:
type: integer "^@":
x-pattern-format: mx-user-id
type: integer
description: The power levels for specific users. This is a mapping from `user_id` to power level for that user. description: The power levels for specific users. This is a mapping from `user_id` to power level for that user.
title: User power levels title: User power levels
type: object type: object

Loading…
Cancel
Save