@pontalabs/baileys 1.0.4 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +267 -839
  3. package/WAProto/GenerateStatics.sh +3 -4
  4. package/WAProto/WAProto.proto +1215 -511
  5. package/WAProto/fix-imports.js +85 -0
  6. package/WAProto/index.d.ts +14017 -55
  7. package/WAProto/index.js +97689 -29
  8. package/engine-requirements.js +10 -0
  9. package/lib/Defaults/index.d.ts +72 -74
  10. package/lib/Defaults/index.d.ts.map +1 -0
  11. package/lib/Defaults/index.js +94 -108
  12. package/lib/Defaults/index.js.map +1 -0
  13. package/lib/Signal/Group/ciphertext-message.d.ts +8 -7
  14. package/lib/Signal/Group/ciphertext-message.d.ts.map +1 -0
  15. package/lib/Signal/Group/ciphertext-message.js +9 -16
  16. package/lib/Signal/Group/ciphertext-message.js.map +1 -0
  17. package/lib/Signal/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 +19 -61
  20. package/lib/Signal/Group/group-session-builder.js.map +1 -0
  21. package/lib/Signal/Group/group_cipher.d.ts +14 -16
  22. package/lib/Signal/Group/group_cipher.d.ts.map +1 -0
  23. package/lib/Signal/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 -11
  26. package/lib/Signal/Group/index.d.ts.map +1 -0
  27. package/lib/Signal/Group/index.js +12 -61
  28. package/lib/Signal/Group/index.js.map +1 -0
  29. package/lib/Signal/Group/keyhelper.d.ts +9 -14
  30. package/lib/Signal/Group/keyhelper.d.ts.map +1 -0
  31. package/lib/Signal/Group/keyhelper.js +10 -58
  32. package/lib/Signal/Group/keyhelper.js.map +1 -0
  33. package/lib/Signal/Group/sender-chain-key.d.ts +13 -13
  34. package/lib/Signal/Group/sender-chain-key.d.ts.map +1 -0
  35. package/lib/Signal/Group/sender-chain-key.js +13 -34
  36. package/lib/Signal/Group/sender-chain-key.js.map +1 -0
  37. package/lib/Signal/Group/sender-key-distribution-message.d.ts +16 -16
  38. package/lib/Signal/Group/sender-key-distribution-message.d.ts.map +1 -0
  39. package/lib/Signal/Group/sender-key-distribution-message.js +28 -36
  40. package/lib/Signal/Group/sender-key-distribution-message.js.map +1 -0
  41. package/lib/Signal/Group/sender-key-message.d.ts +18 -18
  42. package/lib/Signal/Group/sender-key-message.d.ts.map +1 -0
  43. package/lib/Signal/Group/sender-key-message.js +38 -45
  44. package/lib/Signal/Group/sender-key-message.js.map +1 -0
  45. package/lib/Signal/Group/sender-key-name.d.ts +14 -15
  46. package/lib/Signal/Group/sender-key-name.d.ts.map +1 -0
  47. package/lib/Signal/Group/sender-key-name.js +20 -31
  48. package/lib/Signal/Group/sender-key-name.js.map +1 -0
  49. package/lib/Signal/Group/sender-key-record.d.ts +24 -25
  50. package/lib/Signal/Group/sender-key-record.d.ts.map +1 -0
  51. package/lib/Signal/Group/sender-key-record.js +18 -35
  52. package/lib/Signal/Group/sender-key-record.js.map +1 -0
  53. package/lib/Signal/Group/sender-key-state.d.ts +29 -34
  54. package/lib/Signal/Group/sender-key-state.d.ts.map +1 -0
  55. package/lib/Signal/Group/sender-key-state.js +37 -100
  56. package/lib/Signal/Group/sender-key-state.js.map +1 -0
  57. package/lib/Signal/Group/sender-message-key.d.ts +11 -10
  58. package/lib/Signal/Group/sender-message-key.d.ts.map +1 -0
  59. package/lib/Signal/Group/sender-message-key.js +15 -22
  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 +279 -121
  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 +277 -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 +29 -37
  80. package/lib/Socket/Client/websocket.js.map +1 -0
  81. package/lib/Socket/business.d.ts +208 -178
  82. package/lib/Socket/business.d.ts.map +1 -0
  83. package/lib/Socket/business.js +91 -127
  84. package/lib/Socket/business.js.map +1 -0
  85. package/lib/Socket/chats.d.ts +120 -93
  86. package/lib/Socket/chats.d.ts.map +1 -0
  87. package/lib/Socket/chats.js +727 -652
  88. package/lib/Socket/chats.js.map +1 -0
  89. package/lib/Socket/communities.d.ts +273 -0
  90. package/lib/Socket/communities.d.ts.map +1 -0
  91. package/lib/Socket/communities.js +431 -0
  92. package/lib/Socket/communities.js.map +1 -0
  93. package/lib/Socket/dugong.js +261 -0
  94. package/lib/Socket/dugong.js.bak +204 -0
  95. package/lib/Socket/groups.d.ts +143 -111
  96. package/lib/Socket/groups.d.ts.map +1 -0
  97. package/lib/Socket/groups.js +165 -177
  98. package/lib/Socket/groups.js.map +1 -0
  99. package/lib/Socket/index.d.ts +252 -183
  100. package/lib/Socket/index.d.ts.map +1 -0
  101. package/lib/Socket/index.js +38 -18
  102. package/lib/Socket/index.js.bak +44 -0
  103. package/lib/Socket/index.js.map +1 -0
  104. package/lib/Socket/messages-recv.d.ts +196 -167
  105. package/lib/Socket/messages-recv.d.ts.map +1 -0
  106. package/lib/Socket/messages-recv.js +1443 -1563
  107. package/lib/Socket/messages-recv.js.map +1 -0
  108. package/lib/Socket/messages-send.d.ts +192 -158
  109. package/lib/Socket/messages-send.d.ts.map +1 -0
  110. package/lib/Socket/messages-send.js +1102 -1208
  111. package/lib/Socket/messages-send.js.bak +1400 -0
  112. package/lib/Socket/messages-send.js.map +1 -0
  113. package/lib/Socket/mex.d.ts +3 -0
  114. package/lib/Socket/mex.d.ts.map +1 -0
  115. package/lib/Socket/mex.js +42 -0
  116. package/lib/Socket/mex.js.map +1 -0
  117. package/lib/Socket/newsletter.d.ts +163 -138
  118. package/lib/Socket/newsletter.d.ts.map +1 -0
  119. package/lib/Socket/newsletter.js +153 -249
  120. package/lib/Socket/newsletter.js.map +1 -0
  121. package/lib/Socket/socket.d.ts +50 -36
  122. package/lib/Socket/socket.d.ts.map +1 -0
  123. package/lib/Socket/socket.js +749 -820
  124. package/lib/Socket/socket.js.map +1 -0
  125. package/lib/Store/index.d.ts +4 -4
  126. package/lib/Store/index.d.ts.map +1 -0
  127. package/lib/Store/index.js +4 -24
  128. package/lib/Store/index.js.map +1 -0
  129. package/lib/Store/make-in-memory-store.d.ts +44 -104
  130. package/lib/Store/make-in-memory-store.d.ts.map +1 -0
  131. package/lib/Store/make-in-memory-store.js +199 -213
  132. package/lib/Store/make-in-memory-store.js.map +1 -0
  133. package/lib/Store/make-ordered-dictionary.d.ts +13 -12
  134. package/lib/Store/make-ordered-dictionary.d.ts.map +1 -0
  135. package/lib/Store/make-ordered-dictionary.js +38 -45
  136. package/lib/Store/make-ordered-dictionary.js.map +1 -0
  137. package/lib/Store/object-repository.d.ts +11 -10
  138. package/lib/Store/object-repository.d.ts.map +1 -0
  139. package/lib/Store/object-repository.js +9 -16
  140. package/lib/Store/object-repository.js.map +1 -0
  141. package/lib/Types/Auth.d.ts +93 -97
  142. package/lib/Types/Auth.d.ts.map +1 -0
  143. package/lib/Types/Auth.js +2 -3
  144. package/lib/Types/Auth.js.map +1 -0
  145. package/lib/Types/Bussines.d.ts +25 -0
  146. package/lib/Types/Bussines.d.ts.map +1 -0
  147. package/lib/Types/Bussines.js +2 -3
  148. package/lib/Types/Bussines.js.map +1 -0
  149. package/lib/Types/Call.d.ts +14 -13
  150. package/lib/Types/Call.d.ts.map +1 -0
  151. package/lib/Types/Call.js +2 -3
  152. package/lib/Types/Call.js.map +1 -0
  153. package/lib/Types/Chat.d.ts +78 -97
  154. package/lib/Types/Chat.d.ts.map +1 -0
  155. package/lib/Types/Chat.js +8 -9
  156. package/lib/Types/Chat.js.map +1 -0
  157. package/lib/Types/Contact.d.ts +12 -9
  158. package/lib/Types/Contact.d.ts.map +1 -0
  159. package/lib/Types/Contact.js +2 -3
  160. package/lib/Types/Contact.js.map +1 -0
  161. package/lib/Types/Events.d.ts +206 -176
  162. package/lib/Types/Events.d.ts.map +1 -0
  163. package/lib/Types/Events.js +2 -3
  164. package/lib/Types/Events.js.map +1 -0
  165. package/lib/Types/GroupMetadata.d.ts +53 -48
  166. package/lib/Types/GroupMetadata.d.ts.map +1 -0
  167. package/lib/Types/GroupMetadata.js +2 -3
  168. package/lib/Types/GroupMetadata.js.map +1 -0
  169. package/lib/Types/Label.d.ts +13 -14
  170. package/lib/Types/Label.d.ts.map +1 -0
  171. package/lib/Types/Label.js +24 -30
  172. package/lib/Types/Label.js.map +1 -0
  173. package/lib/Types/LabelAssociation.d.ts +15 -20
  174. package/lib/Types/LabelAssociation.d.ts.map +1 -0
  175. package/lib/Types/LabelAssociation.js +6 -12
  176. package/lib/Types/LabelAssociation.js.map +1 -0
  177. package/lib/Types/Message.d.ts +248 -412
  178. package/lib/Types/Message.d.ts.map +1 -0
  179. package/lib/Types/Message.js +17 -19
  180. package/lib/Types/Message.js.map +1 -0
  181. package/lib/Types/Mex.d.ts +141 -0
  182. package/lib/Types/Mex.d.ts.map +1 -0
  183. package/lib/Types/Mex.js +37 -0
  184. package/lib/Types/Mex.js.map +1 -0
  185. package/lib/Types/Product.d.ts +58 -71
  186. package/lib/Types/Product.d.ts.map +1 -0
  187. package/lib/Types/Product.js +2 -3
  188. package/lib/Types/Product.js.map +1 -0
  189. package/lib/Types/RichType.d.ts +3 -0
  190. package/lib/Types/RichType.d.ts.map +1 -0
  191. package/lib/Types/RichType.js +23 -0
  192. package/lib/Types/RichType.js.bak +23 -0
  193. package/lib/Types/RichType.js.map +1 -0
  194. package/lib/Types/Signal.d.ts +71 -82
  195. package/lib/Types/Signal.d.ts.map +1 -0
  196. package/lib/Types/Signal.js +2 -3
  197. package/lib/Types/Signal.js.map +1 -0
  198. package/lib/Types/Socket.d.ts +76 -81
  199. package/lib/Types/Socket.d.ts.map +1 -0
  200. package/lib/Types/Socket.js +3 -3
  201. package/lib/Types/Socket.js.map +1 -0
  202. package/lib/Types/State.d.ts +75 -19
  203. package/lib/Types/State.d.ts.map +1 -0
  204. package/lib/Types/State.js +56 -14
  205. package/lib/Types/State.js.map +1 -0
  206. package/lib/Types/USync.d.ts +8 -8
  207. package/lib/Types/USync.d.ts.map +1 -0
  208. package/lib/Types/USync.js +2 -3
  209. package/lib/Types/USync.js.map +1 -0
  210. package/lib/Types/index.d.ts +47 -62
  211. package/lib/Types/index.d.ts.map +1 -0
  212. package/lib/Types/index.js +26 -50
  213. package/lib/Types/index.js.map +1 -0
  214. package/lib/Utils/auth-utils.d.ts +13 -10
  215. package/lib/Utils/auth-utils.d.ts.map +1 -0
  216. package/lib/Utils/auth-utils.js +213 -454
  217. package/lib/Utils/auth-utils.js.map +1 -0
  218. package/lib/Utils/browser-utils.d.ts +4 -0
  219. package/lib/Utils/browser-utils.d.ts.map +1 -0
  220. package/lib/Utils/browser-utils.js +28 -0
  221. package/lib/Utils/browser-utils.js.map +1 -0
  222. package/lib/Utils/business.d.ts +14 -20
  223. package/lib/Utils/business.d.ts.map +1 -0
  224. package/lib/Utils/business.js +110 -134
  225. package/lib/Utils/business.js.map +1 -0
  226. package/lib/Utils/chat-utils.d.ts +88 -70
  227. package/lib/Utils/chat-utils.d.ts.map +1 -0
  228. package/lib/Utils/chat-utils.js +466 -403
  229. package/lib/Utils/chat-utils.js.map +1 -0
  230. package/lib/Utils/companion-reg-client-utils.d.ts +17 -0
  231. package/lib/Utils/companion-reg-client-utils.d.ts.map +1 -0
  232. package/lib/Utils/companion-reg-client-utils.js +35 -0
  233. package/lib/Utils/companion-reg-client-utils.js.map +1 -0
  234. package/lib/Utils/crypto.d.ts +27 -46
  235. package/lib/Utils/crypto.d.ts.map +1 -0
  236. package/lib/Utils/crypto.js +117 -188
  237. package/lib/Utils/crypto.js.map +1 -0
  238. package/lib/Utils/decode-wa-message.d.ts +58 -45
  239. package/lib/Utils/decode-wa-message.d.ts.map +1 -0
  240. package/lib/Utils/decode-wa-message.js +213 -303
  241. package/lib/Utils/decode-wa-message.js.map +1 -0
  242. package/lib/Utils/event-buffer.d.ts +14 -17
  243. package/lib/Utils/event-buffer.d.ts.map +1 -0
  244. package/lib/Utils/event-buffer.js +321 -296
  245. package/lib/Utils/event-buffer.js.map +1 -0
  246. package/lib/Utils/generics.d.ts +66 -92
  247. package/lib/Utils/generics.d.ts.map +1 -0
  248. package/lib/Utils/generics.js +270 -436
  249. package/lib/Utils/generics.js.map +1 -0
  250. package/lib/Utils/history.d.ts +24 -23
  251. package/lib/Utils/history.d.ts.map +1 -0
  252. package/lib/Utils/history.js +106 -76
  253. package/lib/Utils/history.js.map +1 -0
  254. package/lib/Utils/identity-change-handler.d.ts +44 -0
  255. package/lib/Utils/identity-change-handler.d.ts.map +1 -0
  256. package/lib/Utils/identity-change-handler.js +50 -0
  257. package/lib/Utils/identity-change-handler.js.map +1 -0
  258. package/lib/Utils/index.d.ts +24 -21
  259. package/lib/Utils/index.d.ts.map +1 -0
  260. package/lib/Utils/index.js +24 -41
  261. package/lib/Utils/index.js.map +1 -0
  262. package/lib/Utils/link-preview.d.ts +12 -14
  263. package/lib/Utils/link-preview.d.ts.map +1 -0
  264. package/lib/Utils/link-preview.js +40 -75
  265. package/lib/Utils/link-preview.js.map +1 -0
  266. package/lib/Utils/logger.d.ts +10 -11
  267. package/lib/Utils/logger.d.ts.map +1 -0
  268. package/lib/Utils/logger.js +3 -7
  269. package/lib/Utils/logger.js.map +1 -0
  270. package/lib/Utils/lt-hash.d.ts +8 -14
  271. package/lib/Utils/lt-hash.d.ts.map +1 -0
  272. package/lib/Utils/lt-hash.js +3 -53
  273. package/lib/Utils/lt-hash.js.map +1 -0
  274. package/lib/Utils/make-mutex.d.ts +7 -7
  275. package/lib/Utils/make-mutex.d.ts.map +1 -0
  276. package/lib/Utils/make-mutex.js +28 -44
  277. package/lib/Utils/make-mutex.js.map +1 -0
  278. package/lib/Utils/message-retry-manager.d.ts +115 -88
  279. package/lib/Utils/message-retry-manager.d.ts.map +1 -0
  280. package/lib/Utils/message-retry-manager.js +265 -160
  281. package/lib/Utils/message-retry-manager.js.map +1 -0
  282. package/lib/Utils/messages-media.d.ts +105 -107
  283. package/lib/Utils/messages-media.d.ts.map +1 -0
  284. package/lib/Utils/messages-media.js +548 -619
  285. package/lib/Utils/messages-media.js.bak +786 -0
  286. package/lib/Utils/messages-media.js.map +1 -0
  287. package/lib/Utils/messages.d.ts +52 -66
  288. package/lib/Utils/messages.d.ts.map +1 -0
  289. package/lib/Utils/messages.js +1730 -1558
  290. package/lib/Utils/messages.js.backup +1768 -0
  291. package/lib/Utils/messages.js.bak +1809 -0
  292. package/lib/Utils/messages.js.bak2 +893 -0
  293. package/lib/Utils/messages.js.bak3 +1183 -0
  294. package/lib/Utils/messages.js.map +1 -0
  295. package/lib/Utils/noise-handler.d.ts +18 -18
  296. package/lib/Utils/noise-handler.d.ts.map +1 -0
  297. package/lib/Utils/noise-handler.js +176 -130
  298. package/lib/Utils/noise-handler.js.map +1 -0
  299. package/lib/Utils/offline-node-processor.d.ts +17 -0
  300. package/lib/Utils/offline-node-processor.d.ts.map +1 -0
  301. package/lib/Utils/offline-node-processor.js +40 -0
  302. package/lib/Utils/offline-node-processor.js.map +1 -0
  303. package/lib/Utils/pre-key-manager.d.ts +28 -0
  304. package/lib/Utils/pre-key-manager.d.ts.map +1 -0
  305. package/lib/Utils/pre-key-manager.js +106 -0
  306. package/lib/Utils/pre-key-manager.js.map +1 -0
  307. package/lib/Utils/process-message.d.ts +43 -32
  308. package/lib/Utils/process-message.d.ts.map +1 -0
  309. package/lib/Utils/process-message.js +484 -282
  310. package/lib/Utils/process-message.js.map +1 -0
  311. package/lib/Utils/reporting-utils.d.ts +11 -0
  312. package/lib/Utils/reporting-utils.d.ts.map +1 -0
  313. package/lib/Utils/reporting-utils.js +258 -0
  314. package/lib/Utils/reporting-utils.js.map +1 -0
  315. package/lib/Utils/rich-message-utils.d.ts +49 -0
  316. package/lib/Utils/rich-message-utils.d.ts.map +1 -0
  317. package/lib/Utils/rich-message-utils.js +1220 -724
  318. package/lib/Utils/rich-message-utils.js.backup +706 -0
  319. package/lib/Utils/rich-message-utils.js.bak +246 -0
  320. package/lib/Utils/rich-message-utils.js.map +1 -0
  321. package/lib/Utils/rich-message-utils.js.original +1332 -0
  322. package/lib/Utils/signal.d.ts +37 -32
  323. package/lib/Utils/signal.d.ts.map +1 -0
  324. package/lib/Utils/signal.js +140 -105
  325. package/lib/Utils/signal.js.map +1 -0
  326. package/lib/Utils/stanza-ack.d.ts +11 -0
  327. package/lib/Utils/stanza-ack.d.ts.map +1 -0
  328. package/lib/Utils/stanza-ack.js +38 -0
  329. package/lib/Utils/stanza-ack.js.map +1 -0
  330. package/lib/Utils/sync-action-utils.d.ts +19 -0
  331. package/lib/Utils/sync-action-utils.d.ts.map +1 -0
  332. package/lib/Utils/sync-action-utils.js +49 -0
  333. package/lib/Utils/sync-action-utils.js.map +1 -0
  334. package/lib/Utils/tc-token-utils.d.ts +37 -0
  335. package/lib/Utils/tc-token-utils.d.ts.map +1 -0
  336. package/lib/Utils/tc-token-utils.js +163 -0
  337. package/lib/Utils/tc-token-utils.js.map +1 -0
  338. package/lib/Utils/use-multi-file-auth-state.d.ts +5 -5
  339. package/lib/Utils/use-multi-file-auth-state.d.ts.map +1 -0
  340. package/lib/Utils/use-multi-file-auth-state.js +70 -120
  341. package/lib/Utils/use-multi-file-auth-state.js.map +1 -0
  342. package/lib/Utils/use-single-file-auth-state.d.ts +11 -13
  343. package/lib/Utils/use-single-file-auth-state.d.ts.map +1 -0
  344. package/lib/Utils/use-single-file-auth-state.js +92 -66
  345. package/lib/Utils/use-single-file-auth-state.js.map +1 -0
  346. package/lib/Utils/use-sqlite-auth-state.d.ts +11 -0
  347. package/lib/Utils/use-sqlite-auth-state.d.ts.map +1 -0
  348. package/lib/Utils/use-sqlite-auth-state.js +109 -0
  349. package/lib/Utils/use-sqlite-auth-state.js.map +1 -0
  350. package/lib/Utils/validate-connection.d.ts +11 -13
  351. package/lib/Utils/validate-connection.d.ts.map +1 -0
  352. package/lib/Utils/validate-connection.js +128 -113
  353. package/lib/Utils/validate-connection.js.map +1 -0
  354. package/lib/WABinary/constants.d.ts +25 -27
  355. package/lib/WABinary/constants.d.ts.map +1 -0
  356. package/lib/WABinary/constants.js +1451 -1292
  357. package/lib/WABinary/constants.js.bak +1373 -0
  358. package/lib/WABinary/constants.js.map +1 -0
  359. package/lib/WABinary/decode.d.ts +7 -9
  360. package/lib/WABinary/decode.d.ts.map +1 -0
  361. package/lib/WABinary/decode.js +163 -189
  362. package/lib/WABinary/decode.js.map +1 -0
  363. package/lib/WABinary/encode.d.ts +3 -3
  364. package/lib/WABinary/encode.d.ts.map +1 -0
  365. package/lib/WABinary/encode.js +110 -155
  366. package/lib/WABinary/encode.js.map +1 -0
  367. package/lib/WABinary/generic-utils.d.ts +14 -27
  368. package/lib/WABinary/generic-utils.d.ts.map +1 -0
  369. package/lib/WABinary/generic-utils.js +177 -105
  370. package/lib/WABinary/generic-utils.js.map +1 -0
  371. package/lib/WABinary/index.d.ts +6 -5
  372. package/lib/WABinary/index.d.ts.map +1 -0
  373. package/lib/WABinary/index.js +6 -25
  374. package/lib/WABinary/index.js.map +1 -0
  375. package/lib/WABinary/jid-utils.d.ts +41 -51
  376. package/lib/WABinary/jid-utils.d.ts.map +1 -0
  377. package/lib/WABinary/jid-utils.js +83 -120
  378. package/lib/WABinary/jid-utils.js.map +1 -0
  379. package/lib/WABinary/types.d.ts +10 -13
  380. package/lib/WABinary/types.d.ts.map +1 -0
  381. package/lib/WABinary/types.js +2 -3
  382. package/lib/WABinary/types.js.map +1 -0
  383. package/lib/WAM/BinaryInfo.d.ts +8 -15
  384. package/lib/WAM/BinaryInfo.d.ts.map +1 -0
  385. package/lib/WAM/BinaryInfo.js +7 -14
  386. package/lib/WAM/BinaryInfo.js.map +1 -0
  387. package/lib/WAM/constants.d.ts +30 -37
  388. package/lib/WAM/constants.d.ts.map +1 -0
  389. package/lib/WAM/constants.js +19193 -11711
  390. package/lib/WAM/constants.js.map +1 -0
  391. package/lib/WAM/encode.d.ts +3 -3
  392. package/lib/WAM/encode.d.ts.map +1 -0
  393. package/lib/WAM/encode.js +95 -109
  394. package/lib/WAM/encode.js.map +1 -0
  395. package/lib/WAM/index.d.ts +4 -3
  396. package/lib/WAM/index.d.ts.map +1 -0
  397. package/lib/WAM/index.js +4 -23
  398. package/lib/WAM/index.js.map +1 -0
  399. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +9 -9
  400. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +1 -0
  401. package/lib/WAUSync/Protocols/USyncContactProtocol.js +37 -21
  402. package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +1 -0
  403. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +19 -22
  404. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map +1 -0
  405. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +18 -26
  406. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map +1 -0
  407. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +11 -12
  408. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map +1 -0
  409. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +12 -20
  410. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map +1 -0
  411. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +11 -12
  412. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map +1 -0
  413. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +16 -24
  414. package/lib/WAUSync/Protocols/USyncStatusProtocol.js.map +1 -0
  415. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +10 -0
  416. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts.map +1 -0
  417. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +25 -0
  418. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js.map +1 -0
  419. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +26 -0
  420. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts.map +1 -0
  421. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +51 -0
  422. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js.map +1 -0
  423. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +10 -0
  424. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts.map +1 -0
  425. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +29 -0
  426. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js.map +1 -0
  427. package/lib/WAUSync/Protocols/index.d.ts +6 -6
  428. package/lib/WAUSync/Protocols/index.d.ts.map +1 -0
  429. package/lib/WAUSync/Protocols/index.js +6 -26
  430. package/lib/WAUSync/Protocols/index.js.map +1 -0
  431. package/lib/WAUSync/USyncQuery.d.ts +27 -28
  432. package/lib/WAUSync/USyncQuery.d.ts.map +1 -0
  433. package/lib/WAUSync/USyncQuery.js +68 -62
  434. package/lib/WAUSync/USyncQuery.js.map +1 -0
  435. package/lib/WAUSync/USyncUser.d.ts +15 -10
  436. package/lib/WAUSync/USyncUser.d.ts.map +1 -0
  437. package/lib/WAUSync/USyncUser.js +20 -19
  438. package/lib/WAUSync/USyncUser.js.map +1 -0
  439. package/lib/WAUSync/index.d.ts +4 -3
  440. package/lib/WAUSync/index.d.ts.map +1 -0
  441. package/lib/WAUSync/index.js +4 -23
  442. package/lib/WAUSync/index.js.map +1 -0
  443. package/lib/index.d.ts +11 -12
  444. package/lib/index.d.ts.map +1 -0
  445. package/lib/index.js +12 -39
  446. package/lib/index.js.map +1 -0
  447. package/package.json +86 -42
