Skip to content

Commit a562524

Browse files
committed
refactor: migrate to unified event creation method in services
Updated ProfilesService, RoomService, and SendJoinService to utilize the new `buildEvent` method for creating room events. This refactor enhances code consistency and readability by standardizing the event construction process across multiple services, while also removing deprecated methods for adding authentication and previous events.
1 parent 3f8739b commit a562524

File tree

5 files changed

+47
-107
lines changed

5 files changed

+47
-107
lines changed

packages/core/src/events/m.room.tombstone.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ declare module './eventBase' {
2020
}
2121

2222
export type TombstoneAuthEvents = {
23-
'm.room.create': string | undefined;
24-
'm.room.power_levels': string | undefined;
25-
'm.room.member': string | undefined;
23+
'm.room.create': string;
24+
'm.room.power_levels': string;
25+
'm.room.member': string;
2626
};
2727

2828
type RoomTombstoneEventProps = {

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ export class ProfilesService {
7979
throw new Error(`Unsupported room version: ${roomVersion}`);
8080
}
8181

82-
const membershipEvent = PersistentEventFactory.newEvent<'m.room.member'>(
82+
const membershipEvent = await stateService.buildEvent<'m.room.member'>(
8383
{
8484
type: 'm.room.member',
8585
content: { membership: 'join' },
@@ -94,9 +94,6 @@ export class ProfilesService {
9494
roomInformation.room_version,
9595
);
9696

97-
await stateService.addAuthEvents(membershipEvent);
98-
await stateService.addPrevEvents(membershipEvent);
99-
10097
return {
10198
room_version: roomVersion,
10299
event: membershipEvent.event,

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

Lines changed: 37 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ export class RoomService {
244244
await stateService.persistStateEvent(roomCreateEvent);
245245

246246
const creatorMembershipEvent =
247-
PersistentEventFactory.newEvent<'m.room.member'>(
247+
await stateService.buildEvent<'m.room.member'>(
248248
{
249249
type: 'm.room.member',
250250
content: { membership: 'join' },
@@ -259,13 +259,9 @@ export class RoomService {
259259
PersistentEventFactory.defaultRoomVersion,
260260
);
261261

262-
await stateService.addAuthEvents(creatorMembershipEvent);
263-
264-
await stateService.addPrevEvents(creatorMembershipEvent);
265-
266262
await stateService.persistStateEvent(creatorMembershipEvent);
267263

268-
const roomNameEvent = PersistentEventFactory.newEvent<'m.room.name'>(
264+
const roomNameEvent = await stateService.buildEvent<'m.room.name'>(
269265
{
270266
type: 'm.room.name',
271267
content: { name: name },
@@ -280,14 +276,10 @@ export class RoomService {
280276
PersistentEventFactory.defaultRoomVersion,
281277
);
282278

283-
await stateService.addAuthEvents(roomNameEvent);
284-
285-
await stateService.addPrevEvents(roomNameEvent);
286-
287279
await stateService.persistStateEvent(roomNameEvent);
288280

289281
const powerLevelEvent =
290-
PersistentEventFactory.newEvent<'m.room.power_levels'>(
282+
await stateService.buildEvent<'m.room.power_levels'>(
291283
{
292284
type: 'm.room.power_levels',
293285
content: {
@@ -314,13 +306,9 @@ export class RoomService {
314306
PersistentEventFactory.defaultRoomVersion,
315307
);
316308

317-
await stateService.addAuthEvents(powerLevelEvent);
318-
319-
await stateService.addPrevEvents(powerLevelEvent);
320-
321309
await stateService.persistStateEvent(powerLevelEvent);
322310

323-
const joinRuleEvent = PersistentEventFactory.newEvent<'m.room.join_rules'>(
311+
const joinRuleEvent = await stateService.buildEvent<'m.room.join_rules'>(
324312
{
325313
type: 'm.room.join_rules',
326314
content: { join_rule: joinRule },
@@ -335,14 +323,10 @@ export class RoomService {
335323
PersistentEventFactory.defaultRoomVersion,
336324
);
337325

338-
await stateService.addAuthEvents(joinRuleEvent);
339-
340-
await stateService.addPrevEvents(joinRuleEvent);
341-
342326
await stateService.persistStateEvent(joinRuleEvent);
343327

344328
const canonicalAliasEvent =
345-
PersistentEventFactory.newEvent<'m.room.canonical_alias'>(
329+
await stateService.buildEvent<'m.room.canonical_alias'>(
346330
{
347331
type: 'm.room.canonical_alias',
348332
content: {
@@ -360,10 +344,6 @@ export class RoomService {
360344
PersistentEventFactory.defaultRoomVersion,
361345
);
362346

363-
await stateService.addAuthEvents(canonicalAliasEvent);
364-
365-
await stateService.addPrevEvents(canonicalAliasEvent);
366-
367347
await stateService.persistStateEvent(canonicalAliasEvent);
368348

369349
return {
@@ -381,8 +361,9 @@ export class RoomService {
381361
if (!roomversion) {
382362
throw new Error('Room version not found');
383363
}
364+
const stateService = this.stateService;
384365

385-
const roomNameEvent = PersistentEventFactory.newEvent<'m.room.name'>(
366+
const roomNameEvent = await stateService.buildEvent<'m.room.name'>(
386367
{
387368
type: 'm.room.name',
388369
content: { name },
@@ -397,12 +378,6 @@ export class RoomService {
397378
roomversion,
398379
);
399380

400-
const stateService = this.stateService;
401-
402-
await stateService.addAuthEvents(roomNameEvent);
403-
404-
await stateService.addPrevEvents(roomNameEvent);
405-
406381
await stateService.persistStateEvent(roomNameEvent);
407382

408383
void this.federationService.sendEventToAllServersInRoom(roomNameEvent);
@@ -416,7 +391,7 @@ export class RoomService {
416391
throw new Error('Room version not found while setting room topic');
417392
}
418393

419-
const topicEvent = PersistentEventFactory.newEvent<'m.room.topic'>(
394+
const topicEvent = await this.stateService.buildEvent<'m.room.topic'>(
420395
{
421396
type: 'm.room.topic',
422397
content: { topic },
@@ -431,10 +406,6 @@ export class RoomService {
431406
roomVersion,
432407
);
433408

434-
await this.stateService.addAuthEvents(topicEvent);
435-
await this.stateService.addPrevEvents(topicEvent);
436-
await this.stateService.signEvent(topicEvent);
437-
438409
await this.stateService.persistStateEvent(topicEvent);
439410

440411
void this.federationService.sendEventToAllServersInRoom(topicEvent);
@@ -552,7 +523,7 @@ export class RoomService {
552523
ts: Date.now(),
553524
}) as PduForType<'m.room.power_levels'>;
554525

555-
const event = PersistentEventFactory.newEvent<'m.room.power_levels'>(
526+
const event = await this.stateService.buildEvent<'m.room.power_levels'>(
556527
{
557528
type: 'm.room.power_levels',
558529
content: eventToSign.content,
@@ -567,9 +538,6 @@ export class RoomService {
567538
PersistentEventFactory.defaultRoomVersion,
568539
);
569540

570-
await this.stateService.addAuthEvents(event);
571-
await this.stateService.addPrevEvents(event);
572-
await this.stateService.signEvent(event);
573541
await this.stateService.persistStateEvent(event);
574542

575543
logger.info(
@@ -624,7 +592,7 @@ export class RoomService {
624592
);
625593
}
626594

627-
const leaveEvent = PersistentEventFactory.newEvent<'m.room.member'>(
595+
const leaveEvent = await this.stateService.buildEvent<'m.room.member'>(
628596
{
629597
type: 'm.room.member',
630598
content: { membership: 'leave' },
@@ -639,10 +607,6 @@ export class RoomService {
639607
roomInfo.room_version,
640608
);
641609

642-
await this.stateService.addAuthEvents(leaveEvent);
643-
644-
await this.stateService.addPrevEvents(leaveEvent);
645-
646610
await this.stateService.persistStateEvent(leaveEvent);
647611

648612
logger.info(
@@ -704,7 +668,7 @@ export class RoomService {
704668
kickedUserId,
705669
);
706670

707-
const kickEvent = PersistentEventFactory.newEvent<'m.room.member'>(
671+
const kickEvent = await this.stateService.buildEvent<'m.room.member'>(
708672
{
709673
type: 'm.room.member',
710674
content: {
@@ -722,10 +686,6 @@ export class RoomService {
722686
roomInfo.room_version,
723687
);
724688

725-
await this.stateService.addAuthEvents(kickEvent);
726-
727-
await this.stateService.addPrevEvents(kickEvent);
728-
729689
await this.stateService.persistStateEvent(kickEvent);
730690

731691
logger.info(
@@ -788,7 +748,7 @@ export class RoomService {
788748
bannedUserId,
789749
);
790750

791-
const banEvent = PersistentEventFactory.newEvent<'m.room.member'>(
751+
const banEvent = await this.stateService.buildEvent<'m.room.member'>(
792752
{
793753
type: 'm.room.member',
794754
content: {
@@ -806,10 +766,6 @@ export class RoomService {
806766
roomInfo.room_version,
807767
);
808768

809-
await this.stateService.addAuthEvents(banEvent);
810-
811-
await this.stateService.addPrevEvents(banEvent);
812-
813769
await this.stateService.persistStateEvent(banEvent);
814770

815771
logger.info(
@@ -844,7 +800,7 @@ export class RoomService {
844800
);
845801
}
846802

847-
const membershipEvent = PersistentEventFactory.newEvent<'m.room.member'>(
803+
const membershipEvent = await stateService.buildEvent<'m.room.member'>(
848804
{
849805
type: 'm.room.member',
850806
content: { membership: 'join' },
@@ -859,10 +815,6 @@ export class RoomService {
859815
PersistentEventFactory.defaultRoomVersion,
860816
);
861817

862-
await stateService.addAuthEvents(membershipEvent);
863-
864-
await stateService.addPrevEvents(membershipEvent);
865-
866818
await stateService.persistStateEvent(membershipEvent);
867819

868820
if (membershipEvent.rejected) {
@@ -1060,7 +1012,6 @@ export class RoomService {
10601012
): Promise<SignedEvent<PduForType<'m.room.tombstone'>>> {
10611013
logger.debug(`Marking room ${roomId} as tombstone by ${sender}`);
10621014
const serverName = this.configService.serverName;
1063-
const signingKey = await this.configService.getSigningKey();
10641015

10651016
const room = await this.roomRepository.findOneById(roomId);
10661017
if (!room) {
@@ -1110,32 +1061,26 @@ export class RoomService {
11101061
};
11111062
const prevEvents = latestEvent ? [latestEvent._id] : [];
11121063

1113-
const tombstoneEvent = roomTombstoneEvent({
1114-
roomId,
1115-
sender,
1116-
body: reason,
1117-
replacementRoom: replacementRoomId,
1118-
auth_events: authEventsMap,
1119-
prev_events: prevEvents,
1120-
depth,
1121-
origin: serverName,
1122-
}) as PduForType<'m.room.tombstone'>;
1123-
1124-
const signedEvent = await signEvent(
1125-
tombstoneEvent,
1126-
Array.isArray(signingKey) ? signingKey[0] : signingKey,
1127-
serverName,
1128-
);
1129-
1130-
const event = PersistentEventFactory.createFromRawEvent(
1131-
signedEvent,
1064+
const event = await this.stateService.buildEvent<'m.room.tombstone'>(
1065+
{
1066+
room_id: roomId,
1067+
sender: sender,
1068+
content: {
1069+
body: reason,
1070+
replacement_room: replacementRoomId,
1071+
},
1072+
auth_events: [...Object.values(authEventsMap)],
1073+
prev_events: prevEvents,
1074+
depth,
1075+
origin_server_ts: Date.now(),
1076+
unsigned: { age_ts: Date.now() },
1077+
hashes: { sha256: '' },
1078+
signatures: {},
1079+
type: 'm.room.tombstone',
1080+
},
11321081
PersistentEventFactory.defaultRoomVersion,
11331082
);
11341083

1135-
this.stateService.addAuthEvents(event);
1136-
this.stateService.addPrevEvents(event);
1137-
this.stateService.signEvent(event);
1138-
11391084
const _stateId = await this.stateService.persistStateEvent(event);
11401085

11411086
await this.roomRepository.markRoomAsDeleted(roomId, event.eventId);
@@ -1144,7 +1089,12 @@ export class RoomService {
11441089

11451090
logger.info(`Successfully marked room ${roomId} as tombstone`);
11461091

1147-
return signedEvent;
1092+
const { event: eventToReturn } = event;
1093+
1094+
return {
1095+
...eventToReturn,
1096+
event_id: event.eventId,
1097+
};
11481098
}
11491099

11501100
public async isRoomTombstoned(roomId: string): Promise<boolean> {
@@ -1209,7 +1159,7 @@ export class RoomService {
12091159

12101160
clone.users[userId] = powerLevel;
12111161

1212-
const event = PersistentEventFactory.newEvent<'m.room.power_levels'>(
1162+
const event = await this.stateService.buildEvent<'m.room.power_levels'>(
12131163
{
12141164
type: 'm.room.power_levels',
12151165
content: clone,
@@ -1224,10 +1174,6 @@ export class RoomService {
12241174
state.version,
12251175
);
12261176

1227-
await this.stateService.addAuthEvents(event);
1228-
await this.stateService.addPrevEvents(event);
1229-
await this.stateService.signEvent(event);
1230-
12311177
await this.stateService.persistStateEvent(event);
12321178

12331179
void this.federationService.sendEventToAllServersInRoom(event);

packages/federation-sdk/src/services/send-join.service.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,11 @@ export class SendJoinService {
3232
// delete existing auth events and refill them
3333
event.auth_events = [];
3434

35-
const joinEvent = PersistentEventFactory.createFromRawEvent(
35+
const joinEvent = await stateService.buildEvent<'m.room.member'>(
3636
event,
3737
roomVersion,
3838
);
3939

40-
await stateService.addAuthEvents(joinEvent);
41-
4240
// now check the calculated id if it matches what is passed in param
4341
if (joinEvent.eventId !== eventId) {
4442
// this is important sanity check
@@ -48,7 +46,6 @@ export class SendJoinService {
4846

4947
// fetch state before allowing join here - TODO: don't just persist the membership like this
5048
const state = await stateService.getFullRoomState(roomId);
51-
5249
await stateService.persistStateEvent(joinEvent);
5350

5451
if (joinEvent.rejected) {

0 commit comments

Comments
 (0)