@arcaelas/whatsapp 1.0.21 → 1.2.2

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.
Files changed (50) hide show
  1. package/API.md +776 -0
  2. package/DOC.md +532 -0
  3. package/build/Chat.d.ts +335 -0
  4. package/build/Chat.js +396 -0
  5. package/build/Chat.js.map +1 -0
  6. package/build/Contact.d.ts +828 -0
  7. package/build/Contact.js +188 -0
  8. package/build/Contact.js.map +1 -0
  9. package/build/Message.d.ts +525 -0
  10. package/build/Message.js +445 -0
  11. package/build/Message.js.map +1 -0
  12. package/build/WhatsApp.d.ts +68 -0
  13. package/build/WhatsApp.js +399 -0
  14. package/build/WhatsApp.js.map +1 -0
  15. package/build/index.d.ts +11 -107
  16. package/build/index.js +1 -1
  17. package/build/index.js.map +3 -3
  18. package/build/store/driver/FileEngine.d.ts +23 -0
  19. package/build/store/driver/FileEngine.js +90 -0
  20. package/build/store/driver/FileEngine.js.map +1 -0
  21. package/build/store/driver/RedisEngine.d.ts +38 -0
  22. package/build/store/driver/RedisEngine.js +69 -0
  23. package/build/store/driver/RedisEngine.js.map +1 -0
  24. package/build/store/engine.d.ts +54 -0
  25. package/build/store/engine.js +7 -0
  26. package/build/store/engine.js.map +1 -0
  27. package/build/store/index.d.ts +8 -0
  28. package/build/store/index.js +12 -0
  29. package/build/store/index.js.map +1 -0
  30. package/context7.json +4 -0
  31. package/package.json +59 -52
  32. package/tsconfig.json +25 -25
  33. package/build/model/base.d.ts +0 -28
  34. package/build/model/base.js +0 -65
  35. package/build/model/base.js.map +0 -1
  36. package/build/model/chat.d.ts +0 -112
  37. package/build/model/chat.js +0 -105
  38. package/build/model/chat.js.map +0 -1
  39. package/build/model/contact.d.ts +0 -16
  40. package/build/model/contact.js +0 -22
  41. package/build/model/contact.js.map +0 -1
  42. package/build/model/message.d.ts +0 -159
  43. package/build/model/message.js +0 -206
  44. package/build/model/message.js.map +0 -1
  45. package/build/static/Store.d.ts +0 -137
  46. package/build/static/Store.js +0 -238
  47. package/build/static/Store.js.map +0 -1
  48. package/build/static/useCache.d.ts +0 -12
  49. package/build/static/useCache.js +0 -43
  50. package/build/static/useCache.js.map +0 -1
