whazaa 0.6.10 → 0.6.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,69 @@
1
+ /**
2
+ * desktop-db.ts — Read WhatsApp Desktop macOS SQLite database
3
+ *
4
+ * The WhatsApp Desktop app stores all chat data in:
5
+ * ~/Library/Group Containers/group.net.whatsapp.WhatsApp.shared/ChatStorage.sqlite
6
+ *
7
+ * Key tables:
8
+ * ZWACHATSESSION — chat list (inbox)
9
+ * ZWAMESSAGE — individual messages
10
+ *
11
+ * Timestamps: WhatsApp Desktop uses Apple Core Data timestamps (seconds since
12
+ * 2001-01-01). Add APPLE_EPOCH_OFFSET to convert to Unix epoch (seconds since
13
+ * 1970-01-01).
14
+ *
15
+ * This module is OPTIONAL: all functions return null/empty when the DB is not
16
+ * present (non-macOS platforms, or Desktop app not installed).
17
+ *
18
+ * The DB is ALWAYS opened readonly — we never write to WhatsApp's DB.
19
+ */
20
+ /**
21
+ * Returns true if the WhatsApp Desktop SQLite database exists on this system.
22
+ * On non-macOS platforms this will always return false.
23
+ */
24
+ export declare function isDesktopDbAvailable(): boolean;
25
+ export interface DesktopChat {
26
+ jid: string;
27
+ name: string;
28
+ lastMessageText: string | null;
29
+ lastMessageDate: string;
30
+ unreadCount: number;
31
+ archived: boolean;
32
+ }
33
+ /**
34
+ * List chats from the WhatsApp Desktop SQLite database, sorted by last
35
+ * message time descending (most recent first).
36
+ *
37
+ * Returns null if the database is not available.
38
+ * Returns an empty array if the DB is available but has no matching chats.
39
+ *
40
+ * @param search Optional case-insensitive filter on partner name or JID.
41
+ * @param limit Maximum number of chats to return (default 50).
42
+ */
43
+ export declare function listChats(search?: string, limit?: number): DesktopChat[] | null;
44
+ export interface DesktopMessage {
45
+ id: string;
46
+ fromMe: boolean;
47
+ timestamp: number;
48
+ date: string;
49
+ text: string;
50
+ fromJid: string | null;
51
+ toJid: string | null;
52
+ pushName: string | null;
53
+ type: string;
54
+ }
55
+ /**
56
+ * Fetch messages for a specific chat JID from the WhatsApp Desktop SQLite DB.
57
+ *
58
+ * Returns null if the database is not available.
59
+ * Returns an empty array if the chat is not found in the DB.
60
+ *
61
+ * Messages are returned in chronological order (oldest first).
62
+ *
63
+ * @param jid Full WhatsApp JID (e.g. "41796074745@s.whatsapp.net").
64
+ * Also accepts phone numbers like "+41796074745" — normalised
65
+ * internally.
66
+ * @param limit Maximum number of messages to return (default 50).
67
+ */
68
+ export declare function getMessages(jid: string, limit?: number): DesktopMessage[] | null;
69
+ //# sourceMappingURL=desktop-db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktop-db.d.ts","sourceRoot":"","sources":["../src/desktop-db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AA0BH;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,GAAG,IAAI,CAiD/E;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE,GAAG,IAAI,CA2DhF"}
@@ -0,0 +1,169 @@
1
+ /**
2
+ * desktop-db.ts — Read WhatsApp Desktop macOS SQLite database
3
+ *
4
+ * The WhatsApp Desktop app stores all chat data in:
5
+ * ~/Library/Group Containers/group.net.whatsapp.WhatsApp.shared/ChatStorage.sqlite
6
+ *
7
+ * Key tables:
8
+ * ZWACHATSESSION — chat list (inbox)
9
+ * ZWAMESSAGE — individual messages
10
+ *
11
+ * Timestamps: WhatsApp Desktop uses Apple Core Data timestamps (seconds since
12
+ * 2001-01-01). Add APPLE_EPOCH_OFFSET to convert to Unix epoch (seconds since
13
+ * 1970-01-01).
14
+ *
15
+ * This module is OPTIONAL: all functions return null/empty when the DB is not
16
+ * present (non-macOS platforms, or Desktop app not installed).
17
+ *
18
+ * The DB is ALWAYS opened readonly — we never write to WhatsApp's DB.
19
+ */
20
+ import Database from "better-sqlite3";
21
+ import { join } from "node:path";
22
+ import { homedir } from "node:os";
23
+ import { existsSync } from "node:fs";
24
+ // ---------------------------------------------------------------------------
25
+ // Constants
26
+ // ---------------------------------------------------------------------------
27
+ const DESKTOP_DB_PATH = join(homedir(), "Library", "Group Containers", "group.net.whatsapp.WhatsApp.shared", "ChatStorage.sqlite");
28
+ /** Seconds between Unix epoch (1970-01-01) and Apple Core Data epoch (2001-01-01) */
29
+ const APPLE_EPOCH_OFFSET = 978307200;
30
+ // ---------------------------------------------------------------------------
31
+ // Public API
32
+ // ---------------------------------------------------------------------------
33
+ /**
34
+ * Returns true if the WhatsApp Desktop SQLite database exists on this system.
35
+ * On non-macOS platforms this will always return false.
36
+ */
37
+ export function isDesktopDbAvailable() {
38
+ return existsSync(DESKTOP_DB_PATH);
39
+ }
40
+ /**
41
+ * List chats from the WhatsApp Desktop SQLite database, sorted by last
42
+ * message time descending (most recent first).
43
+ *
44
+ * Returns null if the database is not available.
45
+ * Returns an empty array if the DB is available but has no matching chats.
46
+ *
47
+ * @param search Optional case-insensitive filter on partner name or JID.
48
+ * @param limit Maximum number of chats to return (default 50).
49
+ */
50
+ export function listChats(search, limit) {
51
+ if (!isDesktopDbAvailable())
52
+ return null;
53
+ const db = new Database(DESKTOP_DB_PATH, { readonly: true });
54
+ try {
55
+ let query = `
56
+ SELECT
57
+ ZCONTACTJID AS jid,
58
+ ZPARTNERNAME AS name,
59
+ ZLASTMESSAGETEXT AS lastText,
60
+ ZLASTMESSAGEDATE AS lastDate,
61
+ ZUNREADCOUNT AS unread,
62
+ ZARCHIVED AS archived
63
+ FROM ZWACHATSESSION
64
+ WHERE ZREMOVED = 0 AND ZHIDDEN = 0
65
+ `;
66
+ const params = [];
67
+ if (search) {
68
+ query += ` AND (LOWER(ZPARTNERNAME) LIKE LOWER(?) OR ZCONTACTJID LIKE ?)`;
69
+ params.push(`%${search}%`, `%${search}%`);
70
+ }
71
+ query += ` ORDER BY ZLASTMESSAGEDATE DESC LIMIT ?`;
72
+ params.push(limit ?? 50);
73
+ const rows = db.prepare(query).all(...params);
74
+ return rows.map((r) => ({
75
+ jid: r.jid ?? "",
76
+ name: r.name ?? r.jid ?? "",
77
+ lastMessageText: r.lastText ?? null,
78
+ lastMessageDate: r.lastDate != null
79
+ ? new Date((r.lastDate + APPLE_EPOCH_OFFSET) * 1000).toISOString()
80
+ : "",
81
+ unreadCount: r.unread ?? 0,
82
+ archived: r.archived === 1,
83
+ }));
84
+ }
85
+ finally {
86
+ db.close();
87
+ }
88
+ }
89
+ /**
90
+ * Fetch messages for a specific chat JID from the WhatsApp Desktop SQLite DB.
91
+ *
92
+ * Returns null if the database is not available.
93
+ * Returns an empty array if the chat is not found in the DB.
94
+ *
95
+ * Messages are returned in chronological order (oldest first).
96
+ *
97
+ * @param jid Full WhatsApp JID (e.g. "41796074745@s.whatsapp.net").
98
+ * Also accepts phone numbers like "+41796074745" — normalised
99
+ * internally.
100
+ * @param limit Maximum number of messages to return (default 50).
101
+ */
102
+ export function getMessages(jid, limit) {
103
+ if (!isDesktopDbAvailable())
104
+ return null;
105
+ const db = new Database(DESKTOP_DB_PATH, { readonly: true });
106
+ try {
107
+ // Normalise the JID — strip leading + and append @s.whatsapp.net if bare
108
+ const normalised = normaliseJid(jid);
109
+ // Find the chat session primary key for this JID
110
+ const session = db.prepare("SELECT Z_PK FROM ZWACHATSESSION WHERE ZCONTACTJID = ?").get(normalised);
111
+ if (!session)
112
+ return [];
113
+ const rows = db.prepare(`
114
+ SELECT
115
+ ZSTANZAID AS id,
116
+ ZISFROMME AS fromMe,
117
+ ZMESSAGEDATE AS msgDate,
118
+ ZTEXT AS text,
119
+ ZFROMJID AS fromJid,
120
+ ZTOJID AS toJid,
121
+ ZPUSHNAME AS pushName,
122
+ ZMESSAGETYPE AS msgType
123
+ FROM ZWAMESSAGE
124
+ WHERE ZCHATSESSION = ?
125
+ ORDER BY ZMESSAGEDATE DESC
126
+ LIMIT ?
127
+ `).all(session.Z_PK, limit ?? 50);
128
+ return rows
129
+ .map((r) => {
130
+ const ts = r.msgDate != null ? r.msgDate + APPLE_EPOCH_OFFSET : 0;
131
+ return {
132
+ id: r.id ?? "",
133
+ fromMe: r.fromMe === 1,
134
+ timestamp: ts,
135
+ date: ts > 0 ? new Date(ts * 1000).toISOString() : "",
136
+ text: r.text ?? "[non-text message]",
137
+ fromJid: r.fromJid ?? null,
138
+ toJid: r.toJid ?? null,
139
+ pushName: r.pushName ?? null,
140
+ type: r.msgType === 0 ? "text" : (r.text ? "text" : "other"),
141
+ };
142
+ })
143
+ .reverse(); // Chronological order (oldest first)
144
+ }
145
+ finally {
146
+ db.close();
147
+ }
148
+ }
149
+ // ---------------------------------------------------------------------------
150
+ // Internal helpers
151
+ // ---------------------------------------------------------------------------
152
+ /**
153
+ * Normalise a phone number or WhatsApp JID to the full JID form used by the
154
+ * Desktop DB (e.g. "41796074745@s.whatsapp.net").
155
+ *
156
+ * Handles:
157
+ * "+41796074745" -> "41796074745@s.whatsapp.net"
158
+ * "41796074745" -> "41796074745@s.whatsapp.net"
159
+ * "41796074745@s.whatsapp.net" -> unchanged (pass-through)
160
+ * "123456789@g.us" -> unchanged (group JID, pass-through)
161
+ */
162
+ function normaliseJid(input) {
163
+ const trimmed = input.trim();
164
+ if (trimmed.includes("@"))
165
+ return trimmed;
166
+ const digits = trimmed.replace(/^\+/, "").replace(/[\s\-().]/g, "");
167
+ return `${digits}@s.whatsapp.net`;
168
+ }
169
+ //# sourceMappingURL=desktop-db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktop-db.js","sourceRoot":"","sources":["../src/desktop-db.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -33,6 +33,7 @@ import { initialize, triggerLogin, waitForConnection, waitForLogout, waitForQR,
33
33
  import { resolveAuthDir, enableSetupMode, cleanupQR, suppressQRDisplay, unsuppressQRDisplay } from "./auth.js";
