Switch to Baileys multi-file auth with latest rc

This commit is contained in:
Peter Steinberger
2025-11-25 00:34:55 +01:00
parent 66359736d3
commit e12e6989c0
3 changed files with 24 additions and 24 deletions

View File

@@ -38,7 +38,7 @@ const baileys = (await import(
"@whiskeysockets/baileys" "@whiskeysockets/baileys"
)) as unknown as typeof import("@whiskeysockets/baileys") & { )) as unknown as typeof import("@whiskeysockets/baileys") & {
makeWASocket: ReturnType<typeof vi.fn>; makeWASocket: ReturnType<typeof vi.fn>;
useSingleFileAuthState: ReturnType<typeof vi.fn>; useMultiFileAuthState: ReturnType<typeof vi.fn>;
fetchLatestBaileysVersion: ReturnType<typeof vi.fn>; fetchLatestBaileysVersion: ReturnType<typeof vi.fn>;
makeCacheableSignalKeyStore: ReturnType<typeof vi.fn>; makeCacheableSignalKeyStore: ReturnType<typeof vi.fn>;
}; };
@@ -51,8 +51,8 @@ describe("provider-web", () => {
Symbol.for("warelay:lastSocket") Symbol.for("warelay:lastSocket")
] = recreated.lastSocket; ] = recreated.lastSocket;
baileys.makeWASocket.mockImplementation(recreated.mod.makeWASocket); baileys.makeWASocket.mockImplementation(recreated.mod.makeWASocket);
baileys.useSingleFileAuthState.mockImplementation( baileys.useMultiFileAuthState.mockImplementation(
recreated.mod.useSingleFileAuthState, recreated.mod.useMultiFileAuthState,
); );
baileys.fetchLatestBaileysVersion.mockImplementation( baileys.fetchLatestBaileysVersion.mockImplementation(
recreated.mod.fetchLatestBaileysVersion, recreated.mod.fetchLatestBaileysVersion,
@@ -69,17 +69,17 @@ describe("provider-web", () => {
it("creates WA socket with QR handler", async () => { it("creates WA socket with QR handler", async () => {
await createWaSocket(true, false); await createWaSocket(true, false);
const makeWASocket = baileys.makeWASocket as ReturnType<typeof vi.fn>; const makeWASocket = baileys.makeWASocket as ReturnType<typeof vi.fn>;
expect(makeWASocket).toHaveBeenCalledWith( expect(makeWASocket).toHaveBeenCalledWith(
expect.objectContaining({ printQRInTerminal: false }), expect.objectContaining({ printQRInTerminal: false }),
); );
const sock = getLastSocket(); const sock = getLastSocket();
const saveCreds = ( const saveCreds = (
await baileys.useSingleFileAuthState.mock.results[0].value await baileys.useMultiFileAuthState.mock.results[0].value
).saveState; ).saveCreds;
// trigger creds.update listener // trigger creds.update listener
sock.ev.emit("creds.update", {}); sock.ev.emit("creds.update", {});
expect(saveCreds).toHaveBeenCalled(); expect(saveCreds).toHaveBeenCalled();
}); });
it("waits for connection open", async () => { it("waits for connection open", async () => {
const ev = new EventEmitter(); const ev = new EventEmitter();

View File

@@ -7,22 +7,22 @@ import {
fetchLatestBaileysVersion, fetchLatestBaileysVersion,
makeCacheableSignalKeyStore, makeCacheableSignalKeyStore,
makeWASocket, makeWASocket,
useSingleFileAuthState, useMultiFileAuthState,
} from "@whiskeysockets/baileys"; } from "@whiskeysockets/baileys";
import pino from "pino"; import pino from "pino";
import qrcode from "qrcode-terminal"; import qrcode from "qrcode-terminal";
import { danger, info, logVerbose, success } from "./globals.js"; import { danger, info, logVerbose, success } from "./globals.js";
import { ensureDir, jidToE164, toWhatsappJid } from "./utils.js"; import { ensureDir, jidToE164, toWhatsappJid } from "./utils.js";
const WA_WEB_AUTH_FILE = path.join( const WA_WEB_AUTH_DIR = path.join(
os.homedir(), os.homedir(),
".warelay", ".warelay",
"credentials.json", "credentials",
); );
export async function createWaSocket(printQr: boolean, verbose: boolean) { export async function createWaSocket(printQr: boolean, verbose: boolean) {
await ensureDir(path.dirname(WA_WEB_AUTH_FILE)); await ensureDir(WA_WEB_AUTH_DIR);
const { state, saveState } = await useSingleFileAuthState(WA_WEB_AUTH_FILE); const { state, saveCreds } = await useMultiFileAuthState(WA_WEB_AUTH_DIR);
const { version } = await fetchLatestBaileysVersion(); const { version } = await fetchLatestBaileysVersion();
const logger = pino({ level: verbose ? "info" : "silent" }); const logger = pino({ level: verbose ? "info" : "silent" });
const sock = makeWASocket({ const sock = makeWASocket({
@@ -38,7 +38,7 @@ export async function createWaSocket(printQr: boolean, verbose: boolean) {
markOnlineOnConnect: false, markOnlineOnConnect: false,
}); });
sock.ev.on("creds.update", saveState); sock.ev.on("creds.update", saveCreds);
sock.ev.on( sock.ev.on(
"connection.update", "connection.update",
(update: Partial<import("@whiskeysockets/baileys").ConnectionState>) => { (update: Partial<import("@whiskeysockets/baileys").ConnectionState>) => {
@@ -168,7 +168,7 @@ export async function loginWeb(
} }
} }
export { WA_WEB_AUTH_FILE }; export { WA_WEB_AUTH_DIR };
export function webAuthExists() { export function webAuthExists() {
return fs return fs

View File

@@ -13,7 +13,7 @@ export type MockBaileysModule = {
fetchLatestBaileysVersion: ReturnType<typeof vi.fn>; fetchLatestBaileysVersion: ReturnType<typeof vi.fn>;
makeCacheableSignalKeyStore: ReturnType<typeof vi.fn>; makeCacheableSignalKeyStore: ReturnType<typeof vi.fn>;
makeWASocket: ReturnType<typeof vi.fn>; makeWASocket: ReturnType<typeof vi.fn>;
useSingleFileAuthState: ReturnType<typeof vi.fn>; useMultiFileAuthState: ReturnType<typeof vi.fn>;
jidToE164?: (jid: string) => string | null; jidToE164?: (jid: string) => string | null;
proto?: unknown; proto?: unknown;
}; };
@@ -39,9 +39,9 @@ export function createMockBaileys(): { mod: MockBaileysModule; lastSocket: () =>
fetchLatestBaileysVersion: vi.fn().mockResolvedValue({ version: [1, 2, 3] }), fetchLatestBaileysVersion: vi.fn().mockResolvedValue({ version: [1, 2, 3] }),
makeCacheableSignalKeyStore: vi.fn((keys: unknown) => keys), makeCacheableSignalKeyStore: vi.fn((keys: unknown) => keys),
makeWASocket, makeWASocket,
useSingleFileAuthState: vi.fn(async () => ({ useMultiFileAuthState: vi.fn(async () => ({
state: { creds: {}, keys: {} }, state: { creds: {}, keys: {} },
saveState: vi.fn(), saveCreds: vi.fn(),
})), })),
jidToE164: (jid: string) => jid.replace(/@.*$/, "").replace(/^/, "+"), jidToE164: (jid: string) => jid.replace(/@.*$/, "").replace(/^/, "+"),
}; };