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.
|
|
|
"use strict";
|
|
|
|
|
|
|
|
const { validateArguments } = require("@validatem/core");
|
|
|
|
const required = require("@validatem/required");
|
|
|
|
const concatArrays = require("concat-arrays");
|
|
|
|
const itemDeduplicator = require("../item-deduplicator");
|
|
|
|
|
|
|
|
const isMessagesResponse = require("../is-messages-response");
|
|
|
|
|
|
|
|
module.exports = function parseMessagesResponse(_response, strict = false) {
|
|
|
|
// FIXME: Figure out a way to soft-fail, and turn the validation error into a warning event
|
|
|
|
let [ response ] = validateArguments(arguments, {
|
|
|
|
response: [ required, isMessagesResponse(strict) ]
|
|
|
|
});
|
|
|
|
|
|
|
|
let deduplicateEvent = itemDeduplicator((event) => event.event_id);
|
|
|
|
|
|
|
|
function toTimestampedEvent(event, type) {
|
|
|
|
return {
|
|
|
|
type: type,
|
|
|
|
event: deduplicateEvent(event),
|
|
|
|
timestamp: event.origin_server_ts
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
if (response.chunk.length > 0) {
|
|
|
|
return {
|
|
|
|
events: concatArrays(
|
|
|
|
response.chunk.map((event) => toTimestampedEvent(event, "roomTimelineEvent")),
|
|
|
|
response.state.map((event) => toTimestampedEvent(event, "roomStateUpdate")),
|
|
|
|
),
|
|
|
|
paginationToken: response.end
|
|
|
|
};
|
|
|
|
} else {
|
|
|
|
return { events: [] };
|
|
|
|
}
|
|
|
|
};
|