diff --git a/packages/server/src/routes/settings.ts b/packages/server/src/routes/settings.ts index 4be819b7..7bd6722f 100644 --- a/packages/server/src/routes/settings.ts +++ b/packages/server/src/routes/settings.ts @@ -192,6 +192,7 @@ export async function settingsRoutes(app: FastifyInstance): Promise { federationRelayEnabled: row.federationRelayEnabled === 1, federationRelayTtlDays: row.federationRelayTtlDays, defaultAutoRotateIntervalDays: row.defaultAutoRotateIntervalDays, + autoAcceptPeering: row.autoAcceptPeering === 1, }; return reply.code(200).send(response); @@ -258,6 +259,10 @@ export async function settingsRoutes(app: FastifyInstance): Promise { updateData.defaultAutoRotateIntervalDays = interval; } + if (body.autoAcceptPeering !== undefined) { + updateData.autoAcceptPeering = body.autoAcceptPeering ? 1 : 0; + } + db.update(schema.instanceSettings).set(updateData).where(eq(schema.instanceSettings.id, 1)).run(); const updatedRow = db.select().from(schema.instanceSettings).where(eq(schema.instanceSettings.id, 1)).get(); @@ -277,6 +282,7 @@ export async function settingsRoutes(app: FastifyInstance): Promise { federationRelayEnabled: updatedRow.federationRelayEnabled === 1, federationRelayTtlDays: updatedRow.federationRelayTtlDays, defaultAutoRotateIntervalDays: updatedRow.defaultAutoRotateIntervalDays, + autoAcceptPeering: updatedRow.autoAcceptPeering === 1, }; return reply.code(200).send(response); diff --git a/packages/server/src/ws/handler.ts b/packages/server/src/ws/handler.ts index 93d503ce..82a99c69 100644 --- a/packages/server/src/ws/handler.ts +++ b/packages/server/src/ws/handler.ts @@ -935,6 +935,7 @@ function buildReadyPayload(userId: string): { readStates: ReadState[]; activeCalls: ActiveCallInfo[]; userActivities: Record; + rejectedPeerOrigins: string[]; } { const db = getDb(); @@ -1463,7 +1464,15 @@ function buildReadyPayload(userId: string): { } } - return { user, spaces, dmChannels, folders, spaceLayout, layoutUpdatedAt, voiceStates, voiceUserStates, spaceVoiceStates, readStates, activeCalls, userActivities }; + // Rejected peer origins for unreachable member indicators + const rejectedPeers = db + .select({ origin: schema.federationPeers.origin }) + .from(schema.federationPeers) + .where(eq(schema.federationPeers.status, 'rejected')) + .all(); + const rejectedPeerOrigins = rejectedPeers.map(p => p.origin); + + return { user, spaces, dmChannels, folders, spaceLayout, layoutUpdatedAt, voiceStates, voiceUserStates, spaceVoiceStates, readStates, activeCalls, userActivities, rejectedPeerOrigins }; } export async function registerWebSocket(app: FastifyInstance): Promise {