From f876ff53d520a6018d5ca8ed50b4e6ce77a4bc72 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Mon, 30 Mar 2026 18:01:49 -0300 Subject: [PATCH] fix: dont send transaction to invited server --- .../src/services/federation.service.ts | 14 ++++++++------ .../federation-sdk/src/services/invite.service.ts | 4 ++-- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/packages/federation-sdk/src/services/federation.service.ts b/packages/federation-sdk/src/services/federation.service.ts index a281aac0..ce278a99 100644 --- a/packages/federation-sdk/src/services/federation.service.ts +++ b/packages/federation-sdk/src/services/federation.service.ts @@ -194,7 +194,7 @@ export class FederationService { }); } - async sendEventToAllServersInRoom(event: PersistentEventBase) { + async sendEventToAllServersInRoom(event: PersistentEventBase, omitDestinations: string[] = []): Promise { // TODO we need a map of rooms and destinations to avoid having to get rooms state just to send an event to all servers in the room. const servers = await this.stateService.getServerSetInRoom(event.roomId); @@ -205,17 +205,19 @@ export class FederationService { } } - // Sign the event once before queuing - await this.stateService.signEvent(event); - - // Filter out the event origin and local server - const destinations = Array.from(servers).filter((server) => server !== event.origin && server !== this.configService.serverName); + // Filter out the event origin, local server, and any additional omitted destinations + const destinations = Array.from(servers).filter( + (server) => server !== event.origin && server !== this.configService.serverName && !omitDestinations.includes(server), + ); if (destinations.length === 0) { this.logger.debug(`No destinations to send event ${event.eventId}`); return; } + // Sign the event once before queuing + await this.stateService.signEvent(event); + this.logger.info(`Queueing event ${event.eventId} for ${destinations.length} destinations`); // Queue the event for all destinations diff --git a/packages/federation-sdk/src/services/invite.service.ts b/packages/federation-sdk/src/services/invite.service.ts index 490571ad..1dfe5d7f 100644 --- a/packages/federation-sdk/src/services/invite.service.ts +++ b/packages/federation-sdk/src/services/invite.service.ts @@ -125,8 +125,8 @@ export class InviteService { // can only invite if already part of the room await stateService.handlePdu(PersistentEventFactory.createFromRawEvent(inviteResponse.event, roomVersion)); - // let everyone know - void federationService.sendEventToAllServersInRoom(inviteEvent); + // let everyone else know + void federationService.sendEventToAllServersInRoom(inviteEvent, [invitedServer]); return { event_id: inviteEvent.eventId,