@neelegirl/baileys 1.5.3 → 1.5.4

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 (438) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +195 -195
  3. package/WAProto/GenerateStatics.sh +3 -0
  4. package/WAProto/WAProto.proto +478 -1153
  5. package/WAProto/fix-imports.js +29 -0
  6. package/WAProto/index.d.ts +2645 -51971
  7. package/WAProto/index.js +48649 -154035
  8. package/engine-requirements.js +10 -0
  9. package/lib/Defaults/index.d.ts +62 -78
  10. package/lib/Defaults/index.d.ts.map +1 -0
  11. package/lib/Defaults/index.js +115 -149
  12. package/lib/Defaults/index.js.map +1 -0
  13. package/lib/Signal/Group/ciphertext-message.d.ts +10 -0
  14. package/lib/Signal/Group/ciphertext-message.d.ts.map +1 -0
  15. package/lib/Signal/Group/ciphertext-message.js +12 -0
  16. package/lib/Signal/Group/ciphertext-message.js.map +1 -0
  17. package/lib/Signal/{WASignalGroup → Group}/group-session-builder.d.ts +11 -13
  18. package/lib/Signal/Group/group-session-builder.d.ts.map +1 -0
  19. package/lib/Signal/Group/group-session-builder.js +30 -0
  20. package/lib/Signal/Group/group-session-builder.js.map +1 -0
  21. package/lib/Signal/Group/group_cipher.d.ts +17 -0
  22. package/lib/Signal/Group/group_cipher.d.ts.map +1 -0
  23. package/lib/Signal/{WASignalGroup → Group}/group_cipher.js +41 -70
  24. package/lib/Signal/Group/group_cipher.js.map +1 -0
  25. package/lib/Signal/Group/index.d.ts +12 -0
  26. package/lib/Signal/Group/index.d.ts.map +1 -0
  27. package/lib/Signal/Group/index.js +12 -0
  28. package/lib/Signal/Group/index.js.map +1 -0
  29. package/lib/Signal/Group/keyhelper.d.ts +11 -0
  30. package/lib/Signal/Group/keyhelper.d.ts.map +1 -0
  31. package/lib/Signal/Group/keyhelper.js +18 -0
  32. package/lib/Signal/Group/keyhelper.js.map +1 -0
  33. package/lib/Signal/Group/sender-chain-key.d.ts +14 -0
  34. package/lib/Signal/Group/sender-chain-key.d.ts.map +1 -0
  35. package/lib/Signal/Group/sender-chain-key.js +26 -0
  36. package/lib/Signal/Group/sender-chain-key.js.map +1 -0
  37. package/lib/Signal/Group/sender-key-distribution-message.d.ts +17 -0
  38. package/lib/Signal/Group/sender-key-distribution-message.d.ts.map +1 -0
  39. package/lib/Signal/Group/sender-key-distribution-message.js +63 -0
  40. package/lib/Signal/Group/sender-key-distribution-message.js.map +1 -0
  41. package/lib/Signal/Group/sender-key-message.d.ts +19 -0
  42. package/lib/Signal/Group/sender-key-message.d.ts.map +1 -0
  43. package/lib/Signal/Group/sender-key-message.js +66 -0
  44. package/lib/Signal/Group/sender-key-message.js.map +1 -0
  45. package/lib/Signal/Group/sender-key-name.d.ts +18 -0
  46. package/lib/Signal/Group/sender-key-name.d.ts.map +1 -0
  47. package/lib/Signal/Group/sender-key-name.js +48 -0
  48. package/lib/Signal/Group/sender-key-name.js.map +1 -0
  49. package/lib/Signal/Group/sender-key-record.d.ts +31 -0
  50. package/lib/Signal/Group/sender-key-record.d.ts.map +1 -0
  51. package/lib/Signal/Group/sender-key-record.js +41 -0
  52. package/lib/Signal/Group/sender-key-record.js.map +1 -0
  53. package/lib/Signal/Group/sender-key-state.d.ts +39 -0
  54. package/lib/Signal/Group/sender-key-state.d.ts.map +1 -0
  55. package/lib/Signal/Group/sender-key-state.js +84 -0
  56. package/lib/Signal/Group/sender-key-state.js.map +1 -0
  57. package/lib/Signal/Group/sender-message-key.d.ts +12 -0
  58. package/lib/Signal/Group/sender-message-key.d.ts.map +1 -0
  59. package/lib/Signal/{WASignalGroup/sender_message_key.js → Group/sender-message-key.js} +26 -39
  60. package/lib/Signal/Group/sender-message-key.js.map +1 -0
  61. package/lib/Signal/libsignal.d.ts +5 -8
  62. package/lib/Signal/libsignal.d.ts.map +1 -0
  63. package/lib/Signal/libsignal.js +342 -391
  64. package/lib/Signal/libsignal.js.map +1 -0
  65. package/lib/Signal/lid-mapping.d.ts +23 -28
  66. package/lib/Signal/lid-mapping.d.ts.map +1 -0
  67. package/lib/Signal/lid-mapping.js +171 -184
  68. package/lib/Signal/lid-mapping.js.map +1 -0
  69. package/lib/Socket/Client/index.d.ts +3 -2
  70. package/lib/Socket/Client/index.d.ts.map +1 -0
  71. package/lib/Socket/Client/index.js +3 -22
  72. package/lib/Socket/Client/index.js.map +1 -0
  73. package/lib/Socket/Client/types.d.ts +15 -15
  74. package/lib/Socket/Client/types.d.ts.map +1 -0
  75. package/lib/Socket/Client/types.js +8 -15
  76. package/lib/Socket/Client/types.js.map +1 -0
  77. package/lib/Socket/Client/websocket.d.ts +12 -12
  78. package/lib/Socket/Client/websocket.d.ts.map +1 -0
  79. package/lib/Socket/Client/websocket.js +24 -36
  80. package/lib/Socket/Client/websocket.js.map +1 -0
  81. package/lib/Socket/business.d.ts +178 -177
  82. package/lib/Socket/business.d.ts.map +1 -0
  83. package/lib/Socket/business.js +81 -120
  84. package/lib/Socket/business.js.map +1 -0
  85. package/lib/Socket/chats.d.ts +93 -92
  86. package/lib/Socket/chats.d.ts.map +1 -0
  87. package/lib/Socket/chats.js +462 -618
  88. package/lib/Socket/chats.js.map +1 -0
  89. package/lib/Socket/communities.d.ts +244 -223
  90. package/lib/Socket/communities.d.ts.map +1 -0
  91. package/lib/Socket/communities.js +431 -433
  92. package/lib/Socket/communities.js.map +1 -0
  93. package/lib/Socket/groups.d.ts +118 -110
  94. package/lib/Socket/groups.d.ts.map +1 -0
  95. package/lib/Socket/groups.js +148 -181
  96. package/lib/Socket/groups.js.map +1 -0
  97. package/lib/Socket/index.d.ts +222 -182
  98. package/lib/Socket/index.d.ts.map +1 -0
  99. package/lib/Socket/index.js +12 -18
  100. package/lib/Socket/index.js.map +1 -0
  101. package/lib/Socket/messages-recv.d.ts +165 -166
  102. package/lib/Socket/messages-recv.d.ts.map +1 -0
  103. package/lib/Socket/messages-recv.js +753 -1031
  104. package/lib/Socket/messages-recv.js.map +1 -0
  105. package/lib/Socket/messages-send.d.ts +161 -157
  106. package/lib/Socket/messages-send.d.ts.map +1 -0
  107. package/lib/Socket/messages-send.js +564 -1396
  108. package/lib/Socket/messages-send.js.map +1 -0
  109. package/lib/Socket/mex.d.ts +3 -2
  110. package/lib/Socket/mex.d.ts.map +1 -0
  111. package/lib/Socket/mex.js +42 -47
  112. package/lib/Socket/mex.js.map +1 -0
  113. package/lib/Socket/newsletter.d.ts +139 -137
  114. package/lib/Socket/newsletter.d.ts.map +1 -0
  115. package/lib/Socket/newsletter.js +181 -295
  116. package/lib/Socket/newsletter.js.map +1 -0
  117. package/lib/Socket/socket.d.ts +42 -36
  118. package/lib/Socket/socket.d.ts.map +1 -0
  119. package/lib/Socket/socket.js +487 -557
  120. package/lib/Socket/socket.js.map +1 -0
  121. package/lib/Types/Auth.d.ts +87 -97
  122. package/lib/Types/Auth.d.ts.map +1 -0
  123. package/lib/Types/Auth.js +2 -3
  124. package/lib/Types/Auth.js.map +1 -0
  125. package/lib/Types/Bussines.d.ts +25 -0
  126. package/lib/Types/Bussines.d.ts.map +1 -0
  127. package/lib/Types/Bussines.js +2 -3
  128. package/lib/Types/Bussines.js.map +1 -0
  129. package/lib/Types/Call.d.ts +13 -13
  130. package/lib/Types/Call.d.ts.map +1 -0
  131. package/lib/Types/Call.js +2 -3
  132. package/lib/Types/Call.js.map +1 -0
  133. package/lib/Types/Chat.d.ts +77 -97
  134. package/lib/Types/Chat.d.ts.map +1 -0
  135. package/lib/Types/Chat.js +8 -9
  136. package/lib/Types/Chat.js.map +1 -0
  137. package/lib/Types/Contact.d.ts +10 -9
  138. package/lib/Types/Contact.d.ts.map +1 -0
  139. package/lib/Types/Contact.js +2 -3
  140. package/lib/Types/Contact.js.map +1 -0
  141. package/lib/Types/Events.d.ts +151 -175
  142. package/lib/Types/Events.d.ts.map +1 -0
  143. package/lib/Types/Events.js +2 -3
  144. package/lib/Types/Events.js.map +1 -0
  145. package/lib/Types/GroupMetadata.d.ts +49 -48
  146. package/lib/Types/GroupMetadata.d.ts.map +1 -0
  147. package/lib/Types/GroupMetadata.js +2 -3
  148. package/lib/Types/GroupMetadata.js.map +1 -0
  149. package/lib/Types/Label.d.ts +13 -14
  150. package/lib/Types/Label.d.ts.map +1 -0
  151. package/lib/Types/Label.js +24 -30
  152. package/lib/Types/Label.js.map +1 -0
  153. package/lib/Types/LabelAssociation.d.ts +15 -20
  154. package/lib/Types/LabelAssociation.d.ts.map +1 -0
  155. package/lib/Types/LabelAssociation.js +6 -12
  156. package/lib/Types/LabelAssociation.js.map +1 -0
  157. package/lib/Types/Message.d.ts +231 -412
  158. package/lib/Types/Message.d.ts.map +1 -0
  159. package/lib/Types/Message.js +11 -19
  160. package/lib/Types/Message.js.map +1 -0
  161. package/lib/Types/Newsletter.d.ts +130 -104
  162. package/lib/Types/Newsletter.d.ts.map +1 -0
  163. package/lib/Types/Newsletter.js +31 -40
  164. package/lib/Types/Newsletter.js.map +1 -0
  165. package/lib/Types/Product.d.ts +58 -71
  166. package/lib/Types/Product.d.ts.map +1 -0
  167. package/lib/Types/Product.js +2 -3
  168. package/lib/Types/Product.js.map +1 -0
  169. package/lib/Types/Signal.d.ts +60 -82
  170. package/lib/Types/Signal.d.ts.map +1 -0
  171. package/lib/Types/Signal.js +2 -3
  172. package/lib/Types/Signal.js.map +1 -0
  173. package/lib/Types/Socket.d.ts +73 -81
  174. package/lib/Types/Socket.d.ts.map +1 -0
  175. package/lib/Types/Socket.js +3 -3
  176. package/lib/Types/Socket.js.map +1 -0
  177. package/lib/Types/State.d.ts +17 -19
  178. package/lib/Types/State.d.ts.map +1 -0
  179. package/lib/Types/State.js +13 -14
  180. package/lib/Types/State.js.map +1 -0
  181. package/lib/Types/USync.d.ts +8 -8
  182. package/lib/Types/USync.d.ts.map +1 -0
  183. package/lib/Types/USync.js +2 -3
  184. package/lib/Types/USync.js.map +1 -0
  185. package/lib/Types/index.d.ts +47 -62
  186. package/lib/Types/index.d.ts.map +1 -0
  187. package/lib/Types/index.js +26 -50
  188. package/lib/Types/index.js.map +1 -0
  189. package/lib/Utils/auth-utils.d.ts +19 -21
  190. package/lib/Utils/auth-utils.d.ts.map +1 -0
  191. package/lib/Utils/auth-utils.js +257 -528
  192. package/lib/Utils/auth-utils.js.map +1 -0
  193. package/lib/Utils/baileys-event-stream.d.ts +17 -18
  194. package/lib/Utils/baileys-event-stream.d.ts.map +1 -0
  195. package/lib/Utils/baileys-event-stream.js +56 -70
  196. package/lib/Utils/baileys-event-stream.js.map +1 -0
  197. package/lib/Utils/browser-utils.d.ts +4 -0
  198. package/lib/Utils/browser-utils.d.ts.map +1 -0
  199. package/lib/Utils/browser-utils.js +28 -0
  200. package/lib/Utils/browser-utils.js.map +1 -0
  201. package/lib/Utils/business.d.ts +23 -29
  202. package/lib/Utils/business.d.ts.map +1 -0
  203. package/lib/Utils/business.js +231 -255
  204. package/lib/Utils/business.js.map +1 -0
  205. package/lib/Utils/chat-utils.d.ts +70 -82
  206. package/lib/Utils/chat-utils.d.ts.map +1 -0
  207. package/lib/Utils/chat-utils.js +763 -809
  208. package/lib/Utils/chat-utils.js.map +1 -0
  209. package/lib/Utils/crypto.d.ts +41 -56
  210. package/lib/Utils/crypto.d.ts.map +1 -0
  211. package/lib/Utils/crypto.js +142 -189
  212. package/lib/Utils/crypto.js.map +1 -0
  213. package/lib/Utils/decode-wa-message.d.ts +48 -53
  214. package/lib/Utils/decode-wa-message.d.ts.map +1 -0
  215. package/lib/Utils/decode-wa-message.js +279 -323
  216. package/lib/Utils/decode-wa-message.js.map +1 -0
  217. package/lib/Utils/event-buffer.d.ts +34 -39
  218. package/lib/Utils/event-buffer.d.ts.map +1 -0
  219. package/lib/Utils/event-buffer.js +548 -595
  220. package/lib/Utils/event-buffer.js.map +1 -0
  221. package/lib/Utils/generics.d.ts +90 -131
  222. package/lib/Utils/generics.d.ts.map +1 -0
  223. package/lib/Utils/generics.js +381 -630
  224. package/lib/Utils/generics.js.map +1 -0
  225. package/lib/Utils/history.d.ts +19 -23
  226. package/lib/Utils/history.d.ts.map +1 -0
  227. package/lib/Utils/history.js +84 -104
  228. package/lib/Utils/history.js.map +1 -0
  229. package/lib/Utils/index.d.ts +20 -20
  230. package/lib/Utils/index.d.ts.map +1 -0
  231. package/lib/Utils/index.js +19 -40
  232. package/lib/Utils/index.js.map +1 -0
  233. package/lib/Utils/link-preview.d.ts +21 -23
  234. package/lib/Utils/link-preview.d.ts.map +1 -0
  235. package/lib/Utils/link-preview.js +85 -120
  236. package/lib/Utils/link-preview.js.map +1 -0
  237. package/lib/Utils/logger.d.ts +12 -13
  238. package/lib/Utils/logger.d.ts.map +1 -0
  239. package/lib/Utils/logger.js +3 -7
  240. package/lib/Utils/logger.js.map +1 -0
  241. package/lib/Utils/lt-hash.d.ts +13 -14
  242. package/lib/Utils/lt-hash.d.ts.map +1 -0
  243. package/lib/Utils/lt-hash.js +48 -58
  244. package/lib/Utils/lt-hash.js.map +1 -0
  245. package/lib/Utils/make-mutex.d.ts +8 -9
  246. package/lib/Utils/make-mutex.d.ts.map +1 -0
  247. package/lib/Utils/make-mutex.js +40 -49
  248. package/lib/Utils/make-mutex.js.map +1 -0
  249. package/lib/Utils/message-retry-manager.d.ts +82 -88
  250. package/lib/Utils/message-retry-manager.d.ts.map +1 -0
  251. package/lib/Utils/message-retry-manager.js +149 -160
  252. package/lib/Utils/message-retry-manager.js.map +1 -0
  253. package/lib/Utils/messages-media.d.ts +114 -135
  254. package/lib/Utils/messages-media.d.ts.map +1 -0
  255. package/lib/Utils/messages-media.js +663 -869
  256. package/lib/Utils/messages-media.js.map +1 -0
  257. package/lib/Utils/messages.d.ts +76 -105
  258. package/lib/Utils/messages.d.ts.map +1 -0
  259. package/lib/Utils/messages.js +820 -1745
  260. package/lib/Utils/messages.js.map +1 -0
  261. package/lib/Utils/noise-handler.d.ts +20 -21
  262. package/lib/Utils/noise-handler.d.ts.map +1 -0
  263. package/lib/Utils/noise-handler.js +147 -165
  264. package/lib/Utils/noise-handler.js.map +1 -0
  265. package/lib/Utils/pre-key-manager.d.ts +28 -0
  266. package/lib/Utils/pre-key-manager.d.ts.map +1 -0
  267. package/lib/Utils/pre-key-manager.js +106 -0
  268. package/lib/Utils/pre-key-manager.js.map +1 -0
  269. package/lib/Utils/process-message.d.ts +42 -49
  270. package/lib/Utils/process-message.d.ts.map +1 -0
  271. package/lib/Utils/process-message.js +413 -427
  272. package/lib/Utils/process-message.js.map +1 -0
  273. package/lib/Utils/signal.d.ts +34 -42
  274. package/lib/Utils/signal.d.ts.map +1 -0
  275. package/lib/Utils/signal.js +159 -166
  276. package/lib/Utils/signal.js.map +1 -0
  277. package/lib/Utils/use-multi-file-auth-state.d.ts +13 -18
  278. package/lib/Utils/use-multi-file-auth-state.d.ts.map +1 -0
  279. package/lib/Utils/use-multi-file-auth-state.js +121 -238
  280. package/lib/Utils/use-multi-file-auth-state.js.map +1 -0
  281. package/lib/Utils/validate-connection.d.ts +11 -13
  282. package/lib/Utils/validate-connection.d.ts.map +1 -0
  283. package/lib/Utils/validate-connection.js +195 -220
  284. package/lib/Utils/validate-connection.js.map +1 -0
  285. package/lib/WABinary/constants.d.ts +28 -30
  286. package/lib/WABinary/constants.d.ts.map +1 -0
  287. package/lib/WABinary/constants.js +1301 -1316
  288. package/lib/WABinary/constants.js.map +1 -0
  289. package/lib/WABinary/decode.d.ts +7 -9
  290. package/lib/WABinary/decode.d.ts.map +1 -0
  291. package/lib/WABinary/decode.js +238 -288
  292. package/lib/WABinary/decode.js.map +1 -0
  293. package/lib/WABinary/encode.d.ts +3 -3
  294. package/lib/WABinary/encode.d.ts.map +1 -0
  295. package/lib/WABinary/encode.js +216 -265
  296. package/lib/WABinary/encode.js.map +1 -0
  297. package/lib/WABinary/generic-utils.d.ts +15 -28
  298. package/lib/WABinary/generic-utils.d.ts.map +1 -0
  299. package/lib/WABinary/generic-utils.js +102 -142
  300. package/lib/WABinary/generic-utils.js.map +1 -0
  301. package/lib/WABinary/index.d.ts +6 -5
  302. package/lib/WABinary/index.d.ts.map +1 -0
  303. package/lib/WABinary/index.js +6 -25
  304. package/lib/WABinary/index.js.map +1 -0
  305. package/lib/WABinary/jid-utils.d.ts +48 -58
  306. package/lib/WABinary/jid-utils.d.ts.map +1 -0
  307. package/lib/WABinary/jid-utils.js +96 -104
  308. package/lib/WABinary/jid-utils.js.map +1 -0
  309. package/lib/WABinary/types.d.ts +19 -22
  310. package/lib/WABinary/types.d.ts.map +1 -0
  311. package/lib/WABinary/types.js +2 -3
  312. package/lib/WABinary/types.js.map +1 -0
  313. package/lib/WAM/BinaryInfo.d.ts +9 -16
  314. package/lib/WAM/BinaryInfo.d.ts.map +1 -0
  315. package/lib/WAM/BinaryInfo.js +10 -17
  316. package/lib/WAM/BinaryInfo.js.map +1 -0
  317. package/lib/WAM/constants.d.ts +40 -47
  318. package/lib/WAM/constants.d.ts.map +1 -0
  319. package/lib/WAM/constants.js +22853 -15371
  320. package/lib/WAM/constants.js.map +1 -0
  321. package/lib/WAM/encode.d.ts +3 -3
  322. package/lib/WAM/encode.d.ts.map +1 -0
  323. package/lib/WAM/encode.js +150 -164
  324. package/lib/WAM/encode.js.map +1 -0
  325. package/lib/WAM/index.d.ts +4 -3
  326. package/lib/WAM/index.d.ts.map +1 -0
  327. package/lib/WAM/index.js +4 -23
  328. package/lib/WAM/index.js.map +1 -0
  329. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +9 -9
  330. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +1 -0
  331. package/lib/WAUSync/Protocols/USyncContactProtocol.js +12 -19
  332. package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +1 -0
  333. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +19 -22
  334. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map +1 -0
  335. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +18 -26
  336. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map +1 -0
  337. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +11 -12
  338. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map +1 -0
  339. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +12 -20
  340. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map +1 -0
  341. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +11 -12
  342. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map +1 -0
  343. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +16 -24
  344. package/lib/WAUSync/Protocols/USyncStatusProtocol.js.map +1 -0
  345. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +26 -0
  346. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts.map +1 -0
  347. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +51 -0
  348. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js.map +1 -0
  349. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +10 -0
  350. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts.map +1 -0
  351. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +29 -0
  352. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js.map +1 -0
  353. package/lib/WAUSync/Protocols/index.d.ts +5 -6
  354. package/lib/WAUSync/Protocols/index.d.ts.map +1 -0
  355. package/lib/WAUSync/Protocols/index.js +5 -26
  356. package/lib/WAUSync/Protocols/index.js.map +1 -0
  357. package/lib/WAUSync/USyncQuery.d.ts +26 -28
  358. package/lib/WAUSync/USyncQuery.d.ts.map +1 -0
  359. package/lib/WAUSync/USyncQuery.js +64 -62
  360. package/lib/WAUSync/USyncQuery.js.map +1 -0
  361. package/lib/WAUSync/USyncUser.d.ts +11 -10
  362. package/lib/WAUSync/USyncUser.d.ts.map +1 -0
  363. package/lib/WAUSync/USyncUser.js +12 -19
  364. package/lib/WAUSync/USyncUser.js.map +1 -0
  365. package/lib/WAUSync/index.d.ts +4 -3
  366. package/lib/WAUSync/index.d.ts.map +1 -0
  367. package/lib/WAUSync/index.js +4 -23
  368. package/lib/WAUSync/index.js.map +1 -0
  369. package/lib/index.d.ts +12 -13
  370. package/lib/index.d.ts.map +1 -0
  371. package/lib/index.js +11 -33
  372. package/lib/index.js.map +1 -0
  373. package/package.json +99 -96
  374. package/lib/Defaults/baileys-version.json +0 -3
  375. package/lib/Defaults/phonenumber-mcc.json +0 -223
  376. package/lib/Signal/WASignalGroup/GroupProtocol.js +0 -1909
  377. package/lib/Signal/WASignalGroup/ciphertext-message.d.ts +0 -9
  378. package/lib/Signal/WASignalGroup/ciphertext-message.js +0 -19
  379. package/lib/Signal/WASignalGroup/ciphertext_message.js +0 -16
  380. package/lib/Signal/WASignalGroup/generate-proto.sh +0 -1
  381. package/lib/Signal/WASignalGroup/group-session-builder.js +0 -72
  382. package/lib/Signal/WASignalGroup/group.proto +0 -42
  383. package/lib/Signal/WASignalGroup/group_cipher.d.ts +0 -19
  384. package/lib/Signal/WASignalGroup/group_session_builder.js +0 -46
  385. package/lib/Signal/WASignalGroup/index.d.ts +0 -11
  386. package/lib/Signal/WASignalGroup/index.js +0 -61
  387. package/lib/Signal/WASignalGroup/keyhelper.d.ts +0 -16
  388. package/lib/Signal/WASignalGroup/keyhelper.js +0 -66
  389. package/lib/Signal/WASignalGroup/protobufs.js +0 -3
  390. package/lib/Signal/WASignalGroup/queue_job.js +0 -69
  391. package/lib/Signal/WASignalGroup/readme.md +0 -6
  392. package/lib/Signal/WASignalGroup/sender-chain-key.d.ts +0 -14
  393. package/lib/Signal/WASignalGroup/sender-chain-key.js +0 -47
  394. package/lib/Signal/WASignalGroup/sender-key-distribution-message.d.ts +0 -17
  395. package/lib/Signal/WASignalGroup/sender-key-distribution-message.js +0 -71
  396. package/lib/Signal/WASignalGroup/sender-key-message.d.ts +0 -19
  397. package/lib/Signal/WASignalGroup/sender-key-message.js +0 -73
  398. package/lib/Signal/WASignalGroup/sender-key-name.d.ts +0 -19
  399. package/lib/Signal/WASignalGroup/sender-key-name.js +0 -59
  400. package/lib/Signal/WASignalGroup/sender-key-record.d.ts +0 -32
  401. package/lib/Signal/WASignalGroup/sender-key-record.js +0 -58
  402. package/lib/Signal/WASignalGroup/sender-key-state.d.ts +0 -44
  403. package/lib/Signal/WASignalGroup/sender-key-state.js +0 -147
  404. package/lib/Signal/WASignalGroup/sender-message-key.d.ts +0 -11
  405. package/lib/Signal/WASignalGroup/sender-message-key.js +0 -33
  406. package/lib/Signal/WASignalGroup/sender_chain_key.js +0 -50
  407. package/lib/Signal/WASignalGroup/sender_key_distribution_message.js +0 -78
  408. package/lib/Signal/WASignalGroup/sender_key_message.js +0 -92
  409. package/lib/Signal/WASignalGroup/sender_key_name.js +0 -70
  410. package/lib/Signal/WASignalGroup/sender_key_record.js +0 -56
  411. package/lib/Signal/WASignalGroup/sender_key_state.js +0 -129
  412. package/lib/Socket/Client/abstract-socket-client.d.ts +0 -15
  413. package/lib/Socket/Client/abstract-socket-client.js +0 -13
  414. package/lib/Socket/Client/mobile-socket-client.d.ts +0 -12
  415. package/lib/Socket/Client/mobile-socket-client.js +0 -65
  416. package/lib/Socket/usync.d.ts +0 -37
  417. package/lib/Socket/usync.js +0 -83
  418. package/lib/Store/index.d.ts +0 -4
  419. package/lib/Store/index.js +0 -24
  420. package/lib/Store/make-cache-manager-store.d.ts +0 -14
  421. package/lib/Store/make-cache-manager-store.js +0 -90
  422. package/lib/Store/make-in-memory-store.d.ts +0 -123
  423. package/lib/Store/make-in-memory-store.js +0 -429
  424. package/lib/Store/make-ordered-dictionary.d.ts +0 -12
  425. package/lib/Store/make-ordered-dictionary.js +0 -86
  426. package/lib/Store/object-repository.d.ts +0 -10
  427. package/lib/Store/object-repository.js +0 -31
  428. package/lib/Types/Bussiness.d.ts +0 -28
  429. package/lib/Types/MexUpdates.d.ts +0 -9
  430. package/lib/Types/MexUpdates.js +0 -18
  431. package/lib/Utils/use-mongo-file-auth-state.d.ts +0 -6
  432. package/lib/Utils/use-mongo-file-auth-state.js +0 -84
  433. package/lib/Utils/use-single-file-auth-state.d.ts +0 -13
  434. package/lib/Utils/use-single-file-auth-state.js +0 -80
  435. package/lib/WAUSync/Protocols/USyncBotProfileProtocol.d.ts +0 -28
  436. package/lib/WAUSync/Protocols/USyncBotProfileProtocol.js +0 -69
  437. package/lib/WAUSync/Protocols/USyncLIDProtocol.d.ts +0 -10
  438. package/lib/WAUSync/Protocols/USyncLIDProtocol.js +0 -38
