dcodeindra-baileyspro 2.3.9

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 (286) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +2534 -0
  3. package/WAProto/Adv/Adv.d.ts +518 -0
  4. package/WAProto/Adv/Adv.js +1734 -0
  5. package/WAProto/Adv/Adv.proto +36 -0
  6. package/WAProto/BotMetadata/BotMetadata.d.ts +5745 -0
  7. package/WAProto/BotMetadata/BotMetadata.js +16291 -0
  8. package/WAProto/BotMetadata/BotMetadata.proto +463 -0
  9. package/WAProto/Cert/Cert.d.ts +497 -0
  10. package/WAProto/Cert/Cert.js +1503 -0
  11. package/WAProto/Cert/Cert.proto +28 -0
  12. package/WAProto/ChatLockSettings/ChatLockSettings.d.ts +391 -0
  13. package/WAProto/ChatLockSettings/ChatLockSettings.js +1155 -0
  14. package/WAProto/ChatLockSettings/ChatLockSettings.proto +7 -0
  15. package/WAProto/CompanionReg/CompanionReg.d.ts +1055 -0
  16. package/WAProto/CompanionReg/CompanionReg.js +3532 -0
  17. package/WAProto/CompanionReg/CompanionReg.proto +89 -0
  18. package/WAProto/DeviceCapabilities/DeviceCapabilities.d.ts +187 -0
  19. package/WAProto/DeviceCapabilities/DeviceCapabilities.js +520 -0
  20. package/WAProto/DeviceCapabilities/DeviceCapabilities.proto +14 -0
  21. package/WAProto/E2E/E2E.d.ts +28417 -0
  22. package/WAProto/E2E/E2E.js +98438 -0
  23. package/WAProto/E2E/E2E.proto +2289 -0
  24. package/WAProto/Ephemeral/Ephemeral.d.ts +95 -0
  25. package/WAProto/Ephemeral/Ephemeral.js +269 -0
  26. package/WAProto/Ephemeral/Ephemeral.proto +6 -0
  27. package/WAProto/HistorySync/HistorySync.d.ts +40728 -0
  28. package/WAProto/HistorySync/HistorySync.js +142980 -0
  29. package/WAProto/HistorySync/HistorySync.proto +207 -0
  30. package/WAProto/LidMigrationSyncPayload/LidMigrationSyncPayload.d.ts +189 -0
  31. package/WAProto/LidMigrationSyncPayload/LidMigrationSyncPayload.js +585 -0
  32. package/WAProto/LidMigrationSyncPayload/LidMigrationSyncPayload.proto +11 -0
  33. package/WAProto/MdStorageChatRowOpaqueData/MdStorageChatRowOpaqueData.d.ts +461 -0
  34. package/WAProto/MdStorageChatRowOpaqueData/MdStorageChatRowOpaqueData.js +1559 -0
  35. package/WAProto/MdStorageChatRowOpaqueData/MdStorageChatRowOpaqueData.proto +37 -0
  36. package/WAProto/MdStorageMsgRowOpaqueData/MdStorageMsgRowOpaqueData.d.ts +29294 -0
  37. package/WAProto/MdStorageMsgRowOpaqueData/MdStorageMsgRowOpaqueData.js +101732 -0
  38. package/WAProto/MdStorageMsgRowOpaqueData/MdStorageMsgRowOpaqueData.proto +76 -0
  39. package/WAProto/MmsRetry/MmsRetry.d.ts +200 -0
  40. package/WAProto/MmsRetry/MmsRetry.js +586 -0
  41. package/WAProto/MmsRetry/MmsRetry.proto +17 -0
  42. package/WAProto/Protocol/Protocol.d.ts +218 -0
  43. package/WAProto/Protocol/Protocol.js +701 -0
  44. package/WAProto/Protocol/Protocol.proto +20 -0
  45. package/WAProto/Reporting/Reporting.d.ts +301 -0
  46. package/WAProto/Reporting/Reporting.js +989 -0
  47. package/WAProto/Reporting/Reporting.proto +19 -0
  48. package/WAProto/ServerSync/ServerSync.d.ts +1050 -0
  49. package/WAProto/ServerSync/ServerSync.js +3176 -0
  50. package/WAProto/ServerSync/ServerSync.proto +59 -0
  51. package/WAProto/SignalLocalStorageProtocol/SignalLocalStorageProtocol.d.ts +1507 -0
  52. package/WAProto/SignalLocalStorageProtocol/SignalLocalStorageProtocol.js +4756 -0
  53. package/WAProto/SignalLocalStorageProtocol/SignalLocalStorageProtocol.proto +88 -0
  54. package/WAProto/SignalWhisperTextProtocol/SignalWhisperTextProtocol.d.ts +617 -0
  55. package/WAProto/SignalWhisperTextProtocol/SignalWhisperTextProtocol.js +1940 -0
  56. package/WAProto/SignalWhisperTextProtocol/SignalWhisperTextProtocol.proto +38 -0
  57. package/WAProto/StatusAttributions/StatusAttributions.d.ts +636 -0
  58. package/WAProto/StatusAttributions/StatusAttributions.js +2037 -0
  59. package/WAProto/StatusAttributions/StatusAttributions.proto +61 -0
  60. package/WAProto/SyncAction/SyncAction.d.ts +7227 -0
  61. package/WAProto/SyncAction/SyncAction.js +22271 -0
  62. package/WAProto/SyncAction/SyncAction.proto +423 -0
  63. package/WAProto/UserPassword/UserPassword.d.ts +298 -0
  64. package/WAProto/UserPassword/UserPassword.js +898 -0
  65. package/WAProto/UserPassword/UserPassword.proto +27 -0
  66. package/WAProto/VnameCert/VnameCert.d.ts +658 -0
  67. package/WAProto/VnameCert/VnameCert.js +2225 -0
  68. package/WAProto/VnameCert/VnameCert.proto +60 -0
  69. package/WAProto/Wa6/Wa6.d.ts +1613 -0
  70. package/WAProto/Wa6/Wa6.js +6299 -0
  71. package/WAProto/Wa6/Wa6.proto +229 -0
  72. package/WAProto/Web/Web.d.ts +31718 -0
  73. package/WAProto/Web/Web.js +113402 -0
  74. package/WAProto/Web/Web.proto +545 -0
  75. package/WAProto/index.d.ts +49 -0
  76. package/WAProto/index.js +28 -0
  77. package/WASignalGroup/GroupProtocol.js +1771 -0
  78. package/WASignalGroup/ciphertext_message.js +10 -0
  79. package/WASignalGroup/group_cipher.js +103 -0
  80. package/WASignalGroup/group_session_builder.js +39 -0
  81. package/WASignalGroup/index.js +5 -0
  82. package/WASignalGroup/keyhelper.js +17 -0
  83. package/WASignalGroup/protobufs.js +2 -0
  84. package/WASignalGroup/queue_job.js +64 -0
  85. package/WASignalGroup/sender_chain_key.js +38 -0
  86. package/WASignalGroup/sender_key_distribution_message.js +68 -0
  87. package/WASignalGroup/sender_key_message.js +79 -0
  88. package/WASignalGroup/sender_key_name.js +59 -0
  89. package/WASignalGroup/sender_key_record.js +47 -0
  90. package/WASignalGroup/sender_key_state.js +110 -0
  91. package/WASignalGroup/sender_message_key.js +30 -0
  92. package/check-node-version.js +10 -0
  93. package/lib/Defaults/baileys-version.json +3 -0
  94. package/lib/Defaults/index.d.ts +51 -0
  95. package/lib/Defaults/index.js +108 -0
  96. package/lib/Defaults/phonenumber-mcc.json +223 -0
  97. package/lib/Signal/Group/ciphertext-message.d.ts +9 -0
  98. package/lib/Signal/Group/ciphertext-message.js +19 -0
  99. package/lib/Signal/Group/group-session-builder.d.ts +17 -0
  100. package/lib/Signal/Group/group-session-builder.js +72 -0
  101. package/lib/Signal/Group/group_cipher.d.ts +19 -0
  102. package/lib/Signal/Group/group_cipher.js +99 -0
  103. package/lib/Signal/Group/index.d.ts +11 -0
  104. package/lib/Signal/Group/index.js +61 -0
  105. package/lib/Signal/Group/keyhelper.d.ts +16 -0
  106. package/lib/Signal/Group/keyhelper.js +66 -0
  107. package/lib/Signal/Group/queue-job.d.ts +1 -0
  108. package/lib/Signal/Group/queue-job.js +64 -0
  109. package/lib/Signal/Group/sender-chain-key.d.ts +14 -0
  110. package/lib/Signal/Group/sender-chain-key.js +39 -0
  111. package/lib/Signal/Group/sender-key-distribution-message.d.ts +17 -0
  112. package/lib/Signal/Group/sender-key-distribution-message.js +71 -0
  113. package/lib/Signal/Group/sender-key-message.d.ts +19 -0
  114. package/lib/Signal/Group/sender-key-message.js +73 -0
  115. package/lib/Signal/Group/sender-key-name.d.ts +19 -0
  116. package/lib/Signal/Group/sender-key-name.js +59 -0
  117. package/lib/Signal/Group/sender-key-record.d.ts +32 -0
  118. package/lib/Signal/Group/sender-key-record.js +53 -0
  119. package/lib/Signal/Group/sender-key-record.ts +77 -0
  120. package/lib/Signal/Group/sender-key-state.d.ts +44 -0
  121. package/lib/Signal/Group/sender-key-state.js +104 -0
  122. package/lib/Signal/Group/sender-message-key.d.ts +11 -0
  123. package/lib/Signal/Group/sender-message-key.js +33 -0
  124. package/lib/Signal/libsignal.d.ts +3 -0
  125. package/lib/Signal/libsignal.js +153 -0
  126. package/lib/Socket/Client/index.d.ts +2 -0
  127. package/lib/Socket/Client/index.js +18 -0
  128. package/lib/Socket/Client/types.d.ts +15 -0
  129. package/lib/Socket/Client/types.js +14 -0
  130. package/lib/Socket/Client/websocket.d.ts +12 -0
  131. package/lib/Socket/Client/websocket.js +57 -0
  132. package/lib/Socket/business.d.ts +181 -0
  133. package/lib/Socket/business.js +259 -0
  134. package/lib/Socket/chats.d.ts +95 -0
  135. package/lib/Socket/chats.js +906 -0
  136. package/lib/Socket/community.d.ts +131 -0
  137. package/lib/Socket/community.js +369 -0
  138. package/lib/Socket/groups.d.ts +122 -0
  139. package/lib/Socket/groups.js +360 -0
  140. package/lib/Socket/index.d.ts +183 -0
  141. package/lib/Socket/index.js +10 -0
  142. package/lib/Socket/messages-recv.d.ts +170 -0
  143. package/lib/Socket/messages-recv.js +1074 -0
  144. package/lib/Socket/messages-send.d.ts +161 -0
  145. package/lib/Socket/messages-send.js +982 -0
  146. package/lib/Socket/newsletter.d.ts +140 -0
  147. package/lib/Socket/newsletter.js +242 -0
  148. package/lib/Socket/socket.d.ts +43 -0
  149. package/lib/Socket/socket.js +749 -0
  150. package/lib/Socket/usync.d.ts +36 -0
  151. package/lib/Socket/usync.js +71 -0
  152. package/lib/Store/index.d.ts +4 -0
  153. package/lib/Store/index.js +20 -0
  154. package/lib/Store/make-cache-manager-store.d.ts +13 -0
  155. package/lib/Store/make-cache-manager-store.js +77 -0
  156. package/lib/Store/make-in-memory-store.d.ts +117 -0
  157. package/lib/Store/make-in-memory-store.js +420 -0
  158. package/lib/Store/make-ordered-dictionary.d.ts +12 -0
  159. package/lib/Store/make-ordered-dictionary.js +83 -0
  160. package/lib/Store/object-repository.d.ts +10 -0
  161. package/lib/Store/object-repository.js +28 -0
  162. package/lib/Types/Auth.d.ts +103 -0
  163. package/lib/Types/Auth.js +2 -0
  164. package/lib/Types/Call.d.ts +13 -0
  165. package/lib/Types/Call.js +2 -0
  166. package/lib/Types/Chat.d.ts +115 -0
  167. package/lib/Types/Chat.js +6 -0
  168. package/lib/Types/Contact.d.ts +35 -0
  169. package/lib/Types/Contact.js +2 -0
  170. package/lib/Types/Events.d.ts +208 -0
  171. package/lib/Types/Events.js +2 -0
  172. package/lib/Types/GroupMetadata.d.ts +81 -0
  173. package/lib/Types/GroupMetadata.js +2 -0
  174. package/lib/Types/Label.d.ts +46 -0
  175. package/lib/Types/Label.js +28 -0
  176. package/lib/Types/LabelAssociation.d.ts +29 -0
  177. package/lib/Types/LabelAssociation.js +10 -0
  178. package/lib/Types/Message.d.ts +480 -0
  179. package/lib/Types/Message.js +9 -0
  180. package/lib/Types/MexUpdates.d.ts +9 -0
  181. package/lib/Types/MexUpdates.js +18 -0
  182. package/lib/Types/Newsletter.d.ts +92 -0
  183. package/lib/Types/Newsletter.js +33 -0
  184. package/lib/Types/Product.d.ts +78 -0
  185. package/lib/Types/Product.js +2 -0
  186. package/lib/Types/Signal.d.ts +57 -0
  187. package/lib/Types/Signal.js +2 -0
  188. package/lib/Types/Socket.d.ts +116 -0
  189. package/lib/Types/Socket.js +2 -0
  190. package/lib/Types/State.d.ts +27 -0
  191. package/lib/Types/State.js +2 -0
  192. package/lib/Types/USync.d.ts +25 -0
  193. package/lib/Types/USync.js +2 -0
  194. package/lib/Types/index.d.ts +70 -0
  195. package/lib/Types/index.js +42 -0
  196. package/lib/Utils/auth-utils.d.ts +18 -0
  197. package/lib/Utils/auth-utils.js +198 -0
  198. package/lib/Utils/baileys-event-stream.d.ts +16 -0
  199. package/lib/Utils/baileys-event-stream.js +64 -0
  200. package/lib/Utils/business.d.ts +22 -0
  201. package/lib/Utils/business.js +243 -0
  202. package/lib/Utils/chat-utils.d.ts +72 -0
  203. package/lib/Utils/chat-utils.js +762 -0
  204. package/lib/Utils/crypto.d.ts +40 -0
  205. package/lib/Utils/crypto.js +150 -0
  206. package/lib/Utils/decode-wa-message.d.ts +252 -0
  207. package/lib/Utils/decode-wa-message.js +232 -0
  208. package/lib/Utils/event-buffer.d.ts +35 -0
  209. package/lib/Utils/event-buffer.js +539 -0
  210. package/lib/Utils/generics.d.ts +96 -0
  211. package/lib/Utils/generics.js +553 -0
  212. package/lib/Utils/history.d.ts +29 -0
  213. package/lib/Utils/history.js +109 -0
  214. package/lib/Utils/index.d.ts +19 -0
  215. package/lib/Utils/index.js +35 -0
  216. package/lib/Utils/link-preview.d.ts +21 -0
  217. package/lib/Utils/link-preview.js +112 -0
  218. package/lib/Utils/logger.d.ts +11 -0
  219. package/lib/Utils/logger.js +7 -0
  220. package/lib/Utils/lt-hash.d.ts +12 -0
  221. package/lib/Utils/lt-hash.js +53 -0
  222. package/lib/Utils/make-mutex.d.ts +7 -0
  223. package/lib/Utils/make-mutex.js +45 -0
  224. package/lib/Utils/messages-media.d.ts +104 -0
  225. package/lib/Utils/messages-media.js +751 -0
  226. package/lib/Utils/messages.d.ts +80 -0
  227. package/lib/Utils/messages.js +1741 -0
  228. package/lib/Utils/noise-handler.d.ts +19 -0
  229. package/lib/Utils/noise-handler.js +150 -0
  230. package/lib/Utils/process-message.d.ts +41 -0
  231. package/lib/Utils/process-message.js +391 -0
  232. package/lib/Utils/signal.d.ts +33 -0
  233. package/lib/Utils/signal.js +154 -0
  234. package/lib/Utils/use-mongo-file-auth-state.d.ts +5 -0
  235. package/lib/Utils/use-mongo-file-auth-state.js +75 -0
  236. package/lib/Utils/use-multi-file-auth-state.d.ts +12 -0
  237. package/lib/Utils/use-multi-file-auth-state.js +123 -0
  238. package/lib/Utils/use-single-file-auth-state.d.ts +12 -0
  239. package/lib/Utils/use-single-file-auth-state.js +75 -0
  240. package/lib/Utils/validate-connection.d.ts +10 -0
  241. package/lib/Utils/validate-connection.js +174 -0
  242. package/lib/WABinary/constants.d.ts +27 -0
  243. package/lib/WABinary/constants.js +45 -0
  244. package/lib/WABinary/decode.d.ts +6 -0
  245. package/lib/WABinary/decode.js +255 -0
  246. package/lib/WABinary/encode.d.ts +2 -0
  247. package/lib/WABinary/encode.js +243 -0
  248. package/lib/WABinary/generic-utils.d.ts +16 -0
  249. package/lib/WABinary/generic-utils.js +125 -0
  250. package/lib/WABinary/index.d.ts +5 -0
  251. package/lib/WABinary/index.js +21 -0
  252. package/lib/WABinary/jid-utils.d.ts +34 -0
  253. package/lib/WABinary/jid-utils.js +73 -0
  254. package/lib/WABinary/types.d.ts +18 -0
  255. package/lib/WABinary/types.js +2 -0
  256. package/lib/WAM/BinaryInfo.d.ts +16 -0
  257. package/lib/WAM/BinaryInfo.js +14 -0
  258. package/lib/WAM/constants.d.ts +39 -0
  259. package/lib/WAM/constants.js +15362 -0
  260. package/lib/WAM/encode.d.ts +2 -0
  261. package/lib/WAM/encode.js +156 -0
  262. package/lib/WAM/index.d.ts +3 -0
  263. package/lib/WAM/index.js +19 -0
  264. package/lib/WAUSync/Protocols/USyncBotProfileProtocol.d.ts +25 -0
  265. package/lib/WAUSync/Protocols/USyncBotProfileProtocol.js +60 -0
  266. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +9 -0
  267. package/lib/WAUSync/Protocols/USyncContactProtocol.js +32 -0
  268. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +22 -0
  269. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +58 -0
  270. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +12 -0
  271. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +31 -0
  272. package/lib/WAUSync/Protocols/USyncLIDProtocol.d.ts +8 -0
  273. package/lib/WAUSync/Protocols/USyncLIDProtocol.js +26 -0
  274. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +12 -0
  275. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +42 -0
  276. package/lib/WAUSync/Protocols/index.d.ts +6 -0
  277. package/lib/WAUSync/Protocols/index.js +22 -0
  278. package/lib/WAUSync/USyncQuery.d.ts +28 -0
  279. package/lib/WAUSync/USyncQuery.js +88 -0
  280. package/lib/WAUSync/USyncUser.d.ts +12 -0
  281. package/lib/WAUSync/USyncUser.js +27 -0
  282. package/lib/WAUSync/index.d.ts +3 -0
  283. package/lib/WAUSync/index.js +19 -0
  284. package/lib/index.d.ts +13 -0
  285. package/lib/index.js +45 -0
  286. package/package.json +63 -0