34
34
  import { watch } from "./watch.js";
35
35
  import { WatcherClient } from "./ipc-client.js";
36
+ import { listChats, getMessages } from "./desktop-db.js";
36
37
  // ---------------------------------------------------------------------------
37
38
  // Setup wizard
38
39
  // ---------------------------------------------------------------------------
@@ -218,19 +219,27 @@ server.tool("whatsapp_status", "Check the Whazaa connection state and the WhatsA
218
219
  // Tool: whatsapp_send
219
220
  // ---------------------------------------------------------------------------
220
221
  server.tool("whatsapp_send", [
221
- "Send a message to yourself via WhatsApp self-chat.",
222
+ "Send a WhatsApp message.",
223
+ "Without a recipient, sends to your own self-chat (same as before).",
224
+ "With a recipient, sends to any contact or group.",
225
+ "Recipient can be a phone number with country code (e.g. '+41764502698'),",
226
+ "a WhatsApp JID (e.g. '41764502698@s.whatsapp.net'), or a contact name.",
222
227
  "Supports basic Markdown: **bold**, *italic*, `code`.",
223
- "The message appears in your own WhatsApp chat with yourself.",
224
228
  ].join(" "), {
225
229
  message: z
226
230
  .string()
227
231
  .min(1)
228
- .describe("The message text to send to your WhatsApp self-chat"),
229
- }, async ({ message }) => {
232
+ .describe("The message text to send"),
233
+ recipient: z
234
+ .string()
235
+ .optional()
236
+ .describe("Optional recipient: phone number (e.g. '+41764502698'), WhatsApp JID, or contact name. Omit to send to self-chat."),
237
+ }, async ({ message, recipient }) => {
230
238
  try {
231
- const result = await watcher.send(message);
239
+ const result = await watcher.send(message, recipient);
240
+ const dest = result.targetJid ?? "self-chat";
232
241
  return {
233
- content: [{ type: "text", text: `Sent: ${result.preview}` }],
242
+ content: [{ type: "text", text: `Sent to ${dest}: ${result.preview}` }],
234
243
  };
235
244
  }
236
245
  catch (err) {
@@ -245,12 +254,19 @@ server.tool("whatsapp_send", [
245
254
  // Tool: whatsapp_receive
246
255
  // ---------------------------------------------------------------------------
247
256
  server.tool("whatsapp_receive", [
248
- "Return all queued incoming WhatsApp messages received since the last call, then clear the queue.",
249
- "Messages are from your own WhatsApp number (self-chat) — i.e. messages you type on your phone.",
257
+ "Return queued incoming WhatsApp messages since the last call, then clear the queue.",
258
+ "Without 'from': returns self-chat messages (default, backwards compatible).",
259
+ "With 'from' set to a phone number, JID, or contact name: returns messages from that contact.",
260
+ "With 'from' set to 'all': returns messages from all chats (self-chat + all contacts), prefixed with sender JID.",
250
261
  "Returns 'No new messages.' if the queue is empty.",
251
- ].join(" "), {}, async () => {
262
+ ].join(" "), {
263
+ from: z
264
+ .string()
265
+ .optional()
266
+ .describe("Optional sender filter: phone number, JID, contact name, or 'all'. Omit for self-chat only."),
267
+ }, async ({ from }) => {
252
268
  try {
253
- const result = await watcher.receive();
269
+ const result = await watcher.receive(from);
254
270
  const { messages } = result;
255
271
  if (messages.length === 0) {
256
272
  return { content: [{ type: "text", text: "No new messages." }] };
@@ -272,6 +288,138 @@ server.tool("whatsapp_receive", [
272
288
  }
273
289
  });
274
290
  // ---------------------------------------------------------------------------
291
+ // Tool: whatsapp_contacts
292
+ // ---------------------------------------------------------------------------
293
+ server.tool("whatsapp_contacts", [
294
+ "List recently seen WhatsApp contacts.",
295
+ "Returns contacts that have sent or received messages in this session, most recent first.",
296
+ "Optionally filter by name or phone number using the 'search' parameter.",
297
+ "Use the returned phone number or JID as the 'recipient' parameter for whatsapp_send.",
298
+ ].join(" "), {
299
+ search: z
300
+ .string()
301
+ .optional()
302
+ .describe("Optional search string to filter contacts by name or phone number"),
303
+ limit: z
304
+ .number()
305
+ .min(1)
306
+ .max(200)
307
+ .default(50)
308
+ .describe("Maximum number of contacts to return (default 50)"),
309
+ }, async ({ search, limit }) => {
310
+ try {
311
+ const result = await watcher.contacts(search, limit);
312
+ const { contacts } = result;
313
+ if (contacts.length === 0) {
314
+ const msg = search
315
+ ? `No contacts found matching '${search}'.`
316
+ : "No contacts seen yet. Send a message first, or wait for incoming messages.";
317
+ return { content: [{ type: "text", text: msg }] };
318
+ }
319
+ const lines = contacts.map((c) => {
320
+ const name = c.name ? `${c.name} ` : "";
321
+ const ts = new Date(c.lastSeen).toISOString();
322
+ return `${name}+${c.phoneNumber} (${c.jid}) — last seen ${ts}`;
323
+ });
324
+ return {
325
+ content: [
326
+ {
327
+ type: "text",
328
+ text: `${contacts.length} contact(s):\n${lines.join("\n")}`,
329
+ },
330
+ ],
331
+ };
332
+ }
333
+ catch (err) {
334
+ const errMsg = err instanceof Error ? err.message : String(err);
335
+ return {
336
+ content: [{ type: "text", text: `Error: ${errMsg}` }],
337
+ isError: true,
338
+ };
339
+ }
340
+ });
341
+ // ---------------------------------------------------------------------------
342
+ // Tool: whatsapp_chats
343
+ // ---------------------------------------------------------------------------
344
+ server.tool("whatsapp_chats", [
345
+ "List WhatsApp chat conversations (inbox).",
346
+ "Reads directly from the WhatsApp Desktop macOS SQLite database when available (complete inbox, no Baileys sync required).",
347
+ "Falls back to the Baileys in-memory store when the Desktop DB is not present (~100-150 chats synced on connect).",
348
+ "Use the returned JID as the 'recipient' parameter for whatsapp_send,",
349
+ "or with whatsapp_receive to read messages from a specific contact.",
350
+ "Optionally filter by name or phone number using the 'search' parameter.",
351
+ ].join(" "), {
352
+ search: z
353
+ .string()
354
+ .optional()
355
+ .describe("Optional search string to filter chats by name or phone number"),
356
+ limit: z
357
+ .number()
358
+ .min(1)
359
+ .max(200)
360
+ .default(50)
361
+ .describe("Maximum number of chats to return (default 50)"),
362
+ }, async ({ search, limit }) => {
363
+ try {
364
+ // Try the Desktop DB first — it has the full inbox without needing Baileys sync
365
+ const desktopChats = listChats(search, limit);
366
+ if (desktopChats !== null) {
367
+ // Desktop DB is available
368
+ if (desktopChats.length === 0) {
369
+ const msg = search
370
+ ? `No chats found matching '${search}'.`
371
+ : "No chats found in the WhatsApp Desktop database.";
372
+ return { content: [{ type: "text", text: msg }] };
373
+ }
374
+ const lines = desktopChats.map((c) => {
375
+ const ts = c.lastMessageDate || "unknown";
376
+ const unread = c.unreadCount > 0 ? ` [${c.unreadCount} unread]` : "";
377
+ const archived = c.archived ? " [archived]" : "";
378
+ return `${c.name} (${c.jid})${unread}${archived} — last message ${ts}`;
379
+ });
380
+ return {
381
+ content: [
382
+ {
383
+ type: "text",
384
+ text: `${desktopChats.length} chat(s) [source: Desktop DB]:\n${lines.join("\n")}`,
385
+ },
386
+ ],
387
+ };
388
+ }
389
+ // Fall back to Baileys IPC store
390
+ const result = await watcher.chats({ search, limit });
391
+ const { chats } = result;
392
+ if (chats.length === 0) {
393
+ const msg = search
394
+ ? `No chats found matching '${search}'.`
395
+ : "No chats available yet. The store may still be syncing — try again in a few seconds.";
396
+ return { content: [{ type: "text", text: msg }] };
397
+ }
398
+ const lines = chats.map((c) => {
399
+ const ts = c.lastMessageTimestamp
400
+ ? new Date(c.lastMessageTimestamp).toISOString()
401
+ : "unknown";
402
+ const unread = c.unreadCount > 0 ? ` [${c.unreadCount} unread]` : "";
403
+ return `${c.name} (${c.jid})${unread} — last message ${ts}`;
404
+ });
405
+ return {
406
+ content: [
407
+ {
408
+ type: "text",
409
+ text: `${chats.length} chat(s) [source: Baileys store]:\n${lines.join("\n")}`,
410
+ },
411
+ ],
412
+ };
413
+ }
414
+ catch (err) {
415
+ const errMsg = err instanceof Error ? err.message : String(err);
416
+ return {
417
+ content: [{ type: "text", text: `Error: ${errMsg}` }],
418
+ isError: true,
419
+ };
420
+ }
421
+ });
422
+ // ---------------------------------------------------------------------------
275
423
  // Tool: whatsapp_wait
276
424
  // ---------------------------------------------------------------------------
277
425
  server.tool("whatsapp_wait", [
@@ -333,6 +481,76 @@ server.tool("whatsapp_login", [
333
481
  }
334
482
  });
335
483
  // ---------------------------------------------------------------------------
484
+ // Tool: whatsapp_history
485
+ // ---------------------------------------------------------------------------
486
+ server.tool("whatsapp_history", [
487
+ "Fetch message history for a WhatsApp chat.",
488
+ "Reads directly from the WhatsApp Desktop macOS SQLite database when available — no phone connection required.",
489
+ "Falls back to Baileys on-demand fetch (requires phone online) when the Desktop DB is not present.",
490
+ "Accepts a full JID (e.g. '41796074745@s.whatsapp.net') or a phone number (e.g. '+41796074745').",
491
+ ].join(" "), {
492
+ jid: z
493
+ .string()
494
+ .min(1)
495
+ .describe("The chat JID (e.g. '41796074745@s.whatsapp.net') or phone number (e.g. '+41796074745')"),
496
+ count: z
497
+ .number()
498
+ .min(1)
499
+ .max(500)
500
+ .default(50)
501
+ .describe("Number of messages to fetch (default 50, max 500)"),
502
+ }, async ({ jid, count }) => {
503
+ try {
504
+ // Try the Desktop DB first — works offline, no anchor message needed
505
+ const desktopMessages = getMessages(jid, count);
506
+ if (desktopMessages !== null) {
507
+ // Desktop DB is available
508
+ if (desktopMessages.length === 0) {
509
+ return {
510
+ content: [{ type: "text", text: `No messages found for ${jid} in the WhatsApp Desktop database.` }],
511
+ };
512
+ }
513
+ const lines = desktopMessages.map((m) => {
514
+ const direction = m.fromMe ? "Me" : (m.pushName ?? "Them");
515
+ return `[${m.date}] ${direction}: ${m.text}`;
516
+ });
517
+ return {
518
+ content: [
519
+ {
520
+ type: "text",
521
+ text: `${desktopMessages.length} message(s) for ${jid} [source: Desktop DB]:\n${lines.join("\n")}`,
522
+ },
523
+ ],
524
+ };
525
+ }
526
+ // Fall back to Baileys IPC (on-demand fetch from phone)
527
+ const result = await watcher.history({ jid, count });
528
+ const { messages } = result;
529
+ if (messages.length === 0) {
530
+ return { content: [{ type: "text", text: "No messages found for this chat." }] };
531
+ }
532
+ const lines = messages.map((m) => {
533
+ const direction = m.fromMe ? "Me" : "Them";
534
+ return `[${m.date}] ${direction}: ${m.text}`;
535
+ });
536
+ return {
537
+ content: [
538
+ {
539
+ type: "text",
540
+ text: `${messages.length} message(s) for ${jid} [source: Baileys]:\n${lines.join("\n")}`,
541
+ },
542
+ ],
543
+ };
544
+ }
545
+ catch (err) {
546
+ const errMsg = err instanceof Error ? err.message : String(err);
547
+ return {
548
+ content: [{ type: "text", text: `Error: ${errMsg}` }],
549
+ isError: true,
550
+ };
551
+ }
552
+ });
553
+ // ---------------------------------------------------------------------------
336
554
  // Main
337
555
  // ---------------------------------------------------------------------------
338
556
  async function main() {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}