zapo-js 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (468) hide show
  1. package/README.md +12 -4
  2. package/dist/appstate/WaAppStateCrypto.js +1 -1
  3. package/dist/appstate/WaAppStateSyncClient.js +138 -93
  4. package/dist/appstate/{store/sqlite.js → encoding.js} +13 -8
  5. package/dist/appstate/index.js +8 -6
  6. package/dist/appstate/utils.js +0 -5
  7. package/dist/auth/WaAuthClient.js +36 -47
  8. package/dist/auth/flow/WaAuthCredentialsFlow.js +7 -7
  9. package/dist/auth/index.js +1 -6
  10. package/dist/auth/pairing/WaPairingCodeCrypto.js +6 -4
  11. package/dist/auth/pairing/WaPairingFlow.js +13 -3
  12. package/dist/client/WaClient.js +225 -101
  13. package/dist/client/WaClientFactory.js +294 -44
  14. package/dist/client/connection/WaConnectionManager.js +19 -10
  15. package/dist/client/coordinators/WaBusinessCoordinator.js +241 -0
  16. package/dist/client/coordinators/WaGroupCoordinator.js +11 -7
  17. package/dist/client/coordinators/WaIncomingNodeCoordinator.js +1 -0
  18. package/dist/client/coordinators/WaMessageDispatchCoordinator.js +292 -99
  19. package/dist/client/coordinators/WaPassiveTasksCoordinator.js +74 -31
  20. package/dist/client/coordinators/WaPrivacyCoordinator.js +134 -0
  21. package/dist/client/coordinators/WaProfileCoordinator.js +212 -0
  22. package/dist/client/coordinators/WaRetryCoordinator.js +179 -27
  23. package/dist/client/coordinators/WaStreamControlCoordinator.js +18 -11
  24. package/dist/client/coordinators/WaTrustedContactTokenCoordinator.js +166 -0
  25. package/dist/client/dirty.js +40 -20
  26. package/dist/client/events/devices.js +72 -0
  27. package/dist/client/events/group.js +3 -11
  28. package/dist/client/events/identity.js +22 -0
  29. package/dist/client/events/privacy-token.js +39 -0
  30. package/dist/client/history-sync.js +50 -9
  31. package/dist/client/incoming.js +37 -7
  32. package/dist/client/mailbox.js +24 -23
  33. package/dist/client/messages.js +107 -31
  34. package/dist/client/messaging/fanout.js +21 -11
  35. package/dist/client/messaging/participants.js +6 -4
  36. package/dist/client/persistence/WriteBehindPersistence.js +129 -0
  37. package/dist/client/tokens/cs-token.js +50 -0
  38. package/dist/client/tokens/tc-token.js +25 -0
  39. package/dist/crypto/core/index.js +2 -2
  40. package/dist/crypto/core/keys.js +4 -4
  41. package/dist/crypto/core/nonce.js +2 -0
  42. package/dist/crypto/core/primitives.js +0 -8
  43. package/dist/crypto/core/random.js +22 -0
  44. package/dist/crypto/curves/X25519.js +25 -6
  45. package/dist/crypto/index.js +3 -0
  46. package/dist/crypto/math/constants.js +13 -36
  47. package/dist/crypto/math/edwards.js +171 -44
  48. package/dist/crypto/math/fe.js +706 -0
  49. package/dist/crypto/math/mod.js +10 -3
  50. package/dist/esm/appstate/WaAppStateCrypto.js +1 -1
  51. package/dist/esm/appstate/WaAppStateSyncClient.js +138 -93
  52. package/dist/esm/appstate/{store/sqlite.js → encoding.js} +13 -8
  53. package/dist/esm/appstate/index.js +2 -2
  54. package/dist/esm/appstate/utils.js +2 -5
  55. package/dist/esm/auth/WaAuthClient.js +36 -47
  56. package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +7 -7
  57. package/dist/esm/auth/index.js +0 -2
  58. package/dist/esm/auth/pairing/WaPairingCodeCrypto.js +6 -4
  59. package/dist/esm/auth/pairing/WaPairingFlow.js +14 -4
  60. package/dist/esm/client/WaClient.js +225 -101
  61. package/dist/esm/client/WaClientFactory.js +295 -45
  62. package/dist/esm/client/connection/WaConnectionManager.js +19 -10
  63. package/dist/esm/client/coordinators/WaBusinessCoordinator.js +238 -0
  64. package/dist/esm/client/coordinators/WaGroupCoordinator.js +11 -7
  65. package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +1 -0
  66. package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +295 -102
  67. package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +74 -31
  68. package/dist/esm/client/coordinators/WaPrivacyCoordinator.js +131 -0
  69. package/dist/esm/client/coordinators/WaProfileCoordinator.js +209 -0
  70. package/dist/esm/client/coordinators/WaRetryCoordinator.js +181 -29
  71. package/dist/esm/client/coordinators/WaStreamControlCoordinator.js +19 -12
  72. package/dist/esm/client/coordinators/WaTrustedContactTokenCoordinator.js +162 -0
  73. package/dist/esm/client/dirty.js +40 -20
  74. package/dist/esm/client/events/devices.js +68 -0
  75. package/dist/esm/client/events/group.js +3 -11
  76. package/dist/esm/client/events/identity.js +19 -0
  77. package/dist/esm/client/events/privacy-token.js +36 -0
  78. package/dist/esm/client/history-sync.js +50 -9
  79. package/dist/esm/client/incoming.js +38 -8
  80. package/dist/esm/client/mailbox.js +24 -23
  81. package/dist/esm/client/messages.js +108 -32
  82. package/dist/esm/client/messaging/fanout.js +22 -12
  83. package/dist/esm/client/messaging/participants.js +6 -4
  84. package/dist/esm/client/persistence/WriteBehindPersistence.js +125 -0
  85. package/dist/esm/client/tokens/cs-token.js +46 -0
  86. package/dist/esm/client/tokens/tc-token.js +18 -0
  87. package/dist/esm/crypto/core/index.js +2 -2
  88. package/dist/esm/crypto/core/keys.js +1 -1
  89. package/dist/esm/crypto/core/nonce.js +2 -0
  90. package/dist/esm/crypto/core/primitives.js +0 -7
  91. package/dist/esm/crypto/core/random.js +22 -1
  92. package/dist/esm/crypto/curves/X25519.js +25 -6
  93. package/dist/esm/crypto/index.js +1 -0
  94. package/dist/esm/crypto/math/constants.js +12 -35
  95. package/dist/esm/crypto/math/edwards.js +174 -47
  96. package/dist/esm/crypto/math/fe.js +691 -0
  97. package/dist/esm/crypto/math/mod.js +10 -1
  98. package/dist/esm/index.js +1 -1
  99. package/dist/esm/infra/perf/BackgroundQueue.js +478 -0
  100. package/dist/esm/infra/perf/BoundedTaskQueue.js +3 -1
  101. package/dist/esm/infra/perf/PromiseDedup.js +20 -0
  102. package/dist/esm/infra/perf/SharedExclusiveGate.js +109 -0
  103. package/dist/esm/infra/perf/StoreLock.js +77 -0
  104. package/dist/esm/media/WaMediaCrypto.js +95 -13
  105. package/dist/esm/media/WaMediaTransferClient.js +39 -47
  106. package/dist/esm/media/constants.js +2 -1
  107. package/dist/esm/message/WaMessageClient.js +26 -19
  108. package/dist/esm/message/content.js +195 -9
  109. package/dist/esm/message/icdc.js +76 -0
  110. package/dist/esm/message/incoming.js +24 -12
  111. package/dist/esm/message/phash.js +3 -1
  112. package/dist/esm/message/reporting-token.js +14 -27
  113. package/dist/esm/protocol/appstate.js +9 -40
  114. package/dist/esm/protocol/browser.js +10 -18
  115. package/dist/esm/protocol/constants.js +5 -3
  116. package/dist/esm/protocol/defaults.js +6 -0
  117. package/dist/esm/protocol/index.js +1 -2
  118. package/dist/esm/protocol/jid.js +105 -36
  119. package/dist/esm/protocol/message.js +61 -1
  120. package/dist/esm/protocol/nodes.js +2 -0
  121. package/dist/esm/protocol/notification.js +3 -1
  122. package/dist/esm/protocol/privacy-token.js +17 -0
  123. package/dist/esm/protocol/privacy.js +55 -0
  124. package/dist/esm/protocol/stream.js +26 -1
  125. package/dist/esm/retry/codec.js +216 -0
  126. package/dist/esm/retry/constants.js +1 -1
  127. package/dist/esm/retry/index.js +2 -2
  128. package/dist/esm/retry/parse.js +50 -30
  129. package/dist/esm/retry/replay.js +11 -7
  130. package/dist/esm/retry/tracker.js +50 -12
  131. package/dist/esm/signal/api/SignalDeviceSyncApi.js +49 -32
  132. package/dist/esm/signal/api/SignalDigestSyncApi.js +13 -9
  133. package/dist/esm/signal/api/SignalIdentitySyncApi.js +26 -11
  134. package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +18 -7
  135. package/dist/esm/signal/api/SignalRotateKeyApi.js +4 -2
  136. package/dist/esm/signal/api/SignalSessionSyncApi.js +16 -7
  137. package/dist/esm/signal/api/result-map.js +10 -0
  138. package/dist/esm/signal/constants.js +0 -4
  139. package/dist/esm/signal/crypto/WaAdvSignature.js +12 -6
  140. package/dist/esm/signal/{store/sqlite.js → encoding.js} +78 -24
  141. package/dist/esm/signal/group/SenderKeyCodec.js +3 -2
  142. package/dist/esm/signal/group/SenderKeyManager.js +125 -106
  143. package/dist/esm/signal/index.js +1 -0
  144. package/dist/esm/signal/registration/keygen.js +6 -2
  145. package/dist/esm/signal/registration/utils.js +1 -0
  146. package/dist/esm/signal/session/SignalProtocol.js +150 -74
  147. package/dist/esm/signal/session/resolver.js +137 -102
  148. package/dist/esm/store/contracts/privacy-token.store.js +1 -0
  149. package/dist/esm/store/createStore.js +101 -187
  150. package/dist/esm/store/index.js +1 -10
  151. package/dist/esm/store/locks/appstate.lock.js +26 -0
  152. package/dist/esm/store/locks/auth.lock.js +15 -0
  153. package/dist/esm/store/locks/contact.lock.js +20 -0
  154. package/dist/esm/store/locks/device-list.lock.js +20 -0
  155. package/dist/esm/store/locks/message.lock.js +21 -0
  156. package/dist/esm/store/locks/participants.lock.js +20 -0
  157. package/dist/esm/store/locks/privacy-token.lock.js +18 -0
  158. package/dist/esm/store/locks/retry.lock.js +29 -0
  159. package/dist/esm/store/locks/sender-key.lock.js +52 -0
  160. package/dist/esm/store/locks/signal.lock.js +63 -0
  161. package/dist/esm/store/locks/thread.lock.js +21 -0
  162. package/dist/esm/store/noop.store.js +1 -1
  163. package/dist/esm/store/providers/memory/appstate.store.js +22 -24
  164. package/dist/esm/store/providers/memory/device-list.store.js +10 -5
  165. package/dist/esm/store/providers/memory/privacy-token.store.js +43 -0
  166. package/dist/esm/store/providers/memory/retry.store.js +77 -2
  167. package/dist/esm/store/providers/memory/sender-key.store.js +6 -1
  168. package/dist/esm/store/providers/memory/signal.store.js +36 -19
  169. package/dist/esm/transport/WaComms.js +3 -1
  170. package/dist/esm/transport/WaWebSocket.js +0 -6
  171. package/dist/esm/transport/binary/constants.js +0 -30
  172. package/dist/esm/transport/binary/decoder.js +4 -4
  173. package/dist/esm/transport/binary/encoder.js +8 -15
  174. package/dist/esm/transport/binary/index.js +0 -1
  175. package/dist/esm/transport/node/WaNodeOrchestrator.js +25 -19
  176. package/dist/esm/transport/node/builders/business.js +129 -0
  177. package/dist/esm/transport/node/builders/global.js +370 -0
  178. package/dist/esm/transport/node/builders/index.js +5 -2
  179. package/dist/esm/transport/node/builders/message.js +63 -239
  180. package/dist/esm/transport/node/builders/pairing.js +0 -24
  181. package/dist/esm/transport/node/builders/privacy-token.js +41 -0
  182. package/dist/esm/transport/node/builders/privacy.js +48 -0
  183. package/dist/esm/transport/node/builders/profile.js +70 -0
  184. package/dist/esm/transport/node/builders/retry.js +10 -22
  185. package/dist/esm/transport/node/builders/usync.js +6 -2
  186. package/dist/esm/transport/node/helpers.js +19 -1
  187. package/dist/esm/transport/node/usync.js +3 -33
  188. package/dist/esm/transport/node/xml.js +35 -14
  189. package/dist/esm/transport/noise/WaClientPayload.js +10 -10
  190. package/dist/esm/transport/noise/WaNoiseCert.js +3 -3
  191. package/dist/esm/transport/noise/WaNoiseSession.js +64 -23
  192. package/dist/esm/transport/noise/WaNoiseSocket.js +8 -4
  193. package/dist/esm/transport/stream/parse.js +8 -4
  194. package/dist/esm/util/bytes.js +22 -18
  195. package/dist/esm/util/index.js +5 -0
  196. package/dist/esm/util/primitives.js +3 -2
  197. package/dist/index.js +7 -1
  198. package/dist/infra/perf/BackgroundQueue.js +482 -0
  199. package/dist/infra/perf/BoundedTaskQueue.js +3 -1
  200. package/dist/infra/perf/PromiseDedup.js +24 -0
  201. package/dist/infra/perf/SharedExclusiveGate.js +113 -0
  202. package/dist/infra/perf/StoreLock.js +81 -0
  203. package/dist/media/WaMediaCrypto.js +94 -12
  204. package/dist/media/WaMediaTransferClient.js +39 -47
  205. package/dist/media/constants.js +2 -1
  206. package/dist/message/WaMessageClient.js +26 -19
  207. package/dist/message/content.js +198 -9
  208. package/dist/message/icdc.js +81 -0
  209. package/dist/message/incoming.js +24 -12
  210. package/dist/message/phash.js +3 -1
  211. package/dist/message/reporting-token.js +14 -28
  212. package/dist/protocol/appstate.js +10 -41
  213. package/dist/protocol/browser.js +10 -18
  214. package/dist/protocol/constants.js +21 -2
  215. package/dist/protocol/defaults.js +6 -0
  216. package/dist/protocol/index.js +8 -5
  217. package/dist/protocol/jid.js +111 -36
  218. package/dist/protocol/message.js +62 -2
  219. package/dist/protocol/nodes.js +2 -0
  220. package/dist/protocol/notification.js +3 -1
  221. package/dist/protocol/privacy-token.js +20 -0
  222. package/dist/protocol/privacy.js +58 -0
  223. package/dist/protocol/stream.js +27 -2
  224. package/dist/retry/codec.js +220 -0
  225. package/dist/retry/constants.js +1 -1
  226. package/dist/retry/index.js +5 -5
  227. package/dist/retry/parse.js +51 -30
  228. package/dist/retry/replay.js +10 -6
  229. package/dist/retry/tracker.js +50 -12
  230. package/dist/signal/api/SignalDeviceSyncApi.js +48 -31
  231. package/dist/signal/api/SignalDigestSyncApi.js +13 -9
  232. package/dist/signal/api/SignalIdentitySyncApi.js +25 -10
  233. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +17 -6
  234. package/dist/signal/api/SignalRotateKeyApi.js +4 -2
  235. package/dist/signal/api/SignalSessionSyncApi.js +16 -7
  236. package/dist/signal/api/result-map.js +13 -0
  237. package/dist/signal/constants.js +1 -5
  238. package/dist/signal/crypto/WaAdvSignature.js +11 -5
  239. package/dist/signal/{store/sqlite.js → encoding.js} +79 -25
  240. package/dist/signal/group/SenderKeyCodec.js +4 -3
  241. package/dist/signal/group/SenderKeyManager.js +125 -106
  242. package/dist/signal/index.js +13 -1
  243. package/dist/signal/registration/keygen.js +6 -2
  244. package/dist/signal/registration/utils.js +1 -0
  245. package/dist/signal/session/SignalProtocol.js +150 -74
  246. package/dist/signal/session/resolver.js +135 -100
  247. package/dist/store/contracts/privacy-token.store.js +2 -0
  248. package/dist/store/createStore.js +101 -187
  249. package/dist/store/index.js +15 -33
  250. package/dist/store/locks/appstate.lock.js +29 -0
  251. package/dist/store/locks/auth.lock.js +18 -0
  252. package/dist/store/locks/contact.lock.js +23 -0
  253. package/dist/store/locks/device-list.lock.js +23 -0
  254. package/dist/store/locks/message.lock.js +24 -0
  255. package/dist/store/locks/participants.lock.js +23 -0
  256. package/dist/store/locks/privacy-token.lock.js +21 -0
  257. package/dist/store/locks/retry.lock.js +32 -0
  258. package/dist/store/locks/sender-key.lock.js +55 -0
  259. package/dist/store/locks/signal.lock.js +66 -0
  260. package/dist/store/locks/thread.lock.js +24 -0
  261. package/dist/store/noop.store.js +1 -1
  262. package/dist/store/providers/memory/appstate.store.js +22 -24
  263. package/dist/store/providers/memory/device-list.store.js +10 -5
  264. package/dist/store/providers/memory/privacy-token.store.js +47 -0
  265. package/dist/store/providers/memory/retry.store.js +77 -2
  266. package/dist/store/providers/memory/sender-key.store.js +6 -1
  267. package/dist/store/providers/memory/signal.store.js +36 -19
  268. package/dist/transport/WaComms.js +3 -1
  269. package/dist/transport/WaWebSocket.js +0 -6
  270. package/dist/transport/binary/constants.js +1 -31
  271. package/dist/transport/binary/decoder.js +4 -4
  272. package/dist/transport/binary/encoder.js +8 -15
  273. package/dist/transport/binary/index.js +0 -4
  274. package/dist/transport/node/WaNodeOrchestrator.js +24 -18
  275. package/dist/transport/node/builders/business.js +137 -0
  276. package/dist/transport/node/builders/global.js +375 -0
  277. package/dist/transport/node/builders/index.js +18 -9
  278. package/dist/transport/node/builders/message.js +64 -245
  279. package/dist/transport/node/builders/pairing.js +0 -26
  280. package/dist/transport/node/builders/privacy-token.js +46 -0
  281. package/dist/transport/node/builders/privacy.js +55 -0
  282. package/dist/transport/node/builders/profile.js +78 -0
  283. package/dist/transport/node/builders/retry.js +9 -21
  284. package/dist/transport/node/builders/usync.js +6 -2
  285. package/dist/transport/node/helpers.js +20 -1
  286. package/dist/transport/node/usync.js +2 -32
  287. package/dist/transport/node/xml.js +35 -14
  288. package/dist/transport/noise/WaClientPayload.js +13 -13
  289. package/dist/transport/noise/WaNoiseCert.js +2 -2
  290. package/dist/transport/noise/WaNoiseSession.js +64 -23
  291. package/dist/transport/noise/WaNoiseSocket.js +8 -4
  292. package/dist/transport/stream/parse.js +7 -3
  293. package/dist/types/appstate/encoding.d.ts +7 -0
  294. package/dist/types/appstate/index.d.ts +3 -3
  295. package/dist/types/appstate/utils.d.ts +0 -2
  296. package/dist/types/auth/flow/WaAuthCredentialsFlow.d.ts +1 -1
  297. package/dist/types/auth/index.d.ts +0 -2
  298. package/dist/types/auth/types.d.ts +1 -0
  299. package/dist/types/client/WaClient.d.ts +27 -12
  300. package/dist/types/client/WaClientFactory.d.ts +12 -4
  301. package/dist/types/client/connection/WaConnectionManager.d.ts +2 -0
  302. package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +57 -0
  303. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +3 -1
  304. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +14 -0
  305. package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +4 -0
  306. package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +26 -0
  307. package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +36 -0
  308. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +6 -0
  309. package/dist/types/client/coordinators/WaStreamControlCoordinator.d.ts +3 -2
  310. package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +45 -0
  311. package/dist/types/client/events/devices.d.ts +20 -0
  312. package/dist/types/client/events/identity.d.ts +9 -0
  313. package/dist/types/client/events/privacy-token.d.ts +7 -0
  314. package/dist/types/client/history-sync.d.ts +9 -6
  315. package/dist/types/client/incoming.d.ts +3 -1
  316. package/dist/types/client/index.d.ts +1 -1
  317. package/dist/types/client/mailbox.d.ts +3 -5
  318. package/dist/types/client/messages.d.ts +1 -2
  319. package/dist/types/client/persistence/WriteBehindPersistence.d.ts +34 -0
  320. package/dist/types/client/tokens/cs-token.d.ts +10 -0
  321. package/dist/types/client/tokens/tc-token.d.ts +5 -0
  322. package/dist/types/client/types.d.ts +51 -3
  323. package/dist/types/crypto/core/index.d.ts +2 -2
  324. package/dist/types/crypto/core/nonce.d.ts +2 -0
  325. package/dist/types/crypto/core/primitives.d.ts +0 -1
  326. package/dist/types/crypto/core/random.d.ts +1 -0
  327. package/dist/types/crypto/index.d.ts +1 -0
  328. package/dist/types/crypto/math/constants.d.ts +4 -2
  329. package/dist/types/crypto/math/fe.d.ts +30 -0
  330. package/dist/types/crypto/math/mod.d.ts +0 -2
  331. package/dist/types/crypto/math/types.d.ts +11 -4
  332. package/dist/types/index.d.ts +5 -3
  333. package/dist/types/infra/perf/BackgroundQueue.d.ts +58 -0
  334. package/dist/types/infra/perf/PromiseDedup.d.ts +4 -0
  335. package/dist/types/infra/perf/SharedExclusiveGate.d.ts +17 -0
  336. package/dist/types/infra/perf/StoreLock.d.ts +10 -0
  337. package/dist/types/media/WaMediaCrypto.d.ts +3 -2
  338. package/dist/types/media/WaMediaTransferClient.d.ts +3 -12
  339. package/dist/types/media/constants.d.ts +1 -1
  340. package/dist/types/media/index.d.ts +1 -1
  341. package/dist/types/media/types.d.ts +10 -2
  342. package/dist/types/message/content.d.ts +8 -0
  343. package/dist/types/message/icdc.d.ts +13 -0
  344. package/dist/types/message/reporting-token.d.ts +0 -1
  345. package/dist/types/message/types.d.ts +45 -6
  346. package/dist/types/protocol/appstate.d.ts +0 -11
  347. package/dist/types/protocol/constants.d.ts +7 -3
  348. package/dist/types/protocol/defaults.d.ts +6 -0
  349. package/dist/types/protocol/index.d.ts +1 -2
  350. package/dist/types/protocol/jid.d.ts +19 -2
  351. package/dist/types/protocol/message.d.ts +60 -0
  352. package/dist/types/protocol/nodes.d.ts +2 -0
  353. package/dist/types/protocol/notification.d.ts +2 -0
  354. package/dist/types/protocol/privacy-token.d.ts +17 -0
  355. package/dist/types/protocol/privacy.d.ts +75 -0
  356. package/dist/types/protocol/stream.d.ts +30 -0
  357. package/dist/types/retry/codec.d.ts +3 -0
  358. package/dist/types/retry/index.d.ts +3 -3
  359. package/dist/types/retry/parse.d.ts +5 -2
  360. package/dist/types/retry/tracker.d.ts +1 -0
  361. package/dist/types/retry/types.d.ts +6 -1
  362. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +2 -1
  363. package/dist/types/signal/api/SignalDigestSyncApi.d.ts +6 -0
  364. package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +2 -0
  365. package/dist/types/signal/api/SignalRotateKeyApi.d.ts +4 -5
  366. package/dist/types/signal/api/SignalSessionSyncApi.d.ts +8 -6
  367. package/dist/types/signal/api/result-map.d.ts +1 -0
  368. package/dist/types/signal/constants.d.ts +0 -3
  369. package/dist/types/signal/{store/sqlite.d.ts → encoding.d.ts} +3 -3
  370. package/dist/types/signal/group/SenderKeyManager.d.ts +10 -5
  371. package/dist/types/signal/index.d.ts +2 -0
  372. package/dist/types/signal/session/SignalProtocol.d.ts +10 -4
  373. package/dist/types/signal/session/resolver.d.ts +7 -2
  374. package/dist/types/store/contracts/appstate.store.d.ts +1 -1
  375. package/dist/types/store/contracts/privacy-token.store.d.ts +16 -0
  376. package/dist/types/store/contracts/retry.store.d.ts +7 -0
  377. package/dist/types/store/contracts/signal.store.d.ts +7 -0
  378. package/dist/types/store/createStore.d.ts +1 -1
  379. package/dist/types/store/index.d.ts +5 -13
  380. package/dist/types/store/locks/appstate.lock.d.ts +3 -0
  381. package/dist/types/store/locks/auth.lock.d.ts +3 -0
  382. package/dist/types/store/locks/contact.lock.d.ts +3 -0
  383. package/dist/types/store/locks/device-list.lock.d.ts +2 -0
  384. package/dist/types/store/locks/message.lock.d.ts +3 -0
  385. package/dist/types/store/locks/participants.lock.d.ts +2 -0
  386. package/dist/types/store/locks/privacy-token.lock.d.ts +2 -0
  387. package/dist/types/store/locks/retry.lock.d.ts +2 -0
  388. package/dist/types/store/locks/sender-key.lock.d.ts +3 -0
  389. package/dist/types/store/locks/signal.lock.d.ts +3 -0
  390. package/dist/types/store/locks/thread.lock.d.ts +3 -0
  391. package/dist/types/store/providers/memory/appstate.store.d.ts +1 -1
  392. package/dist/types/store/providers/memory/privacy-token.store.d.ts +13 -0
  393. package/dist/types/store/providers/memory/retry.store.d.ts +8 -0
  394. package/dist/types/store/providers/memory/signal.store.d.ts +2 -1
  395. package/dist/types/store/types.d.ts +49 -61
  396. package/dist/types/transport/WaWebSocket.d.ts +0 -1
  397. package/dist/types/transport/binary/constants.d.ts +0 -30
  398. package/dist/types/transport/binary/index.d.ts +0 -1
  399. package/dist/types/transport/node/WaNodeOrchestrator.d.ts +3 -4
  400. package/dist/types/transport/node/builders/business.d.ts +29 -0
  401. package/dist/types/transport/node/builders/global.d.ts +102 -0
  402. package/dist/types/transport/node/builders/index.d.ts +5 -2
  403. package/dist/types/transport/node/builders/message.d.ts +8 -7
  404. package/dist/types/transport/node/builders/pairing.d.ts +0 -2
  405. package/dist/types/transport/node/builders/privacy-token.d.ts +9 -0
  406. package/dist/types/transport/node/builders/privacy.d.ts +7 -0
  407. package/dist/types/transport/node/builders/profile.d.ts +8 -0
  408. package/dist/types/transport/node/builders/retry.d.ts +0 -1
  409. package/dist/types/transport/node/helpers.d.ts +5 -0
  410. package/dist/types/transport/noise/WaNoiseSession.d.ts +3 -2
  411. package/dist/types/transport/noise/WaNoiseSocket.d.ts +4 -2
  412. package/dist/types/util/bytes.d.ts +1 -1
  413. package/dist/types/util/index.d.ts +5 -0
  414. package/dist/types/util/primitives.d.ts +0 -1
  415. package/dist/util/bytes.js +22 -18
  416. package/dist/util/index.js +23 -0
  417. package/dist/util/primitives.js +2 -2
  418. package/package.json +29 -7
  419. package/proto/index.js +1 -1
  420. package/dist/crypto/core/constants.js +0 -4
  421. package/dist/esm/crypto/core/constants.js +0 -1
  422. package/dist/esm/retry/outbound.js +0 -82
  423. package/dist/esm/store/providers/sqlite/BaseSqliteStore.js +0 -37
  424. package/dist/esm/store/providers/sqlite/appstate.store.js +0 -250
  425. package/dist/esm/store/providers/sqlite/auth.store.js +0 -176
  426. package/dist/esm/store/providers/sqlite/connection.js +0 -245
  427. package/dist/esm/store/providers/sqlite/contact.store.js +0 -74
  428. package/dist/esm/store/providers/sqlite/device-list.store.js +0 -127
  429. package/dist/esm/store/providers/sqlite/message.store.js +0 -132
  430. package/dist/esm/store/providers/sqlite/migrations.js +0 -347
  431. package/dist/esm/store/providers/sqlite/participants.store.js +0 -77
  432. package/dist/esm/store/providers/sqlite/retry.store.js +0 -141
  433. package/dist/esm/store/providers/sqlite/sender-key.store.js +0 -198
  434. package/dist/esm/store/providers/sqlite/signal.store.js +0 -435
  435. package/dist/esm/store/providers/sqlite/table-names.js +0 -107
  436. package/dist/esm/store/providers/sqlite/thread.store.js +0 -85
  437. package/dist/retry/outbound.js +0 -87
  438. package/dist/store/providers/sqlite/BaseSqliteStore.js +0 -41
  439. package/dist/store/providers/sqlite/appstate.store.js +0 -254
  440. package/dist/store/providers/sqlite/auth.store.js +0 -180
  441. package/dist/store/providers/sqlite/connection.js +0 -281
  442. package/dist/store/providers/sqlite/contact.store.js +0 -78
  443. package/dist/store/providers/sqlite/device-list.store.js +0 -131
  444. package/dist/store/providers/sqlite/message.store.js +0 -136
  445. package/dist/store/providers/sqlite/migrations.js +0 -350
  446. package/dist/store/providers/sqlite/participants.store.js +0 -81
  447. package/dist/store/providers/sqlite/retry.store.js +0 -145
  448. package/dist/store/providers/sqlite/sender-key.store.js +0 -202
  449. package/dist/store/providers/sqlite/signal.store.js +0 -439
  450. package/dist/store/providers/sqlite/table-names.js +0 -113
  451. package/dist/store/providers/sqlite/thread.store.js +0 -89
  452. package/dist/types/appstate/store/sqlite.d.ts +0 -7
  453. package/dist/types/crypto/core/constants.d.ts +0 -1
  454. package/dist/types/retry/outbound.d.ts +0 -4
  455. package/dist/types/store/providers/sqlite/BaseSqliteStore.d.ts +0 -12
  456. package/dist/types/store/providers/sqlite/appstate.store.d.ts +0 -17
  457. package/dist/types/store/providers/sqlite/auth.store.d.ts +0 -10
  458. package/dist/types/store/providers/sqlite/connection.d.ts +0 -10
  459. package/dist/types/store/providers/sqlite/contact.store.d.ts +0 -12
  460. package/dist/types/store/providers/sqlite/device-list.store.d.ts +0 -15
  461. package/dist/types/store/providers/sqlite/message.store.d.ts +0 -13
  462. package/dist/types/store/providers/sqlite/migrations.d.ts +0 -3
  463. package/dist/types/store/providers/sqlite/participants.store.d.ts +0 -12
  464. package/dist/types/store/providers/sqlite/retry.store.d.ts +0 -15
  465. package/dist/types/store/providers/sqlite/sender-key.store.d.ts +0 -24
  466. package/dist/types/store/providers/sqlite/signal.store.d.ts +0 -53
  467. package/dist/types/store/providers/sqlite/table-names.d.ts +0 -5
  468. package/dist/types/store/providers/sqlite/thread.store.d.ts +0 -13
