Skip to content

Commit c544685

Browse files
authored
fix: prevent add prev_event or auth_events if the inital events are already informed (#248)
1 parent 6913a67 commit c544685

File tree

2 files changed

+23
-9
lines changed

2 files changed

+23
-9
lines changed

packages/federation-sdk/src/services/state.service.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -414,10 +414,9 @@ export class StateService {
414414
event,
415415
roomVersion,
416416
);
417-
418417
await Promise.all([
419-
this.addAuthEvents(instance),
420-
this.addPrevEvents(instance),
418+
instance.event.auth_events.length === 0 && this.addAuthEvents(instance),
419+
instance.event.prev_events.length === 0 && this.addPrevEvents(instance),
421420
]);
422421
await this.signEvent(instance);
423422

packages/room/src/manager/event-wrapper.ts

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ export abstract class PersistentEventBase<
5050

5151
protected rawEvent: PduWithHashesAndSignaturesOptional;
5252

53+
private authEventsIds: Set<EventID> = new Set();
54+
private prevEventsIds: Set<EventID> = new Set();
55+
5356
constructor(
5457
event: PduWithHashesAndSignaturesOptional,
5558
public readonly version: Version,
@@ -58,6 +61,16 @@ export abstract class PersistentEventBase<
5861
if (this.rawEvent.signatures) {
5962
this.signatures = this.rawEvent.signatures;
6063
}
64+
if (this.rawEvent.auth_events) {
65+
for (const id of this.rawEvent.auth_events) {
66+
this.authEventsIds.add(id);
67+
}
68+
}
69+
if (this.rawEvent.prev_events) {
70+
for (const id of this.rawEvent.prev_events) {
71+
this.prevEventsIds.add(id);
72+
}
73+
}
6174
}
6275

6376
// don't recalculate the hash if it is already set
@@ -118,8 +131,8 @@ export abstract class PersistentEventBase<
118131
const { hashes, signatures, ...event } = this.rawEvent;
119132
return {
120133
...event,
121-
auth_events: Array.from(new Set([...this.rawEvent.auth_events])),
122-
prev_events: Array.from(new Set([...this.rawEvent.prev_events])),
134+
auth_events: Array.from(this.authEventsIds),
135+
prev_events: Array.from(this.prevEventsIds),
123136
};
124137
}
125138

@@ -143,11 +156,11 @@ export abstract class PersistentEventBase<
143156
}
144157

145158
getAuthEventIds() {
146-
return this.rawEvent.auth_events;
159+
return Array.from(this.authEventsIds);
147160
}
148161

149162
getPreviousEventIds() {
150-
return this.rawEvent.prev_events;
163+
return Array.from(this.prevEventsIds);
151164
}
152165

153166
isState() {
@@ -419,15 +432,17 @@ export abstract class PersistentEventBase<
419432
}
420433

421434
addPrevEvents(events: PersistentEventBase<Version>[]) {
422-
this.rawEvent.prev_events.push(...events.map((e) => e.eventId));
435+
for (const event of events) {
436+
this.prevEventsIds.add(event.eventId);
437+
}
423438
if (this.rawEvent.depth <= events[events.length - 1].depth) {
424439
this.rawEvent.depth = events[events.length - 1].depth + 1;
425440
}
426441
return this;
427442
}
428443

429444
authedBy(event: PersistentEventBase<Version>) {
430-
this.rawEvent.auth_events.push(event.eventId);
445+
this.authEventsIds.add(event.eventId);
431446
return this;
432447
}
433448

0 commit comments

Comments
 (0)