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"
)) as unknown as typeof import("@whiskeysockets/baileys") & {
makeWASocket: ReturnType<typeof vi.fn>;
useSingleFileAuthState: ReturnType<typeof vi.fn>;
useMultiFileAuthState: ReturnType<typeof vi.fn>;
fetchLatestBaileysVersion: ReturnType<typeof vi.fn>;
makeCacheableSignalKeyStore: ReturnType<typeof vi.fn>;
};
@@ -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<typeof vi.fn>;
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();

View File

@@ -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<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() {
return fs

View File

@@ -13,7 +13,7 @@ export type MockBaileysModule = {
fetchLatestBaileysVersion: ReturnType<typeof vi.fn>;
makeCacheableSignalKeyStore: ReturnType<typeof vi.fn>;
makeWASocket: ReturnType<typeof vi.fn>;
useSingleFileAuthState: ReturnType<typeof vi.fn>;
useMultiFileAuthState: ReturnType<typeof vi.fn>;
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(/^/, "+"),
};