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