@ubedsockets/baileys 1.6.9 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (399) hide show
  1. package/WAProto/GenerateStatics.sh +26 -3
  2. package/WAProto/WAProto.proto +432 -180
  3. package/WAProto/add-missing-proto-deps.js +134 -0
  4. package/WAProto/imports-elaina.js +48 -0
  5. package/WAProto/index.js +78044 -140686
  6. package/WAProto/merge-elaina-ai-proto.js +187 -0
  7. package/engine-requirements.js +10 -0
  8. package/lib/Defaults/elaina-version.json +3 -0
  9. package/lib/Defaults/index.js +57 -55
  10. package/lib/Signal/Group/group_cipher.js +1 -1
  11. package/lib/Signal/Group/keyhelper.js +1 -1
  12. package/lib/Signal/Group/sender-chain-key.js +1 -1
  13. package/lib/Signal/Group/sender-key-message.js +1 -1
  14. package/lib/Signal/Group/sender-message-key.js +1 -1
  15. package/lib/Signal/libsignal.js +1 -1
  16. package/lib/Signal/libsignalnode/LICENSE +621 -0
  17. package/lib/Signal/libsignalnode/README.md +11 -0
  18. package/lib/Signal/libsignalnode/generate-proto.sh +1 -0
  19. package/lib/Signal/libsignalnode/index.js +10 -0
  20. package/lib/Signal/libsignalnode/protos/WhisperTextProtocol.proto +28 -0
  21. package/lib/Signal/libsignalnode/src/.eslintrc.json +31 -0
  22. package/lib/Signal/libsignalnode/src/WhisperTextProtocol.js +948 -0
  23. package/lib/Signal/libsignalnode/src/base_key_type.js +6 -0
  24. package/lib/Signal/libsignalnode/src/chain_type.js +6 -0
  25. package/lib/Signal/libsignalnode/src/crypto.js +98 -0
  26. package/lib/Signal/libsignalnode/src/curve.js +142 -0
  27. package/lib/Signal/libsignalnode/src/errors.js +33 -0
  28. package/lib/Signal/libsignalnode/src/keyhelper.js +45 -0
  29. package/lib/Signal/libsignalnode/src/numeric_fingerprint.js +70 -0
  30. package/lib/Signal/libsignalnode/src/protobufs.js +10 -0
  31. package/lib/Signal/libsignalnode/src/protocol_address.js +40 -0
  32. package/lib/Signal/libsignalnode/src/queue_job.js +70 -0
  33. package/lib/Signal/libsignalnode/src/session_builder.js +164 -0
  34. package/lib/Signal/libsignalnode/src/session_cipher.js +332 -0
  35. package/lib/Signal/libsignalnode/src/session_record.js +325 -0
  36. package/lib/Socket/Client/websocket.js +2 -41
  37. package/lib/Socket/Rhandler.js +533 -0
  38. package/lib/Socket/chats.js +249 -123
  39. package/lib/Socket/index.js +1 -1
  40. package/lib/Socket/messages-recv.js +57 -5
  41. package/lib/Socket/messages-send.js +47 -280
  42. package/lib/Socket/newsletter.js +100 -132
  43. package/lib/Socket/socket.js +79 -87
  44. package/lib/Socket/usync.js +0 -2
  45. package/lib/Store/make-in-memory-store.js +1 -1
  46. package/lib/Utils/browser-utils.js +30 -23
  47. package/lib/Utils/crypto.js +22 -18
  48. package/lib/Utils/decode-wa-message.js +12 -2
  49. package/lib/Utils/{baileys-event-stream.js → elaina-event-stream.js} +1 -1
  50. package/lib/Utils/event-buffer.js +2 -2
  51. package/lib/Utils/generics.js +36 -10
  52. package/lib/Utils/index.js +3 -1
  53. package/lib/Utils/message-retry-manager.js +48 -185
  54. package/lib/Utils/messages-media.js +127 -236
  55. package/lib/Utils/messages.js +746 -232
  56. package/lib/Utils/noise-handler.js +1 -2
  57. package/lib/Utils/process-message.js +108 -25
  58. package/lib/Utils/signal.js +1 -10
  59. package/lib/Utils/use-multi-file-auth-state.js +1 -1
  60. package/lib/Utils/validate-connection.js +3 -7
  61. package/lib/Voip/audio-feeder.js +166 -0
  62. package/lib/Voip/index.js +639 -0
  63. package/lib/Voip/relay-transport.js +829 -0
  64. package/lib/Voip/signaling.js +1102 -0
  65. package/lib/Voip/types.js +23 -0
  66. package/lib/Voip/wasm-engine.js +1255 -0
  67. package/lib/Voip/worker-bootstrap.js +1078 -0
  68. package/lib/WABinary/jid-utils.js +17 -1
  69. package/lib/assets/wasm/loader.js +5 -0
  70. package/lib/assets/wasm/whatsapp.wasm +0 -0
  71. package/lib/assets/wasm/worker-modules.js +273 -0
  72. package/lib/index.js +21 -18
  73. package/package.json +32 -18
  74. package/WAProto/AICommon.js +0 -27981
  75. package/WAProto/AICommon.proto +0 -713
  76. package/WAProto/Ephemeral.js +0 -295
  77. package/WAProto/Ephemeral.proto +0 -7
  78. package/WAProto/fix-imports.js +0 -85
  79. package/WAProto/index.d.ts +0 -14017
  80. package/WAProto/vyzen.js +0 -7
  81. package/lib/Defaults/baileys-version.json +0 -3
  82. package/lib/Defaults/index.d.ts +0 -75
  83. package/lib/Defaults/index.d.ts.map +0 -1
  84. package/lib/Defaults/index.js.map +0 -1
  85. package/lib/Signal/Group/ciphertext-message.d.ts +0 -10
  86. package/lib/Signal/Group/ciphertext-message.d.ts.map +0 -1
  87. package/lib/Signal/Group/ciphertext-message.js.map +0 -1
  88. package/lib/Signal/Group/group-session-builder.d.ts +0 -15
  89. package/lib/Signal/Group/group-session-builder.d.ts.map +0 -1
  90. package/lib/Signal/Group/group-session-builder.js.map +0 -1
  91. package/lib/Signal/Group/group_cipher.d.ts +0 -17
  92. package/lib/Signal/Group/group_cipher.d.ts.map +0 -1
  93. package/lib/Signal/Group/group_cipher.js.map +0 -1
  94. package/lib/Signal/Group/index.d.ts +0 -12
  95. package/lib/Signal/Group/index.d.ts.map +0 -1
  96. package/lib/Signal/Group/index.js.map +0 -1
  97. package/lib/Signal/Group/keyhelper.d.ts +0 -11
  98. package/lib/Signal/Group/keyhelper.d.ts.map +0 -1
  99. package/lib/Signal/Group/keyhelper.js.map +0 -1
  100. package/lib/Signal/Group/sender-chain-key.d.ts +0 -14
  101. package/lib/Signal/Group/sender-chain-key.d.ts.map +0 -1
  102. package/lib/Signal/Group/sender-chain-key.js.map +0 -1
  103. package/lib/Signal/Group/sender-key-distribution-message.d.ts +0 -17
  104. package/lib/Signal/Group/sender-key-distribution-message.d.ts.map +0 -1
  105. package/lib/Signal/Group/sender-key-distribution-message.js.map +0 -1
  106. package/lib/Signal/Group/sender-key-message.d.ts +0 -19
  107. package/lib/Signal/Group/sender-key-message.d.ts.map +0 -1
  108. package/lib/Signal/Group/sender-key-message.js.map +0 -1
  109. package/lib/Signal/Group/sender-key-name.d.ts +0 -18
  110. package/lib/Signal/Group/sender-key-name.d.ts.map +0 -1
  111. package/lib/Signal/Group/sender-key-name.js.map +0 -1
  112. package/lib/Signal/Group/sender-key-record.d.ts +0 -31
  113. package/lib/Signal/Group/sender-key-record.d.ts.map +0 -1
  114. package/lib/Signal/Group/sender-key-record.js.map +0 -1
  115. package/lib/Signal/Group/sender-key-state.d.ts +0 -39
  116. package/lib/Signal/Group/sender-key-state.d.ts.map +0 -1
  117. package/lib/Signal/Group/sender-key-state.js.map +0 -1
  118. package/lib/Signal/Group/sender-message-key.d.ts +0 -12
  119. package/lib/Signal/Group/sender-message-key.d.ts.map +0 -1
  120. package/lib/Signal/Group/sender-message-key.js.map +0 -1
  121. package/lib/Signal/libsignal.d.ts +0 -5
  122. package/lib/Signal/libsignal.d.ts.map +0 -1
  123. package/lib/Signal/libsignal.js.map +0 -1
  124. package/lib/Signal/lid-mapping.d.ts +0 -23
  125. package/lib/Signal/lid-mapping.d.ts.map +0 -1
  126. package/lib/Signal/lid-mapping.js +0 -277
  127. package/lib/Signal/lid-mapping.js.map +0 -1
  128. package/lib/Socket/Client/index.d.ts +0 -3
  129. package/lib/Socket/Client/index.d.ts.map +0 -1
  130. package/lib/Socket/Client/index.js.map +0 -1
  131. package/lib/Socket/Client/types.d.ts +0 -16
  132. package/lib/Socket/Client/types.d.ts.map +0 -1
  133. package/lib/Socket/Client/types.js.map +0 -1
  134. package/lib/Socket/Client/websocket.d.ts +0 -13
  135. package/lib/Socket/Client/websocket.d.ts.map +0 -1
  136. package/lib/Socket/Client/websocket.js.map +0 -1
  137. package/lib/Socket/business.d.ts +0 -217
  138. package/lib/Socket/business.d.ts.map +0 -1
  139. package/lib/Socket/business.js.map +0 -1
  140. package/lib/Socket/chats.d.ts +0 -124
  141. package/lib/Socket/chats.d.ts.map +0 -1
  142. package/lib/Socket/chats.js.map +0 -1
  143. package/lib/Socket/communities.d.ts +0 -273
  144. package/lib/Socket/communities.d.ts.map +0 -1
  145. package/lib/Socket/communities.js +0 -431
  146. package/lib/Socket/communities.js.map +0 -1
  147. package/lib/Socket/groups.d.ts +0 -161
  148. package/lib/Socket/groups.d.ts.map +0 -1
  149. package/lib/Socket/groups.js.map +0 -1
  150. package/lib/Socket/index.d.ts +0 -260
  151. package/lib/Socket/index.d.ts.map +0 -1
  152. package/lib/Socket/index.js.map +0 -1
  153. package/lib/Socket/messages-recv.d.ts +0 -203
  154. package/lib/Socket/messages-recv.d.ts.map +0 -1
  155. package/lib/Socket/messages-recv.js.map +0 -1
  156. package/lib/Socket/messages-send.d.ts +0 -199
  157. package/lib/Socket/messages-send.d.ts.map +0 -1
  158. package/lib/Socket/messages-send.js.map +0 -1
  159. package/lib/Socket/mex.d.ts +0 -3
  160. package/lib/Socket/mex.d.ts.map +0 -1
  161. package/lib/Socket/mex.js +0 -42
  162. package/lib/Socket/mex.js.map +0 -1
  163. package/lib/Socket/newsletter.d.ts +0 -170
  164. package/lib/Socket/newsletter.d.ts.map +0 -1
  165. package/lib/Socket/newsletter.js.map +0 -1
  166. package/lib/Socket/setup.js +0 -433
  167. package/lib/Socket/socket.d.ts +0 -59
  168. package/lib/Socket/socket.d.ts.map +0 -1
  169. package/lib/Socket/socket.js.map +0 -1
  170. package/lib/Types/Auth.d.ts +0 -117
  171. package/lib/Types/Auth.d.ts.map +0 -1
  172. package/lib/Types/Auth.js.map +0 -1
  173. package/lib/Types/Bussines.d.ts +0 -25
  174. package/lib/Types/Bussines.d.ts.map +0 -1
  175. package/lib/Types/Bussines.js +0 -2
  176. package/lib/Types/Bussines.js.map +0 -1
  177. package/lib/Types/Call.d.ts +0 -15
  178. package/lib/Types/Call.d.ts.map +0 -1
  179. package/lib/Types/Call.js.map +0 -1
  180. package/lib/Types/Chat.d.ts +0 -124
  181. package/lib/Types/Chat.d.ts.map +0 -1
  182. package/lib/Types/Chat.js.map +0 -1
  183. package/lib/Types/Contact.d.ts +0 -26
  184. package/lib/Types/Contact.d.ts.map +0 -1
  185. package/lib/Types/Contact.js.map +0 -1
  186. package/lib/Types/Events.d.ts +0 -256
  187. package/lib/Types/Events.d.ts.map +0 -1
  188. package/lib/Types/Events.js.map +0 -1
  189. package/lib/Types/GroupMetadata.d.ts +0 -71
  190. package/lib/Types/GroupMetadata.d.ts.map +0 -1
  191. package/lib/Types/GroupMetadata.js.map +0 -1
  192. package/lib/Types/Label.d.ts +0 -47
  193. package/lib/Types/Label.d.ts.map +0 -1
  194. package/lib/Types/Label.js.map +0 -1
  195. package/lib/Types/LabelAssociation.d.ts +0 -30
  196. package/lib/Types/LabelAssociation.d.ts.map +0 -1
  197. package/lib/Types/LabelAssociation.js.map +0 -1
  198. package/lib/Types/Message.d.ts +0 -320
  199. package/lib/Types/Message.d.ts.map +0 -1
  200. package/lib/Types/Message.js.map +0 -1
  201. package/lib/Types/Mex.d.ts +0 -141
  202. package/lib/Types/Mex.d.ts.map +0 -1
  203. package/lib/Types/Mex.js +0 -37
  204. package/lib/Types/Mex.js.map +0 -1
  205. package/lib/Types/Product.d.ts +0 -79
  206. package/lib/Types/Product.d.ts.map +0 -1
  207. package/lib/Types/Product.js.map +0 -1
  208. package/lib/Types/RichType.d.ts +0 -3
  209. package/lib/Types/RichType.d.ts.map +0 -1
  210. package/lib/Types/RichType.js +0 -31
  211. package/lib/Types/Signal.d.ts +0 -87
  212. package/lib/Types/Signal.d.ts.map +0 -1
  213. package/lib/Types/Signal.js.map +0 -1
  214. package/lib/Types/Socket.d.ts +0 -136
  215. package/lib/Types/Socket.d.ts.map +0 -1
  216. package/lib/Types/Socket.js.map +0 -1
  217. package/lib/Types/State.d.ts +0 -97
  218. package/lib/Types/State.d.ts.map +0 -1
  219. package/lib/Types/State.js.map +0 -1
  220. package/lib/Types/USync.d.ts +0 -26
  221. package/lib/Types/USync.d.ts.map +0 -1
  222. package/lib/Types/USync.js.map +0 -1
  223. package/lib/Types/index.d.ts +0 -65
  224. package/lib/Types/index.d.ts.map +0 -1
  225. package/lib/Types/index.js.map +0 -1
  226. package/lib/Utils/Tiktok.js +0 -80
  227. package/lib/Utils/auth-utils.d.ts +0 -24
  228. package/lib/Utils/auth-utils.d.ts.map +0 -1
  229. package/lib/Utils/auth-utils.js.map +0 -1
  230. package/lib/Utils/browser-utils.d.ts +0 -4
  231. package/lib/Utils/browser-utils.d.ts.map +0 -1
  232. package/lib/Utils/browser-utils.js.map +0 -1
  233. package/lib/Utils/business.d.ts +0 -23
  234. package/lib/Utils/business.d.ts.map +0 -1
  235. package/lib/Utils/business.js.map +0 -1
  236. package/lib/Utils/chaanel/vyzen.js +0 -0
  237. package/lib/Utils/chat-utils.d.ts +0 -100
  238. package/lib/Utils/chat-utils.d.ts.map +0 -1
  239. package/lib/Utils/chat-utils.js.map +0 -1
  240. package/lib/Utils/companion-reg-client-utils.d.ts +0 -17
  241. package/lib/Utils/companion-reg-client-utils.d.ts.map +0 -1
  242. package/lib/Utils/companion-reg-client-utils.js +0 -35
  243. package/lib/Utils/companion-reg-client-utils.js.map +0 -1
  244. package/lib/Utils/crypto.d.ts +0 -37
  245. package/lib/Utils/crypto.d.ts.map +0 -1
  246. package/lib/Utils/crypto.js.map +0 -1
  247. package/lib/Utils/decode-wa-message.d.ts +0 -66
  248. package/lib/Utils/decode-wa-message.d.ts.map +0 -1
  249. package/lib/Utils/decode-wa-message.js.map +0 -1
  250. package/lib/Utils/event-buffer.d.ts +0 -36
  251. package/lib/Utils/event-buffer.d.ts.map +0 -1
  252. package/lib/Utils/event-buffer.js.map +0 -1
  253. package/lib/Utils/facebook.js +0 -48
  254. package/lib/Utils/generics.d.ts +0 -91
  255. package/lib/Utils/generics.d.ts.map +0 -1
  256. package/lib/Utils/generics.js.map +0 -1
  257. package/lib/Utils/history.d.ts +0 -24
  258. package/lib/Utils/history.d.ts.map +0 -1
  259. package/lib/Utils/history.js.map +0 -1
  260. package/lib/Utils/identity-change-handler.d.ts +0 -44
  261. package/lib/Utils/identity-change-handler.d.ts.map +0 -1
  262. package/lib/Utils/identity-change-handler.js +0 -50
  263. package/lib/Utils/identity-change-handler.js.map +0 -1
  264. package/lib/Utils/index.d.ts +0 -22
  265. package/lib/Utils/index.d.ts.map +0 -1
  266. package/lib/Utils/index.js.map +0 -1
  267. package/lib/Utils/instagram.js +0 -50
  268. package/lib/Utils/link-preview.d.ts +0 -21
  269. package/lib/Utils/link-preview.d.ts.map +0 -1
  270. package/lib/Utils/link-preview.js.map +0 -1
  271. package/lib/Utils/logger.d.ts +0 -12
  272. package/lib/Utils/logger.d.ts.map +0 -1
  273. package/lib/Utils/logger.js.map +0 -1
  274. package/lib/Utils/lt-hash.d.ts +0 -8
  275. package/lib/Utils/lt-hash.d.ts.map +0 -1
  276. package/lib/Utils/lt-hash.js.map +0 -1
  277. package/lib/Utils/make-mutex.d.ts +0 -9
  278. package/lib/Utils/make-mutex.d.ts.map +0 -1
  279. package/lib/Utils/make-mutex.js.map +0 -1
  280. package/lib/Utils/message-retry-manager.d.ts +0 -115
  281. package/lib/Utils/message-retry-manager.d.ts.map +0 -1
  282. package/lib/Utils/message-retry-manager.js.map +0 -1
  283. package/lib/Utils/messages-media.d.ts +0 -133
  284. package/lib/Utils/messages-media.d.ts.map +0 -1
  285. package/lib/Utils/messages-media.js.map +0 -1
  286. package/lib/Utils/messages.d.ts +0 -91
  287. package/lib/Utils/messages.d.ts.map +0 -1
  288. package/lib/Utils/messages.js.map +0 -1
  289. package/lib/Utils/noise-handler.d.ts +0 -20
  290. package/lib/Utils/noise-handler.d.ts.map +0 -1
  291. package/lib/Utils/noise-handler.js.map +0 -1
  292. package/lib/Utils/offline-node-processor.d.ts +0 -17
  293. package/lib/Utils/offline-node-processor.d.ts.map +0 -1
  294. package/lib/Utils/offline-node-processor.js +0 -40
  295. package/lib/Utils/offline-node-processor.js.map +0 -1
  296. package/lib/Utils/pre-key-manager.d.ts +0 -28
  297. package/lib/Utils/pre-key-manager.d.ts.map +0 -1
  298. package/lib/Utils/pre-key-manager.js +0 -106
  299. package/lib/Utils/pre-key-manager.js.map +0 -1
  300. package/lib/Utils/process-message.d.ts +0 -60
  301. package/lib/Utils/process-message.d.ts.map +0 -1
  302. package/lib/Utils/process-message.js.map +0 -1
  303. package/lib/Utils/reporting-utils.d.ts +0 -11
  304. package/lib/Utils/reporting-utils.d.ts.map +0 -1
  305. package/lib/Utils/reporting-utils.js +0 -258
  306. package/lib/Utils/reporting-utils.js.map +0 -1
  307. package/lib/Utils/rich-message-utils.js +0 -387
  308. package/lib/Utils/signal.d.ts +0 -47
  309. package/lib/Utils/signal.d.ts.map +0 -1
  310. package/lib/Utils/signal.js.map +0 -1
  311. package/lib/Utils/stanza-ack.d.ts +0 -11
  312. package/lib/Utils/stanza-ack.d.ts.map +0 -1
  313. package/lib/Utils/stanza-ack.js +0 -38
  314. package/lib/Utils/stanza-ack.js.map +0 -1
  315. package/lib/Utils/sync-action-utils.d.ts +0 -19
  316. package/lib/Utils/sync-action-utils.d.ts.map +0 -1
  317. package/lib/Utils/sync-action-utils.js +0 -49
  318. package/lib/Utils/sync-action-utils.js.map +0 -1
  319. package/lib/Utils/tc-token-utils.d.ts +0 -37
  320. package/lib/Utils/tc-token-utils.d.ts.map +0 -1
  321. package/lib/Utils/tc-token-utils.js +0 -163
  322. package/lib/Utils/tc-token-utils.js.map +0 -1
  323. package/lib/Utils/use-multi-file-auth-state.d.ts +0 -13
  324. package/lib/Utils/use-multi-file-auth-state.d.ts.map +0 -1
  325. package/lib/Utils/use-multi-file-auth-state.js.map +0 -1
  326. package/lib/Utils/validate-connection.d.ts +0 -11
  327. package/lib/Utils/validate-connection.d.ts.map +0 -1
  328. package/lib/Utils/validate-connection.js.map +0 -1
  329. package/lib/Utils/youtube.js +0 -44
  330. package/lib/WABinary/constants.d.ts +0 -28
  331. package/lib/WABinary/constants.d.ts.map +0 -1
  332. package/lib/WABinary/constants.js.map +0 -1
  333. package/lib/WABinary/decode.d.ts +0 -7
  334. package/lib/WABinary/decode.d.ts.map +0 -1
  335. package/lib/WABinary/decode.js.map +0 -1
  336. package/lib/WABinary/encode.d.ts +0 -3
  337. package/lib/WABinary/encode.d.ts.map +0 -1
  338. package/lib/WABinary/encode.js.map +0 -1
  339. package/lib/WABinary/generic-utils.d.ts +0 -15
  340. package/lib/WABinary/generic-utils.d.ts.map +0 -1
  341. package/lib/WABinary/generic-utils.js.map +0 -1
  342. package/lib/WABinary/index.d.ts +0 -6
  343. package/lib/WABinary/index.d.ts.map +0 -1
  344. package/lib/WABinary/index.js.map +0 -1
  345. package/lib/WABinary/jid-utils.d.ts +0 -48
  346. package/lib/WABinary/jid-utils.d.ts.map +0 -1
  347. package/lib/WABinary/jid-utils.js.map +0 -1
  348. package/lib/WABinary/types.d.ts +0 -19
  349. package/lib/WABinary/types.d.ts.map +0 -1
  350. package/lib/WABinary/types.js.map +0 -1
  351. package/lib/WAM/BinaryInfo.d.ts +0 -9
  352. package/lib/WAM/BinaryInfo.d.ts.map +0 -1
  353. package/lib/WAM/BinaryInfo.js.map +0 -1
  354. package/lib/WAM/constants.d.ts +0 -40
  355. package/lib/WAM/constants.d.ts.map +0 -1
  356. package/lib/WAM/constants.js.map +0 -1
  357. package/lib/WAM/encode.d.ts +0 -3
  358. package/lib/WAM/encode.d.ts.map +0 -1
  359. package/lib/WAM/encode.js.map +0 -1
  360. package/lib/WAM/index.d.ts +0 -4
  361. package/lib/WAM/index.d.ts.map +0 -1
  362. package/lib/WAM/index.js.map +0 -1
  363. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +0 -10
  364. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +0 -1
  365. package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +0 -1
  366. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +0 -23
  367. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map +0 -1
  368. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map +0 -1
  369. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +0 -13
  370. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map +0 -1
  371. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map +0 -1
  372. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +0 -13
  373. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map +0 -1
  374. package/lib/WAUSync/Protocols/USyncStatusProtocol.js.map +0 -1
  375. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +0 -10
  376. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts.map +0 -1
  377. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +0 -25
  378. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js.map +0 -1
  379. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +0 -26
  380. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts.map +0 -1
  381. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js.map +0 -1
  382. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +0 -10
  383. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts.map +0 -1
  384. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js.map +0 -1
  385. package/lib/WAUSync/Protocols/index.d.ts +0 -6
  386. package/lib/WAUSync/Protocols/index.d.ts.map +0 -1
  387. package/lib/WAUSync/Protocols/index.js.map +0 -1
  388. package/lib/WAUSync/USyncQuery.d.ts +0 -30
  389. package/lib/WAUSync/USyncQuery.d.ts.map +0 -1
  390. package/lib/WAUSync/USyncQuery.js.map +0 -1
  391. package/lib/WAUSync/USyncUser.d.ts +0 -17
  392. package/lib/WAUSync/USyncUser.d.ts.map +0 -1
  393. package/lib/WAUSync/USyncUser.js.map +0 -1
  394. package/lib/WAUSync/index.d.ts +0 -4
  395. package/lib/WAUSync/index.d.ts.map +0 -1
  396. package/lib/WAUSync/index.js.map +0 -1
  397. package/lib/index.d.ts +0 -12
  398. package/lib/index.d.ts.map +0 -1
  399. package/lib/index.js.map +0 -1
