@arcaelas/whatsapp 1.2.3 → 2.0.0

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 (78) hide show
  1. package/build/cjs/Chat.d.ts +317 -0
  2. package/build/cjs/Chat.js +273 -0
  3. package/build/cjs/Chat.js.map +1 -0
  4. package/build/{Contact.d.ts → cjs/Contact.d.ts} +317 -304
  5. package/build/cjs/Contact.js +144 -0
  6. package/build/cjs/Contact.js.map +1 -0
  7. package/build/cjs/Message.d.ts +882 -0
  8. package/build/cjs/Message.js +483 -0
  9. package/build/cjs/Message.js.map +1 -0
  10. package/build/{WhatsApp.d.ts → cjs/WhatsApp.d.ts} +16 -4
  11. package/build/{WhatsApp.js → cjs/WhatsApp.js} +84 -81
  12. package/build/cjs/WhatsApp.js.map +1 -0
  13. package/build/{index.d.ts → cjs/index.d.ts} +2 -2
  14. package/build/cjs/index.js +17 -0
  15. package/build/cjs/index.js.map +1 -0
  16. package/build/cjs/package.json +1 -0
  17. package/build/cjs/store/driver/FileEngine.d.ts +34 -0
  18. package/build/{store → cjs/store}/driver/FileEngine.js +16 -20
  19. package/build/cjs/store/driver/FileEngine.js.map +1 -0
  20. package/build/{store → cjs/store}/driver/RedisEngine.d.ts +14 -5
  21. package/build/{store → cjs/store}/driver/RedisEngine.js +23 -22
  22. package/build/cjs/store/driver/RedisEngine.js.map +1 -0
  23. package/build/{store → cjs/store}/engine.d.ts +9 -10
  24. package/build/cjs/store/engine.js.map +1 -0
  25. package/build/cjs/store/index.d.ts +8 -0
  26. package/build/{store → cjs/store}/index.js +2 -2
  27. package/build/cjs/store/index.js.map +1 -0
  28. package/build/esm/Chat.d.ts +317 -0
  29. package/build/esm/Chat.js +268 -0
  30. package/build/esm/Chat.js.map +1 -0
  31. package/build/esm/Contact.d.ts +869 -0
  32. package/build/esm/Contact.js +139 -0
  33. package/build/esm/Contact.js.map +1 -0
  34. package/build/esm/Message.d.ts +882 -0
  35. package/build/esm/Message.js +478 -0
  36. package/build/esm/Message.js.map +1 -0
  37. package/build/esm/WhatsApp.d.ts +80 -0
  38. package/build/esm/WhatsApp.js +362 -0
  39. package/build/esm/WhatsApp.js.map +1 -0
  40. package/build/esm/index.d.ts +13 -0
  41. package/build/esm/index.js +10 -0
  42. package/build/esm/index.js.map +1 -0
  43. package/build/esm/package.json +1 -0
  44. package/build/esm/store/driver/FileEngine.d.ts +34 -0
  45. package/build/esm/store/driver/FileEngine.js +82 -0
  46. package/build/esm/store/driver/FileEngine.js.map +1 -0
  47. package/build/esm/store/driver/RedisEngine.d.ts +47 -0
  48. package/build/esm/store/driver/RedisEngine.js +66 -0
  49. package/build/esm/store/driver/RedisEngine.js.map +1 -0
  50. package/build/esm/store/engine.d.ts +53 -0
  51. package/build/esm/store/engine.js +6 -0
  52. package/build/{store → esm/store}/engine.js.map +1 -1
  53. package/build/esm/store/index.d.ts +8 -0
  54. package/build/esm/store/index.js +7 -0
  55. package/build/esm/store/index.js.map +1 -0
  56. package/package.json +70 -58
  57. package/API.md +0 -776
  58. package/CHANGELOG.md +0 -53
  59. package/DOC.md +0 -532
  60. package/build/Chat.d.ts +0 -335
  61. package/build/Chat.js +0 -396
  62. package/build/Chat.js.map +0 -1
  63. package/build/Contact.js +0 -188
  64. package/build/Contact.js.map +0 -1
  65. package/build/Message.d.ts +0 -580
  66. package/build/Message.js +0 -463
  67. package/build/Message.js.map +0 -1
  68. package/build/WhatsApp.js.map +0 -1
  69. package/build/index.js +0 -2
  70. package/build/index.js.map +0 -7
  71. package/build/store/driver/FileEngine.d.ts +0 -23
  72. package/build/store/driver/FileEngine.js.map +0 -1
  73. package/build/store/driver/RedisEngine.js.map +0 -1
  74. package/build/store/index.d.ts +0 -8
  75. package/build/store/index.js.map +0 -1
  76. package/context7.json +0 -4
  77. package/tsconfig.json +0 -27
  78. /package/build/{store → cjs/store}/engine.js +0 -0
