Switch to Baileys multi-file auth with latest rc
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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(/^/, "+"),
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user