@@ -0,0 +1,1255 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.WasmEngine = void 0;
37
+ var _a;
38
+ /**
39
+ * WhatsApp VoIP WASM engine.
40
+ *
41
+ * Loads the WhatsApp Web VoIP WASM stack inside a Node.js `vm.Context`,
42
+ * spawns a 20-thread `worker_threads` pool to mirror the browser's pthread
43
+ * model, and exposes a callback-based JS bridge. Audio-only (no video).
44
+ *
45
+ * @author ShellTear
46
+ */
47
+ const vm = __importStar(require("node:vm"));
48
+ const fs = __importStar(require("node:fs"));
49
+ const path = __importStar(require("node:path"));
50
+ const node_crypto_1 = require("node:crypto");
51
+ const node_worker_threads_1 = require("node:worker_threads");
52
+ const CALL_WASM_AB_PROPS_JSON = process.env.CALL_WASM_AB_PROPS_JSON ?? "";
53
+ const PTHREAD_POOL_SIZE = 20;
54
+ const VOIP_READY_TIMEOUT_MS = 15_000;
55
+ const parseJsonObjectEnv = (raw) => {
56
+ if (!raw)
57
+ return {};
58
+ try {
59
+ const parsed = JSON.parse(raw);
60
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed))
61
+ return parsed;
62
+ }
63
+ catch { }
64
+ return {};
65
+ };
66
+ const toByteArray = (input) => {
67
+ if (!input)
68
+ return new Uint8Array(0);
69
+ if (input instanceof Uint8Array)
70
+ return input;
71
+ if (typeof input === "string")
72
+ return new TextEncoder().encode(input);
73
+ if (ArrayBuffer.isView(input))
74
+ return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);
75
+ if (input instanceof ArrayBuffer)
76
+ return new Uint8Array(input);
77
+ if (typeof input === "object" && typeof input.length === "number") {
78
+ const arr = new Uint8Array(input.length);
79
+ for (let i = 0; i < input.length; i += 1)
80
+ arr[i] = input[i] ?? 0;
81
+ return arr;
82
+ }
83
+ return new Uint8Array(0);
84
+ };
85
+ const filterWorkerStderr = (chunk) => {
86
+ const line = chunk.toString().trim();
87
+ if (line && !line.startsWith("voip:") && !line.startsWith("still waiting")) {
88
+ process.stderr.write(chunk);
89
+ }
90
+ };
91
+ const resolveWorkerScriptPath = () => {
92
+ const compiled = path.join(__dirname, "worker-bootstrap.js");
93
+ return fs.existsSync(compiled) ? compiled : path.join(__dirname, "worker-bootstrap.mts");
94
+ };
95
+ class NodeWorkerMessagePort {
96
+ #listeners = new Map();
97
+ #worker;
98
+ fullyConnected;
99
+ name;
100
+ workerID = 0;
101
+ pthread_ptr = 0;
102
+ constructor(worker, name = "WAWebVoipWebWasmWorker") {
103
+ this.#worker = worker;
104
+ this.name = name;
105
+ this.fullyConnected = new Promise((resolve) => {
106
+ const loadedHandler = (msg) => {
107
+ if (msg && msg.cmd === "loaded") {
108
+ this.workerID = msg.workerID ?? 0;
109
+ resolve(this);
110
+ }
111
+ };
112
+ this.addMessageListener("cmd", loadedHandler);
113
+ });
114
+ if (typeof worker.on === "function") {
115
+ worker.on("message", (data) => this.#handleMessage(data));
116
+ worker.on("error", () => { });
117
+ }
118
+ else if (typeof worker.addEventListener === "function") {
119
+ worker.addEventListener("message", (ev) => this.#handleMessage(ev?.data ?? ev));
120
+ }
121
+ }
122
+ postMessage = (msg, transferList) => {
123
+ const out = msg && typeof msg === "object" && msg.cmd && !msg.type ? { ...msg, type: "cmd" } : msg;
124
+ this.#worker.postMessage(out, transferList);
125
+ };
126
+ addMessageListener = (type, handler) => {
127
+ let set = this.#listeners.get(type);
128
+ if (!set) {
129
+ set = new Set();
130
+ this.#listeners.set(type, set);
131
+ }
132
+ set.add(handler);
133
+ return handler;
134
+ };
135
+ removeMessageListener = (type, handler) => this.#listeners.get(type)?.delete(handler) ?? false;
136
+ removeAllMessageListeners = (type) => {
137
+ if (type)
138
+ this.#listeners.get(type)?.clear();
139
+ else
140
+ this.#listeners.clear();
141
+ };
142
+ terminate = () => { this.#worker.terminate(); };
143
+ close = () => { };
144
+ isWrappingVirtualMessagePort = () => false;
145
+ getWorker = () => this.#worker;
146
+ #handleMessage = (data) => {
147
+ if (!data || typeof data !== "object")
148
+ return;
149
+ if (data.type === "callback" || data.type === "waWasmWorkerCompatibleCallback") {
150
+ let callbackName;
151
+ let callbackArgs;
152
+ if (data.__name) {
153
+ callbackName = data.__name;
154
+ callbackArgs = {};
155
+ for (const key in data) {
156
+ if (key !== "type" && key !== "__name" && key !== "prototype" && key !== "args" && !key.startsWith("__")) {
157
+ callbackArgs[key] = data[key];
158
+ }
159
+ }
160
+ }
161
+ else if (data.name) {
162
+ callbackName = data.name;
163
+ callbackArgs = data.args ?? {};
164
+ }
165
+ else if (data.payload?.name) {
166
+ callbackName = data.payload.name;
167
+ callbackArgs = data.payload.args ?? {};
168
+ }
169
+ else {
170
+ return;
171
+ }
172
+ if (callbackName === "onSignalingXmpp" &&
173
+ (!callbackArgs || Object.keys(callbackArgs).length === 0)) {
174
+ callbackArgs = {
175
+ peerJid: data.peerJid, callId: data.callId, xmlPayload: data.xmlPayload,
176
+ };
177
+ }
178
+ let listenerData = callbackArgs;
179
+ if (!callbackArgs || Object.keys(callbackArgs).length === 0 ||
180
+ (Object.keys(callbackArgs).length === 1 && callbackArgs.prototype)) {
181
+ listenerData = {};
182
+ for (const key in data) {
183
+ if (key !== "type" && key !== "__name" && key !== "prototype" && key !== "args" && !key.startsWith("__")) {
184
+ listenerData[key] = data[key];
185
+ }
186
+ }
187
+ }
188
+ else if (callbackName === "sendDataToRelay") {
189
+ listenerData = { ...callbackArgs };
190
+ if (data.data !== undefined)
191
+ listenerData.data = data.data;
192
+ if (data.len !== undefined)
193
+ listenerData.len = data.len;
194
+ if (data.ip !== undefined)
195
+ listenerData.ip = data.ip;
196
+ if (data.port !== undefined)
197
+ listenerData.port = data.port;
198
+ }
199
+ else if (callbackName === "onCallEvent") {
200
+ listenerData = { ...callbackArgs };
201
+ if (data.eventType !== undefined)
202
+ listenerData.eventType = data.eventType;
203
+ if (data.userData !== undefined)
204
+ listenerData.userData = data.userData;
205
+ if (data.eventDataJson !== undefined)
206
+ listenerData.eventDataJson = data.eventDataJson;
207
+ }
208
+ WasmEngine.notifyGlobalCallbackListeners(callbackName, listenerData);
209
+ return;
210
+ }
211
+ const dispatch = (key) => {
212
+ if (!key)
213
+ return;
214
+ for (const handler of this.#listeners.get(key) ?? []) {
215
+ try {
216
+ handler(data);
217
+ }
218
+ catch { }
219
+ }
220
+ };
221
+ dispatch(data.type);
222
+ if (data.cmd !== data.type)
223
+ dispatch(data.cmd);
224
+ };
225
+ }
226
+ class WasmEngine {
227
+ static #globalCallbackListeners = new Map();
228
+ static #globalCallbacksRegistered = false;
229
+ static registerGlobalCallbackListener = (callbackName, handler) => {
230
+ const key = `callback:${callbackName}`;
231
+ let set = _a.#globalCallbackListeners.get(key);
232
+ if (!set) {
233
+ set = new Set();
234
+ _a.#globalCallbackListeners.set(key, set);
235
+ }
236
+ set.add(handler);
237
+ };
238
+ static notifyGlobalCallbackListeners = (callbackName, data) => {
239
+ const set = _a.#globalCallbackListeners.get(`callback:${callbackName}`);
240
+ if (!set)
241
+ return;
242
+ for (const handler of set) {
243
+ try {
244
+ handler(data);
245
+ }
246
+ catch { }
247
+ }
248
+ };
249
+ #config;
250
+ #instance = null;
251
+ #initialized = false;
252
+ #moduleRegistry = new Map();
253
+ #vmContext = null;
254
+ #unusedWorkers = [];
255
+ #runningWorkers = [];
256
+ #pthreads = {};
257
+ #nextWorkerID = 1;
258
+ #wasmModule = null;
259
+ #wasmMemory = null;
260
+ #removeRunDependencyCallback = null;
261
+ #workersLoadedCount = 0;
262
+ #audioPlaybackLoopInterval = null;
263
+ #audioPlaybackBuffer = null;
264
+ #isPlaybackActive = false;
265
+ #voipStackInitialized = false;
266
+ #voipStackInitPromise = null;
267
+ #voipReadyResolver = null;
268
+ #voipReadyPromise = null;
269
+ #workerModulesCode = "";
270
+ #loaderCode = "";
271
+ constructor(config = {}) {
272
+ const basePath = config.resourcesPath
273
+ ? (path.isAbsolute(config.resourcesPath) ? config.resourcesPath : path.resolve(process.cwd(), config.resourcesPath))
274
+ : path.resolve(__dirname, "..");
275
+ const wasmPath = config.wasmPath
276
+ ? (path.isAbsolute(config.wasmPath) ? config.wasmPath : path.resolve(process.cwd(), config.wasmPath))
277
+ : path.join(basePath, "assets", "wasm", "whatsapp.wasm");
278
+ this.#config = {
279
+ ...config,
280
+ wasmPath,
281
+ resourcesPath: basePath,
282
+ enableLogs: config.enableLogs ?? true,
283
+ options: {
284
+ heartbeatInterval: 30,
285
+ lobbyTimeout: 1,
286
+ maxParticipantsScreenShare: 32,
287
+ maxGroupSizeLongRingtone: 32,
288
+ ...config.options,
289
+ },
290
+ };
291
+ }
292
+ initialize = async () => {
293
+ if (this.#initialized)
294
+ throw new Error("WasmEngine already initialized");
295
+ const voipStorageDir = "/tmp/voip";
296
+ try {
297
+ if (!fs.existsSync(voipStorageDir))
298
+ fs.mkdirSync(voipStorageDir, { recursive: true });
299
+ }
300
+ catch { }
301
+ const loaderFile = path.join(this.#config.resourcesPath, "assets", "wasm", "loader.js");
302
+ const workerFile = path.join(this.#config.resourcesPath, "assets", "wasm", "worker-modules.js");
303
+ if (!this.#config.wasmBinary && !fs.existsSync(this.#config.wasmPath)) {
304
+ throw new Error(`WASM file not found: ${this.#config.wasmPath}`);
305
+ }
306
+ const wasmBuffer = this.#config.wasmBinary
307
+ ? Buffer.from(this.#config.wasmBinary)
308
+ : fs.readFileSync(this.#config.wasmPath);
309
+ const diskWorkerCode = fs.existsSync(workerFile) ? fs.readFileSync(workerFile, "utf8") : "";
310
+ this.#workerModulesCode = this.#config.workerModulesCode ?? diskWorkerCode;
311
+ const workerBundleHasLoader = typeof this.#workerModulesCode === "string" && /WAWebVoipWebWasmLoader/.test(this.#workerModulesCode);
312
+ // Skip the on-disk loader.js if the worker bundle already has a loader —
313
+ // the standalone loader.js is older and would clobber the freshly fetched
314
+ // bindings inside worker-modules.js.
315
+ this.#loaderCode = this.#config.loaderCode ??
316
+ (workerBundleHasLoader ? "" : fs.existsSync(loaderFile) ? fs.readFileSync(loaderFile, "utf8") : "");
317
+ if (!this.#loaderCode && !this.#workerModulesCode) {
318
+ throw new Error("No loader/worker code available to initialize VoIP");
319
+ }
320
+ const memory = new WebAssembly.Memory({ initial: 256, maximum: 32768, shared: true });
321
+ this.#wasmMemory = memory;
322
+ this.#wasmModule = await WebAssembly.compile(wasmBuffer);
323
+ this.#vmContext = this.#createVMContext(memory);
324
+ const runModuleCode = (code) => {
325
+ if (code)
326
+ vm.runInContext(code, this.#vmContext);
327
+ };
328
+ runModuleCode(this.#workerModulesCode);
329
+ runModuleCode(this.#loaderCode);
330
+ this.#vmContext.WAWebVoipWebWasmWorkerResource = this.#requireModule("WAWebVoipWebWasmWorkerResource");
331
+ const loaderModuleNames = [
332
+ this.#config.loaderModuleName,
333
+ "WAWebVoipWebWasmLoader",
334
+ "WAWebVoipWebWasmLoader.worker",
335
+ "WAWebVoipWebWasmLoader_ProdLab_internal.worker",
336
+ "WAWebVoipWebWasmLoader_ProdLabvideo_internal.worker",
337
+ ].filter((v, i, a) => !!v && a.indexOf(v) === i);
338
+ let wasmLoader = null;
339
+ for (const moduleName of loaderModuleNames) {
340
+ const candidate = this.#requireModule(moduleName);
341
+ if (typeof candidate === "function") {
342
+ wasmLoader = candidate;
343
+ break;
344
+ }
345
+ if (typeof candidate?.default === "function") {
346
+ wasmLoader = candidate.default;
347
+ break;
348
+ }
349
+ }
350
+ if (typeof wasmLoader !== "function") {
351
+ throw new Error(`No compatible WASM loader found. Tried: ${loaderModuleNames.join(", ")}`);
352
+ }
353
+ if (!_a.#globalCallbacksRegistered)
354
+ this.#registerGlobalCallbacks();
355
+ await this.#initPThreadPool();
356
+ const workersLoadingPromise = this.#loadWasmModuleToAllWorkers();
357
+ const readyPromise = wasmLoader({
358
+ wasmBinary: wasmBuffer,
359
+ wasmMemory: memory,
360
+ locateFile: () => this.#config.wasmPath,
361
+ onRuntimeInitialized: () => { },
362
+ });
363
+ const [instance] = await Promise.all([readyPromise, workersLoadingPromise]);
364
+ this.#instance = instance;
365
+ this.#initialized = true;
366
+ };
367
+ isInitialized = () => this.#initialized;
368
+ destroy = () => {
369
+ this.#stopAudioPlaybackLoop();
370
+ if (this.#instance && typeof this.#instance.endCall === "function") {
371
+ try {
372
+ this.#instance.endCall(0, false);
373
+ }
374
+ catch { }
375
+ }
376
+ for (const worker of [...this.#runningWorkers, ...this.#unusedWorkers]) {
377
+ try {
378
+ worker.terminate();
379
+ }
380
+ catch { }
381
+ }
382
+ this.#runningWorkers = [];
383
+ this.#unusedWorkers = [];
384
+ this.#instance = null;
385
+ this.#vmContext = null;
386
+ this.#moduleRegistry.clear();
387
+ this.#wasmModule = null;
388
+ this.#wasmMemory = null;
389
+ this.#initialized = false;
390
+ };
391
+ initVoipStack = (selfJid, meUserJid, selfLid) => {
392
+ this.#ensureInitialized();
393
+ if (this.#voipStackInitialized || this.#voipStackInitPromise)
394
+ return;
395
+ this.#voipStackInitPromise = new Promise((resolveInit) => {
396
+ this.#voipReadyPromise = new Promise((readyResolve) => {
397
+ this.#voipReadyResolver = () => {
398
+ this.#voipStackInitialized = true;
399
+ this.#voipReadyResolver = null;
400
+ this.#voipReadyPromise = null;
401
+ readyResolve();
402
+ };
403
+ });
404
+ try {
405
+ this.#applyDefaultAbProps();
406
+ try {
407
+ this.#instance.initVoipStack(selfJid, meUserJid, selfLid);
408
+ }
409
+ catch (modernErr) {
410
+ if (modernErr?.name === "BindingError" &&
411
+ (String(modernErr?.message ?? "").includes("expected 8 args") ||
412
+ String(modernErr?.message ?? "").includes("takes 8"))) {
413
+ this.#instance.initVoipStack(selfJid, meUserJid, selfLid, true, 5, 0, 8, 16);
414
+ }
415
+ else {
416
+ throw modernErr;
417
+ }
418
+ }
419
+ Promise.race([
420
+ this.#voipReadyPromise,
421
+ new Promise((r) => setTimeout(() => {
422
+ this.#voipStackInitialized = true;
423
+ r();
424
+ }, VOIP_READY_TIMEOUT_MS)),
425
+ ]).finally(() => {
426
+ this.#voipStackInitPromise = null;
427
+ resolveInit();
428
+ });
429
+ }
430
+ catch {
431
+ this.#voipReadyResolver = null;
432
+ this.#voipReadyPromise = null;
433
+ this.#voipStackInitPromise = null;
434
+ resolveInit();
435
+ }
436
+ });
437
+ };
438
+ waitForVoipStackReady = async () => {
439
+ if (this.#voipStackInitialized)
440
+ return;
441
+ if (this.#voipStackInitPromise) {
442
+ await this.#voipStackInitPromise;
443
+ }
444
+ else {
445
+ await new Promise((r) => setTimeout(r, 100));
446
+ }
447
+ };
448
+ isVoipStackReady = () => this.#voipStackInitialized;
449
+ startCall = (options) => {
450
+ this.#ensureInitialized();
451
+ const peers = this.#makeStringList(options.peerList ?? [options.peerJid]);
452
+ const tcToken = this.#createUint8List(options.extraData);
453
+ const isLidCall = options.isLidCall ?? options.peerJid.includes("@lid");
454
+ const isFromDialer = options.isFromDialer ?? false;
455
+ const peerJid = String(options.peerJid);
456
+ try {
457
+ try {
458
+ return this.#instance.startVoipCall(peerJid, peers, options.callId, options.isVideo, options.peerPn, isLidCall, isFromDialer, tcToken);
459
+ }
460
+ catch (error) {
461
+ if (error?.name !== "BindingError")
462
+ throw error;
463
+ return this.#instance.startVoipCall(peerJid, peers, options.callId, options.isVideo, options.peerPn, isFromDialer, tcToken);
464
+ }
465
+ }
466
+ finally {
467
+ peers?.delete?.();
468
+ tcToken?.delete?.();
469
+ }
470
+ };
471
+ endCall = (reason = 0, sendTerminate = true) => {
472
+ this.#ensureInitialized();
473
+ this.#instance.endCall(reason, sendTerminate);
474
+ };
475
+ setMute = (muted) => {
476
+ this.#ensureInitialized();
477
+ return this.#instance.setCallMute(muted);
478
+ };
479
+ updateNetworkMedium = (networkMedium, networkMtu = 0) => {
480
+ this.#ensureInitialized();
481
+ this.#instance.updateNetworkMedium?.(networkMedium, networkMtu);
482
+ };
483
+ handleSignalingOffer = (msg) => {
484
+ this.#ensureInitialized();
485
+ const tcTokenList = this.#createUint8List(msg.tcToken);
486
+ try {
487
+ this.#instance.handleIncomingSignalingOffer(msg.payload, String(msg.peerPlatform ?? 0), String(msg.peerAppVersion ?? "0"), String(msg.epochId ?? "0"), String(msg.timestamp ?? "0"), msg.isOffline ?? false, msg.isOfferNotContact ?? false, String(msg.peerJid), tcTokenList);
488
+ }
489
+ finally {
490
+ tcTokenList?.delete?.();
491
+ }
492
+ };
493
+ handleSignalingMessage = (msg) => {
494
+ this.#ensureInitialized();
495
+ const tcTokenList = this.#createUint8List(msg.tcToken);
496
+ try {
497
+ this.#instance.handleIncomingSignalingMessage(msg.payload, String(msg.peerPlatform ?? "0"), String(msg.peerAppVersion ?? "0"), String(msg.epochId ?? "0"), String(msg.timestamp ?? "0"), msg.isOffline ?? false, String(msg.peerJid), tcTokenList);
498
+ }
499
+ finally {
500
+ tcTokenList?.delete?.();
501
+ }
502
+ };
503
+ handleSignalingAck = (msg) => {
504
+ this.#ensureInitialized();
505
+ const options = this.#createUint8List(msg.extraData);
506
+ try {
507
+ this.#instance.handleIncomingSignalingAck(msg.payload, String(msg.ackError ?? "0"), String(msg.msgType ?? ""), msg.peerJid ?? "", options);
508
+ }
509
+ finally {
510
+ options?.delete?.();
511
+ }
512
+ };
513
+ handleSignalingReceipt = (msg) => {
514
+ this.#ensureInitialized();
515
+ const tcTokenList = this.#createUint8List(msg.tcToken);
516
+ try {
517
+ this.#instance.handleIncomingSignalingReceipt?.(msg.payload, msg.peerJid, tcTokenList);
518
+ }
519
+ finally {
520
+ tcTokenList?.delete?.();
521
+ }
522
+ };
523
+ handleOnTransportMessage = (data, ip, port) => {
524
+ this.#ensureInitialized();
525
+ if (typeof this.#instance.handleOnMessageFromHeap === "function") {
526
+ const ptr = this.malloc(data.byteLength);
527
+ if (!ptr)
528
+ return;
529
+ try {
530
+ const heapU8 = this.#instance.GROWABLE_HEAP_U8?.() ?? this.#instance.HEAPU8;
531
+ if (!heapU8)
532
+ return;
533
+ heapU8.set(data, ptr);
534
+ this.#instance.handleOnMessageFromHeap(ptr, data.byteLength, ip, port);
535
+ }
536
+ finally {
537
+ this.free(ptr);
538
+ }
539
+ return;
540
+ }
541
+ if (typeof this.#instance.handleOnMessage !== "function")
542
+ return;
543
+ const dataList = this.#createUint8List(data);
544
+ try {
545
+ this.#instance.handleOnMessage(dataList, ip, port);
546
+ }
547
+ finally {
548
+ dataList?.delete?.();
549
+ }
550
+ };
551
+ updateIceRtt = (rttMs, relayIp, relayPort) => {
552
+ this.#ensureInitialized();
553
+ this.#instance.updateIceRtt?.(rttMs, relayIp, relayPort);
554
+ };
555
+ sendAudioData = (data, ptr) => {
556
+ this.#ensureInitialized();
557
+ if (!data || data.length === 0 || !ptr)
558
+ return;
559
+ if (typeof this.#instance.onAudioDataFromJs !== "function")
560
+ return;
561
+ try {
562
+ const heapF32 = this.#instance.GROWABLE_HEAP_F32?.();
563
+ if (!heapF32)
564
+ return;
565
+ const index = Math.floor(ptr / 4);
566
+ if (index < 0 || index + data.length > heapF32.length)
567
+ return;
568
+ heapF32.set(data, index);
569
+ this.#instance.onAudioDataFromJs(ptr, data.length);
570
+ }
571
+ catch { }
572
+ };
573
+ malloc = (size) => {
574
+ this.#ensureInitialized();
575
+ return this.#instance._malloc(size);
576
+ };
577
+ free = (ptr) => {
578
+ this.#ensureInitialized();
579
+ this.#instance._free(ptr);
580
+ };
581
+ // ─── private ──────────────────────────────────────────────────────────────
582
+ #ensureInitialized = () => {
583
+ if (!this.#initialized || !this.#instance) {
584
+ throw new Error("WasmEngine not initialized. Call initialize() first.");
585
+ }
586
+ };
587
+ #makeStringList = (arr) => {
588
+ const list = new this.#instance.StringList();
589
+ for (const v of arr)
590
+ list.push_back(v);
591
+ return list;
592
+ };
593
+ #createUint8List = (data) => {
594
+ if (!this.#instance?.Uint8List)
595
+ return null;
596
+ const list = new this.#instance.Uint8List();
597
+ if (data)
598
+ data.forEach((byte) => list.push_back(byte));
599
+ return list;
600
+ };
601
+ #startAudioPlaybackLoop = () => {
602
+ if (this.#audioPlaybackLoopInterval)
603
+ return;
604
+ this.#ensureInitialized();
605
+ this.#isPlaybackActive = true;
606
+ if (typeof this.#instance.requestAudioDataFromWasmVoip !== "function")
607
+ return;
608
+ const framesPerChunk = 320;
609
+ const bufferSize = framesPerChunk * 4;
610
+ try {
611
+ const _malloc = this.#instance._malloc ?? this.#instance.malloc;
612
+ if (!_malloc)
613
+ return;
614
+ this.#audioPlaybackBuffer = _malloc(bufferSize);
615
+ }
616
+ catch {
617
+ return;
618
+ }
619
+ if (!this.#audioPlaybackBuffer || this.#audioPlaybackBuffer <= 0)
620
+ return;
621
+ this.#audioPlaybackLoopInterval = setInterval(() => {
622
+ if (!this.#isPlaybackActive || !this.#instance || !this.#initialized) {
623
+ this.#stopAudioPlaybackLoop();
624
+ return;
625
+ }
626
+ try {
627
+ this.#instance.requestAudioDataFromWasmVoip(this.#audioPlaybackBuffer, bufferSize);
628
+ const heapF32 = this.#instance.GROWABLE_HEAP_F32?.();
629
+ if (!heapF32)
630
+ return;
631
+ const index = Math.floor(this.#audioPlaybackBuffer / 4);
632
+ const numFloats = Math.floor(bufferSize / 4);
633
+ if (index < 0 || index + numFloats > heapF32.length)
634
+ return;
635
+ const audioData = new Float32Array(heapF32.buffer, heapF32.byteOffset + index * 4, numFloats);
636
+ const hasNonZero = audioData.some((s) => Math.abs(s) > 0.0001);
637
+ if (hasNonZero)
638
+ this.#config.callbacks?.onAudioPlaybackData?.(audioData);
639
+ }
640
+ catch { }
641
+ }, 16);
642
+ };
643
+ #stopAudioPlaybackLoop = () => {
644
+ this.#isPlaybackActive = false;
645
+ if (this.#audioPlaybackLoopInterval) {
646
+ clearInterval(this.#audioPlaybackLoopInterval);
647
+ this.#audioPlaybackLoopInterval = null;
648
+ }
649
+ if (this.#audioPlaybackBuffer && this.#audioPlaybackBuffer > 0) {
650
+ try {
651
+ this.#instance?._free?.(this.#audioPlaybackBuffer);
652
+ }
653
+ catch { }
654
+ this.#audioPlaybackBuffer = null;
655
+ }
656
+ };
657
+ #applyDefaultAbProps = () => {
658
+ if (!this.#instance)
659
+ return;
660
+ const setInt = typeof this.#instance.setABPropInt === "function"
661
+ ? (k, v) => { this.#instance.setABPropInt(k, v); }
662
+ : null;
663
+ const setBool = typeof this.#instance.setABPropBool === "function"
664
+ ? (k, v) => { this.#instance.setABPropBool(k, v); }
665
+ : null;
666
+ const setString = typeof this.#instance.setABPropString === "function"
667
+ ? (k, v) => { this.#instance.setABPropString(k, v); }
668
+ : null;
669
+ if (!setInt && !setBool && !setString)
670
+ return;
671
+ const opts = this.#config.options ?? {};
672
+ const intProps = {
673
+ heartbeat_interval_s: opts.heartbeatInterval ?? 30,
674
+ lobby_timeout_min: opts.lobbyTimeout ?? 1,
675
+ max_num_participants_for_ss: opts.maxParticipantsScreenShare ?? 32,
676
+ max_group_size_for_long_ringtone: opts.maxGroupSizeLongRingtone ?? 32,
677
+ app_exit_reason_version: 1,
678
+ log_level: opts.logLevel ?? 3,
679
+ calling_rust_migration_bitmap: 0,
680
+ calling_rust_migration_incoming_stanza_bitmap: 0,
681
+ default_endpoint_thread_poll_timeout: 0,
682
+ aigc_version: 0,
683
+ call_admin_version: 0,
684
+ vid_stream_pause_resume_jb_reset_threshold_ms: 0,
685
+ // Opus: max bandwidth WB (16 kHz). FB (48 kHz) needs native audio device
686
+ // hooks not available in this JS-only WASM context.
687
+ opus_max_bandwidth: 1103, // OPUS_BANDWIDTH_WIDEBAND
688
+ };
689
+ const boolProps = {
690
+ enable_av_downgrade: false,
691
+ enable_new_user_action_stanza_for_raise_hand_sender: false,
692
+ enable_webcodec_video_encode: false,
693
+ enable_init_bwe_for_group_call: false,
694
+ enable_ring_for_gc_on_offer_expire: false,
695
+ allow_reporting_call_replayer_id: false,
696
+ enable_offer_v2_upgrade: false,
697
+ enable_silent_offer: false,
698
+ voice_ai_conversation_starter_latency_tracking: false,
699
+ enable_waiting_room_logging: false,
700
+ attach_transport_rtx: false,
701
+ ignore_joinable_terminate_on_expired_offer: false,
702
+ enable_passthrough_video_decoder: false,
703
+ };
704
+ for (const [key, value] of Object.entries(intProps)) {
705
+ if (setInt && Number.isFinite(value))
706
+ try {
707
+ setInt(key, value);
708
+ }
709
+ catch { }
710
+ }
711
+ for (const [key, value] of Object.entries(boolProps)) {
712
+ if (setBool)
713
+ try {
714
+ setBool(key, value);
715
+ }
716
+ catch { }
717
+ }
718
+ const overrideProps = parseJsonObjectEnv(CALL_WASM_AB_PROPS_JSON);
719
+ for (const [key, value] of Object.entries(overrideProps)) {
720
+ try {
721
+ if (typeof value === "boolean" && setBool)
722
+ setBool(key, value);
723
+ else if (typeof value === "number" && setInt)
724
+ setInt(key, value);
725
+ else if (typeof value === "string" && setString)
726
+ setString(key, value);
727
+ }
728
+ catch { }
729
+ }
730
+ };
731
+ #allocateUnusedWorker = () => {
732
+ const workerScriptPath = resolveWorkerScriptPath();
733
+ if (!fs.existsSync(workerScriptPath))
734
+ return;
735
+ try {
736
+ const worker = new node_worker_threads_1.Worker(workerScriptPath, {
737
+ stdout: true, stderr: true,
738
+ workerData: {
739
+ wasmPath: this.#config.wasmPath,
740
+ wasmBinary: this.#config.wasmBinary,
741
+ workerModulesCode: this.#workerModulesCode,
742
+ loaderCode: this.#loaderCode,
743
+ loaderModuleName: this.#config.loaderModuleName,
744
+ resourcesPath: this.#config.resourcesPath,
745
+ enableLogs: this.#config.enableLogs,
746
+ },
747
+ });
748
+ const port = new NodeWorkerMessagePort(worker, "WAWebVoipWebWasmWorker");
749
+ worker.stdout?.on("data", () => { }); // suppress noisy worker stdout
750
+ worker.stderr?.on("data", filterWorkerStderr);
751
+ this.#unusedWorkers.push(port);
752
+ }
753
+ catch { }
754
+ };
755
+ #initPThreadPool = async () => {
756
+ for (let i = 0; i < PTHREAD_POOL_SIZE; i += 1)
757
+ this.#allocateUnusedWorker();
758
+ };
759
+ #loadWasmModuleToWorker = (worker) => new Promise((resolve) => {
760
+ const loadedHandler = (msg) => {
761
+ if (msg && msg.cmd === "loaded") {
762
+ worker.removeMessageListener("cmd", loadedHandler);
763
+ this.#workersLoadedCount += 1;
764
+ if (this.#workersLoadedCount >= PTHREAD_POOL_SIZE && this.#removeRunDependencyCallback) {
765
+ this.#removeRunDependencyCallback("loading-workers");
766
+ }
767
+ resolve();
768
+ }
769
+ };
770
+ worker.addMessageListener("cmd", loadedHandler);
771
+ worker.workerID = this.#nextWorkerID++;
772
+ worker.postMessage({
773
+ cmd: "load", type: "cmd",
774
+ wasmMemory: this.#wasmMemory,
775
+ wasmModule: this.#wasmModule,
776
+ workerID: worker.workerID,
777
+ handlers: [],
778
+ });
779
+ });
780
+ #loadWasmModuleToAllWorkers = async () => {
781
+ this.#workersLoadedCount = 0;
782
+ await Promise.all(this.#unusedWorkers.map((w) => this.#loadWasmModuleToWorker(w)));
783
+ };
784
+ #registerGlobalCallbacks = () => {
785
+ const callbacks = this.#config.callbacks ?? {};
786
+ _a.registerGlobalCallbackListener("loggingCallback", (data) => {
787
+ if (!this.#config.enableLogs)
788
+ return;
789
+ const level = data?.level;
790
+ const msg = data?.message ?? "";
791
+ const mapped = level === 1 ? "error" : level === 2 ? "warn" : level === 3 ? "log" : "debug";
792
+ callbacks.onLog?.(mapped, msg);
793
+ });
794
+ if (callbacks.onAudioCaptureInit) {
795
+ _a.registerGlobalCallbackListener("initCaptureDriverJS", (data) => {
796
+ callbacks.onAudioCaptureInit({
797
+ sampleRate: data?.sample_rate ?? data?.sampleRate,
798
+ channels: data?.channels,
799
+ bitsPerSample: data?.bits_per_sample ?? data?.bitsPerSample,
800
+ framesPerChunk: data?.frames_per_chunk ?? data?.framesPerChunk,
801
+ });
802
+ });
803
+ }
804
+ _a.registerGlobalCallbackListener("startCaptureJS", () => callbacks.onAudioCaptureStart?.());
805
+ _a.registerGlobalCallbackListener("stopCaptureJS", () => callbacks.onAudioCaptureStop?.());
806
+ if (callbacks.onAudioPlaybackInit) {
807
+ _a.registerGlobalCallbackListener("initPlaybackDriverJS", (data) => {
808
+ callbacks.onAudioPlaybackInit({
809
+ sampleRate: data?.sample_rate ?? data?.sampleRate,
810
+ channels: data?.channels,
811
+ bitsPerSample: data?.bits_per_sample ?? data?.bitsPerSample,
812
+ framesPerChunk: data?.frames_per_chunk ?? data?.framesPerChunk,
813
+ });
814
+ });
815
+ }
816
+ _a.registerGlobalCallbackListener("startPlaybackJS", () => {
817
+ callbacks.onAudioPlaybackStart?.();
818
+ this.#startAudioPlaybackLoop();
819
+ });
820
+ _a.registerGlobalCallbackListener("stopPlaybackJS", () => {
821
+ this.#stopAudioPlaybackLoop();
822
+ callbacks.onAudioPlaybackStop?.();
823
+ });
824
+ if (callbacks.onSignalingXmpp) {
825
+ _a.registerGlobalCallbackListener("onSignalingXmpp", (data) => {
826
+ const peerJid = data.peerJid ?? data.args?.peerJid;
827
+ const callId = data.callId ?? data.args?.callId;
828
+ let xmlPayload = data.xmlPayload ?? data.args?.xmlPayload;
829
+ if (Array.isArray(xmlPayload))
830
+ xmlPayload = new Uint8Array(xmlPayload);
831
+ else if (xmlPayload && typeof xmlPayload === "object" &&
832
+ !(xmlPayload instanceof Uint8Array) && !Buffer.isBuffer(xmlPayload)) {
833
+ xmlPayload = new Uint8Array(xmlPayload);
834
+ }
835
+ callbacks.onSignalingXmpp(peerJid, callId, xmlPayload);
836
+ });
837
+ }
838
+ if (callbacks.onCallEvent) {
839
+ _a.registerGlobalCallbackListener("onCallEvent", (data) => {
840
+ callbacks.onCallEvent(data.eventType, data.eventDataJson);
841
+ });
842
+ }
843
+ if (callbacks.sendDataToRelay) {
844
+ _a.registerGlobalCallbackListener("sendDataToRelay", (data) => {
845
+ let relayData = data.data ?? data.args?.data;
846
+ const ip = data.ip ?? data.args?.ip;
847
+ const portNum = data.port ?? data.args?.port;
848
+ if (relayData instanceof Uint8Array) { /* ok */ }
849
+ else if (Array.isArray(relayData))
850
+ relayData = new Uint8Array(relayData);
851
+ else if (Buffer.isBuffer(relayData))
852
+ relayData = new Uint8Array(relayData);
853
+ else if (relayData && typeof relayData === "object" && relayData.buffer) {
854
+ relayData = new Uint8Array(relayData.buffer, relayData.byteOffset ?? 0, relayData.byteLength ?? relayData.length);
855
+ }
856
+ else if (relayData instanceof ArrayBuffer)
857
+ relayData = new Uint8Array(relayData);
858
+ else
859
+ return 0;
860
+ if (!ip || !portNum)
861
+ return 0;
862
+ callbacks.sendDataToRelay(relayData, ip, portNum);
863
+ return relayData.byteLength;
864
+ });
865
+ }
866
+ _a.#globalCallbacksRegistered = true;
867
+ };
868
+ #requireModule = (name) => {
869
+ const preDefinedModules = {
870
+ Promise,
871
+ WAWebVoipWebWasmWorkerResource: {
872
+ resourcePath: resolveWorkerScriptPath(),
873
+ name: "WAWebVoipWebWasmWorker",
874
+ },
875
+ WorkerBundleResource: {
876
+ createDedicatedWebWorker: (resource) => {
877
+ const scriptPath = resource?.resourcePath && fs.existsSync(resource.resourcePath)
878
+ ? resource.resourcePath
879
+ : resolveWorkerScriptPath();
880
+ const worker = new node_worker_threads_1.Worker(scriptPath, {
881
+ stdout: true, stderr: true,
882
+ workerData: {
883
+ wasmPath: this.#config.wasmPath,
884
+ wasmBinary: this.#config.wasmBinary,
885
+ workerModulesCode: this.#workerModulesCode,
886
+ loaderCode: this.#loaderCode,
887
+ loaderModuleName: this.#config.loaderModuleName,
888
+ resourcesPath: this.#config.resourcesPath,
889
+ enableLogs: this.#config.enableLogs,
890
+ },
891
+ });
892
+ worker.stdout?.on("data", () => { });
893
+ worker.stderr?.on("data", filterWorkerStderr);
894
+ return worker;
895
+ },
896
+ },
897
+ WorkerClient: { init: () => { } },
898
+ WorkerMessagePort: {
899
+ WorkerMessagePort: NodeWorkerMessagePort,
900
+ CastWorkerMessagePort: (w) => w,
901
+ WorkerSyncedMessagePort: NodeWorkerMessagePort,
902
+ },
903
+ bx: Object.assign((id) => String(id), { getURL: () => "" }),
904
+ HasteSupportData: { handle: () => { } },
905
+ ServiceWorkerDynamicModules: { handle: () => { } },
906
+ WhatsAppWebServiceWorker: { default: true },
907
+ WAWebLogger: { initializeWAWebLogger: () => { } },
908
+ WAWebSw: { initHandlers: () => { } },
909
+ WAWebWamRuntimeProvider: { setWamRuntime: () => { } },
910
+ WAWebWamWorkerInterface: { commit: () => { }, set: () => { } },
911
+ ServerJSDefine: { handleDefine: () => { } },
912
+ ix: { add: () => { } },
913
+ MetaConfigMap: { add: () => { } },
914
+ QPLHasteSupportDataStorage: { default: { add: () => { }, get: () => null } },
915
+ getFalcoLogPolicy_DO_NOT_USE: { add: () => { } },
916
+ gkx: { add: () => { } },
917
+ justknobx: { add: () => { } },
918
+ qex: { add: () => { } },
919
+ };
920
+ if (preDefinedModules[name])
921
+ return preDefinedModules[name];
922
+ const mod = this.#moduleRegistry.get(name);
923
+ if (!mod)
924
+ return {};
925
+ if (mod.exports !== undefined)
926
+ return mod.exports;
927
+ const requireFn = this.#requireModule;
928
+ const normalizeModuleResult = (value) => {
929
+ if (value && typeof value === "object" && "exports" in value && Object.keys(value).length === 1) {
930
+ return value.exports;
931
+ }
932
+ return value;
933
+ };
934
+ const importDefaultFn = (dep) => {
935
+ const v = requireFn(dep);
936
+ return v && v.__esModule ? v.default : v;
937
+ };
938
+ const importAllFn = (dep) => {
939
+ const v = requireFn(dep);
940
+ if (v == null)
941
+ return { default: v };
942
+ if (v.__esModule)
943
+ return v;
944
+ if (typeof v !== "object" && typeof v !== "function")
945
+ return { default: v };
946
+ const ns = {};
947
+ for (const key of Object.keys(v))
948
+ ns[key] = v[key];
949
+ ns.default = v;
950
+ return ns;
951
+ };
952
+ const tryMetro = () => {
953
+ const module = { exports: {} };
954
+ mod.factory(this.#vmContext ?? globalThis, requireFn, importDefaultFn, importAllFn, null, module, module.exports);
955
+ return normalizeModuleResult(module.exports);
956
+ };
957
+ const tryLegacy = () => {
958
+ const exports = {};
959
+ const module = { exports };
960
+ const resolvedDeps = mod.deps.map((dep) => requireFn(dep));
961
+ mod.factory(this.#vmContext ?? globalThis, requireFn, requireFn, requireFn, module, exports, ...resolvedDeps);
962
+ return normalizeModuleResult(module.exports);
963
+ };
964
+ let result = {};
965
+ let metroError = null;
966
+ try {
967
+ result = tryMetro();
968
+ }
969
+ catch (e) {
970
+ metroError = e;
971
+ }
972
+ if (metroError != null || (result && typeof result === "object" && Object.keys(result).length === 0)) {
973
+ try {
974
+ const legacyResult = tryLegacy();
975
+ if (typeof legacyResult === "function" || (legacyResult && Object.keys(legacyResult).length > 0)) {
976
+ result = legacyResult;
977
+ }
978
+ }
979
+ catch { }
980
+ }
981
+ mod.exports = result;
982
+ return result;
983
+ };
984
+ #createVMContext = (memory) => {
985
+ const callbacks = this.#config.callbacks ?? {};
986
+ const wasmCallbacks = {
987
+ onVoipReady: () => {
988
+ this.#voipReadyResolver?.();
989
+ callbacks.onVoipReady?.();
990
+ },
991
+ onSignalingXmpp: (data) => callbacks.onSignalingXmpp?.(data?.peerJid, data?.callId, data?.xmlPayload),
992
+ onCallEvent: (data) => callbacks.onCallEvent?.(data?.eventType, data?.eventDataJson),
993
+ sendDataToRelay: (data) => callbacks.sendDataToRelay?.(data?.data, data?.ip, data?.port),
994
+ loggingCallback: (data) => {
995
+ if (!this.#config.enableLogs)
996
+ return;
997
+ const level = data?.level;
998
+ const msg = data?.message ?? "";
999
+ const mapped = level === 1 ? "error" : level === 2 ? "warn" : level === 3 ? "log" : "debug";
1000
+ callbacks.onLog?.(mapped, msg);
1001
+ },
1002
+ initCaptureDriverJS: (data) => {
1003
+ callbacks.onAudioCaptureInit?.({
1004
+ sampleRate: data?.sample_rate, channels: data?.channels,
1005
+ bitsPerSample: data?.bits_per_sample, framesPerChunk: data?.frames_per_chunk,
1006
+ });
1007
+ return 0;
1008
+ },
1009
+ startCaptureJS: () => { callbacks.onAudioCaptureStart?.(); return 0; },
1010
+ stopCaptureJS: () => { callbacks.onAudioCaptureStop?.(); return 0; },
1011
+ initPlaybackDriverJS: (data) => {
1012
+ callbacks.onAudioPlaybackInit?.({
1013
+ sampleRate: data?.sample_rate, channels: data?.channels,
1014
+ bitsPerSample: data?.bits_per_sample, framesPerChunk: data?.frames_per_chunk,
1015
+ });
1016
+ return 0;
1017
+ },
1018
+ startPlaybackJS: () => {
1019
+ callbacks.onAudioPlaybackStart?.();
1020
+ this.#startAudioPlaybackLoop();
1021
+ return 0;
1022
+ },
1023
+ stopPlaybackJS: () => {
1024
+ this.#stopAudioPlaybackLoop();
1025
+ callbacks.onAudioPlaybackStop?.();
1026
+ return 0;
1027
+ },
1028
+ startVideoCaptureJS: () => 0,
1029
+ stopVideoCaptureJS: () => 0,
1030
+ startDesktopCaptureJS: () => 0,
1031
+ stopDesktopCaptureJS: () => 0,
1032
+ dataChannelStateCallback: () => 0,
1033
+ getBrowserAudioProcessingStatus: () => 7,
1034
+ getBweModelPath: () => null,
1035
+ videoFrameConsumed: () => 0,
1036
+ cryptoHkdfExtractWithSaltAndExpand: (data) => {
1037
+ const key = toByteArray(data?.key_);
1038
+ const salt = data?.salt_ ? toByteArray(data.salt_) : new Uint8Array(0);
1039
+ const info = toByteArray(data?.info_);
1040
+ const length = data?.length ?? 32;
1041
+ return callbacks.cryptoHkdf?.(key, salt, info, length) ?? new Uint8Array(length);
1042
+ },
1043
+ hmacSha256KeyGenerator: (data) => {
1044
+ const hmacData = new Uint8Array(data?.data_ ?? []);
1045
+ const hmacKey = new Uint8Array(data?.key_ ?? []);
1046
+ return callbacks.hmacSha256?.(hmacData, hmacKey) ?? new Uint8Array(32);
1047
+ },
1048
+ isParticipantKnownContact: () => true,
1049
+ getPersistentDirectoryPath: () => {
1050
+ const dir = "/tmp/voip";
1051
+ try {
1052
+ if (!fs.existsSync(dir))
1053
+ fs.mkdirSync(dir, { recursive: true });
1054
+ }
1055
+ catch { }
1056
+ return dir;
1057
+ },
1058
+ };
1059
+ const __d = (name, deps, factory) => {
1060
+ this.#moduleRegistry.set(name, { deps, factory, exports: undefined });
1061
+ };
1062
+ const babelHelpers = {
1063
+ extends: Object.assign,
1064
+ inheritsLoose: (sub, sup) => {
1065
+ sub.prototype = Object.create(sup.prototype);
1066
+ sub.prototype.constructor = sub;
1067
+ sub.__proto__ = sup;
1068
+ },
1069
+ objectWithoutPropertiesLoose: (source, excluded) => {
1070
+ if (source == null)
1071
+ return {};
1072
+ const target = {};
1073
+ for (const key of Object.keys(source)) {
1074
+ if (excluded.indexOf(key) >= 0)
1075
+ continue;
1076
+ target[key] = source[key];
1077
+ }
1078
+ return target;
1079
+ },
1080
+ taggedTemplateLiteralLoose: (strings, raw) => {
1081
+ if (!raw)
1082
+ raw = strings.slice(0);
1083
+ strings.raw = raw;
1084
+ return strings;
1085
+ },
1086
+ wrapNativeSuper: (Class) => Class,
1087
+ };
1088
+ const addRunDependency = (dep) => {
1089
+ if (dep === "loading-workers" && this.#workersLoadedCount >= PTHREAD_POOL_SIZE) {
1090
+ setImmediate(() => this.#removeRunDependencyCallback?.(dep));
1091
+ }
1092
+ };
1093
+ const removeRunDependency = (_dep) => { };
1094
+ this.#removeRunDependencyCallback = removeRunDependency;
1095
+ const webCrypto = {
1096
+ getRandomValues: (arr) => {
1097
+ if (!arr || !ArrayBuffer.isView(arr)) {
1098
+ throw new TypeError("crypto.getRandomValues expects a TypedArray");
1099
+ }
1100
+ const bytes = Buffer.from(arr.buffer, arr.byteOffset, arr.byteLength);
1101
+ (0, node_crypto_1.randomFillSync)(bytes);
1102
+ return arr;
1103
+ },
1104
+ };
1105
+ const selfObj = {
1106
+ __swData: { dynamic_data: { hsdp: {}, dynamic_modules: [] } },
1107
+ WhatsAppVoipWasmCallbacks: wasmCallbacks,
1108
+ WhatsAppVoipWasmWorkerCompatibleCallbacks: wasmCallbacks,
1109
+ crypto: webCrypto,
1110
+ };
1111
+ selfObj.self = selfObj;
1112
+ selfObj.window = selfObj;
1113
+ selfObj.globalThis = selfObj;
1114
+ if (typeof global !== "undefined") {
1115
+ global.WhatsAppVoipWasmCallbacks = wasmCallbacks;
1116
+ global.WhatsAppVoipWasmWorkerCompatibleCallbacks = wasmCallbacks;
1117
+ }
1118
+ const context = vm.createContext({
1119
+ self: selfObj, globalThis: selfObj, global: selfObj, window: selfObj,
1120
+ console, setTimeout, setInterval, clearTimeout, clearInterval,
1121
+ queueMicrotask, performance, babelHelpers, __d,
1122
+ require: this.#requireModule,
1123
+ addRunDependency, removeRunDependency,
1124
+ WebAssembly, SharedArrayBuffer,
1125
+ Atomics: this.#createAtomicsWrapper(memory),
1126
+ Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array,
1127
+ Float32Array, Float64Array, BigInt64Array, BigUint64Array,
1128
+ ArrayBuffer, DataView, Error, TypeError, RangeError, Promise,
1129
+ Map, Set, WeakMap, WeakSet, Symbol, Object, Array, String, Number,
1130
+ Boolean, Math, Date, JSON, RegExp, Function, Proxy, Reflect,
1131
+ crypto: webCrypto,
1132
+ WhatsAppVoipWasmCallbacks: wasmCallbacks,
1133
+ WhatsAppVoipWasmWorkerCompatibleCallbacks: wasmCallbacks,
1134
+ navigator: {
1135
+ userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
1136
+ hardwareConcurrency: 4,
1137
+ },
1138
+ process: undefined,
1139
+ document: { currentScript: null },
1140
+ location: { href: "file:///wasm" },
1141
+ Worker: class {
1142
+ constructor() { }
1143
+ postMessage() { }
1144
+ terminate() { }
1145
+ addEventListener() { }
1146
+ },
1147
+ fetch: async () => { throw new Error("fetch not supported"); },
1148
+ XMLHttpRequest: class {
1149
+ open() { }
1150
+ send() { }
1151
+ setRequestHeader() { }
1152
+ },
1153
+ Blob: class {
1154
+ constructor() { }
1155
+ },
1156
+ URL: { createObjectURL: () => "blob:fake", revokeObjectURL: () => { } },
1157
+ Image: class {
1158
+ src = "";
1159
+ onload = null;
1160
+ onerror = null;
1161
+ },
1162
+ Audio: class {
1163
+ src = "";
1164
+ addEventListener() { }
1165
+ },
1166
+ __NODE_PTHREAD: {
1167
+ getUnusedWorker: () => {
1168
+ if (this.#unusedWorkers.length === 0)
1169
+ return null;
1170
+ const worker = this.#unusedWorkers.pop();
1171
+ this.#runningWorkers.push(worker);
1172
+ return worker;
1173
+ },
1174
+ returnWorkerToPool: (worker) => {
1175
+ const idx = this.#runningWorkers.indexOf(worker);
1176
+ if (idx >= 0) {
1177
+ this.#runningWorkers.splice(idx, 1);
1178
+ this.#unusedWorkers.push(worker);
1179
+ }
1180
+ },
1181
+ spawnThread: (params) => {
1182
+ const worker = this.#unusedWorkers.pop();
1183
+ if (!worker)
1184
+ return 6;
1185
+ this.#runningWorkers.push(worker);
1186
+ this.#pthreads[params.pthread_ptr] = worker;
1187
+ worker.pthread_ptr = params.pthread_ptr;
1188
+ const pthreadTable = this.#instance?.PThread?.pthreads;
1189
+ if (pthreadTable)
1190
+ pthreadTable[params.pthread_ptr] = worker;
1191
+ worker.postMessage({
1192
+ cmd: "run",
1193
+ start_routine: params.startRoutine,
1194
+ arg: params.arg,
1195
+ pthread_ptr: params.pthread_ptr,
1196
+ });
1197
+ return 0;
1198
+ },
1199
+ unusedWorkersCount: () => this.#unusedWorkers.length,
1200
+ runningWorkersCount: () => this.#runningWorkers.length,
1201
+ },
1202
+ __IS_NODE_PTHREAD_ENV: true,
1203
+ });
1204
+ context.self = context;
1205
+ context.globalThis = context;
1206
+ context.global = context;
1207
+ context.window = context;
1208
+ return context;
1209
+ };
1210
+ #createAtomicsWrapper = (_memory) => {
1211
+ const atomicsWrapper = {
1212
+ add: Atomics.add.bind(Atomics),
1213
+ and: Atomics.and.bind(Atomics),
1214
+ compareExchange: Atomics.compareExchange.bind(Atomics),
1215
+ exchange: Atomics.exchange.bind(Atomics),
1216
+ isLockFree: Atomics.isLockFree.bind(Atomics),
1217
+ load: Atomics.load.bind(Atomics),
1218
+ or: Atomics.or.bind(Atomics),
1219
+ store: Atomics.store.bind(Atomics),
1220
+ sub: Atomics.sub.bind(Atomics),
1221
+ xor: Atomics.xor.bind(Atomics),
1222
+ notify: (typedArray, index, count) => {
1223
+ try {
1224
+ return Atomics.notify(typedArray, index, count);
1225
+ }
1226
+ catch (e) {
1227
+ if (e?.message?.includes("futex_wake") || e?.message?.includes("main_browser_thread"))
1228
+ return 0;
1229
+ throw e;
1230
+ }
1231
+ },
1232
+ waitAsync: Atomics.waitAsync
1233
+ ? Atomics.waitAsync.bind(Atomics)
1234
+ : () => ({ async: true, value: Promise.resolve("ok") }),
1235
+ wait: (typedArray, index, value, timeout) => {
1236
+ const currentValue = Atomics.load(typedArray, index);
1237
+ if (currentValue !== value)
1238
+ return "not-equal";
1239
+ if (timeout !== undefined && timeout <= 0)
1240
+ return "timed-out";
1241
+ return "timed-out";
1242
+ },
1243
+ [Symbol.toStringTag]: "Atomics",
1244
+ };
1245
+ return atomicsWrapper;
1246
+ };
1247
+ }
1248
+ exports.WasmEngine = WasmEngine;
1249
+ _a = WasmEngine;
1250
+ exports.default = WasmEngine;
1251
+
1252
+ module.exports = exports.WasmEngine;
1253
+ module.exports.WasmEngine = exports.WasmEngine;
1254
+ module.exports.default = exports.WasmEngine;
1255
+ Object.defineProperty(module.exports, "__esModule", { value: true });