@@ -0,0 +1,399 @@
1
+ "use strict";
2
+ /**
3
+ * @file WhatsApp.ts
4
+ * @description Clase principal que gestiona la conexión y eventos de WhatsApp
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ var __importDefault = (this && this.__importDefault) || function (mod) {
40
+ return (mod && mod.__esModule) ? mod : { "default": mod };
41
+ };
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.WhatsApp = void 0;
44
+ const baileys_1 = require("baileys");
45
+ const node_events_1 = require("node:events");
46
+ const pino_1 = __importDefault(require("pino"));
47
+ const QRCode = __importStar(require("qrcode"));
48
+ const Chat_1 = require("./Chat");
49
+ const Contact_1 = require("./Contact");
50
+ const Message_1 = require("./Message");
51
+ const store_1 = require("./store");
52
+ /**
53
+ * @description
54
+ * Clase principal para gestionar la conexión con WhatsApp.
55
+ *
56
+ * @example
57
+ * const { event, pair, Contact, Chat, Message } = new WhatsApp({ phone: '5491112345678' });
58
+ * event.on('open', () => console.log('Conectado'));
59
+ * await pair((code) => console.log('Código:', code));
60
+ */
61
+ class WhatsApp {
62
+ constructor(options = {}) {
63
+ this._socket = null;
64
+ /**
65
+ * @description Conecta a WhatsApp.
66
+ * - Con phone: callback recibe código de 8 dígitos (una vez)
67
+ * - Sin phone: callback recibe QR como Buffer PNG (periódicamente)
68
+ * @param callback Función que recibe el código o QR.
69
+ */
70
+ this.pair = async (callback) => {
71
+ const { version } = await (0, baileys_1.fetchLatestBaileysVersion)();
72
+ const stored = await this.engine.get('session/creds');
73
+ const creds = stored ? JSON.parse(stored, baileys_1.BufferJSON.reviver) : (0, baileys_1.initAuthCreds)();
74
+ let code_sent = false;
75
+ const connect = async () => {
76
+ this._socket = (0, baileys_1.makeWASocket)({
77
+ version,
78
+ auth: {
79
+ creds,
80
+ keys: {
81
+ get: async (type, ids) => {
82
+ const data = {};
83
+ for (const id of ids) {
84
+ const stored = await this.engine.get(`session/${type}/${id}`);
85
+ if (stored) {
86
+ let value = JSON.parse(stored, baileys_1.BufferJSON.reviver);
87
+ if (type === 'app-state-sync-key')
88
+ value = baileys_1.proto.Message.AppStateSyncKeyData.fromObject(value);
89
+ data[id] = value;
90
+ }
91
+ }
92
+ return data;
93
+ },
94
+ set: async (data) => {
95
+ for (const category in data) {
96
+ for (const id in data[category]) {
97
+ const value = data[category][id];
98
+ await this.engine.set(`session/${category}/${id}`, value ? JSON.stringify(value, baileys_1.BufferJSON.replacer) : null);
99
+ }
100
+ }
101
+ },
102
+ },
103
+ },
104
+ browser: baileys_1.Browsers.windows('Chrome'),
105
+ printQRInTerminal: false,
106
+ logger: (0, pino_1.default)({ level: 'silent' }),
107
+ syncFullHistory: false,
108
+ markOnlineOnConnect: false,
109
+ });
110
+ const socket = this._socket;
111
+ socket.ev.on('creds.update', () => this.engine.set('session/creds', JSON.stringify(creds, baileys_1.BufferJSON.replacer)));
112
+ socket.ev.on('connection.update', async (update) => {
113
+ const { connection, lastDisconnect, qr } = update;
114
+ if (qr && !creds.registered) {
115
+ if (this._phone && !code_sent) {
116
+ code_sent = true;
117
+ await callback(await socket.requestPairingCode(this._phone));
118
+ }
119
+ else if (!this._phone) {
120
+ await callback(await QRCode.toBuffer(qr, { type: 'png', margin: 2 }));
121
+ }
122
+ }
123
+ if (connection === 'open') {
124
+ this.event.emit('open');
125
+ }
126
+ else if (connection === 'close') {
127
+ this._socket = null;
128
+ if (lastDisconnect?.error?.output?.statusCode === baileys_1.DisconnectReason.loggedOut) {
129
+ this.event.emit('error', new Error('Logged out'));
130
+ return;
131
+ }
132
+ this.event.emit('close');
133
+ setTimeout(connect, 3000);
134
+ }
135
+ });
136
+ // ═══════════════════════════════════════════════════════════════════
137
+ // CONTACTS
138
+ // ═══════════════════════════════════════════════════════════════════
139
+ socket.ev.on('contacts.upsert', async (contacts) => {
140
+ for (const c of contacts) {
141
+ if (!c.id)
142
+ continue;
143
+ const existing = await this.engine.get(`contact/${c.id}/index`);
144
+ const raw = {
145
+ id: c.id,
146
+ lid: c.lid ?? null,
147
+ name: c.name ?? null,
148
+ notify: c.notify ?? null,
149
+ verifiedName: c.verifiedName ?? null,
150
+ imgUrl: c.imgUrl ?? null,
151
+ status: c.status ?? null,
152
+ };
153
+ const data = (0, Contact_1.build_contact)(raw);
154
+ await this.engine.set(`contact/${c.id}/index`, JSON.stringify(data, baileys_1.BufferJSON.replacer));
155
+ this.event.emit(existing ? 'contact:updated' : 'contact:created', new this.Contact(data));
156
+ }
157
+ });
158
+ socket.ev.on('contacts.update', async (contacts) => {
159
+ for (const c of contacts) {
160
+ if (!c.id)
161
+ continue;
162
+ const stored = await this.engine.get(`contact/${c.id}/index`);
163
+ if (!stored)
164
+ continue;
165
+ const data = JSON.parse(stored, baileys_1.BufferJSON.reviver);
166
+ c.notify && (data.raw.notify = c.notify);
167
+ c.name && (data.raw.name = c.name);
168
+ c.imgUrl && (data.raw.imgUrl = c.imgUrl);
169
+ c.status && (data.raw.status = c.status);
170
+ data.name = data.raw.name ?? data.raw.notify ?? data.raw.id.split('@')[0];
171
+ data.photo = data.raw.imgUrl ?? null;
172
+ data.content = data.raw.status ?? '';
173
+ await this.engine.set(`contact/${c.id}/index`, JSON.stringify(data, baileys_1.BufferJSON.replacer));
174
+ this.event.emit('contact:updated', new this.Contact(data));
175
+ }
176
+ });
177
+ // ═══════════════════════════════════════════════════════════════════
178
+ // CHATS
179
+ // ═══════════════════════════════════════════════════════════════════
180
+ socket.ev.on('chats.upsert', async (chats) => {
181
+ for (const ch of chats) {
182
+ const existing = await this.engine.get(`chat/${ch.id}/index`);
183
+ const raw = existing
184
+ ? JSON.parse(existing, baileys_1.BufferJSON.reviver).raw
185
+ : {
186
+ id: ch.id,
187
+ name: ch.name ?? null,
188
+ archived: ch.archived ?? null,
189
+ pinned: ch.pinned ?? null,
190
+ muteEndTime: ch.muteEndTime ?? null,
191
+ unreadCount: ch.unreadCount ?? null,
192
+ readOnly: ch.readOnly ?? null,
193
+ };
194
+ if (ch.name)
195
+ raw.name = ch.name;
196
+ const data = (0, Chat_1.build_chat)(raw);
197
+ await this.engine.set(`chat/${ch.id}/index`, JSON.stringify(data, baileys_1.BufferJSON.replacer));
198
+ this.event.emit(existing ? 'chat:updated' : 'chat:created', new this.Chat(data));
199
+ }
200
+ });
201
+ socket.ev.on('chats.update', async (chats) => {
202
+ for (const ch of chats) {
203
+ if (!ch.id)
204
+ continue;
205
+ const stored = await this.engine.get(`chat/${ch.id}/index`);
206
+ const data = stored ? JSON.parse(stored, baileys_1.BufferJSON.reviver) : (0, Chat_1.build_chat)({ id: ch.id, name: ch.name ?? null });
207
+ if (ch.name !== undefined) {
208
+ data.raw.name = ch.name ?? data.raw.name;
209
+ data.name = data.raw.name ?? data.raw.displayName ?? ch.id.split('@')[0];
210
+ }
211
+ let has_specific_event = false;
212
+ // Pin
213
+ if ('pinned' in ch) {
214
+ data.raw.pinned = ch.pinned ?? null;
215
+ data.pined = data.raw.pinned !== null;
216
+ this.event.emit('chat:pined', ch.id, data.raw.pinned);
217
+ has_specific_event = true;
218
+ }
219
+ // Archive
220
+ if (ch.archived !== undefined) {
221
+ data.raw.archived = ch.archived ?? false;
222
+ data.archived = data.raw.archived;
223
+ this.event.emit('chat:archived', ch.id, data.archived);
224
+ has_specific_event = true;
225
+ }
226
+ // Mute
227
+ if ('muteEndTime' in ch) {
228
+ data.raw.muteEndTime = ch.muteEndTime ?? null;
229
+ data.muted = data.raw.muteEndTime ?? false;
230
+ this.event.emit('chat:muted', ch.id, data.raw.muteEndTime);
231
+ has_specific_event = true;
232
+ }
233
+ // UnreadCount
234
+ if (ch.unreadCount !== undefined) {
235
+ data.raw.unreadCount = ch.unreadCount;
236
+ data.readed = (data.raw.unreadCount === 0 || data.raw.unreadCount === null) && !data.raw.markedAsUnread;
237
+ }
238
+ await this.engine.set(`chat/${ch.id}/index`, JSON.stringify(data, baileys_1.BufferJSON.replacer));
239
+ if (!has_specific_event) {
240
+ this.event.emit(stored ? 'chat:updated' : 'chat:created', new this.Chat(data));
241
+ }
242
+ }
243
+ });
244
+ socket.ev.on('chats.delete', async (ids) => {
245
+ for (const cid of ids) {
246
+ await this.Chat.cascade_delete(cid);
247
+ this.event.emit('chat:deleted', cid);
248
+ }
249
+ });
250
+ // ═══════════════════════════════════════════════════════════════════
251
+ // MESSAGES
252
+ // ═══════════════════════════════════════════════════════════════════
253
+ socket.ev.on('messages.upsert', async ({ messages }) => {
254
+ for (const msg of messages) {
255
+ if (!msg.key.remoteJid || !msg.key.id)
256
+ continue;
257
+ const cid = msg.key.remoteJid;
258
+ const mid = msg.key.id;
259
+ const content_type = (0, baileys_1.getContentType)(msg.message ?? {});
260
+ // Ignorar reacciones y votos de encuesta (tienen sus propios eventos)
261
+ if (content_type === 'reactionMessage' || content_type === 'pollUpdateMessage')
262
+ continue;
263
+ // ─────────────────────────────────────────────────────────────
264
+ // PROTOCOL MESSAGE (ediciones y eliminaciones)
265
+ // ─────────────────────────────────────────────────────────────
266
+ if (content_type === 'protocolMessage') {
267
+ const protocol = msg.message?.protocolMessage;
268
+ if (!protocol?.key?.id)
269
+ continue;
270
+ const target_mid = protocol.key.id;
271
+ const target_cid = protocol.key.remoteJid ?? cid;
272
+ // MESSAGE_EDIT: Merge selectivo - reemplazar solo message
273
+ if (protocol.type === baileys_1.proto.Message.ProtocolMessage.Type.MESSAGE_EDIT) {
274
+ const edited_msg = protocol.editedMessage;
275
+ if (!edited_msg)
276
+ continue;
277
+ // Obtener index y raw
278
+ const stored_index = await this.engine.get(`chat/${target_cid}/message/${target_mid}/index`);
279
+ const stored_raw = await this.engine.get(`chat/${target_cid}/message/${target_mid}/raw`);
280
+ if (!stored_index || !stored_raw)
281
+ continue;
282
+ const index = JSON.parse(stored_index, baileys_1.BufferJSON.reviver);
283
+ const raw = JSON.parse(stored_raw, baileys_1.BufferJSON.reviver);
284
+ raw.message = edited_msg;
285
+ index.edited = true;
286
+ index.caption = (0, Message_1.build_message_index)(raw).caption;
287
+ await this.engine.set(`chat/${target_cid}/message/${target_mid}/index`, JSON.stringify(index, baileys_1.BufferJSON.replacer));
288
+ await this.engine.set(`chat/${target_cid}/message/${target_mid}/raw`, JSON.stringify(raw, baileys_1.BufferJSON.replacer));
289
+ const instance = new this.Message({ index, raw });
290
+ this.Message.notify(target_cid, target_mid);
291
+ this.event.emit('message:updated', instance);
292
+ continue;
293
+ }
294
+ // REVOKE: Eliminar del engine
295
+ if (protocol.type === baileys_1.proto.Message.ProtocolMessage.Type.REVOKE) {
296
+ // Eliminar del índice del chat
297
+ await this.Chat.remove_message(target_cid, target_mid);
298
+ // Eliminar archivos
299
+ await this.engine.set(`chat/${target_cid}/message/${target_mid}/index`, null);
300
+ await this.engine.set(`chat/${target_cid}/message/${target_mid}/content`, null);
301
+ await this.engine.set(`chat/${target_cid}/message/${target_mid}/raw`, null);
302
+ this.event.emit('message:deleted', target_cid, target_mid);
303
+ }
304
+ continue;
305
+ }
306
+ // ─────────────────────────────────────────────────────────────
307
+ // MENSAJE NUEVO
308
+ // ─────────────────────────────────────────────────────────────
309
+ // Construir index desde raw y guardar
310
+ const index = (0, Message_1.build_message_index)(msg);
311
+ await this.engine.set(`chat/${cid}/message/${mid}/index`, JSON.stringify(index, baileys_1.BufferJSON.replacer));
312
+ await this.engine.set(`chat/${cid}/message/${mid}/raw`, JSON.stringify(msg, baileys_1.BufferJSON.replacer));
313
+ // Extraer content inline según tipo
314
+ let content = Buffer.alloc(0);
315
+ if (index.type === 'text') {
316
+ const raw_content = msg.message?.[content_type];
317
+ content = Buffer.from(typeof raw_content === 'string' ? raw_content : raw_content?.text ?? raw_content?.caption ?? '', 'utf-8');
318
+ }
319
+ else if (index.type === 'location') {
320
+ const loc = msg.message?.locationMessage ?? msg.message?.liveLocationMessage;
321
+ content = Buffer.from(JSON.stringify({ lat: loc?.degreesLatitude, lng: loc?.degreesLongitude }), 'utf-8');
322
+ }
323
+ else if (index.type === 'poll') {
324
+ const poll = msg.message?.pollCreationMessage ?? msg.message?.pollCreationMessageV2 ?? msg.message?.pollCreationMessageV3;
325
+ content = Buffer.from(JSON.stringify({ content: poll?.name ?? '', options: poll?.options?.map((o) => ({ content: o.optionName })) ?? [] }), 'utf-8');
326
+ }
327
+ else if (['image', 'video', 'audio'].includes(index.type) && this._socket) {
328
+ try {
329
+ const buffer = await (0, baileys_1.downloadMediaMessage)(msg, 'buffer', {});
330
+ if (Buffer.isBuffer(buffer))
331
+ content = buffer;
332
+ }
333
+ catch { }
334
+ }
335
+ if (content.length) {
336
+ await this.engine.set(`chat/${cid}/message/${mid}/content`, content.toString('base64'));
337
+ }
338
+ // Agregar al índice del chat y emitir
339
+ await this.Chat.add_message(cid, mid, index.created_at);
340
+ const instance = new this.Message({ index, raw: msg });
341
+ content.length && (instance.content = async () => content);
342
+ this.Message.notify(cid, mid);
343
+ this.event.emit('message:created', instance);
344
+ }
345
+ });
346
+ socket.ev.on('messages.update', async (updates) => {
347
+ for (const { key, update } of updates) {
348
+ if (!key.remoteJid || !key.id)
349
+ continue;
350
+ const stored_index = await this.engine.get(`chat/${key.remoteJid}/message/${key.id}/index`);
351
+ const stored_raw = await this.engine.get(`chat/${key.remoteJid}/message/${key.id}/raw`);
352
+ if (!stored_index)
353
+ continue;
354
+ const index = JSON.parse(stored_index, baileys_1.BufferJSON.reviver);
355
+ const raw = stored_raw ? JSON.parse(stored_raw, baileys_1.BufferJSON.reviver) : { key };
356
+ // Edición via messages.update
357
+ if (update.message?.editedMessage?.message) {
358
+ raw.message = update.message.editedMessage.message;
359
+ index.edited = true;
360
+ index.caption = (0, Message_1.build_message_index)(raw).caption;
361
+ await this.engine.set(`chat/${key.remoteJid}/message/${key.id}/index`, JSON.stringify(index, baileys_1.BufferJSON.replacer));
362
+ await this.engine.set(`chat/${key.remoteJid}/message/${key.id}/raw`, JSON.stringify(raw, baileys_1.BufferJSON.replacer));
363
+ const instance = new this.Message({ index, raw });
364
+ this.Message.notify(key.remoteJid, key.id);
365
+ this.event.emit('message:updated', instance);
366
+ continue;
367
+ }
368
+ // Status update
369
+ if (update.status !== undefined) {
370
+ raw.status = update.status;
371
+ index.status = raw.status;
372
+ await this.engine.set(`chat/${key.remoteJid}/message/${key.id}/index`, JSON.stringify(index, baileys_1.BufferJSON.replacer));
373
+ await this.engine.set(`chat/${key.remoteJid}/message/${key.id}/raw`, JSON.stringify(raw, baileys_1.BufferJSON.replacer));
374
+ }
375
+ }
376
+ });
377
+ socket.ev.on('messages.reaction', async (reactions) => {
378
+ for (const { key, reaction } of reactions) {
379
+ if (key.remoteJid && key.id)
380
+ this.event.emit('message:reacted', key.remoteJid, key.id, reaction.text ?? '');
381
+ }
382
+ });
383
+ };
384
+ await connect();
385
+ };
386
+ this._phone = options.phone?.toString();
387
+ this.engine = options.engine ?? new store_1.FileEngine(this._phone ? `.baileys/${this._phone}` : '.baileys/default');
388
+ this.event = new node_events_1.EventEmitter();
389
+ this.Contact = (0, Contact_1.contact)(this);
390
+ this.Chat = (0, Chat_1.chat)(this);
391
+ this.Message = (0, Message_1.message)(this);
392
+ }
393
+ /** @description Retorna el socket de Baileys (null si no está conectado). */
394
+ get socket() {
395
+ return this._socket;
396
+ }
397
+ }
398
+ exports.WhatsApp = WhatsApp;
399
+ //# sourceMappingURL=WhatsApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WhatsApp.js","sourceRoot":"","sources":["../src/WhatsApp.ts"],"names":[],"mappings":"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"}
package/build/index.d.ts CHANGED
@@ -1,109 +1,13 @@
1
- import { Noop } from '@arcaelas/utils';
2
- import { Mutex, type MutexInterface } from 'async-mutex';
3
- import * as Baileys from 'baileys';
4
- import EventEmitter from 'node:events';
5
- import Chat from './model/chat';
6
- import Message from './model/message';
7
- import Store, { Engine } from './static/Store';
8
1
  /**
9
- * @description Estructura de configuración para iniciar sesión con WhatsApp.
2
+ * @file index.ts
3
+ * @description Punto de entrada público de la librería @arcaelas/whatsapp
10
4
  */