@@ -52,6 +52,7 @@ const store_1 = require("./store");
52
52
  /**
53
53
  * @description
54
54
  * Clase principal para gestionar la conexión con WhatsApp.
55
+ * Main class for managing the WhatsApp connection.
55
56
  *
56
57
  * @example
57
58
  * const { event, pair, Contact, Chat, Message } = new WhatsApp({ phone: '5491112345678' });
@@ -63,9 +64,9 @@ class WhatsApp {
63
64
  this._socket = null;
64
65
  /**
65
66
  * @description Conecta a WhatsApp.
67
+ * Connects to WhatsApp.
66
68
  * - Con phone: callback recibe código de 8 dígitos (una vez)
67
69
  * - Sin phone: callback recibe QR como Buffer PNG (periódicamente)
68
- * @param callback Función que recibe el código o QR.
69
70
  */
70
71
  this.pair = async (callback) => {
71
72
  const { version } = await (0, baileys_1.fetchLatestBaileysVersion)();
@@ -85,7 +86,7 @@ class WhatsApp {
85
86
  if (stored) {
86
87
  let value = JSON.parse(stored, baileys_1.BufferJSON.reviver);
87
88
  if (type === 'app-state-sync-key')
88
- value = baileys_1.proto.Message.AppStateSyncKeyData.fromObject(value);
89
+ value = baileys_1.proto.Message.AppStateSyncKeyData.create(value);
89
90
  data[id] = value;
90
91
  }
91
92
  }
@@ -150,9 +151,10 @@ class WhatsApp {
150
151
  imgUrl: c.imgUrl ?? null,
151
152
  status: c.status ?? null,
152
153
  };
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));
154
+ await this.engine.set(`contact/${c.id}/index`, JSON.stringify(raw, baileys_1.BufferJSON.replacer));
155
+ if (raw.lid)
156
+ await this.engine.set(`lid/${raw.lid}`, raw.id);
157
+ this.event.emit(existing ? 'contact:updated' : 'contact:created', new this.Contact(raw));
156
158
  }
157
159
  });
158
160
  socket.ev.on('contacts.update', async (contacts) => {
@@ -162,18 +164,27 @@ class WhatsApp {
162
164
  const stored = await this.engine.get(`contact/${c.id}/index`);
163
165
  if (!stored)
164
166
  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));
167
+ const raw = JSON.parse(stored, baileys_1.BufferJSON.reviver);
168
+ if (c.notify)
169
+ raw.notify = c.notify;
170
+ if (c.name)
171
+ raw.name = c.name;
172
+ if (c.imgUrl)
173
+ raw.imgUrl = c.imgUrl;
174
+ if (c.status)
175
+ raw.status = c.status;
176
+ if (c.lid)
177
+ raw.lid = c.lid;
178
+ await this.engine.set(`contact/${c.id}/index`, JSON.stringify(raw, baileys_1.BufferJSON.replacer));
179
+ if (raw.lid)
180
+ await this.engine.set(`lid/${raw.lid}`, raw.id);
181
+ this.event.emit('contact:updated', new this.Contact(raw));
175
182
  }
176
183
  });
184
+ socket.ev.on('lid-mapping.update', async ({ lid, pn }) => {
185
+ await this.engine.set(`lid/${lid}`, pn);
186
+ await this.engine.set(`lid/${pn}`, lid);
187
+ });
177
188
  // ═══════════════════════════════════════════════════════════════════
178
189
  // CHATS
179
190
  // ═══════════════════════════════════════════════════════════════════
