trompot 1.6.7 → 1.7.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 (76) hide show
  1. package/README.md +0 -7
  2. package/lib/messages/MediaMessage.js +0 -15
  3. package/lib/messages/MediaMessage.js.map +1 -1
  4. package/lib/telegram/TelegramBot.d.ts +3 -3
  5. package/lib/telegram/TelegramBot.js +7 -16
  6. package/lib/telegram/TelegramBot.js.map +1 -1
  7. package/lib/telegram/TelegramEvents.js.map +1 -1
  8. package/lib/telegram/TelegramSendingController.d.ts +17 -12
  9. package/lib/telegram/TelegramSendingController.js +12 -45
  10. package/lib/telegram/TelegramSendingController.js.map +1 -1
  11. package/lib/telegram/TelegramToRompotConverter.d.ts +3 -3
  12. package/lib/telegram/TelegramToRompotConverter.js.map +1 -1
  13. package/lib/telegram/TelegramUtils.d.ts +10 -10
  14. package/lib/telegram/TelegramUtils.js +20 -20
  15. package/lib/telegram/TelegramUtils.js.map +1 -1
  16. package/lib/telegram/telegramTypes.d.ts +5 -0
  17. package/lib/telegram/telegramTypes.js +3 -0
  18. package/lib/telegram/telegramTypes.js.map +1 -0
  19. package/lib/wa/ConfigWAEvents.js +14 -11
  20. package/lib/wa/ConfigWAEvents.js.map +1 -1
  21. package/lib/wa/ConvertWAMessage.js +49 -60
  22. package/lib/wa/ConvertWAMessage.js.map +1 -1
  23. package/lib/wa/ID.d.ts +13 -1
  24. package/lib/wa/ID.js +43 -1
  25. package/lib/wa/ID.js.map +1 -1
  26. package/lib/wa/WhatsAppBot.d.ts +0 -2
  27. package/lib/wa/WhatsAppBot.js +8 -12
  28. package/lib/wa/WhatsAppBot.js.map +1 -1
  29. package/lib/wa/constants/DisconnectReasons.d.ts +1 -1
  30. package/lib/wa/constants/DisconnectReasons.js +1 -0
  31. package/lib/wa/constants/DisconnectReasons.js.map +1 -1
  32. package/lib/wa/constants/ErrorCodes.d.ts +4 -0
  33. package/lib/wa/constants/ErrorCodes.js +4 -0
  34. package/lib/wa/constants/ErrorCodes.js.map +1 -1
  35. package/lib/wa/constants/JIDPatterns.d.ts +8 -1
  36. package/lib/wa/constants/JIDPatterns.js +12 -2
  37. package/lib/wa/constants/JIDPatterns.js.map +1 -1
  38. package/lib/wa/core/ConnectionManager.js +1 -0
  39. package/lib/wa/core/ConnectionManager.js.map +1 -1
  40. package/lib/wa/events/CallEventHandler.js +15 -11
  41. package/lib/wa/events/CallEventHandler.js.map +1 -1
  42. package/lib/wa/events/ConnectionEventHandler.js +30 -24
  43. package/lib/wa/events/ConnectionEventHandler.js.map +1 -1
  44. package/lib/wa/events/ContactEventHandler.js +30 -40
  45. package/lib/wa/events/ContactEventHandler.js.map +1 -1
  46. package/lib/wa/events/GroupEventHandler.js +2 -2
  47. package/lib/wa/events/GroupEventHandler.js.map +1 -1
  48. package/lib/wa/events/HistoryEventHandler.js +13 -23
  49. package/lib/wa/events/HistoryEventHandler.js.map +1 -1
  50. package/lib/wa/events/LIDMappingEventHandler.d.ts +4 -13
  51. package/lib/wa/events/LIDMappingEventHandler.js +12 -42
  52. package/lib/wa/events/LIDMappingEventHandler.js.map +1 -1
  53. package/lib/wa/events/MessageEventHandler.d.ts +2 -2
  54. package/lib/wa/events/MessageEventHandler.js +6 -45
  55. package/lib/wa/events/MessageEventHandler.js.map +1 -1
  56. package/lib/wa/makeInMemoryStore.js +0 -21
  57. package/lib/wa/makeInMemoryStore.js.map +1 -1
  58. package/lib/wa/operations/ChatOperations.js +7 -6
  59. package/lib/wa/operations/ChatOperations.js.map +1 -1
  60. package/lib/wa/operations/MessageOperations.js +3 -6
  61. package/lib/wa/operations/MessageOperations.js.map +1 -1
  62. package/lib/wa/services/LIDMappingService.d.ts +4 -0
  63. package/lib/wa/services/LIDMappingService.js +30 -43
  64. package/lib/wa/services/LIDMappingService.js.map +1 -1
  65. package/lib/wa/services/LIDNormalizationService.d.ts +3 -2
  66. package/lib/wa/services/LIDNormalizationService.js +15 -30
  67. package/lib/wa/services/LIDNormalizationService.js.map +1 -1
  68. package/lib/wa/services/PendingMessageQueue.js +6 -4
  69. package/lib/wa/services/PendingMessageQueue.js.map +1 -1
  70. package/package.json +89 -98
  71. package/lib/wa/services/ContactService.d.ts +0 -122
  72. package/lib/wa/services/ContactService.js +0 -442
  73. package/lib/wa/services/ContactService.js.map +0 -1
  74. package/lib/wa/utils/ContactIdHelper.d.ts +0 -112
  75. package/lib/wa/utils/ContactIdHelper.js +0 -216
  76. package/lib/wa/utils/ContactIdHelper.js.map +0 -1
