diff --git a/packages/federation-sdk/src/services/federation.service.ts b/packages/federation-sdk/src/services/federation.service.ts index 7fed0c33f..c2d577c64 100644 --- a/packages/federation-sdk/src/services/federation.service.ts +++ b/packages/federation-sdk/src/services/federation.service.ts @@ -237,10 +237,16 @@ export class FederationService { const servers = await this.stateService.getServerSetInRoom(event.roomId); if (event.stateKey) { - const server = extractDomainFromId(event.stateKey); - // TODO: fgetser - if (!servers.has(server)) { - servers.add(server); + try { + const server = extractDomainFromId(event.stateKey); + if (server && !servers.has(server)) { + servers.add(server); + } + } catch (error) { + this.logger.error( + { error, eventId: event.eventId, stateKey: event.stateKey }, + 'Failed to extract server from stateKey', + ); } } diff --git a/packages/federation-sdk/src/services/state.service.ts b/packages/federation-sdk/src/services/state.service.ts index 15c498180..5d146128c 100644 --- a/packages/federation-sdk/src/services/state.service.ts +++ b/packages/federation-sdk/src/services/state.service.ts @@ -1118,16 +1118,6 @@ export class StateService { return this.getStateAtStateId(stateId, event.version); } - // TODO: remove this - async findStateAtEvent(eventId: EventID) { - const event = await this.getEvent(eventId); - if (!event) { - throw new Error(`EVent ${eventId} not found`); - } - - return this.getStateAtEvent(event); - } - async getAllPublicRoomIdsAndNames() { const createEvents = await this.eventRepository.findByType('m.room.create'); diff --git a/packages/homeserver/src/controllers/internal/room.controller.ts b/packages/homeserver/src/controllers/internal/room.controller.ts index 52def1a64..0127a878b 100644 --- a/packages/homeserver/src/controllers/internal/room.controller.ts +++ b/packages/homeserver/src/controllers/internal/room.controller.ts @@ -200,7 +200,11 @@ export const internalRoomPlugin = (app: Elysia) => { async ({ params, query }) => { const eventId = query.event_id; if (eventId) { - const room = await stateService.findStateAtEvent(eventId as EventID); + const event = await stateService.getEvent(eventId as EventID); + if (!event) { + throw new Error(`Event ${eventId} not found`); + } + const room = await stateService.getStateAtEvent(event); const state: Record = {}; for (const [key, value] of room.entries()) { state[key] = value.event; diff --git a/test-federation-fix.js b/test-federation-fix.js new file mode 100644 index 000000000..0519ecba6 --- /dev/null +++ b/test-federation-fix.js @@ -0,0 +1 @@ + \ No newline at end of file