fix: revert outgoing peering blocks — autoAcceptPeering only gates incoming

autoAcceptPeering means 'don't accept peering initiated by others', not
'don't initiate peering ourselves'. Two checks were incorrectly blocking
outgoing peering when auto-accept was off:

1. ensurePeered() refused to auto-initiate — reverted. When a local user
   sends a DM, the server should initiate peering. The remote's
   peer/accept decides whether to accept or queue.

2. queueOutboxEvent() refused to create placeholders — reverted. The
   outbox needs placeholders to queue entries. Without them, DM relay
   silently fails.
This commit is contained in:
Jannis Braun
2026-04-20 18:08:05 +02:00
parent 165fda44a3
commit 6afad97bd1
2 changed files with 5 additions and 28 deletions
+5 -12
View File
@@ -151,24 +151,17 @@ export function queueOutboxEvent(
? peers.filter(p => targetPeerOrigins.includes(p.origin))
: peers;
// For targeted origins with no existing peer record, create pending placeholders
// (only when autoAcceptPeering is enabled — otherwise the admin controls all peering)
// For targeted origins with no existing peer record, create pending placeholders.
// autoAcceptPeering controls INCOMING acceptance, not outgoing initiation —
// when a local user sends a DM requiring relay, the server creates the placeholder
// regardless of the setting. The peer/accept gate on the REMOTE side decides
// whether to accept or queue our request.
if (targetPeerOrigins) {
const autoAcceptSettings = db
.select({ autoAcceptPeering: schema.instanceSettings.autoAcceptPeering })
.from(schema.instanceSettings)
.where(eq(schema.instanceSettings.id, 1))
.get();
const autoAcceptPeering = (autoAcceptSettings?.autoAcceptPeering ?? 1) === 1;
const matchedOrigins = new Set(matchedPeers.map(p => p.origin));
for (const origin of targetPeerOrigins) {
if (matchedOrigins.has(origin)) continue;
// Don't auto-create placeholders when autoAcceptPeering is off
if (!autoAcceptPeering) continue;
// Check if there's a rejected/revoked peer we should skip
const existingPeer = db
.select({ status: schema.federationPeers.status })