From 4ae17e467801cb196937d6f58b0a9cfedf1de323 Mon Sep 17 00:00:00 2001 From: Debdut Chakraborty Date: Sat, 13 Dec 2025 10:45:35 +0530 Subject: [PATCH 1/2] refactor: remove stateService.getRoomInformation --- .../src/services/message.service.ts | 16 +++++----- .../src/services/profiles.service.ts | 6 ++-- .../src/services/room.service.ts | 25 +++++++--------- .../src/services/state.service.ts | 30 +------------------ 4 files changed, 21 insertions(+), 56 deletions(-) diff --git a/packages/federation-sdk/src/services/message.service.ts b/packages/federation-sdk/src/services/message.service.ts index c51c40e87..6a55b2c41 100644 --- a/packages/federation-sdk/src/services/message.service.ts +++ b/packages/federation-sdk/src/services/message.service.ts @@ -292,7 +292,7 @@ export class MessageService { ); } - const roomInfo = await this.stateService.getRoomInformation(roomId); + const roomVersion = await this.stateService.getRoomVersion(roomId); const reactionEvent = await this.stateService.buildEvent<'m.reaction'>( { @@ -311,7 +311,7 @@ export class MessageService { origin_server_ts: Date.now(), sender: senderUserId, }, - roomInfo.room_version, + roomVersion, ); await this.stateService.handlePdu(reactionEvent); @@ -327,7 +327,7 @@ export class MessageService { _emoji: string, senderUserId: UserID, ): Promise { - const roomInfo = await this.stateService.getRoomInformation(roomId); + const roomVersion = await this.stateService.getRoomVersion(roomId); const redactionEvent = await this.stateService.buildEvent<'m.room.redaction'>( @@ -344,7 +344,7 @@ export class MessageService { origin_server_ts: Date.now(), sender: senderUserId, }, - roomInfo.room_version, + roomVersion, ); await this.stateService.handlePdu(redactionEvent); @@ -361,7 +361,7 @@ export class MessageService { senderUserId: UserID, eventIdToReplace: EventID, ): Promise { - const roomInfo = await this.stateService.getRoomInformation(roomId); + const roomVersion = await this.stateService.getRoomVersion(roomId); const redactionEvent = await this.stateService.buildEvent<'m.room.message'>( { @@ -389,7 +389,7 @@ export class MessageService { origin_server_ts: Date.now(), sender: senderUserId, }, - roomInfo.room_version, + roomVersion, ); await this.stateService.handlePdu(redactionEvent); @@ -411,7 +411,7 @@ export class MessageService { throw new ForbiddenError('Cannot delete a message in a tombstoned room'); } - const roomInfo = await this.stateService.getRoomInformation(roomId); + const roomVersion = await this.stateService.getRoomVersion(roomId); const senderUserId = await this.eventService.getEventById(eventIdToRedact); if (!senderUserId?.event.sender) { @@ -433,7 +433,7 @@ export class MessageService { origin_server_ts: Date.now(), sender: senderUserId.event.sender, }, - roomInfo.room_version, + roomVersion, ); await this.stateService.handlePdu(redactionEvent); diff --git a/packages/federation-sdk/src/services/profiles.service.ts b/packages/federation-sdk/src/services/profiles.service.ts index ac9fa965c..b2ffc49b1 100644 --- a/packages/federation-sdk/src/services/profiles.service.ts +++ b/packages/federation-sdk/src/services/profiles.service.ts @@ -69,9 +69,7 @@ export class ProfilesService { room_version: RoomVersion; }> { const stateService = this.stateService; - const roomInformation = await stateService.getRoomInformation(roomId); - - const roomVersion = roomInformation.room_version; + const roomVersion = await this.stateService.getRoomVersion(roomId); if (!versions.includes(roomVersion)) { throw new Error(`Unsupported room version: ${roomVersion}`); @@ -97,7 +95,7 @@ export class ProfilesService { origin_server_ts: Date.now(), sender: userId, }, - roomInformation.room_version, + roomVersion, ); return { diff --git a/packages/federation-sdk/src/services/room.service.ts b/packages/federation-sdk/src/services/room.service.ts index b4ac1d543..4e09deaf9 100644 --- a/packages/federation-sdk/src/services/room.service.ts +++ b/packages/federation-sdk/src/services/room.service.ts @@ -33,17 +33,12 @@ import { EventStagingRepository } from '../repositories/event-staging.repository import { EventRepository } from '../repositories/event.repository'; import { RoomRepository } from '../repositories/room.repository'; import { ConfigService } from './config.service'; -import { EventAuthorizationService } from './event-authorization.service'; import { EventEmitterService } from './event-emitter.service'; import { EventFetcherService } from './event-fetcher.service'; import { EventService } from './event.service'; import { FederationService } from './federation.service'; import { InviteService } from './invite.service'; -import { - RoomInfoNotReadyError, - StateService, - UnknownRoomError, -} from './state.service'; +import { StateService, UnknownRoomError } from './state.service'; @singleton() export class RoomService { @@ -575,7 +570,7 @@ export class RoomService { event: PduForType<'m.room.member'> & { origin: string }; room_version: RoomVersion; }> { - const roomInfo = await this.stateService.getRoomInformation(roomId); + const roomVersion = await this.stateService.getRoomVersion(roomId); const leaveEvent = await this.stateService.buildEvent<'m.room.member'>( { type: 'm.room.member', @@ -588,7 +583,7 @@ export class RoomService { origin_server_ts: Date.now(), sender: senderId, }, - roomInfo.room_version, + roomVersion, ); return { @@ -596,7 +591,7 @@ export class RoomService { ...leaveEvent.event, origin: this.configService.serverName, }, - room_version: roomInfo.room_version, + room_version: roomVersion, }; } @@ -709,7 +704,7 @@ export class RoomService { }`, ); - const roomInfo = await this.stateService.getRoomInformation(roomId); + const roomVersion = await this.stateService.getRoomVersion(roomId); const authEventIdsForPowerLevels = await this.eventService.getAuthEventIds( 'm.room.power_levels', @@ -764,7 +759,7 @@ export class RoomService { origin_server_ts: Date.now(), sender: senderId, }, - roomInfo.room_version, + roomVersion, ); await this.stateService.handlePdu(kickEvent); @@ -783,7 +778,7 @@ export class RoomService { userId: UserID, displayName: string, ): Promise> { - const roomInfo = await this.stateService.getRoomInformation(roomId); + const roomVersion = await this.stateService.getRoomVersion(roomId); const currentState = await this.stateService.getLatestRoomState(roomId); const currentMembership = currentState.get(`m.room.member:${userId}`); @@ -806,7 +801,7 @@ export class RoomService { prev_events: [], origin_server_ts: Date.now(), }, - roomInfo.room_version, + roomVersion, ); await this.stateService.handlePdu(memberEvent); @@ -834,7 +829,7 @@ export class RoomService { }`, ); - const roomInfo = await this.stateService.getRoomInformation(roomId); + const roomVersion = await this.stateService.getRoomVersion(roomId); const authEventIdsForPowerLevels = await this.eventService.getAuthEventIds( 'm.room.power_levels', @@ -890,7 +885,7 @@ export class RoomService { origin_server_ts: Date.now(), sender: senderId, }, - roomInfo.room_version, + roomVersion, ); await this.stateService.handlePdu(banEvent); diff --git a/packages/federation-sdk/src/services/state.service.ts b/packages/federation-sdk/src/services/state.service.ts index c1361e524..475ef9a9b 100644 --- a/packages/federation-sdk/src/services/state.service.ts +++ b/packages/federation-sdk/src/services/state.service.ts @@ -19,6 +19,7 @@ import { type StateMapKey, StateResolverAuthorizationError, checkEventAuthWithState, + checkEventAuthWithoutState, extractDomainFromId, resolveStateV2Plus, } from '@rocket.chat/federation-room'; @@ -60,13 +61,6 @@ export class UnknownRoomError extends Error { this.name = 'UnknownRoomError'; } } -export class RoomInfoNotReadyError extends Error { - constructor(message: string) { - super(message); - this.name = 'RoomInfoNotReadyError'; - } -} - @singleton() export class StateService { private readonly logger = createLogger('StateService'); @@ -80,28 +74,6 @@ export class StateService { private readonly eventService: EventService, ) {} - // TODO: this is a very vague method, better would be to use exactly what needed, - // or getCreateEvent. - // currently AFAIK mostly is used for just room version - async getRoomInformation(roomId: string): Promise { - const { event, stateId } = - (await this.eventRepository.findByRoomIdAndType( - roomId, - 'm.room.create', - )) ?? {}; - if (event?.type !== 'm.room.create') { - throw new RoomInfoNotReadyError( - 'Create event mapping not found for room information', - ); - } - - if (!stateId) { - throw new Error('Create event has no state id, something is very wrong'); - } - - return event.content; - } - async getRoomVersion(roomId: RoomID): Promise { const createEvent = await this.eventRepository.findByRoomIdAndType( roomId, From cd668353873f9b355afaab873c84b6a4f9a81e57 Mon Sep 17 00:00:00 2001 From: Debdut Chakraborty Date: Sat, 13 Dec 2025 11:01:23 +0530 Subject: [PATCH 2/2] Update packages/federation-sdk/src/services/state.service.ts --- packages/federation-sdk/src/services/state.service.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/federation-sdk/src/services/state.service.ts b/packages/federation-sdk/src/services/state.service.ts index 475ef9a9b..2f5f7481e 100644 --- a/packages/federation-sdk/src/services/state.service.ts +++ b/packages/federation-sdk/src/services/state.service.ts @@ -19,7 +19,6 @@ import { type StateMapKey, StateResolverAuthorizationError, checkEventAuthWithState, - checkEventAuthWithoutState, extractDomainFromId, resolveStateV2Plus, } from '@rocket.chat/federation-room';