@arcaelas/whatsapp 4.5.0 → 5.1.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 (95) hide show
  1. package/build/cjs/index.d.ts +6 -4
  2. package/build/cjs/index.js +22 -2
  3. package/build/cjs/index.js.map +1 -1
  4. package/build/cjs/lib/bot/decorator.d.ts +2 -0
  5. package/build/cjs/lib/bot/decorator.js +6 -0
  6. package/build/cjs/lib/bot/decorator.js.map +1 -1
  7. package/build/cjs/lib/chat/index.d.ts +340 -204
  8. package/build/cjs/lib/chat/index.js +225 -213
  9. package/build/cjs/lib/chat/index.js.map +1 -1
  10. package/build/cjs/lib/contact/index.d.ts +162 -179
  11. package/build/cjs/lib/contact/index.js +96 -190
  12. package/build/cjs/lib/contact/index.js.map +1 -1
  13. package/build/cjs/lib/internal.d.ts +40 -0
  14. package/build/cjs/lib/internal.js +39 -0
  15. package/build/cjs/lib/internal.js.map +1 -0
  16. package/build/cjs/lib/message/index.d.ts +462 -289
  17. package/build/cjs/lib/message/index.js +825 -741
  18. package/build/cjs/lib/message/index.js.map +1 -1
  19. package/build/cjs/lib/status/index.d.ts +60 -70
  20. package/build/cjs/lib/status/index.js +106 -111
  21. package/build/cjs/lib/status/index.js.map +1 -1
  22. package/build/cjs/lib/store/engine/index.d.ts +21 -7
  23. package/build/cjs/lib/store/engine/index.js +6 -3
  24. package/build/cjs/lib/store/engine/index.js.map +1 -1
  25. package/build/cjs/lib/store/engine/lib/file_system/index.d.ts +38 -8
  26. package/build/cjs/lib/store/engine/lib/file_system/index.js +92 -67
  27. package/build/cjs/lib/store/engine/lib/file_system/index.js.map +1 -1
  28. package/build/cjs/lib/store/engine/lib/index.d.ts +112 -0
  29. package/build/cjs/lib/store/engine/lib/index.js +213 -0
  30. package/build/cjs/lib/store/engine/lib/index.js.map +1 -0
  31. package/build/cjs/lib/store/engine/lib/redis/index.d.ts +28 -13
  32. package/build/cjs/lib/store/engine/lib/redis/index.js +56 -42
  33. package/build/cjs/lib/store/engine/lib/redis/index.js.map +1 -1
  34. package/build/cjs/lib/store/engine/lib/s3/index.d.ts +44 -1
  35. package/build/cjs/lib/store/engine/lib/s3/index.js +112 -64
  36. package/build/cjs/lib/store/engine/lib/s3/index.js.map +1 -1
  37. package/build/cjs/lib/store/engine/lib/sqlite/index.d.ts +98 -0
  38. package/build/cjs/lib/store/engine/lib/sqlite/index.js +114 -0
  39. package/build/cjs/lib/store/engine/lib/sqlite/index.js.map +1 -0
  40. package/build/cjs/lib/store/index.d.ts +7 -3
  41. package/build/cjs/lib/store/index.js +14 -4
  42. package/build/cjs/lib/store/index.js.map +1 -1
  43. package/build/cjs/lib/whatsapp/index.d.ts +106 -68
  44. package/build/cjs/lib/whatsapp/index.js +380 -170
  45. package/build/cjs/lib/whatsapp/index.js.map +1 -1
  46. package/build/cjs/test.js +5 -4
  47. package/build/cjs/test.js.map +1 -1
  48. package/build/esm/index.d.ts +6 -4
  49. package/build/esm/index.js +5 -2
  50. package/build/esm/index.js.map +1 -1
  51. package/build/esm/lib/bot/decorator.d.ts +2 -0
  52. package/build/esm/lib/bot/decorator.js +6 -0
  53. package/build/esm/lib/bot/decorator.js.map +1 -1
  54. package/build/esm/lib/chat/index.d.ts +340 -204
  55. package/build/esm/lib/chat/index.js +225 -213
  56. package/build/esm/lib/chat/index.js.map +1 -1
  57. package/build/esm/lib/contact/index.d.ts +162 -179
  58. package/build/esm/lib/contact/index.js +96 -189
  59. package/build/esm/lib/contact/index.js.map +1 -1
  60. package/build/esm/lib/internal.d.ts +40 -0
  61. package/build/esm/lib/internal.js +35 -0
  62. package/build/esm/lib/internal.js.map +1 -0
  63. package/build/esm/lib/message/index.d.ts +462 -289
  64. package/build/esm/lib/message/index.js +820 -736
  65. package/build/esm/lib/message/index.js.map +1 -1
  66. package/build/esm/lib/status/index.d.ts +60 -70
  67. package/build/esm/lib/status/index.js +105 -110
  68. package/build/esm/lib/status/index.js.map +1 -1
  69. package/build/esm/lib/store/engine/index.d.ts +21 -7
  70. package/build/esm/lib/store/engine/index.js +4 -2
  71. package/build/esm/lib/store/engine/index.js.map +1 -1
  72. package/build/esm/lib/store/engine/lib/file_system/index.d.ts +38 -8
  73. package/build/esm/lib/store/engine/lib/file_system/index.js +92 -67
  74. package/build/esm/lib/store/engine/lib/file_system/index.js.map +1 -1
  75. package/build/esm/lib/store/engine/lib/index.d.ts +112 -0
  76. package/build/esm/lib/store/engine/lib/index.js +206 -0
  77. package/build/esm/lib/store/engine/lib/index.js.map +1 -0
  78. package/build/esm/lib/store/engine/lib/redis/index.d.ts +28 -13
  79. package/build/esm/lib/store/engine/lib/redis/index.js +54 -40
  80. package/build/esm/lib/store/engine/lib/redis/index.js.map +1 -1
  81. package/build/esm/lib/store/engine/lib/s3/index.d.ts +44 -1
  82. package/build/esm/lib/store/engine/lib/s3/index.js +111 -63
  83. package/build/esm/lib/store/engine/lib/s3/index.js.map +1 -1
  84. package/build/esm/lib/store/engine/lib/sqlite/index.d.ts +98 -0
  85. package/build/esm/lib/store/engine/lib/sqlite/index.js +110 -0
  86. package/build/esm/lib/store/engine/lib/sqlite/index.js.map +1 -0
  87. package/build/esm/lib/store/index.d.ts +7 -3
  88. package/build/esm/lib/store/index.js +13 -4
  89. package/build/esm/lib/store/index.js.map +1 -1
  90. package/build/esm/lib/whatsapp/index.d.ts +106 -68
  91. package/build/esm/lib/whatsapp/index.js +382 -172
  92. package/build/esm/lib/whatsapp/index.js.map +1 -1
  93. package/build/esm/test.js +5 -4
  94. package/build/esm/test.js.map +1 -1
  95. package/package.json +2 -2
