@arcaelas/whatsapp 2.2.0 → 3.0.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 (127) hide show
  1. package/build/cjs/decorators.d.ts +9 -0
  2. package/build/cjs/decorators.js +26 -0
  3. package/build/cjs/decorators.js.map +1 -0
  4. package/build/cjs/index.d.ts +6 -10
  5. package/build/cjs/index.js +11 -10
  6. package/build/cjs/index.js.map +1 -1
  7. package/build/cjs/lib/bot/decorator.d.ts +77 -0
  8. package/build/cjs/lib/bot/decorator.js +219 -0
  9. package/build/cjs/lib/bot/decorator.js.map +1 -0
  10. package/build/cjs/lib/bot/decorators.d.ts +113 -0
  11. package/build/cjs/lib/bot/decorators.js +253 -0
  12. package/build/cjs/lib/bot/decorators.js.map +1 -0
  13. package/build/cjs/lib/bot/index.d.ts +3 -0
  14. package/build/cjs/lib/bot/index.js +20 -0
  15. package/build/cjs/lib/bot/index.js.map +1 -0
  16. package/build/cjs/lib/chat/index.d.ts +227 -0
  17. package/build/cjs/lib/chat/index.js +324 -0
  18. package/build/cjs/lib/chat/index.js.map +1 -0
  19. package/build/cjs/lib/contact/index.d.ts +203 -0
  20. package/build/cjs/lib/contact/index.js +226 -0
  21. package/build/cjs/lib/contact/index.js.map +1 -0
  22. package/build/cjs/lib/message/index.d.ts +237 -0
  23. package/build/cjs/lib/message/index.js +685 -0
  24. package/build/cjs/lib/message/index.js.map +1 -0
  25. package/build/cjs/lib/store/engine/index.d.ts +34 -0
  26. package/build/cjs/lib/store/engine/index.js +13 -0
  27. package/build/cjs/lib/store/engine/index.js.map +1 -0
  28. package/build/cjs/lib/store/engine/lib/file_system/index.d.ts +56 -0
  29. package/build/cjs/lib/store/engine/lib/file_system/index.js +160 -0
  30. package/build/cjs/lib/store/engine/lib/file_system/index.js.map +1 -0
  31. package/build/cjs/lib/store/engine/lib/redis/index.d.ts +82 -0
  32. package/build/cjs/lib/store/engine/lib/redis/index.js +132 -0
  33. package/build/cjs/lib/store/engine/lib/redis/index.js.map +1 -0
  34. package/build/cjs/lib/store/index.d.ts +22 -0
  35. package/build/cjs/lib/store/index.js +38 -0
  36. package/build/cjs/lib/store/index.js.map +1 -0
  37. package/build/cjs/lib/whatsapp/index.d.ts +179 -0
  38. package/build/cjs/lib/whatsapp/index.js +754 -0
  39. package/build/cjs/lib/whatsapp/index.js.map +1 -0
  40. package/build/esm/decorators.d.ts +9 -0
  41. package/build/esm/decorators.js +9 -0
  42. package/build/esm/decorators.js.map +1 -0
  43. package/build/esm/index.d.ts +6 -10
  44. package/build/esm/index.js +4 -6
  45. package/build/esm/index.js.map +1 -1
  46. package/build/esm/lib/bot/decorator.d.ts +77 -0
  47. package/build/esm/lib/bot/decorator.js +210 -0
  48. package/build/esm/lib/bot/decorator.js.map +1 -0
  49. package/build/esm/lib/bot/decorators.d.ts +113 -0
  50. package/build/esm/lib/bot/decorators.js +242 -0
  51. package/build/esm/lib/bot/decorators.js.map +1 -0
  52. package/build/esm/lib/bot/index.d.ts +3 -0
  53. package/build/esm/lib/bot/index.js +3 -0
  54. package/build/esm/lib/bot/index.js.map +1 -0
  55. package/build/esm/lib/chat/index.d.ts +227 -0
  56. package/build/esm/lib/chat/index.js +319 -0
  57. package/build/esm/lib/chat/index.js.map +1 -0
  58. package/build/esm/lib/contact/index.d.ts +203 -0
  59. package/build/esm/lib/contact/index.js +221 -0
  60. package/build/esm/lib/contact/index.js.map +1 -0
  61. package/build/esm/lib/message/index.d.ts +237 -0
  62. package/build/esm/lib/message/index.js +673 -0
  63. package/build/esm/lib/message/index.js.map +1 -0
  64. package/build/esm/lib/store/engine/index.d.ts +34 -0
  65. package/build/esm/lib/store/engine/index.js +8 -0
  66. package/build/esm/lib/store/engine/index.js.map +1 -0
  67. package/build/esm/lib/store/engine/lib/file_system/index.d.ts +56 -0
  68. package/build/esm/lib/store/engine/lib/file_system/index.js +156 -0
  69. package/build/esm/lib/store/engine/lib/file_system/index.js.map +1 -0
  70. package/build/esm/lib/store/engine/lib/redis/index.d.ts +82 -0
  71. package/build/esm/lib/store/engine/lib/redis/index.js +128 -0
  72. package/build/esm/lib/store/engine/lib/redis/index.js.map +1 -0
  73. package/build/esm/lib/store/index.d.ts +22 -0
  74. package/build/esm/lib/store/index.js +31 -0
  75. package/build/esm/lib/store/index.js.map +1 -0
  76. package/build/esm/lib/whatsapp/index.d.ts +179 -0
  77. package/build/esm/lib/whatsapp/index.js +714 -0
  78. package/build/esm/lib/whatsapp/index.js.map +1 -0
  79. package/package.json +8 -6
  80. package/build/cjs/Chat.d.ts +0 -317
  81. package/build/cjs/Chat.js +0 -275
  82. package/build/cjs/Chat.js.map +0 -1
  83. package/build/cjs/Contact.d.ts +0 -1163
  84. package/build/cjs/Contact.js +0 -162
  85. package/build/cjs/Contact.js.map +0 -1
  86. package/build/cjs/Message.d.ts +0 -902
  87. package/build/cjs/Message.js +0 -515
  88. package/build/cjs/Message.js.map +0 -1
  89. package/build/cjs/WhatsApp.d.ts +0 -80
  90. package/build/cjs/WhatsApp.js +0 -412
  91. package/build/cjs/WhatsApp.js.map +0 -1
  92. package/build/cjs/store/driver/FileEngine.d.ts +0 -34
  93. package/build/cjs/store/driver/FileEngine.js +0 -86
  94. package/build/cjs/store/driver/FileEngine.js.map +0 -1
  95. package/build/cjs/store/driver/RedisEngine.d.ts +0 -47
  96. package/build/cjs/store/driver/RedisEngine.js +0 -70
  97. package/build/cjs/store/driver/RedisEngine.js.map +0 -1
  98. package/build/cjs/store/engine.d.ts +0 -53
  99. package/build/cjs/store/engine.js +0 -7
  100. package/build/cjs/store/engine.js.map +0 -1
  101. package/build/cjs/store/index.d.ts +0 -8
  102. package/build/cjs/store/index.js +0 -12
  103. package/build/cjs/store/index.js.map +0 -1
  104. package/build/esm/Chat.d.ts +0 -317
  105. package/build/esm/Chat.js +0 -270
  106. package/build/esm/Chat.js.map +0 -1
  107. package/build/esm/Contact.d.ts +0 -1163
  108. package/build/esm/Contact.js +0 -157
  109. package/build/esm/Contact.js.map +0 -1
  110. package/build/esm/Message.d.ts +0 -902
  111. package/build/esm/Message.js +0 -510
  112. package/build/esm/Message.js.map +0 -1
  113. package/build/esm/WhatsApp.d.ts +0 -80
  114. package/build/esm/WhatsApp.js +0 -372
  115. package/build/esm/WhatsApp.js.map +0 -1
  116. package/build/esm/store/driver/FileEngine.d.ts +0 -34
  117. package/build/esm/store/driver/FileEngine.js +0 -82
  118. package/build/esm/store/driver/FileEngine.js.map +0 -1
  119. package/build/esm/store/driver/RedisEngine.d.ts +0 -47
  120. package/build/esm/store/driver/RedisEngine.js +0 -66
  121. package/build/esm/store/driver/RedisEngine.js.map +0 -1
  122. package/build/esm/store/engine.d.ts +0 -53
  123. package/build/esm/store/engine.js +0 -6
  124. package/build/esm/store/engine.js.map +0 -1
  125. package/build/esm/store/index.d.ts +0 -8
  126. package/build/esm/store/index.js +0 -7
  127. package/build/esm/store/index.js.map +0 -1