11
- interface IWhatsApp {
12
- phone: string;
13
- store: Engine;
14
- onCode(code: string): void | Promise<void>;
15
- browser?: Baileys.WABrowserDescription | undefined;
16
- }
17
- /**
18
- * @description
19
- * Event map for WhatsApp.
20
- */
21
- interface EventMap {
22
- error: [error: Error];
23
- open: [];
24
- close: [];
25
- qr: [qr: string];
26
- code: [code: string];
27
- 'chat:created': [chat: Chat];
28
- 'chat:updated': [chat: Chat];
29
- 'chat:deleted': [id: string];
30
- 'message:created': [message: Message];
31
- 'message:updated': [message: Message];
32
- 'message:deleted': [id: string];
33
- process: [event: Partial<Baileys.BaileysEventMap>, socket: Baileys.WASocket, store: Store];
34
- }
35
- /**
36
- * @description
37
- * Client for WhatsApp Web.
38
- * @example
39
- * const client = new WhatsApp({
40
- * phone: '1234567890',
41
- * loginType: 'qr',
42
- * qr: (code) => console.log(code),
43
- * });
44
- */
45
- declare class WhatsApp extends EventEmitter<EventMap> {
46
- protected readonly options: IWhatsApp;
47
- /**
48
- * @description
49
- * Store for WhatsApp Web.
50
- */
51
- protected store: Store;
52
- /**
53
- * @description
54
- * Socket for WhatsApp Web.
55
- */
56
- protected socket: Baileys.WASocket | null;
57
- /**
58
- * @description
59
- * Mutex, used to prevent concurrent access to the socket.
60
- */
61
- protected readonly mutex: Mutex;
62
- constructor(options: IWhatsApp);
63
- /**
64
- * @description
65
- * Execute a function with the socket and store, means that the function will be executed only when the socket is ready.
66
- * @param func Function to execute.
67
- * @returns Result of the function.
68
- */
69
- tick<T extends Noop<[release: MutexInterface.Releaser, socket: Baileys.WASocket, store: Store], any>>(func: T): Promise<Awaited<ReturnType<T>>>;
70
- /**
71
- * @description
72
- * Process events from the socket.
73
- * @param func Function to execute.
74
- * @returns Handler to remove the event listener.
75
- */
76
- process(func: Noop<[event: Partial<Baileys.BaileysEventMap>, socket: Baileys.WASocket, store: Store]>): this;
77
- /**
78
- * @description
79
- * Returns all documents in the store.
80
- * @returns Promise that resolves to an object containing all documents.
81
- */
82
- documents(): Promise<Record<string, any>>;
83
- /**
84
- * @description
85
- * Returns all chats in the store.
86
- * @returns Promise that resolves to an array of chats.
87
- */
88
- chats(): Promise<Chat[]>;
89
- /**
90
- * @description
91
- * Returns all messages in the store.
92
- * @returns Promise that resolves to an array of messages.
93
- */
94
- messages(): Promise<Message[]>;
95
- /**
96
- * @description
97
- * Connect to WhatsApp Web.
98
- * @returns Promise that resolves to the socket.
99
- */
100
- protected connect(): Promise<any>;
101
- }
102
- export default WhatsApp;
103
- export * from './static/Store';
104
- export { default as Store } from './static/Store';
105
- export { default as useCache } from './static/useCache';
106
- export * from './model/chat';
107
- export { default as Chat } from './model/chat';
108
- export * from './model/message';
109
- export { default as Message } from './model/message';
5
+ export { MESSAGE_STATUS } from './Message';
6
+ export type { LocationOptions, MessageType, PollOptions } from './Message';
7
+ export type { Engine } from './store';
8
+ export type { IChat, IChatRaw, IGroupParticipant } from './Chat';
9
+ export type { IContact, IContactRaw } from './Contact';
10
+ export type { IMessage, IMessageIndex } from './Message';
11
+ export type { IWhatsApp } from './WhatsApp';
12
+ export { FileEngine, RedisEngine } from './store';
13
+ export { WhatsApp } from './WhatsApp';
package/build/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var q=Object.create;var f=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var D=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty;var N=(r,i)=>{for(var e in i)f(r,e,{get:i[e],enumerable:!0})},y=(r,i,e,a)=>{if(i&&typeof i=="object"||typeof i=="function")for(let h of T(i))!j.call(r,h)&&h!==e&&f(r,h,{get:()=>i[h],enumerable:!(a=I(i,h))||a.enumerable});return r},l=(r,i,e)=>(y(r,i,"default"),e&&y(e,i,"default")),c=(r,i,e)=>(e=r!=null?q(D(r)):{},y(i||!r||!r.__esModule?f(e,"default",{value:r,enumerable:!0}):e,r)),b=r=>y(f({},"__esModule",{value:!0}),r);var d={};N(d,{Chat:()=>B.default,Message:()=>W.default,Store:()=>R.default,default:()=>H,useCache:()=>A.default});module.exports=b(d);var p=require("@arcaelas/utils"),k=require("async-mutex"),w=c(require("baileys")),S=c(require("node-cache")),C=c(require("node:events")),P=c(require("pino")),u=c(require("./model/chat")),g=c(require("./model/message")),x=c(require("./static/Store")),M=c(require("./static/useCache"));l(d,require("./static/Store"),module.exports);var R=c(require("./static/Store")),A=c(require("./static/useCache"));l(d,require("./model/chat"),module.exports);var B=c(require("./model/chat"));l(d,require("./model/message"),module.exports);var W=c(require("./model/message"));class O extends C.default{constructor(e){super({captureRejections:!0});this.options=e;this.socket=null;this.mutex=new k.Mutex;this.store=new x.default(this.options.store),this.connect()}async tick(e){return this.mutex.acquire(5).then(a=>e(a,this.socket,this.store))}process(e){return this.on("process",a=>{e(a,this.socket,this.store)})}async documents(){const e={};for await(const a of this.store.document.values())e[a.key]=a.value;return e}async chats(){const e=[];for await(const a of this.store.chat.values())e.push(new u.default(this,a));return e}async messages(){const e=[];for await(const a of this.store.message.values())e.push(new g.default(this,a));return e}async connect(){const e=(0,p.promify)();try{const a=(0,P.default)({level:"fatal"}),{state:h,save:E}=await(0,M.default)(this.store),n=w.makeWASocket({logger:a,maxMsgRetryCount:4,syncFullHistory:!1,printQRInTerminal:!1,connectTimeoutMs:2e4,retryRequestDelayMs:350,markOnlineOnConnect:!1,keepAliveIntervalMs:3e4,version:[2,3e3,1023223821],generateHighQualityLinkPreview:!0,msgRetryCounterCache:new S.default,browser:["Windows","Chrome","Chrome 114.0.5735.198"],auth:{creds:h.creds,keys:w.makeCacheableSignalKeyStore(h.keys,a)},getMessage:async s=>{const t=await this.store.message.get(s.id);return t?t.message:void 0}});if(n.ev.process(async s=>{if(this.emit("process",s,n,this.store),s["creds.update"]&&await E(),s["connection.update"]){const{connection:t,lastDisconnect:m}=s["connection.update"],o=m?.error?.output?.statusCode;t==="open"?e.resolve(n):t==="close"&&(o===w.DisconnectReason.loggedOut?e.resolve(await this.connect()):o===w.DisconnectReason.restartRequired?e.resolve(await this.connect()):e.reject(m))}}),n.ev.on("messaging-history.set",({contacts:s=[],chats:t=[],messages:m=[]})=>{Promise.allSettled(s.map(async o=>{await this.store.contact.set(o)})),Promise.allSettled(t.map(async o=>{await this.store.chat.set(o),this.emit("chat:created",new u.default(this,o))})),Promise.allSettled(m.map(async o=>{await this.store.message.set(o);const v=new g.default(this,o);["text","image","audio","video","location"].includes(v.type)&&this.emit("message:created",v)}))}),n.ev.on("chats.upsert",s=>{Promise.allSettled(s.map(async t=>{await this.store.chat.set(t),this.emit("chat:created",new u.default(this,t))}))}),n.ev.on("chats.update",s=>{Promise.allSettled(s.map(async t=>{const m=await this.store.chat.get(t.id),o=(0,p.merge)({},m,t);await this.store.chat.set(o),this.emit("chat:updated",new u.default(this,o))}))}),n.ev.on("chats.delete",s=>{Promise.allSettled(s.map(async t=>{await this.store.chat.unset(t),this.emit("chat:deleted",t)}))}),n.ev.on("messages.upsert",({type:s,messages:t})=>{s==="notify"&&Promise.allSettled(t.map(async m=>{await this.store.message.set(m);const o=new g.default(this,m);["text","image","audio","video","location"].includes(o.type)&&this.emit("message:created",o)}))}),n.ev.on("messages.update",s=>{Promise.allSettled(s.map(async t=>{const m=await this.store.message.get(t.key.id),o=(0,p.merge)({},m,t);await this.store.message.set(o),this.emit("message:updated",new g.default(this,o))}))}),n.ev.on("messages.delete",s=>{s.keys&&Promise.allSettled(s.keys.map(async t=>{await this.store.message.unset(t.id),this.emit("message:deleted",t.id)}))}),!n.authState.creds.registered){await(0,p.sleep)(2e3),await this.store.document.unset("creds.json");const s=await n.requestPairingCode(this.options.phone);await this.options.onCode(s)}}catch(a){e.reject(a)}return e.then(a=>this.socket=a)}}var H=O;0&&(module.exports={Chat,Message,Store,useCache,...require("./static/Store"),...require("./model/chat"),...require("./model/message")});
1
+ "use strict";var a=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var I=(t,e)=>{for(var p in e)a(t,p,{get:e[p],enumerable:!0})},g=(t,e,p,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of f(e))!m.call(t,o)&&o!==p&&a(t,o,{get:()=>e[o],enumerable:!(s=x(e,o))||s.enumerable});return t};var y=t=>g(a({},"__esModule",{value:!0}),t);var h={};I(h,{FileEngine:()=>r.FileEngine,MESSAGE_STATUS:()=>n.MESSAGE_STATUS,RedisEngine:()=>r.RedisEngine,WhatsApp:()=>i.WhatsApp});module.exports=y(h);var n=require("./Message"),r=require("./store"),i=require("./WhatsApp");0&&(module.exports={FileEngine,MESSAGE_STATUS,RedisEngine,WhatsApp});
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
- "sourcesContent": ["import { merge, Noop, promify, sleep } from '@arcaelas/utils';\nimport { Mutex, type MutexInterface } from 'async-mutex';\nimport * as Baileys from 'baileys';\nimport NodeCache from 'node-cache';\nimport EventEmitter from 'node:events';\nimport P from 'pino';\nimport Chat from './model/chat';\nimport Message from './model/message';\nimport Store, { Engine } from './static/Store';\nimport useCache from './static/useCache';\n\n/**\n * @description Estructura de configuraci\u00F3n para iniciar sesi\u00F3n con WhatsApp.\n */\ninterface IWhatsApp {\n phone: string;\n store: Engine;\n onCode(code: string): void | Promise<void>;\n browser?: Baileys.WABrowserDescription | undefined;\n}\n\n/**\n * @description\n * Event map for WhatsApp.\n */\ninterface EventMap {\n error: [error: Error];\n open: [];\n close: [];\n qr: [qr: string];\n code: [code: string];\n 'chat:created': [chat: Chat];\n 'chat:updated': [chat: Chat];\n 'chat:deleted': [id: string];\n 'message:created': [message: Message];\n 'message:updated': [message: Message];\n 'message:deleted': [id: string];\n process: [event: Partial<Baileys.BaileysEventMap>, socket: Baileys.WASocket, store: Store];\n}\n\n/**\n * @description\n * Client for WhatsApp Web.\n * @example\n * const client = new WhatsApp({\n * phone: '1234567890',\n * loginType: 'qr',\n * qr: (code) => console.log(code),\n * });\n */\nclass WhatsApp extends EventEmitter<EventMap> {\n /**\n * @description\n * Store for WhatsApp Web.\n */\n protected store: Store;\n /**\n * @description\n * Socket for WhatsApp Web.\n */\n protected socket: Baileys.WASocket | null = null;\n /**\n * @description\n * Mutex, used to prevent concurrent access to the socket.\n */\n protected readonly mutex = new Mutex();\n\n constructor(protected readonly options: IWhatsApp) {\n super({ captureRejections: true });\n this.store = new Store(this.options.store);\n this.connect();\n }\n\n /**\n * @description\n * Execute a function with the socket and store, means that the function will be executed only when the socket is ready.\n * @param func Function to execute.\n * @returns Result of the function.\n */\n async tick<T extends Noop<[release: MutexInterface.Releaser, socket: Baileys.WASocket, store: Store], any>>(func: T): Promise<Awaited<ReturnType<T>>> {\n return this.mutex.acquire(5).then((release) => func(release, this.socket!, this.store));\n }\n\n /**\n * @description\n * Process events from the socket.\n * @param func Function to execute.\n * @returns Handler to remove the event listener.\n */\n process(func: Noop<[event: Partial<Baileys.BaileysEventMap>, socket: Baileys.WASocket, store: Store]>) {\n return this.on('process', (event) => {\n func(event, this.socket!, this.store);\n });\n }\n\n /**\n * @description\n * Returns all documents in the store.\n * @returns Promise that resolves to an object containing all documents.\n */\n async documents(): Promise<Record<string, any>> {\n const documents: Record<string, any> = {};\n for await (const document of this.store.document.values()) {\n documents[document.key] = document.value;\n }\n return documents;\n }\n\n /**\n * @description\n * Returns all chats in the store.\n * @returns Promise that resolves to an array of chats.\n */\n async chats(): Promise<Chat[]> {\n const chats: Chat[] = [];\n for await (const chat of this.store.chat.values()) {\n chats.push(new Chat(this, chat));\n }\n return chats;\n }\n\n /**\n * @description\n * Returns all messages in the store.\n * @returns Promise that resolves to an array of messages.\n */\n async messages(): Promise<Message[]> {\n const messages: Message[] = [];\n for await (const message of this.store.message.values()) {\n messages.push(new Message(this, message));\n }\n return messages;\n }\n\n /**\n * @description\n * Connect to WhatsApp Web.\n * @returns Promise that resolves to the socket.\n */\n protected async connect() {\n const promise = promify();\n try {\n const logger = P({ level: 'fatal' });\n const { state, save } = await useCache(this.store);\n const socket = Baileys.makeWASocket({\n logger: logger,\n maxMsgRetryCount: 4,\n syncFullHistory: false,\n printQRInTerminal: false,\n connectTimeoutMs: 20_000,\n retryRequestDelayMs: 350,\n markOnlineOnConnect: false,\n keepAliveIntervalMs: 30_000,\n version: [2, 3000, 1023223821],\n generateHighQualityLinkPreview: true,\n msgRetryCounterCache: new NodeCache(),\n browser: ['Windows', 'Chrome', 'Chrome 114.0.5735.198'],\n auth: {\n creds: state.creds,\n keys: Baileys.makeCacheableSignalKeyStore(state.keys, logger),\n },\n getMessage: async (key) => {\n const message = await this.store.message.get(key.id!);\n return message ? message.message! : undefined;\n },\n });\n socket.ev.process(async (event) => {\n this.emit('process', event, socket, this.store);\n if (event['creds.update']) {\n await save();\n }\n if (event['connection.update']) {\n const { connection, lastDisconnect } = event['connection.update'];\n const statusCode = lastDisconnect?.error?.['output']?.statusCode;\n if (connection === 'open') {\n promise.resolve(socket);\n } else if (connection === 'close') {\n if (statusCode === Baileys.DisconnectReason.loggedOut) {\n promise.resolve(await this.connect());\n } else if (statusCode === Baileys.DisconnectReason.restartRequired) {\n promise.resolve(await this.connect());\n } else {\n promise.reject(lastDisconnect);\n }\n }\n }\n });\n socket.ev.on('messaging-history.set', ({ contacts = [], chats = [], messages = [] }) => {\n // prettier-ignore\n Promise.allSettled(\n contacts.map(async c=>{\n await this.store.contact.set(c);\n })\n );\n // prettier-ignore\n Promise.allSettled(\n chats.map(async c=>{\n await this.store.chat.set(c);\n this.emit('chat:created', new Chat(this, c));\n })\n );\n // prettier-ignore\n Promise.allSettled(\n messages.map(async m=>{\n await this.store.message.set(m);\n const message = new Message(this, m);\n if(['text', 'image', 'audio', 'video', 'location'].includes(message.type)){\n this.emit('message:created', message);\n }\n })\n );\n });\n socket.ev.on('chats.upsert', (chats) => {\n // prettier-ignore\n Promise.allSettled(\n chats.map(async c=>{\n await this.store.chat.set(c);\n this.emit('chat:created', new Chat(this, c));\n })\n )\n });\n socket.ev.on('chats.update', (chats) => {\n // prettier-ignore\n Promise.allSettled(\n chats.map(async c=>{\n const mem = await this.store.chat.get(c.id!)\n const payload = merge({}, mem, c);\n await this.store.chat.set(payload);\n this.emit('chat:updated', new Chat(this, payload));\n })\n )\n });\n socket.ev.on('chats.delete', (ids) => {\n // prettier-ignore\n Promise.allSettled(\n ids.map(async id=>{\n await this.store.chat.unset(id);\n this.emit('chat:deleted', id);\n })\n )\n });\n socket.ev.on('messages.upsert', ({ type, messages }) => {\n if (type === 'notify') {\n // prettier-ignore\n Promise.allSettled(\n messages.map(async m=>{\n await this.store.message.set(m);\n const message = new Message(this, m);\n if(['text', 'image', 'audio', 'video', 'location'].includes(message.type)){\n this.emit('message:created', message);\n }\n })\n )\n }\n });\n socket.ev.on('messages.update', (messages) => {\n // prettier-ignore\n Promise.allSettled(\n messages.map(async m=>{\n const mem = await this.store.message.get(m.key.id!);\n const payload = merge({}, mem, m);\n await this.store.message.set(payload);\n this.emit('message:updated', new Message(this, payload));\n })\n )\n });\n socket.ev.on('messages.delete', (e) => {\n if (e['keys']) {\n // prettier-ignore\n Promise.allSettled(\n e['keys'].map(async k=>{\n await this.store.message.unset(k.id!);\n this.emit('message:deleted', k.id!);\n })\n )\n }\n });\n if (!socket.authState.creds.registered) {\n await sleep(2000);\n await this.store.document.unset('creds.json');\n const code = await socket.requestPairingCode(this.options.phone);\n await this.options.onCode(code);\n }\n } catch (error) {\n promise.reject(error);\n }\n // prettier-ignore\n return promise\n .then((socket) => (this.socket = socket));\n }\n}\n\nexport default WhatsApp;\nexport * from './static/Store';\nexport { default as Store } from './static/Store';\nexport { default as useCache } from './static/useCache';\n\nexport * from './model/chat';\nexport { default as Chat } from './model/chat';\n\nexport * from './model/message';\nexport { default as Message } from './model/message';\n"],
5
- "mappings": "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",
6
- "names": ["src_exports", "__export", "src_default", "__toCommonJS", "import_utils", "import_async_mutex", "Baileys", "import_node_cache", "import_node_events", "import_pino", "import_chat", "import_message", "import_Store", "import_useCache", "__reExport", "WhatsApp", "EventEmitter", "options", "Store", "func", "release", "event", "documents", "document", "chats", "chat", "Chat", "messages", "message", "Message", "promise", "logger", "P", "state", "save", "useCache", "socket", "NodeCache", "key", "connection", "lastDisconnect", "statusCode", "contacts", "c", "m", "mem", "payload", "ids", "id", "type", "e", "k", "code", "error"]
4
+ "sourcesContent": ["/**\n * @file index.ts\n * @description Punto de entrada p\u00FAblico de la librer\u00EDa @arcaelas/whatsapp\n */\n\n// Enums\nexport { MESSAGE_STATUS } from './Message';\n\n// Types\nexport type { LocationOptions, MessageType, PollOptions } from './Message';\nexport type { Engine } from './store';\n\n// Interfaces\nexport type { IChat, IChatRaw, IGroupParticipant } from './Chat';\nexport type { IContact, IContactRaw } from './Contact';\nexport type { IMessage, IMessageIndex } from './Message';\nexport type { IWhatsApp } from './WhatsApp';\n\n// Classes\nexport { FileEngine, RedisEngine } from './store';\nexport { WhatsApp } from './WhatsApp';\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wIAAAE,EAAAF,GAMA,IAAAG,EAA+B,qBAa/BC,EAAwC,mBACxCC,EAAyB",
6
+ "names": ["src_exports", "__export", "__toCommonJS", "import_Message", "import_store", "import_WhatsApp"]
7
7
  }