zapo-js 0.1.0 → 0.1.2

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 (366) hide show
  1. package/README.md +12 -7
  2. package/dist/appstate/WaAppStateCrypto.js +18 -25
  3. package/dist/appstate/WaAppStateSyncClient.js +181 -114
  4. package/dist/appstate/WaAppStateSyncResponseParser.js +16 -5
  5. package/dist/appstate/constants.js +4 -3
  6. package/dist/appstate/utils.js +10 -30
  7. package/dist/auth/WaAuthClient.js +48 -55
  8. package/dist/auth/flow/WaAuthCredentialsFlow.js +21 -14
  9. package/dist/auth/index.js +1 -3
  10. package/dist/auth/pairing/WaPairingFlow.js +21 -23
  11. package/dist/auth/pairing/WaQrFlow.js +37 -24
  12. package/dist/client/WaClient.js +103 -276
  13. package/dist/client/WaClientFactory.js +227 -110
  14. package/dist/client/connection/WaConnectionManager.js +292 -0
  15. package/dist/client/connection/WaKeyShareCoordinator.js +63 -0
  16. package/dist/client/connection/WaReceiptQueue.js +51 -0
  17. package/dist/client/coordinators/WaAppStateMutationCoordinator.js +471 -0
  18. package/dist/client/coordinators/WaGroupCoordinator.js +27 -17
  19. package/dist/client/coordinators/WaIncomingNodeCoordinator.js +20 -27
  20. package/dist/client/coordinators/WaMessageDispatchCoordinator.js +231 -686
  21. package/dist/client/coordinators/WaRetryCoordinator.js +70 -37
  22. package/dist/client/dirty.js +35 -29
  23. package/dist/client/events/chat.js +4 -3
  24. package/dist/client/events/group.js +59 -36
  25. package/dist/client/history-sync.js +53 -63
  26. package/dist/client/incoming.js +23 -20
  27. package/dist/client/mailbox.js +8 -8
  28. package/dist/client/messages.js +4 -4
  29. package/dist/client/messaging/fanout.js +189 -0
  30. package/dist/client/messaging/key-protocol.js +130 -0
  31. package/dist/client/messaging/participants.js +191 -0
  32. package/dist/crypto/core/hkdf.js +3 -8
  33. package/dist/crypto/core/index.js +1 -4
  34. package/dist/crypto/core/keys.js +2 -3
  35. package/dist/crypto/core/primitives.js +12 -15
  36. package/dist/crypto/core/random.js +7 -26
  37. package/dist/crypto/curves/Ed25519.js +7 -8
  38. package/dist/crypto/curves/X25519.js +13 -16
  39. package/dist/crypto/index.js +0 -5
  40. package/dist/esm/appstate/WaAppStateCrypto.js +6 -13
  41. package/dist/esm/appstate/WaAppStateSyncClient.js +174 -107
  42. package/dist/esm/appstate/WaAppStateSyncResponseParser.js +17 -6
  43. package/dist/esm/appstate/constants.js +3 -2
  44. package/dist/esm/appstate/utils.js +8 -27
  45. package/dist/esm/auth/WaAuthClient.js +48 -55
  46. package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +21 -14
  47. package/dist/esm/auth/index.js +0 -1
  48. package/dist/esm/auth/pairing/WaPairingFlow.js +14 -16
  49. package/dist/esm/auth/pairing/WaQrFlow.js +37 -24
  50. package/dist/esm/client/WaClient.js +103 -276
  51. package/dist/esm/client/WaClientFactory.js +227 -110
  52. package/dist/esm/client/connection/WaConnectionManager.js +288 -0
  53. package/dist/esm/client/connection/WaKeyShareCoordinator.js +59 -0
  54. package/dist/esm/client/connection/WaReceiptQueue.js +47 -0
  55. package/dist/esm/client/coordinators/WaAppStateMutationCoordinator.js +467 -0
  56. package/dist/esm/client/coordinators/WaGroupCoordinator.js +20 -10
  57. package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +20 -27
  58. package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +232 -687
  59. package/dist/esm/client/coordinators/WaRetryCoordinator.js +71 -38
  60. package/dist/esm/client/dirty.js +30 -24
  61. package/dist/esm/client/events/chat.js +4 -3
  62. package/dist/esm/client/events/group.js +50 -28
  63. package/dist/esm/client/history-sync.js +50 -60
  64. package/dist/esm/client/incoming.js +23 -20
  65. package/dist/esm/client/mailbox.js +8 -8
  66. package/dist/esm/client/messages.js +1 -1
  67. package/dist/esm/client/messaging/fanout.js +186 -0
  68. package/dist/esm/client/messaging/key-protocol.js +127 -0
  69. package/dist/esm/client/messaging/participants.js +188 -0
  70. package/dist/esm/crypto/core/hkdf.js +3 -8
  71. package/dist/esm/crypto/core/index.js +0 -1
  72. package/dist/esm/crypto/core/keys.js +2 -3
  73. package/dist/esm/crypto/core/primitives.js +12 -15
  74. package/dist/esm/crypto/core/random.js +6 -25
  75. package/dist/esm/crypto/curves/Ed25519.js +4 -5
  76. package/dist/esm/crypto/curves/X25519.js +10 -13
  77. package/dist/esm/crypto/index.js +0 -2
  78. package/dist/esm/infra/log/ConsoleLogger.js +18 -17
  79. package/dist/esm/infra/log/PinoLogger.js +15 -9
  80. package/dist/esm/infra/log/types.js +11 -1
  81. package/dist/esm/infra/perf/BoundedTaskQueue.js +13 -17
  82. package/dist/esm/media/WaMediaCrypto.js +2 -4
  83. package/dist/esm/media/WaMediaTransferClient.js +226 -58
  84. package/dist/esm/media/conn.js +10 -6
  85. package/dist/esm/media/constants.js +4 -1
  86. package/dist/esm/message/WaMessageClient.js +4 -13
  87. package/dist/esm/message/ack.js +6 -6
  88. package/dist/esm/message/addon-crypto.js +59 -0
  89. package/dist/esm/message/incoming.js +106 -111
  90. package/dist/esm/message/index.js +2 -0
  91. package/dist/esm/message/reporting-token.js +438 -0
  92. package/dist/esm/message/use-case-secret.js +49 -0
  93. package/dist/esm/protocol/appstate.js +58 -0
  94. package/dist/esm/protocol/constants.js +2 -1
  95. package/dist/esm/protocol/index.js +2 -10
  96. package/dist/esm/protocol/jid.js +63 -51
  97. package/dist/esm/protocol/media.js +3 -3
  98. package/dist/esm/protocol/nodes.js +2 -0
  99. package/dist/esm/protocol/usync.js +11 -0
  100. package/dist/esm/retry/index.js +1 -0
  101. package/dist/esm/retry/outbound.js +4 -5
  102. package/dist/esm/retry/parse.js +58 -76
  103. package/dist/esm/retry/replay.js +48 -49
  104. package/dist/esm/retry/tracker.js +56 -0
  105. package/dist/esm/signal/api/SignalDeviceSyncApi.js +249 -82
  106. package/dist/esm/signal/api/SignalDigestSyncApi.js +6 -1
  107. package/dist/esm/signal/api/SignalIdentitySyncApi.js +49 -34
  108. package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +70 -62
  109. package/dist/esm/signal/api/SignalSessionSyncApi.js +23 -30
  110. package/dist/esm/signal/crypto/WaAdvSignature.js +3 -5
  111. package/dist/esm/signal/group/SenderKeyChain.js +28 -23
  112. package/dist/esm/signal/group/SenderKeyCodec.js +2 -4
  113. package/dist/esm/signal/group/SenderKeyManager.js +26 -16
  114. package/dist/esm/signal/index.js +1 -0
  115. package/dist/esm/signal/session/SignalProtocol.js +49 -14
  116. package/dist/esm/signal/session/SignalRatchet.js +24 -15
  117. package/dist/esm/signal/session/SignalSession.js +14 -9
  118. package/dist/esm/signal/session/resolver.js +186 -0
  119. package/dist/esm/signal/store/sqlite.js +16 -37
  120. package/dist/esm/store/createStore.js +16 -18
  121. package/dist/esm/store/noop.store.js +3 -6
  122. package/dist/esm/store/providers/memory/appstate.store.js +30 -6
  123. package/dist/esm/store/providers/memory/contact.store.js +5 -0
  124. package/dist/esm/store/providers/memory/device-list.store.js +3 -30
  125. package/dist/esm/store/providers/memory/message.store.js +11 -5
  126. package/dist/esm/store/providers/memory/participants.store.js +1 -8
  127. package/dist/esm/store/providers/memory/sender-key.store.js +5 -7
  128. package/dist/esm/store/providers/memory/signal.store.js +13 -1
  129. package/dist/esm/store/providers/memory/thread.store.js +5 -0
  130. package/dist/esm/store/providers/sqlite/appstate.store.js +82 -1
  131. package/dist/esm/store/providers/sqlite/connection.js +18 -13
  132. package/dist/esm/store/providers/sqlite/contact.store.js +31 -18
  133. package/dist/esm/store/providers/sqlite/device-list.store.js +7 -35
  134. package/dist/esm/store/providers/sqlite/message.store.js +45 -32
  135. package/dist/esm/store/providers/sqlite/migrations.js +1 -1
  136. package/dist/esm/store/providers/sqlite/participants.store.js +1 -9
  137. package/dist/esm/store/providers/sqlite/retry.store.js +8 -11
  138. package/dist/esm/store/providers/sqlite/sender-key.store.js +25 -30
  139. package/dist/esm/store/providers/sqlite/signal.store.js +104 -22
  140. package/dist/esm/store/providers/sqlite/table-names.js +107 -0
  141. package/dist/esm/store/providers/sqlite/thread.store.js +35 -22
  142. package/dist/esm/transport/WaComms.js +25 -23
  143. package/dist/esm/transport/WaWebSocket.js +115 -12
  144. package/dist/esm/transport/binary/decoder.js +4 -4
  145. package/dist/esm/transport/binary/encoder.js +12 -4
  146. package/dist/esm/transport/index.js +1 -0
  147. package/dist/esm/transport/keepalive/WaKeepAlive.js +2 -8
  148. package/dist/esm/transport/node/WaNodeOrchestrator.js +2 -4
  149. package/dist/esm/transport/node/WaNodeTransport.js +0 -3
  150. package/dist/esm/transport/node/builders/{accountSync.js → account-sync.js} +16 -36
  151. package/dist/esm/transport/node/builders/index.js +2 -1
  152. package/dist/esm/transport/node/builders/message.js +9 -0
  153. package/dist/esm/transport/node/builders/pairing.js +4 -5
  154. package/dist/esm/transport/node/builders/usync.js +41 -0
  155. package/dist/esm/transport/node/helpers.js +107 -5
  156. package/dist/esm/transport/node/usync.js +35 -0
  157. package/dist/esm/transport/noise/WaFrameCodec.js +48 -33
  158. package/dist/esm/transport/noise/WaNoiseCert.js +3 -6
  159. package/dist/esm/transport/noise/WaNoiseSession.js +17 -10
  160. package/dist/esm/transport/proxy.js +27 -0
  161. package/dist/esm/transport/stream/parse.js +13 -48
  162. package/dist/esm/util/bytes.js +50 -32
  163. package/dist/esm/util/coercion.js +6 -14
  164. package/dist/esm/util/primitives.js +39 -14
  165. package/dist/infra/log/ConsoleLogger.js +18 -17
  166. package/dist/infra/log/PinoLogger.js +15 -9
  167. package/dist/infra/log/types.js +12 -0
  168. package/dist/infra/perf/BoundedTaskQueue.js +13 -17
  169. package/dist/media/WaMediaCrypto.js +1 -3
  170. package/dist/media/WaMediaTransferClient.js +259 -58
  171. package/dist/media/conn.js +10 -6
  172. package/dist/media/constants.js +4 -1
  173. package/dist/message/WaMessageClient.js +5 -14
  174. package/dist/message/ack.js +6 -6
  175. package/dist/message/addon-crypto.js +65 -0
  176. package/dist/message/incoming.js +104 -109
  177. package/dist/message/index.js +2 -0
  178. package/dist/message/reporting-token.js +443 -0
  179. package/dist/message/use-case-secret.js +55 -0
  180. package/dist/protocol/appstate.js +59 -1
  181. package/dist/protocol/constants.js +7 -1
  182. package/dist/protocol/index.js +20 -42
  183. package/dist/protocol/jid.js +64 -51
  184. package/dist/protocol/media.js +3 -3
  185. package/dist/protocol/nodes.js +2 -0
  186. package/dist/protocol/usync.js +14 -0
  187. package/dist/retry/index.js +3 -1
  188. package/dist/retry/outbound.js +6 -7
  189. package/dist/retry/parse.js +57 -75
  190. package/dist/retry/replay.js +46 -47
  191. package/dist/retry/tracker.js +59 -0
  192. package/dist/signal/api/SignalDeviceSyncApi.js +247 -80
  193. package/dist/signal/api/SignalDigestSyncApi.js +6 -1
  194. package/dist/signal/api/SignalIdentitySyncApi.js +49 -34
  195. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +67 -59
  196. package/dist/signal/api/SignalSessionSyncApi.js +23 -30
  197. package/dist/signal/crypto/WaAdvSignature.js +2 -4
  198. package/dist/signal/group/SenderKeyChain.js +27 -22
  199. package/dist/signal/group/SenderKeyCodec.js +1 -3
  200. package/dist/signal/group/SenderKeyManager.js +26 -16
  201. package/dist/signal/index.js +3 -1
  202. package/dist/signal/session/SignalProtocol.js +49 -14
  203. package/dist/signal/session/SignalRatchet.js +24 -15
  204. package/dist/signal/session/SignalSession.js +14 -9
  205. package/dist/signal/session/resolver.js +189 -0
  206. package/dist/signal/store/sqlite.js +16 -37
  207. package/dist/store/createStore.js +16 -18
  208. package/dist/store/noop.store.js +3 -6
  209. package/dist/store/providers/memory/appstate.store.js +28 -4
  210. package/dist/store/providers/memory/contact.store.js +5 -0
  211. package/dist/store/providers/memory/device-list.store.js +3 -30
  212. package/dist/store/providers/memory/message.store.js +11 -5
  213. package/dist/store/providers/memory/participants.store.js +1 -8
  214. package/dist/store/providers/memory/sender-key.store.js +8 -10
  215. package/dist/store/providers/memory/signal.store.js +21 -9
  216. package/dist/store/providers/memory/thread.store.js +5 -0
  217. package/dist/store/providers/sqlite/appstate.store.js +81 -0
  218. package/dist/store/providers/sqlite/connection.js +18 -13
  219. package/dist/store/providers/sqlite/contact.store.js +31 -18
  220. package/dist/store/providers/sqlite/device-list.store.js +7 -35
  221. package/dist/store/providers/sqlite/message.store.js +45 -32
  222. package/dist/store/providers/sqlite/migrations.js +1 -1
  223. package/dist/store/providers/sqlite/participants.store.js +1 -9
  224. package/dist/store/providers/sqlite/retry.store.js +8 -11
  225. package/dist/store/providers/sqlite/sender-key.store.js +24 -29
  226. package/dist/store/providers/sqlite/signal.store.js +105 -23
  227. package/dist/store/providers/sqlite/table-names.js +113 -0
  228. package/dist/store/providers/sqlite/thread.store.js +35 -22
  229. package/dist/transport/WaComms.js +27 -25
  230. package/dist/transport/WaWebSocket.js +148 -12
  231. package/dist/transport/binary/decoder.js +4 -4
  232. package/dist/transport/binary/encoder.js +12 -4
  233. package/dist/transport/index.js +7 -1
  234. package/dist/transport/keepalive/WaKeepAlive.js +1 -7
  235. package/dist/transport/node/WaNodeOrchestrator.js +2 -4
  236. package/dist/transport/node/WaNodeTransport.js +0 -3
  237. package/dist/transport/node/builders/{accountSync.js → account-sync.js} +15 -35
  238. package/dist/transport/node/builders/index.js +12 -9
  239. package/dist/transport/node/builders/message.js +9 -0
  240. package/dist/transport/node/builders/pairing.js +4 -5
  241. package/dist/transport/node/builders/usync.js +45 -0
  242. package/dist/transport/node/helpers.js +112 -4
  243. package/dist/transport/node/usync.js +38 -0
  244. package/dist/transport/noise/WaFrameCodec.js +47 -32
  245. package/dist/transport/noise/WaNoiseCert.js +5 -8
  246. package/dist/transport/noise/WaNoiseSession.js +17 -10
  247. package/dist/transport/proxy.js +34 -0
  248. package/dist/transport/stream/parse.js +17 -53
  249. package/dist/types/appstate/WaAppStateCrypto.d.ts +0 -1
  250. package/dist/types/appstate/WaAppStateSyncClient.d.ts +5 -2
  251. package/dist/types/appstate/constants.d.ts +1 -0
  252. package/dist/types/appstate/store/sqlite.d.ts +4 -18
  253. package/dist/types/appstate/utils.d.ts +0 -1
  254. package/dist/types/auth/WaAuthClient.d.ts +10 -12
  255. package/dist/types/auth/index.d.ts +0 -2
  256. package/dist/types/auth/pairing/WaQrFlow.d.ts +1 -1
  257. package/dist/types/auth/types.d.ts +6 -9
  258. package/dist/types/client/WaClient.d.ts +27 -25
  259. package/dist/types/client/WaClientFactory.d.ts +22 -23
  260. package/dist/types/client/connection/WaConnectionManager.d.ts +64 -0
  261. package/dist/types/client/connection/WaKeyShareCoordinator.d.ts +14 -0
  262. package/dist/types/client/connection/WaReceiptQueue.d.ts +13 -0
  263. package/dist/types/client/coordinators/WaAppStateMutationCoordinator.d.ts +46 -0
  264. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +0 -1
  265. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +18 -41
  266. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +2 -0
  267. package/dist/types/client/dirty.d.ts +1 -0
  268. package/dist/types/client/events/group.d.ts +2 -1
  269. package/dist/types/client/index.d.ts +1 -1
  270. package/dist/types/client/messaging/fanout.d.ts +14 -0
  271. package/dist/types/client/messaging/key-protocol.d.ts +18 -0
  272. package/dist/types/client/messaging/participants.d.ts +13 -0
  273. package/dist/types/client/types.d.ts +24 -1
  274. package/dist/types/crypto/core/hkdf.d.ts +0 -6
  275. package/dist/types/crypto/core/index.d.ts +0 -1
  276. package/dist/types/crypto/core/random.d.ts +1 -7
  277. package/dist/types/crypto/index.d.ts +0 -2
  278. package/dist/types/index.d.ts +1 -1
  279. package/dist/types/infra/log/ConsoleLogger.d.ts +2 -1
  280. package/dist/types/infra/log/PinoLogger.d.ts +1 -1
  281. package/dist/types/infra/log/types.d.ts +1 -0
  282. package/dist/types/infra/perf/BoundedTaskQueue.d.ts +1 -1
  283. package/dist/types/media/WaMediaTransferClient.d.ts +13 -3
  284. package/dist/types/media/types.d.ts +5 -0
  285. package/dist/types/message/addon-crypto.d.ts +25 -0
  286. package/dist/types/message/index.d.ts +2 -0
  287. package/dist/types/message/reporting-token.d.ts +19 -0
  288. package/dist/types/message/use-case-secret.d.ts +20 -0
  289. package/dist/types/protocol/appstate.d.ts +58 -0
  290. package/dist/types/protocol/constants.d.ts +2 -1
  291. package/dist/types/protocol/index.d.ts +2 -10
  292. package/dist/types/protocol/jid.d.ts +3 -3
  293. package/dist/types/protocol/nodes.d.ts +2 -0
  294. package/dist/types/protocol/usync.d.ts +11 -0
  295. package/dist/types/retry/index.d.ts +1 -0
  296. package/dist/types/retry/replay.d.ts +0 -4
  297. package/dist/types/retry/tracker.d.ts +19 -0
  298. package/dist/types/retry/types.d.ts +4 -3
  299. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +13 -1
  300. package/dist/types/signal/group/SenderKeyCodec.d.ts +4 -6
  301. package/dist/types/signal/index.d.ts +1 -0
  302. package/dist/types/signal/session/SignalProtocol.d.ts +9 -0
  303. package/dist/types/signal/session/resolver.d.ts +17 -0
  304. package/dist/types/store/contracts/appstate.store.d.ts +3 -0
  305. package/dist/types/store/contracts/contact.store.d.ts +1 -0
  306. package/dist/types/store/contracts/device-list.store.d.ts +0 -3
  307. package/dist/types/store/contracts/message.store.d.ts +1 -0
  308. package/dist/types/store/contracts/participants.store.d.ts +0 -1
  309. package/dist/types/store/contracts/sender-key.store.d.ts +0 -1
  310. package/dist/types/store/contracts/signal.store.d.ts +6 -0
  311. package/dist/types/store/contracts/thread.store.d.ts +1 -0
  312. package/dist/types/store/index.d.ts +1 -1
  313. package/dist/types/store/providers/memory/appstate.store.d.ts +2 -0
  314. package/dist/types/store/providers/memory/contact.store.d.ts +1 -0
  315. package/dist/types/store/providers/memory/device-list.store.d.ts +0 -3
  316. package/dist/types/store/providers/memory/message.store.d.ts +1 -0
  317. package/dist/types/store/providers/memory/participants.store.d.ts +0 -1
  318. package/dist/types/store/providers/memory/sender-key.store.d.ts +0 -1
  319. package/dist/types/store/providers/memory/signal.store.d.ts +6 -0
  320. package/dist/types/store/providers/memory/thread.store.d.ts +1 -0
  321. package/dist/types/store/providers/sqlite/appstate.store.d.ts +2 -0
  322. package/dist/types/store/providers/sqlite/contact.store.d.ts +2 -0
  323. package/dist/types/store/providers/sqlite/device-list.store.d.ts +0 -3
  324. package/dist/types/store/providers/sqlite/message.store.d.ts +2 -0
  325. package/dist/types/store/providers/sqlite/participants.store.d.ts +0 -1
  326. package/dist/types/store/providers/sqlite/retry.store.d.ts +0 -1
  327. package/dist/types/store/providers/sqlite/sender-key.store.d.ts +0 -1
  328. package/dist/types/store/providers/sqlite/signal.store.d.ts +7 -0
  329. package/dist/types/store/providers/sqlite/table-names.d.ts +5 -0
  330. package/dist/types/store/providers/sqlite/thread.store.d.ts +2 -0
  331. package/dist/types/store/types.d.ts +3 -0
  332. package/dist/types/transport/WaWebSocket.d.ts +3 -0
  333. package/dist/types/transport/index.d.ts +2 -1
  334. package/dist/types/transport/keepalive/WaKeepAlive.d.ts +0 -1
  335. package/dist/types/transport/node/WaNodeTransport.d.ts +0 -9
  336. package/dist/types/transport/node/builders/group.d.ts +4 -6
  337. package/dist/types/transport/node/builders/index.d.ts +2 -1
  338. package/dist/types/transport/node/builders/message.d.ts +14 -25
  339. package/dist/types/transport/node/builders/retry.d.ts +2 -4
  340. package/dist/types/transport/node/builders/usync.d.ts +21 -0
  341. package/dist/types/transport/node/helpers.d.ts +8 -0
  342. package/dist/types/transport/node/usync.d.ts +2 -0
  343. package/dist/types/transport/noise/WaFrameCodec.d.ts +3 -0
  344. package/dist/types/transport/noise/WaNoiseSession.d.ts +1 -0
  345. package/dist/types/transport/proxy.d.ts +6 -0
  346. package/dist/types/transport/stream/parse.d.ts +0 -1
  347. package/dist/types/transport/types.d.ts +18 -1
  348. package/dist/types/util/bytes.d.ts +5 -0
  349. package/dist/types/util/primitives.d.ts +3 -0
  350. package/dist/util/bytes.js +55 -33
  351. package/dist/util/coercion.js +6 -14
  352. package/dist/util/primitives.js +42 -14
  353. package/package.json +27 -9
  354. package/proto/index.d.ts +1090 -1048
  355. package/proto/index.js +1 -1
  356. package/scripts/check-node-version.cjs +0 -1
  357. package/dist/crypto/core/encoding.js +0 -29
  358. package/dist/esm/crypto/core/encoding.js +0 -25
  359. package/dist/esm/util/base64.js +0 -18
  360. package/dist/esm/util/signal-address.js +0 -5
  361. package/dist/types/crypto/core/encoding.d.ts +0 -11
  362. package/dist/types/util/base64.d.ts +0 -4
  363. package/dist/types/util/signal-address.d.ts +0 -2
  364. package/dist/util/base64.js +0 -24
  365. package/dist/util/signal-address.js +0 -8
  366. /package/dist/types/transport/node/builders/{accountSync.d.ts → account-sync.d.ts} +0 -0
