Distinguish 'client' from 'federation' events (#3658)
Fixes #3305 Fixes #3380 The idea here is to better distinguish between a 'raw' event (as we send over the wire), and the 'serialised' format, as sent in responses to the C-S api and in `PUT /_matrix/app/v1/transactions/{txnId}`. It's made more complicated by the fact that there are _two_ serialisation formats, one used by `/sync` and `/notifications`, and one by everything else (the difference being whether `room_id` is included). In an ideal world, we wouldn't repeat `SerialisedEvent` every time it's used, and instead just link to the first reference, but that's a job for another day. Another job for another day is to get rid of things like `sync_state_event.yaml` (which is now used only in one place, so should be inlined.)pull/977/head
parent
d4c74d37a9
commit
36b02edfc2
@ -0,0 +1 @@
|
||||
Distinguish between "federation" event format as exchanged by the Federation API, and the "client" event formats as used in the client-server and AS APIs.
|
@ -0,0 +1 @@
|
||||
Distinguish between "federation" event format as exchanged by the Federation API, and the "client" event formats as used in the client-server and AS APIs.
|
@ -0,0 +1,47 @@
|
||||
# Copyright 2022 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.
|
||||
|
||||
title: ClientEvent
|
||||
description: |-
|
||||
The format used for events when they are returned from a homeserver to a client
|
||||
via the Client-Server API, or sent to an Application Service via the Application Services API.
|
||||
type: object
|
||||
allOf:
|
||||
- $ref: "client_event_without_room_id.yaml"
|
||||
- properties:
|
||||
room_id:
|
||||
description: The ID of the room associated with this event.
|
||||
type: string
|
||||
example: '!jEsUZKDJdhlrceRyVU:example.org'
|
||||
|
||||
unsigned:
|
||||
properties:
|
||||
redacted_because:
|
||||
title: ClientEvent
|
||||
example: {
|
||||
"type": "m.room.redaction",
|
||||
"sender": "@moderator:example.org",
|
||||
"content": {
|
||||
"reason": "spam"
|
||||
},
|
||||
"redacts": "$26RqwJMLw-yds1GAH_QxjHRC1Da9oasK0e5VLnck_45",
|
||||
"event_id": "$Nhl3rsgHMjk-DjMJANawr9HHAhLg4GcoTYrSiYYGqEE",
|
||||
"origin_server_ts": 1632491098485,
|
||||
"room_id": '!jEsUZKDJdhlrceRyVU:example.org',
|
||||
"unsigned": {
|
||||
"age": 1257,
|
||||
}
|
||||
}
|
||||
required:
|
||||
- room_id
|
@ -0,0 +1,110 @@
|
||||
# Copyright 2022 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.
|
||||
|
||||
title: ClientEventWithoutRoomID
|
||||
description: |-
|
||||
The format used for events when they are returned from
|
||||
API endpoints such as `/sync`, where the `room_id` is implied elsewhere
|
||||
in the response.
|
||||
type: object
|
||||
required:
|
||||
- event_id
|
||||
- type
|
||||
- sender
|
||||
- origin_server_ts
|
||||
- content
|
||||
properties:
|
||||
event_id:
|
||||
description: The globally unique identifier for this event.
|
||||
type: string
|
||||
example: '$26RqwJMLw-yds1GAH_QxjHRC1Da9oasK0e5VLnck_45'
|
||||
type:
|
||||
description: The type of the event.
|
||||
type: string
|
||||
example: 'm.room.member'
|
||||
state_key:
|
||||
description: |-
|
||||
Present if, and only if, this event is a *state* event. The key making
|
||||
this piece of state unique in the room. Note that it is often an empty
|
||||
string.
|
||||
type: string
|
||||
example: '@user:example.org'
|
||||
sender:
|
||||
description: Contains the fully-qualified ID of the user who sent this event.
|
||||
type: string
|
||||
example: "@example:example.org"
|
||||
origin_server_ts:
|
||||
description: |-
|
||||
Timestamp (in milliseconds since the unix epoch) on originating homeserver
|
||||
when this event was sent.
|
||||
type: integer
|
||||
format: int64
|
||||
example: 1632489532305
|
||||
content:
|
||||
description: |-
|
||||
The body of this event, as created by the client which sent it.
|
||||
type: object
|
||||
example: {
|
||||
"membership": "join"
|
||||
}
|
||||
unsigned:
|
||||
title: UnsignedData
|
||||
type: object
|
||||
description: Contains optional extra information about the event.
|
||||
properties:
|
||||
age:
|
||||
description: The time in milliseconds that has elapsed since the event was
|
||||
sent. This field is generated by the local homeserver, and may be incorrect
|
||||
if the local time on at least one of the two servers is out of sync, which can
|
||||
cause the age to either be negative or greater than it actually is.
|
||||
type: integer
|
||||
format: int64
|
||||
example: 1567437
|
||||
redacted_because:
|
||||
description: The event that redacted this event, if any.
|
||||
type: object
|
||||
title: ClientEventWithoutRoomID
|
||||
example: {
|
||||
"type": "m.room.redaction",
|
||||
"sender": "@moderator:example.org",
|
||||
"content": {
|
||||
"reason": "spam"
|
||||
},
|
||||
"redacts": "$26RqwJMLw-yds1GAH_QxjHRC1Da9oasK0e5VLnck_45",
|
||||
"event_id": "$Nhl3rsgHMjk-DjMJANawr9HHAhLg4GcoTYrSiYYGqEE",
|
||||
"origin_server_ts": 1632491098485,
|
||||
"unsigned": {
|
||||
"age": 1257,
|
||||
}
|
||||
}
|
||||
transaction_id:
|
||||
description: |
|
||||
The client-supplied transaction ID, for example, provided via
|
||||
`PUT /_matrix/client/v3/rooms/{roomId}/send/{eventType}/{txnId}`,
|
||||
if the client being given the event is the same one which sent it.
|
||||
type: string
|
||||
prev_content:
|
||||
description: |
|
||||
The previous `content` for this event. This field is generated
|
||||
by the local homeserver, and is only returned if the event is a state event,
|
||||
and the client has permission to see the previous content.
|
||||
x-changedInMatrixVersion:
|
||||
1.2: |
|
||||
Previously, this field was specified at the top level of returned
|
||||
events rather than in `unsigned` (with the exception of the [`GET
|
||||
.../notifications`](/client-server-api/#get_matrixclientv3notifications)
|
||||
endpoint), though in practice no known server implementations honoured
|
||||
this.
|
||||
title: EventContent
|
||||
type: object
|
@ -1,28 +0,0 @@
|
||||
# Copyright 2018 New Vector Ltd
|
||||
#
|
||||
# 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.
|
||||
properties:
|
||||
events:
|
||||
description: List of events.
|
||||
items:
|
||||
allOf:
|
||||
- $ref: ../../../event-schemas/schema/core-event-schema/sync_room_event.yaml
|
||||
type: object
|
||||
required:
|
||||
- event_id
|
||||
#- room_id - Not in /sync
|
||||
- sender
|
||||
- origin_server_ts
|
||||
type: array
|
||||
type: object
|
||||
title: RoomEventBatch
|
Loading…
Reference in New Issue