You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

22 lines
639 B
JavaScript

"use strict";
const syncpipe = require("syncpipe");
// NOTE: This is a workaround for https://github.com/matrix-org/synapse/issues/1597
module.exports = function removeStateDuplication(events) {
let seenTimelineEvents = syncpipe(events, [
(_) => _.filter((event) => event.type === "roomTimelineEvent"),
(_) => _.map((event) => event.event.event_id),
(_) => _.filter((id) => id != null),
(_) => new Set(_)
]);
return events.filter((event) => {
let isStateEvent = event.type === "roomStateUpdate";
let isDuplicatedState = isStateEvent && seenTimelineEvents.has(event.event.event_id);
return !isDuplicatedState;
});
};