From 54f87a400006b7655a1f1eddaa1949fcdcf7294f Mon Sep 17 00:00:00 2001 From: Owen Date: Wed, 21 Oct 2026 16:35:27 -0400 Subject: [PATCH] Fix relay port issue --- server/routers/olm/handleOlmRelayMessage.ts | 37 ++++++++++++++++----- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/server/routers/olm/handleOlmRelayMessage.ts b/server/routers/olm/handleOlmRelayMessage.ts index ce71ac2fd..57ee8b8a0 100644 --- a/server/routers/olm/handleOlmRelayMessage.ts +++ b/server/routers/olm/handleOlmRelayMessage.ts @@ -148,16 +148,35 @@ export const handleOlmRelayMessage: MessageHandler = async (context) => { ); if (isBatch) { + // olm treats relayPort as a single value shared by the whole batch, so + // send one batched ack per distinct relay port + const byPort = new Map(); + for (const v of pushable) { + const group = byPort.get(v.relayPort); + if (group) { + group.push(v); + } else { + byPort.set(v.relayPort, [v]); + } + } + + const messages = [...byPort.entries()].map(([relayPort, group]) => ({ + type: "olm/wg/peer/relay", + data: { + siteIds: group.map((v) => v.siteId), + relayEndpoints: group.map((v) => v.relayEndpoint), + relayPort, + chainIds: group.map((v) => v.chainId) + } + })); + + const last = messages.pop()!; + for (const msg of messages) { + await sendToClient(olm.olmId, msg); + } + return { - message: { - type: "olm/wg/peer/relay", - data: { - siteIds: pushable.map((v) => v.siteId), - relayEndpoints: pushable.map((v) => v.relayEndpoint), - relayPort: pushable.map((v) => v.relayPort), - chainIds: pushable.map((v) => v.chainId) - } - }, + message: last, broadcast: false, excludeSender: false };