forked from mystiq/hydrogen-web
57 lines
1.5 KiB
JavaScript
57 lines
1.5 KiB
JavaScript
/*
|
|
Copyright 2020 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.
|
|
*/
|
|
|
|
import {groupByWithCreator} from "../../../../utils/groupBy.js";
|
|
|
|
function getSenderKey(event) {
|
|
return event.content?.["sender_key"];
|
|
}
|
|
|
|
function getSessionId(event) {
|
|
return event.content?.["session_id"];
|
|
}
|
|
|
|
function getCiphertext(event) {
|
|
return event.content?.ciphertext;
|
|
}
|
|
|
|
export function validateEvent(event) {
|
|
return typeof getSenderKey(event) === "string" &&
|
|
typeof getSessionId(event) === "string" &&
|
|
typeof getCiphertext(event) === "string";
|
|
}
|
|
|
|
class SessionKeyGroup {
|
|
constructor() {
|
|
this.events = [];
|
|
}
|
|
|
|
get senderKey() {
|
|
return getSenderKey(this.events[0]);
|
|
}
|
|
|
|
get sessionId() {
|
|
return getSessionId(this.events[0]);
|
|
}
|
|
}
|
|
|
|
export function groupEventsBySession(events) {
|
|
return groupByWithCreator(events,
|
|
event => `${getSenderKey(event)}|${getSessionId(event)}`,
|
|
() => new SessionKeyGroup(),
|
|
(group, event) => group.events.push(event)
|
|
);
|
|
}
|