@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,639 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VoipClient = exports.ActiveCall = exports.CallState = void 0;
4
+
5
+ const events_1 = require("node:events");
6
+ const crypto_1 = require("node:crypto");
7
+ const path_1 = require("node:path");
8
+ const wasm_engine_js_1 = require("./wasm-engine.js");
9
+ const relay_transport_js_1 = require("./relay-transport.js");
10
+ const signaling_js_1 = require("./signaling.js");
11
+ const audio_feeder_js_1 = require("./audio-feeder.js");
12
+ const types_js_1 = require("./types.js");
13
+
14
+ Object.defineProperty(exports, "CallState", {
15
+ enumerable: true,
16
+ get: function () {
17
+ return types_js_1.CallState;
18
+ }
19
+ });
20
+
21
+ const SHA256_LEN = 32;
22
+
23
+ const loadBaileys = async () => {
24
+ try {
25
+ return await import("../index.js");
26
+ } catch {
27
+ throw new Error("Could not import internal Elaina Baileys module.");
28
+ }
29
+ };
30
+
31
+ const toBareJid = jid => {
32
+ if (!jid) return jid;
33
+ const value = String(jid);
34
+ const at = value.indexOf("@");
35
+ if (at < 0) return value;
36
+ const user = value.slice(0, at).split(":")[0];
37
+ return `${user}@${value.slice(at + 1)}`;
38
+ };
39
+
40
+ const toDeviceJid = jid => {
41
+ if (!jid) return jid;
42
+ const value = String(jid);
43
+ const at = value.indexOf("@");
44
+ if (at < 0) return value;
45
+ const user = value.slice(0, at).split(":")[0];
46
+ const server = value.slice(at + 1);
47
+ return `${user}:0@${server}`;
48
+ };
49
+
50
+ const computeHkdf = (key, salt, info, length) => {
51
+ const effectiveSalt = salt && salt.length > 0 ? Buffer.from(salt) : Buffer.alloc(SHA256_LEN, 0);
52
+ const prk = (0, crypto_1.createHmac)("sha256", effectiveSalt).update(key).digest();
53
+ const blocks = Math.ceil(length / SHA256_LEN);
54
+ const okm = Buffer.alloc(blocks * SHA256_LEN);
55
+ let prev = Buffer.alloc(0);
56
+
57
+ for (let i = 1; i <= blocks; i += 1) {
58
+ prev = (0, crypto_1.createHmac)("sha256", prk)
59
+ .update(prev)
60
+ .update(info)
61
+ .update(Buffer.from([i]))
62
+ .digest();
63
+ prev.copy(okm, (i - 1) * SHA256_LEN);
64
+ }
65
+
66
+ return new Uint8Array(okm.buffer, okm.byteOffset, length);
67
+ };
68
+
69
+ const computeHmacSha256 = (data, key) => {
70
+ const result = (0, crypto_1.createHmac)("sha256", Buffer.from(key)).update(data).digest();
71
+ return new Uint8Array(result.buffer, result.byteOffset, result.byteLength);
72
+ };
73
+
74
+ const isCallReceiptNode = node => {
75
+ if (node?.tag !== "receipt") return false;
76
+ const child = Array.isArray(node.content) ? node.content[0] : null;
77
+ return !!(child?.attrs?.["call-id"] || child?.attrs?.call_id);
78
+ };
79
+
80
+ class ActiveCall extends events_1.EventEmitter {
81
+ constructor(callId, engine, durationMs) {
82
+ super();
83
+ this.callId = callId;
84
+ this.engine = engine;
85
+ this._state = types_js_1.CallState.Idle;
86
+ this._endResolver = undefined;
87
+ this._endPromise = undefined;
88
+ this._endTimer = null;
89
+ this._ended = false;
90
+ this._audioSource = "silence";
91
+
92
+ this.end = () => {
93
+ if (this._ended) return;
94
+ try { this.engine.endCall(0, true); } catch {}
95
+ this._forceEnd("local_end");
96
+ };
97
+
98
+ this.mute = muted => {
99
+ try { this.engine.setMute(muted); } catch {}
100
+ };
101
+
102
+ this.waitForEnd = () => this._endPromise;
103
+
104
+ this._updateState = state => {
105
+ this._state = state;
106
+ if (state === types_js_1.CallState.PreacceptReceived) {
107
+ this.emit("ringing");
108
+ } else if (state === types_js_1.CallState.Active) {
109
+ this.emit("connected");
110
+ } else if (state === types_js_1.CallState.Idle || state === types_js_1.CallState.Ending) {
111
+ this._forceEnd("ended");
112
+ }
113
+ };
114
+
115
+ this._emitAudio = pcm => {
116
+ this.emit("audio", pcm);
117
+ };
118
+
119
+ this._forceEnd = reason => {
120
+ if (this._ended) return;
121
+ this._ended = true;
122
+ if (this._endTimer) {
123
+ clearTimeout(this._endTimer);
124
+ this._endTimer = null;
125
+ }
126
+ this.emit("ended", reason);
127
+ this._endResolver(reason);
128
+ };
129
+
130
+ this._endPromise = new Promise(resolve => {
131
+ this._endResolver = resolve;
132
+ });
133
+
134
+ if (durationMs > 0) {
135
+ this._endTimer = setTimeout(() => this.end(), durationMs);
136
+ }
137
+ }
138
+
139
+ get state() {
140
+ return this._state;
141
+ }
142
+ }
143
+
144
+ exports.ActiveCall = ActiveCall;
145
+
146
+ class VoipClient {
147
+ constructor(config = {}) {
148
+ this._config = config;
149
+ this._engine = null;
150
+ this._relay = null;
151
+ this._signaling = null;
152
+ this._sock = config.socket || config.sock || config.conn || null;
153
+ this._activeCall = null;
154
+ this._baileys = null;
155
+ this._externalSocket = !!this._sock;
156
+ this._capturePtr = 0;
157
+ this._captureChunkBytes = 0;
158
+ this._captureSampleRate = 16000;
159
+ this._captureChannels = 1;
160
+ this._captureFramesPerChunk = 320;
161
+ this._feeder = null;
162
+ this._wsCallHandler = null;
163
+ this._wsReceiptHandler = null;
164
+ this._captureStartRequested = false;
165
+ this._audioStartTimer = null;
166
+
167
+ this.connect = async () => {
168
+ this._baileys = await loadBaileys();
169
+
170
+ if (this._sock) {
171
+ await this._initVoipStack();
172
+ return;
173
+ }
174
+
175
+ const { useMultiFileAuthState, default: makeWASocket, DisconnectReason } = this._baileys;
176
+ const makeSocket = makeWASocket ?? this._baileys.makeWASocket ?? this._baileys;
177
+
178
+ if (!this._config.authDir) {
179
+ throw new Error("authDir wajib diisi jika tidak memakai socket/conn.");
180
+ }
181
+
182
+ const authDir = (0, path_1.resolve)(this._config.authDir);
183
+ const { state, saveCreds } = await useMultiFileAuthState(authDir);
184
+
185
+ const silentLogger = {
186
+ level: "silent",
187
+ child: () => silentLogger,
188
+ trace: () => {},
189
+ debug: () => {},
190
+ info: () => {},
191
+ warn: () => {},
192
+ error: () => {},
193
+ fatal: () => {}
194
+ };
195
+
196
+ const createSocket = () => makeSocket({
197
+ auth: state,
198
+ emitOwnEvents: true,
199
+ logger: silentLogger
200
+ });
201
+
202
+ await new Promise((resolveOpen, rejectOpen) => {
203
+ let opened = false;
204
+ let retries = 0;
205
+ const maxRetries = 5;
206
+
207
+ const connectSocket = () => {
208
+ this._sock = createSocket();
209
+ this._sock.ev.on("creds.update", saveCreds);
210
+
211
+ const onUncaughtException = err => {
212
+ const code = err?.output?.statusCode ?? err?.data?.attrs?.code;
213
+ if ((code === 515 || code === "515") && !opened && retries < maxRetries) {
214
+ retries += 1;
215
+ setTimeout(connectSocket, 1500);
216
+ return;
217
+ }
218
+ if (!opened) {
219
+ process.off("uncaughtException", onUncaughtException);
220
+ rejectOpen(err);
221
+ }
222
+ };
223
+
224
+ process.on("uncaughtException", onUncaughtException);
225
+
226
+ this._sock.ev.on("connection.update", update => {
227
+ if (update.qr) {
228
+ console.log("QR diterima, tapi qrcode-terminal tidak dipakai.");
229
+ console.log(update.qr);
230
+ }
231
+ if (update.connection === "open") {
232
+ opened = true;
233
+ process.off("uncaughtException", onUncaughtException);
234
+ resolveOpen();
235
+ return;
236
+ }
237
+ if (update.connection === "close" && !opened) {
238
+ const statusCode = update.lastDisconnect?.error?.output?.statusCode;
239
+ const shouldReconnect = statusCode === 515 || statusCode === DisconnectReason?.restartRequired;
240
+ if (shouldReconnect && retries < maxRetries) {
241
+ retries += 1;
242
+ setTimeout(connectSocket, 1000);
243
+ } else {
244
+ process.off("uncaughtException", onUncaughtException);
245
+ rejectOpen(update.lastDisconnect?.error ?? new Error("socket closed before open"));
246
+ }
247
+ }
248
+ });
249
+ };
250
+
251
+ connectSocket();
252
+ });
253
+
254
+ await this._initVoipStack();
255
+ };
256
+
257
+ this.call = async (phoneNumber, opts = {}) => {
258
+ if (!this._engine || !this._signaling) {
259
+ throw new Error("Not connected. Call connect() first.");
260
+ }
261
+
262
+ if (this._activeCall) {
263
+ try { this._activeCall._forceEnd("replaced"); } catch {}
264
+ try { this._engine?.endCall?.(0, true); } catch {}
265
+ try { this._feeder?.stop(); } catch {}
266
+ this._feeder = null;
267
+ this._activeCall = null;
268
+ }
269
+
270
+ const targetNumber = phoneNumber.replace(/\D/g, "");
271
+ if (!targetNumber) {
272
+ throw new Error("Nomor target tidak valid.");
273
+ }
274
+
275
+ const targetPnJid = `${targetNumber}@s.whatsapp.net`;
276
+ const durationMs = opts.durationMs ?? 120000;
277
+ const audioSource = opts.audioSource ?? "silence";
278
+
279
+ const peerLid = await this._signaling.resolveLid(targetPnJid);
280
+ if (!peerLid) {
281
+ throw new Error(`Tidak bisa resolve LID untuk ${targetPnJid}. Pastikan target valid dan sudah tersimpan mapping LID/PN atau USync LID bisa diakses.`);
282
+ }
283
+
284
+ const peerJid = peerLid;
285
+ const peerPn = targetPnJid;
286
+ const isLidCall = true;
287
+
288
+ for (const jid of [targetPnJid, peerLid]) {
289
+ try { await this._sock.presenceSubscribe(jid); } catch {}
290
+ }
291
+ await new Promise(resolve => setTimeout(resolve, 150));
292
+
293
+ let peerDeviceJids = [];
294
+ try {
295
+ peerDeviceJids = await this._signaling.discoverPeerDevices(peerLid);
296
+ } catch (err) {
297
+ console.error("[RTC DISCOVER DEVICES ERROR]", err?.message || err);
298
+ }
299
+
300
+ const deviceList = peerDeviceJids.length ? peerDeviceJids : [toBareJid(peerLid)];
301
+
302
+ try {
303
+ await this._signaling.ensureSessionsForPeers(deviceList);
304
+ } catch (err) {
305
+ console.error("[RTC ENSURE SESSIONS WARNING]", err?.message || err);
306
+ }
307
+
308
+ await new Promise(resolve => setTimeout(resolve, 100));
309
+
310
+ let tcToken = null;
311
+ try {
312
+ this._signaling.issueTcToken(peerLid).catch(err => {
313
+ console.error("[RTC ISSUE TC TOKEN ASYNC ERROR]", err?.message || err);
314
+ });
315
+
316
+ tcToken = await Promise.race([
317
+ this._signaling.ensureTcToken(peerLid, targetPnJid).catch(err => {
318
+ console.error("[RTC ENSURE TC TOKEN ERROR]", err?.message || err);
319
+ return null;
320
+ }),
321
+ new Promise(resolve => setTimeout(() => resolve(null), 1500))
322
+ ]);
323
+ } catch (err) {
324
+ console.error("[RTC TC TOKEN FAST PATH ERROR]", err?.message || err);
325
+ }
326
+
327
+ if (!tcToken || !tcToken.length) {
328
+ console.warn("[RTC TC TOKEN WARNING] TC token kosong, lanjut startCall dengan token kosong.");
329
+ tcToken = undefined;
330
+ }
331
+
332
+ const callId = ("00" + (0, crypto_1.randomBytes)(16).toString("hex").slice(2)).toUpperCase();
333
+ const call = new ActiveCall(callId, this._engine, durationMs);
334
+
335
+ call._audioSource = audioSource;
336
+ call._audioStartDelayMs = Number(opts.audioStartDelayMs ?? opts.audioDelayMs ?? 1800) || 0;
337
+ this._activeCall = call;
338
+
339
+ call.once("ended", () => {
340
+ if (this._activeCall === call) this._activeCall = null;
341
+ });
342
+
343
+ call.once("error", () => {
344
+ if (this._activeCall === call) this._activeCall = null;
345
+ });
346
+
347
+ console.log("[RTC START CALL PARAMS]", {
348
+ peerJid,
349
+ peerPn,
350
+ peerList: deviceList,
351
+ callId,
352
+ isLidCall,
353
+ targetPnJid,
354
+ peerLid,
355
+ hasTcToken: !!tcToken,
356
+ tcTokenLength: tcToken?.length || 0
357
+ });
358
+
359
+ try {
360
+ const startResult = this._engine.startCall({
361
+ peerJid,
362
+ peerPn,
363
+ peerList: deviceList,
364
+ callId,
365
+ isVideo: false,
366
+ isLidCall,
367
+ isFromDialer: false,
368
+ extraData: tcToken
369
+ });
370
+ console.log("[RTC START CALL RESULT]", startResult);
371
+ } catch (err) {
372
+ if (this._activeCall === call) this._activeCall = null;
373
+ try { call._forceEnd("start_call_failed"); } catch {}
374
+ throw err;
375
+ }
376
+
377
+ return call;
378
+ };
379
+
380
+ this.disconnect = () => {
381
+ this._activeCall?._forceEnd("disconnect");
382
+ this._activeCall = null;
383
+ this._captureStartRequested = false;
384
+ try { this._feeder?.stop(); } catch {}
385
+ this._feeder = null;
386
+ if (this._audioStartTimer) {
387
+ clearTimeout(this._audioStartTimer);
388
+ this._audioStartTimer = null;
389
+ }
390
+ try { this._signaling?.attachEngine?.(null); } catch {}
391
+ if (this._sock?.ws?.off) {
392
+ try { if (this._wsCallHandler) this._sock.ws.off("CB:call", this._wsCallHandler); } catch {}
393
+ try { if (this._wsReceiptHandler) this._sock.ws.off("CB:receipt", this._wsReceiptHandler); } catch {}
394
+ }
395
+ this._wsCallHandler = null;
396
+ this._wsReceiptHandler = null;
397
+ this._relay?.closeAll();
398
+ this._engine?.destroy();
399
+ if (!this._externalSocket) {
400
+ this._sock?.end?.();
401
+ }
402
+ this._engine = null;
403
+ this._relay = null;
404
+ this._signaling = null;
405
+ if (!this._externalSocket) {
406
+ this._sock = null;
407
+ }
408
+ };
409
+
410
+ this.resetCallState = () => {
411
+ try { this._activeCall?._forceEnd("reset"); } catch {}
412
+ try { this._engine?.endCall?.(0, true); } catch {}
413
+ try { this._feeder?.stop(); } catch {}
414
+ this._feeder = null;
415
+ if (this._audioStartTimer) {
416
+ clearTimeout(this._audioStartTimer);
417
+ this._audioStartTimer = null;
418
+ }
419
+ this._captureStartRequested = false;
420
+ this._activeCall = null;
421
+ };
422
+
423
+ this._initVoipStack = async () => {
424
+ if (!this._sock) {
425
+ throw new Error("Socket Baileys belum tersedia.");
426
+ }
427
+
428
+ this._signaling = new signaling_js_1.SignalingBridge({ sock: this._sock });
429
+ await this._signaling.init();
430
+
431
+ this._relay = new relay_transport_js_1.RelayRtcTransport({
432
+ onTransportMessage: (data, ip, port) => this._engine?.handleOnTransportMessage(data, ip, port),
433
+ onIceRtt: (rttMs, ip, port) => this._engine?.updateIceRtt(rttMs, ip, port)
434
+ });
435
+
436
+ this._engine = new wasm_engine_js_1.WasmEngine({
437
+ callbacks: {
438
+ onSignalingXmpp: (peerJid, callId, xmlPayload) => {
439
+ console.log("[RTC WASM SIGNALING XMPP]", {
440
+ peerJid,
441
+ callId,
442
+ payloadLength: xmlPayload?.length || 0
443
+ });
444
+ return this._signaling.sendSignaling(peerJid, callId, xmlPayload);
445
+ },
446
+ onCallEvent: (eventType, eventData) => this._handleCallEvent(eventType, eventData),
447
+ sendDataToRelay: (data, ip, port) => this._relay.send(data, ip, port),
448
+ onAudioCaptureInit: config => this._handleAudioCaptureInit(config),
449
+ onAudioCaptureStart: () => this._handleAudioCaptureStart(),
450
+ onAudioCaptureStop: () => this._handleAudioCaptureStop(),
451
+ onAudioPlaybackData: audioData => this._activeCall?._emitAudio(audioData),
452
+ cryptoHkdf: computeHkdf,
453
+ hmacSha256: computeHmacSha256
454
+ }
455
+ });
456
+
457
+ await this._engine.initialize();
458
+ this._signaling.attachEngine(this._engine);
459
+
460
+ const selfPnJidRaw =
461
+ this._sock.authState?.creds?.me?.id ||
462
+ this._sock.authState?.creds?.me?.jid ||
463
+ this._sock.user?.id ||
464
+ this._sock.user?.jid;
465
+
466
+ const selfPnJid = toBareJid(selfPnJidRaw);
467
+ const selfLidJid =
468
+ this._sock.authState?.creds?.me?.lid ||
469
+ this._sock.authState?.creds?.me?.lidJid ||
470
+ "";
471
+
472
+ if (!selfPnJid) {
473
+ throw new Error("Tidak bisa membaca JID bot dari socket utama.");
474
+ }
475
+
476
+ console.log("[RTC SELF JID]", { selfPnJid, selfLidJid });
477
+
478
+ this._engine.initVoipStack(selfPnJid, selfPnJid, selfLidJid);
479
+ await this._engine.waitForVoipStackReady();
480
+
481
+ try { this._engine.updateNetworkMedium(2, 0); } catch {}
482
+
483
+ if (this._sock.ws?.on) {
484
+ if (this._sock.ws?.off) {
485
+ try { if (this._wsCallHandler) this._sock.ws.off("CB:call", this._wsCallHandler); } catch {}
486
+ try { if (this._wsReceiptHandler) this._sock.ws.off("CB:receipt", this._wsReceiptHandler); } catch {}
487
+ }
488
+
489
+ const signaling = this._signaling;
490
+ const engine = this._engine;
491
+
492
+ this._wsCallHandler = node => {
493
+ if (!signaling || !engine) return;
494
+ if (this._signaling !== signaling || this._engine !== engine) return;
495
+ if (typeof engine.isInitialized === "function" && !engine.isInitialized()) return;
496
+ signaling.processIncomingCall(node, engine, this._activeCall?.callId ?? "");
497
+ };
498
+
499
+ this._wsReceiptHandler = node => {
500
+ if (!isCallReceiptNode(node)) return;
501
+ if (!signaling || !engine) return;
502
+ if (this._signaling !== signaling || this._engine !== engine) return;
503
+ if (typeof engine.isInitialized === "function" && !engine.isInitialized()) return;
504
+ signaling.processIncomingReceipt(node, engine, this._activeCall?.callId ?? "");
505
+ };
506
+
507
+ this._sock.ws.on("CB:call", this._wsCallHandler);
508
+ this._sock.ws.on("CB:receipt", this._wsReceiptHandler);
509
+ }
510
+ };
511
+
512
+ this._handleCallEvent = (eventType, eventData) => {
513
+ console.log("[RTC CALL EVENT]", { eventType, hasData: !!eventData, data: eventData });
514
+
515
+ if (eventType === 16 && eventData) {
516
+ try {
517
+ const parsed = JSON.parse(eventData);
518
+ const info = parsed.call_info ?? parsed.callInfo ?? {};
519
+ const callState = Number(info.call_state ?? info.callState ?? 0);
520
+ console.log("[RTC CALL STATE]", callState);
521
+ this._activeCall?._updateState(callState);
522
+ if (callState === types_js_1.CallState.Active) {
523
+ this._captureStartRequested = true;
524
+ setTimeout(() => {
525
+ try { this._startAudioFeeder?.(); } catch (err) {
526
+ console.error("[RTC AUDIO START ON ACTIVE ERROR]", err?.message || err);
527
+ }
528
+ }, 300);
529
+ }
530
+ } catch {}
531
+ } else if (eventType === 156 && eventData) {
532
+ try {
533
+ const update = JSON.parse(eventData);
534
+ this._relay?.updateRelayList(update);
535
+ } catch {}
536
+ } else if (eventType === 2) {
537
+ this._activeCall?._forceEnd("remote_end");
538
+ }
539
+ };
540
+
541
+ this._handleAudioCaptureInit = config => {
542
+ if (!this._engine) return;
543
+ this._captureSampleRate = config.sampleRate || 16000;
544
+ this._captureChannels = config.channels || 1;
545
+ this._captureFramesPerChunk = config.framesPerChunk || 320;
546
+ const chunkSamples = this._captureFramesPerChunk * this._captureChannels;
547
+ this._captureChunkBytes = chunkSamples * Float32Array.BYTES_PER_ELEMENT;
548
+ this._capturePtr = this._engine.malloc(this._captureChunkBytes);
549
+ if (this._captureStartRequested && this._activeCall?.state === types_js_1.CallState.Active) {
550
+ setTimeout(() => {
551
+ try { this._startAudioFeeder?.(); } catch {}
552
+ }, 100);
553
+ }
554
+ };
555
+
556
+ this._startAudioFeeder = () => {
557
+ this._captureStartRequested = true;
558
+
559
+ if (this._activeCall?.state !== types_js_1.CallState.Active) {
560
+ console.log("[RTC AUDIO] capture siap, tunggu call active sebelum audio start");
561
+ return;
562
+ }
563
+
564
+ if (!this._engine || !this._capturePtr) {
565
+ console.warn("[RTC AUDIO] capturePtr belum siap, audio feeder batal start");
566
+ return;
567
+ }
568
+
569
+ if (this._feeder) return;
570
+
571
+ const audioDelayMs = Number(this._activeCall?._audioStartDelayMs ?? 0) || 0;
572
+ if (audioDelayMs > 0 && !this._audioStartTimer) {
573
+ console.log("[RTC AUDIO] call active, audio ditunda:", audioDelayMs);
574
+ this._audioStartTimer = setTimeout(() => {
575
+ this._audioStartTimer = null;
576
+ if (this._activeCall?.state === types_js_1.CallState.Active) {
577
+ this._activeCall._audioStartDelayMs = 0;
578
+ this._startAudioFeeder();
579
+ }
580
+ }, audioDelayMs);
581
+ return;
582
+ }
583
+
584
+ if (this._audioStartTimer) return;
585
+
586
+ const audioSource = this._activeCall?._audioSource ?? "silence";
587
+
588
+ console.log("[RTC AUDIO] start feeder:", {
589
+ audioSource,
590
+ sampleRate: this._captureSampleRate,
591
+ channels: this._captureChannels,
592
+ framesPerChunk: this._captureFramesPerChunk
593
+ });
594
+
595
+ this._feeder = new audio_feeder_js_1.AudioFeeder(
596
+ this._captureSampleRate,
597
+ this._captureChannels,
598
+ this._captureFramesPerChunk,
599
+ chunk => {
600
+ if (this._engine && this._capturePtr && (!this._engine.isInitialized || this._engine.isInitialized())) {
601
+ this._engine.sendAudioData(chunk, this._capturePtr);
602
+ }
603
+ },
604
+ audioSource
605
+ );
606
+
607
+ this._feeder.start();
608
+ };
609
+
610
+ this._handleAudioCaptureStart = () => {
611
+ this._captureStartRequested = true;
612
+ if (this._activeCall?.state === types_js_1.CallState.Active) {
613
+ this._startAudioFeeder();
614
+ } else {
615
+ console.log("[RTC AUDIO] startCaptureJS diterima sebelum active, audio ditahan dulu");
616
+ }
617
+ };
618
+
619
+ this._handleAudioCaptureStop = () => {
620
+ this._captureStartRequested = false;
621
+ this._feeder?.stop();
622
+ this._feeder = null;
623
+ if (this._engine && this._capturePtr) {
624
+ try { this._engine.free(this._capturePtr); } catch {}
625
+ this._capturePtr = 0;
626
+ }
627
+ };
628
+ }
629
+ }
630
+
631
+ exports.VoipClient = VoipClient;
632
+ exports.default = VoipClient;
633
+
634
+ module.exports = VoipClient;
635
+ module.exports.VoipClient = VoipClient;
636
+ module.exports.ActiveCall = ActiveCall;
637
+ module.exports.CallState = types_js_1.CallState;
638
+ module.exports.default = VoipClient;
639
+ Object.defineProperty(module.exports, "__esModule", { value: true });