@prototypevip/baileys 0.0.6 → 0.0.8

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.
@@ -452,9 +452,14 @@ export const extractGroupMetadata = (result) => {
452
452
  ? id
453
453
  : undefined;
454
454
  return {
455
- id: phone,
455
+ // لو مفيش رقم ظاهر (حساب يوزرنيم/خاصية إخفاء الرقم)، استخدم الـ
456
+ // LID بدل ما تسيبها undefined — undefined كانت بتوصل لقايمة
457
+ // المشاركين اللي بتتبعت لـ getUSyncDevices وتكسر استعلام
458
+ // الأجهزة للجروب كله، مع إن الاستعلام المباشر بالـ LID بيرجع
459
+ // فورًا لو استخدمناه صح
460
+ id: phone || lid,
456
461
  lid: lid,
457
- jid: phone,
462
+ jid: phone || lid,
458
463
  admin: attrs.type || false,
459
464
  };
460
465
  },
@@ -1,14 +1,29 @@
1
1
  import { DEFAULT_CONNECTION_CONFIG } from "../Defaults/index.js";
2
2
  import { makeCommunitiesSocket } from "./communities.js";
3
- const makeWASocket = (config) => {
4
- delete config.userDevicesCache;
5
- const newConfig = { ...DEFAULT_CONNECTION_CONFIG, ...config };
3
+
4
+ /**
5
+ * Create a WhatsApp socket (clean — no anti-ban wrapper).
6
+ */
7
+ const makeWASocket = (config = {}) => {
8
+ // strip antiBan options if present so they don't leak into internal config
9
+ const {
10
+ antiBan,
11
+ antiBanWarmUpState,
12
+ antiBanWrapOptions,
13
+ ...restConfig
14
+ } = config;
15
+
16
+ delete restConfig.userDevicesCache;
17
+ const newConfig = { ...DEFAULT_CONNECTION_CONFIG, ...restConfig };
18
+
6
19
  let sock;
7
20
  const originalGetMessage = newConfig.getMessage;
8
21
  newConfig.getMessage = async function (key) {
9
22
  return originalGetMessage.call(sock || this, key);
10
23
  };
24
+
11
25
  sock = makeCommunitiesSocket(newConfig);
12
26
  return sock;
13
27
  };
28
+
14
29
  export default makeWASocket;
@@ -70,11 +70,6 @@ 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
74
  export const makeMessagesSocket = (config) => {
80
75
  const {
@@ -265,7 +260,7 @@ export const makeMessagesSocket = (config) => {
265
260
  await sendReceipts(keys, readType);
266
261
  };
267
262
  /** Fetch all the devices we've to send a message to */ const getUSyncDevices =
268
- async (jids, useCache, ignoreZeroDevices) => {
263
+ async (jids, useCache, ignoreZeroDevices, timeoutMs) => {
269
264
  const deviceResults = [];
270
265
  if (!useCache) {
271
266
  logger.debug("not using cache for devices");
@@ -290,15 +285,7 @@ export const makeMessagesSocket = (config) => {
290
285
  const usersToFetch = jidsWithUser.map((j) => j?.user).filter(Boolean);
291
286
  mgetDevices = await userDevicesCache.mget(usersToFetch);
292
287
  }
293
- const now = Date.now();
294
288
  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
- }
302
289
  if (useCache) {
303
290
  const devices =
304
291
  mgetDevices?.[user] ||
@@ -329,32 +316,49 @@ export const makeMessagesSocket = (config) => {
329
316
  if (user) requestedLidUsers.add(user);
330
317
  }
331
318
  }
332
- const query = new USyncQuery()
333
- .withContext("message")
334
- .withDeviceProtocol()
335
- .withLIDProtocol();
336
- for (const jid of toFetch) {
337
- query.withUser(new USyncUser().withId(jid));
319
+ // بنقسم اللي محتاجين استعلام لمجموعات صغيرة (15 لكل مجموعة) بدل
320
+ // استعلام واحد للجروب كله، كل مجموعة بمهلتها الخاصة (4 ثواني). كده
321
+ // لو حساب واحد بس (يوزرنيم/lid مش قابل للاكتشاف) بطّأ، هو بس اللي
322
+ // بيتأثر — باقي الجروب بيتحل ويرد بسرعته الطبيعية زي أي جروب تاني،
323
+ // مفيش تراكم أو حجز 5 دقايق (كل رسالة بتاخد فرصتها من جديد).
324
+ // بارامتر اختياري: مهلة أطول لو النداء ده مش وقت رد حقيقي (تسخين
325
+ // كاش في الخلفية مثلاً) — من غير ما نغيّر سلوك أي نداء موجود قبل
326
+ // كده (الافتراضي لسه 4 ثواني زي ما هو).
327
+ const USYNC_DEVICES_TIMEOUT_MS = timeoutMs || 4000;
328
+ const CHUNK_SIZE = 15;
329
+ const chunks = [];
330
+ for (let i = 0; i < toFetch.length; i += CHUNK_SIZE) {
331
+ chunks.push(toFetch.slice(i, i + CHUNK_SIZE));
338
332
  }
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;
333
+ const runChunk = async (chunkJids) => {
334
+ const chunkQuery = new USyncQuery()
335
+ .withContext("message")
336
+ .withDeviceProtocol()
337
+ .withLIDProtocol();
338
+ for (const jid of chunkJids) {
339
+ chunkQuery.withUser(new USyncUser().withId(jid));
340
+ }
341
+ try {
342
+ return await Promise.race([
343
+ sock.executeUSyncQuery(chunkQuery),
344
+ new Promise((resolve) =>
345
+ setTimeout(() => resolve(null), USYNC_DEVICES_TIMEOUT_MS),
346
+ ),
347
+ ]);
348
+ } catch (e) {
349
+ logger.warn(
350
+ { e: e, chunkSize: chunkJids.length },
351
+ "USync devices query failed/timed out for this chunk — continuing with the rest",
352
+ );
353
+ return null;
354
+ }
355
+ };
356
+ const chunkResults = await Promise.all(chunks.map(runChunk));
357
+ const combinedList = [];
358
+ for (const chunkResult of chunkResults) {
359
+ if (chunkResult?.list?.length) combinedList.push(...chunkResult.list);
357
360
  }
361
+ const result = combinedList.length ? { list: combinedList } : null;
358
362
  if (result) {
359
363
  const lidResults = result.list.filter((a) => !!a.lid);
360
364
  if (lidResults.length > 0) {
@@ -437,24 +441,6 @@ export const makeMessagesSocket = (config) => {
437
441
  logger.warn({ error: error }, "failed to store user device lists");
438
442
  }
439
443
  }
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
- }
458
444
  }
459
445
  return deviceResults;
460
446
  };
package/lib/index.js CHANGED
@@ -8,5 +8,8 @@ export * from "./WABinary/index.js";
8
8
  export * from "./WAM/index.js";
9
9
  export * from "./WAUSync/index.js";
10
10
  export * from "./Store/cache-factory.js";
11
+
12
+ export { wrapSocket, wrapSocketWithFingerprint } from "./Socket/index.js";
13
+
11
14
  export { makeWASocket };
12
15
  export default makeWASocket;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@prototypevip/baileys",
3
- "version": "0.0.6",
4
- "description": "A simple fork of Baileys for WhatsApp automation",
3
+ "version": "0.0.8",
4
+ "description": "Baileys fork (@prototypevip/baileys) — clean, without anti-ban",
5
5
  "main": "lib/index.js",
6
6
  "type": "module",
7
7
  "scripts": {