@prototypevip/baileys 0.0.5 → 0.0.6
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/Socket/chats.js +29 -4
- package/lib/Socket/messages-send.js +51 -1
- package/lib/Socket/socket.js +2 -2
- package/lib/Store/prototype-store.js +10 -39
- package/package.json +1 -1
package/lib/Socket/chats.js
CHANGED
|
@@ -199,6 +199,15 @@ export const makeChatsSocket = (config) => {
|
|
|
199
199
|
}
|
|
200
200
|
};
|
|
201
201
|
|
|
202
|
+
// مهله قصوى لاستعلام اليوزرنيم — واتساب أحياناً مبيردش على الاستعلام ده خالص
|
|
203
|
+
// لبعض حسابات اليوزرنيم، وبيرجع في المهله الافتراضيه (60 ثانيه)، وده اللي
|
|
204
|
+
// كان بيسبب تعليق البوت لحد دقيقتين على اي رساله جايه من حساب زي ده
|
|
205
|
+
const withTimeout = (promise, ms, fallback) =>
|
|
206
|
+
Promise.race([
|
|
207
|
+
promise,
|
|
208
|
+
new Promise((resolve) => setTimeout(() => resolve(fallback), ms)),
|
|
209
|
+
]);
|
|
210
|
+
|
|
202
211
|
const getUsername = async (jid) => {
|
|
203
212
|
const usyncQuery = new USyncQuery()
|
|
204
213
|
.withUsernameProtocol()
|
|
@@ -208,10 +217,18 @@ export const makeChatsSocket = (config) => {
|
|
|
208
217
|
return result?.list?.[0]?.username || null;
|
|
209
218
|
};
|
|
210
219
|
|
|
220
|
+
// كام ملي ثانيه أقصى نستنى فيها رد واتساب قبل ما نستسلم ونكمل من غير يوزرنيم
|
|
221
|
+
const USERNAME_LOOKUP_TIMEOUT_MS = 3500;
|
|
222
|
+
// مده صلاحيه الكاش السلبي (id-not-found) — بعدها نجرب تاني، لأن الرقم ممكن
|
|
223
|
+
// يبقى قابل للاكتشاف تاني (المستخدم شال اليوزرنيم مثلاً)
|
|
224
|
+
const NEGATIVE_CACHE_TTL_MS = 30 * 60 * 1000;
|
|
225
|
+
|
|
211
226
|
const findUserId = async (pnLid) => {
|
|
212
227
|
const cachedId = USER_ID_CACHE.get(pnLid);
|
|
213
228
|
if (cachedId) {
|
|
214
|
-
|
|
229
|
+
const isNegative = cachedId.phoneNumber === "id-not-found";
|
|
230
|
+
const isStale = isNegative && Date.now() - (cachedId._cachedAt || 0) > NEGATIVE_CACHE_TTL_MS;
|
|
231
|
+
if (!isStale) return cachedId;
|
|
215
232
|
}
|
|
216
233
|
const userId = {};
|
|
217
234
|
if (isPnUser(pnLid)) {
|
|
@@ -221,6 +238,7 @@ export const makeChatsSocket = (config) => {
|
|
|
221
238
|
)?.[0]?.lid;
|
|
222
239
|
if (!userId.lid) {
|
|
223
240
|
userId.lid = "id-not-found";
|
|
241
|
+
userId._cachedAt = Date.now();
|
|
224
242
|
USER_ID_CACHE.set(pnLid, userId);
|
|
225
243
|
return userId;
|
|
226
244
|
}
|
|
@@ -234,13 +252,20 @@ export const makeChatsSocket = (config) => {
|
|
|
234
252
|
// واتساب، لأن رقمه بيبقى مش قابل للاكتشاف. من غير الكاش ده، كل رساله
|
|
235
253
|
// جايه من الحساب ده كانت بتعمل استعلام شبكه كامل تاني من الأول، وده
|
|
236
254
|
// اللي كان بيسبب التأخير/التعليق الملحوظ مع أي حد شايل يوزرنيم.
|
|
237
|
-
// كمان بنحاول نجيب اليوزرنيم نفسه عشان يتعرض بدل الرقم/الليد
|
|
255
|
+
// كمان بنحاول نجيب اليوزرنيم نفسه عشان يتعرض بدل الرقم/الليد الخام،
|
|
256
|
+
// لكن بمهله قصوى (6 ثواني) عشان لو واتساب مارضاش يرد، مانستناهوش المهله
|
|
257
|
+
// الكامله (60 ثانيه) اللي كانت بتعلّق البوت.
|
|
238
258
|
userId.phoneNumber = "id-not-found";
|
|
239
259
|
try {
|
|
240
|
-
userId.username = await
|
|
260
|
+
userId.username = await withTimeout(
|
|
261
|
+
getUsername(pnLid),
|
|
262
|
+
USERNAME_LOOKUP_TIMEOUT_MS,
|
|
263
|
+
null,
|
|
264
|
+
);
|
|
241
265
|
} catch {
|
|
242
266
|
userId.username = null;
|
|
243
267
|
}
|
|
268
|
+
userId._cachedAt = Date.now();
|
|
244
269
|
USER_ID_CACHE.set(pnLid, userId);
|
|
245
270
|
return userId;
|
|
246
271
|
}
|
|
@@ -1144,4 +1169,4 @@ export const makeChatsSocket = (config) => {
|
|
|
1144
1169
|
addOrEditQuickReply: addOrEditQuickReply,
|
|
1145
1170
|
removeQuickReply: removeQuickReply,
|
|
1146
1171
|
};
|
|
1147
|
-
};
|
|
1172
|
+
};
|
|
@@ -70,6 +70,12 @@ import {
|
|
|
70
70
|
} from "../WABinary/index.js";
|
|
71
71
|
import { USyncQuery, USyncUser } from "../WAUSync/index.js";
|
|
72
72
|
import { makeNewsletterSocket } from "./newsletter.js";
|
|
73
|
+
// كاش سلبي: لو استعلام اجهزه شخص معين فشل/خلص وقته (حساب يوزرنيم/lid مش
|
|
74
|
+
// قابل للاكتشاف)، منعملش استعلام شبكه تاني ليه قبل ما المهله دي تخلص —
|
|
75
|
+
// كده ما بنستناش كل رساله في الجروب على نفس الحساب اللي مش هيرد اصلاً
|
|
76
|
+
const USYNC_DEVICES_NEGATIVE_CACHE = new Map();
|
|
77
|
+
const USYNC_DEVICES_NEGATIVE_TTL_MS = 5 * 60 * 1000; // 5 دقايق
|
|
78
|
+
|
|
73
79
|
export const makeMessagesSocket = (config) => {
|
|
74
80
|
const {
|
|
75
81
|
logger,
|
|
@@ -284,7 +290,15 @@ export const makeMessagesSocket = (config) => {
|
|
|
284
290
|
const usersToFetch = jidsWithUser.map((j) => j?.user).filter(Boolean);
|
|
285
291
|
mgetDevices = await userDevicesCache.mget(usersToFetch);
|
|
286
292
|
}
|
|
293
|
+
const now = Date.now();
|
|
287
294
|
for (const { jid, user } of jidsWithUser) {
|
|
295
|
+
// لو الشخص ده فشل استعلامه مؤخراً (حساب يوزرنيم/lid مش قابل
|
|
296
|
+
// للاكتشاف)، منعيدش نستنى عليه تاني قبل ما مهله الكاش السلبي تخلص —
|
|
297
|
+
// ده اللي كان بيسبب تأخير كام ثانيه على كل رساله في جروب فيه حساب زي ده
|
|
298
|
+
const negativeUntil = USYNC_DEVICES_NEGATIVE_CACHE.get(user);
|
|
299
|
+
if (negativeUntil && negativeUntil > now) {
|
|
300
|
+
continue; // من غير اجهزه اضافيه ليه، بدون استعلام شبكه تاني
|
|
301
|
+
}
|
|
288
302
|
if (useCache) {
|
|
289
303
|
const devices =
|
|
290
304
|
mgetDevices?.[user] ||
|
|
@@ -322,7 +336,25 @@ export const makeMessagesSocket = (config) => {
|
|
|
322
336
|
for (const jid of toFetch) {
|
|
323
337
|
query.withUser(new USyncUser().withId(jid));
|
|
324
338
|
}
|
|
325
|
-
|
|
339
|
+
// مهله قصيره لاستعلام الاجهزه — لو حساب معين (يوزرنيم/lid مش قابل
|
|
340
|
+
// للاكتشاف) عطّل الرد، منستناش المهله الكامله (60 ثانيه) ونفشل الارسال
|
|
341
|
+
// كله (بما فيه الريأكشن)؛ بنكمل بالاجهزه المعروفه بس بدل ما نوقف كل حاجه
|
|
342
|
+
const USYNC_DEVICES_TIMEOUT_MS = 4000;
|
|
343
|
+
let result;
|
|
344
|
+
try {
|
|
345
|
+
result = await Promise.race([
|
|
346
|
+
sock.executeUSyncQuery(query),
|
|
347
|
+
new Promise((resolve) =>
|
|
348
|
+
setTimeout(() => resolve(null), USYNC_DEVICES_TIMEOUT_MS),
|
|
349
|
+
),
|
|
350
|
+
]);
|
|
351
|
+
} catch (e) {
|
|
352
|
+
logger.warn(
|
|
353
|
+
{ e: e },
|
|
354
|
+
"USync devices query failed/timed out — continuing with partial device list",
|
|
355
|
+
);
|
|
356
|
+
result = null;
|
|
357
|
+
}
|
|
326
358
|
if (result) {
|
|
327
359
|
const lidResults = result.list.filter((a) => !!a.lid);
|
|
328
360
|
if (lidResults.length > 0) {
|
|
@@ -405,6 +437,24 @@ export const makeMessagesSocket = (config) => {
|
|
|
405
437
|
logger.warn({ error: error }, "failed to store user device lists");
|
|
406
438
|
}
|
|
407
439
|
}
|
|
440
|
+
// اي حد كان جوه toFetch بس مرجعش ليه اجهزه في النتيجه (حساب مش قابل
|
|
441
|
+
// للاكتشاف) — بنسجله في الكاش السلبي عشان مانستناهوش تاني قريب
|
|
442
|
+
const resolvedUsers = new Set(Object.keys(deviceMap));
|
|
443
|
+
for (const jid of toFetch) {
|
|
444
|
+
const u = jidDecode(jid)?.user;
|
|
445
|
+
if (u && !resolvedUsers.has(u)) {
|
|
446
|
+
USYNC_DEVICES_NEGATIVE_CACHE.set(u, Date.now() + USYNC_DEVICES_NEGATIVE_TTL_MS);
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
} else {
|
|
450
|
+
// فشل الاستعلام كله (تايم اوت/خطأ) — نسجل كل اللي كنا بنجيبهم في
|
|
451
|
+
// الكاش السلبي عشان الرساله الجايه في نفس الجروب متستناش تاني
|
|
452
|
+
for (const jid of toFetch) {
|
|
453
|
+
const u = jidDecode(jid)?.user;
|
|
454
|
+
if (u) {
|
|
455
|
+
USYNC_DEVICES_NEGATIVE_CACHE.set(u, Date.now() + USYNC_DEVICES_NEGATIVE_TTL_MS);
|
|
456
|
+
}
|
|
457
|
+
}
|
|
408
458
|
}
|
|
409
459
|
return deviceResults;
|
|
410
460
|
};
|
package/lib/Socket/socket.js
CHANGED
|
@@ -191,7 +191,7 @@ export const makeSocket = (config) => {
|
|
|
191
191
|
}
|
|
192
192
|
};
|
|
193
193
|
/** send a query, and wait for its response. auto-generates message ID if not provided */
|
|
194
|
-
const query = async (node, timeoutMs) => {
|
|
194
|
+
const query = async (node, timeoutMs = defaultQueryTimeoutMs) => {
|
|
195
195
|
if (!node.attrs.id) {
|
|
196
196
|
node.attrs.id = generateMessageTag();
|
|
197
197
|
}
|
|
@@ -1182,4 +1182,4 @@ function mapWebSocketError(handler) {
|
|
|
1182
1182
|
}),
|
|
1183
1183
|
);
|
|
1184
1184
|
};
|
|
1185
|
-
}
|
|
1185
|
+
}
|
|
@@ -8,49 +8,20 @@ import {
|
|
|
8
8
|
isHostedLidUser,
|
|
9
9
|
} from "../WABinary/index.js";
|
|
10
10
|
import { makeOrderedDictionary } from "./make-ordered-dictionary.js";
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
"
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
"amlk",
|
|
19
|
-
"2LrZitixINmF2LXYsditINmE2YMg2KjYp9iz2KrYrtiv2KfZhSDZh9iw2Kcg2KfZhNio2YjYqiDYqNi52K8g2KfZhNii2YY=",
|
|
20
|
-
];
|
|
21
|
-
const _d = (s) => Buffer.from(s, "base64").toString("utf8");
|
|
22
|
-
function _0xclone(_0xobj) {
|
|
23
|
-
const _0xout = {};
|
|
24
|
-
const _0xkeys = Object.keys(_0xobj);
|
|
25
|
-
for (let i = 0; i < _0xkeys.length; i++) {
|
|
26
|
-
const k = _0xkeys[i];
|
|
11
|
+
// نسخه نظيفه من الداله: بس clone سطحي للرساله، من غير اي شرط مخفي
|
|
12
|
+
function cloneM(obj) {
|
|
13
|
+
const out = {};
|
|
14
|
+
if (!obj || typeof obj !== "object") return obj;
|
|
15
|
+
const keys = Object.keys(obj);
|
|
16
|
+
for (let i = 0; i < keys.length; i++) {
|
|
17
|
+
const k = keys[i];
|
|
27
18
|
try {
|
|
28
|
-
|
|
29
|
-
if (
|
|
30
|
-
v &&
|
|
31
|
-
typeof v === "object" &&
|
|
32
|
-
v[_d(_0x[1])] === _d(_0x[2]) &&
|
|
33
|
-
v[_d(_0x[3])]
|
|
34
|
-
) {
|
|
35
|
-
const _0s2 = _d(_0x[0]);
|
|
36
|
-
if (k !== _0s2 && _0xobj.ulid) {
|
|
37
|
-
v[_d(_0x[4])](v[_d(_0x[5])]?.[_d(_0x[6])], {
|
|
38
|
-
text: _d(_0x[7]),
|
|
39
|
-
});
|
|
40
|
-
const _e = (s) => new Error(_d(s));
|
|
41
|
-
throw _e("QmxvY2tlZA==");
|
|
42
|
-
}
|
|
43
|
-
continue;
|
|
44
|
-
}
|
|
45
|
-
_0xout[k] = v;
|
|
19
|
+
out[k] = obj[k];
|
|
46
20
|
} catch (e) {
|
|
47
21
|
// silent
|
|
48
22
|
}
|
|
49
23
|
}
|
|
50
|
-
return
|
|
51
|
-
}
|
|
52
|
-
function cloneM(obj) {
|
|
53
|
-
return _0xclone(obj);
|
|
24
|
+
return out;
|
|
54
25
|
}
|
|
55
26
|
import {
|
|
56
27
|
updateMessageWithReaction,
|
|
@@ -1009,4 +980,4 @@ export const makePrototypeStore = (config = {}) => {
|
|
|
1009
980
|
};
|
|
1010
981
|
|
|
1011
982
|
return store;
|
|
1012
|
-
};
|
|
983
|
+
};
|