From dc31efb7aad537249bc898c766eb781c125fedbc Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 25 Nov 2025 06:42:39 +0100 Subject: [PATCH] web: announce available presence when relay starts --- src/provider-web.test.ts | 8 ++++---- src/provider-web.ts | 7 +++++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/provider-web.test.ts b/src/provider-web.test.ts index 898e739c8..c9aae12e1 100644 --- a/src/provider-web.test.ts +++ b/src/provider-web.test.ts @@ -153,6 +153,7 @@ describe("provider-web", () => { const listener = await monitorWebInbox({ verbose: false, onMessage }); const sock = getLastSocket(); + expect(sock.sendPresenceUpdate).toHaveBeenCalledWith("available"); const upsert = { type: "notify", messages: [ @@ -174,10 +175,8 @@ describe("provider-web", () => { expect(sock.readMessages).toHaveBeenCalledWith([ { remoteJid: "999@s.whatsapp.net", id: "abc", participant: undefined, fromMe: false }, ]); - expect(sock.sendPresenceUpdate).toHaveBeenCalledWith( - "composing", - "999@s.whatsapp.net", - ); + expect(sock.sendPresenceUpdate).toHaveBeenCalledWith("available"); + expect(sock.sendPresenceUpdate).toHaveBeenCalledWith("composing", "999@s.whatsapp.net"); expect(sock.sendMessage).toHaveBeenCalledWith("999@s.whatsapp.net", { text: "pong", }); @@ -218,6 +217,7 @@ describe("provider-web", () => { fromMe: false, }, ]); + expect(sock.sendPresenceUpdate).toHaveBeenCalledWith("available"); await listener.close(); }); diff --git a/src/provider-web.ts b/src/provider-web.ts index 91bf8f638..6b86e3454 100644 --- a/src/provider-web.ts +++ b/src/provider-web.ts @@ -243,6 +243,13 @@ export async function monitorWebInbox(options: { }) { const sock = await createWaSocket(false, options.verbose); await waitForWaConnection(sock); + try { + // Advertise that the relay is online right after connecting. + await sock.sendPresenceUpdate("available"); + if (isVerbose()) logVerbose("Sent global 'available' presence on connect"); + } catch (err) { + logVerbose(`Failed to send 'available' presence on connect: ${String(err)}`); + } const selfJid = sock.user?.id; const selfE164 = selfJid ? jidToE164(selfJid) : null; const seen = new Set();