fix: restore guild gossip wire by protocol on shared swarm

Use getGossipWireSession/clearGossipWireSession for pearcord-gossip so
ensure/re-attach no longer steals or clobbers contacts/discovery planes.
This commit is contained in:
Raven Scott
2026-07-13 15:39:05 -04:00
parent 455274c9f9
commit 5f473acdb0
2 changed files with 15 additions and 11 deletions
+11 -6
View File
@@ -9,8 +9,15 @@ const {
COLLECTIONS, id, now, guildTopic, topicToBuffer, CHANNEL_TYPES, RPC
} = require('pearcord-shared')
const {
attachGossipMesh, broadcastGossip, ensureGuildWireChannels
attachGossipMesh,
broadcastGossip,
ensureGuildWireChannels,
GOSSIP_PROTOCOL
} = require('./mesh')
const {
getGossipWireSession,
clearGossipWireSession
} = require('pearcord-drive/mux-wire')
const { attachDriveMesh, requestAttachmentFromPeers } = require('pearcord-drive/attach-mesh')
const { attachVoiceMesh, broadcastVoiceMedia } = require('pearcord-voice-media')
const { attachScreenMesh, broadcastScreenMedia } = require('pearcord-screen-share')
@@ -1728,11 +1735,9 @@ class PearcordGuild extends EventEmitter {
} catch {
/* ignore */
}
if (conn._pearcordGossipWire?.session === existing) {
conn._pearcordGossipWire = null
clearGossipWireSession(conn, GOSSIP_PROTOCOL, existing)
}
}
const restored = conn._pearcordGossipWire?.session
const restored = getGossipWireSession(conn, GOSSIP_PROTOCOL)
if (!force && this._isLiveRpcSession(restored)) {
this._channels.set(peerId, restored)
return restored
@@ -1743,7 +1748,7 @@ class PearcordGuild extends EventEmitter {
return ch || null
} catch (err) {
if (err?.code === 'DUPLICATE_CHANNEL' || /DUPLICATE/i.test(String(err?.message || ''))) {
const retry = conn._pearcordGossipWire?.session
const retry = getGossipWireSession(conn, GOSSIP_PROTOCOL)
if (this._isLiveRpcSession(retry)) {
this._channels.set(peerId, retry)
return retry
+4 -5
View File
@@ -4,7 +4,8 @@ const { wireSwarmConnection } = require('pearcord-shared')
const {
attachGossipWireSession,
broadcastGossipToSessions,
requestGossipFromPeer
requestGossipFromPeer,
getGossipWireSession
} = require('pearcord-drive/mux-wire')
const GOSSIP_PROTOCOL = 'pearcord-gossip-v1'
@@ -22,10 +23,8 @@ function attachGossipMesh (guild, conn) {
}
function restoreGossipWireFromConn (conn) {
const session = conn._pearcordGossipWire?.session
const rpc = session?.v2?.rpc
if (session && rpc && !rpc.closed && !rpc._destroyed) return session
return null
// Protocol-keyed: shared swarm also holds contacts/discovery planes.
return getGossipWireSession(conn, GOSSIP_PROTOCOL)
}
function ensureGuildWireChannels (guild) {