@@ -7,63 +7,52 @@
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
8
  exports.Chat = void 0;
9
9
  exports.chat = chat;
10
+ const internal_1 = require("../../lib/internal");
11
+ const message_1 = require("../../lib/message");
10
12
  const store_1 = require("../../lib/store");
11
13
  /**
12
- * Duración usada cuando `chat.mute(true)` silencia "siempre".
13
- * Duration used when `chat.mute(true)` means "mute forever".
14
- */
15
- const MUTE_FOREVER_MS = 365 * 100 * 24 * 3_600 * 1_000;
16
- /**
17
- * Clase base del chat (forma pública, solo lectura).
18
- * Base Chat class (public shape, read-only).
14
+ * Clase base del chat: recibe el raw y deriva todo con getters.
15
+ * Base Chat class: receives the raw and derives everything via getters.
19
16
  */
20
17
  class Chat {
21
- constructor(raw) {
22
- this._raw = raw;
18
+ /**
19
+ * @internal Documento crudo del chat. `id` es el identificador del engine (JID, LID o
20
+ * `@g.us`); `pinned` y `mute_end_time` son epoch ms.
21
+ * Raw chat document. `id` is the engine identifier (JID, LID or `@g.us`); `pinned` and
22
+ * `mute_end_time` are epoch ms.
23
+ */
24
+ constructor(_raw) {
25
+ this._raw = _raw;
23
26
  }
24
- /** JID del chat. / Chat JID. */
27
+ /** Teléfono del contacto, o el identificador crudo en grupos y LIDs. / Contact phone, or the raw identifier for groups and LIDs. */
25
28
  get id() {
26
- return this._raw.id;
29
+ return this._raw.id.endsWith('@s.whatsapp.net') ? this._raw.id.split('@')[0].split(':')[0] : this._raw.id;
27
30
  }
28
- /** CID (alias). / CID (alias). */
29
- get cid() {
30
- return this._raw.id;
31
+ /** Nombre del grupo o del contacto. / Group or contact name. */
32
+ get name() {
33
+ return this._raw.name ?? this.id;
31
34
  }
32
- /** Tipo: contact o group. / Type: contact or group. */
35
+ /** Tipo de conversación. / Conversation type. */
33
36
  get type() {
34
37
  return this._raw.id.endsWith('@g.us') ? 'group' : 'contact';
35
38
  }
36
- /** Nombre del chat. / Chat name. */
37
- get name() {
38
- return this._raw.name ?? this._raw.display_name ?? this._raw.id.split('@')[0];
39
- }
40
- /** Descripción del grupo. / Group description. */
41
- get content() {
42
- return this._raw.description ?? '';
39
+ /** true si el chat está archivado. / true when the chat is archived. */
40
+ get archived() {
41
+ return this._raw.archived ?? false;
43
42
  }
44
- /** Si está fijado. / Whether it's pinned. */
43
+ /** true si el chat está fijado. / true when the chat is pinned. */
45
44
  get pinned() {
46
45
  return this._raw.pinned != null;
47
46
  }
48
- /** Si está archivado. / Whether it's archived. */
49
- get archived() {
50
- return this._raw.archived ?? false;
51
- }
52
- /** true si el chat está silenciado y el silencio aún no expira. / true if chat is muted and the mute has not expired. */
47
+ /** Fecha ISO UTC hasta la que el chat está silenciado, o null. / ISO UTC date until the chat stays muted, or null. */
53
48
  get muted() {
54
49
  const end = this._raw.mute_end_time;
55
- return end != null && end > Date.now();
56
- }
57
- /** Si está leído. / Whether it's read. */
58
- get read() {
59
- return !this._raw.unread_count && !this._raw.marked_as_unread;
60
- }
61
- /** Si es solo lectura. / Whether it's read-only. */
62
- get readonly() {
63
- return this._raw.read_only ?? false;
50
+ return end != null && end > Date.now() ? new Date(end).toISOString() : null;
64
51
  }
65
52
  }
66
53
  exports.Chat = Chat;
54
+ /** Máximo de chats fijados que acepta WhatsApp; el cuarto se descarta en silencio. / Max pinned chats WhatsApp accepts; the fourth is silently dropped. */
55
+ const MAX_PINNED = 3;
67
56
  /**
68
57
  * Factoría de Chat ligada al contexto WhatsApp.
69
58
  * Context-bound Chat factory.
@@ -72,242 +61,265 @@ exports.Chat = Chat;
72
61
  */
73
62
  function chat(wa) {
74
63
  /**
75
- * Obtiene la key del último mensaje para operaciones de chatModify que la requieren.
76
- * Fetches the last message key required by chatModify operations.
64
+ * Último mensaje del chat en el formato que exige `chatModify`.
65
+ * The chat's last message in the shape `chatModify` requires.
77
66
  */
78
67
  async function last_messages(cid) {
79
68
  const [raw] = await wa.engine.list(`/chat/${cid}/message`, 0, 1);
80
69
  const parsed = (0, store_1.deserialize)(raw ?? null);
81
70
  return parsed
82
- ? [
83
- {
84
- key: { remoteJid: cid, id: parsed.id, fromMe: parsed.me },
85
- messageTimestamp: Math.floor(parsed.created_at / 1000),
86
- },
87
- ]
71
+ ? [{ key: { remoteJid: cid, id: parsed.id, fromMe: parsed.me }, messageTimestamp: Math.floor(parsed.created_at / 1000) }]
88
72
  : [];
89
73
  }
90
- return class _Chat extends Chat {
91
- constructor() {
92
- super(...arguments);
93
- /** @internal Cache TTL (15s) de la promesa de participants del grupo. Evita round-trips a `groupMetadata` y deduplica llamadas concurrentes. */
94
- this._members_cache = null;
95
- }
96
- /**
97
- * Obtiene un chat por CID. Si no está persistido, lo crea a partir del contacto.
98
- * Retrieves a chat by CID. If not persisted, creates it from the contact.
99
- */
100
- static async get(cid) {
101
- let result = null;
102
- const jid = await wa._resolve_jid(cid);
103
- if (jid) {
104
- const cached = (0, store_1.deserialize)(await wa.engine.get(`/chat/${jid}`));
105
- if (cached) {
106
- result = new _Chat(cached);
107
- }
108
- else {
109
- const c = await wa.Contact.get(jid);
110
- if (c) {
111
- const raw = { id: jid, name: c.name };
112
- await wa.engine.set(`/chat/${jid}`, (0, store_1.serialize)(raw));
113
- result = new _Chat(raw);
114
- }
115
- }
74
+ /**
75
+ * Cuenta los chats fijados distintos del indicado, cortando al llegar al máximo.
76
+ * Counts pinned chats other than the given one, stopping once the max is reached.
77
+ */
78
+ async function count_pinned(exclude) {
79
+ let total = 0;
80
+ for (let offset = 0; total < MAX_PINNED; offset += 200) {
81
+ const page = await wa.engine.list('/chat', offset, 200);
82
+ if (page.length === 0) {
83
+ break;
116
84
  }
117
- return result;
118
- }
119
- /** Pagina los chats persistidos por mtime DESC. / Paginates persisted chats by mtime DESC. */
120
- static async list(offset = 0, limit = 50) {
121
- const chats = [];
122
- for (const raw of await wa.engine.list('/chat', offset, limit)) {
85
+ for (const raw of page) {
123
86
  const parsed = (0, store_1.deserialize)(raw);
124
- if (parsed) {
125
- chats.push(new _Chat(parsed));
87
+ if (parsed && parsed.id !== exclude && parsed.pinned != null) {
88
+ total++;
126
89
  }
127
90
  }
128
- return chats;
129
- }
130
- /** Fija/desfija un chat por CID. / Pins or unpins a chat by CID. */
131
- static async pin(cid, value) {
132
- const c = await _Chat.get(cid);
133
- return c ? c.pin(value) : false;
134
91
  }
135
- /** Archiva/desarchiva un chat por CID. / Archives or unarchives a chat by CID. */
136
- static async archive(cid, value) {
137
- const c = await _Chat.get(cid);
138
- return c ? c.archive(value) : false;
139
- }
140
- /** Silencia/des-silencia un chat por CID. / Mutes or unmutes a chat by CID. */
141
- static async mute(cid, value) {
142
- const c = await _Chat.get(cid);
143
- return c ? c.mute(value) : false;
92
+ return total;
93
+ }
94
+ /**
95
+ * Participantes del grupo memoizados 15s, para no repetir `groupMetadata` en cada página.
96
+ * Group participants memoized for 15s, avoiding a `groupMetadata` round-trip per page.
97
+ */
98
+ const members_cache = new Map();
99
+ function group_members(jid) {
100
+ if (!members_cache.has(jid)) {
101
+ const socket = (0, internal_1.internals)(wa).socket;
102
+ members_cache.set(jid, socket ? socket.groupMetadata(jid).then((meta) => meta.participants).catch(() => []) : Promise.resolve([]));
103
+ setTimeout(() => members_cache.delete(jid), 15_000);
144
104
  }
145
- /** Vacía mensajes del chat (local). / Clears the chat's messages (local only). */
146
- static async clear(cid) {
147
- const c = await _Chat.get(cid);
148
- return c ? c.clear() : false;
105
+ return members_cache.get(jid);
106
+ }
107
+ /**
108
+ * Contacto desde el engine, o ficha mínima local cuando no está persistido (sin red).
109
+ * Contact from the engine, or a minimal local card when not persisted (no network).
110
+ */
111
+ async function load_contact(id) {
112
+ const cached = (0, store_1.deserialize)(await wa.engine.get(`/contact/${id}`));
113
+ return new wa.Contact(cached ?? { id });
114
+ }
115
+ return class _Chat extends Chat {
116
+ /**
117
+ * Participantes del chat: los integrantes en grupos, el contacto y yo en 1:1.
118
+ * Chat participants: members for groups, the contact and myself for 1:1.
119
+ *
120
+ * @param offset - Desplazamiento / Offset
121
+ * @param limit - Tamaño de página / Page size
122
+ * @returns Página de contactos / Contact page
123
+ */
124
+ async members(offset = 0, limit = 50) {
125
+ const ids = this.type === 'group'
126
+ ? (await group_members(this._raw.id)).map((participant) => participant.id)
127
+ : [this._raw.id, (0, internal_1.internals)(wa).socket?.user?.id].filter((id) => Boolean(id));
128
+ return Promise.all(ids.slice(offset, offset + limit).map(load_contact));
149
129
  }
150
- /** Elimina el chat y sus mensajes. / Deletes the chat and its messages. */
151
- static async delete(cid) {
152
- const c = await _Chat.get(cid);
153
- return c ? c.delete() : false;
130
+ /**
131
+ * Mensajes del chat paginados desde el más reciente.
132
+ * Chat messages paginated from the most recent one.
133
+ *
134
+ * @param offset - Desplazamiento / Offset
135
+ * @param limit - Tamaño de página / Page size
136
+ * @returns Página de mensajes / Message page
137
+ */
138
+ async messages(offset = 0, limit = 50) {
139
+ return message_1.Message.list(wa, this._raw.id, offset, limit);
154
140
  }
155
- /** Re-hidrata metadata del chat desde el socket. / Re-hydrates chat metadata from the socket. */
156
- async refresh() {
141
+ /**
142
+ * Activa o desactiva el indicador «escribiendo…».
143
+ * Toggles the "typing…" indicator.
144
+ *
145
+ * @param value - true activa, false vuelve a pausa / true enables, false returns to paused
146
+ * @returns true si el socket estaba disponible / true when the socket was available
147
+ */
148
+ async typing(value) {
157
149
  let ok = false;
158
- if (wa._socket) {
159
- if (this.type === 'group') {
160
- try {
161
- const meta = await wa._socket.groupMetadata(this.id);
162
- this._raw.name = meta.subject;
163
- this._raw.description = meta.desc ?? null;
164
- this._raw.participants = meta.participants.map((p) => ({
165
- id: p.id,
166
- admin: p.admin ?? null,
167
- }));
168
- this._raw.created_by = meta.owner ?? null;
169
- this._raw.created_at = meta.creation ?? null;
170
- }
171
- catch {
172
- /* group metadata may fail */
173
- }
174
- }
175
- else {
176
- const c = await wa.Contact.get(this.id);
177
- if (c) {
178
- await c.refresh();
179
- this._raw.name = c.name;
180
- }
181
- }
182
- await wa.engine.set(`/chat/${this.id}`, (0, store_1.serialize)(this._raw));
150
+ const socket = (0, internal_1.internals)(wa).socket;
151
+ if (socket) {
152
+ await socket.sendPresenceUpdate(value ? 'composing' : 'paused', this._raw.id);
183
153
  ok = true;
184
154
  }
185
- return ok ? this : null;
155
+ return ok;
186
156
  }
187
- /** Fija/desfija el chat. / Pins or unpins the chat. */
188
- async pin(value) {
157
+ /**
158
+ * Activa o desactiva el indicador «grabando audio…».
159
+ * Toggles the "recording audio…" indicator.
160
+ *
161
+ * @param value - true activa, false vuelve a pausa / true enables, false returns to paused
162
+ * @returns true si el socket estaba disponible / true when the socket was available
163
+ */
164
+ async recording(value) {
189
165
  let ok = false;
190
- if (wa._socket) {
191
- await wa._socket.chatModify({ pin: value, lastMessages: await last_messages(this.id) }, this.id);
192
- this._raw.pinned = value ? Date.now() : null;
193
- await wa.engine.set(`/chat/${this.id}`, (0, store_1.serialize)(this._raw));
166
+ const socket = (0, internal_1.internals)(wa).socket;
167
+ if (socket) {
168
+ await socket.sendPresenceUpdate(value ? 'recording' : 'paused', this._raw.id);
194
169
  ok = true;
195
170
  }
196
171
  return ok;
197
172
  }
198
- /** Archiva/desarchiva el chat. / Archives or unarchives the chat. */
173
+ /**
174
+ * Archiva o desarchiva el chat en la cuenta de WhatsApp.
175
+ * Archives or unarchives the chat on the WhatsApp account.
176
+ *
177
+ * @param value - true archiva, false desarchiva / true archives, false unarchives
178
+ * @returns true si la acción se envió / true when the action was sent
179
+ */
199
180
  async archive(value) {
200
181
  let ok = false;
201
- if (wa._socket) {
202
- await wa._socket.chatModify({ archive: value, lastMessages: await last_messages(this.id) }, this.id);
182
+ const socket = (0, internal_1.internals)(wa).socket;
183
+ if (socket) {
184
+ await socket.chatModify({ archive: value, lastMessages: await last_messages(this._raw.id) }, this._raw.id);
203
185
  this._raw.archived = value;
204
- await wa.engine.set(`/chat/${this.id}`, (0, store_1.serialize)(this._raw));
186
+ await wa.engine.set(`/chat/${this._raw.id}`, (0, store_1.serialize)(this._raw));
205
187
  ok = true;
206
188
  }
207
189
  return ok;
208
190
  }
209
- /** Silencia/des-silencia el chat. / Mutes or unmutes the chat. */
210
- async mute(value) {
191
+ /**
192
+ * Fija o desfija el chat en la cuenta de WhatsApp. WhatsApp acepta hasta 3 chats
193
+ * fijados y descarta el cuarto sin avisar, así que el límite se verifica antes.
194
+ * Pins or unpins the chat on the WhatsApp account. WhatsApp accepts up to 3 pinned
195
+ * chats and silently drops the fourth, so the limit is checked beforehand.
196
+ *
197
+ * @param value - true fija, false desfija / true pins, false unpins
198
+ * @returns false si el socket está caído o ya hay 3 chats fijados / false when the socket is down or 3 chats are already pinned
199
+ */
200
+ async pin(value) {
211
201
  let ok = false;
212
- if (wa._socket) {
213
- const mute_end = value === true ? Date.now() + MUTE_FOREVER_MS : null;
214
- await wa._socket.chatModify({ mute: mute_end, lastMessages: await last_messages(this.id) }, this.id);
215
- this._raw.mute_end_time = mute_end;
216
- await wa.engine.set(`/chat/${this.id}`, (0, store_1.serialize)(this._raw));
217
- ok = true;
202
+ const socket = (0, internal_1.internals)(wa).socket;
203
+ if (socket) {
204
+ const allowed = value ? (await count_pinned(this._raw.id)) < MAX_PINNED : true;
205
+ if (allowed) {
206
+ await socket.chatModify({ pin: value }, this._raw.id);
207
+ this._raw.pinned = value ? Date.now() : null;
208
+ await wa.engine.set(`/chat/${this._raw.id}`, (0, store_1.serialize)(this._raw));
209
+ ok = true;
210
+ }
218
211
  }
219
212
  return ok;
220
213
  }
221
- /** Toggle "Escribiendo...". / Toggles the "typing..." indicator. */
222
- async typing(on) {
214
+ /**
215
+ * Silencia el chat hasta la fecha indicada. `false` o una fecha pasada lo des-silencian.
216
+ * Mutes the chat until the given date. `false` or a past date unmutes it.
217
+ *
218
+ * @param until - Fecha límite (ISO, epoch ms o Date) o false / Deadline (ISO, epoch ms or Date) or false
219
+ * @returns true si la acción se envió / true when the action was sent
220
+ */
221
+ async mute(until) {
223
222
  let ok = false;
224
- if (wa._socket) {
225
- await wa._socket.sendPresenceUpdate(on ? 'composing' : 'paused', this.id);
223
+ const socket = (0, internal_1.internals)(wa).socket;
224
+ if (socket) {
225
+ const end = until === false ? 0 : new Date(until).getTime();
226
+ const muted = end > Date.now();
227
+ await socket.chatModify({ mute: muted ? end : null }, this._raw.id);
228
+ this._raw.mute_end_time = muted ? end : null;
229
+ await wa.engine.set(`/chat/${this._raw.id}`, (0, store_1.serialize)(this._raw));
226
230
  ok = true;
227
231
  }
228
232
  return ok;
229
233
  }
230
- /** Toggle "Grabando audio...". / Toggles the "recording audio..." indicator. */
231
- async recording(on) {
234
+ /**
235
+ * Marca el chat completo como leído en la cuenta de WhatsApp.
236
+ * Marks the whole chat as read on the WhatsApp account.
237
+ *
238
+ * @returns true si la acción se envió / true when the action was sent
239
+ */
240
+ async seen() {
232
241
  let ok = false;
233
- if (wa._socket) {
234
- await wa._socket.sendPresenceUpdate(on ? 'recording' : 'paused', this.id);
242
+ const socket = (0, internal_1.internals)(wa).socket;
243
+ if (socket) {
244
+ await socket.chatModify({ markRead: true, lastMessages: await last_messages(this._raw.id) }, this._raw.id);
235
245
  ok = true;
236
246
  }
237
247
  return ok;
238
248
  }
239
- /** Vacía mensajes del chat (engine local). / Clears chat messages (local engine). */
249
+ /**
250
+ * Vacía los mensajes del chat en la cuenta de WhatsApp y en el engine, conservando el chat.
251
+ * Clears the chat messages on the WhatsApp account and in the engine, keeping the chat.
252
+ *
253
+ * @returns true siempre; la limpieza local es idempotente / always true; local cleanup is idempotent
254
+ */
240
255
  async clear() {
241
- await wa.engine.unset(`/chat/${this.id}/message`);
256
+ const socket = (0, internal_1.internals)(wa).socket;
257
+ if (socket) {
258
+ await socket
259
+ .chatModify({ clear: true, lastMessages: await last_messages(this._raw.id) }, this._raw.id)
260
+ .catch(() => null);
261
+ }
262
+ await wa.engine.unset(`/chat/${this._raw.id}/message`);
242
263
  return true;
243
264
  }
244
- /** Elimina el chat y sus mensajes (remoto + local). / Deletes the chat and its messages (remote + local). */
265
+ /**
266
+ * Elimina el chat y sus mensajes en la cuenta de WhatsApp y en el engine; en grupos
267
+ * abandona el grupo.
268
+ * Deletes the chat and its messages on the WhatsApp account and in the engine; for
269
+ * groups it leaves the group.
270
+ *
271
+ * @returns true siempre; la limpieza local es idempotente / always true; local cleanup is idempotent
272
+ */
245
273
  async delete() {
246
- if (wa._socket) {
274
+ const socket = (0, internal_1.internals)(wa).socket;
275
+ if (socket) {
247
276
  if (this.type === 'group') {
248
- try {
249
- await wa._socket.groupLeave(this.id);
250
- }
251
- catch {
252
- /* may fail */
253
- }
277
+ await socket.groupLeave(this._raw.id).catch(() => null);
254
278
  }
255
279
  else {
256
- try {
257
- await wa._socket.chatModify({ delete: true, lastMessages: [] }, this.id);
258
- }
259
- catch {
260
- /* may fail */
261
- }
280
+ await socket
281
+ .chatModify({ delete: true, lastMessages: await last_messages(this._raw.id) }, this._raw.id)
282
+ .catch(() => null);
262
283
  }
263
284
  }
264
- await this.clear();
265
- await wa.engine.unset(`/chat/${this.id}`);
285
+ await wa.engine.unset(`/chat/${this._raw.id}`);
266
286
  return true;
267
287
  }
268
288
  /**
269
- * Participantes del chat paginados (incluyéndome en grupos). Para grupos,
270
- * el `groupMetadata` se memoiza en la instancia con TTL de 15s para evitar
271
- * round-trips repetidos al socket.
272
- * Chat participants paginated (self included in groups). For groups,
273
- * `groupMetadata` is memoized on the instance with a 15s TTL to avoid
274
- * repeated socket round-trips.
289
+ * Carga un chat por teléfono, JID, LID o id de grupo: el persistido en el engine o,
290
+ * si todavía no existe, una instancia mínima lista para usar (no se persiste).
291
+ * Loads a chat by phone, JID, LID or group id: the engine-persisted one or, when it
292
+ * does not exist yet, a minimal ready-to-use instance (not persisted).
293
+ *
294
+ * @param cid - Teléfono, JID, LID o id de grupo / Phone, JID, LID or group id
295
+ * @returns Chat o null si el identificador es irresoluble / Chat or null when the identifier cannot be resolved
275
296
  */
276
- async members(offset = 0, limit = 50) {
277
- const result = [];
278
- if (this.type !== 'group') {
279
- if (offset === 0 && limit > 0) {
280
- const c = await wa.Contact.get(this.id);
281
- if (c) {
282
- result.push(c);
283
- }
284
- }
285
- }
286
- else if (wa._socket) {
287
- try {
288
- const socket = wa._socket;
289
- const participants = await (this._members_cache ??= (async () => {
290
- const meta = await socket.groupMetadata(this.id);
291
- setTimeout(() => { this._members_cache = null; }, 15_000);
292
- return meta.participants;
293
- })());
294
- const slice = participants.slice(offset, offset + limit);
295
- for (const p of slice) {
296
- const existing = await wa.Contact.get(p.id);
297
- if (existing) {
298
- result.push(existing);
299
- }
300
- }
301
- }
302
- catch {
303
- /* may fail */
304
- }
297
+ static async get(cid) {
298
+ const digits = String(cid).replace(/\D+/g, '');
299
+ const jid = String(cid).includes('@')
300
+ ? await (0, internal_1.internals)(wa).resolve_jid(String(cid))
301
+ : digits
302
+ ? `${digits}@s.whatsapp.net`
303
+ : null;
304
+ if (jid) {
305
+ const cached = (0, store_1.deserialize)(await wa.engine.get(`/chat/${jid}`));
306
+ return new _Chat(cached ?? { id: jid });
305
307
  }
306
- return result;
308
+ return null;
307
309
  }
308
- /** Mensajes del chat paginados por mtime DESC. / Chat messages paginated by mtime DESC. */
309
- async messages(offset = 0, limit = 50) {
310
- return wa.Message.list(this.id, offset, limit);
310
+ /**
311
+ * Pagina los chats persistidos, del más reciente al más antiguo.
312
+ * Paginates persisted chats, from the most recent to the oldest.
313
+ *
314
+ * @param offset - Desplazamiento / Offset
315
+ * @param limit - Tamaño de página / Page size
316
+ * @returns Página de chats / Chat page
317
+ */
318
+ static async list(offset = 0, limit = 50) {
319
+ return (await wa.engine.list('/chat', offset, limit))
320
+ .map((raw) => (0, store_1.deserialize)(raw))
321
+ .filter((parsed) => parsed !== null)
322
+ .map((parsed) => new _Chat(parsed));
311
323
  }
312
324
  };
313
325
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/chat/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/chat/index.ts"],"names":[],"mappings":"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"}