package/build/esm/Chat.js DELETED
@@ -1,270 +0,0 @@
1
- /**
2
- * @file Chat.ts
3
- * @description Clase Chat para gestión de conversaciones de WhatsApp
4
- */
5
- import { BufferJSON } from 'baileys';
6
- /**
7
- * @description
8
- * Clase base para representar una conversación de WhatsApp.
9
- * Base class representing a WhatsApp conversation.
10
- */
11
- export class Chat {
12
- constructor(raw) {
13
- this.raw = raw;
14
- }
15
- /** JID único del chat / Unique chat JID */
16
- get id() { return this.raw.id; }
17
- /** Tipo de chat / Chat type */
18
- get type() { return this.raw.id.endsWith('@g.us') ? 'group' : 'contact'; }
19
- /** Nombre del chat / Chat name */
20
- get name() { return this.raw.name ?? this.raw.displayName ?? this.raw.id.split('@')[0]; }
21
- /** Descripción del chat/grupo / Chat/group description */
22
- get content() { return this.raw.description ?? ''; }
23
- /** Si está fijado / Whether it's pinned */
24
- get pinned() { return this.raw.pinned !== null && this.raw.pinned !== undefined; }
25
- /** Si está archivado / Whether it's archived */
26
- get archived() { return this.raw.archived ?? false; }
27
- /** Timestamp cuando expira el silencio (0 = no silenciado) / Mute end timestamp (0 = not muted) */
28
- get muted() { return this.raw.muteEndTime ?? 0; }
29
- /** Si está leído / Whether it's read */
30
- get read() { return (this.raw.unreadCount === 0 || this.raw.unreadCount === null) && !this.raw.markedAsUnread; }
31
- /** Si es solo lectura / Whether it's read-only */
32
- get readonly() { return this.raw.readOnly ?? false; }
33
- }
34
- /**
35
- * @description Factory que retorna la clase Chat enlazada al contexto.
36
- * Factory that returns the Chat class bound to context.
37
- * @param wa Instancia de WhatsApp.
38
- */
39
- export function chat(wa) {
40
- async function _last_messages(cid) {
41
- const messages_index = await wa.engine.get(`chat/${cid}/messages`);
42
- if (!messages_index)
43
- return [];
44
- const first_line = messages_index.trim().split('\n')[0];
45
- if (!first_line)
46
- return [];
47
- const [timestamp, mid] = first_line.split(' ');
48
- const msg = await wa.Message.get(cid, mid);
49
- if (!msg)
50
- return [];
51
- return [{ key: { remoteJid: cid, id: msg.id, fromMe: msg.me }, messageTimestamp: Math.floor(Number(timestamp) / 1000) }];
52
- }
53
- const _Chat = class extends Chat {
54
- /**
55
- * @description Obtiene un chat por su ID.
56
- * Retrieves a chat by its ID.
57
- */
58
- static async get(cid) {
59
- const jid = await wa.resolveJID(cid);
60
- if (!jid)
61
- return null;
62
- const stored = await wa.engine.get(`chat/${jid}/index`);
63
- if (stored)
64
- return new _Chat(JSON.parse(stored, BufferJSON.reviver));
65
- const contact = await wa.Contact.get(jid);
66
- if (!contact)
67
- return null;
68
- const raw = { id: jid, name: contact.name };
69
- await wa.engine.set(`chat/${jid}/index`, JSON.stringify(raw, BufferJSON.replacer));
70
- return new _Chat(raw);
71
- }
72
- /**
73
- * @description Obtiene chats paginados.
74
- * Retrieves paginated chats.
75
- */
76
- static async list(offset = 0, limit = 50) {
77
- const chats = [];
78
- for (const key of await wa.engine.list('chat/', offset, limit)) {
79
- if (!key.endsWith('/index'))
80
- continue;
81
- const stored = await wa.engine.get(key);
82
- if (stored)
83
- chats.push(new _Chat(JSON.parse(stored, BufferJSON.reviver)));
84
- }
85
- return chats;
86
- }
87
- /**
88
- * @description Fija o desfija un chat por su ID.
89
- * Pins or unpins a chat by its ID.
90
- */
91
- static async pin(cid, value) {
92
- const chat = await _Chat.get(cid);
93
- return chat ? chat.pin(value) : false;
94
- }
95
- /**
96
- * @description Archiva o desarchiva un chat por su ID.
97
- * Archives or unarchives a chat by its ID.
98
- */
99
- static async archive(cid, value) {
100
- const chat = await _Chat.get(cid);
101
- return chat ? chat.archive(value) : false;
102
- }
103
- /**
104
- * @description Silencia o quita silencio de un chat por su ID.
105
- * Mutes or unmutes a chat by its ID.
106
- */
107
- static async mute(cid, duration) {
108
- const chat = await _Chat.get(cid);
109
- return chat ? chat.mute(duration) : false;
110
- }
111
- /**
112
- * @description Marca un chat como leido por su ID.
113
- * Marks a chat as read by its ID.
114
- */
115
- static async seen(cid) {
116
- const chat = await _Chat.get(cid);
117
- return chat ? chat.seen() : false;
118
- }
119
- /**
120
- * @description Elimina un chat por su ID.
121
- * Removes a chat by its ID.
122
- */
123
- static async remove(cid) {
124
- const chat = await _Chat.get(cid);
125
- return chat ? chat.remove() : false;
126
- }
127
- /**
128
- * @description Actualiza los datos del chat desde WhatsApp.
129
- * Refreshes chat data from WhatsApp.
130
- */
131
- async refresh() {
132
- if (!wa.socket)
133
- return null;
134
- if (this.id.endsWith('@g.us')) {
135
- try {
136
- const meta = await wa.socket.groupMetadata(this.id);
137
- this.raw.name = meta.subject;
138
- this.raw.description = meta.desc ?? null;
139
- this.raw.participant = meta.participants.map((p) => ({ id: p.id, admin: p.admin ?? null }));
140
- this.raw.createdBy = meta.owner ?? null;
141
- this.raw.createdAt = meta.creation ?? null;
142
- }
143
- catch { /* group metadata may fail */ }
144
- }
145
- else {
146
- const contact = await wa.Contact.get(this.id);
147
- if (contact) {
148
- await contact.refresh();
149
- this.raw.name = contact.name;
150
- }
151
- }
152
- await wa.engine.set(`chat/${this.id}/index`, JSON.stringify(this.raw, BufferJSON.replacer));
153
- return this;
154
- }
155
- /**
156
- * @description Elimina el chat con cascade delete.
157
- * Deletes the chat with cascade delete.
158
- */
159
- async remove() {
160
- if (!wa.socket)
161
- return false;
162
- if (this.type === 'group')
163
- await wa.socket.groupLeave(this.id);
164
- else
165
- await wa.socket.chatModify({ delete: true, lastMessages: [] }, this.id);
166
- await wa.engine.set(`chat/${this.id}`, null);
167
- return true;
168
- }
169
- /**
170
- * @description Fija o desfija el chat.
171
- * Pins or unpins the chat.
172
- */
173
- async pin(value) {
174
- if (!wa.socket)
175
- return false;
176
- const last_messages = await _last_messages(this.id);
177
- await wa.socket.chatModify({ pin: value, lastMessages: last_messages }, this.id);
178
- this.raw.pinned = value ? Date.now() : null;
179
- await wa.engine.set(`chat/${this.id}/index`, JSON.stringify(this.raw, BufferJSON.replacer));
180
- return true;
181
- }
182
- /**
183
- * @description Archiva o desarchiva el chat.
184
- * Archives or unarchives the chat.
185
- */
186
- async archive(value) {
187
- if (!wa.socket)
188
- return false;
189
- const last_messages = await _last_messages(this.id);
190
- await wa.socket.chatModify({ archive: value, lastMessages: last_messages }, this.id);
191
- this.raw.archived = value;
192
- await wa.engine.set(`chat/${this.id}/index`, JSON.stringify(this.raw, BufferJSON.replacer));
193
- return true;
194
- }
195
- /**
196
- * @description Silencia o quita silencio del chat.
197
- * Mutes or unmutes the chat.
198
- * @param duration Duración en ms (0 o null para quitar silencio) / Duration in ms (0 or null to unmute).
199
- */
200
- async mute(duration) {
201
- if (!wa.socket)
202
- return false;
203
- const mute_end = duration ? Date.now() + duration : null;
204
- const last_messages = await _last_messages(this.id);
205
- await wa.socket.chatModify({ mute: mute_end, lastMessages: last_messages }, this.id);
206
- this.raw.muteEndTime = mute_end;
207
- await wa.engine.set(`chat/${this.id}/index`, JSON.stringify(this.raw, BufferJSON.replacer));
208
- return true;
209
- }
210
- /**
211
- * @description Marca el chat como leído.
212
- * Marks the chat as read.
213
- */
214
- async seen() {
215
- if (!wa.socket)
216
- return false;
217
- const last_messages = await _last_messages(this.id);
218
- if (!last_messages.length)
219
- return false;
220
- const msg = last_messages[0];
221
- const key = msg.key ?? {};
222
- await wa.socket.readMessages([{ remoteJid: this.id, id: key.id ?? '', participant: key.fromMe ? undefined : key.remoteJid ?? undefined }]);
223
- this.raw.unreadCount = 0;
224
- this.raw.markedAsUnread = false;
225
- await wa.engine.set(`chat/${this.id}/index`, JSON.stringify(this.raw, BufferJSON.replacer));
226
- return true;
227
- }
228
- /**
229
- * @description Obtiene los miembros del chat.
230
- * Gets chat members.
231
- */
232
- async members(offset = 0, limit = 50) {
233
- if (!this.id.endsWith('@g.us') || !wa.socket) {
234
- const contact = await wa.Contact.get(this.id);
235
- return contact ? [contact] : [];
236
- }
237
- const members = [];
238
- for (const p of (await wa.socket.groupMetadata(this.id)).participants.slice(offset, offset + limit)) {
239
- const existing = await wa.Contact.get(p.id);
240
- if (existing) {
241
- members.push(existing);
242
- }
243
- else {
244
- const raw = { id: p.id };
245
- await wa.engine.set(`contact/${p.id}/index`, JSON.stringify(raw, BufferJSON.replacer));
246
- members.push(new wa.Contact(raw));
247
- }
248
- }
249
- return members;
250
- }
251
- /**
252
- * @description Obtiene mensajes del chat (paginados).
253
- * Gets chat messages (paginated).
254
- */
255
- async messages(offset = 0, limit = 50) {
256
- return wa.Message.list(this.id, offset, limit);
257
- }
258
- /**
259
- * @description Obtiene el contacto asociado al chat (solo chats individuales).
260
- * Gets the contact associated with the chat (individual chats only).
261
- */
262
- async contact() {
263
- if (this.type === 'group')
264
- return null;
265
- return wa.Contact.get(this.id);
266
- }
267
- };
268
- return _Chat;
269
- }
270
- //# sourceMappingURL=Chat.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Chat.js","sourceRoot":"","sources":["../../src/Chat.ts"],"names":[],"mappings":"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"}