@@ -1,8 +1,18 @@
1
1
  import { WA_MESSAGE_TAGS, WA_MESSAGE_TYPES, WA_NODE_TAGS } from '../../../protocol/constants.js';
2
- export function buildDirectMessageFanoutNode(input) {
3
- if (input.participants.length === 0) {
4
- throw new Error('direct message fanout requires at least one participant');
2
+ function buildEncAttrs(encType, mediatype, retryCount) {
3
+ const attrs = {
4
+ v: WA_MESSAGE_TYPES.ENC_VERSION,
5
+ type: encType
6
+ };
7
+ if (mediatype) {
8
+ attrs.mediatype = mediatype;
9
+ }
10
+ if (retryCount !== undefined && retryCount > 0) {
11
+ attrs.count = String(Math.trunc(retryCount));
5
12
  }
13
+ return attrs;
14
+ }
15
+ function buildMessageAttrs(input) {
6
16
  const attrs = {
7
17
  to: input.to,
8
18
  type: input.type
@@ -10,28 +20,18 @@ export function buildDirectMessageFanoutNode(input) {
10
20
  if (input.id) {
11
21
  attrs.id = input.id;
12
22
  }
13
- const content = [
14
- {
15
- tag: WA_NODE_TAGS.PARTICIPANTS,
16
- attrs: {},
17
- content: input.participants.map((participant) => ({
18
- tag: 'to',
19
- attrs: {
20
- jid: participant.jid
21
- },
22
- content: [
23
- {
24
- tag: WA_MESSAGE_TAGS.ENC,
25
- attrs: {
26
- v: WA_MESSAGE_TYPES.ENC_VERSION,
27
- type: participant.encType
28
- },
29
- content: participant.ciphertext
30
- }
31
- ]
32
- }))
33
- }
34
- ];
23
+ if (input.edit) {
24
+ attrs.edit = input.edit;
25
+ }
26
+ if (input.phash) {
27
+ attrs.phash = input.phash;
28
+ }
29
+ if (input.addressingMode) {
30
+ attrs.addressing_mode = input.addressingMode;
31
+ }
32
+ return attrs;
33
+ }
34
+ function pushOptionalNodes(content, input) {
35
35
  if (input.deviceIdentity) {
36
36
  content.push({
37
37
  tag: WA_NODE_TAGS.DEVICE_IDENTITY,
@@ -39,32 +39,23 @@ export function buildDirectMessageFanoutNode(input) {
39
39
  content: input.deviceIdentity
40
40
  });
41
41
  }
42
+ if (input.metaNode) {
43
+ content.push(input.metaNode);
44
+ }
42
45
  if (input.reportingNode) {
43
46
  content.push(input.reportingNode);
44
47
  }
45
- return {
46
- tag: WA_MESSAGE_TAGS.MESSAGE,
47
- attrs,
48
- content
49
- };
50
- }
51
- export function buildGroupSenderKeyMessageNode(input) {
52
- const attrs = {
53
- to: input.to,
54
- type: input.type
55
- };
56
- if (input.id) {
57
- attrs.id = input.id;
48
+ if (input.privacyTokenNode) {
49
+ content.push(input.privacyTokenNode);
58
50
  }
59
- if (input.phash) {
60
- attrs.phash = input.phash;
61
- }
62
- if (input.addressingMode) {
63
- attrs.addressing_mode = input.addressingMode;
51
+ }
52
+ export function buildDirectMessageFanoutNode(input) {
53
+ if (input.participants.length === 0) {
54
+ throw new Error('direct message fanout requires at least one participant');
64
55
  }
65
- const content = [];
66
- if (input.participants.length > 0) {
67
- content.push({
56
+ const attrs = buildMessageAttrs(input);
57
+ const content = [
58
+ {
68
59
  tag: WA_NODE_TAGS.PARTICIPANTS,
69
60
  attrs: {},
70
61
  content: input.participants.map((participant) => ({
@@ -75,59 +66,25 @@ export function buildGroupSenderKeyMessageNode(input) {
75
66
  content: [
76
67
  {
77
68
  tag: WA_MESSAGE_TAGS.ENC,
78
- attrs: {
79
- v: WA_MESSAGE_TYPES.ENC_VERSION,
80
- type: participant.encType
81
- },
69
+ attrs: buildEncAttrs(participant.encType, input.mediatype),
82
70
  content: participant.ciphertext
83
71
  }
84
72
  ]
85
73
  }))
86
- });
87
- }
88
- content.push({
89
- tag: WA_MESSAGE_TAGS.ENC,
90
- attrs: {
91
- v: WA_MESSAGE_TYPES.ENC_VERSION,
92
- type: 'skmsg'
93
- },
94
- content: input.groupCiphertext
95
- });
96
- if (input.deviceIdentity) {
97
- content.push({
98
- tag: WA_NODE_TAGS.DEVICE_IDENTITY,
99
- attrs: {},
100
- content: input.deviceIdentity
101
- });
102
- }
103
- if (input.reportingNode) {
104
- content.push(input.reportingNode);
105
- }
74
+ }
75
+ ];
76
+ pushOptionalNodes(content, input);
106
77
  return {
107
78
  tag: WA_MESSAGE_TAGS.MESSAGE,
108
79
  attrs,
109
80
  content
110
81
  };
111
82
  }
112
- export function buildGroupDirectMessageNode(input) {
113
- if (input.participants.length === 0) {
114
- throw new Error('group direct message requires at least one participant');
115
- }
116
- const attrs = {
117
- to: input.to,
118
- type: input.type
119
- };
120
- if (input.id) {
121
- attrs.id = input.id;
122
- }
123
- if (input.phash) {
124
- attrs.phash = input.phash;
125
- }
126
- if (input.addressingMode) {
127
- attrs.addressing_mode = input.addressingMode;
128
- }
129
- const content = [
130
- {
83
+ export function buildGroupSenderKeyMessageNode(input) {
84
+ const attrs = buildMessageAttrs(input);
85
+ const content = [];
86
+ if (input.participants.length > 0) {
87
+ content.push({
131
88
  tag: WA_NODE_TAGS.PARTICIPANTS,
132
89
  attrs: {},
133
90
  content: input.participants.map((participant) => ({
@@ -138,171 +95,31 @@ export function buildGroupDirectMessageNode(input) {
138
95
  content: [
139
96
  {
140
97
  tag: WA_MESSAGE_TAGS.ENC,
141
- attrs: {
142
- v: WA_MESSAGE_TYPES.ENC_VERSION,
143
- type: participant.encType
144
- },
98
+ attrs: buildEncAttrs(participant.encType, input.mediatype),
145
99
  content: participant.ciphertext
146
100
  }
147
101
  ]
148
102
  }))
149
- }
150
- ];
151
- if (input.deviceIdentity) {
152
- content.push({
153
- tag: WA_NODE_TAGS.DEVICE_IDENTITY,
154
- attrs: {},
155
- content: input.deviceIdentity
156
103
  });
157
104
  }
158
- if (input.reportingNode) {
159
- content.push(input.reportingNode);
160
- }
105
+ content.push({
106
+ tag: WA_MESSAGE_TAGS.ENC,
107
+ attrs: buildEncAttrs('skmsg', input.mediatype),
108
+ content: input.groupCiphertext
109
+ });
110
+ pushOptionalNodes(content, input);
161
111
  return {
162
112
  tag: WA_MESSAGE_TAGS.MESSAGE,
163
113
  attrs,
164
114
  content
165
115
  };
166
116
  }
167
- export function buildInboundMessageAckNode(messageNode, id, to, meJid) {
168
- const attrs = {
169
- id,
170
- to,
171
- class: WA_MESSAGE_TYPES.ACK_CLASS_MESSAGE
172
- };
173
- if (messageNode.attrs.type) {
174
- attrs.type = messageNode.attrs.type;
175
- }
176
- if (messageNode.attrs.participant) {
177
- attrs.participant = messageNode.attrs.participant;
178
- }
179
- if (meJid) {
180
- attrs.from = meJid;
181
- }
182
- return {
183
- tag: WA_MESSAGE_TAGS.ACK,
184
- attrs
185
- };
186
- }
187
- export function buildInboundDeliveryReceiptNode(messageNode, id, to) {
188
- const attrs = {
189
- id,
190
- to
191
- };
192
- if (messageNode.attrs.participant) {
193
- attrs.participant = messageNode.attrs.participant;
194
- }
195
- if (messageNode.attrs.category === 'peer') {
196
- attrs.type = WA_MESSAGE_TYPES.RECEIPT_TYPE_PEER;
197
- }
198
- return {
199
- tag: WA_MESSAGE_TAGS.RECEIPT,
200
- attrs
201
- };
202
- }
203
- export function buildInboundRetryReceiptNode(messageNode, id, to, meJid, retryCount = 1) {
204
- const attrs = {
205
- id,
206
- to,
207
- type: 'retry'
208
- };
209
- if (messageNode.attrs.participant) {
210
- attrs.participant = messageNode.attrs.participant;
211
- }
212
- if (meJid) {
213
- attrs.from = meJid;
214
- }
215
- const normalizedRetryCount = Number.isSafeInteger(retryCount) && retryCount > 0 ? retryCount : 1;
216
- const retryAttrs = {
217
- count: String(normalizedRetryCount),
218
- id
219
- };
220
- const timestamp = messageNode.attrs.t;
221
- if (timestamp) {
222
- retryAttrs.t = timestamp;
223
- attrs.t = timestamp;
224
- }
225
- return {
226
- tag: WA_MESSAGE_TAGS.RECEIPT,
227
- attrs,
228
- content: [
229
- {
230
- tag: 'retry',
231
- attrs: retryAttrs
232
- }
233
- ]
234
- };
235
- }
236
- export function buildInboundRetryReceiptAckNode(receiptNode) {
237
- const attrs = {
238
- class: 'receipt',
239
- type: 'retry'
240
- };
241
- if (receiptNode.attrs.id) {
242
- attrs.id = receiptNode.attrs.id;
243
- }
244
- if (receiptNode.attrs.from) {
245
- attrs.to = receiptNode.attrs.from;
246
- }
247
- if (receiptNode.attrs.participant) {
248
- attrs.participant = receiptNode.attrs.participant;
249
- }
250
- return {
251
- tag: WA_MESSAGE_TAGS.ACK,
252
- attrs
253
- };
254
- }
255
- export function buildInboundReceiptAckNode(receiptNode) {
256
- const attrs = {
257
- class: 'receipt'
258
- };
259
- if (receiptNode.attrs.id) {
260
- attrs.id = receiptNode.attrs.id;
261
- }
262
- if (receiptNode.attrs.from) {
263
- attrs.to = receiptNode.attrs.from;
264
- }
265
- if (receiptNode.attrs.type) {
266
- attrs.type = receiptNode.attrs.type;
267
- }
268
- if (receiptNode.attrs.participant &&
269
- (!receiptNode.attrs.from || receiptNode.attrs.participant !== receiptNode.attrs.from)) {
270
- attrs.participant = receiptNode.attrs.participant;
271
- }
272
- return {
273
- tag: WA_MESSAGE_TAGS.ACK,
274
- attrs
275
- };
276
- }
277
117
  export function buildGroupRetryMessageNode(input) {
278
118
  const content = [
279
- {
280
- tag: WA_NODE_TAGS.PARTICIPANTS,
281
- attrs: {},
282
- content: [
283
- {
284
- tag: 'to',
285
- attrs: { jid: input.requesterJid },
286
- content: [
287
- {
288
- tag: WA_MESSAGE_TAGS.ENC,
289
- attrs: {
290
- v: WA_MESSAGE_TYPES.ENC_VERSION,
291
- type: input.encType
292
- },
293
- content: input.ciphertext
294
- }
295
- ]
296
- }
297
- ]
298
- },
299
119
  {
300
120
  tag: WA_MESSAGE_TAGS.ENC,
301
- attrs: {
302
- v: WA_MESSAGE_TYPES.ENC_VERSION,
303
- type: 'skmsg'
304
- },
305
- content: undefined
121
+ attrs: buildEncAttrs(input.encType, input.mediatype, input.retryCount),
122
+ content: input.ciphertext
306
123
  }
307
124
  ];
308
125
  if (input.deviceIdentity) {
@@ -318,9 +135,16 @@ export function buildGroupRetryMessageNode(input) {
318
135
  to: input.to,
319
136
  type: input.type,
320
137
  id: input.id,
321
- device_fanout: 'false',
138
+ participant: input.requesterJid,
322
139
  addressing_mode: input.addressingMode
323
140
  },
324
141
  content
325
142
  };
326
143
  }
144
+ export function buildMetaNode(attrs) {
145
+ return {
146
+ tag: 'meta',
147
+ attrs,
148
+ content: undefined
149
+ };
150
+ }
@@ -103,27 +103,3 @@ export function buildCompanionFinishRequestNode(args) {
103
103
  ]
104
104
  };
105
105
  }
106
- export function buildNotificationAckNode(node, typeOverride) {
107
- const attrs = {
108
- to: node.attrs.from ?? WA_DEFAULTS.HOST_DOMAIN,
109
- class: WA_NODE_TAGS.NOTIFICATION,
110
- type: typeOverride ?? node.attrs.type ?? WA_NODE_TAGS.NOTIFICATION
111
- };
112
- if (node.attrs.id) {
113
- attrs.id = node.attrs.id;
114
- }
115
- return {
116
- tag: WA_NODE_TAGS.ACK,
117
- attrs
118
- };
119
- }
120
- export function buildIqResultNode(iqNode) {
121
- return {
122
- tag: WA_NODE_TAGS.IQ,
123
- attrs: {
124
- ...(iqNode.attrs.id ? { id: iqNode.attrs.id } : {}),
125
- to: iqNode.attrs.from ?? WA_DEFAULTS.HOST_DOMAIN,
126
- type: WA_IQ_TYPES.RESULT
127
- }
128
- };
129
- }
@@ -0,0 +1,41 @@
1
+ import { WA_IQ_TYPES, WA_NODE_TAGS, WA_XMLNS } from '../../../protocol/nodes.js';
2
+ import { WA_PRIVACY_TOKEN_TAGS, WA_PRIVACY_TOKEN_TYPES } from '../../../protocol/privacy-token.js';
3
+ export function buildPrivacyTokenIqNode(input) {
4
+ return {
5
+ tag: WA_NODE_TAGS.IQ,
6
+ attrs: {
7
+ type: WA_IQ_TYPES.SET,
8
+ xmlns: WA_XMLNS.PRIVACY
9
+ },
10
+ content: [
11
+ {
12
+ tag: WA_PRIVACY_TOKEN_TAGS.TOKENS,
13
+ attrs: {},
14
+ content: [
15
+ {
16
+ tag: WA_PRIVACY_TOKEN_TAGS.TOKEN,
17
+ attrs: {
18
+ jid: input.jid,
19
+ t: String(input.timestampS),
20
+ type: input.type ?? WA_PRIVACY_TOKEN_TYPES.TRUSTED_CONTACT
21
+ }
22
+ }
23
+ ]
24
+ }
25
+ ]
26
+ };
27
+ }
28
+ export function buildTcTokenMessageNode(token) {
29
+ return {
30
+ tag: WA_PRIVACY_TOKEN_TAGS.TC_TOKEN,
31
+ attrs: {},
32
+ content: token
33
+ };
34
+ }
35
+ export function buildCsTokenMessageNode(hash) {
36
+ return {
37
+ tag: WA_PRIVACY_TOKEN_TAGS.CS_TOKEN,
38
+ attrs: {},
39
+ content: hash
40
+ };
41
+ }
@@ -0,0 +1,48 @@
1
+ import { WA_DEFAULTS } from '../../../protocol/defaults.js';
2
+ import { WA_NODE_TAGS, WA_XMLNS } from '../../../protocol/nodes.js';
3
+ import { WA_PRIVACY_TAGS } from '../../../protocol/privacy.js';
4
+ import { buildIqNode } from '../../node/query.js';
5
+ export function buildGetPrivacySettingsIq() {
6
+ return buildIqNode('get', WA_DEFAULTS.HOST_DOMAIN, WA_XMLNS.PRIVACY, [
7
+ { tag: WA_NODE_TAGS.PRIVACY, attrs: {} }
8
+ ]);
9
+ }
10
+ export function buildSetPrivacyCategoryIq(category, value) {
11
+ return buildIqNode('set', WA_DEFAULTS.HOST_DOMAIN, WA_XMLNS.PRIVACY, [
12
+ {
13
+ tag: WA_NODE_TAGS.PRIVACY,
14
+ attrs: {},
15
+ content: [
16
+ {
17
+ tag: WA_PRIVACY_TAGS.CATEGORY,
18
+ attrs: { name: category, value }
19
+ }
20
+ ]
21
+ }
22
+ ]);
23
+ }
24
+ export function buildGetPrivacyDisallowedListIq(category) {
25
+ return buildIqNode('get', WA_DEFAULTS.HOST_DOMAIN, WA_XMLNS.PRIVACY, [
26
+ {
27
+ tag: WA_NODE_TAGS.PRIVACY,
28
+ attrs: {},
29
+ content: [
30
+ {
31
+ tag: WA_PRIVACY_TAGS.LIST,
32
+ attrs: { name: category, value: 'contact_blacklist' }
33
+ }
34
+ ]
35
+ }
36
+ ]);
37
+ }
38
+ export function buildGetBlocklistIq() {
39
+ return buildIqNode('get', WA_DEFAULTS.HOST_DOMAIN, WA_XMLNS.BLOCKLIST);
40
+ }
41
+ export function buildBlocklistChangeIq(jid, action) {
42
+ return buildIqNode('set', WA_DEFAULTS.HOST_DOMAIN, WA_XMLNS.BLOCKLIST, [
43
+ {
44
+ tag: 'item',
45
+ attrs: { jid, action }
46
+ }
47
+ ]);
48
+ }
@@ -0,0 +1,70 @@
1
+ import { WA_DEFAULTS, WA_NODE_TAGS, WA_XMLNS } from '../../../protocol/constants.js';
2
+ import { buildIqNode } from '../../node/query.js';
3
+ export function buildGetProfilePictureIq(targetJid, type = 'preview', existingId) {
4
+ const pictureAttrs = {
5
+ type,
6
+ query: 'url'
7
+ };
8
+ if (existingId) {
9
+ pictureAttrs.id = existingId;
10
+ }
11
+ return buildIqNode('get', WA_DEFAULTS.HOST_DOMAIN, WA_XMLNS.PROFILE_PICTURE, [
12
+ {
13
+ tag: WA_NODE_TAGS.PICTURE,
14
+ attrs: pictureAttrs
15
+ }
16
+ ], {
17
+ target: targetJid
18
+ });
19
+ }
20
+ export function buildSetProfilePictureIq(imageBytes, targetJid) {
21
+ const attrs = {};
22
+ if (targetJid) {
23
+ attrs.target = targetJid;
24
+ }
25
+ return buildIqNode('set', WA_DEFAULTS.HOST_DOMAIN, WA_XMLNS.PROFILE_PICTURE, [
26
+ {
27
+ tag: WA_NODE_TAGS.PICTURE,
28
+ attrs: { type: 'image' },
29
+ content: imageBytes
30
+ }
31
+ ], attrs);
32
+ }
33
+ export function buildDeleteProfilePictureIq(targetJid) {
34
+ const attrs = {};
35
+ if (targetJid) {
36
+ attrs.target = targetJid;
37
+ }
38
+ return buildIqNode('set', WA_DEFAULTS.HOST_DOMAIN, WA_XMLNS.PROFILE_PICTURE, undefined, attrs);
39
+ }
40
+ export function buildSetStatusIq(text) {
41
+ return buildIqNode('set', WA_DEFAULTS.HOST_DOMAIN, WA_XMLNS.STATUS, [
42
+ {
43
+ tag: 'status',
44
+ attrs: {},
45
+ content: text
46
+ }
47
+ ]);
48
+ }
49
+ export function buildGetDisappearingModeUsyncQueryNode() {
50
+ return {
51
+ tag: 'disappearing_mode',
52
+ attrs: {}
53
+ };
54
+ }
55
+ export function buildGetStatusUsyncQueryNodes() {
56
+ return [
57
+ {
58
+ tag: WA_NODE_TAGS.CONTACT,
59
+ attrs: {}
60
+ },
61
+ {
62
+ tag: 'status',
63
+ attrs: {}
64
+ },
65
+ {
66
+ tag: WA_NODE_TAGS.PICTURE,
67
+ attrs: {}
68
+ }
69
+ ];
70
+ }
@@ -1,6 +1,7 @@
1
- import { WA_MESSAGE_TAGS, WA_NODE_TAGS } from '../../../protocol/constants.js';
1
+ import { WA_NODE_TAGS } from '../../../protocol/constants.js';
2
2
  import { RETRY_RECEIPT_VERSION } from '../../../retry/constants.js';
3
3
  import { SIGNAL_KEY_BUNDLE_TYPE_BYTES } from '../../../signal/api/constants.js';
4
+ import { buildReceiptNode } from '../../node/builders/global.js';
4
5
  import { intToBytes } from '../../../util/bytes.js';
5
6
  function buildRetryKeysNode(keys) {
6
7
  const content = [
@@ -68,23 +69,6 @@ function buildRetryKeysNode(keys) {
68
69
  };
69
70
  }
70
71
  export function buildRetryReceiptNode(input) {
71
- const attrs = {
72
- id: input.stanzaId,
73
- to: input.to,
74
- type: 'retry'
75
- };
76
- if (input.participant) {
77
- attrs.participant = input.participant;
78
- }
79
- if (input.recipient) {
80
- attrs.recipient = input.recipient;
81
- }
82
- if (input.from) {
83
- attrs.from = input.from;
84
- }
85
- if (input.categoryPeer) {
86
- attrs.category = 'peer';
87
- }
88
72
  const retryAttrs = {
89
73
  v: RETRY_RECEIPT_VERSION,
90
74
  count: String(input.retryCount),
@@ -108,9 +92,13 @@ export function buildRetryReceiptNode(input) {
108
92
  if (input.keys) {
109
93
  content.push(buildRetryKeysNode(input.keys));
110
94
  }
111
- return {
112
- tag: WA_MESSAGE_TAGS.RECEIPT,
113
- attrs,
95
+ return buildReceiptNode({
96
+ kind: 'retry_custom',
97
+ id: input.stanzaId,
98
+ to: input.to,
99
+ participant: input.participant,
100
+ recipient: input.recipient,
101
+ categoryPeer: input.categoryPeer,
114
102
  content
115
- };
103
+ });
116
104
  }
@@ -14,6 +14,10 @@ export function buildUsyncIq(input) {
14
14
  if (input.queryProtocolNodes.length === 0) {
15
15
  throw new Error('usync query must include at least one protocol node');
16
16
  }
17
+ const users = new Array(input.users.length);
18
+ for (let index = 0; index < input.users.length; index += 1) {
19
+ users[index] = buildUsyncUserNode(input.users[index]);
20
+ }
17
21
  return buildIqNode('get', input.hostDomain ?? WA_DEFAULTS.HOST_DOMAIN, WA_XMLNS.USYNC, [
18
22
  {
19
23
  tag: WA_NODE_TAGS.USYNC,
@@ -28,12 +32,12 @@ export function buildUsyncIq(input) {
28
32
  {
29
33
  tag: WA_NODE_TAGS.QUERY,
30
34
  attrs: {},
31
- content: [...input.queryProtocolNodes]
35
+ content: input.queryProtocolNodes
32
36
  },
33
37
  {
34
38
  tag: WA_NODE_TAGS.LIST,
35
39
  attrs: {},
36
- content: input.users.map((user) => buildUsyncUserNode(user))
40
+ content: users
37
41
  }
38
42
  ]
39
43
  }
@@ -1,7 +1,9 @@
1
+ import { randomFillAsync } from '../../crypto/index.js';
1
2
  import { base64ToBytesChecked, TEXT_DECODER, TEXT_ENCODER } from '../../util/bytes.js';
2
3
  const EMPTY_NODE_CHILDREN = Object.freeze([]);
3
4
  const EMPTY_NODE_TAGS = Object.freeze([]);
4
5
  const EMPTY_NODE_VALUES = Object.freeze([]);
6
+ const NODE_ID_PREFIX_SEED = new Uint8Array(4);
5
7
  export function getNodeChildren(node) {
6
8
  return Array.isArray(node.content) ? node.content : EMPTY_NODE_CHILDREN;
7
9
  }
@@ -54,7 +56,11 @@ export function getNodeChildrenTags(node) {
54
56
  const content = node.content;
55
57
  if (!Array.isArray(content) || content.length === 0)
56
58
  return EMPTY_NODE_TAGS;
57
- return content.map((c) => c.tag);
59
+ const tags = new Array(content.length);
60
+ for (let i = 0; i < content.length; i += 1) {
61
+ tags[i] = content[i].tag;
62
+ }
63
+ return tags;
58
64
  }
59
65
  export function getNodeChildrenNonEmptyAttrValuesByTag(node, tag, attr) {
60
66
  let values = null;
@@ -137,3 +143,15 @@ export function formatNodeIdPrefixFromSeed(seed) {
137
143
  const right = ((seed[2] << 8) | seed[3]) >>> 0;
138
144
  return `${left}.${right}-`;
139
145
  }
146
+ export async function createNodeIdGenerator() {
147
+ await randomFillAsync(NODE_ID_PREFIX_SEED);
148
+ const prefix = formatNodeIdPrefixFromSeed(NODE_ID_PREFIX_SEED);
149
+ let counter = 0;
150
+ return {
151
+ prefix,
152
+ next() {
153
+ counter += 1;
154
+ return `${prefix}${counter}`;
155
+ }
156
+ };
157
+ }