@@ -0,0 +1,443 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WA_REPORTING_TOKEN_VERSION = void 0;
4
+ exports.buildReportingTokenNode = buildReportingTokenNode;
5
+ exports.buildReportingTokenArtifacts = buildReportingTokenArtifacts;
6
+ const _crypto_1 = require("../crypto/index.js");
7
+ const _proto_1 = require("../proto.js");
8
+ const bytes_1 = require("../util/bytes");
9
+ const WA_REPORTING_TOKEN_BYTES = 16;
10
+ const WA_REPORTING_TOKEN_KEY_BYTES = 32;
11
+ const WA_REPORTING_TOKEN_USE_CASE = 'Report Token';
12
+ const WA_REPORTING_TOKEN_CONFIG_BASE64 = 'CgQIARIACjQIAxIwKgQIAhIAKgQIAxIAKgQICBIAKgQICxIAKhAIERIMKgQIFRIAKgQIFhIAKgQIGRIACioIBBImCAIqBggBEgIIAioGCBASAggCKhIIERIOCAIqBAgVEgAqBAgWEgAKOggFEjYIAioGCAMSAggCKgYIBBICCAIqBggFEgIIAioGCBASAggCKhIIERIOCAIqBAgVEgAqBAgWEgAKIggGEh4qBAgBEgAqEAgREgwqBAgVEgAqBAgWEgAqBAgeEgAKLggHEioqBAgCEgAqBAgHEgAqBAgKEgAqEAgREgwqBAgVEgAqBAgWEgAqBAgUEgAKLggIEioqBAgCEgAqBAgHEgAqBAgJEgAqEAgREgwqBAgVEgAqBAgWEgAqBAgVEgAKNAgJEjAqBAgCEgAqBAgGEgAqBAgHEgAqBAgNEgAqEAgREgwqBAgVEgAqBAgWEgAqBAgUEgAKKAgMEiQIAioGCAESAggCKgYIAhICCAIqCAgOEgQIAiABKgYIDxICCAIKKggSEiYIAioGCAYSAggCKgYIEBICCAIqEggREg4IAioECBUSACoECBYSAAouCBoSKioECAQSACoECAUSACoECAgSACoECA0SACoQCBESDCoECBUSACoECBYSAApCCBwSPggCKgYIARICCAIqBggCEgIIAioGCAQSAggCKgYIBRICCAIqBggGEgIIAioSCAcSDggCKgQIFRIAKgQIFhIACgwIJRIIKgYIARICIAEKUggxEk4IAioGCAISAggCKhYIAxISCAIqBggBEgIIAioGCAISAggCKhIIBRIOCAIqBAgVEgAqBAgWEgAqFggIEhIIAioGCAESAggCKgYIAhICCAIKDAg1EggqBggBEgIgAQoOCDcSCggCKgYIARICIAEKDgg6EgoIAioGCAESAiABCg4IOxIKCAIqBggBEgIgAQpSCDwSTggCKgYIAhICCAIqFggDEhIIAioGCAESAggCKgYIAhICCAIqEggFEg4IAioECBUSACoECBYSACoWCAgSEggCKgYIARICCAIqBggCEgIIAgpSCEASTggCKgYIAhICCAIqFggDEhIIAioGCAESAggCKgYIAhICCAIqEggFEg4IAioECBUSACoECBYSACoWCAgSEggCKgYIARICCAIqBggCEgIIAgo2CEISMggCKgQIAhIAKgQIBhIAKgQIBxIAKgQIDRIAKhAIERIMKgQIFRIAKgQIFhIAKgQIFBIACg4IShIKCAIqBggBEgIgAQoOCFcSCggCKgYIARICIAEKMghYEi4IAioGCAESAggCKg4IAhIKCAIqBggBEgIIAioSCAMSDggCKgQIFRIAKgQIFhIACg4IXBIKCAIqBggBEgIgAQoOCF0SCggCKgYIARICIAEKDgheEgoIAioGCAESAiAB';
13
+ const WA_REPORTING_TOKEN_CONFIG_BYTES = (0, bytes_1.base64ToBytesChecked)(WA_REPORTING_TOKEN_CONFIG_BASE64, 'reporting_token.config');
14
+ exports.WA_REPORTING_TOKEN_VERSION = 2;
15
+ let reportingTokenConfigSpec = null;
16
+ const reportingTokenConfigCache = new Map();
17
+ async function buildReportingTokenNode(input) {
18
+ const artifacts = await buildReportingTokenArtifacts(input);
19
+ return artifacts?.node ?? null;
20
+ }
21
+ async function buildReportingTokenArtifacts(input) {
22
+ const stanzaId = input.stanzaId.trim();
23
+ if (!stanzaId || !isMessageReportingTokenCompatible(input.message)) {
24
+ return null;
25
+ }
26
+ const messageSecret = input.message.messageContextInfo?.messageSecret;
27
+ if (!messageSecret || (0, bytes_1.toBytesView)(messageSecret).byteLength === 0) {
28
+ return null;
29
+ }
30
+ const reportingTokenContent = computeReportingTokenContent(_proto_1.proto.Message.encode(input.message).finish(), input.version ?? exports.WA_REPORTING_TOKEN_VERSION);
31
+ if (reportingTokenContent.byteLength === 0) {
32
+ return null;
33
+ }
34
+ const secretInfo = (0, bytes_1.concatBytes)([
35
+ bytes_1.TEXT_ENCODER.encode(stanzaId),
36
+ bytes_1.TEXT_ENCODER.encode(input.senderUserJid),
37
+ bytes_1.TEXT_ENCODER.encode(input.remoteJid),
38
+ bytes_1.TEXT_ENCODER.encode(WA_REPORTING_TOKEN_USE_CASE)
39
+ ]);
40
+ const reportingTokenKey = await (0, _crypto_1.hkdf)((0, bytes_1.toBytesView)(messageSecret), null, secretInfo, WA_REPORTING_TOKEN_KEY_BYTES);
41
+ const hmacKey = await (0, _crypto_1.importHmacKey)(reportingTokenKey);
42
+ const reportingToken = (await (0, _crypto_1.hmacSign)(hmacKey, reportingTokenContent)).subarray(0, WA_REPORTING_TOKEN_BYTES);
43
+ const version = input.version ?? exports.WA_REPORTING_TOKEN_VERSION;
44
+ return {
45
+ node: {
46
+ tag: 'reporting',
47
+ attrs: {},
48
+ content: [
49
+ {
50
+ tag: 'reporting_token',
51
+ attrs: {
52
+ v: String(version)
53
+ },
54
+ content: reportingToken
55
+ }
56
+ ]
57
+ },
58
+ version,
59
+ reportingToken,
60
+ reportingTokenContent,
61
+ reportingTokenKey
62
+ };
63
+ }
64
+ function isMessageReportingTokenCompatible(message) {
65
+ return (!message.reactionMessage &&
66
+ !message.encReactionMessage &&
67
+ !message.encEventResponseMessage &&
68
+ !message.pollUpdateMessage);
69
+ }
70
+ function computeReportingTokenContent(messageBytes, version) {
71
+ const reportingConfig = getReportingTokenConfig(version);
72
+ const extracted = extractProtobufFieldParts(messageBytes, 0, messageBytes.length, reportingConfig, reportingConfig);
73
+ if (extracted.totalSize === 0) {
74
+ return bytes_1.EMPTY_BYTES;
75
+ }
76
+ const output = new Uint8Array(extracted.totalSize);
77
+ let offset = 0;
78
+ for (const part of extracted.parts) {
79
+ output.set(part.bytes, offset);
80
+ offset += part.bytes.length;
81
+ }
82
+ return output;
83
+ }
84
+ function getReportingTokenConfig(version) {
85
+ const cached = reportingTokenConfigCache.get(version);
86
+ if (cached) {
87
+ return cached;
88
+ }
89
+ const spec = getReportingTokenConfigSpec();
90
+ const fields = new Map();
91
+ for (const [fieldNumber, fieldSpec] of spec.fields) {
92
+ const selectedField = selectFieldForVersion(version, fieldNumber, fieldSpec);
93
+ if (selectedField) {
94
+ fields.set(fieldNumber, selectedField);
95
+ }
96
+ }
97
+ const config = { fields };
98
+ reportingTokenConfigCache.set(version, config);
99
+ return config;
100
+ }
101
+ function getReportingTokenConfigSpec() {
102
+ if (reportingTokenConfigSpec) {
103
+ return reportingTokenConfigSpec;
104
+ }
105
+ reportingTokenConfigSpec = parseReportingTokenConfigSpec(WA_REPORTING_TOKEN_CONFIG_BYTES);
106
+ return reportingTokenConfigSpec;
107
+ }
108
+ function parseReportingTokenConfigSpec(bytes) {
109
+ let cursor = 0;
110
+ const fields = new Map();
111
+ while (cursor < bytes.length) {
112
+ const tag = readVarint(bytes, cursor, bytes.length);
113
+ cursor = tag.next;
114
+ const fieldNumber = Math.floor(tag.value / 8);
115
+ const wireType = tag.value & 0x07;
116
+ if (fieldNumber === 1 && wireType === 2) {
117
+ const lengthInfo = readVarint(bytes, cursor, bytes.length);
118
+ const entryStart = lengthInfo.next;
119
+ const entryEnd = entryStart + lengthInfo.value;
120
+ if (entryEnd > bytes.length) {
121
+ throw new Error('invalid reporting token config map entry length');
122
+ }
123
+ const parsedEntry = parseReportingTokenConfigMapEntry(bytes, entryStart, entryEnd);
124
+ if (parsedEntry) {
125
+ fields.set(parsedEntry.key, parsedEntry.value);
126
+ }
127
+ cursor = entryEnd;
128
+ continue;
129
+ }
130
+ cursor = skipField(bytes, cursor, bytes.length, wireType);
131
+ }
132
+ return { fields };
133
+ }
134
+ function parseReportingTokenConfigMapEntry(bytes, start, end) {
135
+ let cursor = start;
136
+ let key = null;
137
+ let value = null;
138
+ while (cursor < end) {
139
+ const tag = readVarint(bytes, cursor, end);
140
+ cursor = tag.next;
141
+ const fieldNumber = Math.floor(tag.value / 8);
142
+ const wireType = tag.value & 0x07;
143
+ if (fieldNumber === 1 && wireType === 0) {
144
+ const keyVarint = readVarint(bytes, cursor, end);
145
+ key = keyVarint.value;
146
+ cursor = keyVarint.next;
147
+ continue;
148
+ }
149
+ if (fieldNumber === 2 && wireType === 2) {
150
+ const valueLength = readVarint(bytes, cursor, end);
151
+ const valueStart = valueLength.next;
152
+ const valueEnd = valueStart + valueLength.value;
153
+ if (valueEnd > end) {
154
+ throw new Error('invalid reporting token config field value length');
155
+ }
156
+ value = parseReportingTokenFieldSpec(bytes, valueStart, valueEnd);
157
+ cursor = valueEnd;
158
+ continue;
159
+ }
160
+ cursor = skipField(bytes, cursor, end, wireType);
161
+ }
162
+ if (key === null || value === null) {
163
+ return null;
164
+ }
165
+ return { key, value };
166
+ }
167
+ function parseReportingTokenFieldSpec(bytes, start, end) {
168
+ let cursor = start;
169
+ let minVersion = 1;
170
+ let maxVersion = null;
171
+ let isMessage = false;
172
+ const subfields = new Map();
173
+ while (cursor < end) {
174
+ const tag = readVarint(bytes, cursor, end);
175
+ cursor = tag.next;
176
+ const fieldNumber = Math.floor(tag.value / 8);
177
+ const wireType = tag.value & 0x07;
178
+ if (fieldNumber === 1 && wireType === 0) {
179
+ const value = readVarint(bytes, cursor, end);
180
+ minVersion = value.value;
181
+ cursor = value.next;
182
+ continue;
183
+ }
184
+ if (fieldNumber === 2 && wireType === 0) {
185
+ const value = readVarint(bytes, cursor, end);
186
+ maxVersion = value.value;
187
+ cursor = value.next;
188
+ continue;
189
+ }
190
+ if (fieldNumber === 4 && wireType === 0) {
191
+ const value = readVarint(bytes, cursor, end);
192
+ isMessage = value.value !== 0;
193
+ cursor = value.next;
194
+ continue;
195
+ }
196
+ if (fieldNumber === 5 && wireType === 2) {
197
+ const lengthInfo = readVarint(bytes, cursor, end);
198
+ const entryStart = lengthInfo.next;
199
+ const entryEnd = entryStart + lengthInfo.value;
200
+ if (entryEnd > end) {
201
+ throw new Error('invalid reporting token subfield map entry length');
202
+ }
203
+ const parsedEntry = parseReportingTokenConfigMapEntry(bytes, entryStart, entryEnd);
204
+ if (parsedEntry) {
205
+ subfields.set(parsedEntry.key, parsedEntry.value);
206
+ }
207
+ cursor = entryEnd;
208
+ continue;
209
+ }
210
+ cursor = skipField(bytes, cursor, end, wireType);
211
+ }
212
+ return {
213
+ minVersion,
214
+ maxVersion,
215
+ isMessage,
216
+ subfields: subfields.size > 0 ? subfields : null
217
+ };
218
+ }
219
+ function selectFieldForVersion(version, fieldNumber, fieldSpec) {
220
+ if (version < fieldSpec.minVersion) {
221
+ return null;
222
+ }
223
+ if (fieldSpec.maxVersion !== null && version > fieldSpec.maxVersion) {
224
+ return null;
225
+ }
226
+ if (!fieldSpec.subfields) {
227
+ return {
228
+ fieldNumber,
229
+ isMessage: fieldSpec.isMessage,
230
+ subfields: null
231
+ };
232
+ }
233
+ const selectedSubfields = new Map();
234
+ for (const [subFieldNumber, subFieldSpec] of fieldSpec.subfields) {
235
+ const selectedField = selectFieldForVersion(version, subFieldNumber, subFieldSpec);
236
+ if (selectedField) {
237
+ selectedSubfields.set(subFieldNumber, selectedField);
238
+ }
239
+ }
240
+ return {
241
+ fieldNumber,
242
+ isMessage: fieldSpec.isMessage,
243
+ subfields: {
244
+ fields: selectedSubfields
245
+ }
246
+ };
247
+ }
248
+ function extractProtobufFieldParts(bytes, start, end, config, rootConfig) {
249
+ const parts = [];
250
+ let totalSize = 0;
251
+ let cursor = start;
252
+ while (cursor < end) {
253
+ const parsedField = parseProtobufField(bytes, cursor, end);
254
+ cursor = parsedField.next;
255
+ const configuredField = config.fields.get(parsedField.fieldNumber);
256
+ if (!configuredField) {
257
+ continue;
258
+ }
259
+ if (!configuredField.isMessage && isExtractWholeField(configuredField)) {
260
+ const fieldBytes = bytes.subarray(parsedField.start, parsedField.next);
261
+ parts.push({
262
+ fieldNumber: parsedField.fieldNumber,
263
+ bytes: fieldBytes
264
+ });
265
+ totalSize += fieldBytes.length;
266
+ continue;
267
+ }
268
+ if (parsedField.wireType !== 2) {
269
+ continue;
270
+ }
271
+ const nestedConfig = configuredField.isMessage ? rootConfig : configuredField.subfields;
272
+ if (!nestedConfig) {
273
+ continue;
274
+ }
275
+ const nestedFields = extractProtobufFieldParts(bytes, parsedField.valueStart, parsedField.valueEnd, nestedConfig, rootConfig);
276
+ if (nestedFields.parts.length === 0 || nestedFields.totalSize === 0) {
277
+ continue;
278
+ }
279
+ const tagBytes = encodeVarint(parsedField.tag);
280
+ const nestedLengthBytes = encodeVarint(nestedFields.totalSize);
281
+ const fieldBytes = new Uint8Array(tagBytes.length + nestedLengthBytes.length + nestedFields.totalSize);
282
+ fieldBytes.set(tagBytes, 0);
283
+ fieldBytes.set(nestedLengthBytes, tagBytes.length);
284
+ let nestedOffset = tagBytes.length + nestedLengthBytes.length;
285
+ for (const nestedPart of nestedFields.parts) {
286
+ fieldBytes.set(nestedPart.bytes, nestedOffset);
287
+ nestedOffset += nestedPart.bytes.length;
288
+ }
289
+ parts.push({
290
+ fieldNumber: parsedField.fieldNumber,
291
+ bytes: fieldBytes
292
+ });
293
+ totalSize += fieldBytes.length;
294
+ }
295
+ parts.sort((left, right) => left.fieldNumber - right.fieldNumber);
296
+ return {
297
+ parts,
298
+ totalSize
299
+ };
300
+ }
301
+ function isExtractWholeField(field) {
302
+ return !field.subfields || field.subfields.fields.size === 0;
303
+ }
304
+ function parseProtobufField(bytes, start, end) {
305
+ const tag = readVarint(bytes, start, end);
306
+ const tagValue = tag.value;
307
+ if (tagValue <= 0 || tagValue > 4294967295) {
308
+ throw new Error(`protobuf field tag out of bounds: ${tagValue}`);
309
+ }
310
+ const fieldNumber = Math.floor(tagValue / 8);
311
+ if (fieldNumber < 1) {
312
+ throw new Error(`invalid protobuf field number: ${fieldNumber}`);
313
+ }
314
+ const wireType = tagValue & 0x07;
315
+ if (wireType === 0) {
316
+ const value = readVarint(bytes, tag.next, end);
317
+ return {
318
+ tag: tagValue,
319
+ fieldNumber,
320
+ wireType,
321
+ start,
322
+ next: value.next,
323
+ valueStart: value.next,
324
+ valueEnd: value.next
325
+ };
326
+ }
327
+ if (wireType === 1) {
328
+ const next = tag.next + 8;
329
+ if (next > end) {
330
+ throw new Error('invalid protobuf fixed64 field length');
331
+ }
332
+ return {
333
+ tag: tagValue,
334
+ fieldNumber,
335
+ wireType,
336
+ start,
337
+ next,
338
+ valueStart: next,
339
+ valueEnd: next
340
+ };
341
+ }
342
+ if (wireType === 2) {
343
+ const valueLength = readVarint(bytes, tag.next, end);
344
+ const valueStart = valueLength.next;
345
+ const valueEnd = valueStart + valueLength.value;
346
+ if (valueEnd > end) {
347
+ throw new Error('invalid protobuf length-delimited field length');
348
+ }
349
+ return {
350
+ tag: tagValue,
351
+ fieldNumber,
352
+ wireType,
353
+ start,
354
+ next: valueEnd,
355
+ valueStart,
356
+ valueEnd
357
+ };
358
+ }
359
+ if (wireType === 5) {
360
+ const next = tag.next + 4;
361
+ if (next > end) {
362
+ throw new Error('invalid protobuf fixed32 field length');
363
+ }
364
+ return {
365
+ tag: tagValue,
366
+ fieldNumber,
367
+ wireType,
368
+ start,
369
+ next,
370
+ valueStart: next,
371
+ valueEnd: next
372
+ };
373
+ }
374
+ throw new Error(`unsupported protobuf wire type: ${wireType}`);
375
+ }
376
+ function readVarint(bytes, start, end) {
377
+ let cursor = start;
378
+ let value = 0;
379
+ let factor = 1;
380
+ while (cursor < end) {
381
+ const byte = bytes[cursor];
382
+ value += (byte & 0x7f) * factor;
383
+ if (!Number.isSafeInteger(value)) {
384
+ throw new Error('varint exceeds safe integer range');
385
+ }
386
+ cursor += 1;
387
+ if ((byte & 0x80) === 0) {
388
+ return {
389
+ value,
390
+ next: cursor
391
+ };
392
+ }
393
+ factor *= 128;
394
+ if (factor > 2 ** 56) {
395
+ throw new Error('varint exceeds supported range');
396
+ }
397
+ }
398
+ throw new Error('unexpected end of buffer while reading varint');
399
+ }
400
+ function skipField(bytes, start, end, wireType) {
401
+ if (wireType === 0) {
402
+ return readVarint(bytes, start, end).next;
403
+ }
404
+ if (wireType === 1) {
405
+ const next = start + 8;
406
+ if (next > end) {
407
+ throw new Error('invalid fixed64 field size while skipping');
408
+ }
409
+ return next;
410
+ }
411
+ if (wireType === 2) {
412
+ const lengthInfo = readVarint(bytes, start, end);
413
+ const next = lengthInfo.next + lengthInfo.value;
414
+ if (next > end) {
415
+ throw new Error('invalid length-delimited field size while skipping');
416
+ }
417
+ return next;
418
+ }
419
+ if (wireType === 5) {
420
+ const next = start + 4;
421
+ if (next > end) {
422
+ throw new Error('invalid fixed32 field size while skipping');
423
+ }
424
+ return next;
425
+ }
426
+ throw new Error(`unsupported wire type while skipping field: ${wireType}`);
427
+ }
428
+ function encodeVarint(value) {
429
+ if (!Number.isSafeInteger(value) || value < 0) {
430
+ throw new Error(`invalid varint value: ${value}`);
431
+ }
432
+ if (value === 0) {
433
+ return new Uint8Array([0]);
434
+ }
435
+ const bytes = [];
436
+ let current = value;
437
+ while (current >= 128) {
438
+ bytes.push((current % 128) + 128);
439
+ current = Math.floor(current / 128);
440
+ }
441
+ bytes.push(current);
442
+ return new Uint8Array(bytes);
443
+ }
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WA_USE_CASE_SECRET_MODIFICATION_TYPES = exports.WA_MESSAGE_SECRET_BYTES = void 0;
4
+ exports.assertMessageSecret = assertMessageSecret;
5
+ exports.ensureMessageSecret = ensureMessageSecret;
6
+ exports.createUseCaseSecret = createUseCaseSecret;
7
+ const _crypto_1 = require("../crypto/index.js");
8
+ const bytes_1 = require("../util/bytes");
9
+ exports.WA_MESSAGE_SECRET_BYTES = 32;
10
+ exports.WA_USE_CASE_SECRET_MODIFICATION_TYPES = Object.freeze({
11
+ POLL_VOTE: 'Poll Vote',
12
+ ENC_REACTION: 'Enc Reaction',
13
+ ENC_COMMENT: 'Enc Comment',
14
+ REPORT_TOKEN: 'Report Token',
15
+ EVENT_RESPONSE: 'Event Response',
16
+ EVENT_EDIT_ENCRYPTED: 'Event Edit',
17
+ MESSAGE_EDIT: 'Message Edit'
18
+ });
19
+ function assertMessageSecret(messageSecret, context = 'message secret') {
20
+ const bytes = (0, bytes_1.toBytesView)(messageSecret);
21
+ if (bytes.byteLength !== exports.WA_MESSAGE_SECRET_BYTES) {
22
+ throw new Error(`${context} must be ${exports.WA_MESSAGE_SECRET_BYTES} bytes (got ${bytes.byteLength})`);
23
+ }
24
+ return bytes;
25
+ }
26
+ async function ensureMessageSecret(message) {
27
+ const messageSecret = message.messageContextInfo?.messageSecret;
28
+ if (messageSecret && (0, bytes_1.toBytesView)(messageSecret).byteLength > 0) {
29
+ return message;
30
+ }
31
+ const generatedMessageSecret = await (0, _crypto_1.randomBytesAsync)(exports.WA_MESSAGE_SECRET_BYTES);
32
+ return {
33
+ ...message,
34
+ messageContextInfo: {
35
+ ...(message.messageContextInfo ?? {}),
36
+ messageSecret: generatedMessageSecret
37
+ }
38
+ };
39
+ }
40
+ async function createUseCaseSecret(input) {
41
+ if (!input.stanzaId.trim()) {
42
+ throw new Error('stanza id must be a non-empty string');
43
+ }
44
+ if (!input.parentMsgOriginalSender.trim()) {
45
+ throw new Error('parent message original sender must be a non-empty string');
46
+ }
47
+ if (!input.modificationSender.trim()) {
48
+ throw new Error('modification sender must be a non-empty string');
49
+ }
50
+ const secretInfo = bytes_1.TEXT_ENCODER.encode(input.stanzaId +
51
+ input.parentMsgOriginalSender +
52
+ input.modificationSender +
53
+ input.modificationType);
54
+ return (0, _crypto_1.hkdf)(assertMessageSecret(input.messageSecret), null, secretInfo, exports.WA_MESSAGE_SECRET_BYTES);
55
+ }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WA_APP_STATE_KDF_INFO = exports.WA_APP_STATE_KEY_TYPES = exports.WA_APP_STATE_SYNC_DATA_TYPE = exports.WA_APP_STATE_ERROR_CODES = exports.WA_APP_STATE_COLLECTION_STATES = exports.WA_APP_STATE_COLLECTIONS = void 0;
3
+ exports.WA_APP_STATE_CHAT_MUTATION_SPECS = exports.WA_APP_STATE_CHAT_MUTATION_ACTIONS = exports.WA_APP_STATE_KDF_INFO = exports.WA_APP_STATE_KEY_TYPES = exports.WA_APP_STATE_SYNC_DATA_TYPE = exports.WA_APP_STATE_ERROR_CODES = exports.WA_APP_STATE_COLLECTION_STATES = exports.WA_APP_STATE_COLLECTIONS = void 0;
4
4
  exports.WA_APP_STATE_COLLECTIONS = Object.freeze({
5
5
  REGULAR: 'regular',
6
6
  REGULAR_LOW: 'regular_low',
@@ -35,3 +35,61 @@ exports.WA_APP_STATE_KDF_INFO = Object.freeze({
35
35
  MUTATION_KEYS: 'WhatsApp Mutation Keys',
36
36
  PATCH_INTEGRITY: 'WhatsApp Patch Integrity'
37
37
  });
38
+ exports.WA_APP_STATE_CHAT_MUTATION_ACTIONS = Object.freeze({
39
+ STAR: 'star',
40
+ MUTE: 'mute',
41
+ PIN: 'pin_v1',
42
+ ARCHIVE: 'archive',
43
+ DELETE_MESSAGE_FOR_ME: 'deleteMessageForMe',
44
+ MARK_CHAT_AS_READ: 'markChatAsRead',
45
+ CLEAR_CHAT: 'clearChat',
46
+ DELETE_CHAT: 'deleteChat',
47
+ LOCK_CHAT: 'lock'
48
+ });
49
+ exports.WA_APP_STATE_CHAT_MUTATION_SPECS = Object.freeze({
50
+ STAR: {
51
+ collection: exports.WA_APP_STATE_COLLECTIONS.REGULAR_HIGH,
52
+ action: exports.WA_APP_STATE_CHAT_MUTATION_ACTIONS.STAR,
53
+ version: 2
54
+ },
55
+ MUTE: {
56
+ collection: exports.WA_APP_STATE_COLLECTIONS.REGULAR_HIGH,
57
+ action: exports.WA_APP_STATE_CHAT_MUTATION_ACTIONS.MUTE,
58
+ version: 2
59
+ },
60
+ PIN: {
61
+ collection: exports.WA_APP_STATE_COLLECTIONS.REGULAR_LOW,
62
+ action: exports.WA_APP_STATE_CHAT_MUTATION_ACTIONS.PIN,
63
+ version: 5
64
+ },
65
+ ARCHIVE: {
66
+ collection: exports.WA_APP_STATE_COLLECTIONS.REGULAR_LOW,
67
+ action: exports.WA_APP_STATE_CHAT_MUTATION_ACTIONS.ARCHIVE,
68
+ version: 3
69
+ },
70
+ DELETE_MESSAGE_FOR_ME: {
71
+ collection: exports.WA_APP_STATE_COLLECTIONS.REGULAR_HIGH,
72
+ action: exports.WA_APP_STATE_CHAT_MUTATION_ACTIONS.DELETE_MESSAGE_FOR_ME,
73
+ version: 3
74
+ },
75
+ MARK_CHAT_AS_READ: {
76
+ collection: exports.WA_APP_STATE_COLLECTIONS.REGULAR_LOW,
77
+ action: exports.WA_APP_STATE_CHAT_MUTATION_ACTIONS.MARK_CHAT_AS_READ,
78
+ version: 3
79
+ },
80
+ CLEAR_CHAT: {
81
+ collection: exports.WA_APP_STATE_COLLECTIONS.REGULAR_HIGH,
82
+ action: exports.WA_APP_STATE_CHAT_MUTATION_ACTIONS.CLEAR_CHAT,
83
+ version: 6
84
+ },
85
+ DELETE_CHAT: {
86
+ collection: exports.WA_APP_STATE_COLLECTIONS.REGULAR_HIGH,
87
+ action: exports.WA_APP_STATE_CHAT_MUTATION_ACTIONS.DELETE_CHAT,
88
+ version: 6
89
+ },
90
+ LOCK_CHAT: {
91
+ collection: exports.WA_APP_STATE_COLLECTIONS.REGULAR_LOW,
92
+ action: exports.WA_APP_STATE_CHAT_MUTATION_ACTIONS.LOCK_CHAT,
93
+ version: 7
94
+ }
95
+ });
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WA_GROUP_PARTICIPANT_TYPES = exports.WA_DEFAULTS = exports.WA_NOTIFICATION_TYPES = exports.WA_GROUP_NOTIFICATION_TAGS = exports.WA_SUPPORTED_DIRTY_TYPES = exports.WA_DIRTY_TYPES = exports.WA_DIRTY_PROTOCOLS = exports.WA_ACCOUNT_SYNC_PROTOCOLS = exports.WA_PREVIEW_MEDIA_HKDF_INFO = exports.WA_MEDIA_HKDF_INFO = exports.getWaMediaHkdfInfo = exports.WA_APP_STATE_SYNC_DATA_TYPE = exports.WA_APP_STATE_KEY_TYPES = exports.WA_APP_STATE_KDF_INFO = exports.WA_APP_STATE_ERROR_CODES = exports.WA_APP_STATE_COLLECTION_STATES = exports.WA_APP_STATE_COLLECTIONS = exports.WA_RETRYABLE_ACK_CODES = exports.WA_MESSAGE_TYPES = exports.WA_MESSAGE_TAGS = exports.WA_XMLNS = exports.WA_NODE_TAGS = exports.WA_IQ_TYPES = exports.WA_STREAM_SIGNALING = exports.WA_READY_STATES = exports.WA_LOGOUT_REASONS = exports.WA_DISCONNECT_REASONS = exports.WA_PAIRING_KDF_INFO = exports.WA_SIGNALING = exports.WA_COMPANION_PLATFORM_IDS = exports.WA_BROWSERS = exports.getWaCompanionPlatformId = void 0;
3
+ exports.WA_USYNC_MODES = exports.WA_USYNC_DEFAULTS = exports.WA_USYNC_CONTEXTS = exports.WA_GROUP_PARTICIPANT_TYPES = exports.WA_DEFAULTS = exports.WA_NOTIFICATION_TYPES = exports.WA_GROUP_NOTIFICATION_TAGS = exports.WA_SUPPORTED_DIRTY_TYPES = exports.WA_DIRTY_TYPES = exports.WA_DIRTY_PROTOCOLS = exports.WA_ACCOUNT_SYNC_PROTOCOLS = exports.WA_PREVIEW_MEDIA_HKDF_INFO = exports.WA_MEDIA_HKDF_INFO = exports.getWaMediaHkdfInfo = exports.WA_APP_STATE_SYNC_DATA_TYPE = exports.WA_APP_STATE_KEY_TYPES = exports.WA_APP_STATE_KDF_INFO = exports.WA_APP_STATE_ERROR_CODES = exports.WA_APP_STATE_CHAT_MUTATION_SPECS = exports.WA_APP_STATE_CHAT_MUTATION_ACTIONS = exports.WA_APP_STATE_COLLECTION_STATES = exports.WA_APP_STATE_COLLECTIONS = exports.WA_RETRYABLE_ACK_CODES = exports.WA_MESSAGE_TYPES = exports.WA_MESSAGE_TAGS = exports.WA_XMLNS = exports.WA_NODE_TAGS = exports.WA_IQ_TYPES = exports.WA_STREAM_SIGNALING = exports.WA_READY_STATES = exports.WA_LOGOUT_REASONS = exports.WA_DISCONNECT_REASONS = exports.WA_PAIRING_KDF_INFO = exports.WA_SIGNALING = exports.WA_COMPANION_PLATFORM_IDS = exports.WA_BROWSERS = exports.getWaCompanionPlatformId = void 0;
4
4
  var browser_1 = require("./browser");
5
5
  Object.defineProperty(exports, "getWaCompanionPlatformId", { enumerable: true, get: function () { return browser_1.getWaCompanionPlatformId; } });
6
6
  Object.defineProperty(exports, "WA_BROWSERS", { enumerable: true, get: function () { return browser_1.WA_BROWSERS; } });
@@ -24,6 +24,8 @@ Object.defineProperty(exports, "WA_RETRYABLE_ACK_CODES", { enumerable: true, get
24
24
  var appstate_1 = require("./appstate");
25
25
  Object.defineProperty(exports, "WA_APP_STATE_COLLECTIONS", { enumerable: true, get: function () { return appstate_1.WA_APP_STATE_COLLECTIONS; } });
26
26
  Object.defineProperty(exports, "WA_APP_STATE_COLLECTION_STATES", { enumerable: true, get: function () { return appstate_1.WA_APP_STATE_COLLECTION_STATES; } });
27
+ Object.defineProperty(exports, "WA_APP_STATE_CHAT_MUTATION_ACTIONS", { enumerable: true, get: function () { return appstate_1.WA_APP_STATE_CHAT_MUTATION_ACTIONS; } });
28
+ Object.defineProperty(exports, "WA_APP_STATE_CHAT_MUTATION_SPECS", { enumerable: true, get: function () { return appstate_1.WA_APP_STATE_CHAT_MUTATION_SPECS; } });
27
29
  Object.defineProperty(exports, "WA_APP_STATE_ERROR_CODES", { enumerable: true, get: function () { return appstate_1.WA_APP_STATE_ERROR_CODES; } });
28
30
  Object.defineProperty(exports, "WA_APP_STATE_KDF_INFO", { enumerable: true, get: function () { return appstate_1.WA_APP_STATE_KDF_INFO; } });
29
31
  Object.defineProperty(exports, "WA_APP_STATE_KEY_TYPES", { enumerable: true, get: function () { return appstate_1.WA_APP_STATE_KEY_TYPES; } });
@@ -44,3 +46,7 @@ var defaults_1 = require("./defaults");
44
46
  Object.defineProperty(exports, "WA_DEFAULTS", { enumerable: true, get: function () { return defaults_1.WA_DEFAULTS; } });
45
47
  var group_1 = require("./group");
46
48
  Object.defineProperty(exports, "WA_GROUP_PARTICIPANT_TYPES", { enumerable: true, get: function () { return group_1.WA_GROUP_PARTICIPANT_TYPES; } });
49
+ var usync_1 = require("./usync");
50
+ Object.defineProperty(exports, "WA_USYNC_CONTEXTS", { enumerable: true, get: function () { return usync_1.WA_USYNC_CONTEXTS; } });
51
+ Object.defineProperty(exports, "WA_USYNC_DEFAULTS", { enumerable: true, get: function () { return usync_1.WA_USYNC_DEFAULTS; } });
52
+ Object.defineProperty(exports, "WA_USYNC_MODES", { enumerable: true, get: function () { return usync_1.WA_USYNC_MODES; } });
@@ -1,47 +1,21 @@
1
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.toUserJid = exports.splitJid = exports.parseSignalAddressFromJid = exports.parsePhoneJid = exports.normalizeRecipientJid = exports.normalizeDeviceJid = exports.isGroupJid = exports.getLoginIdentity = exports.WA_DEFAULTS = exports.WA_NOTIFICATION_TYPES = exports.WA_GROUP_NOTIFICATION_TAGS = exports.WA_SUPPORTED_DIRTY_TYPES = exports.WA_DIRTY_TYPES = exports.WA_DIRTY_PROTOCOLS = exports.WA_ACCOUNT_SYNC_PROTOCOLS = exports.WA_PREVIEW_MEDIA_HKDF_INFO = exports.WA_MEDIA_HKDF_INFO = exports.getWaMediaHkdfInfo = exports.WA_APP_STATE_SYNC_DATA_TYPE = exports.WA_APP_STATE_KEY_TYPES = exports.WA_APP_STATE_KDF_INFO = exports.WA_APP_STATE_ERROR_CODES = exports.WA_APP_STATE_COLLECTION_STATES = exports.WA_APP_STATE_COLLECTIONS = exports.WA_RETRYABLE_ACK_CODES = exports.WA_MESSAGE_TYPES = exports.WA_MESSAGE_TAGS = exports.WA_XMLNS = exports.WA_NODE_TAGS = exports.WA_IQ_TYPES = exports.WA_STREAM_SIGNALING = exports.WA_READY_STATES = exports.WA_LOGOUT_REASONS = exports.WA_DISCONNECT_REASONS = exports.WA_PAIRING_KDF_INFO = exports.WA_SIGNALING = exports.WA_COMPANION_PLATFORM_IDS = exports.WA_BROWSERS = exports.getWaCompanionPlatformId = void 0;
4
- var browser_1 = require("./browser");
5
- Object.defineProperty(exports, "getWaCompanionPlatformId", { enumerable: true, get: function () { return browser_1.getWaCompanionPlatformId; } });
6
- Object.defineProperty(exports, "WA_BROWSERS", { enumerable: true, get: function () { return browser_1.WA_BROWSERS; } });
7
- Object.defineProperty(exports, "WA_COMPANION_PLATFORM_IDS", { enumerable: true, get: function () { return browser_1.WA_COMPANION_PLATFORM_IDS; } });
8
- var auth_1 = require("./auth");
9
- Object.defineProperty(exports, "WA_SIGNALING", { enumerable: true, get: function () { return auth_1.WA_SIGNALING; } });
10
- Object.defineProperty(exports, "WA_PAIRING_KDF_INFO", { enumerable: true, get: function () { return auth_1.WA_PAIRING_KDF_INFO; } });
11
- var stream_1 = require("./stream");
12
- Object.defineProperty(exports, "WA_DISCONNECT_REASONS", { enumerable: true, get: function () { return stream_1.WA_DISCONNECT_REASONS; } });
13
- Object.defineProperty(exports, "WA_LOGOUT_REASONS", { enumerable: true, get: function () { return stream_1.WA_LOGOUT_REASONS; } });
14
- Object.defineProperty(exports, "WA_READY_STATES", { enumerable: true, get: function () { return stream_1.WA_READY_STATES; } });
15
- Object.defineProperty(exports, "WA_STREAM_SIGNALING", { enumerable: true, get: function () { return stream_1.WA_STREAM_SIGNALING; } });
16
- var nodes_1 = require("./nodes");
17
- Object.defineProperty(exports, "WA_IQ_TYPES", { enumerable: true, get: function () { return nodes_1.WA_IQ_TYPES; } });
18
- Object.defineProperty(exports, "WA_NODE_TAGS", { enumerable: true, get: function () { return nodes_1.WA_NODE_TAGS; } });
19
- Object.defineProperty(exports, "WA_XMLNS", { enumerable: true, get: function () { return nodes_1.WA_XMLNS; } });
20
- var message_1 = require("./message");
21
- Object.defineProperty(exports, "WA_MESSAGE_TAGS", { enumerable: true, get: function () { return message_1.WA_MESSAGE_TAGS; } });
22
- Object.defineProperty(exports, "WA_MESSAGE_TYPES", { enumerable: true, get: function () { return message_1.WA_MESSAGE_TYPES; } });
23
- Object.defineProperty(exports, "WA_RETRYABLE_ACK_CODES", { enumerable: true, get: function () { return message_1.WA_RETRYABLE_ACK_CODES; } });
24
- var appstate_1 = require("./appstate");
25
- Object.defineProperty(exports, "WA_APP_STATE_COLLECTIONS", { enumerable: true, get: function () { return appstate_1.WA_APP_STATE_COLLECTIONS; } });
26
- Object.defineProperty(exports, "WA_APP_STATE_COLLECTION_STATES", { enumerable: true, get: function () { return appstate_1.WA_APP_STATE_COLLECTION_STATES; } });
27
- Object.defineProperty(exports, "WA_APP_STATE_ERROR_CODES", { enumerable: true, get: function () { return appstate_1.WA_APP_STATE_ERROR_CODES; } });
28
- Object.defineProperty(exports, "WA_APP_STATE_KDF_INFO", { enumerable: true, get: function () { return appstate_1.WA_APP_STATE_KDF_INFO; } });
29
- Object.defineProperty(exports, "WA_APP_STATE_KEY_TYPES", { enumerable: true, get: function () { return appstate_1.WA_APP_STATE_KEY_TYPES; } });
30
- Object.defineProperty(exports, "WA_APP_STATE_SYNC_DATA_TYPE", { enumerable: true, get: function () { return appstate_1.WA_APP_STATE_SYNC_DATA_TYPE; } });
31
- var media_1 = require("./media");
32
- Object.defineProperty(exports, "getWaMediaHkdfInfo", { enumerable: true, get: function () { return media_1.getWaMediaHkdfInfo; } });
33
- Object.defineProperty(exports, "WA_MEDIA_HKDF_INFO", { enumerable: true, get: function () { return media_1.WA_MEDIA_HKDF_INFO; } });
34
- Object.defineProperty(exports, "WA_PREVIEW_MEDIA_HKDF_INFO", { enumerable: true, get: function () { return media_1.WA_PREVIEW_MEDIA_HKDF_INFO; } });
35
- var dirty_1 = require("./dirty");
36
- Object.defineProperty(exports, "WA_ACCOUNT_SYNC_PROTOCOLS", { enumerable: true, get: function () { return dirty_1.WA_ACCOUNT_SYNC_PROTOCOLS; } });
37
- Object.defineProperty(exports, "WA_DIRTY_PROTOCOLS", { enumerable: true, get: function () { return dirty_1.WA_DIRTY_PROTOCOLS; } });
38
- Object.defineProperty(exports, "WA_DIRTY_TYPES", { enumerable: true, get: function () { return dirty_1.WA_DIRTY_TYPES; } });
39
- Object.defineProperty(exports, "WA_SUPPORTED_DIRTY_TYPES", { enumerable: true, get: function () { return dirty_1.WA_SUPPORTED_DIRTY_TYPES; } });
40
- var notification_1 = require("./notification");
41
- Object.defineProperty(exports, "WA_GROUP_NOTIFICATION_TAGS", { enumerable: true, get: function () { return notification_1.WA_GROUP_NOTIFICATION_TAGS; } });
42
- Object.defineProperty(exports, "WA_NOTIFICATION_TYPES", { enumerable: true, get: function () { return notification_1.WA_NOTIFICATION_TYPES; } });
43
- var defaults_1 = require("./defaults");
44
- Object.defineProperty(exports, "WA_DEFAULTS", { enumerable: true, get: function () { return defaults_1.WA_DEFAULTS; } });
17
+ exports.WA_USYNC_MODES = exports.WA_USYNC_DEFAULTS = exports.WA_USYNC_CONTEXTS = exports.toUserJid = exports.splitJid = exports.parseSignalAddressFromJid = exports.parsePhoneJid = exports.normalizeRecipientJid = exports.normalizeDeviceJid = exports.isGroupJid = exports.getLoginIdentity = void 0;
18
+ __exportStar(require("./constants"), exports);
45
19
  var jid_1 = require("./jid");
46
20
  Object.defineProperty(exports, "getLoginIdentity", { enumerable: true, get: function () { return jid_1.getLoginIdentity; } });
47
21
  Object.defineProperty(exports, "isGroupJid", { enumerable: true, get: function () { return jid_1.isGroupJid; } });
@@ -51,3 +25,7 @@ Object.defineProperty(exports, "parsePhoneJid", { enumerable: true, get: functio
51
25
  Object.defineProperty(exports, "parseSignalAddressFromJid", { enumerable: true, get: function () { return jid_1.parseSignalAddressFromJid; } });
52
26
  Object.defineProperty(exports, "splitJid", { enumerable: true, get: function () { return jid_1.splitJid; } });
53
27
  Object.defineProperty(exports, "toUserJid", { enumerable: true, get: function () { return jid_1.toUserJid; } });
28
+ var usync_1 = require("./usync");
29
+ Object.defineProperty(exports, "WA_USYNC_CONTEXTS", { enumerable: true, get: function () { return usync_1.WA_USYNC_CONTEXTS; } });
30
+ Object.defineProperty(exports, "WA_USYNC_DEFAULTS", { enumerable: true, get: function () { return usync_1.WA_USYNC_DEFAULTS; } });
31
+ Object.defineProperty(exports, "WA_USYNC_MODES", { enumerable: true, get: function () { return usync_1.WA_USYNC_MODES; } });