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
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StoreLock = void 0;
4
+ class StoreLock {
5
+ constructor() {
6
+ this.chains = new Map();
7
+ this.closed = false;
8
+ }
9
+ run(key, task) {
10
+ return this.runInternal(key, task, true);
11
+ }
12
+ runInternal(key, task, rejectWhenClosed) {
13
+ if (this.closed) {
14
+ if (rejectWhenClosed) {
15
+ throw new Error('store lock is closed');
16
+ }
17
+ }
18
+ const previous = this.chains.get(key);
19
+ let current;
20
+ if (previous) {
21
+ current = previous.then(task);
22
+ }
23
+ else {
24
+ try {
25
+ current = task();
26
+ }
27
+ catch (error) {
28
+ current = Promise.reject(error);
29
+ }
30
+ }
31
+ const tracker = current.then(() => undefined, () => undefined);
32
+ this.chains.set(key, tracker);
33
+ void tracker.finally(() => {
34
+ if (this.chains.get(key) === tracker) {
35
+ this.chains.delete(key);
36
+ }
37
+ });
38
+ return current;
39
+ }
40
+ runMany(keys, task) {
41
+ if (this.closed) {
42
+ throw new Error('store lock is closed');
43
+ }
44
+ if (keys.length <= 1) {
45
+ return keys.length === 0 ? task() : this.runInternal(keys[0], task, false);
46
+ }
47
+ const ordered = new Array(keys.length);
48
+ for (let index = 0; index < keys.length; index += 1) {
49
+ ordered[index] = keys[index];
50
+ }
51
+ ordered.sort();
52
+ let uniqueCount = 1;
53
+ let previousKey = ordered[0];
54
+ for (let index = 1; index < ordered.length; index += 1) {
55
+ const key = ordered[index];
56
+ if (key === previousKey) {
57
+ continue;
58
+ }
59
+ ordered[uniqueCount] = key;
60
+ uniqueCount += 1;
61
+ previousKey = key;
62
+ }
63
+ const acquire = (index) => index >= uniqueCount
64
+ ? task()
65
+ : this.runInternal(ordered[index], () => Promise.resolve().then(() => acquire(index + 1)), false);
66
+ return acquire(0);
67
+ }
68
+ async shutdown() {
69
+ this.closed = true;
70
+ while (this.chains.size > 0) {
71
+ const pending = new Array(this.chains.size);
72
+ let pendingIndex = 0;
73
+ for (const chain of this.chains.values()) {
74
+ pending[pendingIndex] = chain;
75
+ pendingIndex += 1;
76
+ }
77
+ await Promise.allSettled(pending);
78
+ }
79
+ }
80
+ }
81
+ exports.StoreLock = StoreLock;
@@ -3,6 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WaMediaCrypto = void 0;
4
4
  const node_crypto_1 = require("node:crypto");
5
5
  const node_events_1 = require("node:events");
6
+ const node_fs_1 = require("node:fs");
7
+ const promises_1 = require("node:fs/promises");
8
+ const node_os_1 = require("node:os");
9
+ const node_path_1 = require("node:path");
6
10
  const node_stream_1 = require("node:stream");
7
11
  const hkdf_1 = require("../crypto/core/hkdf");
8
12
  const primitives_1 = require("../crypto/core/primitives");
@@ -80,17 +84,22 @@ class WaMediaCrypto {
80
84
  const metadata = pumpEncryption(plaintext, encrypted, keys);
81
85
  return { encrypted, metadata };
82
86
  }