@@ -1,442 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ContactService = void 0;
4
- const ContactIdHelper_1 = require("../utils/ContactIdHelper");
5
- /**
6
- * 🎯 SERVIÇO DE GERENCIAMENTO DE CONTATOS (Baileys v7)
7
- *
8
- * FILOSOFIA:
9
- * - LID é o identificador PRINCIPAL e MAIS CONFIÁVEL
10
- * - PN (phoneNumber) é OPCIONAL e informativo
11
- * - Aceita LID como identificador válido (não tenta "descobrir" PN a todo custo)
12
- * - Usa signalRepository.lidMapping oficial para conversões
13
- *
14
- * MUDANÇAS do Baileys v7:
15
- * - "PNs are WAY LESS RELIABLE. MIGRATE TO LIDs"
16
- * - Contact.id pode ser LID ou PN
17
- * - Se id é LID → phoneNumber pode estar presente
18
- * - Se id é PN → lid pode estar presente
19
- *
20
- * @since Baileys v7
21
- */
22
- class ContactService {
23
- constructor(bot, logger, cache) {
24
- // Cache em memória: ID (LID ou PN) → Contact completo
25
- this.contactsMap = new Map();
26
- // Índices para busca rápida
27
- this.phoneToIdIndex = new Map(); // phoneNumber → id
28
- this.lidToIdIndex = new Map(); // LID → id
29
- this.bot = bot;
30
- this.logger = logger;
31
- this.cache = cache;
32
- // Carrega contatos salvos ao iniciar
33
- this.loadContactsFromPersistence();
34
- }
35
- /**
36
- * 🔄 Sincroniza contatos do evento contacts.upsert
37
- */
38
- async syncContactsUpsert(contacts) {
39
- for (const contact of contacts) {
40
- await this.upsertContact(contact);
41
- }
42
- // Salva após cada batch de atualizações
43
- await this.saveContactsToPersistence();
44
- }
45
- /**
46
- * 🔄 Sincroniza contatos do evento contacts.update
47
- */
48
- async syncContactsUpdate(contacts) {
49
- for (const update of contacts) {
50
- if (!update.id)
51
- continue;
52
- const existing = this.contactsMap.get(update.id);
53
- if (existing) {
54
- await this.upsertContact({ ...existing, ...update });
55
- }
56
- else {
57
- await this.upsertContact(update);
58
- }
59
- }
60
- await this.saveContactsToPersistence();
61
- }
62
- /**
63
- * ✨ Insere ou atualiza um contato (CORE DO SISTEMA)
64
- *
65
- * ✅ Baileys v7: Usa signalRepository.lidMapping oficial
66
- * ✅ Aceita LID como identificador válido
67
- * ✅ Enriquece com phoneNumber/lid quando disponível
68
- */
69
- async upsertContact(contact) {
70
- var _a, _b, _c, _d, _e;
71
- const id = contact.id;
72
- if (!id)
73
- return;
74
- const existing = this.contactsMap.get(id);
75
- // ✅ Extrai phoneNumber seguindo Baileys v7
76
- let phoneNumber = contact.phoneNumber;
77
- // 1. Mantém phoneNumber existente se disponível
78
- if (!phoneNumber && (existing === null || existing === void 0 ? void 0 : existing.phoneNumber)) {
79
- phoneNumber = existing.phoneNumber;
80
- }
81
- // 2. Se id é PN, extrai direto
82
- if (!phoneNumber && ContactIdHelper_1.ContactIdHelper.isPN(id)) {
83
- const extracted = ContactIdHelper_1.ContactIdHelper.extractPhoneFromPN(id);
84
- if (extracted) {
85
- phoneNumber = extracted;
86
- }
87
- }
88
- // 3. Se id é LID, tenta enriquecer via signalRepository oficial (NOVO)
89
- if (!phoneNumber && ContactIdHelper_1.ContactIdHelper.isLID(id)) {
90
- try {
91
- const pn = await ((_b = (_a = this.bot.sock) === null || _a === void 0 ? void 0 : _a.signalRepository) === null || _b === void 0 ? void 0 : _b.lidMapping.getPNForLID(id));
92
- if (pn) {
93
- const extracted = ContactIdHelper_1.ContactIdHelper.extractPhoneFromPN(pn);
94
- if (extracted) {
95
- phoneNumber = extracted;
96
- }
97
- }
98
- }
99
- catch (error) {
100
- this.logger.debug(`Não foi possível obter PN para LID ${id}`);
101
- }
102
- }
103
- // ✅ Extrai LID seguindo Baileys v7
104
- let lid = contact.lid;
105
- // 1. Mantém lid existente se disponível
106
- if (!lid && (existing === null || existing === void 0 ? void 0 : existing.lid)) {
107
- lid = existing.lid;
108
- }
109
- // 2. Se id é PN, tenta obter LID via signalRepository (NOVO)
110
- if (!lid && ContactIdHelper_1.ContactIdHelper.isPN(id)) {
111
- try {
112
- const obtainedLid = await ((_d = (_c = this.bot.sock) === null || _c === void 0 ? void 0 : _c.signalRepository) === null || _d === void 0 ? void 0 : _d.lidMapping.getLIDForPN(id));
113
- if (obtainedLid) {
114
- lid = obtainedLid;
115
- }
116
- }
117
- catch (error) {
118
- this.logger.debug(`Não foi possível obter LID para PN ${id}`);
119
- }
120
- }
121
- // 3. Se id é LID, define lid
122
- if (!lid && ContactIdHelper_1.ContactIdHelper.isLID(id)) {
123
- lid = id;
124
- }
125
- // ✅ Cria contato enriquecido (sem campos obsoletos)
126
- const enriched = {
127
- ...existing,
128
- ...contact,
129
- id,
130
- phoneNumber,
131
- lid,
132
- lastSeenAt: new Date(),
133
- lastUpdatedAt: new Date(),
134
- firstSeenAt: (existing === null || existing === void 0 ? void 0 : existing.firstSeenAt) || new Date(),
135
- alternateIds: (existing === null || existing === void 0 ? void 0 : existing.alternateIds) || []
136
- };
137
- // ✅ Rastreia IDs alternativos (substitui lidHistory/jidHistory)
138
- if (!enriched.alternateIds) {
139
- enriched.alternateIds = [];
140
- }
141
- if (id && !enriched.alternateIds.includes(id)) {
142
- enriched.alternateIds.push(id);
143
- }
144
- // Salva no cache em memória
145
- this.contactsMap.set(id, enriched);
146
- // ✅ Atualiza índices
147
- if (phoneNumber) {
148
- this.phoneToIdIndex.set(phoneNumber, id);
149
- }
150
- if (lid) {
151
- this.lidToIdIndex.set(lid, id);
152
- }
153
- // Sincroniza com store do Baileys
154
- if ((_e = this.bot.store) === null || _e === void 0 ? void 0 : _e.contacts) {
155
- this.bot.store.contacts[id] = contact;
156
- }
157
- // Salva no storage persistente do bot (auth)
158
- await this.bot.auth.set(`contacts-${id}`, enriched);
159
- this.logger.debug(`✅ Contato sincronizado: ${id} → ${phoneNumber || 'sem telefone'}`);
160
- }
161
- /**
162
- * 📞 Obtém phoneNumber de um JID/LID
163
- *
164
- * ✅ Baileys v7: Usa signalRepository.lidMapping oficial
165
- * ✅ Aceita que phoneNumber pode não estar disponível
166
- */
167
- async getPhoneNumber(jid) {
168
- var _a, _b;
169
- // 1. Busca no cache
170
- const contact = this.contactsMap.get(jid);
171
- if (contact === null || contact === void 0 ? void 0 : contact.phoneNumber) {
172
- return contact.phoneNumber;
173
- }
174
- // 2. Se é PN, extrai direto
175
- if (ContactIdHelper_1.ContactIdHelper.isPN(jid)) {
176
- return ContactIdHelper_1.ContactIdHelper.extractPhoneFromPN(jid);
177
- }
178
- // 3. Se é LID, usa signalRepository oficial (NOVO)
179
- if (ContactIdHelper_1.ContactIdHelper.isLID(jid)) {
180
- try {
181
- const pn = await ((_b = (_a = this.bot.sock) === null || _a === void 0 ? void 0 : _a.signalRepository) === null || _b === void 0 ? void 0 : _b.lidMapping.getPNForLID(jid));
182
- if (pn) {
183
- const phoneNumber = ContactIdHelper_1.ContactIdHelper.extractPhoneFromPN(pn);
184
- if (phoneNumber) {
185
- // Atualiza contato com phoneNumber descoberto
186
- await this.upsertContact({ id: jid, phoneNumber });
187
- return phoneNumber;
188
- }
189
- }
190
- }
191
- catch (error) {
192
- this.logger.debug(`Erro ao buscar PN para LID ${jid}: ${error}`);
193
- }
194
- }
195
- // 4. Busca no storage persistente
196
- const stored = await this.bot.auth.get(`contacts-${jid}`);
197
- if (stored === null || stored === void 0 ? void 0 : stored.phoneNumber) {
198
- this.contactsMap.set(jid, stored);
199
- if (stored.phoneNumber) {
200
- this.phoneToIdIndex.set(stored.phoneNumber, jid);
201
- }
202
- return stored.phoneNumber;
203
- }
204
- return null;
205
- }
206
- /**
207
- * 🔍 Busca JID/LID de um phoneNumber
208
- */
209
- async getIdByPhoneNumber(phoneNumber) {
210
- var _a;
211
- // Remove caracteres não numéricos
212
- phoneNumber = phoneNumber.replace(/\D/g, '');
213
- // 1. Busca no índice reverso (cache em memória)
214
- const cached = this.phoneToIdIndex.get(phoneNumber);
215
- if (cached)
216
- return cached;
217
- // 2. Tenta JID direto
218
- const jid = `${phoneNumber}@s.whatsapp.net`;
219
- const contact = this.contactsMap.get(jid);
220
- if (contact)
221
- return jid;
222
- // 3. Busca em todos os contatos (fallback)
223
- for (const [id, contact] of this.contactsMap.entries()) {
224
- if (contact.phoneNumber === phoneNumber) {
225
- this.phoneToIdIndex.set(phoneNumber, id);
226
- return id;
227
- }
228
- }
229
- // 4. Busca no LIDMappingService
230
- const lid = await ((_a = this.bot.lidMappingService) === null || _a === void 0 ? void 0 : _a.getLIDForPN(phoneNumber));
231
- if (lid) {
232
- return `${lid}@lid`;
233
- }
234
- return null;
235
- }
236
- /**
237
- * 📋 Obtém contato completo
238
- */
239
- async getContact(jid) {
240
- var _a, _b;
241
- // Busca em memória
242
- const cached = this.contactsMap.get(jid);
243
- if (cached)
244
- return cached;
245
- // Busca no storage
246
- const stored = await this.bot.auth.get(`contacts-${jid}`);
247
- if (stored) {
248
- this.contactsMap.set(jid, stored);
249
- if (stored.phoneNumber) {
250
- this.phoneToIdIndex.set(stored.phoneNumber, jid);
251
- }
252
- return stored;
253
- }
254
- // Busca no store do Baileys
255
- if ((_b = (_a = this.bot.store) === null || _a === void 0 ? void 0 : _a.contacts) === null || _b === void 0 ? void 0 : _b[jid]) {
256
- await this.upsertContact(this.bot.store.contacts[jid]);
257
- return this.contactsMap.get(jid) || null;
258
- }
259
- return null;
260
- }
261
- /**
262
- * 📋 Lista todos os contatos
263
- */
264
- getAllContacts() {
265
- return Array.from(this.contactsMap.values());
266
- }
267
- /**
268
- * 💾 Salva contatos em arquivo persistente
269
- */
270
- async saveContactsToPersistence() {
271
- try {
272
- const data = {
273
- contacts: Array.from(this.contactsMap.entries()),
274
- phoneIndex: Array.from(this.phoneToIdIndex.entries()),
275
- savedAt: new Date().toISOString(),
276
- };
277
- await this.bot.auth.set('_contact_service_data', data);
278
- this.logger.debug(`💾 Contatos salvos: ${this.contactsMap.size} contatos`);
279
- }
280
- catch (error) {
281
- this.logger.error('Erro ao salvar contatos:', error);
282
- }
283
- }
284
- /**
285
- * 📂 Carrega contatos do arquivo persistente
286
- */
287
- async loadContactsFromPersistence() {
288
- try {
289
- const data = await this.bot.auth.get('_contact_service_data');
290
- if (!data) {
291
- this.logger.debug('Nenhum dado de contatos salvo encontrado');
292
- return;
293
- }
294
- // Reconstrói cache
295
- if (data.contacts) {
296
- this.contactsMap = new Map(data.contacts);
297
- }
298
- if (data.phoneIndex) {
299
- this.phoneToIdIndex = new Map(data.phoneIndex);
300
- }
301
- this.logger.info(`📂 Contatos carregados: ${this.contactsMap.size} contatos`);
302
- }
303
- catch (error) {
304
- this.logger.error('Erro ao carregar contatos:', error);
305
- }
306
- }
307
- /**
308
- * 🔄 Sincroniza com o store do Baileys (chamado após bind)
309
- */
310
- async syncWithBaileysStore() {
311
- var _a;
312
- if (!((_a = this.bot.store) === null || _a === void 0 ? void 0 : _a.contacts)) {
313
- this.logger.warn('Store do Baileys não disponível');
314
- return;
315
- }
316
- const baileysContacts = Object.values(this.bot.store.contacts);
317
- this.logger.info(`🔄 Sincronizando ${baileysContacts.length} contatos do Baileys...`);
318
- for (const contact of baileysContacts) {
319
- await this.upsertContact(contact);
320
- }
321
- await this.saveContactsToPersistence();
322
- this.logger.info(`✅ Sincronização completa: ${this.contactsMap.size} contatos`);
323
- }
324
- /**
325
- * 🧹 Limpa cache (útil para testes)
326
- */
327
- clear() {
328
- this.contactsMap.clear();
329
- this.phoneToIdIndex.clear();
330
- this.lidToIdIndex.clear();
331
- this.logger.debug('Cache de contatos limpo');
332
- }
333
- /**
334
- * 🔄 Enriquece contato com mapeamento LID ↔ PN (NOVO - Baileys v7)
335
- *
336
- * Se o contato tem apenas LID, tenta obter PN.
337
- * Se o contato tem apenas PN, tenta obter LID.
338
- *
339
- * @param contactId - ID do contato (LID ou PN)
340
- * @returns true se conseguiu enriquecer, false caso contrário
341
- */
342
- async enrichContactWithMapping(contactId) {
343
- var _a, _b, _c, _d;
344
- try {
345
- const contact = await this.getContact(contactId);
346
- if (!contact) {
347
- return false;
348
- }
349
- let updated = false;
350
- // Se tem LID mas não tem phoneNumber, tenta obter
351
- if (ContactIdHelper_1.ContactIdHelper.isLID(contactId) && !contact.phoneNumber) {
352
- const pn = await ((_b = (_a = this.bot.sock) === null || _a === void 0 ? void 0 : _a.signalRepository) === null || _b === void 0 ? void 0 : _b.lidMapping.getPNForLID(contactId));
353
- if (pn) {
354
- const extracted = ContactIdHelper_1.ContactIdHelper.extractPhoneFromPN(pn);
355
- if (extracted) {
356
- contact.phoneNumber = extracted;
357
- updated = true;
358
- }
359
- }
360
- }
361
- // Se tem PN mas não tem LID, tenta obter
362
- if (ContactIdHelper_1.ContactIdHelper.isPN(contactId) && !contact.lid) {
363
- const lid = await ((_d = (_c = this.bot.sock) === null || _c === void 0 ? void 0 : _c.signalRepository) === null || _d === void 0 ? void 0 : _d.lidMapping.getLIDForPN(contactId));
364
- if (lid) {
365
- contact.lid = lid;
366
- updated = true;
367
- }
368
- }
369
- // Se atualizou, salva
370
- if (updated) {
371
- contact.lastUpdatedAt = new Date();
372
- await this.upsertContact(contact);
373
- this.logger.debug(`✅ Contato ${contactId} enriquecido com mapeamento`);
374
- }
375
- return updated;
376
- }
377
- catch (error) {
378
- this.logger.debug(`Erro ao enriquecer contato ${contactId}: ${error}`);
379
- return false;
380
- }
381
- }
382
- /**
383
- * 🔄 Enriquece contato com mapeamento direto LID ↔ PN
384
- *
385
- * @param lid - LID do usuário (com ou sem @lid)
386
- * @param pn - PN do usuário (com ou sem @s.whatsapp.net)
387
- */
388
- async enrichContactWithDirectMapping(lid, pn) {
389
- var _a, _b;
390
- try {
391
- // Normaliza IDs
392
- const lidFull = lid.includes('@') ? lid : `${lid}@lid`;
393
- const pnFull = pn.includes('@') ? pn : `${pn}@s.whatsapp.net`;
394
- // Armazena no signalRepository oficial
395
- if ((_b = (_a = this.bot.sock) === null || _a === void 0 ? void 0 : _a.signalRepository) === null || _b === void 0 ? void 0 : _b.lidMapping) {
396
- await this.bot.sock.signalRepository.lidMapping.storeLIDPNMappings([
397
- { lid: lidFull, pn: pnFull }
398
- ]);
399
- }
400
- // Extrai phoneNumber
401
- const phoneNumber = ContactIdHelper_1.ContactIdHelper.extractPhoneFromPN(pnFull);
402
- if (!phoneNumber) {
403
- this.logger.warn(`Não foi possível extrair phoneNumber de ${pnFull}`);
404
- return;
405
- }
406
- // Atualiza contato com LID
407
- const contactByLid = await this.getContact(lidFull);
408
- if (contactByLid) {
409
- await this.upsertContact({
410
- ...contactByLid,
411
- phoneNumber,
412
- });
413
- }
414
- else {
415
- await this.upsertContact({
416
- id: lidFull,
417
- phoneNumber,
418
- });
419
- }
420
- // Atualiza contato com PN
421
- const contactByPn = await this.getContact(pnFull);
422
- if (contactByPn) {
423
- await this.upsertContact({
424
- ...contactByPn,
425
- lid: lidFull,
426
- });
427
- }
428
- else {
429
- await this.upsertContact({
430
- id: pnFull,
431
- lid: lidFull,
432
- });
433
- }
434
- this.logger.debug(`✅ Mapeamento ${lidFull} ↔ ${pnFull} armazenado e contatos atualizados`);
435
- }
436
- catch (error) {
437
- this.logger.error(`Erro ao enriquecer com mapeamento direto: ${error}`);
438
- }
439
- }
440
- }
441
- exports.ContactService = ContactService;
442
- //# sourceMappingURL=ContactService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ContactService.js","sourceRoot":"","sources":["../../../src/wa/services/ContactService.ts"],"names":[],"mappings":"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"}
@@ -1,112 +0,0 @@
1
- /**
2
- * 🎯 CONTACT ID HELPER
3
- *
4
- * Utilitário para identificar e manipular diferentes tipos de IDs do WhatsApp
5
- *
6
- * Tipos suportados:
7
- * - LID: Local ID (identificador criptografado) - Ex: "7812579066017@lid"
8
- * - PN: Phone Number JID (formato antigo) - Ex: "5511999999999@s.whatsapp.net"
9
- * - Group: ID de grupo - Ex: "120363XXXXX@g.us"
10
- * - Broadcast: Lista de transmissão - Ex: "XXXXX@broadcast"
11
- * - Newsletter: Canal - Ex: "XXXXX@newsletter"
12
- *
13
- * @since Baileys v7 - LID é o formato PREFERIDO e mais confiável
14
- */
15
- export declare class ContactIdHelper {
16
- /**
17
- * Verifica se é um LID (Local ID)
18
- *
19
- * @example
20
- * ContactIdHelper.isLID("7812579066017@lid") // true
21
- * ContactIdHelper.isLID("5511999999999@s.whatsapp.net") // false
22
- */
23
- static isLID(id: string): boolean;
24
- /**
25
- * Verifica se é um PN (Phone Number JID)
26
- *
27
- * @example
28
- * ContactIdHelper.isPN("5511999999999@s.whatsapp.net") // true
29
- * ContactIdHelper.isPN("7812579066017@lid") // false
30
- */
31
- static isPN(id: string): boolean;
32
- /**
33
- * Verifica se é um ID de grupo
34
- */
35
- static isGroup(id: string): boolean;
36
- /**
37
- * Verifica se é uma lista de transmissão
38
- */
39
- static isBroadcast(id: string): boolean;
40
- /**
41
- * Verifica se é um canal (newsletter)
42
- */
43
- static isNewsletter(id: string): boolean;
44
- /**
45
- * Verifica se é um contato individual (LID ou PN)
46
- */
47
- static isUser(id: string): boolean;
48
- /**
49
- * Retorna o tipo do ID
50
- */
51
- static getIdType(id: string): 'lid' | 'pn' | 'group' | 'broadcast' | 'newsletter' | 'unknown';
52
- /**
53
- * Extrai o número de telefone de um PN format
54
- *
55
- * @example
56
- * ContactIdHelper.extractPhoneFromPN("5511999999999@s.whatsapp.net")
57
- * // "5511999999999"
58
- */
59
- static extractPhoneFromPN(pn: string): string | null;
60
- /**
61
- * Extrai o LID number (parte antes do @)
62
- *
63
- * @example
64
- * ContactIdHelper.extractLIDNumber("7812579066017@lid")
65
- * // "7812579066017"
66
- */
67
- static extractLIDNumber(lid: string): string | null;
68
- /**
69
- * Normaliza um ID removendo device ID e mantendo só user ID
70
- *
71
- * @example
72
- * ContactIdHelper.normalizeId("5511999999999:10@s.whatsapp.net")
73
- * // "5511999999999@s.whatsapp.net"
74
- */
75
- static normalizeId(id: string): string;
76
- /**
77
- * Formata um phoneNumber para PN JID
78
- *
79
- * @example
80
- * ContactIdHelper.formatToPN("5511999999999")
81
- * // "5511999999999@s.whatsapp.net"
82
- */
83
- static formatToPN(phoneNumber: string): string;
84
- /**
85
- * Retorna o ID preferido para uso
86
- * Baileys v7: LID é PREFERIDO sobre PN
87
- *
88
- * @param lidId - LID se disponível
89
- * @param pnId - PN se disponível
90
- * @returns ID preferido (LID > PN)
91
- */
92
- static getPreferredId(lidId?: string | null, pnId?: string | null): string | null;
93
- /**
94
- * Verifica se dois IDs representam o mesmo usuário
95
- * Útil para comparar LID ↔ PN do mesmo contato
96
- */
97
- static isSameUser(id1: string, id2: string): boolean;
98
- /**
99
- * Valida se um ID está no formato correto
100
- */
101
- static isValidId(id: string): boolean;
102
- /**
103
- * Extrai informações detalhadas de um ID
104
- */
105
- static parseId(id: string): {
106
- type: 'lid' | 'pn' | 'group' | 'broadcast' | 'newsletter' | 'unknown';
107
- user: string | null;
108
- device: number | null;
109
- domain: string | null;
110
- isValid: boolean;
111
- };
112
- }