@@ -1,24 +1,42 @@
1
- "use strict"
2
-
3
- Object.defineProperty(exports, "__esModule", { value: true })
4
-
5
- const boom_1 = require("@hapi/boom")
6
- const WAProto_1 = require("../../WAProto")
7
- const WABinary_1 = require("../WABinary")
8
- const generics_1 = require("./generics")
9
- const messages_1 = require("./messages")
10
-
11
- const NO_MESSAGE_FOUND_ERROR_TEXT = 'Message absent from node'
12
-
13
- const MISSING_KEYS_ERROR_TEXT = 'Key used already or never filled'
14
-
15
- const DECRYPTION_RETRY_CONFIG = {
1
+ import { Boom } from '@hapi/boom';
2
+ import { proto } from '../../WAProto/index.js';
3
+ import { areJidsSameUser, isHostedLidUser, isHostedPnUser, isJidBroadcast, isJidGroup, isJidMetaAI, isJidNewsletter, isJidStatusBroadcast, isLidUser, isPnUser
4
+ // transferDevice
5
+ } from '../WABinary/index.js';
6
+ import { unpadRandomMax16 } from './generics.js';
7
+ export const getDecryptionJid = async (sender, repository) => {
8
+ if (isLidUser(sender) || isHostedLidUser(sender)) {
9
+ return sender;
10
+ }
11
+ const mapped = await repository.lidMapping.getLIDForPN(sender);
12
+ return mapped || sender;
13
+ };
14
+ const storeMappingFromEnvelope = async (stanza, sender, repository, decryptionJid, logger) => {
15
+ // TODO: Handle hosted IDs
16
+ const { senderAlt } = extractAddressingContext(stanza);
17
+ if (senderAlt && isLidUser(senderAlt) && isPnUser(sender) && decryptionJid === sender) {
18
+ try {
19
+ await repository.lidMapping.storeLIDPNMappings([{ lid: senderAlt, pn: sender }]);
20
+ await repository.migrateSession(sender, senderAlt);
21
+ logger.debug({ sender, senderAlt }, 'Stored LID mapping from envelope');
22
+ }
23
+ catch (error) {
24
+ logger.warn({ sender, senderAlt, error }, 'Failed to store LID mapping');
25
+ }
26
+ }
27
+ };
28
+ export const NO_MESSAGE_FOUND_ERROR_TEXT = 'Message absent from node';
29
+ export const MISSING_KEYS_ERROR_TEXT = 'Key used already or never filled';
30
+ export const ACCOUNT_RESTRICTED_TEXT = 'Your account has been restricted';
31
+ // Retry configuration for failed decryption
32
+ export const DECRYPTION_RETRY_CONFIG = {
16
33
  maxRetries: 3,
17
34
  baseDelayMs: 100,
18
35
  sessionRecordErrors: ['No session record', 'SessionError: No session record']
19
- }
20
-
21
- const NACK_REASONS = {
36
+ };
37
+ /** NACK reason codes we send to the server (client → server) */
38
+ export const NACK_REASONS = {
39
+ SenderReachoutTimelocked: 463,
22
40
  ParsingError: 487,
23
41
  UnrecognizedStanza: 488,
24
42
  UnrecognizedStanzaClass: 489,
@@ -32,337 +50,235 @@ const NACK_REASONS = {
32
50
  UnsupportedAdminRevoke: 550,
33
51
  UnsupportedLIDGroup: 551,
34
52
  DBOperationFailed: 552
35
- }
36
-
37
- function getTypeMessage(message) {
38
- const type = Object.keys(message)
39
- const restype = (!['senderKeyDistributionMessage', 'messageContextInfo'].includes(type[0]) && type[0]) || (type.length >= 3 && type[1] !== 'messageContextInfo' && type[1]) || type[type.length - 1] || Object.keys(message)[0]
40
- return restype
41
- }
42
-
43
- function decodeMessageNode(stanza, meId, meLid) {
44
- let msg_type
45
- let chat_id
46
- let author
47
- const msgId = stanza.attrs.id
48
- const from = stanza.attrs.from
49
- const participant = stanza.attrs.addressing_mode === "lid" ? stanza.attrs.participant_pn : stanza.attrs.addressing_mode === "pn" ? stanza.attrs.participant : from;
50
- const participant_lid = stanza.attrs.addressing_mode === "lid" ? stanza.attrs.participant : stanza.attrs.addressing_mode === "pn" ? stanza.attrs.participant_lid : stanza.attrs.sender_lid;
51
- const recipient = stanza.attrs.recipient
52
- const isMe = (jid) => WABinary_1.areJidsSameUser(jid, meId)
53
- const isMeLid = (jid) => WABinary_1.areJidsSameUser(jid, meLid)
54
- if (WABinary_1.isJidUser(from)) {
55
- if (recipient) {
56
- if (!isMe(from)) {
57
- throw new boom_1.Boom('receipient present, but msg not from me', { data: stanza })
53
+ };
54
+ /**
55
+ * Server-side error codes returned in ack stanzas (server → client) that we
56
+ * currently have dedicated handlers for. Extend as more handlers are added.
57
+ * Distinct from the client-side NackReason enum (WAWebCreateNackFromStanza).
58
+ */
59
+ export const SERVER_ERROR_CODES = {
60
+ /**
61
+ * 1:1 message missing privacy token (tctoken). Usually means the account is
62
+ * restricted: WhatsApp blocks starting new chats but preserves existing ones,
63
+ * since established chats already carry a tctoken.
64
+ */
65
+ MessageAccountRestriction: '463',
66
+ /** Stanza validation failure (SMAX_INVALID) — likely stale device session */
67
+ SmaxInvalid: '479'
68
+ };
69
+ export const extractAddressingContext = (stanza) => {
70
+ let senderAlt;
71
+ let recipientAlt;
72
+ const sender = stanza.attrs.participant || stanza.attrs.from;
73
+ const addressingMode = stanza.attrs.addressing_mode || (sender?.endsWith('lid') ? 'lid' : 'pn');
74
+ if (addressingMode === 'lid') {
75
+ // Message is LID-addressed: sender is LID, extract corresponding PN
76
+ // without device data
77
+ senderAlt = stanza.attrs.participant_pn || stanza.attrs.sender_pn || stanza.attrs.peer_recipient_pn;
78
+ recipientAlt = stanza.attrs.recipient_pn;
79
+ // with device data
80
+ //if (sender && senderAlt) senderAlt = transferDevice(sender, senderAlt)
81
+ }
82
+ else {
83
+ // Message is PN-addressed: sender is PN, extract corresponding LID
84
+ // without device data
85
+ senderAlt = stanza.attrs.participant_lid || stanza.attrs.sender_lid || stanza.attrs.peer_recipient_lid;
86
+ recipientAlt = stanza.attrs.recipient_lid;
87
+ //with device data
88
+ //if (sender && senderAlt) senderAlt = transferDevice(sender, senderAlt)
89
+ }
90
+ return {
91
+ addressingMode,
92
+ senderAlt,
93
+ recipientAlt
94
+ };
95
+ };
96
+ /**
97
+ * Decode the received node as a message.
98
+ * @note this will only parse the message, not decrypt it
99
+ */
100
+ export function decodeMessageNode(stanza, meId, meLid) {
101
+ let msgType;
102
+ let chatId;
103
+ let author;
104
+ let fromMe = false;
105
+ const msgId = stanza.attrs.id;
106
+ const from = stanza.attrs.from;
107
+ const participant = stanza.attrs.participant;
108
+ const recipient = stanza.attrs.recipient;
109
+ if (!msgId) {
110
+ throw new Boom('Invalid message stanza: missing id attribute', { data: stanza });
111
+ }
112
+ if (!from) {
113
+ throw new Boom('Invalid message stanza: missing from attribute', { data: stanza });
114
+ }
115
+ const addressingContext = extractAddressingContext(stanza);
116
+ const isMe = (jid) => areJidsSameUser(jid, meId);
117
+ const isMeLid = (jid) => areJidsSameUser(jid, meLid);
118
+ if (isPnUser(from) || isLidUser(from) || isHostedLidUser(from) || isHostedPnUser(from)) {
119
+ if (recipient && !isJidMetaAI(recipient)) {
120
+ if (!isMe(from) && !isMeLid(from)) {
121
+ throw new Boom('receipient present, but msg not from me', { data: stanza });
58
122
  }
59
- chat_id = recipient
60
- }
61
- else {
62
- chat_id = from
63
- }
64
- msg_type = 'chat'
65
- author = from
66
- } else if (WABinary_1.isLidUser(from)) {
67
- if (recipient) {
68
- if (!isMeLid(from)) {
69
- throw new boom_1.Boom('receipient present, but msg not from me', { data: stanza })
123
+ if (isMe(from) || isMeLid(from)) {
124
+ fromMe = true;
70
125
  }
71
- // FIX: recipient mungkin LID juga, gunakan peer_recipient_pn jika ada
72
- chat_id = stanza.attrs.peer_recipient_pn
73
- ? WABinary_1.jidNormalizedUser(stanza.attrs.peer_recipient_pn)
74
- : recipient
126
+ chatId = recipient;
75
127
  }
76
128
  else {
77
- // FIX: chat_id dari LID → resolve ke JID via sender_pn
78
- chat_id = stanza.attrs.sender_pn
79
- ? WABinary_1.jidNormalizedUser(stanza.attrs.sender_pn)
80
- : stanza.attrs.peer_recipient_pn
81
- ? WABinary_1.jidNormalizedUser(stanza.attrs.peer_recipient_pn)
82
- : from
129
+ chatId = from;
83
130
  }
84
- msg_type = 'chat'
85
- // FIX: untuk private LID chat, gunakan sender_pn/participant_pn sebagai author
86
- // agar key.remoteJid dan author tidak berupa LID mentah
87
- author = stanza.attrs.sender_pn
88
- || stanza.attrs.participant_pn
89
- || stanza.attrs.peer_recipient_pn
90
- || from
91
- } else if (WABinary_1.isJidGroup(from)) {
131
+ msgType = 'chat';
132
+ author = from;
133
+ }
134
+ else if (isJidGroup(from)) {
92
135
  if (!participant) {
93
- throw new boom_1.Boom('No participant in group message')
136
+ throw new Boom('No participant in group message');
137
+ }
138
+ if (isMe(participant) || isMeLid(participant)) {
139
+ fromMe = true;
94
140
  }
95
- msg_type = 'group'
96
- author = participant
97
- chat_id = from
98
- } else if (WABinary_1.isJidBroadcast(from)) {
141
+ msgType = 'group';
142
+ author = participant;
143
+ chatId = from;
144
+ }
145
+ else if (isJidBroadcast(from)) {
99
146
  if (!participant) {
100
- throw new boom_1.Boom('No participant in group message')
147
+ throw new Boom('No participant in group message');
101
148
  }
102
- const isParticipantMe = isMe(participant)
103
- if (WABinary_1.isJidStatusBroadcast(from)) {
104
- msg_type = isParticipantMe ? 'direct_peer_status' : 'other_status'
149
+ const isParticipantMe = isMe(participant);
150
+ if (isJidStatusBroadcast(from)) {
151
+ msgType = isParticipantMe ? 'direct_peer_status' : 'other_status';
105
152
  }
106
153
  else {
107
- msg_type = isParticipantMe ? 'peer_broadcast' : 'other_broadcast'
154
+ msgType = isParticipantMe ? 'peer_broadcast' : 'other_broadcast';
108
155
  }
109
- chat_id = from
110
- author = participant
111
- } else if (WABinary_1.isJidNewsletter(from)) {
112
- msg_type = 'newsletter'
113
- chat_id = from
114
- author = from
115
- } else {
116
- throw new boom_1.Boom('Unknown message type', { data: stanza })
156
+ fromMe = isParticipantMe;
157
+ chatId = from;
158
+ author = participant;
117
159
  }
118
- // FIX: untuk private chat (isJidUser), participant === from (bukan undefined),
119
- // sehingga fallback ke stanza.attrs.from tidak diperlukan dan bisa menyebabkan
120
- // fromMe=true saat pesan dari orang lain di kondisi edge case LID.
121
- // Kita batasi fallback hanya untuk group (di mana participant memang bisa undefined).
122
- const fromMe = WABinary_1.isJidNewsletter(from)
123
- ? !!stanza.attrs?.is_sender
124
- : WABinary_1.isLidUser(from)
125
- ? isMeLid(participant != null ? participant : stanza.attrs.from)
126
- : (WABinary_1.isJidGroup(from) || WABinary_1.isJidBroadcast(from))
127
- ? isMe(participant != null ? participant : stanza.attrs.from)
128
- : isMe(from)
129
- const pushname = stanza?.attrs?.notify
160
+ else if (isJidNewsletter(from)) {
161
+ msgType = 'newsletter';
162
+ chatId = from;
163
+ author = from;
164
+ if (isMe(from) || isMeLid(from)) {
165
+ fromMe = true;
166
+ }
167
+ }
168
+ else {
169
+ throw new Boom('Unknown message type', { data: stanza });
170
+ }
171
+ const pushname = stanza?.attrs?.notify;
130
172
  const key = {
131
- remoteJid: chat_id,
173
+ remoteJid: chatId,
174
+ remoteJidAlt: !isJidGroup(chatId) ? addressingContext.senderAlt : undefined,
175
+ remoteJidUsername: !isJidGroup(chatId)
176
+ ? stanza.attrs.peer_recipient_username || stanza.attrs.recipient_username
177
+ : undefined,
132
178
  fromMe,
133
179
  id: msgId,
134
- participant: WABinary_1.jidNormalizedUser(participant),
135
- participant_lid: WABinary_1.jidNormalizedUser(participant_lid),
136
- }
180
+ participant,
181
+ participantAlt: isJidGroup(chatId) ? addressingContext.senderAlt : undefined,
182
+ participantUsername: stanza.attrs.participant ? stanza.attrs.participant_username : undefined,
183
+ addressingMode: addressingContext.addressingMode,
184
+ ...(msgType === 'newsletter' && stanza.attrs.server_id ? { server_id: stanza.attrs.server_id } : {})
185
+ };
137
186
  const fullMessage = {
138
187
  key,
188
+ category: stanza.attrs.category,
139
189
  messageTimestamp: +stanza.attrs.t,
140
190
  pushName: pushname,
141
- broadcast: WABinary_1.isJidBroadcast(from),
142
- newsletter: WABinary_1.isJidNewsletter(from)
143
- }
144
- if (msg_type === 'newsletter') {
145
- fullMessage.newsletter_server_id = +stanza.attrs?.server_id
146
- }
191
+ broadcast: isJidBroadcast(from)
192
+ };
147
193
  if (key.fromMe) {
148
- fullMessage.status = WAProto_1.proto.WebMessageInfo.Status.SERVER_ACK
149
- }
150
- if (!key.fromMe) {
151
- fullMessage.platform = messages_1.getDevice(key.id)
194
+ fullMessage.status = proto.WebMessageInfo.Status.SERVER_ACK;
152
195
  }
153
196
  return {
154
197
  fullMessage,
155
198
  author,
156
- sender: msg_type === 'chat' ? author : chat_id
157
- }
158
- }
159
-
160
- const getDecryptionJid = async (sender, repository) => {
161
- if (WABinary_1.isLidUser(sender)) {
162
- return sender
163
- }
164
- const mapped = await repository.lidMapping.getLIDForPN(sender)
165
- if (!mapped) {
166
- return sender
167
- }
168
- // FIX: pontalabs gak punya migrateSession (beda dari levvleys) yang
169
- // mindahin sesi Signal dari address PN ke address LID begitu mapping
170
- // disimpan. Jadi mapping doang gak jamin ada sesi beneran di address LID
171
- // itu -- kalau dipaksa pakai, decrypt gagal "No session record" walau
172
- // pesannya normal (msg, bukan pkmsg). Ini yang bikin pesan self-chat/PN
173
- // ilang total: begitu mapping ke-cache, semua decrypt berikutnya diarahin
174
- // ke LID yang sesinya gak pernah ada. Makanya sebelum pakai LID, pastikan
175
- // dulu ada sesi aktif di situ; kalau enggak, tetep pakai address asli (PN).
176
- try {
177
- const lidSession = await repository.validateSession(mapped)
178
- if (lidSession.exists) {
179
- return mapped
180
- }
181
- } catch {
182
- // biarin jatuh ke fallback sender di bawah kalau validateSession error
183
- }
184
- return sender
185
- }
186
-
187
- // FIX: pontalabs sebelumnya gak pernah menyimpan mapping LID<->PN saat pesan
188
- // masuk (levvleys punya storeMappingFromEnvelope, di sini gak ada). Akibatnya
189
- // untuk kontak yang pakai addressing LID, getDecryptionJid bisa gagal nemuin
190
- // sesi yang benar secara intermiten (tergantung cache mapping ada atau belum),
191
- // bikin decrypt gagal -> pesan jadi CIPHERTEXT -> gak pernah nyampe ke bot.
192
- const extractSenderAlt = (stanza) => {
193
- const sender = stanza.attrs.participant || stanza.attrs.from
194
- const addressingMode = stanza.attrs.addressing_mode || (sender?.endsWith('lid') ? 'lid' : 'pn')
195
- if (addressingMode === 'lid') {
196
- return stanza.attrs.participant_pn || stanza.attrs.sender_pn || stanza.attrs.peer_recipient_pn
197
- }
198
- return stanza.attrs.participant_lid || stanza.attrs.sender_lid || stanza.attrs.peer_recipient_lid
199
- }
200
-
201
- const storeMappingFromEnvelope = async (stanza, sender, repository, decryptionJid, logger) => {
202
- const senderAlt = extractSenderAlt(stanza)
203
- if (senderAlt && WABinary_1.isLidUser(senderAlt) && WABinary_1.isJidUser(sender) && decryptionJid === sender) {
204
- try {
205
- await repository.lidMapping.storeLIDPNMappings([{ lid: senderAlt, pn: sender }])
206
- if (typeof repository.migrateSession === 'function') {
207
- await repository.migrateSession(sender, senderAlt)
208
- }
209
- logger.debug({ sender, senderAlt }, 'Stored LID mapping from envelope')
210
- } catch (error) {
211
- logger.warn({ sender, senderAlt, error }, 'Failed to store LID mapping')
212
- }
213
- }
199
+ sender: msgType === 'chat' ? author : chatId
200
+ };
214
201
  }
215
-
216
- const decryptMessageNode = (stanza, meId, meLid, repository, logger) => {
217
- const { fullMessage, author, sender } = decodeMessageNode(stanza, meId, meLid)
202
+ export const decryptMessageNode = (stanza, meId, meLid, repository, logger) => {
203
+ const { fullMessage, author, sender } = decodeMessageNode(stanza, meId, meLid);
218
204
  return {
219
205
  fullMessage,
220
206
  category: stanza.attrs.category,
221
207
  author,
222
208
  async decrypt() {
223
- let decryptables = 0
209
+ let decryptables = 0;
224
210
  if (Array.isArray(stanza.content)) {
225
- // FIX: proses node non-skmsg (msg/pkmsg/plaintext) LEBIH DULU sebelum node
226
- // skmsg. Root cause "bot diam/nunggu" pas ada member baru join grup lalu
227
- // langsung kirim pesan: satu stanza berisi 2 node <enc> - satu tipe
228
- // pkmsg/msg (isinya SenderKeyDistributionMessage buat kamu) dan satu lagi
229
- // tipe skmsg (isi pesan asli, dienkripsi pakai sender-key grup). Urutan
230
- // array stanza.content dari server TIDAK dijamin naruh pkmsg/msg duluan.
231
- // Kalau skmsg kebetulan diproses duluan, sender-key belum ada di store ->
232
- // decryptGroupMessage() gagal "No SenderKeyRecord found" -> pesan pertama
233
- // dari member baru selalu gagal decrypt & jadi stub CIPHERTEXT, padahal
234
- // SKDM-nya baru "sampai" sepersekian detik kemudian di iterasi berikutnya.
235
- // Reorder di sini (stable, gak ubah urutan relatif node lain seperti
236
- // verified_name/unavailable) supaya skmsg selalu diproses PALING TERAKHIR,
237
- // setelah semua kemungkinan SKDM sudah didaftarkan ke sender-key store.
238
- const orderedContent = [
239
- ...stanza.content.filter(({ tag, attrs }) => !(tag === 'enc' && attrs.type === 'skmsg')),
240
- ...stanza.content.filter(({ tag, attrs }) => tag === 'enc' && attrs.type === 'skmsg')
241
- ]
242
- for (const { tag, attrs, content } of orderedContent) {
211
+ for (const { tag, attrs, content } of stanza.content) {
243
212
  if (tag === 'verified_name' && content instanceof Uint8Array) {
244
- const cert = WAProto_1.proto.VerifiedNameCertificate.decode(content)
245
- const details = WAProto_1.proto.VerifiedNameCertificate.Details.decode(cert.details)
246
- fullMessage.verifiedBizName = details.verifiedName
213
+ const cert = proto.VerifiedNameCertificate.decode(content);
214
+ const details = proto.VerifiedNameCertificate.Details.decode(cert.details);
215
+ fullMessage.verifiedBizName = details.verifiedName;
247
216
  }
248
217
  if (tag === 'unavailable' && attrs.type === 'view_once') {
249
- fullMessage.key.isViewOnce = true;
218
+ fullMessage.key.isViewOnce = true; // TODO: remove from here and add a STUB TYPE
250
219
  }
251
220
  if (attrs.count && tag === 'enc') {
252
- fullMessage.retryCount = Number(attrs.count)
221
+ fullMessage.retryCount = Number(attrs.count);
253
222
  }
254
223
  if (tag !== 'enc' && tag !== 'plaintext') {
255
- continue
224
+ continue;
256
225
  }
257
226
  if (!(content instanceof Uint8Array)) {
258
- continue
227
+ continue;
228
+ }
229
+ decryptables += 1;
230
+ let msgBuffer;
231
+ const decryptionJid = await getDecryptionJid(author, repository);
232
+ if (tag !== 'plaintext') {
233
+ // TODO: Handle hosted devices
234
+ await storeMappingFromEnvelope(stanza, author, repository, decryptionJid, logger);
259
235
  }
260
- decryptables += 1
261
- let msgBuffer
262
236
  try {
263
- const e2eType = tag === 'plaintext' ? 'plaintext' : attrs.type
237
+ const e2eType = tag === 'plaintext' ? 'plaintext' : attrs.type;
264
238
  switch (e2eType) {
265
239
  case 'skmsg':
266
240
  msgBuffer = await repository.decryptGroupMessage({
267
241
  group: sender,
268
242
  authorJid: author,
269
243
  msg: content
270
- })
271
- break
244
+ });
245
+ break;
272
246
  case 'pkmsg':
273
- case 'msg': {
274
- const decryptionJid = await getDecryptionJid(author, repository)
275
- await storeMappingFromEnvelope(stanza, author, repository, decryptionJid, logger)
247
+ case 'msg':
276
248
  msgBuffer = await repository.decryptMessage({
277
249
  jid: decryptionJid,
278
250
  type: e2eType,
279
251
  ciphertext: content
280
- })
281
- break
282
- }
252
+ });
253
+ break;
283
254
  case 'plaintext':
284
- msgBuffer = content
285
- break
255
+ msgBuffer = content;
256
+ break;
286
257
  default:
287
- throw new Error(`Unknown e2e type: ${e2eType}`)
258
+ throw new Error(`Unknown e2e type: ${e2eType}`);
288
259
  }
289
- let msg = WAProto_1.proto.Message.decode(e2eType !== 'plaintext' ? generics_1.unpadRandomMax16(msgBuffer) : msgBuffer)
290
- msg = msg.deviceSentMessage?.message || msg
260
+ let msg = proto.Message.decode(e2eType !== 'plaintext' ? unpadRandomMax16(msgBuffer) : msgBuffer);
261
+ msg = msg.deviceSentMessage?.message || msg;
291
262
  if (msg.senderKeyDistributionMessage) {
263
+ //eslint-disable-next-line max-depth
292
264
  try {
293
265
  await repository.processSenderKeyDistributionMessage({
294
266
  authorJid: author,
295
267
  item: msg.senderKeyDistributionMessage
296
- })
297
- } catch (err) {
298
- logger.error({ key: fullMessage.key, err }, 'failed to decrypt message')
268
+ });
269
+ }
270
+ catch (err) {
271
+ logger.error({ key: fullMessage.key, err }, 'failed to process sender key distribution message');
299
272
  }
300
273
  }
301
274
  if (fullMessage.message) {
302
- Object.assign(fullMessage.message, msg)
303
- } else {
304
- fullMessage.message = msg
275
+ Object.assign(fullMessage.message, msg);
305
276
  }
306
- if (WABinary_1.isJidGroup(sender)) {
307
- const mtype = getTypeMessage(fullMessage.message)
308
- const message = fullMessage.message?.[mtype]
309
- const contextInfo = message?.contextInfo
310
- const mentionedJid = contextInfo?.mentionedJid
311
- const processMessageLIDs = async (msgObj, msgType) => {
312
- if (!msgObj?.contextInfo) return false
313
- const contextInfo = msgObj.contextInfo
314
- const mentionedJid = contextInfo.mentionedJid
315
- let needsUpdate = false
316
- if (Array.isArray(mentionedJid) && mentionedJid.length > 0) {
317
- const metadata = await global.groupMetadataCache(sender)
318
- const updatedMentionedJid = []
319
- for (const mentionedLid of mentionedJid) {
320
- if (typeof mentionedLid === "string" && mentionedLid.endsWith('@lid')) {
321
- const found = metadata.participants.find(p => p.lid === mentionedLid)
322
- if (found) {
323
- updatedMentionedJid.push(found.id)
324
- if (msgObj.text) {
325
- msgObj.text = msgObj.text.replace(new RegExp(`@${mentionedLid.split("@")[0]}`, "g"), `@${found.id.split("@")[0]}`);
326
- } else if (msgObj.caption) {
327
- msgObj.caption = msgObj.caption.replace(new RegExp(`@${mentionedLid.split("@")[0]}`, "g"), `@${found.id.split("@")[0]}`);
328
- }
329
- } else {
330
- const lid = WABinary_1.jidNormalizedUser(mentionedLid)
331
- const mentioned_jid = await repository.lidMapping.getPNForLID(mentionedLid)
332
- if (mentioned_jid) {
333
- const pn = WABinary_1.jidNormalizedUser(mentioned_jid)
334
- await repository.lidMapping.storeLIDPNMappings([{ lid, pn }])
335
- updatedMentionedJid.push(pn)
336
- if (msgObj.text) {
337
- msgObj.text = msgObj.text.replace(new RegExp(`@${mentionedLid.split("@")[0]}`, "g"), `@${pn.split("@")[0]}`);
338
- } else if (msgObj.caption) {
339
- msgObj.caption = msgObj.caption.replace(new RegExp(`@${mentionedLid.split("@")[0]}`, "g"), `@${pn.split("@")[0]}`);
340
- }
341
- } else {
342
- updatedMentionedJid.push(mentionedLid)
343
- }
344
- }
345
- needsUpdate = true
346
- } else {
347
- updatedMentionedJid.push(mentionedLid)
348
- }
349
- }
350
- if (needsUpdate) {
351
- msgObj.contextInfo.mentionedJid = updatedMentionedJid
352
- }
353
- }
354
- return needsUpdate
355
- }
356
- const quotedMessage = contextInfo?.quotedMessage
357
- if (quotedMessage) {
358
- const quotedMtype = getTypeMessage(quotedMessage)
359
- const quotedMsgObj = quotedMessage[quotedMtype]
360
- if (quotedMsgObj?.contextInfo) {
361
- await processMessageLIDs(quotedMsgObj, quotedMtype)
362
- }
363
- }
277
+ else {
278
+ fullMessage.message = msg;
364
279
  }
365
- } catch (err) {
280
+ }
281
+ catch (err) {
366
282
  const errorContext = {
367
283
  key: fullMessage.key,
368
284
  err,
@@ -370,32 +286,26 @@ const decryptMessageNode = (stanza, meId, meLid, repository, logger) => {
370
286
  sender,
371
287
  author,
372
288
  isSessionRecordError: isSessionRecordError(err)
373
- }
374
- logger.error(errorContext, 'failed to decrypt message')
375
- fullMessage.messageStubType = WAProto_1.proto.WebMessageInfo.StubType.CIPHERTEXT
376
- fullMessage.messageStubParameters = [err.message.toString()]
289
+ };
290
+ logger.error(errorContext, 'failed to decrypt message');
291
+ fullMessage.messageStubType = proto.WebMessageInfo.StubType.CIPHERTEXT;
292
+ fullMessage.messageStubParameters = [err.message.toString()];
377
293
  }
378
294
  }
379
295
  }
380
-
296
+ // if nothing was found to decrypt
381
297
  if (!decryptables && !fullMessage.key?.isViewOnce) {
382
- fullMessage.messageStubType = WAProto_1.proto.WebMessageInfo.StubType.CIPHERTEXT
383
- fullMessage.messageStubParameters = [NO_MESSAGE_FOUND_ERROR_TEXT]
298
+ fullMessage.messageStubType = proto.WebMessageInfo.StubType.CIPHERTEXT;
299
+ fullMessage.messageStubParameters = [NO_MESSAGE_FOUND_ERROR_TEXT];
384
300
  }
385
301
  }
386
- }
387
- }
388
-
302
+ };
303
+ };
304
+ /**
305
+ * Utility function to check if an error is related to missing session record
306
+ */
389
307
  function isSessionRecordError(error) {
390
- const errorMessage = error?.message || error?.toString() || ''
391
- return DECRYPTION_RETRY_CONFIG.sessionRecordErrors.some(errorPattern => errorMessage.includes(errorPattern))
308
+ const errorMessage = error?.message || error?.toString() || '';
309
+ return DECRYPTION_RETRY_CONFIG.sessionRecordErrors.some(errorPattern => errorMessage.includes(errorPattern));
392
310
  }
393
-
394
- module.exports = {
395
- NACK_REASONS,
396
- decodeMessageNode,
397
- decryptMessageNode,
398
- MISSING_KEYS_ERROR_TEXT,
399
- DECRYPTION_RETRY_CONFIG,
400
- NO_MESSAGE_FOUND_ERROR_TEXT
401
- }
311
+ //# sourceMappingURL=decode-wa-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode-wa-message.js","sourceRoot":"","sources":["../../src/Utils/decode-wa-message.ts"],"names":[],"mappings":"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"}