@@ -1,391 +1,342 @@
1
- "use strict"
2
-
3
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
- if (k2 === undefined) k2 = k
5
- var desc = Object.getOwnPropertyDescriptor(m, k)
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = { enumerable: true, get: function() { return m[k] } }
8
- }
9
- Object.defineProperty(o, k2, desc)
10
- }) : (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k
12
- o[k2] = m[k]
13
- }))
14
-
15
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
16
- Object.defineProperty(o, "default", { enumerable: true, value: v })
17
- }) : function(o, v) {
18
- o["default"] = v
19
- })
20
-
21
- var __importStar = (this && this.__importStar) || (function () {
22
- var ownKeys = function(o) {
23
- ownKeys = Object.getOwnPropertyNames || function (o) {
24
- var ar = []
25
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k
26
- return ar
27
- }
28
- return ownKeys(o)
29
- }
30
- return function (mod) {
31
- if (mod && mod.__esModule) return mod
32
- var result = {}
33
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i])
34
- __setModuleDefault(result, mod)
35
- return result
36
- }
37
- })()
38
-
39
- Object.defineProperty(exports, "__esModule", { value: true })
40
-
41
- const libsignal = __importStar(require("@neelegirl/libsignal"))
42
- const Utils_1 = require("../Utils")
43
- const WABinary_1 = require("../WABinary")
44
- const sender_key_name_1 = require("./WASignalGroup/sender-key-name")
45
- const sender_key_record_1 = require("./WASignalGroup/sender-key-record")
46
- const Group_1 = require("./WASignalGroup")
47
- const LIDMappingStore_1 = require("./lid-mapping")
48
-
49
- function makeLibSignalRepository(auth, onWhatsAppFunc, logger) {
50
- const lidMapping = new LIDMappingStore_1.LIDMappingStore(auth.keys, onWhatsAppFunc, logger)
51
- const storage = signalStorage(auth, lidMapping)
52
- const parsedKeys = auth.keys
53
-
54
- function isLikelySyncMessage(addr) {
55
- const key = addr.toString()
56
- // Only bypass for WhatsApp system addresses, not regular user contacts
57
- // Be very specific about sync service patterns
58
- return (key.includes('@lid.whatsapp.net') || // WhatsApp system messages
59
- key.includes('@broadcast') || // Broadcast messages
60
- key.includes('@newsletter'))
61
- }
62
-
63
- const repository = {
64
- decryptGroupMessage({ group, authorJid, msg }) {
65
- const senderName = jidToSignalSenderKeyName(group, authorJid)
66
- const cipher = new Group_1.GroupCipher(storage, senderName)
67
- // Use transaction to ensure atomicity
68
- return parsedKeys.transaction(async () => {
69
- return cipher.decrypt(msg)
70
- }, group)
71
- },
72
- async processSenderKeyDistributionMessage({ item, authorJid }) {
73
- const builder = new Group_1.GroupSessionBuilder(storage)
74
- if (!item.groupId) {
75
- throw new Error('Group ID is required for sender key distribution message')
76
- }
77
- const senderName = jidToSignalSenderKeyName(item.groupId, authorJid)
78
- const senderMsg = new Group_1.SenderKeyDistributionMessage(null, null, null, null, item.axolotlSenderKeyDistributionMessage)
79
- const senderNameStr = senderName.toString()
80
- const { [senderNameStr]: senderKey } = await auth.keys.get('sender-key', [senderNameStr])
81
- if (!senderKey) {
82
- await storage.storeSenderKey(senderName, new sender_key_record_1.SenderKeyRecord())
83
- }
84
- return parsedKeys.transaction(async () => {
85
- const { [senderNameStr]: senderKey } = await auth.keys.get('sender-key', [senderNameStr])
86
- if (!senderKey) {
87
- await storage.storeSenderKey(senderName, new sender_key_record_1.SenderKeyRecord())
88
- }
89
- await builder.process(senderName, senderMsg)
90
- }, item.groupId)
91
- },
92
- async decryptMessage({ jid, type, ciphertext }) {
93
- const addr = jidToSignalProtocolAddress(jid)
94
- const session = new libsignal.SessionCipher(storage, addr)
95
- async function doDecrypt() {
96
- let result
97
- switch (type) {
98
- case 'pkmsg':
99
- result = await session.decryptPreKeyWhisperMessage(ciphertext)
100
- break
101
- case 'msg':
102
- result = await session.decryptWhisperMessage(ciphertext)
103
- break
104
- }
105
- return result
106
- }
107
- if (isLikelySyncMessage(addr)) {
108
- // If it's a sync message, we can skip the transaction
109
- // as it is likely to be a system message that doesn't require strict atomicity
110
- return await doDecrypt()
111
- }
112
- // If it's not a sync message, we need to ensure atomicity
113
- // For regular messages, we use a transaction to ensure atomicity
114
- return parsedKeys.transaction(async () => {
115
- return await doDecrypt()
116
- }, jid)
117
- },
118
- async encryptMessage({ jid, data }) {
119
- // LID SINGLE SOURCE OF TRUTH: Always prefer LID when available
120
- let encryptionJid = jid
121
- // Check for LID mapping and use it if session exists
122
- if (jid.includes('@s.whatsapp.net')) {
123
- const lidForPN = await lidMapping.getLIDForPN(jid)
124
- if (lidForPN?.includes('@lid')) {
125
- const lidAddr = jidToSignalProtocolAddress(lidForPN)
126
- const { [lidAddr.toString()]: lidSession } = await auth.keys.get('session', [lidAddr.toString()])
127
- if (lidSession) {
128
- // LID session exists, use it
129
- encryptionJid = lidForPN
130
- }
131
- else {
132
- // Try to migrate if PN session exists
133
- const pnAddr = jidToSignalProtocolAddress(jid)
134
- const { [pnAddr.toString()]: pnSession } = await auth.keys.get('session', [pnAddr.toString()])
135
- if (pnSession) {
136
- // Migrate PN to LID
137
- await repository.migrateSession([jid], lidForPN)
138
- encryptionJid = lidForPN
139
- }
140
- }
141
- }
142
- }
143
- const addr = jidToSignalProtocolAddress(encryptionJid)
144
- const cipher = new libsignal.SessionCipher(storage, addr)
145
- // Use transaction to ensure atomicity
146
- return parsedKeys.transaction(async () => {
147
- const { type: sigType, body } = await cipher.encrypt(data)
148
- const type = sigType === 3 ? 'pkmsg' : 'msg'
149
- return { type, ciphertext: Buffer.from(body, 'binary') }
150
- }, jid)
151
- },
152
- async encryptGroupMessage({ group, meId, data }) {
153
- const senderName = jidToSignalSenderKeyName(group, meId)
154
- const builder = new Group_1.GroupSessionBuilder(storage)
155
- const senderNameStr = senderName.toString()
156
- return parsedKeys.transaction(async () => {
157
- const { [senderNameStr]: senderKey } = await auth.keys.get('sender-key', [senderNameStr])
158
- if (!senderKey) {
159
- await storage.storeSenderKey(senderName, new sender_key_record_1.SenderKeyRecord())
160
- }
161
- const senderKeyDistributionMessage = await builder.create(senderName)
162
- const session = new Group_1.GroupCipher(storage, senderName)
163
- const ciphertext = await session.encrypt(data)
164
- return {
165
- ciphertext,
166
- senderKeyDistributionMessage: senderKeyDistributionMessage.serialize()
167
- }
168
- }, group)
169
- },
170
- async injectE2ESession({ jid, session }) {
171
- const cipher = new libsignal.SessionBuilder(storage, jidToSignalProtocolAddress(jid))
172
- return parsedKeys.transaction(async () => {
173
- await cipher.initOutgoing(session)
174
- }, jid)
175
- },
176
- jidToSignalProtocolAddress(jid) {
177
- return jidToSignalProtocolAddress(jid).toString()
178
- },
179
- // Optimized direct access to LID mapping store
180
- lidMapping,
181
- async validateSession(jid) {
182
- try {
183
- const addr = jidToSignalProtocolAddress(jid)
184
- const session = await storage.loadSession(addr.toString())
185
- if (!session) {
186
- return { exists: false, reason: 'no session' }
187
- }
188
- if (!session.haveOpenSession()) {
189
- return { exists: false, reason: 'no open session' }
190
- }
191
- return { exists: true }
192
- }
193
- catch (error) {
194
- return { exists: false, reason: 'validation error' }
195
- }
196
- },
197
- async deleteSession(jids) {
198
- if (!jids.length) return
199
-
200
- // Convert JIDs to signal addresses and prepare for bulk deletion
201
- const sessionUpdates = {}
202
-
203
- jids.forEach(jid => {
204
- const addr = jidToSignalProtocolAddress(jid)
205
- sessionUpdates[addr.toString()] = null
206
- })
207
-
208
- // Single transaction for all deletions
209
- return parsedKeys.transaction(async () => {
210
- await auth.keys.set({ session: sessionUpdates })
211
- }, `delete-${jids.length}-sessions`)
212
- },
213
- async migrateSession(fromJids, toJid) {
214
- if (!fromJids.length || !toJid.includes('@lid'))
215
- return { migrated: 0, skipped: 0, total: 0 }
216
-
217
- // Filter valid PN JIDs
218
- const validJids = fromJids.filter(jid => jid.includes('@s.whatsapp.net'))
219
-
220
- if (!validJids.length)
221
- return { migrated: 0, skipped: 0, total: fromJids.length }
222
-
223
- // Single optimized transaction for all migrations
224
- return parsedKeys.transaction(async () => {
225
- // 1. Batch store all LID mappings
226
- const mappings = validJids.map(jid => ({
227
- lid: WABinary_1.transferDevice(jid, toJid),
228
- pn: jid
229
- }))
230
-
231
- await lidMapping.storeLIDPNMappings(mappings)
232
-
233
- // 2. Prepare migration operations
234
- const migrationOps = validJids.map(jid => {
235
- const lidWithDevice = WABinary_1.transferDevice(jid, toJid)
236
- const fromDecoded = WABinary_1.jidDecode(jid)
237
- const toDecoded = WABinary_1.jidDecode(lidWithDevice)
238
-
239
- return {
240
- fromJid: jid,
241
- toJid: lidWithDevice,
242
- pnUser: fromDecoded.user,
243
- lidUser: toDecoded.user,
244
- deviceId: fromDecoded.device || 0,
245
- fromAddr: jidToSignalProtocolAddress(jid),
246
- toAddr: jidToSignalProtocolAddress(lidWithDevice)
247
- }
248
- })
249
-
250
- // 3. Batch check which LID sessions already exist
251
- const lidAddrs = migrationOps.map(op => op.toAddr.toString())
252
- const existingSessions = await auth.keys.get('session', lidAddrs)
253
-
254
- // 4. Filter out sessions that already have LID sessions
255
- const opsToMigrate = migrationOps.filter(op => !existingSessions[op.toAddr.toString()])
256
- const skippedCount = migrationOps.length - opsToMigrate.length
257
-
258
- if (!opsToMigrate.length) {
259
- return { migrated: 0, skipped: skippedCount, total: validJids.length };
260
- }
261
-
262
- // 5. Execute all migrations in parallel
263
- await Promise.all(opsToMigrate.map(async (op) => {
264
- const fromSession = await storage.loadSession(op.fromAddr.toString())
265
-
266
- if (fromSession?.haveOpenSession()) {
267
- // Copy session to LID address
268
- const sessionBytes = fromSession.serialize()
269
- const copiedSession = libsignal.SessionRecord.deserialize(sessionBytes)
270
- await storage.storeSession(op.toAddr.toString(), copiedSession)
271
-
272
- // Delete PN session
273
- await auth.keys.set({ session: { [op.fromAddr.toString()]: null } })
274
- }
275
- }))
276
-
277
- return { migrated: opsToMigrate.length, skipped: skippedCount, total: validJids.length }
278
- }, `migrate-${validJids.length}-sessions-${WABinary_1.jidDecode(toJid)?.user}`)
279
- },
280
- async encryptMessageWithWire({ encryptionJid, wireJid, data }) {
281
- const result = await repository.encryptMessage({ jid: encryptionJid, data })
282
- return { ...result, wireJid }
283
- }
284
- }
285
- return repository
286
- }
287
-
288
- const jidToSignalProtocolAddress = (jid) => {
289
- const decoded = WABinary_1.jidDecode(jid)
290
- const { user, device, server } = decoded
291
-
292
- if (!user) {
293
- throw new Error(`JID decoded but user is empty: "${jid}" -> user: "${user}", server: "${server}", device: ${device}`)
294
- }
295
-
296
- // LID addresses get _1 suffix for Signal protocol
297
- const signalUser = server === 'lid' ? `${user}_1` : user
298
- const finalDevice = device || 0
299
-
300
- return new libsignal.ProtocolAddress(signalUser, finalDevice)
301
- }
302
-
303
- const jidToSignalSenderKeyName = (group, user) => {
304
- return new sender_key_name_1.SenderKeyName(group, jidToSignalProtocolAddress(user))
305
- }
306
-
307
- function signalStorage({ creds, keys }, lidMapping) {
308
- return {
309
- loadSession: async (id) => {
310
- try {
311
- // LID SINGLE SOURCE OF TRUTH: Auto-redirect PN to LID if mapping exists
312
- let actualId = id
313
- if (id.includes('.') && !id.includes('_1')) {
314
- // This is a PN signal address format (e.g., "1234567890.0")
315
- // Convert back to JID to check for LID mapping
316
- const parts = id.split('.')
317
- const device = parts[1] || '0'
318
- const pnJid = device === '0' ? `${parts[0]}@s.whatsapp.net` : `${parts[0]}:${device}@s.whatsapp.net`
319
- const lidForPN = await lidMapping.getLIDForPN(pnJid)
320
- if (lidForPN?.includes('@lid')) {
321
- const lidAddr = jidToSignalProtocolAddress(lidForPN)
322
- const lidId = lidAddr.toString()
323
- // Check if LID session exists
324
- const { [lidId]: lidSession } = await keys.get('session', [lidId])
325
- if (lidSession) {
326
- actualId = lidId
327
- }
328
- }
329
- }
330
- const { [actualId]: sess } = await keys.get('session', [actualId])
331
- if (sess) {
332
- return libsignal.SessionRecord.deserialize(sess)
333
- }
334
- }
335
- catch (e) {
336
- return null
337
- }
338
- return null
339
- },
340
- // TODO: Replace with libsignal.SessionRecord when type exports are added to libsignal
341
- storeSession: async (id, session) => {
342
- await keys.set({ session: { [id]: session.serialize() } })
343
- },
344
- isTrustedIdentity: () => {
345
- return true
346
- },
347
- loadPreKey: async (id) => {
348
- const keyId = id.toString()
349
- const { [keyId]: key } = await keys.get('pre-key', [keyId])
350
- if (key) {
351
- return {
352
- privKey: Buffer.from(key.private),
353
- pubKey: Buffer.from(key.public)
354
- }
355
- }
356
- },
357
- removePreKey: (id) => keys.set({ 'pre-key': { [id]: null } }),
358
- loadSignedPreKey: () => {
359
- const key = creds.signedPreKey
360
- return {
361
- privKey: Buffer.from(key.keyPair.private),
362
- pubKey: Buffer.from(key.keyPair.public)
363
- }
364
- },
365
- loadSenderKey: async (senderKeyName) => {
366
- const keyId = senderKeyName.toString()
367
- const { [keyId]: key } = await keys.get('sender-key', [keyId])
368
- if (key) {
369
- return sender_key_record_1.SenderKeyRecord.deserialize(key)
370
- }
371
- return new sender_key_record_1.SenderKeyRecord()
372
- },
373
- storeSenderKey: async (senderKeyName, key) => {
374
- const keyId = senderKeyName.toString()
375
- const serialized = JSON.stringify(key.serialize())
376
- await keys.set({ 'sender-key': { [keyId]: Buffer.from(serialized, 'utf-8') } })
377
- },
378
- getOurRegistrationId: () => creds.registrationId,
379
- getOurIdentity: () => {
380
- const { signedIdentityKey } = creds
381
- return {
382
- privKey: Buffer.from(signedIdentityKey.private),
383
- pubKey: Buffer.from(Utils_1.generateSignalPubKey(signedIdentityKey.public))
384
- }
385
- }
386
- }
387
- }
388
-
389
- module.exports = {
390
- makeLibSignalRepository
391
- }
1
+ /* @ts-ignore */
2
+ import * as libsignal from 'libsignal';
3
+ import { LRUCache } from 'lru-cache';
4
+ import { generateSignalPubKey } from '../Utils/index.js';
5
+ import { isHostedLidUser, isHostedPnUser, isLidUser, isPnUser, jidDecode, transferDevice, WAJIDDomains } from '../WABinary/index.js';
6
+ import { SenderKeyName } from './Group/sender-key-name.js';
7
+ import { SenderKeyRecord } from './Group/sender-key-record.js';
8
+ import { GroupCipher, GroupSessionBuilder, SenderKeyDistributionMessage } from './Group/index.js';
9
+ import { LIDMappingStore } from './lid-mapping.js';
10
+ export function makeLibSignalRepository(auth, logger, pnToLIDFunc) {
11
+ const lidMapping = new LIDMappingStore(auth.keys, logger, pnToLIDFunc);
12
+ const storage = signalStorage(auth, lidMapping);
13
+ const parsedKeys = auth.keys;
14
+ const migratedSessionCache = new LRUCache({
15
+ ttl: 7 * 24 * 60 * 60 * 1000, // 7 days
16
+ ttlAutopurge: true,
17
+ updateAgeOnGet: true
18
+ });
19
+ const repository = {
20
+ decryptGroupMessage({ group, authorJid, msg }) {
21
+ const senderName = jidToSignalSenderKeyName(group, authorJid);
22
+ const cipher = new GroupCipher(storage, senderName);
23
+ // Use transaction to ensure atomicity
24
+ return parsedKeys.transaction(async () => {
25
+ return cipher.decrypt(msg);
26
+ }, group);
27
+ },
28
+ async processSenderKeyDistributionMessage({ item, authorJid }) {
29
+ const builder = new GroupSessionBuilder(storage);
30
+ if (!item.groupId) {
31
+ throw new Error('Group ID is required for sender key distribution message');
32
+ }
33
+ const senderName = jidToSignalSenderKeyName(item.groupId, authorJid);
34
+ const senderMsg = new SenderKeyDistributionMessage(null, null, null, null, item.axolotlSenderKeyDistributionMessage);
35
+ const senderNameStr = senderName.toString();
36
+ const { [senderNameStr]: senderKey } = await auth.keys.get('sender-key', [senderNameStr]);
37
+ if (!senderKey) {
38
+ await storage.storeSenderKey(senderName, new SenderKeyRecord());
39
+ }
40
+ return parsedKeys.transaction(async () => {
41
+ const { [senderNameStr]: senderKey } = await auth.keys.get('sender-key', [senderNameStr]);
42
+ if (!senderKey) {
43
+ await storage.storeSenderKey(senderName, new SenderKeyRecord());
44
+ }
45
+ await builder.process(senderName, senderMsg);
46
+ }, item.groupId);
47
+ },
48
+ async decryptMessage({ jid, type, ciphertext }) {
49
+ const addr = jidToSignalProtocolAddress(jid);
50
+ const session = new libsignal.SessionCipher(storage, addr);
51
+ async function doDecrypt() {
52
+ let result;
53
+ switch (type) {
54
+ case 'pkmsg':
55
+ result = await session.decryptPreKeyWhisperMessage(ciphertext);
56
+ break;
57
+ case 'msg':
58
+ result = await session.decryptWhisperMessage(ciphertext);
59
+ break;
60
+ }
61
+ return result;
62
+ }
63
+ // If it's not a sync message, we need to ensure atomicity
64
+ // For regular messages, we use a transaction to ensure atomicity
65
+ return parsedKeys.transaction(async () => {
66
+ return await doDecrypt();
67
+ }, jid);
68
+ },
69
+ async encryptMessage({ jid, data }) {
70
+ const addr = jidToSignalProtocolAddress(jid);
71
+ const cipher = new libsignal.SessionCipher(storage, addr);
72
+ // Use transaction to ensure atomicity
73
+ return parsedKeys.transaction(async () => {
74
+ const { type: sigType, body } = await cipher.encrypt(data);
75
+ const type = sigType === 3 ? 'pkmsg' : 'msg';
76
+ return { type, ciphertext: Buffer.from(body, 'binary') };
77
+ }, jid);
78
+ },
79
+ async encryptGroupMessage({ group, meId, data }) {
80
+ const senderName = jidToSignalSenderKeyName(group, meId);
81
+ const builder = new GroupSessionBuilder(storage);
82
+ const senderNameStr = senderName.toString();
83
+ return parsedKeys.transaction(async () => {
84
+ const { [senderNameStr]: senderKey } = await auth.keys.get('sender-key', [senderNameStr]);
85
+ if (!senderKey) {
86
+ await storage.storeSenderKey(senderName, new SenderKeyRecord());
87
+ }
88
+ const senderKeyDistributionMessage = await builder.create(senderName);
89
+ const session = new GroupCipher(storage, senderName);
90
+ const ciphertext = await session.encrypt(data);
91
+ return {
92
+ ciphertext,
93
+ senderKeyDistributionMessage: senderKeyDistributionMessage.serialize()
94
+ };
95
+ }, group);
96
+ },
97
+ async injectE2ESession({ jid, session }) {
98
+ logger.trace({ jid }, 'injecting E2EE session');
99
+ const cipher = new libsignal.SessionBuilder(storage, jidToSignalProtocolAddress(jid));
100
+ return parsedKeys.transaction(async () => {
101
+ await cipher.initOutgoing(session);
102
+ }, jid);
103
+ },
104
+ jidToSignalProtocolAddress(jid) {
105
+ return jidToSignalProtocolAddress(jid).toString();
106
+ },
107
+ // Optimized direct access to LID mapping store
108
+ lidMapping,
109
+ async validateSession(jid) {
110
+ try {
111
+ const addr = jidToSignalProtocolAddress(jid);
112
+ const session = await storage.loadSession(addr.toString());
113
+ if (!session) {
114
+ return { exists: false, reason: 'no session' };
115
+ }
116
+ if (!session.haveOpenSession()) {
117
+ return { exists: false, reason: 'no open session' };
118
+ }
119
+ return { exists: true };
120
+ }
121
+ catch (error) {
122
+ return { exists: false, reason: 'validation error' };
123
+ }
124
+ },
125
+ async deleteSession(jids) {
126
+ if (!jids.length)
127
+ return;
128
+ // Convert JIDs to signal addresses and prepare for bulk deletion
129
+ const sessionUpdates = {};
130
+ jids.forEach(jid => {
131
+ const addr = jidToSignalProtocolAddress(jid);
132
+ sessionUpdates[addr.toString()] = null;
133
+ });
134
+ // Single transaction for all deletions
135
+ return parsedKeys.transaction(async () => {
136
+ await auth.keys.set({ session: sessionUpdates });
137
+ }, `delete-${jids.length}-sessions`);
138
+ },
139
+ async migrateSession(fromJid, toJid) {
140
+ // TODO: use usync to handle this entire mess
141
+ if (!fromJid || (!isLidUser(toJid) && !isHostedLidUser(toJid)))
142
+ return { migrated: 0, skipped: 0, total: 0 };
143
+ // Only support PN to LID migration
144
+ if (!isPnUser(fromJid) && !isHostedPnUser(fromJid)) {
145
+ return { migrated: 0, skipped: 0, total: 1 };
146
+ }
147
+ const { user } = jidDecode(fromJid);
148
+ logger.debug({ fromJid }, 'bulk device migration - loading all user devices');
149
+ // Get user's device list from storage
150
+ const { [user]: userDevices } = await parsedKeys.get('device-list', [user]);
151
+ if (!userDevices) {
152
+ return { migrated: 0, skipped: 0, total: 0 };
153
+ }
154
+ const { device: fromDevice } = jidDecode(fromJid);
155
+ const fromDeviceStr = fromDevice?.toString() || '0';
156
+ if (!userDevices.includes(fromDeviceStr)) {
157
+ userDevices.push(fromDeviceStr);
158
+ }
159
+ // Filter out cached devices before database fetch
160
+ const uncachedDevices = userDevices.filter(device => {
161
+ const deviceKey = `${user}.${device}`;
162
+ return !migratedSessionCache.has(deviceKey);
163
+ });
164
+ // Bulk check session existence only for uncached devices
165
+ const deviceSessionKeys = uncachedDevices.map(device => `${user}.${device}`);
166
+ const existingSessions = await parsedKeys.get('session', deviceSessionKeys);
167
+ // Step 3: Convert existing sessions to JIDs (only migrate sessions that exist)
168
+ const deviceJids = [];
169
+ for (const [sessionKey, sessionData] of Object.entries(existingSessions)) {
170
+ if (sessionData) {
171
+ // Session exists in storage
172
+ const deviceStr = sessionKey.split('.')[1];
173
+ if (!deviceStr)
174
+ continue;
175
+ const deviceNum = parseInt(deviceStr);
176
+ let jid = deviceNum === 0 ? `${user}@s.whatsapp.net` : `${user}:${deviceNum}@s.whatsapp.net`;
177
+ if (deviceNum === 99) {
178
+ jid = `${user}:99@hosted`;
179
+ }
180
+ deviceJids.push(jid);
181
+ }
182
+ }
183
+ logger.debug({
184
+ fromJid,
185
+ totalDevices: userDevices.length,
186
+ devicesWithSessions: deviceJids.length,
187
+ devices: deviceJids
188
+ }, 'bulk device migration complete - all user devices processed');
189
+ // Single transaction for all migrations
190
+ return parsedKeys.transaction(async () => {
191
+ const migrationOps = deviceJids.map(jid => {
192
+ const lidWithDevice = transferDevice(jid, toJid);
193
+ const fromDecoded = jidDecode(jid);
194
+ const toDecoded = jidDecode(lidWithDevice);
195
+ return {
196
+ fromJid: jid,
197
+ toJid: lidWithDevice,
198
+ pnUser: fromDecoded.user,
199
+ lidUser: toDecoded.user,
200
+ deviceId: fromDecoded.device || 0,
201
+ fromAddr: jidToSignalProtocolAddress(jid),
202
+ toAddr: jidToSignalProtocolAddress(lidWithDevice)
203
+ };
204
+ });
205
+ const totalOps = migrationOps.length;
206
+ let migratedCount = 0;
207
+ // Bulk fetch PN sessions - already exist (verified during device discovery)
208
+ const pnAddrStrings = Array.from(new Set(migrationOps.map(op => op.fromAddr.toString())));
209
+ const pnSessions = await parsedKeys.get('session', pnAddrStrings);
210
+ // Prepare bulk session updates (PN → LID migration + deletion)
211
+ const sessionUpdates = {};
212
+ for (const op of migrationOps) {
213
+ const pnAddrStr = op.fromAddr.toString();
214
+ const lidAddrStr = op.toAddr.toString();
215
+ const pnSession = pnSessions[pnAddrStr];
216
+ if (pnSession) {
217
+ // Session exists (guaranteed from device discovery)
218
+ const fromSession = libsignal.SessionRecord.deserialize(pnSession);
219
+ if (fromSession.haveOpenSession()) {
220
+ // Queue for bulk update: copy to LID, delete from PN
221
+ sessionUpdates[lidAddrStr] = fromSession.serialize();
222
+ sessionUpdates[pnAddrStr] = null;
223
+ migratedCount++;
224
+ }
225
+ }
226
+ }
227
+ // Single bulk session update for all migrations
228
+ if (Object.keys(sessionUpdates).length > 0) {
229
+ await parsedKeys.set({ session: sessionUpdates });
230
+ logger.debug({ migratedSessions: migratedCount }, 'bulk session migration complete');
231
+ // Cache device-level migrations
232
+ for (const op of migrationOps) {
233
+ if (sessionUpdates[op.toAddr.toString()]) {
234
+ const deviceKey = `${op.pnUser}.${op.deviceId}`;
235
+ migratedSessionCache.set(deviceKey, true);
236
+ }
237
+ }
238
+ }
239
+ const skippedCount = totalOps - migratedCount;
240
+ return { migrated: migratedCount, skipped: skippedCount, total: totalOps };
241
+ }, `migrate-${deviceJids.length}-sessions-${jidDecode(toJid)?.user}`);
242
+ }
243
+ };
244
+ return repository;
245
+ }
246
+ const jidToSignalProtocolAddress = (jid) => {
247
+ const decoded = jidDecode(jid);
248
+ const { user, device, server, domainType } = decoded;
249
+ if (!user) {
250
+ throw new Error(`JID decoded but user is empty: "${jid}" -> user: "${user}", server: "${server}", device: ${device}`);
251
+ }
252
+ const signalUser = domainType !== WAJIDDomains.WHATSAPP ? `${user}_${domainType}` : user;
253
+ const finalDevice = device || 0;
254
+ if (device === 99 && decoded.server !== 'hosted' && decoded.server !== 'hosted.lid') {
255
+ throw new Error('Unexpected non-hosted device JID with device 99. This ID seems invalid. ID:' + jid);
256
+ }
257
+ return new libsignal.ProtocolAddress(signalUser, finalDevice);
258
+ };
259
+ const jidToSignalSenderKeyName = (group, user) => {
260
+ return new SenderKeyName(group, jidToSignalProtocolAddress(user));
261
+ };
262
+ function signalStorage({ creds, keys }, lidMapping) {
263
+ // Shared function to resolve PN signal address to LID if mapping exists
264
+ const resolveLIDSignalAddress = async (id) => {
265
+ if (id.includes('.')) {
266
+ const [deviceId, device] = id.split('.');
267
+ const [user, domainType_] = deviceId.split('_');
268
+ const domainType = parseInt(domainType_ || '0');
269
+ if (domainType === WAJIDDomains.LID || domainType === WAJIDDomains.HOSTED_LID)
270
+ return id;
271
+ const pnJid = `${user}${device !== '0' ? `:${device}` : ''}@${domainType === WAJIDDomains.HOSTED ? 'hosted' : 's.whatsapp.net'}`;
272
+ const lidForPN = await lidMapping.getLIDForPN(pnJid);
273
+ if (lidForPN) {
274
+ const lidAddr = jidToSignalProtocolAddress(lidForPN);
275
+ return lidAddr.toString();
276
+ }
277
+ }
278
+ return id;
279
+ };
280
+ return {
281
+ loadSession: async (id) => {
282
+ try {
283
+ const wireJid = await resolveLIDSignalAddress(id);
284
+ const { [wireJid]: sess } = await keys.get('session', [wireJid]);
285
+ if (sess) {
286
+ return libsignal.SessionRecord.deserialize(sess);
287
+ }
288
+ }
289
+ catch (e) {
290
+ return null;
291
+ }
292
+ return null;
293
+ },
294
+ storeSession: async (id, session) => {
295
+ const wireJid = await resolveLIDSignalAddress(id);
296
+ await keys.set({ session: { [wireJid]: session.serialize() } });
297
+ },
298
+ isTrustedIdentity: () => {
299
+ return true; // todo: implement
300
+ },
301
+ loadPreKey: async (id) => {
302
+ const keyId = id.toString();
303
+ const { [keyId]: key } = await keys.get('pre-key', [keyId]);
304
+ if (key) {
305
+ return {
306
+ privKey: Buffer.from(key.private),
307
+ pubKey: Buffer.from(key.public)
308
+ };
309
+ }
310
+ },
311
+ removePreKey: (id) => keys.set({ 'pre-key': { [id]: null } }),
312
+ loadSignedPreKey: () => {
313
+ const key = creds.signedPreKey;
314
+ return {
315
+ privKey: Buffer.from(key.keyPair.private),
316
+ pubKey: Buffer.from(key.keyPair.public)
317
+ };
318
+ },
319
+ loadSenderKey: async (senderKeyName) => {
320
+ const keyId = senderKeyName.toString();
321
+ const { [keyId]: key } = await keys.get('sender-key', [keyId]);
322
+ if (key) {
323
+ return SenderKeyRecord.deserialize(key);
324
+ }
325
+ return new SenderKeyRecord();
326
+ },
327
+ storeSenderKey: async (senderKeyName, key) => {
328
+ const keyId = senderKeyName.toString();
329
+ const serialized = JSON.stringify(key.serialize());
330
+ await keys.set({ 'sender-key': { [keyId]: Buffer.from(serialized, 'utf-8') } });
331
+ },
332
+ getOurRegistrationId: () => creds.registrationId,
333
+ getOurIdentity: () => {
334
+ const { signedIdentityKey } = creds;
335
+ return {
336
+ privKey: Buffer.from(signedIdentityKey.private),
337
+ pubKey: Buffer.from(generateSignalPubKey(signedIdentityKey.public))
338
+ };
339
+ }
340
+ };
341
+ }
342
+ //# sourceMappingURL=libsignal.js.map