@realvare/baileys 1.0.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 (201) hide show
  1. package/LICENSE +41 -0
  2. package/README.MD +2227 -0
  3. package/WAProto/GenerateStatics.sh +4 -0
  4. package/WAProto/WAProto.proto +5604 -0
  5. package/WAProto/index.d.ts +63156 -0
  6. package/WAProto/index.js +195638 -0
  7. package/WAProto/p.html +1 -0
  8. package/engine-requirements.js +10 -0
  9. package/lib/Defaults/baileys-version.json +3 -0
  10. package/lib/Defaults/index.d.ts +53 -0
  11. package/lib/Defaults/index.js +108 -0
  12. package/lib/Signal/Group/ciphertext-message.d.ts +9 -0
  13. package/lib/Signal/Group/ciphertext-message.js +15 -0
  14. package/lib/Signal/Group/group-session-builder.d.ts +14 -0
  15. package/lib/Signal/Group/group-session-builder.js +64 -0
  16. package/lib/Signal/Group/group_cipher.d.ts +17 -0
  17. package/lib/Signal/Group/group_cipher.js +96 -0
  18. package/lib/Signal/Group/index.d.ts +11 -0
  19. package/lib/Signal/Group/index.js +57 -0
  20. package/lib/Signal/Group/keyhelper.d.ts +10 -0
  21. package/lib/Signal/Group/keyhelper.js +55 -0
  22. package/lib/Signal/Group/queue-job.d.ts +1 -0
  23. package/lib/Signal/Group/queue-job.js +57 -0
  24. package/lib/Signal/Group/sender-chain-key.d.ts +13 -0
  25. package/lib/Signal/Group/sender-chain-key.js +34 -0
  26. package/lib/Signal/Group/sender-key-distribution-message.d.ts +16 -0
  27. package/lib/Signal/Group/sender-key-distribution-message.js +66 -0
  28. package/lib/Signal/Group/sender-key-message.d.ts +18 -0
  29. package/lib/Signal/Group/sender-key-message.js +69 -0
  30. package/lib/Signal/Group/sender-key-name.d.ts +17 -0
  31. package/lib/Signal/Group/sender-key-name.js +51 -0
  32. package/lib/Signal/Group/sender-key-record.d.ts +30 -0
  33. package/lib/Signal/Group/sender-key-record.js +53 -0
  34. package/lib/Signal/Group/sender-key-state.d.ts +38 -0
  35. package/lib/Signal/Group/sender-key-state.js +99 -0
  36. package/lib/Signal/Group/sender-message-key.d.ts +11 -0
  37. package/lib/Signal/Group/sender-message-key.js +29 -0
  38. package/lib/Signal/libsignal.d.ts +3 -0
  39. package/lib/Signal/libsignal.js +174 -0
  40. package/lib/Socket/Client/index.d.ts +2 -0
  41. package/lib/Socket/Client/index.js +18 -0
  42. package/lib/Socket/Client/types.d.ts +16 -0
  43. package/lib/Socket/Client/types.js +13 -0
  44. package/lib/Socket/Client/websocket.d.ts +13 -0
  45. package/lib/Socket/Client/websocket.js +111 -0
  46. package/lib/Socket/business.d.ts +172 -0
  47. package/lib/Socket/business.js +260 -0
  48. package/lib/Socket/chats.d.ts +85 -0
  49. package/lib/Socket/chats.js +1094 -0
  50. package/lib/Socket/groups.d.ts +124 -0
  51. package/lib/Socket/groups.js +423 -0
  52. package/lib/Socket/index.d.ts +172 -0
  53. package/lib/Socket/index.js +32 -0
  54. package/lib/Socket/messages-interactive.js +259 -0
  55. package/lib/Socket/messages-recv.d.ts +161 -0
  56. package/lib/Socket/messages-recv.js +1518 -0
  57. package/lib/Socket/messages-send.d.ts +151 -0
  58. package/lib/Socket/messages-send.js +1085 -0
  59. package/lib/Socket/newsletter.d.ts +136 -0
  60. package/lib/Socket/newsletter.js +250 -0
  61. package/lib/Socket/socket.d.ts +43 -0
  62. package/lib/Socket/socket.js +1269 -0
  63. package/lib/Socket/usync.d.ts +36 -0
  64. package/lib/Socket/usync.js +123 -0
  65. package/lib/Store/index.d.ts +2 -0
  66. package/lib/Store/index.js +8 -0
  67. package/lib/Store/make-in-memory-store.d.ts +118 -0
  68. package/lib/Store/make-in-memory-store.js +499 -0
  69. package/lib/Store/make-ordered-dictionary.d.ts +13 -0
  70. package/lib/Store/make-ordered-dictionary.js +81 -0
  71. package/lib/Store/object-repository.d.ts +10 -0
  72. package/lib/Store/object-repository.js +27 -0
  73. package/lib/Types/Auth.d.ts +114 -0
  74. package/lib/Types/Auth.js +2 -0
  75. package/lib/Types/Call.d.ts +13 -0
  76. package/lib/Types/Call.js +2 -0
  77. package/lib/Types/Chat.d.ts +109 -0
  78. package/lib/Types/Chat.js +4 -0
  79. package/lib/Types/Contact.d.ts +29 -0
  80. package/lib/Types/Contact.js +2 -0
  81. package/lib/Types/Events.d.ts +199 -0
  82. package/lib/Types/Events.js +2 -0
  83. package/lib/Types/GroupMetadata.d.ts +64 -0
  84. package/lib/Types/GroupMetadata.js +2 -0
  85. package/lib/Types/Label.d.ts +35 -0
  86. package/lib/Types/Label.js +27 -0
  87. package/lib/Types/LabelAssociation.d.ts +29 -0
  88. package/lib/Types/LabelAssociation.js +9 -0
  89. package/lib/Types/Message.d.ts +741 -0
  90. package/lib/Types/Message.js +7 -0
  91. package/lib/Types/Newsletter.d.ts +22 -0
  92. package/lib/Types/Newsletter.js +18 -0
  93. package/lib/Types/Product.d.ts +78 -0
  94. package/lib/Types/Product.js +2 -0
  95. package/lib/Types/Signal.d.ts +63 -0
  96. package/lib/Types/Signal.js +2 -0
  97. package/lib/Types/Socket.d.ts +134 -0
  98. package/lib/Types/Socket.js +2 -0
  99. package/lib/Types/State.d.ts +27 -0
  100. package/lib/Types/State.js +2 -0
  101. package/lib/Types/USync.d.ts +25 -0
  102. package/lib/Types/USync.js +2 -0
  103. package/lib/Types/index.d.ts +65 -0
  104. package/lib/Types/index.js +43 -0
  105. package/lib/Utils/auth-utils.d.ts +18 -0
  106. package/lib/Utils/auth-utils.js +209 -0
  107. package/lib/Utils/baileys-event-stream.d.ts +16 -0
  108. package/lib/Utils/baileys-event-stream.js +63 -0
  109. package/lib/Utils/business.d.ts +22 -0
  110. package/lib/Utils/business.js +234 -0
  111. package/lib/Utils/cache-manager.d.ts +16 -0
  112. package/lib/Utils/cache-manager.js +137 -0
  113. package/lib/Utils/chat-utils.d.ts +70 -0
  114. package/lib/Utils/chat-utils.js +734 -0
  115. package/lib/Utils/crypto.d.ts +40 -0
  116. package/lib/Utils/crypto.js +193 -0
  117. package/lib/Utils/decode-wa-message.d.ts +35 -0
  118. package/lib/Utils/decode-wa-message.js +207 -0
  119. package/lib/Utils/event-buffer.d.ts +35 -0
  120. package/lib/Utils/event-buffer.js +624 -0
  121. package/lib/Utils/generics.d.ts +89 -0
  122. package/lib/Utils/generics.js +448 -0
  123. package/lib/Utils/history.d.ts +19 -0
  124. package/lib/Utils/history.js +94 -0
  125. package/lib/Utils/index.d.ts +22 -0
  126. package/lib/Utils/index.js +38 -0
  127. package/lib/Utils/jid-validation.d.ts +2 -0
  128. package/lib/Utils/jid-validation.js +186 -0
  129. package/lib/Utils/link-preview.d.ts +21 -0
  130. package/lib/Utils/link-preview.js +152 -0
  131. package/lib/Utils/logger.d.ts +11 -0
  132. package/lib/Utils/logger.js +59 -0
  133. package/lib/Utils/lt-hash.d.ts +12 -0
  134. package/lib/Utils/lt-hash.js +51 -0
  135. package/lib/Utils/make-mutex.d.ts +7 -0
  136. package/lib/Utils/make-mutex.js +43 -0
  137. package/lib/Utils/messages-media.d.ts +120 -0
  138. package/lib/Utils/messages-media.js +848 -0
  139. package/lib/Utils/messages.d.ts +131 -0
  140. package/lib/Utils/messages.js +1843 -0
  141. package/lib/Utils/newsletter-utils.d.ts +2 -0
  142. package/lib/Utils/newsletter-utils.js +48 -0
  143. package/lib/Utils/noise-handler.d.ts +19 -0
  144. package/lib/Utils/noise-handler.js +150 -0
  145. package/lib/Utils/performance-config.d.ts +70 -0
  146. package/lib/Utils/performance-config.js +183 -0
  147. package/lib/Utils/process-message.d.ts +42 -0
  148. package/lib/Utils/process-message.js +498 -0
  149. package/lib/Utils/rate-limiter.js +90 -0
  150. package/lib/Utils/retry.js +66 -0
  151. package/lib/Utils/signal.d.ts +33 -0
  152. package/lib/Utils/signal.js +153 -0
  153. package/lib/Utils/use-multi-file-auth-state.d.ts +12 -0
  154. package/lib/Utils/use-multi-file-auth-state.js +129 -0
  155. package/lib/Utils/validate-connection.d.ts +10 -0
  156. package/lib/Utils/validate-connection.js +233 -0
  157. package/lib/WABinary/constants.d.ts +27 -0
  158. package/lib/WABinary/constants.js +1303 -0
  159. package/lib/WABinary/decode.d.ts +6 -0
  160. package/lib/WABinary/decode.js +279 -0
  161. package/lib/WABinary/encode.d.ts +2 -0
  162. package/lib/WABinary/encode.js +264 -0
  163. package/lib/WABinary/generic-utils.d.ts +14 -0
  164. package/lib/WABinary/generic-utils.js +114 -0
  165. package/lib/WABinary/index.d.ts +5 -0
  166. package/lib/WABinary/index.js +21 -0
  167. package/lib/WABinary/jid-utils.d.ts +38 -0
  168. package/lib/WABinary/jid-utils.js +402 -0
  169. package/lib/WABinary/types.d.ts +18 -0
  170. package/lib/WABinary/types.js +2 -0
  171. package/lib/WAM/BinaryInfo.d.ts +8 -0
  172. package/lib/WAM/BinaryInfo.js +13 -0
  173. package/lib/WAM/constants.d.ts +38 -0
  174. package/lib/WAM/constants.js +15350 -0
  175. package/lib/WAM/encode.d.ts +2 -0
  176. package/lib/WAM/encode.js +155 -0
  177. package/lib/WAM/index.d.ts +3 -0
  178. package/lib/WAM/index.js +19 -0
  179. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +9 -0
  180. package/lib/WAUSync/Protocols/USyncContactProtocol.js +102 -0
  181. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +22 -0
  182. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +110 -0
  183. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +12 -0
  184. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +30 -0
  185. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +12 -0
  186. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +42 -0
  187. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +25 -0
  188. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +53 -0
  189. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +8 -0
  190. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +24 -0
  191. package/lib/WAUSync/Protocols/index.d.ts +4 -0
  192. package/lib/WAUSync/Protocols/index.js +20 -0
  193. package/lib/WAUSync/USyncQuery.d.ts +28 -0
  194. package/lib/WAUSync/USyncQuery.js +147 -0
  195. package/lib/WAUSync/USyncUser.d.ts +12 -0
  196. package/lib/WAUSync/USyncUser.js +26 -0
  197. package/lib/WAUSync/index.d.ts +3 -0
  198. package/lib/WAUSync/index.js +19 -0
  199. package/lib/index.d.ts +17 -0
  200. package/lib/index.js +53 -0
  201. package/package.json +109 -0
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./encode"), exports);
18
+ __exportStar(require("./decode"), exports);
19
+ __exportStar(require("./generic-utils"), exports);
20
+ __exportStar(require("./jid-utils"), exports);
21
+ __exportStar(require("./types"), exports);
@@ -0,0 +1,38 @@
1
+ export declare const S_WHATSAPP_NET = "@s.whatsapp.net";
2
+ export declare const OFFICIAL_BIZ_JID = "16505361212@c.us";
3
+ export declare const SERVER_JID = "server@c.us";
4
+ export declare const PSA_WID = "0@c.us";
5
+ export declare const STORIES_JID = "status@broadcast";
6
+ export declare const META_AI_JID = "13135550002@c.us";
7
+ export type JidServer = 'c.us' | 'g.us' | 'broadcast' | 's.whatsapp.net' | 'call' | 'lid' | 'newsletter' | 'bot';
8
+ export type JidWithDevice = {
9
+ user: string;
10
+ device?: number;
11
+ };
12
+ export type FullJid = JidWithDevice & {
13
+ server: JidServer;
14
+ domainType?: number;
15
+ };
16
+ export declare const jidEncode: (user: string | number | null, server: JidServer, device?: number, agent?: number) => string;
17
+ export declare const jidDecode: (jid: string | undefined) => FullJid | undefined;
18
+ /** is the jid a user */
19
+ export declare const areJidsSameUser: (jid1: string | undefined, jid2: string | undefined) => boolean;
20
+ /** is the jid Meta IA */
21
+ export declare const isJidMetaAi: (jid: string | undefined) => boolean | undefined;
22
+ /** is the jid a user */
23
+ export declare const isJidUser: (jid: string | undefined) => boolean | undefined;
24
+ /** is the jid a group */
25
+ export declare const isLidUser: (jid: string | undefined) => boolean | undefined;
26
+ /** is the jid a broadcast */
27
+ export declare const isJidBroadcast: (jid: string | undefined) => boolean | undefined;
28
+ /** is the jid a newsletter */
29
+ export declare const isJidNewsletter: (jid: string | undefined) => boolean | undefined;
30
+ /** is the jid a group */
31
+ export declare const isJidGroup: (jid: string | undefined) => boolean | undefined;
32
+ /** is the jid the status broadcast */
33
+ export declare const isJidStatusBroadcast: (jid: string) => jid is "status@broadcast";
34
+ export declare const isJidBot: (jid: string | undefined) => boolean | "" | undefined;
35
+ export declare const jidNormalizedUser: (jid: string | undefined) => string;
36
+ export declare const lidToJid: (jid: string) => string;
37
+ export declare const resolveJid: (jid: string | undefined) => string | undefined;
38
+ export declare const getBotJid: (jid: string) => string;
@@ -0,0 +1,402 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateAndConvertLidToJid = exports.validateAndCleanJid = exports.lidToJidEnhanced = exports.resolveJid = exports.lidToJid = exports.getBotJid = exports.jidNormalizedUser = exports.isJidBot = exports.isJidStatusBroadcast = exports.isJidGroup = exports.isJidNewsletter = exports.isJidBroadcast = exports.isLid = exports.assertLid = exports.isJidUser = exports.isJidMetaAi = exports.areJidsSameUser = exports.jidDecode = exports.jidEncode = exports.META_AI_JID = exports.STORIES_JID = exports.PSA_WID = exports.SERVER_JID = exports.OFFICIAL_BIZ_JID = exports.S_WHATSAPP_NET = void 0;
4
+ exports.S_WHATSAPP_NET = '@s.whatsapp.net';
5
+ exports.OFFICIAL_BIZ_JID = '16505361212@c.us';
6
+ exports.SERVER_JID = 'server@c.us';
7
+ exports.PSA_WID = '0@c.us';
8
+ exports.STORIES_JID = 'status@broadcast';
9
+ exports.META_AI_JID = '13135550002@c.us';
10
+ const jidEncode = (user, server, device, agent) => {
11
+ return `${user || ''}${!!agent ? `_${agent}` : ''}${!!device ? `:${device}` : ''}@${server}`;
12
+ };
13
+ exports.jidEncode = jidEncode;
14
+ const jidDecode = (jid) => {
15
+ const sepIdx = typeof jid === 'string' ? jid.indexOf('@') : -1;
16
+ if (sepIdx < 0) {
17
+ return undefined;
18
+ }
19
+ const server = jid.slice(sepIdx + 1);
20
+ const userCombined = jid.slice(0, sepIdx);
21
+ const [userAgent, device] = userCombined.split(':');
22
+ const user = userAgent.split('_')[0];
23
+ return {
24
+ server: server,
25
+ user,
26
+ domainType: server === 'lid' ? 1 : 0,
27
+ device: device ? +device : undefined
28
+ };
29
+ };
30
+ exports.jidDecode = jidDecode;
31
+ /** is the jid a user */
32
+ const areJidsSameUser = (jid1, jid2) => {
33
+ var _a, _b;
34
+ return (((_a = (0, exports.jidDecode)(jid1)) === null || _a === void 0 ? void 0 : _a.user) === ((_b = (0, exports.jidDecode)(jid2)) === null || _b === void 0 ? void 0 : _b.user));
35
+ };
36
+ exports.areJidsSameUser = areJidsSameUser;
37
+ /** is the jid Meta IA */
38
+ const isJidMetaAi = (jid) => (jid === null || jid === void 0 ? void 0 : jid.endsWith('@bot'));
39
+ exports.isJidMetaAi = isJidMetaAi;
40
+ /** is the jid a user */
41
+ const isJidUser = (jid) => (jid === null || jid === void 0 ? void 0 : jid.endsWith('@s.whatsapp.net'));
42
+ exports.isJidUser = isJidUser;
43
+ /** is the jid a group */
44
+ const isLid = (jid) => (jid === null || jid === void 0 ? void 0 : jid.endsWith('@lid'));
45
+ exports.isLid = isLid;
46
+ exports.isLidUser = isLid;
47
+ /** assert the jid is a LID */
48
+ const assertLid = (jid) => {
49
+ if (!isLid(jid)) {
50
+ throw new Error(`JID "${jid}" is not a LID`);
51
+ }
52
+ };
53
+ exports.assertLid = assertLid;
54
+ /** is the jid a broadcast */
55
+ const isJidBroadcast = (jid) => (jid === null || jid === void 0 ? void 0 : jid.endsWith('@broadcast'));
56
+ exports.isJidBroadcast = isJidBroadcast;
57
+ /** is the jid a newsletter */
58
+ const isJidNewsletter = (jid) => (jid === null || jid === void 0 ? void 0 : jid.endsWith('@newsletter'));
59
+ exports.isJidNewsletter = isJidNewsletter;
60
+ /** is the jid a group */
61
+ const isJidGroup = (jid) => (jid === null || jid === void 0 ? void 0 : jid.endsWith('@g.us'));
62
+ exports.isJidGroup = isJidGroup;
63
+ /** is the jid the status broadcast */
64
+ const isJidStatusBroadcast = (jid) => jid === 'status@broadcast';
65
+ exports.isJidStatusBroadcast = isJidStatusBroadcast;
66
+ const botRegexp = /^1313555\d{4}$|^131655500\d{2}$/;
67
+ const isJidBot = (jid) => (jid && botRegexp.test(jid.split('@')[0]) && jid.endsWith('@c.us'));
68
+ exports.isJidBot = isJidBot;
69
+ const jidNormalizedUser = (jid) => {
70
+ const result = (0, exports.jidDecode)(jid);
71
+ if (!result) {
72
+ return '';
73
+ }
74
+ const { user, server } = result;
75
+ return (0, exports.jidEncode)(user, server === 'c.us' ? 's.whatsapp.net' : server);
76
+ };
77
+ exports.jidNormalizedUser = jidNormalizedUser;
78
+ // Node.js helpers for optional dynamic bot map loading
79
+ const fs = require('fs');
80
+ const path = require('path');
81
+
82
+ // LRU cache semplice per lidToJid (leggero, senza dipendenze)
83
+ class SimpleLRU {
84
+ constructor(maxSize = 2000, ttl = 5 * 60 * 1000) {
85
+ this.maxSize = maxSize;
86
+ this.ttl = ttl;
87
+ this.map = new Map(); // mantiene l'ordine di inserimento
88
+ }
89
+ get(key) {
90
+ const entry = this.map.get(key);
91
+ if (!entry)
92
+ return undefined;
93
+ if (Date.now() - entry.ts > this.ttl) {
94
+ this.map.delete(key);
95
+ return undefined;
96
+ }
97
+ // promuovi a MRU
98
+ this.map.delete(key);
99
+ this.map.set(key, entry);
100
+ return entry.value;
101
+ }
102
+ set(key, value) {
103
+ if (this.map.has(key))
104
+ this.map.delete(key);
105
+ this.map.set(key, { value, ts: Date.now() });
106
+ if (this.map.size > this.maxSize) {
107
+ // rimuovi LRU (primo elemento)
108
+ const it = this.map.keys();
109
+ const lru = it.next().value;
110
+ if (lru)
111
+ this.map.delete(lru);
112
+ }
113
+ }
114
+ }
115
+
116
+ const DEFAULT_LID_CACHE_TTL = 5 * 60 * 1000; // 5 minuti
117
+ const DEFAULT_LID_CACHE_MAX = 2000;
118
+ const lidToJidCache = new SimpleLRU(DEFAULT_LID_CACHE_MAX, DEFAULT_LID_CACHE_TTL);
119
+
120
+ // Shared bidirectional LID phone JID cache (module-level singleton)
121
+ // Populated at runtime from sender_pn / participant_pn / phone_number attributes.
122
+ // Used by lidToJid() and messages-recv.js for resolving LIDs to phone JIDs.
123
+ const _sharedLidPhoneMap = new Map();
124
+ const SHARED_MAP_MAX_SIZE = 3000;
125
+
126
+ const sharedLidPhoneCache = {
127
+ /** Set a LID phone mapping (bidirectional) */
128
+ set(lid, phoneJid) {
129
+ if (!lid || !phoneJid || typeof lid !== 'string' || typeof phoneJid !== 'string') return;
130
+ // Normalize phoneJid to ensure @s.whatsapp.net suffix
131
+ if (!phoneJid.includes('@')) {
132
+ phoneJid = phoneJid + '@s.whatsapp.net';
133
+ }
134
+ // Evict oldest entries if too large
135
+ if (_sharedLidPhoneMap.size > SHARED_MAP_MAX_SIZE * 2) {
136
+ const it = _sharedLidPhoneMap.keys();
137
+ const toRemove = Math.floor(_sharedLidPhoneMap.size * 0.25);
138
+ for (let i = 0; i < toRemove; i++) {
139
+ const k = it.next().value;
140
+ if (k === undefined) break;
141
+ _sharedLidPhoneMap.delete(k);
142
+ }
143
+ }
144
+ _sharedLidPhoneMap.set(lid, phoneJid);
145
+ _sharedLidPhoneMap.set(phoneJid, lid);
146
+ // Invalidate lidToJid LRU cache for this LID so it picks up the new mapping
147
+ lidToJidCache.set(lid, phoneJid);
148
+ },
149
+ /** Get the phone JID for a LID, or the LID for a phone JID */
150
+ get(key) {
151
+ return _sharedLidPhoneMap.get(key);
152
+ },
153
+ /** Get LID for a phone JID */
154
+ getLidForPhone(phoneJid) {
155
+ if (!phoneJid) return undefined;
156
+ const val = _sharedLidPhoneMap.get(phoneJid);
157
+ return val && val.endsWith('@lid') ? val : undefined;
158
+ },
159
+ /** Get phone JID for a LID */
160
+ getPhoneForLid(lid) {
161
+ if (!lid) return undefined;
162
+ const val = _sharedLidPhoneMap.get(lid);
163
+ return val && val.endsWith('@s.whatsapp.net') ? val : undefined;
164
+ },
165
+ get size() { return _sharedLidPhoneMap.size; }
166
+ };
167
+
168
+ const lidToJid = (jid) => {
169
+ try {
170
+ if (!jid || typeof jid !== 'string') {
171
+ return jid;
172
+ }
173
+ const cached = lidToJidCache.get(jid);
174
+ if (cached)
175
+ return cached;
176
+
177
+ let result = jid;
178
+ if (jid.endsWith('@lid')) {
179
+ const lidPart = jid.replace('@lid', '');
180
+ // 1) BOT_MAP — known Meta AI bot LIDs
181
+ if (BOT_MAP.has(lidPart)) {
182
+ result = BOT_MAP.get(lidPart) + '@s.whatsapp.net';
183
+ } else {
184
+ // 2) sharedLidPhoneCache — populated at runtime from sender_pn / participant_pn / phone_number
185
+ const phoneFromCache = sharedLidPhoneCache.getPhoneForLid(jid);
186
+ if (phoneFromCache) {
187
+ result = phoneFromCache;
188
+ }
189
+ // 3) LID parts are opaque identifiers, NOT phone numbers.
190
+ // Do not guess — proper resolution happens via sender_pn / participant_pn / lidCache.
191
+ }
192
+ }
193
+
194
+ if (result !== jid) {
195
+ lidToJidCache.set(jid, result);
196
+ }
197
+ return result;
198
+ }
199
+ catch (error) {
200
+ try {
201
+ const { Logger } = require('../Utils/performance-config');
202
+ Logger.error('Error in lidToJid:', error && error.message ? error.message : error, 'Input:', jid);
203
+ } catch (_) {
204
+ // Fallback if logger is not available
205
+ }
206
+ return jid;
207
+ }
208
+ };
209
+ exports.lidToJid = lidToJid;
210
+
211
+ const resolveJid = (jid) => {
212
+ if (typeof jid === 'string' && jid.endsWith('@lid')) {
213
+ return lidToJid(jid);
214
+ }
215
+ return jid;
216
+ };
217
+ exports.resolveJid = resolveJid;
218
+
219
+ /**
220
+ * Enhanced LID to JID conversion with phone number validation
221
+ * Validates that the phone number has a valid international format
222
+ */
223
+ const validateAndConvertLidToJid = async (jid, onWhatsApp) => {
224
+ try {
225
+ if (!jid || typeof jid !== 'string') {
226
+ return jid;
227
+ }
228
+
229
+ // First, try basic conversion
230
+ const convertedJid = lidToJid(jid);
231
+
232
+ // If it's still a LID, return as-is (invalid phone number)
233
+ if (isLid(convertedJid)) {
234
+ return convertedJid;
235
+ }
236
+
237
+ // If it's already a JID (not converted), validate it exists on WhatsApp
238
+ if (!jid.endsWith('@lid') && convertedJid === jid) {
239
+ if (onWhatsApp) {
240
+ try {
241
+ const validation = await onWhatsApp(convertedJid);
242
+ if (validation && validation.length > 0 && validation[0].exists) {
243
+ return convertedJid;
244
+ } else {
245
+ // JID doesn't exist on WhatsApp, return original
246
+ return jid;
247
+ }
248
+ } catch (error) {
249
+ // If validation fails, return converted JID (better than nothing)
250
+ return convertedJid;
251
+ }
252
+ } else {
253
+ // No onWhatsApp available, return as-is
254
+ return convertedJid;
255
+ }
256
+ }
257
+
258
+ // For newly converted JIDs, validate they exist on WhatsApp
259
+ if (convertedJid !== jid && onWhatsApp) {
260
+ try {
261
+ const validation = await onWhatsApp(convertedJid);
262
+ if (validation && validation.length > 0 && validation[0].exists) {
263
+ return convertedJid;
264
+ } else {
265
+ // Converted JID doesn't exist on WhatsApp, keep original LID
266
+ return jid;
267
+ }
268
+ } catch (error) {
269
+ // If validation fails, return converted JID
270
+ return convertedJid;
271
+ }
272
+ }
273
+
274
+ return convertedJid;
275
+ }
276
+ catch (error) {
277
+ try {
278
+ const { Logger } = require('../Utils/performance-config');
279
+ Logger.error('Error in validateAndConvertLidToJid:', error && error.message ? error.message : error, 'Input:', jid);
280
+ } catch (_) {
281
+ // ignore if logger not available
282
+ }
283
+ return jid;
284
+ }
285
+ };
286
+ exports.validateAndConvertLidToJid = validateAndConvertLidToJid;
287
+
288
+ /**
289
+ * Enhanced LID to JID conversion.
290
+ * Uses BOT_MAP + sharedLidPhoneCache. Never guesses based on digit patterns.
291
+ */
292
+ const lidToJidEnhanced = (jid) => {
293
+ // Delegates to lidToJid which already checks BOT_MAP + sharedLidPhoneCache
294
+ return lidToJid(jid);
295
+ };
296
+
297
+ /**
298
+ * Validates and cleans JIDs. For LIDs, attempts resolution via BOT_MAP + sharedLidPhoneCache.
299
+ * Never converts a JID back to LID — that would corrupt stored message keys.
300
+ */
301
+ const validateAndCleanJid = (jid) => {
302
+ if (!jid || typeof jid !== 'string') {
303
+ return jid;
304
+ }
305
+ // If it's a LID, try to resolve it
306
+ if (jid.endsWith('@lid')) {
307
+ return lidToJid(jid);
308
+ }
309
+ // For all other JIDs, return as-is. Do not try to validate phone numbers
310
+ // or convert back to LID — that breaks message key matching.
311
+ return jid;
312
+ };
313
+
314
+ exports.lidToJidEnhanced = lidToJidEnhanced;
315
+ exports.validateAndCleanJid = validateAndCleanJid;
316
+
317
+ // Static BOT map kept for fallback. Created once to avoid recreating Map on each call.
318
+ const BOT_MAP_STATIC = new Map([["867051314767696", "13135550002"], ["1061492271844689", "13135550005"], ["245886058483988", "13135550009"], ["3509905702656130", "13135550012"], ["1059680132034576", "13135550013"], ["715681030623646", "13135550014"], ["1644971366323052", "13135550015"], ["582497970646566", "13135550019"], ["645459357769306", "13135550022"], ["294997126699143", "13135550023"], ["1522631578502677", "13135550027"], ["719421926276396", "13135550030"], ["1788488635002167", "13135550031"], ["24232338603080193", "13135550033"], ["689289903143209", "13135550035"], ["871626054177096", "13135550039"], ["362351902849370", "13135550042"], ["1744617646041527", "13135550043"], ["893887762270570", "13135550046"], ["1155032702135830", "13135550047"], ["333931965993883", "13135550048"], ["853748013058752", "13135550049"], ["1559068611564819", "13135550053"], ["890487432705716", "13135550054"], ["240254602395494", "13135550055"], ["1578420349663261", "13135550062"], ["322908887140421", "13135550065"], ["3713961535514771", "13135550067"], ["997884654811738", "13135550070"], ["403157239387035", "13135550081"], ["535242369074963", "13135550082"], ["946293427247659", "13135550083"], ["3664707673802291", "13135550084"], ["1821827464894892", "13135550085"], ["1760312477828757", "13135550086"], ["439480398712216", "13135550087"], ["1876735582800984", "13135550088"], ["984025089825661", "13135550089"], ["1001336351558186", "13135550090"], ["3739346336347061", "13135550091"], ["3632749426974980", "13135550092"], ["427864203481615", "13135550093"], ["1434734570493055", "13135550094"], ["992873449225921", "13135550095"], ["813087747426445", "13135550096"], ["806369104931434", "13135550098"], ["1220982902403148", "13135550099"], ["1365893374104393", "13135550100"], ["686482033622048", "13135550200"], ["1454999838411253", "13135550201"], ["718584497008509", "13135550202"], ["743520384213443", "13135550301"], ["1147715789823789", "13135550302"], ["1173034540372201", "13135550303"], ["974785541030953", "13135550304"], ["1122200255531507", "13135550305"], ["899669714813162", "13135550306"], ["631880108970650", "13135550307"], ["435816149330026", "13135550308"], ["1368717161184556", "13135550309"], ["7849963461784891", "13135550310"], ["3609617065968984", "13135550312"], ["356273980574602", "13135550313"], ["1043447920539760", "13135550314"], ["1052764336525346", "13135550315"], ["2631118843732685", "13135550316"], ["510505411332176", "13135550317"], ["1945664239227513", "13135550318"], ["1518594378764656", "13135550319"], ["1378821579456138", "13135550320"], ["490214716896013", "13135550321"], ["1028577858870699", "13135550322"], ["308915665545959", "13135550323"], ["845884253678900", "13135550324"], ["995031308616442", "13135550325"], ["2787365464763437", "13135550326"], ["1532790990671645", "13135550327"], ["302617036180485", "13135550328"], ["723376723197227", "13135550329"], ["8393570407377966", "13135550330"], ["1931159970680725", "13135550331"], ["401073885688605", "13135550332"], ["2234478453565422", "13135550334"], ["814748673882312", "13135550335"], ["26133635056281592", "13135550336"], ["1439804456676119", "13135550337"], ["889851503172161", "13135550338"], ["1018283232836879", "13135550339"], ["1012781386779537", "13135559000"], ["823280953239532", "13135559001"], ["1597090934573334", "13135559002"], ["485965054020343", "13135559003"], ["1033381648363446", "13135559004"], ["491802010206446", "13135559005"], ["1017139033184870", "13135559006"], ["499638325922174", "13135559008"], ["468946335863664", "13135559009"], ["1570389776875816", "13135559010"], ["1004342694328995", "13135559011"], ["1012240323971229", "13135559012"], ["392171787222419", "13135559013"], ["952081212945019", "13135559016"], ["444507875070178", "13135559017"], ["1274819440594668", "13135559018"], ["1397041101147050", "13135559019"], ["425657699872640", "13135559020"], ["532292852562549", "13135559021"], ["705863241720292", "13135559022"], ["476449815183959", "13135559023"], ["488071553854222", "13135559024"], ["468693832665397", "13135559025"], ["517422564037340", "13135559026"], ["819805466613825", "13135559027"], ["1847708235641382", "13135559028"], ["716282970644228", "13135559029"], ["521655380527741", "13135559030"], ["476193631941905", "13135559031"], ["485600497445562", "13135559032"], ["440217235683910", "13135559033"], ["523342446758478", "13135559034"], ["514784864360240", "13135559035"], ["505790121814530", "13135559036"], ["420008964419580", "13135559037"], ["492141680204555", "13135559038"], ["388462787271952", "13135559039"], ["423473920752072", "13135559040"], ["489574180468229", "13135559041"], ["432360635854105", "13135559042"], ["477878201669248", "13135559043"], ["351656951234045", "13135559044"], ["430178036732582", "13135559045"], ["434537312944552", "13135559046"], ["1240614300631808", "13135559047"], ["473135945605128", "13135559048"], ["423669800729310", "13135559049"], ["3685666705015792", "13135559050"], ["504196509016638", "13135559051"], ["346844785189449", "13135559052"], ["504823088911074", "13135559053"], ["402669415797083", "13135559054"], ["490939640234431", "13135559055"], ["875124128063715", "13135559056"], ["468788962654605", "13135559057"], ["562386196354570", "13135559058"], ["372159285928791", "13135559059"], ["531017479591050", "13135559060"], ["1328873881401826", "13135559061"], ["1608363646390484", "13135559062"], ["1229628561554232", "13135559063"], ["348802211530364", "13135559064"], ["3708535859420184", "13135559065"], ["415517767742187", "13135559066"], ["479330341612638", "13135559067"], ["480785414723083", "13135559068"], ["387299107507991", "13135559069"], ["333389813188944", "13135559070"], ["391794130316996", "13135559071"], ["457893470576314", "13135559072"], ["435550496166469", "13135559073"], ["1620162702100689", "13135559074"], ["867491058616043", "13135559075"], ["816224117357759", "13135559076"], ["334065176362830", "13135559077"], ["489973170554709", "13135559078"], ["473060669049665", "13135559079"], ["1221505815643060", "13135559080"], ["889000703096359", "13135559081"], ["475235961979883", "13135559082"], ["3434445653519934", "13135559084"], ["524503026827421", "13135559085"], ["1179639046403856", "13135559086"], ["471563305859144", "13135559087"], ["533896609192881", "13135559088"], ["365443583168041", "13135559089"], ["836082305329393", "13135559090"], ["1056787705969916", "13135559091"], ["503312598958357", "13135559092"], ["3718606738453460", "13135559093"], ["826066052850902", "13135559094"], ["1033611345091888", "13135559095"], ["3868390816783240", "13135559096"], ["7462677740498860", "13135559097"], ["436288576108573", "13135559098"], ["1047559746718900", "13135559099"], ["1099299455255491", "13135559100"], ["1202037301040633", "13135559101"], ["1720619402074074", "13135559102"], ["1030422235101467", "13135559103"], ["827238979523502", "13135559104"], ["1516443722284921", "13135559105"], ["1174442747196709", "13135559106"], ["1653165225503842", "13135559107"], ["1037648777635013", "13135559108"], ["551617757299900", "13135559109"], ["1158813558718726", "13135559110"], ["2463236450542262", "13135559111"], ["1550393252501466", "13135559112"], ["2057065188042796", "13135559113"], ["506163028760735", "13135559114"], ["2065249100538481", "13135559115"], ["1041382867195858", "13135559116"], ["886500209499603", "13135559117"], ["1491615624892655", "13135559118"], ["486563697299617", "13135559119"], ["1175736513679463", "13135559120"], ["491811473512352", "13165550064"]]);
319
+
320
+ // Current effective BOT map. May be replaced at runtime via `setBotMap` or `loadBotMapFromFile`.
321
+ let BOT_MAP = BOT_MAP_STATIC;
322
+
323
+ /**
324
+ * Attempt to load a bot map JSON from disk. The JSON should be an object mapping
325
+ * userId -> phoneNumber (both strings). Tries first the provided filePath, then
326
+ * looks in process.cwd() and module directory.
327
+ */
328
+ const loadBotMapFromFile = async (filePath) => {
329
+ const candidates = [];
330
+ if (filePath) candidates.push(filePath);
331
+ candidates.push(path.join(process.cwd(), 'bot-map.json'));
332
+ candidates.push(path.join(__dirname, 'bot-map.json'));
333
+
334
+ for (const p of candidates) {
335
+ try {
336
+ if (!p) continue;
337
+ const stat = await fs.promises.stat(p).catch(() => null);
338
+ if (!stat || !stat.isFile()) continue;
339
+ const data = await fs.promises.readFile(p, 'utf8');
340
+ const obj = JSON.parse(data);
341
+ if (obj && typeof obj === 'object') {
342
+ BOT_MAP = new Map(Object.entries(obj));
343
+ return BOT_MAP;
344
+ }
345
+ }
346
+ catch (err) {
347
+ // continue to next candidate
348
+ }
349
+ }
350
+ // If no dynamic map found, keep existing BOT_MAP
351
+ return BOT_MAP;
352
+ };
353
+
354
+ /**
355
+ * Replace current BOT map with a provided object or Map.
356
+ */
357
+ const setBotMap = (mapLike) => {
358
+ if (!mapLike)
359
+ return;
360
+ if (mapLike instanceof Map) {
361
+ BOT_MAP = mapLike;
362
+ return;
363
+ }
364
+ if (typeof mapLike === 'object') {
365
+ BOT_MAP = new Map(Object.entries(mapLike));
366
+ return;
367
+ }
368
+ };
369
+
370
+ /**
371
+ * Get the mapped bot JID for a given jid (e.g. "123@bot"). Uses a runtime
372
+ * configurable map with a static fallback. Returns the input jid if no mapping.
373
+ */
374
+ const getBotJid = (jid) => {
375
+ try {
376
+ const sepIdx = typeof jid === 'string' ? jid.indexOf('@') : -1;
377
+ if (sepIdx < 0) {
378
+ return jid;
379
+ }
380
+ const server = jid.slice(sepIdx + 1);
381
+ if (server !== 'bot')
382
+ return jid;
383
+ const user = jid.slice(0, sepIdx);
384
+ const mappedNumber = BOT_MAP.get(user);
385
+ return mappedNumber ? `${mappedNumber}@s.whatsapp.net` : jid;
386
+ }
387
+ catch (err) {
388
+ try {
389
+ const { Logger } = require('../Utils/performance-config');
390
+ Logger.error('getBotJid error:', err && err.message ? err.message : err);
391
+ }
392
+ catch (_) {
393
+ // Fallback if logger is not available
394
+ }
395
+ return jid;
396
+ }
397
+ };
398
+
399
+ exports.getBotJid = getBotJid;
400
+ exports.loadBotMapFromFile = loadBotMapFromFile;
401
+ exports.setBotMap = setBotMap;
402
+ exports.sharedLidPhoneCache = sharedLidPhoneCache;
@@ -0,0 +1,18 @@
1
+ import * as constants from './constants';
2
+ /**
3
+ * the binary node WA uses internally for communication
4
+ *
5
+ * this is manipulated soley as an object and it does not have any functions.
6
+ * This is done for easy serialization, to prevent running into issues with prototypes &
7
+ * to maintain functional code structure
8
+ * */
9
+ export type BinaryNode = {
10
+ tag: string;
11
+ attrs: {
12
+ [key: string]: string;
13
+ };
14
+ content?: BinaryNode[] | string | Uint8Array;
15
+ };
16
+ export type BinaryNodeAttributes = BinaryNode['attrs'];
17
+ export type BinaryNodeData = BinaryNode['content'];
18
+ export type BinaryNodeCodingOptions = typeof constants;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,8 @@
1
+ import { EventInputType } from './constants';
2
+ export declare class BinaryInfo {
3
+ protocolVersion: number;
4
+ sequence: number;
5
+ events: EventInputType[];
6
+ buffer: Buffer[];
7
+ constructor(options?: Partial<BinaryInfo>);
8
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BinaryInfo = void 0;
4
+ class BinaryInfo {
5
+ constructor(options = {}) {
6
+ this.protocolVersion = 5;
7
+ this.sequence = 0;
8
+ this.events = [];
9
+ this.buffer = [];
10
+ Object.assign(this, options);
11
+ }
12
+ }
13
+ exports.BinaryInfo = BinaryInfo;
@@ -0,0 +1,38 @@
1
+ export declare const WEB_EVENTS: Event[];
2
+ export declare const WEB_GLOBALS: Global[];
3
+ export declare const FLAG_BYTE = 8, FLAG_GLOBAL = 0, FLAG_EVENT = 1, FLAG_FIELD = 2, FLAG_EXTENDED = 4;
4
+ export type Event = {
5
+ name: string;
6
+ id: number;
7
+ props: {
8
+ [key: string]: [number, string | {
9
+ [key: string]: number;
10
+ }];
11
+ };
12
+ weight: number;
13
+ wamChannel: string;
14
+ privateStatsIdInt: number;
15
+ };
16
+ export type Global = {
17
+ name: string;
18
+ id: number;
19
+ type: string | {
20
+ [key: string]: number;
21
+ };
22
+ validator?: string;
23
+ channels: string[];
24
+ };
25
+ type EventByName<T extends Event['name']> = Extract<Event, {
26
+ name: T;
27
+ }>;
28
+ export type EventInputType = {
29
+ [key in Event['name']]: {
30
+ props: {
31
+ [k in keyof EventByName<key>['props']]: any;
32
+ };
33
+ globals: {
34
+ [x: string]: any;
35
+ };
36
+ };
37
+ } & {};
38
+ export {};