@@ -181,7 +192,7 @@ class WhatsApp {
181
192
  for (const ch of chats) {
182
193
  const existing = await this.engine.get(`chat/${ch.id}/index`);
183
194
  const raw = existing
184
- ? JSON.parse(existing, baileys_1.BufferJSON.reviver).raw
195
+ ? JSON.parse(existing, baileys_1.BufferJSON.reviver)
185
196
  : {
186
197
  id: ch.id,
187
198
  name: ch.name ?? null,
@@ -193,9 +204,8 @@ class WhatsApp {
193
204
  };
194
205
  if (ch.name)
195
206
  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));
207
+ await this.engine.set(`chat/${ch.id}/index`, JSON.stringify(raw, baileys_1.BufferJSON.replacer));
208
+ this.event.emit(existing ? 'chat:updated' : 'chat:created', new this.Chat(raw));
199
209
  }
200
210
  });
201
211
  socket.ev.on('chats.update', async (chats) => {
@@ -203,47 +213,35 @@ class WhatsApp {
203
213
  if (!ch.id)
204
214
  continue;
205
215
  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
- }
216
+ const raw = stored ? JSON.parse(stored, baileys_1.BufferJSON.reviver) : { id: ch.id, name: ch.name ?? null };
211
217
  let has_specific_event = false;
212
- // Pin
218
+ if (ch.name !== undefined)
219
+ raw.name = ch.name ?? raw.name;
213
220
  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);
221
+ raw.pinned = ch.pinned ?? null;
222
+ this.event.emit('chat:pined', ch.id, raw.pinned);
217
223
  has_specific_event = true;
218
224
  }
219
- // Archive
220
225
  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);
226
+ raw.archived = ch.archived ?? false;
227
+ this.event.emit('chat:archived', ch.id, raw.archived);
224
228
  has_specific_event = true;
225
229
  }
226
- // Mute
227
230
  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
+ raw.muteEndTime = ch.muteEndTime ? Number(ch.muteEndTime) : null;
232
+ this.event.emit('chat:muted', ch.id, raw.muteEndTime);
231
233
  has_specific_event = true;
232
234
  }
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
- }
235
+ if (ch.unreadCount !== undefined)
236
+ raw.unreadCount = ch.unreadCount;
237
+ await this.engine.set(`chat/${ch.id}/index`, JSON.stringify(raw, baileys_1.BufferJSON.replacer));
238
+ if (!has_specific_event)
239
+ this.event.emit(stored ? 'chat:updated' : 'chat:created', new this.Chat(raw));
242
240
  }
243
241
  });
244
242
  socket.ev.on('chats.delete', async (ids) => {
245
243
  for (const cid of ids) {
246
- await this.Chat.cascade_delete(cid);
244
+ await this.engine.set(`chat/${cid}`, null);
247
245
  this.event.emit('chat:deleted', cid);
248
246
  }
249
247
  });
