whatsapp-store-db 1.3.43 → 1.3.44
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/dist/handlers/chat.js +47 -11
- package/package.json +1 -1
package/dist/handlers/chat.js
CHANGED
|
@@ -8,17 +8,41 @@ function chatHandler(sessionId, event, getJid = undefined) {
|
|
|
8
8
|
const prisma = (0, shared_1.usePrisma)();
|
|
9
9
|
const logger = (0, shared_1.useLogger)();
|
|
10
10
|
let listening = false;
|
|
11
|
+
/**
|
|
12
|
+
* Resolves a chat ID, converting LID format to phone number format when possible.
|
|
13
|
+
* Returns an object with both the resolved ID and the original LID (if conversion happened).
|
|
14
|
+
*/
|
|
11
15
|
const resolveChatId = (id, chatOrUpdate) => {
|
|
16
|
+
var _a;
|
|
17
|
+
// Convert null to undefined for consistent typing
|
|
18
|
+
const originalLid = id !== null && id !== void 0 ? id : undefined;
|
|
12
19
|
// console.log("chatHandler:chatOrUpdate:", chatOrUpdate);
|
|
13
20
|
// Prefer primary number JID when id is a LID
|
|
14
21
|
if (id === null || id === void 0 ? void 0 : id.endsWith('@lid')) {
|
|
22
|
+
// First, check chat-level fields
|
|
15
23
|
const candidate = (chatOrUpdate === null || chatOrUpdate === void 0 ? void 0 : chatOrUpdate.pnJid) || (chatOrUpdate === null || chatOrUpdate === void 0 ? void 0 : chatOrUpdate.senderPn) || (chatOrUpdate === null || chatOrUpdate === void 0 ? void 0 : chatOrUpdate.jid);
|
|
16
|
-
if (candidate) {
|
|
17
|
-
return (0, baileys_1.jidNormalizedUser)(candidate);
|
|
24
|
+
if (candidate && candidate.includes('@s.whatsapp.net')) {
|
|
25
|
+
return { resolvedId: (0, baileys_1.jidNormalizedUser)(candidate), lidJid: originalLid };
|
|
26
|
+
}
|
|
27
|
+
// Second, try to extract from messages array (remoteJidAlt in message key)
|
|
28
|
+
const messages = chatOrUpdate === null || chatOrUpdate === void 0 ? void 0 : chatOrUpdate.messages;
|
|
29
|
+
if (Array.isArray(messages) && messages.length > 0) {
|
|
30
|
+
for (const msg of messages) {
|
|
31
|
+
const msgObj = (msg === null || msg === void 0 ? void 0 : msg.message) || msg;
|
|
32
|
+
const key = msgObj === null || msgObj === void 0 ? void 0 : msgObj.key;
|
|
33
|
+
if ((_a = key === null || key === void 0 ? void 0 : key.remoteJidAlt) === null || _a === void 0 ? void 0 : _a.includes('@s.whatsapp.net')) {
|
|
34
|
+
return { resolvedId: (0, baileys_1.jidNormalizedUser)(key.remoteJidAlt), lidJid: originalLid };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Try getJid function as fallback
|
|
39
|
+
const jidByLid = typeof getJid === 'function' ? getJid(id || '') : undefined;
|
|
40
|
+
if (jidByLid && jidByLid.includes('@s.whatsapp.net')) {
|
|
41
|
+
return { resolvedId: (0, baileys_1.jidNormalizedUser)(jidByLid), lidJid: originalLid };
|
|
18
42
|
}
|
|
19
43
|
}
|
|
20
44
|
const jidByLid = typeof getJid === 'function' ? getJid(id || '') : undefined;
|
|
21
|
-
return (0, baileys_1.jidNormalizedUser)(jidByLid !== null && jidByLid !== void 0 ? jidByLid : id);
|
|
45
|
+
return { resolvedId: (0, baileys_1.jidNormalizedUser)(jidByLid !== null && jidByLid !== void 0 ? jidByLid : id) };
|
|
22
46
|
};
|
|
23
47
|
const persistChatRecord = async ({ id, createData, updateData, }) => {
|
|
24
48
|
const where = { sessionId, id };
|
|
@@ -56,10 +80,14 @@ function chatHandler(sessionId, event, getJid = undefined) {
|
|
|
56
80
|
// Process chats in batches to avoid timeout
|
|
57
81
|
const BATCH_SIZE = 100;
|
|
58
82
|
const normalizedChats = chats.map((c) => {
|
|
59
|
-
const
|
|
83
|
+
const { resolvedId, lidJid } = resolveChatId(c.id, c);
|
|
60
84
|
const transformedData = (0, utils_1.transformPrisma)(c);
|
|
61
85
|
const validatedData = (0, utils_1.validateChatData)(transformedData);
|
|
62
|
-
|
|
86
|
+
// Set lidJid if we resolved from LID to phone number
|
|
87
|
+
if (lidJid) {
|
|
88
|
+
validatedData.lidJid = lidJid;
|
|
89
|
+
}
|
|
90
|
+
return Object.assign(Object.assign({}, validatedData), { id: resolvedId });
|
|
63
91
|
});
|
|
64
92
|
const existingIds = (await tx.chat.findMany({
|
|
65
93
|
select: { id: true },
|
|
@@ -88,10 +116,14 @@ function chatHandler(sessionId, event, getJid = undefined) {
|
|
|
88
116
|
// Normalize and de-duplicate by resolved id (keep the last occurrence)
|
|
89
117
|
const dedupedById = new Map();
|
|
90
118
|
for (const c of chats) {
|
|
91
|
-
const
|
|
119
|
+
const { resolvedId, lidJid } = resolveChatId(c.id, c);
|
|
92
120
|
const transformedData = (0, utils_1.transformPrisma)(c);
|
|
93
121
|
const validatedData = (0, utils_1.validateChatData)(transformedData);
|
|
94
|
-
|
|
122
|
+
// Set lidJid if we resolved from LID to phone number
|
|
123
|
+
if (lidJid) {
|
|
124
|
+
validatedData.lidJid = lidJid;
|
|
125
|
+
}
|
|
126
|
+
dedupedById.set(resolvedId, Object.assign(Object.assign({}, validatedData), { id: resolvedId }));
|
|
95
127
|
}
|
|
96
128
|
const normalizedChats = Array.from(dedupedById.values());
|
|
97
129
|
await Promise.all(normalizedChats.map((data) => persistChatRecord({
|
|
@@ -111,9 +143,13 @@ function chatHandler(sessionId, event, getJid = undefined) {
|
|
|
111
143
|
continue;
|
|
112
144
|
}
|
|
113
145
|
try {
|
|
114
|
-
const chatId = resolveChatId(update.id, update);
|
|
146
|
+
const { resolvedId: chatId, lidJid } = resolveChatId(update.id, update);
|
|
115
147
|
const transformedData = (0, utils_1.transformPrisma)(update);
|
|
116
148
|
const validatedData = (0, utils_1.validateChatData)(transformedData);
|
|
149
|
+
// Set lidJid if we resolved from LID to phone number
|
|
150
|
+
if (lidJid) {
|
|
151
|
+
validatedData.lidJid = lidJid;
|
|
152
|
+
}
|
|
117
153
|
await persistChatRecord({
|
|
118
154
|
id: chatId,
|
|
119
155
|
createData: Object.assign(Object.assign({}, validatedData), { id: chatId }),
|
|
@@ -131,7 +167,7 @@ function chatHandler(sessionId, event, getJid = undefined) {
|
|
|
131
167
|
};
|
|
132
168
|
const del = async (ids) => {
|
|
133
169
|
try {
|
|
134
|
-
const normalizedIds = ids.map((id) => resolveChatId(id));
|
|
170
|
+
const normalizedIds = ids.map((id) => resolveChatId(id).resolvedId);
|
|
135
171
|
await prisma.chat.deleteMany({
|
|
136
172
|
where: { id: { in: normalizedIds } },
|
|
137
173
|
});
|
|
@@ -146,7 +182,7 @@ function chatHandler(sessionId, event, getJid = undefined) {
|
|
|
146
182
|
event.on('messaging-history.set', set);
|
|
147
183
|
event.on('chats.upsert', upsert);
|
|
148
184
|
event.on('chats.update', update);
|
|
149
|
-
event.on('chats.delete', del);
|
|
185
|
+
// event.on('chats.delete', del);
|
|
150
186
|
listening = true;
|
|
151
187
|
};
|
|
152
188
|
const unlisten = () => {
|
|
@@ -155,7 +191,7 @@ function chatHandler(sessionId, event, getJid = undefined) {
|
|
|
155
191
|
event.off('messaging-history.set', set);
|
|
156
192
|
event.off('chats.upsert', upsert);
|
|
157
193
|
event.off('chats.update', update);
|
|
158
|
-
event.off('chats.delete', del);
|
|
194
|
+
// event.off('chats.delete', del);
|
|
159
195
|
listening = false;
|
|
160
196
|
};
|
|
161
197
|
return { listen, unlisten };
|