From b16be75cf27ec35a72ddeba6f22183b418ff699f Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 12 Jul 2026 15:17:34 +0100 Subject: [PATCH] fix(whatsapp): preserve disconnect errors (#105399) --- extensions/whatsapp/src/session.test.ts | 18 ++++++++++++++++++ extensions/whatsapp/src/session.ts | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/extensions/whatsapp/src/session.test.ts b/extensions/whatsapp/src/session.test.ts index dc4918dee982..923bf3382198 100644 --- a/extensions/whatsapp/src/session.test.ts +++ b/extensions/whatsapp/src/session.test.ts @@ -597,6 +597,24 @@ describe("web session", () => { await expect(promise).rejects.toBeInstanceOf(Error); }); + it("preserves the underlying Baileys disconnect error", async () => { + const ev = new EventEmitter(); + const promise = waitForWaConnection( + { ev } as unknown as ReturnType, + { timeout: "none" }, + ); + const disconnectError = Object.assign(new Error("logged out"), { + output: { statusCode: 401 }, + }); + ev.emit("connection.update", { + connection: "close", + lastDisconnect: { date: new Date(), error: disconnectError }, + }); + const error = await promise.catch((caught: unknown) => caught); + expect(error).toBe(disconnectError); + expect(error).toMatchObject({ message: "logged out", output: { statusCode: 401 } }); + }); + it("rejects after timeout with no connection event", async () => { vi.useFakeTimers(); const ev = new EventEmitter(); diff --git a/extensions/whatsapp/src/session.ts b/extensions/whatsapp/src/session.ts index 727d9bf44b7e..b8a9b75961e7 100644 --- a/extensions/whatsapp/src/session.ts +++ b/extensions/whatsapp/src/session.ts @@ -513,9 +513,10 @@ export async function waitForWaConnection( } if (update.connection === "close") { cleanup(); + const disconnectError = update.lastDisconnect?.error ?? update.lastDisconnect; reject( toLintErrorObject( - update.lastDisconnect ?? new Error("Connection closed"), + disconnectError ?? new Error("Connection closed"), "Non-Error rejection", ), );