@@ -252,29 +250,24 @@ class WhatsApp {
252
250
  // ═══════════════════════════════════════════════════════════════════
253
251
  socket.ev.on('messages.upsert', async ({ messages }) => {
254
252
  for (const msg of messages) {
255
- if (!msg.key.remoteJid || !msg.key.id)
253
+ if (!msg.key?.remoteJid || !msg.key.id)
256
254
  continue;
257
255
  const cid = msg.key.remoteJid;
258
256
  const mid = msg.key.id;
259
257
  const content_type = (0, baileys_1.getContentType)(msg.message ?? {});
260
- // Ignorar reacciones y votos de encuesta (tienen sus propios eventos)
261
258
  if (content_type === 'reactionMessage' || content_type === 'pollUpdateMessage')
262
259
  continue;
263
- // ─────────────────────────────────────────────────────────────
264
- // PROTOCOL MESSAGE (ediciones y eliminaciones)
265
- // ─────────────────────────────────────────────────────────────
260
+ // ─── PROTOCOL MESSAGE (ediciones y eliminaciones) ───
266
261
  if (content_type === 'protocolMessage') {
267
262
  const protocol = msg.message?.protocolMessage;
268
263
  if (!protocol?.key?.id)
269
264
  continue;
270
265
  const target_mid = protocol.key.id;
271
266
  const target_cid = protocol.key.remoteJid ?? cid;
272
- // MESSAGE_EDIT: Merge selectivo - reemplazar solo message
273
267
  if (protocol.type === baileys_1.proto.Message.ProtocolMessage.Type.MESSAGE_EDIT) {
274
268
  const edited_msg = protocol.editedMessage;
275
269
  if (!edited_msg)
276
270
  continue;
277
- // Obtener index y raw
278
271
  const stored_index = await this.engine.get(`chat/${target_cid}/message/${target_mid}/index`);
279
272
  const stored_raw = await this.engine.get(`chat/${target_cid}/message/${target_mid}/raw`);
280
273
  if (!stored_index || !stored_raw)
@@ -283,34 +276,25 @@ class WhatsApp {
283
276
  const raw = JSON.parse(stored_raw, baileys_1.BufferJSON.reviver);
284
277
  raw.message = edited_msg;
285
278
  index.edited = true;
286
- index.caption = (0, Message_1.build_message_index)(raw).caption;
279
+ index.caption = this.Message._build_index(raw).caption;
287
280
  await this.engine.set(`chat/${target_cid}/message/${target_mid}/index`, JSON.stringify(index, baileys_1.BufferJSON.replacer));
288
281
  await this.engine.set(`chat/${target_cid}/message/${target_mid}/raw`, JSON.stringify(raw, baileys_1.BufferJSON.replacer));
289
282
  const instance = new this.Message({ index, raw });
290
- this.Message.notify(target_cid, target_mid);
283
+ this.Message._notify(target_cid, target_mid);
291
284
  this.event.emit('message:updated', instance);
292
285
  continue;
293
286
  }
294
- // REVOKE: Eliminar del engine
295
287
  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);
288
+ await this.Message._remove_from_index(target_cid, target_mid);
289
+ await this.engine.set(`chat/${target_cid}/message/${target_mid}`, null);
302
290
  this.event.emit('message:deleted', target_cid, target_mid);
303
291
  }
304
292
  continue;
305
293
  }
306
- // ─────────────────────────────────────────────────────────────
307
- // MENSAJE NUEVO
308
- // ─────────────────────────────────────────────────────────────
309
- // Construir index desde raw y guardar
310
- const index = (0, Message_1.build_message_index)(msg);
294
+ // ─── MENSAJE NUEVO ───
295
+ const index = this.Message._build_index(msg);
311
296
  await this.engine.set(`chat/${cid}/message/${mid}/index`, JSON.stringify(index, baileys_1.BufferJSON.replacer));
312
297
  await this.engine.set(`chat/${cid}/message/${mid}/raw`, JSON.stringify(msg, baileys_1.BufferJSON.replacer));
313
- // Extraer content inline según tipo
314
298
  let content = Buffer.alloc(0);
315
299
  if (index.type === 'text') {
316
300
  const raw_content = msg.message?.[content_type];
@@ -330,16 +314,15 @@ class WhatsApp {
330
314
  if (Buffer.isBuffer(buffer))
331
315
  content = buffer;
332
316
  }
333
- catch { }
317
+ catch { /* media download may fail */ }
334
318
  }
335
- if (content.length) {
319
+ if (content.length)
336
320
  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);
321
+ await this.Message._add_to_index(cid, mid, index.created_at);
340
322
  const instance = new this.Message({ index, raw: msg });
341
- content.length && (instance.content = async () => content);
342
- this.Message.notify(cid, mid);
323
+ if (content.length)
324
+ instance.content = async () => content;
325
+ this.Message._notify(cid, mid);
343
326
  this.event.emit('message:created', instance);
344
327
  }
345
328
  });
