aboutsummaryrefslogtreecommitdiff
path: root/roomserver/api
diff options
context:
space:
mode:
Diffstat (limited to 'roomserver/api')
-rw-r--r--roomserver/api/output.go16
1 files changed, 16 insertions, 0 deletions
diff --git a/roomserver/api/output.go b/roomserver/api/output.go
index b25353ae..d6c09f9e 100644
--- a/roomserver/api/output.go
+++ b/roomserver/api/output.go
@@ -29,6 +29,22 @@ const (
// OutputTypeRetireInviteEvent indicates that the event is an OutputRetireInviteEvent
OutputTypeRetireInviteEvent OutputType = "retire_invite_event"
// OutputTypeRedactedEvent indicates that the event is an OutputRedactedEvent
+ //
+ // This event is emitted when a redaction has been 'validated' (meaning both the redaction and the event to redact are known).
+ // Redaction validation happens when the roomserver receives either:
+ // - A redaction for which we have the event to redact.
+ // - Any event for which we have a redaction.
+ // When the roomserver receives an event, it will check against the redactions table to see if there is a matching redaction
+ // for the event. If there is, it will mark the redaction as validated and emit this event. In the common case of a redaction
+ // happening after receiving the event to redact, the roomserver will emit a OutputTypeNewRoomEvent of m.room.redaction
+ // immediately followed by a OutputTypeRedactedEvent. In the uncommon case of receiving the redaction BEFORE the event to redact,
+ // the roomserver will emit a OutputTypeNewRoomEvent of the event to redact immediately followed by a OutputTypeRedactedEvent.
+ //
+ // In order to honour redactions correctly, downstream components must ignore m.room.redaction events emitted via OutputTypeNewRoomEvent.
+ // When downstream components receive an OutputTypeRedactedEvent they must:
+ // - Pull out the event to redact from the database. They should have this because the redaction is validated.
+ // - Redact the event and set the corresponding `unsigned` fields to indicate it as redacted.
+ // - Replace the event in the database.
OutputTypeRedactedEvent OutputType = "redacted_event"
)