perf(pi): reuse tau rpc for command auto-replies

This commit is contained in:
Peter Steinberger
2025-12-02 20:09:51 +00:00
parent a34271adf9
commit b172b538fc
17 changed files with 695 additions and 93 deletions

View File

@@ -1,3 +1,4 @@
import type { AnyMessageContent } from "@whiskeysockets/baileys";
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import { resetLogger, setLoggerOverride } from "../logging.js";
@@ -17,6 +18,11 @@ vi.mock("./session.js", () => {
};
});
const loadWebMediaMock = vi.fn();
vi.mock("./media.js", () => ({
loadWebMedia: (...args: unknown[]) => loadWebMediaMock(...args),
}));
import { sendMessageWeb } from "./outbound.js";
const { createWaSocket } = await import("./session.js");
@@ -37,4 +43,98 @@ describe("web outbound", () => {
expect(sock.sendMessage).toHaveBeenCalled();
expect(sock.ws.close).toHaveBeenCalled();
});
it("maps audio to PTT with opus mime when ogg", async () => {
const buf = Buffer.from("audio");
loadWebMediaMock.mockResolvedValueOnce({
buffer: buf,
contentType: "audio/ogg",
kind: "audio",
});
await sendMessageWeb("+1555", "voice note", {
verbose: false,
mediaUrl: "/tmp/voice.ogg",
});
const sock = await createWaSocket();
const [, payload] = sock.sendMessage.mock.calls.at(-1) as [
string,
AnyMessageContent,
];
expect(payload).toMatchObject({
audio: buf,
ptt: true,
mimetype: "audio/ogg; codecs=opus",
});
});
it("maps video with caption", async () => {
const buf = Buffer.from("video");
loadWebMediaMock.mockResolvedValueOnce({
buffer: buf,
contentType: "video/mp4",
kind: "video",
});
await sendMessageWeb("+1555", "clip", {
verbose: false,
mediaUrl: "/tmp/video.mp4",
});
const sock = await createWaSocket();
const [, payload] = sock.sendMessage.mock.calls.at(-1) as [
string,
AnyMessageContent,
];
expect(payload).toMatchObject({
video: buf,
caption: "clip",
mimetype: "video/mp4",
});
});
it("maps image with caption", async () => {
const buf = Buffer.from("img");
loadWebMediaMock.mockResolvedValueOnce({
buffer: buf,
contentType: "image/jpeg",
kind: "image",
});
await sendMessageWeb("+1555", "pic", {
verbose: false,
mediaUrl: "/tmp/pic.jpg",
});
const sock = await createWaSocket();
const [, payload] = sock.sendMessage.mock.calls.at(-1) as [
string,
AnyMessageContent,
];
expect(payload).toMatchObject({
image: buf,
caption: "pic",
mimetype: "image/jpeg",
});
});
it("maps other kinds to document with filename", async () => {
const buf = Buffer.from("pdf");
loadWebMediaMock.mockResolvedValueOnce({
buffer: buf,
contentType: "application/pdf",
kind: "document",
fileName: "file.pdf",
});
await sendMessageWeb("+1555", "doc", {
verbose: false,
mediaUrl: "/tmp/file.pdf",
});
const sock = await createWaSocket();
const [, payload] = sock.sendMessage.mock.calls.at(-1) as [
string,
AnyMessageContent,
];
expect(payload).toMatchObject({
document: buf,
fileName: "file.pdf",
caption: "doc",
mimetype: "application/pdf",
});
});
});