Skip to content

Commit ea77028

Browse files
authored
Simplify code paths for building to-device MatrixEvents (#4729)
We don't need all the complicated stuff when we have a to-device event, so let's simplify.
1 parent bcaa7f6 commit ea77028

File tree

3 files changed

+12
-11
lines changed

3 files changed

+12
-11
lines changed

src/event-mapper.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ export interface MapperOpts {
2525
preventReEmit?: boolean;
2626
// decrypt event proactively
2727
decrypt?: boolean;
28-
// the event is a to_device event
28+
29+
/** @deprecated no longer used */
2930
toDevice?: boolean;
3031
}
3132

@@ -34,10 +35,6 @@ export function eventMapperFor(client: MatrixClient, options: MapperOpts): Event
3435
const decrypt = options.decrypt !== false;
3536

3637
function mapper(plainOldJsObject: Partial<IEvent>): MatrixEvent {
37-
if (options.toDevice) {
38-
delete plainOldJsObject.room_id;
39-
}
40-
4138
const room = client.getRoom(plainOldJsObject.room_id);
4239

4340
let event: MatrixEvent | undefined;
@@ -74,9 +71,6 @@ export function eventMapperFor(client: MatrixClient, options: MapperOpts): Event
7471
event.setThread(thread);
7572
}
7673

77-
// TODO: once we get rid of the old libolm-backed crypto, we can restrict this to room events (rather than
78-
// to-device events), because the rust implementation decrypts to-device messages at a higher level.
79-
// Generally we probably want to use a different eventMapper implementation for to-device events because
8074
if (event.isEncrypted()) {
8175
if (!preventReEmit) {
8276
client.reEmitter.reEmit(event, [MatrixEventEvent.Decrypted]);

src/sliding-sync-sdk.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import {
2828
defaultClientOpts,
2929
defaultSyncApiOpts,
3030
type SetPresence,
31+
mapToDeviceEvent,
3132
} from "./sync.ts";
3233
import { type MatrixEvent } from "./models/event.ts";
3334
import {
@@ -151,7 +152,7 @@ class ExtensionToDevice implements Extension<ExtensionToDeviceRequest, Extension
151152
events = await this.cryptoCallbacks.preprocessToDeviceMessages(events);
152153
}
153154
events
154-
.map(this.client.getEventMapper())
155+
.map(mapToDeviceEvent)
155156
.map((toDeviceEvent) => {
156157
// map is a cheap inline forEach
157158
// We want to flag m.key.verification.start events as cancelled

src/sync.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ import {
5454
type ITimeline,
5555
type IToDeviceEvent,
5656
} from "./sync-accumulator.ts";
57-
import { type MatrixEvent } from "./models/event.ts";
57+
import { MatrixEvent, type IEvent } from "./models/event.ts";
5858
import { type MatrixError, Method } from "./http-api/index.ts";
5959
import { type ISavedSync } from "./store/index.ts";
6060
import { EventType } from "./@types/event.ts";
@@ -1152,7 +1152,7 @@ export class SyncApi {
11521152

11531153
const cancelledKeyVerificationTxns: string[] = [];
11541154
toDeviceMessages
1155-
.map(client.getEventMapper({ toDevice: true }))
1155+
.map(mapToDeviceEvent)
11561156
.map((toDeviceEvent) => {
11571157
// map is a cheap inline forEach
11581158
// We want to flag m.key.verification.start events as cancelled
@@ -1945,3 +1945,9 @@ export function _createAndReEmitRoom(client: MatrixClient, roomId: string, opts:
19451945

19461946
return room;
19471947
}
1948+
1949+
export function mapToDeviceEvent(plainOldJsObject: Partial<IEvent>): MatrixEvent {
1950+
// to-device events should not have a `room_id` property, but let's be sure
1951+
delete plainOldJsObject.room_id;
1952+
return new MatrixEvent(plainOldJsObject);
1953+
}

0 commit comments

Comments
 (0)