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