@@ -347,25 +330,23 @@ class WhatsApp {
347
330
  for (const { key, update } of updates) {
348
331
  if (!key.remoteJid || !key.id)
349
332
  continue;
350
- const stored_index = await this.engine.get(`chat/${key.remoteJid}/message/${key.id}/index`);
351
333
  const stored_raw = await this.engine.get(`chat/${key.remoteJid}/message/${key.id}/raw`);
334
+ const stored_index = await this.engine.get(`chat/${key.remoteJid}/message/${key.id}/index`);
352
335
  if (!stored_index)
353
336
  continue;
354
337
  const index = JSON.parse(stored_index, baileys_1.BufferJSON.reviver);
355
338
  const raw = stored_raw ? JSON.parse(stored_raw, baileys_1.BufferJSON.reviver) : { key };
356
- // Edición via messages.update
357
339
  if (update.message?.editedMessage?.message) {
358
340
  raw.message = update.message.editedMessage.message;
359
341
  index.edited = true;
360
- index.caption = (0, Message_1.build_message_index)(raw).caption;
342
+ index.caption = this.Message._build_index(raw).caption;
361
343
  await this.engine.set(`chat/${key.remoteJid}/message/${key.id}/index`, JSON.stringify(index, baileys_1.BufferJSON.replacer));
362
344
  await this.engine.set(`chat/${key.remoteJid}/message/${key.id}/raw`, JSON.stringify(raw, baileys_1.BufferJSON.replacer));
363
345
  const instance = new this.Message({ index, raw });
364
- this.Message.notify(key.remoteJid, key.id);
346
+ this.Message._notify(key.remoteJid, key.id);
365
347
  this.event.emit('message:updated', instance);
366
348
  continue;
367
349
  }
368
- // Status update
369
350
  if (update.status !== undefined) {
370
351
  raw.status = update.status;
371
352
  index.status = raw.status;
@@ -390,10 +371,32 @@ class WhatsApp {
390
371
  this.Chat = (0, Chat_1.chat)(this);
391
372
  this.Message = (0, Message_1.message)(this);
392
373
  }
393
- /** @description Retorna el socket de Baileys (null si no está conectado). */
374
+ /**
375
+ * @description Retorna el socket de Baileys (null si no está conectado).
376
+ * Returns the Baileys socket (null if disconnected).
377
+ */
394
378
  get socket() {
395
379
  return this._socket;
396
380
  }
381
+ /**
382
+ * @description Normaliza cualquier identificador (JID, LID, phone) a JID.
383
+ * Normalizes any identifier (JID, LID, phone) to JID format.
384
+ * @param uid Identificador: JID, LID (@lid), o numero de telefono.
385
+ */
386
+ async resolveJID(uid) {
387
+ if (uid.endsWith('@g.us'))
388
+ return uid;
389
+ if (uid.endsWith('@s.whatsapp.net'))
390
+ return uid;
391
+ if (uid.endsWith('@lid')) {
392
+ const resolved = await this.engine.get(`lid/${uid}`);
393
+ if (!resolved)
394
+ return null;
395
+ return resolved.includes('@') ? resolved : `${resolved}@s.whatsapp.net`;
396
+ }
397
+ const cleaned = uid.replace(/\D/g, '');
398
+ return cleaned ? `${cleaned}@s.whatsapp.net` : null;
399
+ }
397
400
  }
398
401
  exports.WhatsApp = WhatsApp;
399
402
  //# sourceMappingURL=WhatsApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WhatsApp.js","sourceRoot":"","sources":["../../src/WhatsApp.ts"],"names":[],"mappings":"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"}
@@ -5,8 +5,8 @@
5
5
  export { MESSAGE_STATUS } from './Message';
6
6
  export type { LocationOptions, MessageType, PollOptions } from './Message';
7
7
  export type { Engine } from './store';
8
- export type { IChat, IChatRaw, IGroupParticipant } from './Chat';
9
- export type { IContact, IContactRaw } from './Contact';
8
+ export type { IChatRaw, IGroupParticipant } from './Chat';
9
+ export type { IContactRaw } from './Contact';
10
10
  export type { IMessage, IMessageIndex } from './Message';
11
11
  export type { IWhatsApp } from './WhatsApp';
12
12
  export { FileEngine, RedisEngine } from './store';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ /**
3
+ * @file index.ts
4
+ * @description Punto de entrada público de la librería @arcaelas/whatsapp
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.WhatsApp = exports.RedisEngine = exports.FileEngine = exports.MESSAGE_STATUS = void 0;
8
+ // Enums
9
+ var Message_1 = require("./Message");
10
+ Object.defineProperty(exports, "MESSAGE_STATUS", { enumerable: true, get: function () { return Message_1.MESSAGE_STATUS; } });
11
+ // Classes
12
+ var store_1 = require("./store");
13
+ Object.defineProperty(exports, "FileEngine", { enumerable: true, get: function () { return store_1.FileEngine; } });
14
+ Object.defineProperty(exports, "RedisEngine", { enumerable: true, get: function () { return store_1.RedisEngine; } });
15
+ var WhatsApp_1 = require("./WhatsApp");
16
+ Object.defineProperty(exports, "WhatsApp", { enumerable: true, get: function () { return WhatsApp_1.WhatsApp; } });
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,QAAQ;AACR,qCAA2C;AAAlC,yGAAA,cAAc,OAAA;AAYvB,UAAU;AACV,iCAAkD;AAAzC,mGAAA,UAAU,OAAA;AAAE,oGAAA,WAAW,OAAA;AAChC,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA"}
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @file store/driver/FileEngine.ts
3
+ * @description Engine de persistencia en sistema de archivos local
4
+ */
5
+ import type { Engine } from '../../store/engine';
6
+ /**
7
+ * @description
8
+ * Engine de persistencia en sistema de archivos.
9
+ * Almacena texto plano (JSON stringified).
10
+ *
11
+ * Filesystem persistence engine.
12
+ * Stores plain text (JSON stringified).
13
+ *
14
+ * @example
15
+ * const engine = new FileEngine('.baileys/5491112345678');
16
+ * await engine.set('contact/123', '{"name":"John"}');
17
+ * const data = await engine.get('contact/123');
18
+ */
19
+ export declare class FileEngine implements Engine {
20
+ private readonly _base;
21
+ constructor(_base?: string);
22
+ /** @description Obtiene un valor por su key. / Retrieves a value by its key. */
23
+ get(key: string): Promise<string | null>;
24
+ /**
25
+ * @description Guarda o elimina un valor. Si value es null, elimina la key como archivo y como directorio recursivamente.
26
+ * Saves or deletes a value. If value is null, removes the key as file and as directory recursively.
27
+ */
28
+ set(key: string, value: string | null): Promise<void>;
29
+ /**
30
+ * @description Lista keys bajo un prefijo, ordenados por más reciente.
31
+ * Lists keys under a prefix, ordered by most recent.
32
+ */
33
+ list(prefix: string, offset?: number, limit?: number): Promise<string[]>;
34
+ }
@@ -12,6 +12,9 @@ const node_path_1 = require("node:path");
12
12
  * Engine de persistencia en sistema de archivos.
13
13
  * Almacena texto plano (JSON stringified).
14
14
  *
15
+ * Filesystem persistence engine.
16
+ * Stores plain text (JSON stringified).
17
+ *
15
18
  * @example
16
19
  * const engine = new FileEngine('.baileys/5491112345678');
17
20
  * await engine.set('contact/123', '{"name":"John"}');
@@ -21,6 +24,7 @@ class FileEngine {
21
24
  constructor(_base = '.baileys/default') {
22
25
  this._base = _base;
23
26
  }
27
+ /** @description Obtiene un valor por su key. / Retrieves a value by its key. */
24
28
  async get(key) {
25
29
  try {
26
30
  return await (0, promises_1.readFile)((0, node_path_1.join)(this._base, key.replace(/@/g, '_at_')), 'utf-8');
@@ -29,6 +33,10 @@ class FileEngine {
29
33
  return null;
30
34
  }
31
35
  }
36
+ /**
37
+ * @description Guarda o elimina un valor. Si value es null, elimina la key como archivo y como directorio recursivamente.
38
+ * Saves or deletes a value. If value is null, removes the key as file and as directory recursively.
39
+ */
32
40
  async set(key, value) {
33
41
  const path = (0, node_path_1.join)(this._base, key.replace(/@/g, '_at_'));
34
42
  if (value) {
@@ -37,33 +45,32 @@ class FileEngine {
37
45
  }
38
46
  else {
39
47
  try {
40
- await (0, promises_1.rm)(path, { force: true });
48
+ await (0, promises_1.rm)(path, { recursive: true, force: true });
41
49
  }
42
- catch { }
50
+ catch { /* already deleted */ }
43
51
  }
44
52
  }
45
- async list(prefix, offset = 0, limit = 50, suffix) {
53
+ /**
54
+ * @description Lista keys bajo un prefijo, ordenados por más reciente.
55
+ * Lists keys under a prefix, ordered by most recent.
56
+ */
57
+ async list(prefix, offset = 0, limit = 50) {
46
58
  const base = (0, node_path_1.join)(this._base, prefix.replace(/@/g, '_at_'));
47
- const suffix_escaped = suffix?.replace(/@/g, '_at_');
48
59
  try {
49
60
  const items = [];
50
61
  const entries = await (0, promises_1.readdir)(base, { withFileTypes: true, recursive: true });
51
62
  for (const file of entries) {
52
63
  if (!file.isFile())
53
64
  continue;
54
- // Compatibilidad Node < 20: parentPath puede no existir
55
65
  const parent = file.parentPath || file.path || base;
56
66
  const path = (0, node_path_1.join)(parent, file.name);
57
- // Filtrar por sufijo ANTES de stat() para mejor performance
58
- if (suffix_escaped && !path.endsWith(suffix_escaped))
59
- continue;
60
67
  try {
61
68
  items.push({
62
69
  key: path.slice(this._base.length + 1).replace(/_at_/g, '@'),
63
70
  mtime: (await (0, promises_1.stat)(path)).mtimeMs,
64
71
  });
65
72
  }
66
- catch { }
73
+ catch { /* stat may fail for transient files */ }
67
74
  }
68
75
  return items
69
76
  .sort((a, b) => b.mtime - a.mtime)
@@ -74,17 +81,6 @@ class FileEngine {
74
81
  return [];
75
82
  }
76
83
  }
77
- async delete_prefix(prefix) {
78
- const base = (0, node_path_1.join)(this._base, prefix.replace(/@/g, '_at_'));
79
- try {
80
- await (0, promises_1.rm)(base, { recursive: true, force: true });
81
- // Contar archivos eliminados no es posible con rm -rf, estimamos
82
- return 1;
83
- }
84
- catch {
85
- return 0;
86
- }
87
- }
88
84
  }
89
85
  exports.FileEngine = FileEngine;
90
86
  //# sourceMappingURL=FileEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileEngine.js","sourceRoot":"","sources":["../../../../src/store/driver/FileEngine.ts"],"names":[],"mappings":"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"}
@@ -2,14 +2,15 @@
2
2
  * @file store/driver/RedisEngine.ts
3
3
  * @description Engine de persistencia con Redis
4
4
  */
5
- import type { Engine } from '../engine';
5
+ import type { Engine } from '../../store/engine';
6
6
  /**
7
7
  * @description Interface mínima del cliente Redis (compatible con ioredis y redis).
8
+ * Minimal Redis client interface (compatible with ioredis and redis).
8
9
  */
9
10
  export interface RedisClient {
10
11
  get(key: string): Promise<string | null>;
11
12
  set(key: string, value: string): Promise<unknown>;
12
- del(key: string): Promise<unknown>;
13
+ del(key: string | string[]): Promise<unknown>;
13
14
  scan(cursor: number | string, ...args: unknown[]): Promise<[string, string[]]>;
14
15
  }
15
16
  /**
@@ -17,6 +18,9 @@ export interface RedisClient {
17
18
  * Engine de persistencia con Redis.
18
19
  * Recibe una conexión existente de ioredis o redis.
19
20
  *
21
+ * Redis persistence engine.
22
+ * Receives an existing ioredis or redis connection.
23
+ *
20
24
  * @example
21
25
  * import Redis from 'ioredis';
22
26
  * const client = new Redis();
@@ -27,12 +31,17 @@ export declare class RedisEngine implements Engine {
27
31
  private readonly _client;
28
32
  private readonly _prefix;
29
33
  constructor(_client: RedisClient, _prefix?: string);
34
+ /** @description Obtiene un valor por su key. / Retrieves a value by its key. */
30
35
  get(key: string): Promise<string | null>;
36
+ /**
37
+ * @description Guarda o elimina un valor. Si value es null, elimina la key y todas las sub-keys con ese prefijo.
38
+ * Saves or deletes a value. If value is null, deletes the key and all sub-keys matching the prefix.
39
+ */
31
40
  set(key: string, value: string | null): Promise<void>;
32
41
  /**
33
42
  * @description Lista keys bajo un prefijo.
34
- * @note Redis SCAN no garantiza orden. Los resultados no están ordenados por timestamp.
43
+ * Lists keys under a prefix.
44
+ * @note Redis SCAN no garantiza orden. / Redis SCAN does not guarantee order.
35
45
  */
36
- list(prefix: string, offset?: number, limit?: number, suffix?: string): Promise<string[]>;
37
- delete_prefix(prefix: string): Promise<number>;
46
+ list(prefix: string, offset?: number, limit?: number): Promise<string[]>;
38
47
  }