trompot 1.6.5 → 1.6.7
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.
- package/lib/messages/MediaMessage.js +15 -0
- package/lib/messages/MediaMessage.js.map +1 -1
- package/lib/wa/ConvertWAMessage.js +57 -39
- package/lib/wa/ConvertWAMessage.js.map +1 -1
- package/lib/wa/WhatsAppBot.d.ts +2 -0
- package/lib/wa/WhatsAppBot.js +6 -1
- package/lib/wa/WhatsAppBot.js.map +1 -1
- package/lib/wa/events/ContactEventHandler.js +40 -24
- package/lib/wa/events/ContactEventHandler.js.map +1 -1
- package/lib/wa/events/HistoryEventHandler.js +21 -8
- package/lib/wa/events/HistoryEventHandler.js.map +1 -1
- package/lib/wa/events/LIDMappingEventHandler.d.ts +13 -4
- package/lib/wa/events/LIDMappingEventHandler.js +42 -12
- package/lib/wa/events/LIDMappingEventHandler.js.map +1 -1
- package/lib/wa/events/MessageEventHandler.js +40 -2
- package/lib/wa/events/MessageEventHandler.js.map +1 -1
- package/lib/wa/makeInMemoryStore.js +21 -0
- package/lib/wa/makeInMemoryStore.js.map +1 -1
- package/lib/wa/operations/MessageOperations.js +3 -0
- package/lib/wa/operations/MessageOperations.js.map +1 -1
- package/lib/wa/services/ContactService.d.ts +122 -0
- package/lib/wa/services/ContactService.js +442 -0
- package/lib/wa/services/ContactService.js.map +1 -0
- package/lib/wa/utils/ContactIdHelper.d.ts +112 -0
- package/lib/wa/utils/ContactIdHelper.js +216 -0
- package/lib/wa/utils/ContactIdHelper.js.map +1 -0
- package/package.json +9 -1
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ContactIdHelper = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* 🎯 CONTACT ID HELPER
|
|
6
|
+
*
|
|
7
|
+
* Utilitário para identificar e manipular diferentes tipos de IDs do WhatsApp
|
|
8
|
+
*
|
|
9
|
+
* Tipos suportados:
|
|
10
|
+
* - LID: Local ID (identificador criptografado) - Ex: "7812579066017@lid"
|
|
11
|
+
* - PN: Phone Number JID (formato antigo) - Ex: "5511999999999@s.whatsapp.net"
|
|
12
|
+
* - Group: ID de grupo - Ex: "120363XXXXX@g.us"
|
|
13
|
+
* - Broadcast: Lista de transmissão - Ex: "XXXXX@broadcast"
|
|
14
|
+
* - Newsletter: Canal - Ex: "XXXXX@newsletter"
|
|
15
|
+
*
|
|
16
|
+
* @since Baileys v7 - LID é o formato PREFERIDO e mais confiável
|
|
17
|
+
*/
|
|
18
|
+
class ContactIdHelper {
|
|
19
|
+
/**
|
|
20
|
+
* Verifica se é um LID (Local ID)
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ContactIdHelper.isLID("7812579066017@lid") // true
|
|
24
|
+
* ContactIdHelper.isLID("5511999999999@s.whatsapp.net") // false
|
|
25
|
+
*/
|
|
26
|
+
static isLID(id) {
|
|
27
|
+
return (id === null || id === void 0 ? void 0 : id.endsWith('@lid')) || (id === null || id === void 0 ? void 0 : id.endsWith('@hosted.lid')) || false;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Verifica se é um PN (Phone Number JID)
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ContactIdHelper.isPN("5511999999999@s.whatsapp.net") // true
|
|
34
|
+
* ContactIdHelper.isPN("7812579066017@lid") // false
|
|
35
|
+
*/
|
|
36
|
+
static isPN(id) {
|
|
37
|
+
return (id === null || id === void 0 ? void 0 : id.endsWith('@s.whatsapp.net')) || (id === null || id === void 0 ? void 0 : id.endsWith('@hosted')) || false;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Verifica se é um ID de grupo
|
|
41
|
+
*/
|
|
42
|
+
static isGroup(id) {
|
|
43
|
+
return (id === null || id === void 0 ? void 0 : id.endsWith('@g.us')) || false;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Verifica se é uma lista de transmissão
|
|
47
|
+
*/
|
|
48
|
+
static isBroadcast(id) {
|
|
49
|
+
return (id === null || id === void 0 ? void 0 : id.endsWith('@broadcast')) || false;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Verifica se é um canal (newsletter)
|
|
53
|
+
*/
|
|
54
|
+
static isNewsletter(id) {
|
|
55
|
+
return (id === null || id === void 0 ? void 0 : id.endsWith('@newsletter')) || false;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Verifica se é um contato individual (LID ou PN)
|
|
59
|
+
*/
|
|
60
|
+
static isUser(id) {
|
|
61
|
+
return this.isLID(id) || this.isPN(id);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Retorna o tipo do ID
|
|
65
|
+
*/
|
|
66
|
+
static getIdType(id) {
|
|
67
|
+
if (this.isLID(id))
|
|
68
|
+
return 'lid';
|
|
69
|
+
if (this.isPN(id))
|
|
70
|
+
return 'pn';
|
|
71
|
+
if (this.isGroup(id))
|
|
72
|
+
return 'group';
|
|
73
|
+
if (this.isBroadcast(id))
|
|
74
|
+
return 'broadcast';
|
|
75
|
+
if (this.isNewsletter(id))
|
|
76
|
+
return 'newsletter';
|
|
77
|
+
return 'unknown';
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Extrai o número de telefone de um PN format
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ContactIdHelper.extractPhoneFromPN("5511999999999@s.whatsapp.net")
|
|
84
|
+
* // "5511999999999"
|
|
85
|
+
*/
|
|
86
|
+
static extractPhoneFromPN(pn) {
|
|
87
|
+
if (!this.isPN(pn))
|
|
88
|
+
return null;
|
|
89
|
+
return pn.replace('@s.whatsapp.net', '').replace('@hosted', '');
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Extrai o LID number (parte antes do @)
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ContactIdHelper.extractLIDNumber("7812579066017@lid")
|
|
96
|
+
* // "7812579066017"
|
|
97
|
+
*/
|
|
98
|
+
static extractLIDNumber(lid) {
|
|
99
|
+
if (!this.isLID(lid))
|
|
100
|
+
return null;
|
|
101
|
+
return lid.replace('@lid', '').replace('@hosted.lid', '');
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Normaliza um ID removendo device ID e mantendo só user ID
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ContactIdHelper.normalizeId("5511999999999:10@s.whatsapp.net")
|
|
108
|
+
* // "5511999999999@s.whatsapp.net"
|
|
109
|
+
*/
|
|
110
|
+
static normalizeId(id) {
|
|
111
|
+
if (!id)
|
|
112
|
+
return id;
|
|
113
|
+
// Remove device ID (formato: user:device@domain)
|
|
114
|
+
const parts = id.split('@');
|
|
115
|
+
if (parts.length !== 2)
|
|
116
|
+
return id;
|
|
117
|
+
const [userPart, domain] = parts;
|
|
118
|
+
const user = userPart.split(':')[0]; // Remove device ID
|
|
119
|
+
return `${user}@${domain}`;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Formata um phoneNumber para PN JID
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* ContactIdHelper.formatToPN("5511999999999")
|
|
126
|
+
* // "5511999999999@s.whatsapp.net"
|
|
127
|
+
*/
|
|
128
|
+
static formatToPN(phoneNumber) {
|
|
129
|
+
if (phoneNumber.includes('@')) {
|
|
130
|
+
return phoneNumber; // Já está formatado
|
|
131
|
+
}
|
|
132
|
+
return `${phoneNumber}@s.whatsapp.net`;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Retorna o ID preferido para uso
|
|
136
|
+
* Baileys v7: LID é PREFERIDO sobre PN
|
|
137
|
+
*
|
|
138
|
+
* @param lidId - LID se disponível
|
|
139
|
+
* @param pnId - PN se disponível
|
|
140
|
+
* @returns ID preferido (LID > PN)
|
|
141
|
+
*/
|
|
142
|
+
static getPreferredId(lidId, pnId) {
|
|
143
|
+
// Baileys v7: LID é mais confiável
|
|
144
|
+
if (lidId && this.isLID(lidId))
|
|
145
|
+
return lidId;
|
|
146
|
+
if (pnId && this.isPN(pnId))
|
|
147
|
+
return pnId;
|
|
148
|
+
// Fallback para qualquer ID válido
|
|
149
|
+
return lidId || pnId || null;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Verifica se dois IDs representam o mesmo usuário
|
|
153
|
+
* Útil para comparar LID ↔ PN do mesmo contato
|
|
154
|
+
*/
|
|
155
|
+
static isSameUser(id1, id2) {
|
|
156
|
+
if (!id1 || !id2)
|
|
157
|
+
return false;
|
|
158
|
+
// Mesmos IDs = mesmo usuário
|
|
159
|
+
if (this.normalizeId(id1) === this.normalizeId(id2)) {
|
|
160
|
+
return true;
|
|
161
|
+
}
|
|
162
|
+
// Para LID ↔ PN: não podemos determinar sem mapeamento
|
|
163
|
+
// Retorna false por segurança
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Valida se um ID está no formato correto
|
|
168
|
+
*/
|
|
169
|
+
static isValidId(id) {
|
|
170
|
+
if (!id || typeof id !== 'string')
|
|
171
|
+
return false;
|
|
172
|
+
return this.isLID(id) ||
|
|
173
|
+
this.isPN(id) ||
|
|
174
|
+
this.isGroup(id) ||
|
|
175
|
+
this.isBroadcast(id) ||
|
|
176
|
+
this.isNewsletter(id);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Extrai informações detalhadas de um ID
|
|
180
|
+
*/
|
|
181
|
+
static parseId(id) {
|
|
182
|
+
const type = this.getIdType(id);
|
|
183
|
+
if (!this.isValidId(id)) {
|
|
184
|
+
return {
|
|
185
|
+
type: 'unknown',
|
|
186
|
+
user: null,
|
|
187
|
+
device: null,
|
|
188
|
+
domain: null,
|
|
189
|
+
isValid: false
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
const parts = id.split('@');
|
|
193
|
+
if (parts.length !== 2) {
|
|
194
|
+
return {
|
|
195
|
+
type: 'unknown',
|
|
196
|
+
user: null,
|
|
197
|
+
device: null,
|
|
198
|
+
domain: null,
|
|
199
|
+
isValid: false
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
const [userPart, domain] = parts;
|
|
203
|
+
const userDeviceParts = userPart.split(':');
|
|
204
|
+
const user = userDeviceParts[0];
|
|
205
|
+
const device = userDeviceParts.length > 1 ? parseInt(userDeviceParts[1], 10) : null;
|
|
206
|
+
return {
|
|
207
|
+
type,
|
|
208
|
+
user,
|
|
209
|
+
device,
|
|
210
|
+
domain,
|
|
211
|
+
isValid: true
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
exports.ContactIdHelper = ContactIdHelper;
|
|
216
|
+
//# sourceMappingURL=ContactIdHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContactIdHelper.js","sourceRoot":"","sources":["../../../src/wa/utils/ContactIdHelper.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "trompot",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.7",
|
|
4
4
|
"description": "Chatbot API multi-plataforma em TypeScript. Fork do Trompot.",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -9,6 +9,14 @@
|
|
|
9
9
|
"cluster": "ts-node-dev example/cluster.ts",
|
|
10
10
|
"telegram": "ts-node-dev example/telegram.ts",
|
|
11
11
|
"test": "ts-node example/test-refactoring.ts",
|
|
12
|
+
"test:proactive": "ts-node example/test-send-proactive-whatsapp.ts",
|
|
13
|
+
"test:bulk": "ts-node example/test-bulk-notifications-whatsapp.ts",
|
|
14
|
+
"test:convert-lid": "ts-node example/test-convert-lid-to-jid.ts",
|
|
15
|
+
"test:stable-id": "ts-node example/test-stable-user-id.ts",
|
|
16
|
+
"test:perfect": "ts-node example/test-perfect-contact-system.ts",
|
|
17
|
+
"test:force-contact": "ts-node example/test-force-contact-verification.ts",
|
|
18
|
+
"test:complete": "ts-node example/test-complete-whatsapp-methods.ts",
|
|
19
|
+
"test:connection": "ts-node example/test-connection-debug.ts",
|
|
12
20
|
"build": "npm i && npm run clean && tsc",
|
|
13
21
|
"clean": "rimraf lib",
|
|
14
22
|
"lint": "eslint ."
|