From e12e6989c0a3ab95dcc4d3ef2ba0271d1429952b Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 25 Nov 2025 00:34:55 +0100 Subject: [PATCH] Switch to Baileys multi-file auth with latest rc --- src/provider-web.test.ts | 28 ++++++++++++++-------------- src/provider-web.ts | 14 +++++++------- test/mocks/baileys.ts | 6 +++--- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/provider-web.test.ts b/src/provider-web.test.ts index 90a82c8c2..68429a1a2 100644 --- a/src/provider-web.test.ts +++ b/src/provider-web.test.ts @@ -38,7 +38,7 @@ const baileys = (await import( "@whiskeysockets/baileys" )) as unknown as typeof import("@whiskeysockets/baileys") & { makeWASocket: ReturnType; - useSingleFileAuthState: ReturnType; + useMultiFileAuthState: ReturnType; fetchLatestBaileysVersion: ReturnType; makeCacheableSignalKeyStore: ReturnType; }; @@ -51,8 +51,8 @@ describe("provider-web", () => { Symbol.for("warelay:lastSocket") ] = recreated.lastSocket; baileys.makeWASocket.mockImplementation(recreated.mod.makeWASocket); - baileys.useSingleFileAuthState.mockImplementation( - recreated.mod.useSingleFileAuthState, + baileys.useMultiFileAuthState.mockImplementation( + recreated.mod.useMultiFileAuthState, ); baileys.fetchLatestBaileysVersion.mockImplementation( recreated.mod.fetchLatestBaileysVersion, @@ -69,17 +69,17 @@ describe("provider-web", () => { it("creates WA socket with QR handler", async () => { await createWaSocket(true, false); const makeWASocket = baileys.makeWASocket as ReturnType; - expect(makeWASocket).toHaveBeenCalledWith( - expect.objectContaining({ printQRInTerminal: false }), - ); - const sock = getLastSocket(); - const saveCreds = ( - await baileys.useSingleFileAuthState.mock.results[0].value - ).saveState; - // trigger creds.update listener - sock.ev.emit("creds.update", {}); - expect(saveCreds).toHaveBeenCalled(); - }); + expect(makeWASocket).toHaveBeenCalledWith( + expect.objectContaining({ printQRInTerminal: false }), + ); + const sock = getLastSocket(); + const saveCreds = ( + await baileys.useMultiFileAuthState.mock.results[0].value + ).saveCreds; + // trigger creds.update listener + sock.ev.emit("creds.update", {}); + expect(saveCreds).toHaveBeenCalled(); +}); it("waits for connection open", async () => { const ev = new EventEmitter(); diff --git a/src/provider-web.ts b/src/provider-web.ts index 8b0a0cc88..94962eb3b 100644 --- a/src/provider-web.ts +++ b/src/provider-web.ts @@ -7,22 +7,22 @@ import { fetchLatestBaileysVersion, makeCacheableSignalKeyStore, makeWASocket, - useSingleFileAuthState, + useMultiFileAuthState, } from "@whiskeysockets/baileys"; import pino from "pino"; import qrcode from "qrcode-terminal"; import { danger, info, logVerbose, success } from "./globals.js"; import { ensureDir, jidToE164, toWhatsappJid } from "./utils.js"; -const WA_WEB_AUTH_FILE = path.join( +const WA_WEB_AUTH_DIR = path.join( os.homedir(), ".warelay", - "credentials.json", + "credentials", ); export async function createWaSocket(printQr: boolean, verbose: boolean) { - await ensureDir(path.dirname(WA_WEB_AUTH_FILE)); - const { state, saveState } = await useSingleFileAuthState(WA_WEB_AUTH_FILE); + await ensureDir(WA_WEB_AUTH_DIR); + const { state, saveCreds } = await useMultiFileAuthState(WA_WEB_AUTH_DIR); const { version } = await fetchLatestBaileysVersion(); const logger = pino({ level: verbose ? "info" : "silent" }); const sock = makeWASocket({ @@ -38,7 +38,7 @@ export async function createWaSocket(printQr: boolean, verbose: boolean) { markOnlineOnConnect: false, }); - sock.ev.on("creds.update", saveState); + sock.ev.on("creds.update", saveCreds); sock.ev.on( "connection.update", (update: Partial) => { @@ -168,7 +168,7 @@ export async function loginWeb( } } -export { WA_WEB_AUTH_FILE }; +export { WA_WEB_AUTH_DIR }; export function webAuthExists() { return fs diff --git a/test/mocks/baileys.ts b/test/mocks/baileys.ts index 8bf6c9854..2588e1cf3 100644 --- a/test/mocks/baileys.ts +++ b/test/mocks/baileys.ts @@ -13,7 +13,7 @@ export type MockBaileysModule = { fetchLatestBaileysVersion: ReturnType; makeCacheableSignalKeyStore: ReturnType; makeWASocket: ReturnType; - useSingleFileAuthState: ReturnType; + useMultiFileAuthState: ReturnType; jidToE164?: (jid: string) => string | null; proto?: unknown; }; @@ -39,9 +39,9 @@ export function createMockBaileys(): { mod: MockBaileysModule; lastSocket: () => fetchLatestBaileysVersion: vi.fn().mockResolvedValue({ version: [1, 2, 3] }), makeCacheableSignalKeyStore: vi.fn((keys: unknown) => keys), makeWASocket, - useSingleFileAuthState: vi.fn(async () => ({ + useMultiFileAuthState: vi.fn(async () => ({ state: { creds: {}, keys: {} }, - saveState: vi.fn(), + saveCreds: vi.fn(), })), jidToE164: (jid: string) => jid.replace(/@.*$/, "").replace(/^/, "+"), };