83
- static async decryptReadableToBytes(encrypted, options) {
84
- const decrypted = await WaMediaCrypto.decryptReadable(encrypted, options);
85
- const [plaintext, metadata] = await Promise.all([
86
- (0, bytes_1.readAllBytes)(decrypted.plaintext),
87
- decrypted.metadata
88
- ]);
89
- return {
90
- plaintext,
91
- fileSha256: metadata.fileSha256,
92
- fileEncSha256: metadata.fileEncSha256
93
- };
87
+ static async encryptToFile(mediaType, mediaKey, plaintext) {
88
+ const keys = await WaMediaCrypto.deriveKeys(mediaType, mediaKey);
89
+ const filePath = (0, node_path_1.join)((0, node_os_1.tmpdir)(), `zapo-enc-${Date.now()}-${Math.random().toString(36).slice(2)}`);
90
+ const output = (0, node_fs_1.createWriteStream)(filePath);
91
+ try {
92
+ const metadata = await pumpEncryptionToWritable(plaintext, output, keys);
93
+ const fileSize = (await (0, promises_1.stat)(filePath)).size;
94
+ return { filePath, fileSize, ...metadata };
95
+ }
96
+ catch (error) {
97
+ await (0, promises_1.unlink)(filePath).catch(() => undefined);
98
+ throw error;
99
+ }
100
+ }
101
+ static async cleanupEncryptedFile(filePath) {
102
+ await (0, promises_1.unlink)(filePath).catch(() => undefined);
94
103
  }
95
104
  static async decryptReadable(encrypted, options) {
96
105
  const keys = await WaMediaCrypto.deriveKeys(options.mediaType, options.mediaKey);
@@ -112,6 +121,7 @@ async function pumpEncryption(plaintext, encrypted, keys) {
112
121
  const encHash = (0, node_crypto_1.createHash)('sha256');
113
122
  const hmac = (0, node_crypto_1.createHmac)('sha256', keys.macKey);
114
123
  const cipher = (0, node_crypto_1.createCipheriv)('aes-256-cbc', keys.encKey, keys.iv);
124
+ let plaintextLength = 0;
115
125
  hmac.update(keys.iv);
116
126
  try {
117
127
  for await (const chunk of plaintext) {
@@ -119,6 +129,7 @@ async function pumpEncryption(plaintext, encrypted, keys) {
119
129
  if (plainChunk.byteLength === 0) {
120
130
  continue;
121
131
  }
132
+ plaintextLength += plainChunk.byteLength;
122
133
  plainHash.update(plainChunk);
123
134
  const encryptedChunk = cipher.update(plainChunk);
124
135
  if (encryptedChunk.byteLength > 0) {
@@ -139,7 +150,8 @@ async function pumpEncryption(plaintext, encrypted, keys) {
139
150
  encrypted.end();
140
151
  return {
141
152
  fileSha256: (0, bytes_1.toBytesView)(plainHash.digest()),
142
- fileEncSha256: (0, bytes_1.toBytesView)(encHash.digest())
153
+ fileEncSha256: (0, bytes_1.toBytesView)(encHash.digest()),
154
+ plaintextLength
143
155
  };
144
156
  }
145
157
  catch (error) {
@@ -148,6 +160,76 @@ async function pumpEncryption(plaintext, encrypted, keys) {
148
160
  throw normalized;
149
161
  }
150
162
  }
163
+ async function writeChunkToWritable(stream, chunk) {
164
+ if (chunk.byteLength === 0) {
165
+ return;
166
+ }
167
+ if (stream.write(chunk)) {
168
+ return;
169
+ }
170
+ await new Promise((resolve, reject) => {
171
+ const onDrain = () => {
172
+ stream.off('error', onError);
173
+ resolve();
174
+ };
175
+ const onError = (err) => {
176
+ stream.off('drain', onDrain);
177
+ reject(err);
178
+ };
179
+ stream.once('drain', onDrain);
180
+ stream.once('error', onError);
181
+ });
182
+ }
183
+ async function endWritable(stream) {
184
+ return new Promise((resolve, reject) => {
185
+ stream.on('error', reject);
186
+ stream.end(() => resolve());
187
+ });
188
+ }
189
+ async function pumpEncryptionToWritable(plaintext, output, keys) {
190
+ const plainHash = (0, node_crypto_1.createHash)('sha256');
191
+ const encHash = (0, node_crypto_1.createHash)('sha256');
192
+ const hmac = (0, node_crypto_1.createHmac)('sha256', keys.macKey);
193
+ const cipher = (0, node_crypto_1.createCipheriv)('aes-256-cbc', keys.encKey, keys.iv);
194
+ let plaintextLength = 0;
195
+ hmac.update(keys.iv);
196
+ try {
197
+ for await (const chunk of plaintext) {
198
+ const plainChunk = (0, bytes_1.toChunkBytes)(chunk);
199
+ if (plainChunk.byteLength === 0) {
200
+ continue;
201
+ }
202
+ plaintextLength += plainChunk.byteLength;
203
+ plainHash.update(plainChunk);
204
+ const encryptedChunk = cipher.update(plainChunk);
205
+ if (encryptedChunk.byteLength > 0) {
206
+ hmac.update(encryptedChunk);
207
+ encHash.update(encryptedChunk);
208
+ await writeChunkToWritable(output, encryptedChunk);
209
+ }
210
+ }
211
+ const encryptedFinal = cipher.final();
212
+ if (encryptedFinal.byteLength > 0) {
213
+ hmac.update(encryptedFinal);
214
+ encHash.update(encryptedFinal);
215
+ await writeChunkToWritable(output, encryptedFinal);
216
+ }
217
+ const signature = hmac.digest().subarray(0, constants_1.HMAC_TRUNCATED_SIZE);
218
+ encHash.update(signature);
219
+ await writeChunkToWritable(output, signature);
220
+ await endWritable(output);
221
+ return {
222
+ fileSha256: (0, bytes_1.toBytesView)(plainHash.digest()),
223
+ fileEncSha256: (0, bytes_1.toBytesView)(encHash.digest()),
224
+ plaintextLength
225
+ };
226
+ }
227
+ catch (error) {
228
+ const normalized = (0, primitives_2.toError)(error);
229
+ output.destroy(normalized);
230
+ throw normalized;
231
+ }
232
+ }
151
233
  async function pumpDecryption(encrypted, plaintext, keys, options) {
152
234
  const plainHash = (0, node_crypto_1.createHash)('sha256');
153
235
  const encHash = (0, node_crypto_1.createHash)('sha256');
@@ -122,14 +122,16 @@ class WaMediaTransferClient {
122
122
  urls: urls.length,
123
123
  timeoutMs
124
124
  });
125
- return this.executeTransfer(urls, timeoutMs, request.signal, {
126
- responseLog: 'media download stream response',
127
- send: (url, signal) => this.transferRequest(url, {
128
- method: 'GET',
129
- headers,
130
- signal
131
- }, dispatcher, agent)
125
+ const result = await this.fetchWithFallback(urls, timeoutMs, request.signal, (url, signal) => this.transferRequest(url, {
126
+ method: 'GET',
127
+ headers,
128
+ signal
129
+ }, dispatcher, agent));
130
+ this.logger?.trace('media download stream response', {
131
+ url: result.url,
132
+ status: result.status
132
133
  });
134
+ return result;
133
135
  }
134
136
  async downloadBytes(request) {
135
137
  const response = await this.downloadStream(request);
@@ -137,7 +139,9 @@ class WaMediaTransferClient {
137
139
  if (!response.body) {
138
140
  return bytes_1.EMPTY_BYTES;
139
141
  }
140
- return this.readAllBytesWithLimit(response.body, request.maxBytes);
142
+ return (0, bytes_1.readAllBytes)(response.body, {
143
+ maxBytes: request.maxBytes ?? this.defaultMaxReadBytes
144
+ });
141
145
  }
142
146
  async uploadStream(request) {
143
147
  const bodyIsBytes = request.body instanceof Uint8Array;
@@ -161,26 +165,28 @@ class WaMediaTransferClient {
161
165
  timeoutMs,
162
166
  method
163
167
  });
164
- return this.executeTransfer(uploadUrls, timeoutMs, request.signal, {
165
- responseLog: 'media upload stream response',
166
- send: async (url, signal) => {
167
- if (bodyIsBytes) {
168
- return this.transferRequest(url, {
169
- method,
170
- headers,
171
- signal,
172
- body: request.body
173
- }, dispatcher, agent);
174
- }
168
+ const result = await this.fetchWithFallback(uploadUrls, timeoutMs, request.signal, async (url, signal) => {
169
+ if (bodyIsBytes) {
175
170
  return this.transferRequest(url, {
176
171
  method,
177
172
  headers,
178
173
  signal,
179
- body: request.body,
180
- duplex: 'half'
174
+ body: request.body
181
175
  }, dispatcher, agent);
182
176
  }
177
+ return this.transferRequest(url, {
178
+ method,
179
+ headers,
180
+ signal,
181
+ body: request.body,
182
+ duplex: 'half'
183
+ }, dispatcher, agent);
184
+ });
185
+ this.logger?.trace('media upload stream response', {
186
+ url: result.url,
187
+ status: result.status
183
188
  });
189
+ return result;
184
190
  }
185
191
  async uploadEncrypted(request) {
186
192
  this.logger?.info('media encrypted upload start', {
@@ -217,7 +223,8 @@ class WaMediaTransferClient {
217
223
  transfer,
218
224
  mediaKey,
219
225
  fileSha256: metadata.fileSha256,
220
- fileEncSha256: metadata.fileEncSha256
226
+ fileEncSha256: metadata.fileEncSha256,
227
+ plaintextLength: metadata.plaintextLength
221
228
  };
222
229
  }
223
230
  async downloadAndDecrypt(request) {
@@ -226,8 +233,12 @@ class WaMediaTransferClient {
226
233
  });
227
234
  const decrypted = await this.downloadAndDecryptStream(request);
228
235
  try {
229
- const plaintext = await this.readAllBytesWithLimit(decrypted.plaintext, request.maxBytes);
230
- await decrypted.metadata;
236
+ const [plaintext] = await Promise.all([
237
+ (0, bytes_1.readAllBytes)(decrypted.plaintext, {
238
+ maxBytes: request.maxBytes ?? this.defaultMaxReadBytes
239
+ }),
240
+ decrypted.metadata
241
+ ]);
231
242
  this.logger?.info('media encrypted download completed', {
232
243
  byteLength: plaintext.byteLength
233
244
  });
@@ -261,7 +272,7 @@ class WaMediaTransferClient {
261
272
  if (!response.body) {
262
273
  return bytes_1.EMPTY_BYTES;
263
274
  }
264
- return this.readAllBytesWithLimit(response.body, maxBytes);
275
+ return (0, bytes_1.readAllBytes)(response.body, { maxBytes: maxBytes ?? this.defaultMaxReadBytes });
265
276
  }
266
277
  async transferRequest(url, init, dispatcher, agent) {
267
278
  if (agent) {
@@ -282,7 +293,7 @@ class WaMediaTransferClient {
282
293
  return {
283
294
  status: response.status,
284
295
  ok: response.ok,
285
- headers: this.headersToRecord(response.headers),
296
+ headers: Object.fromEntries(response.headers.entries()),
286
297
  body: response.body
287
298
  ? node_stream_1.Readable.fromWeb(response.body)
288
299
  : null,
@@ -398,14 +409,6 @@ class WaMediaTransferClient {
398
409
  timeoutMs: request.timeoutMs ?? this.defaultTimeoutMs
399
410
  };
400
411
  }
401
- async executeTransfer(urls, timeoutMs, signal, options) {
402
- const result = await this.fetchWithFallback(urls, timeoutMs, signal, options.send);
403
- this.logger?.trace(options.responseLog, {
404
- url: result.url,
405
- status: result.status
406
- });
407
- return result;
408
- }
409
412
  async prepareEncryptedUpload(request, mediaKey) {
410
413
  if (request.plaintext instanceof Uint8Array) {
411
414
  const encrypted = await WaMediaCrypto_1.WaMediaCrypto.encryptBytes(request.mediaType, mediaKey, request.plaintext);
@@ -414,7 +417,8 @@ class WaMediaTransferClient {
414
417
  contentLength: encrypted.ciphertextHmac.byteLength,
415
418
  metadata: Promise.resolve({
416
419
  fileSha256: encrypted.fileSha256,
417
- fileEncSha256: encrypted.fileEncSha256
420
+ fileEncSha256: encrypted.fileEncSha256,
421
+ plaintextLength: request.plaintext.byteLength
418
422
  }),
419
423
  cleanup: async () => undefined
420
424
  };
@@ -468,11 +472,6 @@ class WaMediaTransferClient {
468
472
  }
469
473
  return resolved;
470
474
  }
471
- readAllBytesWithLimit(stream, maxBytes) {
472
- return (0, bytes_1.readAllBytes)(stream, {
473
- maxBytes: maxBytes ?? this.defaultMaxReadBytes
474
- });
475
- }
476
475
  async fetchWithFallback(urls, timeoutMs, signal, send) {
477
476
  let lastError = null;
478
477
  for (let index = 0; index < urls.length; index += 1) {
@@ -542,13 +541,6 @@ class WaMediaTransferClient {
542
541
  }
543
542
  };
544
543
  }
545
- headersToRecord(headers) {
546
- const output = {};
547
- headers.forEach((value, key) => {
548
- output[key] = value;
549
- });
550
- return output;
551
- }
552
544
  async drainBody(body) {
553
545
  if (!body) {
554
546
  return;
@@ -20,5 +20,6 @@ exports.MEDIA_UPLOAD_PATHS = Object.freeze({
20
20
  document: '/mms/document',
21
21
  sticker: '/mms/sticker',
22
22
  gif: '/mms/gif',
23
- ptt: '/mms/ptt'
23
+ ptt: '/mms/ptt',
24
+ ptv: '/mms/video'
24
25
  });
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WaMessageClient = void 0;
4
4
  const ack_1 = require("./ack");
5
5
  const constants_1 = require("../protocol/constants");
6
+ const global_1 = require("../transport/node/builders/global");
6
7
  const async_1 = require("../util/async");
7
8
  const primitives_1 = require("../util/primitives");
8
9
  const WA_RETRYABLE_PUBLISH_ERROR_RE = /timeout|socket|connection|closed/i;
@@ -115,6 +116,9 @@ class WaMessageClient {
115
116
  if (input.id) {
116
117
  attrs.id = input.id;
117
118
  }
119
+ if (input.edit) {
120
+ attrs.edit = input.edit;
121
+ }
118
122
  if (input.category) {
119
123
  attrs.category = input.category;
120
124
  }
@@ -134,6 +138,9 @@ class WaMessageClient {
134
138
  v: constants_1.WA_MESSAGE_TYPES.ENC_VERSION,
135
139
  type: input.encType
136
140
  };
141
+ if (input.mediatype) {
142
+ encAttrs.mediatype = input.mediatype;
143
+ }
137
144
  if (input.encCount !== undefined && input.encCount > 0) {
138
145
  encAttrs.count = String(Math.trunc(input.encCount));
139
146
  }
@@ -151,6 +158,9 @@ class WaMessageClient {
151
158
  content: input.deviceIdentity
152
159
  });
153
160
  }
161
+ if (input.metaNode) {
162
+ content.push(input.metaNode);
163
+ }
154
164
  const node = {
155
165
  tag: constants_1.WA_MESSAGE_TAGS.MESSAGE,
156
166
  attrs,
@@ -159,29 +169,26 @@ class WaMessageClient {
159
169
  return node;
160
170
  }
161
171
  async sendReceipt(input) {
162
- const attrs = {
172
+ const node = (0, global_1.buildReceiptNode)({
173
+ kind: 'outbound',
163
174
  to: input.to,
164
175
  id: input.id,
165
- type: input.type ?? 'read'
166
- };
167
- if (input.participant) {
168
- attrs.participant = input.participant;
169
- }
170
- if (input.from) {
171
- attrs.from = input.from;
172
- }
173
- if (input.t) {
174
- attrs.t = input.t;
175
- }
176
- this.logger.debug('sending receipt node', {
177
- to: attrs.to,
178
- id: attrs.id,
179
- type: attrs.type
176
+ type: input.type ?? 'read',
177
+ participant: input.participant,
178
+ recipient: input.recipient,
179
+ category: input.category,
180
+ from: input.from,
181
+ t: input.t,
182
+ peerParticipantPn: input.peerParticipantPn,
183
+ listIds: input.listIds,
184
+ content: input.content ? [...input.content] : undefined
180
185
  });
181
- await this.sendNode({
182
- tag: constants_1.WA_MESSAGE_TAGS.RECEIPT,
183
- attrs
186
+ this.logger.debug('sending receipt node', {
187
+ to: node.attrs.to,
188
+ id: node.attrs.id,
189
+ type: node.attrs.type
184
190
  });
191
+ await this.sendNode(node);
185
192
  }
186
193
  isRetryablePublishError(error) {
187
194
  return WA_RETRYABLE_PUBLISH_ERROR_RE.test(error.message);