@@ -0,0 +1,45 @@
1
+ "use strict"
2
+ Object.defineProperty(exports, "__esModule", { value: true })
3
+ const TAGS = {
4
+ LIST_EMPTY: 0,
5
+ DICTIONARY_0: 236,
6
+ DICTIONARY_1: 237,
7
+ DICTIONARY_2: 238,
8
+ DICTIONARY_3: 239,
9
+ AD_JID: 247,
10
+ LIST_8: 248,
11
+ LIST_16: 249,
12
+ JID_PAIR: 250,
13
+ HEX_8: 251,
14
+ BINARY_8: 252,
15
+ BINARY_20: 253,
16
+ BINARY_32: 254,
17
+ NIBBLE_8: 255,
18
+ PACKED_MAX: 127,
19
+ SINGLE_BYTE_MAX: 256,
20
+ STREAM_END: 2
21
+ }
22
+ const DOUBLE_BYTE_TOKENS = [
23
+ ['media-for1-1.cdn.whatsapp.net', 'relay', 'media-gru2-2.cdn.whatsapp.net', 'uncompressed', 'medium', 'voip_settings', 'device', 'reason', 'media-lim1-1.cdn.whatsapp.net', 'media-qro1-2.cdn.whatsapp.net', 'media-gru1-2.cdn.whatsapp.net', 'action', 'features', 'media-gru2-1.cdn.whatsapp.net', 'media-gru1-1.cdn.whatsapp.net', 'media-otp1-1.cdn.whatsapp.net', 'kyc-id', 'priority', 'phash', 'mute', 'token', '100', 'media-qro1-1.cdn.whatsapp.net', 'none', 'media-mrs2-2.cdn.whatsapp.net', 'sign_credential', '03', 'media-mrs2-1.cdn.whatsapp.net', 'protocol', 'timezone', 'transport', 'eph_setting', '1080', 'original_dimensions', 'media-frx5-1.cdn.whatsapp.net', 'background', 'disable', 'original_image_url', '5', 'transaction-id', 'direct_path', '103', 'appointment_only', 'request_image_url', 'peer_pid', 'address', '105', '104', '102', 'media-cdt1-1.cdn.whatsapp.net', '101', '109', '110', '106', 'background_location', 'v_id', 'sync', 'status-old', '111', '107', 'ppic', 'media-scl2-1.cdn.whatsapp.net', 'business_profile', '108', 'invite', '04', 'audio_duration', 'media-mct1-1.cdn.whatsapp.net', 'media-cdg2-1.cdn.whatsapp.net', 'media-los2-1.cdn.whatsapp.net', 'invis', 'net', 'voip_payload_type', 'status-revoke-delay', '404', 'state', 'use_correct_order_for_hmac_sha1', 'ver', 'media-mad1-1.cdn.whatsapp.net', 'order', '540', 'skey', 'blinded_credential', 'android', 'contact_remove', 'enable_downlink_relay_latency_only', 'duration', 'enable_vid_one_way_codec_nego', '6', 'media-sof1-1.cdn.whatsapp.net', 'accept', 'all', 'signed_credential', 'media-atl3-1.cdn.whatsapp.net', 'media-lhr8-1.cdn.whatsapp.net', 'website', '05', 'latitude', 'media-dfw5-1.cdn.whatsapp.net', 'forbidden', 'enable_audio_piggyback_network_mtu_fix', 'media-dfw5-2.cdn.whatsapp.net', 'note.m4r', 'media-atl3-2.cdn.whatsapp.net', 'jb_nack_discard_count_fix', 'longitude', 'Opening.m4r', 'media-arn2-1.cdn.whatsapp.net', 'email', 'timestamp', 'admin', 'media-pmo1-1.cdn.whatsapp.net', 'America/Sao_Paulo', 'contact_add', 'media-sin6-1.cdn.whatsapp.net', 'interactive', '8000', 'acs_public_key', 'sigquit_anr_detector_release_rollover_percent', 'media.fmed1-2.fna.whatsapp.net', 'groupadd', 'enabled_for_video_upgrade', 'latency_update_threshold', 'media-frt3-2.cdn.whatsapp.net', 'calls_row_constraint_layout', 'media.fgbb2-1.fna.whatsapp.net', 'mms4_media_retry_notification_encryption_enabled', 'timeout', 'media-sin6-3.cdn.whatsapp.net', 'audio_nack_jitter_multiplier', 'jb_discard_count_adjust_pct_rc', 'audio_reserve_bps', 'delta', 'account_sync', 'default', 'media.fjed4-6.fna.whatsapp.net', '06', 'lock_video_orientation', 'media-frt3-1.cdn.whatsapp.net', 'w:g2', 'media-sin6-2.cdn.whatsapp.net', 'audio_nack_algo_mask', 'media.fgbb2-2.fna.whatsapp.net', 'media.fmed1-1.fna.whatsapp.net', 'cond_range_target_bitrate', 'mms4_server_error_receipt_encryption_enabled', 'vid_rc_dyn', 'fri', 'cart_v1_1_order_message_changes_enabled', 'reg_push', 'jb_hist_deposit_value', 'privatestats', 'media.fist7-2.fna.whatsapp.net', 'thu', 'jb_discard_count_adjust_pct', 'mon', 'group_call_video_maximization_enabled', 'mms_cat_v1_forward_hot_override_enabled', 'audio_nack_new_rtt', 'media.fsub2-3.fna.whatsapp.net', 'media_upload_aggressive_retry_exponential_backoff_enabled', 'tue', 'wed', 'media.fruh4-2.fna.whatsapp.net', 'audio_nack_max_seq_req', 'max_rtp_audio_packet_resends', 'jb_hist_max_cdf_value', '07', 'audio_nack_max_jb_delay', 'mms_forward_partially_downloaded_video', 'media-lcy1-1.cdn.whatsapp.net', 'resume', 'jb_inband_fec_aware', 'new_commerce_entry_point_enabled', '480', 'payments_upi_generate_qr_amount_limit', 'sigquit_anr_detector_rollover_percent', 'media.fsdu2-1.fna.whatsapp.net', 'fbns', 'aud_pkt_reorder_pct', 'dec', 'stop_probing_before_accept_send', 'media_upload_max_aggressive_retries', 'edit_business_profile_new_mode_enabled', 'media.fhex4-1.fna.whatsapp.net', 'media.fjed4-3.fna.whatsapp.net', 'sigquit_anr_detector_64bit_rollover_percent', 'cond_range_ema_jb_last_delay', 'watls_enable_early_data_http_get', 'media.fsdu2-2.fna.whatsapp.net', 'message_qr_disambiguation_enabled', 'media-mxp1-1.cdn.whatsapp.net', 'sat', 'vertical', 'media.fruh4-5.fna.whatsapp.net', '200', 'media-sof1-2.cdn.whatsapp.net', '-1', 'height', 'product_catalog_hide_show_items_enabled', 'deep_copy_frm_last', 'tsoffline', 'vp8/h.264', 'media.fgye5-3.fna.whatsapp.net', 'media.ftuc1-2.fna.whatsapp.net', 'smb_upsell_chat_banner_enabled', 'canonical', '08', '9', '.', 'media.fgyd4-4.fna.whatsapp.net', 'media.fsti4-1.fna.whatsapp.net', 'mms_vcache_aggregation_enabled', 'mms_hot_content_timespan_in_seconds', 'nse_ver', 'rte', 'third_party_sticker_web_sync', 'cond_range_target_total_bitrate', 'media_upload_aggressive_retry_enabled', 'instrument_spam_report_enabled', 'disable_reconnect_tone', 'move_media_folder_from_sister_app', 'one_tap_calling_in_group_chat_size', '10', 'storage_mgmt_banner_threshold_mb', 'enable_backup_passive_mode', 'sharechat_inline_player_enabled', 'media.fcnq2-1.fna.whatsapp.net', 'media.fhex4-2.fna.whatsapp.net', 'media.fist6-3.fna.whatsapp.net', 'ephemeral_drop_column_stage', 'reconnecting_after_network_change_threshold_ms', 'media-lhr8-2.cdn.whatsapp.net', 'cond_jb_last_delay_ema_alpha', 'entry_point_block_logging_enabled', 'critical_event_upload_log_config', 'respect_initial_bitrate_estimate', 'smaller_image_thumbs_status_enabled', 'media.fbtz1-4.fna.whatsapp.net', 'media.fjed4-1.fna.whatsapp.net', 'width', '720', 'enable_frame_dropper', 'enable_one_side_mode', 'urn:xmpp:whatsapp:dirty', 'new_sticker_animation_behavior_v2', 'media.flim3-2.fna.whatsapp.net', 'media.fuio6-2.fna.whatsapp.net', 'skip_forced_signaling', 'dleq_proof', 'status_video_max_bitrate', 'lazy_send_probing_req', 'enhanced_storage_management', 'android_privatestats_endpoint_dit_enabled', 'media.fscl13-2.fna.whatsapp.net', 'video_duration'],
24
+ ['group_call_discoverability_enabled', 'media.faep9-2.fna.whatsapp.net', 'msgr', 'bloks_loggedin_access_app_id', 'db_status_migration_step', 'watls_prefer_ip6', 'jabber:iq:privacy', '68', 'media.fsaw1-11.fna.whatsapp.net', 'mms4_media_conn_persist_enabled', 'animated_stickers_thread_clean_up', 'media.fcgk3-2.fna.whatsapp.net', 'media.fcgk4-6.fna.whatsapp.net', 'media.fgye5-2.fna.whatsapp.net', 'media.flpb1-1.fna.whatsapp.net', 'media.fsub2-1.fna.whatsapp.net', 'media.fuio6-3.fna.whatsapp.net', 'not-allowed', 'partial_pjpeg_bw_threshold', 'cap_estimated_bitrate', 'mms_chatd_resume_check_over_thrift', 'smb_upsell_business_profile_enabled', 'product_catalog_webclient', 'groups', 'sigquit_anr_detector_release_updated_rollout', 'syncd_key_rotation_enabled', 'media.fdmm2-1.fna.whatsapp.net', 'media-hou1-1.cdn.whatsapp.net', 'remove_old_chat_notifications', 'smb_biztools_deeplink_enabled', 'use_downloadable_filters_int', 'group_qr_codes_enabled', 'max_receipt_processing_time', 'optimistic_image_processing_enabled', 'smaller_video_thumbs_status_enabled', 'watls_early_data', 'reconnecting_before_relay_failover_threshold_ms', 'cond_range_packet_loss_pct', 'groups_privacy_blacklist', 'status-revoke-drop', 'stickers_animated_thumbnail_download', 'dedupe_transcode_shared_images', 'dedupe_transcode_shared_videos', 'media.fcnq2-2.fna.whatsapp.net', 'media.fgyd4-1.fna.whatsapp.net', 'media.fist7-1.fna.whatsapp.net', 'media.flim3-3.fna.whatsapp.net', 'add_contact_by_qr_enabled', 'https://faq.whatsapp.com/payments', 'multicast_limit_global', 'sticker_notification_preview', 'smb_better_catalog_list_adapters_enabled', 'bloks_use_minscript_android', 'pen_smoothing_enabled', 'media.fcgk4-5.fna.whatsapp.net', 'media.fevn1-3.fna.whatsapp.net', 'media.fpoj7-1.fna.whatsapp.net', 'media-arn2-2.cdn.whatsapp.net', 'reconnecting_before_network_change_threshold_ms', 'android_media_use_fresco_for_gifs', 'cond_in_congestion', 'status_image_max_edge', 'sticker_search_enabled', 'starred_stickers_web_sync', 'db_blank_me_jid_migration_step', 'media.fist6-2.fna.whatsapp.net', 'media.ftuc1-1.fna.whatsapp.net', '09', 'anr_fast_logs_upload_rollout', 'camera_core_integration_enabled', '11', 'third_party_sticker_caching', 'thread_dump_contact_support', 'wam_privatestats_enabled', 'vcard_as_document_size_kb', 'maxfpp', 'fbip', 'ephemeral_allow_group_members', 'media-bom1-2.cdn.whatsapp.net', 'media-xsp1-1.cdn.whatsapp.net', 'disable_prewarm', 'frequently_forwarded_max', 'media.fbtz1-5.fna.whatsapp.net', 'media.fevn7-1.fna.whatsapp.net', 'media.fgyd4-2.fna.whatsapp.net', 'sticker_tray_animation_fully_visible_items', 'green_alert_banner_duration', 'reconnecting_after_p2p_failover_threshold_ms', 'connected', 'share_biz_vcard_enabled', 'stickers_animation', '0a', '1200', 'WhatsApp', 'group_description_length', 'p_v_id', 'payments_upi_intent_transaction_limit', 'frequently_forwarded_messages', 'media-xsp1-2.cdn.whatsapp.net', 'media.faep8-1.fna.whatsapp.net', 'media.faep8-2.fna.whatsapp.net', 'media.faep9-1.fna.whatsapp.net', 'media.fdmm2-2.fna.whatsapp.net', 'media.fgzt3-1.fna.whatsapp.net', 'media.flim4-2.fna.whatsapp.net', 'media.frao1-1.fna.whatsapp.net', 'media.fscl9-2.fna.whatsapp.net', 'media.fsub2-2.fna.whatsapp.net', 'superadmin', 'media.fbog10-1.fna.whatsapp.net', 'media.fcgh28-1.fna.whatsapp.net', 'media.fjdo10-1.fna.whatsapp.net', 'third_party_animated_sticker_import', 'delay_fec', 'attachment_picker_refresh', 'android_linked_devices_re_auth_enabled', 'rc_dyn', 'green_alert_block_jitter', 'add_contact_logging_enabled', 'biz_message_logging_enabled', 'conversation_media_preview_v2', 'media-jnb1-1.cdn.whatsapp.net', 'ab_key', 'media.fcgk4-2.fna.whatsapp.net', 'media.fevn1-1.fna.whatsapp.net', 'media.fist6-1.fna.whatsapp.net', 'media.fruh4-4.fna.whatsapp.net', 'media.fsti4-2.fna.whatsapp.net', 'mms_vcard_autodownload_size_kb', 'watls_enabled', 'notif_ch_override_off', 'media.fsaw1-14.fna.whatsapp.net', 'media.fscl13-1.fna.whatsapp.net', 'db_group_participant_migration_step', '1020', 'cond_range_sterm_rtt', 'invites_logging_enabled', 'triggered_block_enabled', 'group_call_max_participants', 'media-iad3-1.cdn.whatsapp.net', 'product_catalog_open_deeplink', 'shops_required_tos_version', 'image_max_kbytes', 'cond_low_quality_vid_mode', 'db_receipt_migration_step', 'jb_early_prob_hist_shrink', 'media.fdmm2-3.fna.whatsapp.net', 'media.fdmm2-4.fna.whatsapp.net', 'media.fruh4-1.fna.whatsapp.net', 'media.fsaw2-2.fna.whatsapp.net', 'remove_geolocation_videos', 'new_animation_behavior', 'fieldstats_beacon_chance', '403', 'authkey_reset_on_ban', 'continuous_ptt_playback', 'reconnecting_after_relay_failover_threshold_ms', 'false', 'group', 'sun', 'conversation_swipe_to_reply', 'ephemeral_messages_setting', 'smaller_video_thumbs_enabled', 'md_device_sync_enabled', 'bloks_shops_pdp_url_regex', 'lasso_integration_enabled', 'media-bom1-1.cdn.whatsapp.net', 'new_backup_format_enabled', '256', 'media.faep6-1.fna.whatsapp.net', 'media.fasr1-1.fna.whatsapp.net', 'media.fbtz1-7.fna.whatsapp.net', 'media.fesb4-1.fna.whatsapp.net', 'media.fjdo1-2.fna.whatsapp.net', 'media.frba2-1.fna.whatsapp.net', 'watls_no_dns', '600', 'db_broadcast_me_jid_migration_step', 'new_wam_runtime_enabled', 'group_update', 'enhanced_block_enabled', 'sync_wifi_threshold_kb', 'mms_download_nc_cat', 'bloks_minification_enabled', 'ephemeral_messages_enabled', 'reject', 'voip_outgoing_xml_signaling', 'creator', 'dl_bw', 'payments_request_messages', 'target_bitrate', 'bloks_rendercore_enabled', 'media-hbe1-1.cdn.whatsapp.net', 'media-hel3-1.cdn.whatsapp.net', 'media-kut2-2.cdn.whatsapp.net', 'media-lax3-1.cdn.whatsapp.net', 'media-lax3-2.cdn.whatsapp.net', 'sticker_pack_deeplink_enabled', 'hq_image_bw_threshold', 'status_info', 'voip', 'dedupe_transcode_videos', 'grp_uii_cleanup', 'linked_device_max_count', 'media.flim1-1.fna.whatsapp.net', 'media.fsaw2-1.fna.whatsapp.net', 'reconnecting_after_call_active_threshold_ms', '1140', 'catalog_pdp_new_design', 'media.fbtz1-10.fna.whatsapp.net', 'media.fsaw1-15.fna.whatsapp.net', '0b', 'consumer_rc_provider', 'mms_async_fast_forward_ttl', 'jb_eff_size_fix', 'voip_incoming_xml_signaling', 'media_provider_share_by_uuid', 'suspicious_links', 'dedupe_transcode_images', 'green_alert_modal_start', 'media-cgk1-1.cdn.whatsapp.net', 'media-lga3-1.cdn.whatsapp.net', 'template_doc_mime_types', 'important_messages', 'user_add', 'vcard_max_size_kb', 'media.fada2-1.fna.whatsapp.net', 'media.fbog2-5.fna.whatsapp.net', 'media.fbtz1-3.fna.whatsapp.net', 'media.fcgk3-1.fna.whatsapp.net', 'media.fcgk7-1.fna.whatsapp.net', 'media.flim1-3.fna.whatsapp.net', 'media.fscl9-1.fna.whatsapp.net', 'ctwa_context_enterprise_enabled', 'media.fsaw1-13.fna.whatsapp.net', 'media.fuio11-2.fna.whatsapp.net', 'status_collapse_muted', 'db_migration_level_force', 'recent_stickers_web_sync', 'bloks_session_state', 'bloks_shops_enabled', 'green_alert_setting_deep_links_enabled', 'restrict_groups', 'battery', 'green_alert_block_start', 'refresh', 'ctwa_context_enabled', 'md_messaging_enabled', 'status_image_quality', 'md_blocklist_v2_server', 'media-del1-1.cdn.whatsapp.net', '13', 'userrate', 'a_v_id', 'cond_rtt_ema_alpha', 'invalid'],
25
+ ['media.fada1-1.fna.whatsapp.net', 'media.fadb3-2.fna.whatsapp.net', 'media.fbhz2-1.fna.whatsapp.net', 'media.fcor2-1.fna.whatsapp.net', 'media.fjed4-2.fna.whatsapp.net', 'media.flhe4-1.fna.whatsapp.net', 'media.frak1-2.fna.whatsapp.net', 'media.fsub6-3.fna.whatsapp.net', 'media.fsub6-7.fna.whatsapp.net', 'media.fvvi1-1.fna.whatsapp.net', 'search_v5_eligible', 'wam_real_time_enabled', 'report_disk_event', 'max_tx_rott_based_bitrate', 'product', 'media.fjdo10-2.fna.whatsapp.net', 'video_frame_crc_sample_interval', 'media_max_autodownload', '15', 'h.264', 'wam_privatestats_buffer_count', 'md_phash_v2_enabled', 'account_transfer_enabled', 'business_product_catalog', 'enable_non_dyn_codec_param_fix', 'is_user_under_epd_jurisdiction', 'media.fbog2-4.fna.whatsapp.net', 'media.fbtz1-2.fna.whatsapp.net', 'media.fcfc1-1.fna.whatsapp.net', 'media.fjed4-5.fna.whatsapp.net', 'media.flhe4-2.fna.whatsapp.net', 'media.flim1-2.fna.whatsapp.net', 'media.flos5-1.fna.whatsapp.net', 'android_key_store_auth_ver', '010', 'anr_process_monitor', 'delete_old_auth_key', 'media.fcor10-3.fna.whatsapp.net', 'storage_usage_enabled', 'android_camera2_support_level', 'dirty', 'consumer_content_provider', 'status_video_max_duration', '0c', 'bloks_cache_enabled', 'media.fadb2-2.fna.whatsapp.net', 'media.fbko1-1.fna.whatsapp.net', 'media.fbtz1-9.fna.whatsapp.net', 'media.fcgk4-4.fna.whatsapp.net', 'media.fesb4-2.fna.whatsapp.net', 'media.fevn1-2.fna.whatsapp.net', 'media.fist2-4.fna.whatsapp.net', 'media.fjdo1-1.fna.whatsapp.net', 'media.fruh4-6.fna.whatsapp.net', 'media.fsrg5-1.fna.whatsapp.net', 'media.fsub6-6.fna.whatsapp.net', 'minfpp', '5000', 'locales', 'video_max_bitrate', 'use_new_auth_key', 'bloks_http_enabled', 'heartbeat_interval', 'media.fbog11-1.fna.whatsapp.net', 'ephemeral_group_query_ts', 'fec_nack', 'search_in_storage_usage', 'c', 'media-amt2-1.cdn.whatsapp.net', 'linked_devices_ui_enabled', '14', 'async_data_load_on_startup', 'voip_incoming_xml_ack', '16', 'db_migration_step', 'init_bwe', 'max_participants', 'wam_buffer_count', 'media.fada2-2.fna.whatsapp.net', 'media.fadb3-1.fna.whatsapp.net', 'media.fcor2-2.fna.whatsapp.net', 'media.fdiy1-2.fna.whatsapp.net', 'media.frba3-2.fna.whatsapp.net', 'media.fsaw2-3.fna.whatsapp.net', '1280', 'status_grid_enabled', 'w:biz', 'product_catalog_deeplink', 'media.fgye10-2.fna.whatsapp.net', 'media.fuio11-1.fna.whatsapp.net', 'optimistic_upload', 'work_manager_init', 'lc', 'catalog_message', 'cond_net_medium', 'enable_periodical_aud_rr_processing', 'cond_range_ema_rtt', 'media-tir2-1.cdn.whatsapp.net', 'frame_ms', 'group_invite_sending', 'payments_web_enabled', 'wallpapers_v2', '0d', 'browser', 'hq_image_max_edge', 'image_edit_zoom', 'linked_devices_re_auth_enabled', 'media.faly3-2.fna.whatsapp.net', 'media.fdoh5-3.fna.whatsapp.net', 'media.fesb3-1.fna.whatsapp.net', 'media.fknu1-1.fna.whatsapp.net', 'media.fmex3-1.fna.whatsapp.net', 'media.fruh4-3.fna.whatsapp.net', '255', 'web_upgrade_to_md_modal', 'audio_piggyback_timeout_msec', 'enable_audio_oob_fec_feature', 'from_ip', 'image_max_edge', 'message_qr_enabled', 'powersave', 'receipt_pre_acking', 'video_max_edge', 'full', '011', '012', 'enable_audio_oob_fec_for_sender', 'md_voip_enabled', 'enable_privatestats', 'max_fec_ratio', 'payments_cs_faq_url', 'media-xsp1-3.cdn.whatsapp.net', 'hq_image_quality', 'media.fasr1-2.fna.whatsapp.net', 'media.fbog3-1.fna.whatsapp.net', 'media.ffjr1-6.fna.whatsapp.net', 'media.fist2-3.fna.whatsapp.net', 'media.flim4-3.fna.whatsapp.net', 'media.fpbc2-4.fna.whatsapp.net', 'media.fpku1-1.fna.whatsapp.net', 'media.frba1-1.fna.whatsapp.net', 'media.fudi1-1.fna.whatsapp.net', 'media.fvvi1-2.fna.whatsapp.net', 'gcm_fg_service', 'enable_dec_ltr_size_check', 'clear', 'lg', 'media.fgru11-1.fna.whatsapp.net', '18', 'media-lga3-2.cdn.whatsapp.net', 'pkey', '0e', 'max_subject', 'cond_range_lterm_rtt', 'announcement_groups', 'biz_profile_options', 's_t', 'media.fabv2-1.fna.whatsapp.net', 'media.fcai3-1.fna.whatsapp.net', 'media.fcgh1-1.fna.whatsapp.net', 'media.fctg1-4.fna.whatsapp.net', 'media.fdiy1-1.fna.whatsapp.net', 'media.fisb4-1.fna.whatsapp.net', 'media.fpku1-2.fna.whatsapp.net', 'media.fros9-1.fna.whatsapp.net', 'status_v3_text', 'usync_sidelist', '17', 'announcement', '...', 'md_group_notification', '0f', 'animated_pack_in_store', '013', 'America/Mexico_City', '1260', 'media-ams4-1.cdn.whatsapp.net', 'media-cgk1-2.cdn.whatsapp.net', 'media-cpt1-1.cdn.whatsapp.net', 'media-maa2-1.cdn.whatsapp.net', 'media.fgye10-1.fna.whatsapp.net', 'e', 'catalog_cart', 'hfm_string_changes', 'init_bitrate', 'packless_hsm', 'group_info', 'America/Belem', '50', '960', 'cond_range_bwe', 'decode', 'encode', 'media.fada1-8.fna.whatsapp.net', 'media.fadb1-2.fna.whatsapp.net', 'media.fasu6-1.fna.whatsapp.net', 'media.fbog4-1.fna.whatsapp.net', 'media.fcgk9-2.fna.whatsapp.net', 'media.fdoh5-2.fna.whatsapp.net', 'media.ffjr1-2.fna.whatsapp.net', 'media.fgua1-1.fna.whatsapp.net', 'media.fgye1-1.fna.whatsapp.net', 'media.fist1-4.fna.whatsapp.net', 'media.fpbc2-2.fna.whatsapp.net', 'media.fres2-1.fna.whatsapp.net', 'media.fsdq1-2.fna.whatsapp.net', 'media.fsub6-5.fna.whatsapp.net', 'profilo_enabled', 'template_hsm', 'use_disorder_prefetching_timer', 'video_codec_priority', 'vpx_max_qp', 'ptt_reduce_recording_delay', '25', 'iphone', 'Windows', 's_o', 'Africa/Lagos', 'abt', 'media-kut2-1.cdn.whatsapp.net', 'media-mba1-1.cdn.whatsapp.net', 'media-mxp1-2.cdn.whatsapp.net', 'md_blocklist_v2', 'url_text', 'enable_short_offset', 'group_join_permissions', 'enable_audio_piggyback_feature', 'image_quality', 'media.fcgk7-2.fna.whatsapp.net', 'media.fcgk8-2.fna.whatsapp.net', 'media.fclo7-1.fna.whatsapp.net', 'media.fcmn1-1.fna.whatsapp.net', 'media.feoh1-1.fna.whatsapp.net', 'media.fgyd4-3.fna.whatsapp.net', 'media.fjed4-4.fna.whatsapp.net', 'media.flim1-4.fna.whatsapp.net', 'media.flim2-4.fna.whatsapp.net', 'media.fplu6-1.fna.whatsapp.net', 'media.frak1-1.fna.whatsapp.net', 'media.fsdq1-1.fna.whatsapp.net', 'to_ip', '015', 'vp8', '19', '21', '1320', 'auth_key_ver', 'message_processing_dedup', 'server-error', 'wap4_enabled', '420', '014', 'cond_range_rtt', 'ptt_fast_lock_enabled', 'media-ort2-1.cdn.whatsapp.net', 'fwd_ui_start_ts'],
26
+ ['contact_blacklist', 'Asia/Jakarta', 'media.fepa10-1.fna.whatsapp.net', 'media.fmex10-3.fna.whatsapp.net', 'disorder_prefetching_start_when_empty', 'America/Bogota', 'use_local_probing_rx_bitrate', 'America/Argentina/Buenos_Aires', 'cross_post', 'media.fabb1-1.fna.whatsapp.net', 'media.fbog4-2.fna.whatsapp.net', 'media.fcgk9-1.fna.whatsapp.net', 'media.fcmn2-1.fna.whatsapp.net', 'media.fdel3-1.fna.whatsapp.net', 'media.ffjr1-1.fna.whatsapp.net', 'media.fgdl5-1.fna.whatsapp.net', 'media.flpb1-2.fna.whatsapp.net', 'media.fmex2-1.fna.whatsapp.net', 'media.frba2-2.fna.whatsapp.net', 'media.fros2-2.fna.whatsapp.net', 'media.fruh2-1.fna.whatsapp.net', 'media.fybz2-2.fna.whatsapp.net', 'options', '20', 'a', '017', '018', 'mute_always', 'user_notice', 'Asia/Kolkata', 'gif_provider', 'locked', 'media-gua1-1.cdn.whatsapp.net', 'piggyback_exclude_force_flush', '24', 'media.frec39-1.fna.whatsapp.net', 'user_remove', 'file_max_size', 'cond_packet_loss_pct_ema_alpha', 'media.facc1-1.fna.whatsapp.net', 'media.fadb2-1.fna.whatsapp.net', 'media.faly3-1.fna.whatsapp.net', 'media.fbdo6-2.fna.whatsapp.net', 'media.fcmn2-2.fna.whatsapp.net', 'media.fctg1-3.fna.whatsapp.net', 'media.ffez1-2.fna.whatsapp.net', 'media.fist1-3.fna.whatsapp.net', 'media.fist2-2.fna.whatsapp.net', 'media.flim2-2.fna.whatsapp.net', 'media.fmct2-3.fna.whatsapp.net', 'media.fpei3-1.fna.whatsapp.net', 'media.frba3-1.fna.whatsapp.net', 'media.fsdu8-2.fna.whatsapp.net', 'media.fstu2-1.fna.whatsapp.net', 'media_type', 'receipt_agg', '016', 'enable_pli_for_crc_mismatch', 'live', 'enc_rekey', 'frskmsg', 'd', 'media.fdel11-2.fna.whatsapp.net', 'proto', '2250', 'audio_piggyback_enable_cache', 'skip_nack_if_ltrp_sent', 'mark_dtx_jb_frames', 'web_service_delay', '7282', 'catalog_send_all', 'outgoing', '360', '30', 'LIMITED', '019', 'audio_picker', 'bpv2_phase', 'media.fada1-7.fna.whatsapp.net', 'media.faep7-1.fna.whatsapp.net', 'media.fbko1-2.fna.whatsapp.net', 'media.fbni1-2.fna.whatsapp.net', 'media.fbtz1-1.fna.whatsapp.net', 'media.fbtz1-8.fna.whatsapp.net', 'media.fcjs3-1.fna.whatsapp.net', 'media.fesb3-2.fna.whatsapp.net', 'media.fgdl5-4.fna.whatsapp.net', 'media.fist2-1.fna.whatsapp.net', 'media.flhe2-2.fna.whatsapp.net', 'media.flim2-1.fna.whatsapp.net', 'media.fmex1-1.fna.whatsapp.net', 'media.fpat3-2.fna.whatsapp.net', 'media.fpat3-3.fna.whatsapp.net', 'media.fros2-1.fna.whatsapp.net', 'media.fsdu8-1.fna.whatsapp.net', 'media.fsub3-2.fna.whatsapp.net', 'payments_chat_plugin', 'cond_congestion_no_rtcp_thr', 'green_alert', 'not-a-biz', '..', 'shops_pdp_urls_config', 'source', 'media-dus1-1.cdn.whatsapp.net', 'mute_video', '01b', 'currency', 'max_keys', 'resume_check', 'contact_array', 'qr_scanning', '23', 'b', 'media.fbfh15-1.fna.whatsapp.net', 'media.flim22-1.fna.whatsapp.net', 'media.fsdu11-1.fna.whatsapp.net', 'media.fsdu15-1.fna.whatsapp.net', 'Chrome', 'fts_version', '60', 'media.fada1-6.fna.whatsapp.net', 'media.faep4-2.fna.whatsapp.net', 'media.fbaq5-1.fna.whatsapp.net', 'media.fbni1-1.fna.whatsapp.net', 'media.fcai3-2.fna.whatsapp.net', 'media.fdel3-2.fna.whatsapp.net', 'media.fdmm3-2.fna.whatsapp.net', 'media.fhex3-1.fna.whatsapp.net', 'media.fisb4-2.fna.whatsapp.net', 'media.fkhi5-2.fna.whatsapp.net', 'media.flos2-1.fna.whatsapp.net', 'media.fmct2-1.fna.whatsapp.net', 'media.fntr7-1.fna.whatsapp.net', 'media.frak3-1.fna.whatsapp.net', 'media.fruh5-2.fna.whatsapp.net', 'media.fsub6-1.fna.whatsapp.net', 'media.fuab1-2.fna.whatsapp.net', 'media.fuio1-1.fna.whatsapp.net', 'media.fver1-1.fna.whatsapp.net', 'media.fymy1-1.fna.whatsapp.net', 'product_catalog', '1380', 'audio_oob_fec_max_pkts', '22', '254', 'media-ort2-2.cdn.whatsapp.net', 'media-sjc3-1.cdn.whatsapp.net', '1600', '01a', '01c', '405', 'key_frame_interval', 'body', 'media.fcgh20-1.fna.whatsapp.net', 'media.fesb10-2.fna.whatsapp.net', '125', '2000', 'media.fbsb1-1.fna.whatsapp.net', 'media.fcmn3-2.fna.whatsapp.net', 'media.fcpq1-1.fna.whatsapp.net', 'media.fdel1-2.fna.whatsapp.net', 'media.ffor2-1.fna.whatsapp.net', 'media.fgdl1-4.fna.whatsapp.net', 'media.fhex2-1.fna.whatsapp.net', 'media.fist1-2.fna.whatsapp.net', 'media.fjed5-2.fna.whatsapp.net', 'media.flim6-4.fna.whatsapp.net', 'media.flos2-2.fna.whatsapp.net', 'media.fntr6-2.fna.whatsapp.net', 'media.fpku3-2.fna.whatsapp.net', 'media.fros8-1.fna.whatsapp.net', 'media.fymy1-2.fna.whatsapp.net', 'ul_bw', 'ltrp_qp_offset', 'request', 'nack', 'dtx_delay_state_reset', 'timeoffline', '28', '01f', '32', 'enable_ltr_pool', 'wa_msys_crypto', '01d', '58', 'dtx_freeze_hg_update', 'nack_if_rpsi_throttled', '253', '840', 'media.famd15-1.fna.whatsapp.net', 'media.fbog17-2.fna.whatsapp.net', 'media.fcai19-2.fna.whatsapp.net', 'media.fcai21-4.fna.whatsapp.net', 'media.fesb10-4.fna.whatsapp.net', 'media.fesb10-5.fna.whatsapp.net', 'media.fmaa12-1.fna.whatsapp.net', 'media.fmex11-3.fna.whatsapp.net', 'media.fpoa33-1.fna.whatsapp.net', '1050', '021', 'clean', 'cond_range_ema_packet_loss_pct', 'media.fadb6-5.fna.whatsapp.net', 'media.faqp4-1.fna.whatsapp.net', 'media.fbaq3-1.fna.whatsapp.net', 'media.fbel2-1.fna.whatsapp.net', 'media.fblr4-2.fna.whatsapp.net', 'media.fclo8-1.fna.whatsapp.net', 'media.fcoo1-2.fna.whatsapp.net', 'media.ffjr1-4.fna.whatsapp.net', 'media.ffor9-1.fna.whatsapp.net', 'media.fisb3-1.fna.whatsapp.net', 'media.fkhi2-2.fna.whatsapp.net', 'media.fkhi4-1.fna.whatsapp.net', 'media.fpbc1-2.fna.whatsapp.net', 'media.fruh2-2.fna.whatsapp.net', 'media.fruh5-1.fna.whatsapp.net', 'media.fsub3-1.fna.whatsapp.net', 'payments_transaction_limit', '252', '27', '29', 'tintagel', '01e', '237', '780', 'callee_updated_payload', '020', '257', 'price', '025', '239', 'payments_cs_phone_number', 'mediaretry', 'w:auth:backup:token', 'Glass.caf', 'max_bitrate', '240', '251', '660', 'media.fbog16-1.fna.whatsapp.net', 'media.fcgh21-1.fna.whatsapp.net', 'media.fkul19-2.fna.whatsapp.net', 'media.flim21-2.fna.whatsapp.net', 'media.fmex10-4.fna.whatsapp.net', '64', '33', '34', '35', 'interruption', 'media.fabv3-1.fna.whatsapp.net', 'media.fadb6-1.fna.whatsapp.net', 'media.fagr1-1.fna.whatsapp.net', 'media.famd1-1.fna.whatsapp.net', 'media.famm6-1.fna.whatsapp.net', 'media.faqp2-3.fna.whatsapp.net'],
27
+ ]
28
+ const SINGLE_BYTE_TOKENS = [
29
+ '', 'xmlstreamstart', 'xmlstreamend', 's.whatsapp.net', 'type', 'participant', 'from', 'receipt', 'id', 'broadcast', 'status', 'message', 'notification', 'notify', 'to', 'jid', 'user', 'class', 'offline', 'g.us', 'result', 'mediatype', 'enc', 'skmsg', 'off_cnt', 'xmlns', 'presence', 'participants', 'ack', 't', 'iq', 'device_hash', 'read', 'value', 'media', 'picture', 'chatstate', 'unavailable', 'text', 'urn:xmpp:whatsapp:push', 'devices', 'verified_name', 'contact', 'composing', 'edge_routing', 'routing_info', 'item', 'image', 'verified_level', 'get', 'fallback_hostname', '2', 'media_conn', '1', 'v', 'handshake', 'fallback_class', 'count', 'config', 'offline_preview', 'download_buckets', 'w:profile:picture', 'set', 'creation', 'location', 'fallback_ip4', 'msg', 'urn:xmpp:ping', 'fallback_ip6', 'call-creator', 'relaylatency', 'success', 'subscribe', 'video', 'business_hours_config', 'platform', 'hostname', 'version', 'unknown', '0', 'ping', 'hash', 'edit', 'subject', 'max_buckets', 'download', 'delivery', 'props', 'sticker', 'name', 'last', 'contacts', 'business', 'primary', 'preview', 'w:p', 'pkmsg', 'call-id', 'retry', 'prop', 'call', 'auth_ttl', 'available', 'relay_id', 'last_id', 'day_of_week', 'w', 'host', 'seen', 'bits', 'list', 'atn', 'upload', 'is_new', 'w:stats', 'key', 'paused', 'specific_hours', 'multicast', 'stream:error', 'mmg.whatsapp.net', 'code', 'deny', 'played', 'profile', 'fna', 'device-list', 'close_time', 'latency', 'gcm', 'pop', 'audio', '26', 'w:web', 'open_time', 'error', 'auth', 'ip4', 'update', 'profile_options', 'config_value', 'category', 'catalog_not_created', '00', 'config_code', 'mode', 'catalog_status', 'ip6', 'blocklist', 'registration', '7', 'web', 'fail', 'w:m', 'cart_enabled', 'ttl', 'gif', '300', 'device_orientation', 'identity', 'query', '401', 'media-gig2-1.cdn.whatsapp.net', 'in', '3', 'te2', 'add', 'fallback', 'categories', 'ptt', 'encrypt', 'notice', 'thumbnail-document', 'item-not-found', '12', 'thumbnail-image', 'stage', 'thumbnail-link', 'usync', 'out', 'thumbnail-video', '8', '01', 'context', 'sidelist', 'thumbnail-gif', 'terminate', 'not-authorized', 'orientation', 'dhash', 'capability', 'side_list', 'md-app-state', 'description', 'serial', 'readreceipts', 'te', 'business_hours', 'md-msg-hist', 'tag', 'attribute_padding', 'document', 'open_24h', 'delete', 'expiration', 'active', 'prev_v_id', 'true', 'passive', 'index', '4', 'conflict', 'remove', 'w:gp2', 'config_expo_key', 'screen_height', 'replaced', '02', 'screen_width', 'uploadfieldstat', '2:47DEQpj8', 'media-bog1-1.cdn.whatsapp.net', 'encopt', 'url', 'catalog_exists', 'keygen', 'rate', 'offer', 'opus', 'media-mia3-1.cdn.whatsapp.net', 'privacy', 'media-mia3-2.cdn.whatsapp.net', 'signature', 'preaccept', 'token_id', 'media-eze1-1.cdn.whatsapp.net'
30
+ ]
31
+ const TOKEN_MAP = {}
32
+ for (const [i, SINGLE_BYTE_TOKEN] of SINGLE_BYTE_TOKENS.entries()) {
33
+ TOKEN_MAP[SINGLE_BYTE_TOKEN] = { index: i }
34
+ }
35
+ for (const [i, DOUBLE_BYTE_TOKEN] of DOUBLE_BYTE_TOKENS.entries()) {
36
+ for (const [j, element] of DOUBLE_BYTE_TOKEN.entries()) {
37
+ TOKEN_MAP[element] = { dict: i, index: j }
38
+ }
39
+ }
40
+ module.exports = {
41
+ TAGS,
42
+ DOUBLE_BYTE_TOKENS,
43
+ SINGLE_BYTE_TOKENS,
44
+ TOKEN_MAP
45
+ }
@@ -0,0 +1,6 @@
1
+ import type { BinaryNode, BinaryNodeCodingOptions } from './types'
2
+ export declare const decompressingIfRequired: (buffer: Buffer) => Promise<Buffer>
3
+ export declare const decodeDecompressedBinaryNode: (buffer: Buffer, opts: Pick<BinaryNodeCodingOptions, 'DOUBLE_BYTE_TOKENS' | 'SINGLE_BYTE_TOKENS' | 'TAGS'>, indexRef?: {
4
+ index: number
5
+ }) => BinaryNode
6
+ export declare const decodeBinaryNode: (buff: Buffer) => Promise<BinaryNode>
@@ -0,0 +1,255 @@
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 (mod) {
19
+ if (mod && mod.__esModule) return mod
20
+ var result = {}
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k)
22
+ __setModuleDefault(result, mod)
23
+ return result
24
+ }
25
+ Object.defineProperty(exports, "__esModule", { value: true })
26
+ const util_1 = require("util")
27
+ const zlib_1 = require("zlib")
28
+ const constants = __importStar(require("./constants"))
29
+ const jid_utils_1 = require("./jid-utils")
30
+ const inflatePromise = util_1.promisify(zlib_1.inflate)
31
+ const decompressingIfRequired = async (buffer) => {
32
+ if (2 & buffer.readUInt8()) {
33
+ buffer = await inflatePromise(buffer.slice(1))
34
+ }
35
+ else { // nodes with no compression have a 0x00 prefix, we remove that
36
+ buffer = buffer.slice(1)
37
+ }
38
+ return buffer
39
+ }
40
+ const decodeDecompressedBinaryNode = (buffer, opts, indexRef = { index: 0 }) => {
41
+ const { DOUBLE_BYTE_TOKENS, SINGLE_BYTE_TOKENS, TAGS } = opts
42
+ const checkEOS = (length) => {
43
+ if (indexRef.index + length > buffer.length) {
44
+ throw new Error('end of stream')
45
+ }
46
+ }
47
+ const next = () => {
48
+ const value = buffer[indexRef.index]
49
+ indexRef.index += 1
50
+ return value
51
+ }
52
+ const readByte = () => {
53
+ checkEOS(1)
54
+ return next()
55
+ }
56
+ const readBytes = (n) => {
57
+ checkEOS(n)
58
+ const value = buffer.slice(indexRef.index, indexRef.index + n)
59
+ indexRef.index += n
60
+ return value
61
+ }
62
+ const readStringFromChars = (length) => {
63
+ return readBytes(length).toString('utf-8')
64
+ }
65
+ const readInt = (n, littleEndian = false) => {
66
+ checkEOS(n)
67
+ let val = 0
68
+ for (let i = 0; i < n; i++) {
69
+ const shift = littleEndian ? i : n - 1 - i
70
+ val |= next() << (shift * 8)
71
+ }
72
+ return val
73
+ }
74
+ const readInt20 = () => {
75
+ checkEOS(3)
76
+ return ((next() & 15) << 16) + (next() << 8) + next()
77
+ }
78
+ const unpackHex = (value) => {
79
+ if (value >= 0 && value < 16) {
80
+ return value < 10 ? '0'.charCodeAt(0) + value : 'A'.charCodeAt(0) + value - 10
81
+ }
82
+ throw new Error('invalid hex: ' + value)
83
+ }
84
+ const unpackNibble = (value) => {
85
+ if (value >= 0 && value <= 9) {
86
+ return '0'.charCodeAt(0) + value
87
+ }
88
+ switch (value) {
89
+ case 10:
90
+ return '-'.charCodeAt(0)
91
+ case 11:
92
+ return '.'.charCodeAt(0)
93
+ case 15:
94
+ return '\0'.charCodeAt(0)
95
+ default:
96
+ throw new Error('invalid nibble: ' + value)
97
+ }
98
+ }
99
+ const unpackByte = (tag, value) => {
100
+ if (tag === TAGS.NIBBLE_8) {
101
+ return unpackNibble(value)
102
+ }
103
+ else if (tag === TAGS.HEX_8) {
104
+ return unpackHex(value)
105
+ }
106
+ else {
107
+ throw new Error('unknown tag: ' + tag)
108
+ }
109
+ }
110
+ const readPacked8 = (tag) => {
111
+ const startByte = readByte()
112
+ let value = ''
113
+ for (let i = 0; i < (startByte & 127); i++) {
114
+ const curByte = readByte()
115
+ value += String.fromCharCode(unpackByte(tag, (curByte & 0xf0) >> 4))
116
+ value += String.fromCharCode(unpackByte(tag, curByte & 0x0f))
117
+ }
118
+ if (startByte >> 7 !== 0) {
119
+ value = value.slice(0, -1)
120
+ }
121
+ return value
122
+ }
123
+ const isListTag = (tag) => {
124
+ return tag === TAGS.LIST_EMPTY || tag === TAGS.LIST_8 || tag === TAGS.LIST_16
125
+ }
126
+ const readListSize = (tag) => {
127
+ switch (tag) {
128
+ case TAGS.LIST_EMPTY:
129
+ return 0
130
+ case TAGS.LIST_8:
131
+ return readByte()
132
+ case TAGS.LIST_16:
133
+ return readInt(2)
134
+ default:
135
+ throw new Error('invalid tag for list size: ' + tag)
136
+ }
137
+ }
138
+ const readJidPair = () => {
139
+ const i = readString(readByte())
140
+ const j = readString(readByte())
141
+ if (j) {
142
+ return (i || '') + '@' + j
143
+ }
144
+ throw new Error('invalid jid pair: ' + i + ', ' + j)
145
+ }
146
+ const readAdJid = () => {
147
+ const agent = readByte()
148
+ const device = readByte()
149
+ const user = readString(readByte())
150
+ return jid_utils_1.jidEncode(user, agent === 0 ? 's.whatsapp.net' : 'lid', device)
151
+ }
152
+ const readString = (tag) => {
153
+ if (tag >= 1 && tag < SINGLE_BYTE_TOKENS.length) {
154
+ return SINGLE_BYTE_TOKENS[tag] || ''
155
+ }
156
+ switch (tag) {
157
+ case TAGS.DICTIONARY_0:
158
+ case TAGS.DICTIONARY_1:
159
+ case TAGS.DICTIONARY_2:
160
+ case TAGS.DICTIONARY_3:
161
+ return getTokenDouble(tag - TAGS.DICTIONARY_0, readByte())
162
+ case TAGS.LIST_EMPTY:
163
+ return ''
164
+ case TAGS.BINARY_8:
165
+ return readStringFromChars(readByte())
166
+ case TAGS.BINARY_20:
167
+ return readStringFromChars(readInt20())
168
+ case TAGS.BINARY_32:
169
+ return readStringFromChars(readInt(4))
170
+ case TAGS.JID_PAIR:
171
+ return readJidPair()
172
+ case TAGS.AD_JID:
173
+ return readAdJid()
174
+ case TAGS.HEX_8:
175
+ case TAGS.NIBBLE_8:
176
+ return readPacked8(tag)
177
+ default:
178
+ throw new Error('invalid string with tag: ' + tag)
179
+ }
180
+ }
181
+ const readList = (tag) => {
182
+ const items = []
183
+ const size = readListSize(tag)
184
+ for (let i = 0; i < size; i++) {
185
+ items.push(decodeDecompressedBinaryNode(buffer, opts, indexRef))
186
+ }
187
+ return items
188
+ }
189
+ const getTokenDouble = (index1, index2) => {
190
+ const dict = DOUBLE_BYTE_TOKENS[index1]
191
+ if (!dict) {
192
+ throw new Error(`Invalid double token dict (${index1})`)
193
+ }
194
+ const value = dict[index2]
195
+ if (typeof value === 'undefined') {
196
+ throw new Error(`Invalid double token (${index2})`)
197
+ }
198
+ return value
199
+ }
200
+ const listSize = readListSize(readByte())
201
+ const header = readString(readByte())
202
+ if (!listSize || !header.length) {
203
+ throw new Error('invalid node')
204
+ }
205
+ const attrs = {}
206
+ let data
207
+ if (listSize === 0 || !header) {
208
+ throw new Error('invalid node')
209
+ }
210
+ // read the attributes in
211
+ const attributesLength = (listSize - 1) >> 1
212
+ for (let i = 0; i < attributesLength; i++) {
213
+ const key = readString(readByte())
214
+ const value = readString(readByte())
215
+ attrs[key] = value
216
+ }
217
+ if (listSize % 2 === 0) {
218
+ const tag = readByte()
219
+ if (isListTag(tag)) {
220
+ data = readList(tag)
221
+ }
222
+ else {
223
+ let decoded
224
+ switch (tag) {
225
+ case TAGS.BINARY_8:
226
+ decoded = readBytes(readByte())
227
+ break
228
+ case TAGS.BINARY_20:
229
+ decoded = readBytes(readInt20())
230
+ break
231
+ case TAGS.BINARY_32:
232
+ decoded = readBytes(readInt(4))
233
+ break
234
+ default:
235
+ decoded = readString(tag)
236
+ break
237
+ }
238
+ data = decoded
239
+ }
240
+ }
241
+ return {
242
+ tag: header,
243
+ attrs,
244
+ content: data
245
+ }
246
+ }
247
+ const decodeBinaryNode = async (buff) => {
248
+ const decompBuff = await decompressingIfRequired(buff)
249
+ return decodeDecompressedBinaryNode(decompBuff, constants)
250
+ }
251
+ module.exports = {
252
+ decompressingIfRequired,
253
+ decodeDecompressedBinaryNode,
254
+ decodeBinaryNode
255
+ }
@@ -0,0 +1,2 @@
1
+ import type { BinaryNode, BinaryNodeCodingOptions } from './types'
2
+ export declare const encodeBinaryNode: (node: BinaryNode, opts?: Pick<BinaryNodeCodingOptions, 'TAGS' | 'TOKEN_MAP'>, buffer?: number[]) => Buffer
@@ -0,0 +1,243 @@
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 (mod) {
19
+ if (mod && mod.__esModule) return mod
20
+ var result = {}
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k)
22
+ __setModuleDefault(result, mod)
23
+ return result
24
+ }
25
+ Object.defineProperty(exports, "__esModule", { value: true })
26
+ const constants = __importStar(require("./constants"))
27
+ const jid_utils_1 = require("./jid-utils")
28
+ const encodeBinaryNode = (node, opts = constants, buffer = [0]) => {
29
+ const encoded = encodeBinaryNodeInner(node, opts, buffer)
30
+ return Buffer.from(encoded)
31
+ }
32
+ const encodeBinaryNodeInner = ({ tag, attrs, content }, opts, buffer) => {
33
+ const { TAGS, TOKEN_MAP } = opts
34
+ const pushByte = (value) => buffer.push(value & 0xff)
35
+ const pushInt = (value, n, littleEndian = false) => {
36
+ for (let i = 0; i < n; i++) {
37
+ const curShift = littleEndian ? i : n - 1 - i
38
+ buffer.push((value >> (curShift * 8)) & 0xff)
39
+ }
40
+ }
41
+ const pushBytes = (bytes) => {
42
+ for (const b of bytes) {
43
+ buffer.push(b)
44
+ }
45
+ }
46
+ const pushInt16 = (value) => {
47
+ pushBytes([(value >> 8) & 0xff, value & 0xff])
48
+ }
49
+ const pushInt20 = (value) => (pushBytes([(value >> 16) & 0x0f, (value >> 8) & 0xff, value & 0xff]))
50
+ const writeByteLength = (length) => {
51
+ if (length >= 4294967296) {
52
+ throw new Error('string too large to encode: ' + length)
53
+ }
54
+ if (length >= 1 << 20) {
55
+ pushByte(TAGS.BINARY_32)
56
+ pushInt(length, 4) // 32 bit integer
57
+ }
58
+ else if (length >= 256) {
59
+ pushByte(TAGS.BINARY_20)
60
+ pushInt20(length)
61
+ }
62
+ else {
63
+ pushByte(TAGS.BINARY_8)
64
+ pushByte(length)
65
+ }
66
+ }
67
+ const writeStringRaw = (str) => {
68
+ const bytes = Buffer.from(str, 'utf-8')
69
+ writeByteLength(bytes.length)
70
+ pushBytes(bytes)
71
+ }
72
+ const writeJid = ({ domainType, device, user, server }) => {
73
+ if (typeof device !== 'undefined') {
74
+ pushByte(TAGS.AD_JID)
75
+ pushByte(domainType || 0)
76
+ pushByte(device || 0)
77
+ writeString(user)
78
+ }
79
+ else {
80
+ pushByte(TAGS.JID_PAIR)
81
+ if (user.length) {
82
+ writeString(user)
83
+ }
84
+ else {
85
+ pushByte(TAGS.LIST_EMPTY)
86
+ }
87
+ writeString(server)
88
+ }
89
+ }
90
+ const packNibble = (char) => {
91
+ switch (char) {
92
+ case '-':
93
+ return 10
94
+ case '.':
95
+ return 11
96
+ case '\0':
97
+ return 15
98
+ default:
99
+ if (char >= '0' && char <= '9') {
100
+ return char.charCodeAt(0) - '0'.charCodeAt(0)
101
+ }
102
+ throw new Error(`invalid byte for nibble "${char}"`)
103
+ }
104
+ }
105
+ const packHex = (char) => {
106
+ if (char >= '0' && char <= '9') {
107
+ return char.charCodeAt(0) - '0'.charCodeAt(0)
108
+ }
109
+ if (char >= 'A' && char <= 'F') {
110
+ return 10 + char.charCodeAt(0) - 'A'.charCodeAt(0)
111
+ }
112
+ if (char >= 'a' && char <= 'f') {
113
+ return 10 + char.charCodeAt(0) - 'a'.charCodeAt(0)
114
+ }
115
+ if (char === '\0') {
116
+ return 15
117
+ }
118
+ throw new Error(`Invalid hex char "${char}"`)
119
+ }
120
+ const writePackedBytes = (str, type) => {
121
+ if (str.length > TAGS.PACKED_MAX) {
122
+ throw new Error('Too many bytes to pack')
123
+ }
124
+ pushByte(type === 'nibble' ? TAGS.NIBBLE_8 : TAGS.HEX_8)
125
+ let roundedLength = Math.ceil(str.length / 2.0)
126
+ if (str.length % 2 !== 0) {
127
+ roundedLength |= 128
128
+ }
129
+ pushByte(roundedLength)
130
+ const packFunction = type === 'nibble' ? packNibble : packHex
131
+ const packBytePair = (v1, v2) => {
132
+ const result = (packFunction(v1) << 4) | packFunction(v2)
133
+ return result
134
+ }
135
+ const strLengthHalf = Math.floor(str.length / 2)
136
+ for (let i = 0; i < strLengthHalf; i++) {
137
+ pushByte(packBytePair(str[2 * i], str[2 * i + 1]))
138
+ }
139
+ if (str.length % 2 !== 0) {
140
+ pushByte(packBytePair(str[str.length - 1], '\x00'))
141
+ }
142
+ }
143
+ const isNibble = (str) => {
144
+ if (!str || str.length > TAGS.PACKED_MAX) {
145
+ return false
146
+ }
147
+ for (const char of str) {
148
+ const isInNibbleRange = char >= '0' && char <= '9'
149
+ if (!isInNibbleRange && char !== '-' && char !== '.') {
150
+ return false
151
+ }
152
+ }
153
+ return true
154
+ }
155
+ const isHex = (str) => {
156
+ if (!str || str.length > TAGS.PACKED_MAX) {
157
+ return false
158
+ }
159
+ for (const char of str) {
160
+ const isInNibbleRange = char >= '0' && char <= '9'
161
+ if (!isInNibbleRange && !(char >= 'A' && char <= 'F')) {
162
+ return false
163
+ }
164
+ }
165
+ return true
166
+ }
167
+ const writeString = (str) => {
168
+ if (str === undefined || str === null) {
169
+ pushByte(TAGS.LIST_EMPTY)
170
+ return
171
+ }
172
+ const tokenIndex = TOKEN_MAP[str]
173
+ if (tokenIndex) {
174
+ if (typeof tokenIndex.dict === 'number') {
175
+ pushByte(TAGS.DICTIONARY_0 + tokenIndex.dict)
176
+ }
177
+ pushByte(tokenIndex.index)
178
+ }
179
+ else if (isNibble(str)) {
180
+ writePackedBytes(str, 'nibble')
181
+ }
182
+ else if (isHex(str)) {
183
+ writePackedBytes(str, 'hex')
184
+ }
185
+ else if (str) {
186
+ const decodedJid = (0, jid_utils_1.jidDecode)(str)
187
+ if (decodedJid) {
188
+ writeJid(decodedJid)
189
+ }
190
+ else {
191
+ writeStringRaw(str)
192
+ }
193
+ }
194
+ }
195
+ const writeListStart = (listSize) => {
196
+ if (listSize === 0) {
197
+ pushByte(TAGS.LIST_EMPTY)
198
+ }
199
+ else if (listSize < 256) {
200
+ pushBytes([TAGS.LIST_8, listSize])
201
+ }
202
+ else {
203
+ pushByte(TAGS.LIST_16)
204
+ pushInt16(listSize)
205
+ }
206
+ }
207
+ if (!tag) {
208
+ throw new Error('Invalid node: tag cannot be undefined')
209
+ }
210
+ const validAttributes = Object.keys(attrs).filter(k => (typeof attrs[k] !== 'undefined' && attrs[k] !== null))
211
+ writeListStart(2 * validAttributes.length + 1 + (typeof content !== 'undefined' ? 1 : 0))
212
+ writeString(tag)
213
+ for (const key of validAttributes) {
214
+ if (typeof attrs[key] === 'string') {
215
+ writeString(key)
216
+ writeString(attrs[key])
217
+ }
218
+ }
219
+ if (typeof content === 'string') {
220
+ writeString(content)
221
+ }
222
+ else if (Buffer.isBuffer(content) || content instanceof Uint8Array) {
223
+ writeByteLength(content.length)
224
+ pushBytes(content)
225
+ }
226
+ else if (Array.isArray(content)) {
227
+ const validContent = content.filter(item => item && (item.tag || Buffer.isBuffer(item) || item instanceof Uint8Array || typeof item === 'string'))
228
+ writeListStart(validContent.length)
229
+ for (const item of validContent) {
230
+ encodeBinaryNodeInner(item, opts, buffer)
231
+ }
232
+ }
233
+ else if (typeof content === 'undefined') {
234
+ // do nothing
235
+ }
236
+ else {
237
+ throw new Error(`invalid children for header "${tag}": ${content} (${typeof content})`)
238
+ }
239
+ return buffer
240
+ }
241
+ module.exports = {
242
+ encodeBinaryNode
243
+ }
@@ -0,0 +1,16 @@
1
+ import { proto } from '../../WAProto'
2
+ import { BinaryNode } from './types'
3
+ export declare const getBinaryNodeChildren: (node: BinaryNode | undefined, childTag: string) => BinaryNode[]
4
+ export declare const getAllBinaryNodeChildren: ({ content }: BinaryNode) => BinaryNode[]
5
+ export declare const getBinaryNodeChild: (node: BinaryNode | undefined, childTag: string) => BinaryNode | undefined
6
+ export declare const getBinaryNodeChildBuffer: (node: BinaryNode | undefined, childTag: string) => Uint8Array | Buffer | undefined
7
+ export declare const getBinaryNodeChildString: (node: BinaryNode | undefined, childTag: string) => string | undefined
8
+ export declare const getBinaryNodeChildUInt: (node: BinaryNode, childTag: string, length: number) => number | undefined
9
+ export declare const assertNodeErrorFree: (node: BinaryNode) => void
10
+ export declare const reduceBinaryNodeToDictionary: (node: BinaryNode, tag: string) => {
11
+ [_: string]: string
12
+ }
13
+ export declare const getBinaryNodeMessages: ({ content }: BinaryNode) => proto.WebMessageInfo[]
14
+ export declare const getBinaryFilteredButtons: (nodeContent: BinaryNode | BinaryNode['content']) => BinaryNode['content']
15
+ export declare const getBinaryFilteredBizBot: (nodeContent: BinaryNode | BinaryNode['content']) => BinaryNode['content']
16
+ export declare function binaryNodeToString(node: BinaryNode | BinaryNode['content'], i?: number): any