zapo-js 0.1.1 → 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 (589) hide show
  1. package/README.md +20 -4
  2. package/dist/appstate/WaAppStateCrypto.js +19 -26
  3. package/dist/appstate/WaAppStateSyncClient.js +293 -181
  4. package/dist/appstate/WaAppStateSyncResponseParser.js +16 -5
  5. package/dist/appstate/constants.js +4 -3
  6. package/dist/appstate/{store/sqlite.js → encoding.js} +13 -8
  7. package/dist/appstate/index.js +8 -6
  8. package/dist/appstate/utils.js +9 -34
  9. package/dist/auth/WaAuthClient.js +43 -61
  10. package/dist/auth/flow/WaAuthCredentialsFlow.js +22 -15
  11. package/dist/auth/index.js +1 -8
  12. package/dist/auth/pairing/WaPairingCodeCrypto.js +6 -4
  13. package/dist/auth/pairing/WaPairingFlow.js +34 -26
  14. package/dist/auth/pairing/WaQrFlow.js +37 -24
  15. package/dist/client/WaClient.js +275 -324
  16. package/dist/client/WaClientFactory.js +500 -133
  17. package/dist/client/connection/WaConnectionManager.js +301 -0
  18. package/dist/client/connection/WaKeyShareCoordinator.js +63 -0
  19. package/dist/client/connection/WaReceiptQueue.js +51 -0
  20. package/dist/client/coordinators/WaAppStateMutationCoordinator.js +471 -0
  21. package/dist/client/coordinators/WaBusinessCoordinator.js +241 -0
  22. package/dist/client/coordinators/WaGroupCoordinator.js +30 -16
  23. package/dist/client/coordinators/WaIncomingNodeCoordinator.js +21 -27
  24. package/dist/client/coordinators/WaMessageDispatchCoordinator.js +439 -701
  25. package/dist/client/coordinators/WaPassiveTasksCoordinator.js +74 -31
  26. package/dist/client/coordinators/WaPrivacyCoordinator.js +134 -0
  27. package/dist/client/coordinators/WaProfileCoordinator.js +212 -0
  28. package/dist/client/coordinators/WaRetryCoordinator.js +242 -57
  29. package/dist/client/coordinators/WaStreamControlCoordinator.js +18 -11
  30. package/dist/client/coordinators/WaTrustedContactTokenCoordinator.js +166 -0
  31. package/dist/client/dirty.js +74 -48
  32. package/dist/client/events/chat.js +4 -3
  33. package/dist/client/events/devices.js +72 -0
  34. package/dist/client/events/group.js +62 -47
  35. package/dist/client/events/identity.js +22 -0
  36. package/dist/client/events/privacy-token.js +39 -0
  37. package/dist/client/history-sync.js +94 -63
  38. package/dist/client/incoming.js +60 -27
  39. package/dist/client/mailbox.js +24 -23
  40. package/dist/client/messages.js +107 -31
  41. package/dist/client/messaging/fanout.js +199 -0
  42. package/dist/client/messaging/key-protocol.js +130 -0
  43. package/dist/client/messaging/participants.js +193 -0
  44. package/dist/client/persistence/WriteBehindPersistence.js +129 -0
  45. package/dist/client/tokens/cs-token.js +50 -0
  46. package/dist/client/tokens/tc-token.js +25 -0
  47. package/dist/crypto/core/hkdf.js +3 -8
  48. package/dist/crypto/core/index.js +2 -5
  49. package/dist/crypto/core/keys.js +6 -7
  50. package/dist/crypto/core/nonce.js +2 -0
  51. package/dist/crypto/core/primitives.js +12 -23
  52. package/dist/crypto/core/random.js +26 -23
  53. package/dist/crypto/curves/Ed25519.js +7 -8
  54. package/dist/crypto/curves/X25519.js +38 -22
  55. package/dist/crypto/index.js +1 -3
  56. package/dist/crypto/math/constants.js +13 -36
  57. package/dist/crypto/math/edwards.js +171 -44
  58. package/dist/crypto/math/fe.js +706 -0
  59. package/dist/crypto/math/mod.js +10 -3
  60. package/dist/esm/appstate/WaAppStateCrypto.js +7 -14
  61. package/dist/esm/appstate/WaAppStateSyncClient.js +284 -172
  62. package/dist/esm/appstate/WaAppStateSyncResponseParser.js +17 -6
  63. package/dist/esm/appstate/constants.js +3 -2
  64. package/dist/esm/appstate/{store/sqlite.js → encoding.js} +13 -8
  65. package/dist/esm/appstate/index.js +2 -2
  66. package/dist/esm/appstate/utils.js +8 -30
  67. package/dist/esm/auth/WaAuthClient.js +43 -61
  68. package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +22 -15
  69. package/dist/esm/auth/index.js +0 -3
  70. package/dist/esm/auth/pairing/WaPairingCodeCrypto.js +6 -4
  71. package/dist/esm/auth/pairing/WaPairingFlow.js +28 -20
  72. package/dist/esm/auth/pairing/WaQrFlow.js +37 -24
  73. package/dist/esm/client/WaClient.js +275 -324
  74. package/dist/esm/client/WaClientFactory.js +501 -134
  75. package/dist/esm/client/connection/WaConnectionManager.js +297 -0
  76. package/dist/esm/client/connection/WaKeyShareCoordinator.js +59 -0
  77. package/dist/esm/client/connection/WaReceiptQueue.js +47 -0
  78. package/dist/esm/client/coordinators/WaAppStateMutationCoordinator.js +467 -0
  79. package/dist/esm/client/coordinators/WaBusinessCoordinator.js +238 -0
  80. package/dist/esm/client/coordinators/WaGroupCoordinator.js +23 -9
  81. package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +21 -27
  82. package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +443 -705
  83. package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +74 -31
  84. package/dist/esm/client/coordinators/WaPrivacyCoordinator.js +131 -0
  85. package/dist/esm/client/coordinators/WaProfileCoordinator.js +209 -0
  86. package/dist/esm/client/coordinators/WaRetryCoordinator.js +244 -59
  87. package/dist/esm/client/coordinators/WaStreamControlCoordinator.js +19 -12
  88. package/dist/esm/client/coordinators/WaTrustedContactTokenCoordinator.js +162 -0
  89. package/dist/esm/client/dirty.js +69 -43
  90. package/dist/esm/client/events/chat.js +4 -3
  91. package/dist/esm/client/events/devices.js +68 -0
  92. package/dist/esm/client/events/group.js +53 -39
  93. package/dist/esm/client/events/identity.js +19 -0
  94. package/dist/esm/client/events/privacy-token.js +36 -0
  95. package/dist/esm/client/history-sync.js +91 -60
  96. package/dist/esm/client/incoming.js +61 -28
  97. package/dist/esm/client/mailbox.js +24 -23
  98. package/dist/esm/client/messages.js +108 -32
  99. package/dist/esm/client/messaging/fanout.js +196 -0
  100. package/dist/esm/client/messaging/key-protocol.js +127 -0
  101. package/dist/esm/client/messaging/participants.js +190 -0
  102. package/dist/esm/client/persistence/WriteBehindPersistence.js +125 -0
  103. package/dist/esm/client/tokens/cs-token.js +46 -0
  104. package/dist/esm/client/tokens/tc-token.js +18 -0
  105. package/dist/esm/crypto/core/hkdf.js +3 -8
  106. package/dist/esm/crypto/core/index.js +2 -3
  107. package/dist/esm/crypto/core/keys.js +3 -4
  108. package/dist/esm/crypto/core/nonce.js +2 -0
  109. package/dist/esm/crypto/core/primitives.js +12 -22
  110. package/dist/esm/crypto/core/random.js +25 -23
  111. package/dist/esm/crypto/curves/Ed25519.js +4 -5
  112. package/dist/esm/crypto/curves/X25519.js +35 -19
  113. package/dist/esm/crypto/index.js +0 -1
  114. package/dist/esm/crypto/math/constants.js +12 -35
  115. package/dist/esm/crypto/math/edwards.js +174 -47
  116. package/dist/esm/crypto/math/fe.js +691 -0
  117. package/dist/esm/crypto/math/mod.js +10 -1
  118. package/dist/esm/index.js +1 -1
  119. package/dist/esm/infra/log/ConsoleLogger.js +18 -17
  120. package/dist/esm/infra/log/PinoLogger.js +15 -9
  121. package/dist/esm/infra/log/types.js +11 -1
  122. package/dist/esm/infra/perf/BackgroundQueue.js +478 -0
  123. package/dist/esm/infra/perf/BoundedTaskQueue.js +16 -18
  124. package/dist/esm/infra/perf/PromiseDedup.js +20 -0
  125. package/dist/esm/infra/perf/SharedExclusiveGate.js +109 -0
  126. package/dist/esm/infra/perf/StoreLock.js +77 -0
  127. package/dist/esm/media/WaMediaCrypto.js +96 -16
  128. package/dist/esm/media/WaMediaTransferClient.js +251 -91
  129. package/dist/esm/media/conn.js +10 -6
  130. package/dist/esm/media/constants.js +6 -2
  131. package/dist/esm/message/WaMessageClient.js +30 -32
  132. package/dist/esm/message/ack.js +6 -6
  133. package/dist/esm/message/addon-crypto.js +59 -0
  134. package/dist/esm/message/content.js +195 -9
  135. package/dist/esm/message/icdc.js +76 -0
  136. package/dist/esm/message/incoming.js +129 -122
  137. package/dist/esm/message/index.js +2 -0
  138. package/dist/esm/message/phash.js +3 -1
  139. package/dist/esm/message/reporting-token.js +425 -0
  140. package/dist/esm/message/use-case-secret.js +49 -0
  141. package/dist/esm/protocol/appstate.js +27 -0
  142. package/dist/esm/protocol/browser.js +10 -18
  143. package/dist/esm/protocol/constants.js +6 -3
  144. package/dist/esm/protocol/defaults.js +6 -0
  145. package/dist/esm/protocol/index.js +2 -11
  146. package/dist/esm/protocol/jid.js +133 -52
  147. package/dist/esm/protocol/media.js +3 -3
  148. package/dist/esm/protocol/message.js +61 -1
  149. package/dist/esm/protocol/nodes.js +4 -0
  150. package/dist/esm/protocol/notification.js +3 -1
  151. package/dist/esm/protocol/privacy-token.js +17 -0
  152. package/dist/esm/protocol/privacy.js +55 -0
  153. package/dist/esm/protocol/stream.js +26 -1
  154. package/dist/esm/protocol/usync.js +11 -0
  155. package/dist/esm/retry/codec.js +216 -0
  156. package/dist/esm/retry/constants.js +1 -1
  157. package/dist/esm/retry/index.js +3 -2
  158. package/dist/esm/retry/parse.js +88 -86
  159. package/dist/esm/retry/replay.js +54 -51
  160. package/dist/esm/retry/tracker.js +94 -0
  161. package/dist/esm/signal/api/SignalDeviceSyncApi.js +276 -92
  162. package/dist/esm/signal/api/SignalDigestSyncApi.js +17 -8
  163. package/dist/esm/signal/api/SignalIdentitySyncApi.js +67 -37
  164. package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +86 -67
  165. package/dist/esm/signal/api/SignalRotateKeyApi.js +4 -2
  166. package/dist/esm/signal/api/SignalSessionSyncApi.js +36 -34
  167. package/dist/esm/signal/api/result-map.js +10 -0
  168. package/dist/esm/signal/constants.js +0 -4
  169. package/dist/esm/signal/crypto/WaAdvSignature.js +13 -9
  170. package/dist/esm/signal/{store/sqlite.js → encoding.js} +93 -60
  171. package/dist/esm/signal/group/SenderKeyChain.js +28 -23
  172. package/dist/esm/signal/group/SenderKeyCodec.js +5 -6
  173. package/dist/esm/signal/group/SenderKeyManager.js +144 -115
  174. package/dist/esm/signal/index.js +2 -0
  175. package/dist/esm/signal/registration/keygen.js +6 -2
  176. package/dist/esm/signal/registration/utils.js +1 -0
  177. package/dist/esm/signal/session/SignalProtocol.js +164 -53
  178. package/dist/esm/signal/session/SignalRatchet.js +24 -15
  179. package/dist/esm/signal/session/SignalSession.js +14 -9
  180. package/dist/esm/signal/session/resolver.js +221 -0
  181. package/dist/esm/store/contracts/privacy-token.store.js +1 -0
  182. package/dist/esm/store/createStore.js +100 -188
  183. package/dist/esm/store/index.js +1 -10
  184. package/dist/esm/store/locks/appstate.lock.js +26 -0
  185. package/dist/esm/store/locks/auth.lock.js +15 -0
  186. package/dist/esm/store/locks/contact.lock.js +20 -0
  187. package/dist/esm/store/locks/device-list.lock.js +20 -0
  188. package/dist/esm/store/locks/message.lock.js +21 -0
  189. package/dist/esm/store/locks/participants.lock.js +20 -0
  190. package/dist/esm/store/locks/privacy-token.lock.js +18 -0
  191. package/dist/esm/store/locks/retry.lock.js +29 -0
  192. package/dist/esm/store/locks/sender-key.lock.js +52 -0
  193. package/dist/esm/store/locks/signal.lock.js +63 -0
  194. package/dist/esm/store/locks/thread.lock.js +21 -0
  195. package/dist/esm/store/noop.store.js +4 -7
  196. package/dist/esm/store/providers/memory/appstate.store.js +38 -16
  197. package/dist/esm/store/providers/memory/contact.store.js +5 -0
  198. package/dist/esm/store/providers/memory/device-list.store.js +12 -34
  199. package/dist/esm/store/providers/memory/message.store.js +11 -5
  200. package/dist/esm/store/providers/memory/participants.store.js +1 -8
  201. package/dist/esm/store/providers/memory/privacy-token.store.js +43 -0
  202. package/dist/esm/store/providers/memory/retry.store.js +77 -2
  203. package/dist/esm/store/providers/memory/sender-key.store.js +11 -8
  204. package/dist/esm/store/providers/memory/signal.store.js +47 -18
  205. package/dist/esm/store/providers/memory/thread.store.js +5 -0
  206. package/dist/esm/transport/WaComms.js +28 -24
  207. package/dist/esm/transport/WaWebSocket.js +115 -18
  208. package/dist/esm/transport/binary/constants.js +0 -30
  209. package/dist/esm/transport/binary/decoder.js +8 -8
  210. package/dist/esm/transport/binary/encoder.js +10 -9
  211. package/dist/esm/transport/binary/index.js +0 -1
  212. package/dist/esm/transport/index.js +1 -0
  213. package/dist/esm/transport/keepalive/WaKeepAlive.js +2 -8
  214. package/dist/esm/transport/node/WaNodeOrchestrator.js +25 -21
  215. package/dist/esm/transport/node/WaNodeTransport.js +0 -3
  216. package/dist/esm/transport/node/builders/{accountSync.js → account-sync.js} +16 -36
  217. package/dist/esm/transport/node/builders/business.js +129 -0
  218. package/dist/esm/transport/node/builders/global.js +370 -0
  219. package/dist/esm/transport/node/builders/index.js +7 -3
  220. package/dist/esm/transport/node/builders/message.js +63 -230
  221. package/dist/esm/transport/node/builders/pairing.js +2 -27
  222. package/dist/esm/transport/node/builders/privacy-token.js +41 -0
  223. package/dist/esm/transport/node/builders/privacy.js +48 -0
  224. package/dist/esm/transport/node/builders/profile.js +70 -0
  225. package/dist/esm/transport/node/builders/retry.js +10 -22
  226. package/dist/esm/transport/node/builders/usync.js +45 -0
  227. package/dist/esm/transport/node/helpers.js +125 -5
  228. package/dist/esm/transport/node/usync.js +5 -0
  229. package/dist/esm/transport/node/xml.js +35 -14
  230. package/dist/esm/transport/noise/WaClientPayload.js +10 -10
  231. package/dist/esm/transport/noise/WaFrameCodec.js +48 -33
  232. package/dist/esm/transport/noise/WaNoiseCert.js +4 -7
  233. package/dist/esm/transport/noise/WaNoiseSession.js +77 -29
  234. package/dist/esm/transport/noise/WaNoiseSocket.js +8 -4
  235. package/dist/esm/transport/proxy.js +27 -0
  236. package/dist/esm/transport/stream/parse.js +17 -48
  237. package/dist/esm/util/bytes.js +67 -45
  238. package/dist/esm/util/coercion.js +6 -14
  239. package/dist/esm/util/index.js +5 -0
  240. package/dist/esm/util/primitives.js +40 -14
  241. package/dist/index.js +7 -1
  242. package/dist/infra/log/ConsoleLogger.js +18 -17
  243. package/dist/infra/log/PinoLogger.js +15 -9
  244. package/dist/infra/log/types.js +12 -0
  245. package/dist/infra/perf/BackgroundQueue.js +482 -0
  246. package/dist/infra/perf/BoundedTaskQueue.js +16 -18
  247. package/dist/infra/perf/PromiseDedup.js +24 -0
  248. package/dist/infra/perf/SharedExclusiveGate.js +113 -0
  249. package/dist/infra/perf/StoreLock.js +81 -0
  250. package/dist/media/WaMediaCrypto.js +95 -15
  251. package/dist/media/WaMediaTransferClient.js +284 -91
  252. package/dist/media/conn.js +10 -6
  253. package/dist/media/constants.js +6 -2
  254. package/dist/message/WaMessageClient.js +31 -33
  255. package/dist/message/ack.js +6 -6
  256. package/dist/message/addon-crypto.js +65 -0
  257. package/dist/message/content.js +198 -9
  258. package/dist/message/icdc.js +81 -0
  259. package/dist/message/incoming.js +127 -120
  260. package/dist/message/index.js +2 -0
  261. package/dist/message/phash.js +3 -1
  262. package/dist/message/reporting-token.js +429 -0
  263. package/dist/message/use-case-secret.js +55 -0
  264. package/dist/protocol/appstate.js +28 -1
  265. package/dist/protocol/browser.js +10 -18
  266. package/dist/protocol/constants.js +26 -1
  267. package/dist/protocol/defaults.js +6 -0
  268. package/dist/protocol/index.js +23 -42
  269. package/dist/protocol/jid.js +140 -52
  270. package/dist/protocol/media.js +3 -3
  271. package/dist/protocol/message.js +62 -2
  272. package/dist/protocol/nodes.js +4 -0
  273. package/dist/protocol/notification.js +3 -1
  274. package/dist/protocol/privacy-token.js +20 -0
  275. package/dist/protocol/privacy.js +58 -0
  276. package/dist/protocol/stream.js +27 -2
  277. package/dist/protocol/usync.js +14 -0
  278. package/dist/retry/codec.js +220 -0
  279. package/dist/retry/constants.js +1 -1
  280. package/dist/retry/index.js +7 -5
  281. package/dist/retry/parse.js +88 -85
  282. package/dist/retry/replay.js +52 -49
  283. package/dist/retry/tracker.js +97 -0
  284. package/dist/signal/api/SignalDeviceSyncApi.js +273 -89
  285. package/dist/signal/api/SignalDigestSyncApi.js +17 -8
  286. package/dist/signal/api/SignalIdentitySyncApi.js +66 -36
  287. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +82 -63
  288. package/dist/signal/api/SignalRotateKeyApi.js +4 -2
  289. package/dist/signal/api/SignalSessionSyncApi.js +36 -34
  290. package/dist/signal/api/result-map.js +13 -0
  291. package/dist/signal/constants.js +1 -5
  292. package/dist/signal/crypto/WaAdvSignature.js +11 -7
  293. package/dist/signal/{store/sqlite.js → encoding.js} +94 -61
  294. package/dist/signal/group/SenderKeyChain.js +27 -22
  295. package/dist/signal/group/SenderKeyCodec.js +5 -6
  296. package/dist/signal/group/SenderKeyManager.js +144 -115
  297. package/dist/signal/index.js +15 -1
  298. package/dist/signal/registration/keygen.js +6 -2
  299. package/dist/signal/registration/utils.js +1 -0
  300. package/dist/signal/session/SignalProtocol.js +164 -53
  301. package/dist/signal/session/SignalRatchet.js +24 -15
  302. package/dist/signal/session/SignalSession.js +14 -9
  303. package/dist/signal/session/resolver.js +224 -0
  304. package/dist/store/contracts/privacy-token.store.js +2 -0
  305. package/dist/store/createStore.js +100 -188
  306. package/dist/store/index.js +15 -33
  307. package/dist/store/locks/appstate.lock.js +29 -0
  308. package/dist/store/locks/auth.lock.js +18 -0
  309. package/dist/store/locks/contact.lock.js +23 -0
  310. package/dist/store/locks/device-list.lock.js +23 -0
  311. package/dist/store/locks/message.lock.js +24 -0
  312. package/dist/store/locks/participants.lock.js +23 -0
  313. package/dist/store/locks/privacy-token.lock.js +21 -0
  314. package/dist/store/locks/retry.lock.js +32 -0
  315. package/dist/store/locks/sender-key.lock.js +55 -0
  316. package/dist/store/locks/signal.lock.js +66 -0
  317. package/dist/store/locks/thread.lock.js +24 -0
  318. package/dist/store/noop.store.js +4 -7
  319. package/dist/store/providers/memory/appstate.store.js +36 -14
  320. package/dist/store/providers/memory/contact.store.js +5 -0
  321. package/dist/store/providers/memory/device-list.store.js +12 -34
  322. package/dist/store/providers/memory/message.store.js +11 -5
  323. package/dist/store/providers/memory/participants.store.js +1 -8
  324. package/dist/store/providers/memory/privacy-token.store.js +47 -0
  325. package/dist/store/providers/memory/retry.store.js +77 -2
  326. package/dist/store/providers/memory/sender-key.store.js +14 -11
  327. package/dist/store/providers/memory/signal.store.js +54 -25
  328. package/dist/store/providers/memory/thread.store.js +5 -0
  329. package/dist/transport/WaComms.js +30 -26
  330. package/dist/transport/WaWebSocket.js +148 -18
  331. package/dist/transport/binary/constants.js +1 -31
  332. package/dist/transport/binary/decoder.js +8 -8
  333. package/dist/transport/binary/encoder.js +10 -9
  334. package/dist/transport/binary/index.js +0 -4
  335. package/dist/transport/index.js +7 -1
  336. package/dist/transport/keepalive/WaKeepAlive.js +1 -7
  337. package/dist/transport/node/WaNodeOrchestrator.js +25 -21
  338. package/dist/transport/node/WaNodeTransport.js +0 -3
  339. package/dist/transport/node/builders/{accountSync.js → account-sync.js} +15 -35
  340. package/dist/transport/node/builders/business.js +137 -0
  341. package/dist/transport/node/builders/global.js +375 -0
  342. package/dist/transport/node/builders/index.js +29 -17
  343. package/dist/transport/node/builders/message.js +64 -236
  344. package/dist/transport/node/builders/pairing.js +2 -29
  345. package/dist/transport/node/builders/privacy-token.js +46 -0
  346. package/dist/transport/node/builders/privacy.js +55 -0
  347. package/dist/transport/node/builders/profile.js +78 -0
  348. package/dist/transport/node/builders/retry.js +9 -21
  349. package/dist/transport/node/builders/usync.js +49 -0
  350. package/dist/transport/node/helpers.js +131 -4
  351. package/dist/transport/node/usync.js +8 -0
  352. package/dist/transport/node/xml.js +35 -14
  353. package/dist/transport/noise/WaClientPayload.js +13 -13
  354. package/dist/transport/noise/WaFrameCodec.js +47 -32
  355. package/dist/transport/noise/WaNoiseCert.js +5 -8
  356. package/dist/transport/noise/WaNoiseSession.js +77 -29
  357. package/dist/transport/noise/WaNoiseSocket.js +8 -4
  358. package/dist/transport/proxy.js +34 -0
  359. package/dist/transport/stream/parse.js +20 -52
  360. package/dist/types/appstate/WaAppStateCrypto.d.ts +0 -1
  361. package/dist/types/appstate/WaAppStateSyncClient.d.ts +5 -2
  362. package/dist/types/appstate/constants.d.ts +1 -0
  363. package/dist/types/appstate/encoding.d.ts +7 -0
  364. package/dist/types/appstate/index.d.ts +3 -3
  365. package/dist/types/appstate/utils.d.ts +0 -3
  366. package/dist/types/auth/WaAuthClient.d.ts +10 -12
  367. package/dist/types/auth/flow/WaAuthCredentialsFlow.d.ts +1 -1
  368. package/dist/types/auth/index.d.ts +0 -4
  369. package/dist/types/auth/pairing/WaQrFlow.d.ts +1 -1
  370. package/dist/types/auth/types.d.ts +7 -9
  371. package/dist/types/client/WaClient.d.ts +42 -25
  372. package/dist/types/client/WaClientFactory.d.ts +33 -26
  373. package/dist/types/client/connection/WaConnectionManager.d.ts +66 -0
  374. package/dist/types/client/connection/WaKeyShareCoordinator.d.ts +14 -0
  375. package/dist/types/client/connection/WaReceiptQueue.d.ts +13 -0
  376. package/dist/types/client/coordinators/WaAppStateMutationCoordinator.d.ts +46 -0
  377. package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +57 -0
  378. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +3 -2
  379. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +29 -38
  380. package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +4 -0
  381. package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +26 -0
  382. package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +36 -0
  383. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +8 -0
  384. package/dist/types/client/coordinators/WaStreamControlCoordinator.d.ts +3 -2
  385. package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +45 -0
  386. package/dist/types/client/dirty.d.ts +1 -0
  387. package/dist/types/client/events/devices.d.ts +20 -0
  388. package/dist/types/client/events/group.d.ts +2 -1
  389. package/dist/types/client/events/identity.d.ts +9 -0
  390. package/dist/types/client/events/privacy-token.d.ts +7 -0
  391. package/dist/types/client/history-sync.d.ts +9 -6
  392. package/dist/types/client/incoming.d.ts +3 -1
  393. package/dist/types/client/index.d.ts +1 -1
  394. package/dist/types/client/mailbox.d.ts +3 -5
  395. package/dist/types/client/messages.d.ts +1 -2
  396. package/dist/types/client/messaging/fanout.d.ts +14 -0
  397. package/dist/types/client/messaging/key-protocol.d.ts +18 -0
  398. package/dist/types/client/messaging/participants.d.ts +13 -0
  399. package/dist/types/client/persistence/WriteBehindPersistence.d.ts +34 -0
  400. package/dist/types/client/tokens/cs-token.d.ts +10 -0
  401. package/dist/types/client/tokens/tc-token.d.ts +5 -0
  402. package/dist/types/client/types.d.ts +75 -4
  403. package/dist/types/crypto/core/hkdf.d.ts +0 -6
  404. package/dist/types/crypto/core/index.d.ts +2 -3
  405. package/dist/types/crypto/core/nonce.d.ts +2 -0
  406. package/dist/types/crypto/core/primitives.d.ts +0 -1
  407. package/dist/types/crypto/core/random.d.ts +2 -7
  408. package/dist/types/crypto/index.d.ts +0 -1
  409. package/dist/types/crypto/math/constants.d.ts +4 -2
  410. package/dist/types/crypto/math/fe.d.ts +30 -0
  411. package/dist/types/crypto/math/mod.d.ts +0 -2
  412. package/dist/types/crypto/math/types.d.ts +11 -4
  413. package/dist/types/index.d.ts +5 -3
  414. package/dist/types/infra/log/ConsoleLogger.d.ts +2 -1
  415. package/dist/types/infra/log/PinoLogger.d.ts +1 -1
  416. package/dist/types/infra/log/types.d.ts +1 -0
  417. package/dist/types/infra/perf/BackgroundQueue.d.ts +58 -0
  418. package/dist/types/infra/perf/BoundedTaskQueue.d.ts +1 -1
  419. package/dist/types/infra/perf/PromiseDedup.d.ts +4 -0
  420. package/dist/types/infra/perf/SharedExclusiveGate.d.ts +17 -0
  421. package/dist/types/infra/perf/StoreLock.d.ts +10 -0
  422. package/dist/types/media/WaMediaCrypto.d.ts +3 -2
  423. package/dist/types/media/WaMediaTransferClient.d.ts +16 -15
  424. package/dist/types/media/constants.d.ts +1 -1
  425. package/dist/types/media/index.d.ts +1 -1
  426. package/dist/types/media/types.d.ts +15 -2
  427. package/dist/types/message/addon-crypto.d.ts +25 -0
  428. package/dist/types/message/content.d.ts +8 -0
  429. package/dist/types/message/icdc.d.ts +13 -0
  430. package/dist/types/message/index.d.ts +2 -0
  431. package/dist/types/message/reporting-token.d.ts +18 -0
  432. package/dist/types/message/types.d.ts +45 -6
  433. package/dist/types/message/use-case-secret.d.ts +20 -0
  434. package/dist/types/protocol/appstate.d.ts +47 -0
  435. package/dist/types/protocol/constants.d.ts +8 -3
  436. package/dist/types/protocol/defaults.d.ts +6 -0
  437. package/dist/types/protocol/index.d.ts +2 -11
  438. package/dist/types/protocol/jid.d.ts +22 -5
  439. package/dist/types/protocol/message.d.ts +60 -0
  440. package/dist/types/protocol/nodes.d.ts +4 -0
  441. package/dist/types/protocol/notification.d.ts +2 -0
  442. package/dist/types/protocol/privacy-token.d.ts +17 -0
  443. package/dist/types/protocol/privacy.d.ts +75 -0
  444. package/dist/types/protocol/stream.d.ts +30 -0
  445. package/dist/types/protocol/usync.d.ts +11 -0
  446. package/dist/types/retry/codec.d.ts +3 -0
  447. package/dist/types/retry/index.d.ts +4 -3
  448. package/dist/types/retry/parse.d.ts +5 -2
  449. package/dist/types/retry/replay.d.ts +0 -4
  450. package/dist/types/retry/tracker.d.ts +20 -0
  451. package/dist/types/retry/types.d.ts +10 -4
  452. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +15 -2
  453. package/dist/types/signal/api/SignalDigestSyncApi.d.ts +6 -0
  454. package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +2 -0
  455. package/dist/types/signal/api/SignalRotateKeyApi.d.ts +4 -5
  456. package/dist/types/signal/api/SignalSessionSyncApi.d.ts +8 -6
  457. package/dist/types/signal/api/result-map.d.ts +1 -0
  458. package/dist/types/signal/constants.d.ts +0 -3
  459. package/dist/types/signal/{store/sqlite.d.ts → encoding.d.ts} +3 -3
  460. package/dist/types/signal/group/SenderKeyCodec.d.ts +4 -6
  461. package/dist/types/signal/group/SenderKeyManager.d.ts +10 -5
  462. package/dist/types/signal/index.d.ts +3 -0
  463. package/dist/types/signal/session/SignalProtocol.d.ts +19 -4
  464. package/dist/types/signal/session/resolver.d.ts +22 -0
  465. package/dist/types/store/contracts/appstate.store.d.ts +4 -1
  466. package/dist/types/store/contracts/contact.store.d.ts +1 -0
  467. package/dist/types/store/contracts/device-list.store.d.ts +0 -3
  468. package/dist/types/store/contracts/message.store.d.ts +1 -0
  469. package/dist/types/store/contracts/participants.store.d.ts +0 -1
  470. package/dist/types/store/contracts/privacy-token.store.d.ts +16 -0
  471. package/dist/types/store/contracts/retry.store.d.ts +7 -0
  472. package/dist/types/store/contracts/sender-key.store.d.ts +0 -1
  473. package/dist/types/store/contracts/signal.store.d.ts +13 -0
  474. package/dist/types/store/contracts/thread.store.d.ts +1 -0
  475. package/dist/types/store/createStore.d.ts +1 -1
  476. package/dist/types/store/index.d.ts +5 -13
  477. package/dist/types/store/locks/appstate.lock.d.ts +3 -0
  478. package/dist/types/store/locks/auth.lock.d.ts +3 -0
  479. package/dist/types/store/locks/contact.lock.d.ts +3 -0
  480. package/dist/types/store/locks/device-list.lock.d.ts +2 -0
  481. package/dist/types/store/locks/message.lock.d.ts +3 -0
  482. package/dist/types/store/locks/participants.lock.d.ts +2 -0
  483. package/dist/types/store/locks/privacy-token.lock.d.ts +2 -0
  484. package/dist/types/store/locks/retry.lock.d.ts +2 -0
  485. package/dist/types/store/locks/sender-key.lock.d.ts +3 -0
  486. package/dist/types/store/locks/signal.lock.d.ts +3 -0
  487. package/dist/types/store/locks/thread.lock.d.ts +3 -0
  488. package/dist/types/store/providers/memory/appstate.store.d.ts +3 -1
  489. package/dist/types/store/providers/memory/contact.store.d.ts +1 -0
  490. package/dist/types/store/providers/memory/device-list.store.d.ts +0 -3
  491. package/dist/types/store/providers/memory/message.store.d.ts +1 -0
  492. package/dist/types/store/providers/memory/participants.store.d.ts +0 -1
  493. package/dist/types/store/providers/memory/privacy-token.store.d.ts +13 -0
  494. package/dist/types/store/providers/memory/retry.store.d.ts +8 -0
  495. package/dist/types/store/providers/memory/sender-key.store.d.ts +0 -1
  496. package/dist/types/store/providers/memory/signal.store.d.ts +8 -1
  497. package/dist/types/store/providers/memory/thread.store.d.ts +1 -0
  498. package/dist/types/store/types.d.ts +49 -58
  499. package/dist/types/transport/WaWebSocket.d.ts +3 -1
  500. package/dist/types/transport/binary/constants.d.ts +0 -30
  501. package/dist/types/transport/binary/index.d.ts +0 -1
  502. package/dist/types/transport/index.d.ts +2 -1
  503. package/dist/types/transport/keepalive/WaKeepAlive.d.ts +0 -1
  504. package/dist/types/transport/node/WaNodeOrchestrator.d.ts +3 -4
  505. package/dist/types/transport/node/WaNodeTransport.d.ts +0 -9
  506. package/dist/types/transport/node/builders/business.d.ts +29 -0
  507. package/dist/types/transport/node/builders/global.d.ts +102 -0
  508. package/dist/types/transport/node/builders/group.d.ts +4 -6
  509. package/dist/types/transport/node/builders/index.d.ts +7 -3
  510. package/dist/types/transport/node/builders/message.d.ts +20 -30
  511. package/dist/types/transport/node/builders/pairing.d.ts +0 -2
  512. package/dist/types/transport/node/builders/privacy-token.d.ts +9 -0
  513. package/dist/types/transport/node/builders/privacy.d.ts +7 -0
  514. package/dist/types/transport/node/builders/profile.d.ts +8 -0
  515. package/dist/types/transport/node/builders/retry.d.ts +2 -5
  516. package/dist/types/transport/node/builders/usync.d.ts +21 -0
  517. package/dist/types/transport/node/helpers.d.ts +13 -0
  518. package/dist/types/transport/node/usync.d.ts +2 -0
  519. package/dist/types/transport/noise/WaFrameCodec.d.ts +3 -0
  520. package/dist/types/transport/noise/WaNoiseSession.d.ts +4 -2
  521. package/dist/types/transport/noise/WaNoiseSocket.d.ts +4 -2
  522. package/dist/types/transport/proxy.d.ts +6 -0
  523. package/dist/types/transport/stream/parse.d.ts +0 -1
  524. package/dist/types/transport/types.d.ts +18 -1
  525. package/dist/types/util/bytes.d.ts +5 -0
  526. package/dist/types/util/index.d.ts +5 -0
  527. package/dist/types/util/primitives.d.ts +2 -0
  528. package/dist/util/bytes.js +72 -46
  529. package/dist/util/coercion.js +6 -14
  530. package/dist/util/index.js +23 -0
  531. package/dist/util/primitives.js +42 -14
  532. package/package.json +52 -9
  533. package/proto/index.js +1 -1
  534. package/dist/crypto/core/constants.js +0 -4
  535. package/dist/crypto/core/encoding.js +0 -29
  536. package/dist/esm/crypto/core/constants.js +0 -1
  537. package/dist/esm/crypto/core/encoding.js +0 -25
  538. package/dist/esm/retry/outbound.js +0 -83
  539. package/dist/esm/store/providers/sqlite/BaseSqliteStore.js +0 -37
  540. package/dist/esm/store/providers/sqlite/appstate.store.js +0 -169
  541. package/dist/esm/store/providers/sqlite/auth.store.js +0 -176
  542. package/dist/esm/store/providers/sqlite/connection.js +0 -240
  543. package/dist/esm/store/providers/sqlite/contact.store.js +0 -61
  544. package/dist/esm/store/providers/sqlite/device-list.store.js +0 -155
  545. package/dist/esm/store/providers/sqlite/message.store.js +0 -119
  546. package/dist/esm/store/providers/sqlite/migrations.js +0 -347
  547. package/dist/esm/store/providers/sqlite/participants.store.js +0 -85
  548. package/dist/esm/store/providers/sqlite/retry.store.js +0 -144
  549. package/dist/esm/store/providers/sqlite/sender-key.store.js +0 -203
  550. package/dist/esm/store/providers/sqlite/signal.store.js +0 -353
  551. package/dist/esm/store/providers/sqlite/thread.store.js +0 -72
  552. package/dist/esm/util/base64.js +0 -18
  553. package/dist/esm/util/signal-address.js +0 -5
  554. package/dist/retry/outbound.js +0 -88
  555. package/dist/store/providers/sqlite/BaseSqliteStore.js +0 -41
  556. package/dist/store/providers/sqlite/appstate.store.js +0 -173
  557. package/dist/store/providers/sqlite/auth.store.js +0 -180
  558. package/dist/store/providers/sqlite/connection.js +0 -276
  559. package/dist/store/providers/sqlite/contact.store.js +0 -65
  560. package/dist/store/providers/sqlite/device-list.store.js +0 -159
  561. package/dist/store/providers/sqlite/message.store.js +0 -123
  562. package/dist/store/providers/sqlite/migrations.js +0 -350
  563. package/dist/store/providers/sqlite/participants.store.js +0 -89
  564. package/dist/store/providers/sqlite/retry.store.js +0 -148
  565. package/dist/store/providers/sqlite/sender-key.store.js +0 -207
  566. package/dist/store/providers/sqlite/signal.store.js +0 -357
  567. package/dist/store/providers/sqlite/thread.store.js +0 -76
  568. package/dist/types/appstate/store/sqlite.d.ts +0 -21
  569. package/dist/types/crypto/core/constants.d.ts +0 -1
  570. package/dist/types/crypto/core/encoding.d.ts +0 -11
  571. package/dist/types/retry/outbound.d.ts +0 -4
  572. package/dist/types/store/providers/sqlite/BaseSqliteStore.d.ts +0 -12
  573. package/dist/types/store/providers/sqlite/appstate.store.d.ts +0 -15
  574. package/dist/types/store/providers/sqlite/auth.store.d.ts +0 -10
  575. package/dist/types/store/providers/sqlite/connection.d.ts +0 -10
  576. package/dist/types/store/providers/sqlite/contact.store.d.ts +0 -10
  577. package/dist/types/store/providers/sqlite/device-list.store.d.ts +0 -18
  578. package/dist/types/store/providers/sqlite/message.store.d.ts +0 -11
  579. package/dist/types/store/providers/sqlite/migrations.d.ts +0 -3
  580. package/dist/types/store/providers/sqlite/participants.store.d.ts +0 -13
  581. package/dist/types/store/providers/sqlite/retry.store.d.ts +0 -16
  582. package/dist/types/store/providers/sqlite/sender-key.store.d.ts +0 -25
  583. package/dist/types/store/providers/sqlite/signal.store.d.ts +0 -46
  584. package/dist/types/store/providers/sqlite/thread.store.d.ts +0 -11
  585. package/dist/types/util/base64.d.ts +0 -4
  586. package/dist/types/util/signal-address.d.ts +0 -2
  587. package/dist/util/base64.js +0 -24
  588. package/dist/util/signal-address.js +0 -8
  589. /package/dist/types/transport/node/builders/{accountSync.d.ts → account-sync.d.ts} +0 -0
@@ -1,33 +1,64 @@
1
1
  import { WA_DEFAULTS } from './constants.js';
2
- export function splitJid(jid) {
2
+ const KNOWN_SERVERS = {
3
+ [WA_DEFAULTS.HOST_DOMAIN]: WA_DEFAULTS.HOST_DOMAIN,
4
+ [WA_DEFAULTS.GROUP_SERVER]: WA_DEFAULTS.GROUP_SERVER,
5
+ [WA_DEFAULTS.BROADCAST_SERVER]: WA_DEFAULTS.BROADCAST_SERVER,
6
+ [WA_DEFAULTS.LID_SERVER]: WA_DEFAULTS.LID_SERVER,
7
+ [WA_DEFAULTS.HOSTED_SERVER]: WA_DEFAULTS.HOSTED_SERVER,
8
+ [WA_DEFAULTS.HOSTED_LID_SERVER]: WA_DEFAULTS.HOSTED_LID_SERVER,
9
+ [WA_DEFAULTS.MSGR_SERVER]: WA_DEFAULTS.MSGR_SERVER,
10
+ [WA_DEFAULTS.INTEROP_SERVER]: WA_DEFAULTS.INTEROP_SERVER
11
+ };
12
+ /**
13
+ * Returns the canonical reference for known server strings, avoiding
14
+ * thousands of duplicate sliced copies (e.g. "lid", "s.whatsapp.net")
15
+ * that would otherwise be created by repeated JID parsing.
16
+ */
17
+ function internServer(server) {
18
+ return KNOWN_SERVERS[server] ?? server;
19
+ }
20
+ function extractDigits(input) {
21
+ let digits = '';
22
+ for (let index = 0; index < input.length; index += 1) {
23
+ const code = input.charCodeAt(index);
24
+ if (code >= 48 && code <= 57)
25
+ digits += input[index];
26
+ }
27
+ return digits;
28
+ }
29
+ function findAtIndex(jid) {
3
30
  const atIndex = jid.indexOf('@');
4
- if (atIndex < 1 || atIndex >= jid.length - 1) {
31
+ if (atIndex < 1 || atIndex >= jid.length - 1)
5
32
  throw new Error(`invalid jid: ${jid}`);
6
- }
7
- return {
8
- user: jid.slice(0, atIndex),
9
- server: jid.slice(atIndex + 1)
10
- };
33
+ return atIndex;
34
+ }
35
+ export function splitJid(jid) {
36
+ const atIndex = findAtIndex(jid);
37
+ return { user: jid.slice(0, atIndex), server: internServer(jid.slice(atIndex + 1)) };
11
38
  }
12
39
  export function normalizeRecipientJid(to) {
13
40
  const input = to.trim();
14
- if (input.length === 0) {
41
+ if (input.length === 0)
15
42
  throw new Error('recipient cannot be empty');
43
+ let hasDash = false;
44
+ for (let index = 0; index < input.length; index += 1) {
45
+ const code = input.charCodeAt(index);
46
+ if (code === 64)
47
+ return input;
48
+ if (code === 45) {
49
+ hasDash = true;
50
+ }
16
51
  }
17
- if (input.includes('@')) {
18
- return input;
19
- }
20
- if (input.includes('-')) {
52
+ const digits = extractDigits(input);
53
+ if (hasDash)
21
54
  return `${input}@${WA_DEFAULTS.GROUP_SERVER}`;
22
- }
23
- const digits = input.replace(/\D/g, '');
24
- if (digits.length === 0) {
55
+ if (digits.length === 0)
25
56
  throw new Error(`invalid recipient: ${to}`);
26
- }
27
57
  return `${digits}@${WA_DEFAULTS.HOST_DOMAIN}`;
28
58
  }
29
- export function isJidType(jid, type) {
30
- return jid.endsWith(`@${type}`);
59
+ function isJidType(jid, type) {
60
+ const atIndex = jid.length - type.length - 1;
61
+ return atIndex >= 1 && jid.charCodeAt(atIndex) === 64 && jid.endsWith(type);
31
62
  }
32
63
  export function isGroupJid(jid) {
33
64
  return isJidType(jid, WA_DEFAULTS.GROUP_SERVER);
@@ -39,56 +70,106 @@ export function isGroupOrBroadcastJid(jid) {
39
70
  return isGroupJid(jid) || isBroadcastJid(jid);
40
71
  }
41
72
  export function parseSignalAddressFromJid(jid) {
42
- const parsed = splitJid(jid);
43
- const colonIndex = parsed.user.indexOf(':');
44
- if (colonIndex === -1) {
45
- return {
46
- user: parsed.user,
47
- server: parsed.server,
48
- device: 0
49
- };
73
+ const atIndex = findAtIndex(jid);
74
+ const colonIndex = jid.indexOf(':', 0);
75
+ const server = internServer(jid.slice(atIndex + 1));
76
+ if (colonIndex === -1 || colonIndex > atIndex) {
77
+ return { user: jid.slice(0, atIndex), server, device: 0 };
50
78
  }
51
- const user = parsed.user.slice(0, colonIndex);
52
- const deviceRaw = parsed.user.slice(colonIndex + 1);
53
- const device = Number.parseInt(deviceRaw, 10);
54
- if (!Number.isFinite(device) || device < 0) {
79
+ const device = Number.parseInt(jid.slice(colonIndex + 1, atIndex), 10);
80
+ if (!Number.isFinite(device) || device < 0)
55
81
  throw new Error(`invalid jid device: ${jid}`);
56
- }
57
- return {
58
- user,
59
- server: parsed.server,
60
- device
61
- };
82
+ return { user: jid.slice(0, colonIndex), server, device };
62
83
  }
63
- export function toUserJid(jid) {
84
+ export function parseJidFull(jid) {
64
85
  const address = parseSignalAddressFromJid(jid);
65
- return `${address.user}@${address.server}`;
86
+ const userJid = `${address.user}@${address.server}`;
87
+ const normalizedJid = address.device === 0 ? userJid : `${address.user}:${address.device}@${address.server}`;
88
+ return { address, userJid, normalizedJid };
89
+ }
90
+ export function canonicalizeSignalServer(server, hostDomain = WA_DEFAULTS.HOST_DOMAIN) {
91
+ if (server === WA_DEFAULTS.HOSTED_SERVER)
92
+ return hostDomain;
93
+ if (server === WA_DEFAULTS.HOSTED_LID_SERVER)
94
+ return WA_DEFAULTS.LID_SERVER;
95
+ return server;
96
+ }
97
+ export function canonicalizeSignalJid(jid, hostDomain = WA_DEFAULTS.HOST_DOMAIN) {
98
+ const address = parseSignalAddressFromJid(jid);
99
+ const server = canonicalizeSignalServer(address.server ?? WA_DEFAULTS.HOST_DOMAIN, hostDomain);
100
+ if (address.device === 0)
101
+ return `${address.user}@${server}`;
102
+ return `${address.user}:${address.device}@${server}`;
103
+ }
104
+ export function toUserJid(jid, options = {}) {
105
+ const address = parseSignalAddressFromJid(jid);
106
+ const server = options.canonicalizeSignalServer === true
107
+ ? canonicalizeSignalServer(address.server ?? WA_DEFAULTS.HOST_DOMAIN, options.hostDomain ?? WA_DEFAULTS.HOST_DOMAIN)
108
+ : address.server;
109
+ return `${address.user}@${server}`;
66
110
  }
67
111
  export function normalizeDeviceJid(jid) {
68
112
  const address = parseSignalAddressFromJid(jid);
69
- if (address.device === 0) {
113
+ if (address.device === 0)
70
114
  return `${address.user}@${address.server}`;
71
- }
72
115
  return `${address.user}:${address.device}@${address.server}`;
73
116
  }
117
+ export function isHostedDeviceId(deviceId) {
118
+ return deviceId === WA_DEFAULTS.HOSTED_DEVICE_ID;
119
+ }
120
+ export function isHostedServer(server) {
121
+ return server === WA_DEFAULTS.HOSTED_SERVER || server === WA_DEFAULTS.HOSTED_LID_SERVER;
122
+ }
123
+ export function isHostedDeviceJid(jid) {
124
+ const { user, server } = splitJid(jid);
125
+ if (isHostedServer(server)) {
126
+ return true;
127
+ }
128
+ const colonIndex = user.indexOf(':');
129
+ if (colonIndex < 0) {
130
+ return false;
131
+ }
132
+ const deviceId = Number.parseInt(user.slice(colonIndex + 1), 10);
133
+ return Number.isSafeInteger(deviceId) && isHostedDeviceId(deviceId);
134
+ }
135
+ export function buildDeviceJid(user, normalizedServer, deviceId, options = {}) {
136
+ if (options.isHosted === true) {
137
+ if (!isHostedDeviceId(deviceId)) {
138
+ return `${user}:${deviceId}@${normalizedServer}`;
139
+ }
140
+ const hostedServer = options.rawServer === WA_DEFAULTS.HOSTED_LID_SERVER ||
141
+ normalizedServer === WA_DEFAULTS.LID_SERVER
142
+ ? WA_DEFAULTS.HOSTED_LID_SERVER
143
+ : WA_DEFAULTS.HOSTED_SERVER;
144
+ return `${user}:${WA_DEFAULTS.HOSTED_DEVICE_ID}@${hostedServer}`;
145
+ }
146
+ if (deviceId === 0) {
147
+ return `${user}@${normalizedServer}`;
148
+ }
149
+ return `${user}:${deviceId}@${normalizedServer}`;
150
+ }
74
151
  export function getLoginIdentity(meJid) {
75
- const parsed = splitJid(meJid);
76
- const [userAndAgent, devicePart = '0'] = parsed.user.split(':');
77
- const userPart = userAndAgent.split('.')[0];
78
- const username = Number.parseInt(userPart, 10);
79
- const device = Number.parseInt(devicePart, 10);
80
- if (!Number.isSafeInteger(username) || username <= 0) {
152
+ const atIndex = findAtIndex(meJid);
153
+ const colonIndex = meJid.indexOf(':', 0);
154
+ const dotIndex = meJid.indexOf('.', 0);
155
+ const hasColon = colonIndex !== -1 && colonIndex < atIndex;
156
+ const hasDot = dotIndex !== -1 && dotIndex < atIndex && (colonIndex === -1 || dotIndex < colonIndex);
157
+ const userEndIndex = hasDot ? dotIndex : hasColon ? colonIndex : atIndex;
158
+ const username = Number.parseInt(meJid.slice(0, userEndIndex), 10);
159
+ const device = hasColon ? Number.parseInt(meJid.slice(colonIndex + 1, atIndex), 10) : 0;
160
+ if (!Number.isSafeInteger(username) || username <= 0)
81
161
  throw new Error(`invalid numeric username from ${meJid}`);
82
- }
83
- if (!Number.isSafeInteger(device) || device < 0) {
162
+ if (!Number.isSafeInteger(device) || device < 0)
84
163
  throw new Error(`invalid device from ${meJid}`);
85
- }
86
164
  return { username, device };
87
165
  }
88
166
  export function parsePhoneJid(input) {
89
- const digits = input.replace(/\D+/g, '');
90
- if (!digits) {
167
+ const digits = extractDigits(input);
168
+ if (!digits)
91
169
  throw new Error('phone number is empty after normalization');
92
- }
93
170
  return `${digits}@${WA_DEFAULTS.HOST_DOMAIN}`;
94
171
  }
172
+ export function signalAddressKey(address) {
173
+ const server = address.server ?? WA_DEFAULTS.HOST_DOMAIN;
174
+ return `${address.user}|${server}|${address.device}`;
175
+ }
@@ -13,8 +13,8 @@ export const WA_MEDIA_HKDF_INFO = Object.freeze({
13
13
  });
14
14
  export const WA_PREVIEW_MEDIA_HKDF_INFO = 'Messenger Preview Keys';
15
15
  export function getWaMediaHkdfInfo(mediaType) {
16
- if (mediaType in WA_MEDIA_HKDF_INFO) {
17
- return WA_MEDIA_HKDF_INFO[mediaType];
18
- }
16
+ const info = WA_MEDIA_HKDF_INFO[mediaType];
17
+ if (info !== undefined)
18
+ return info;
19
19
  throw new Error(`unsupported media type: ${mediaType}`);
20
20
  }
@@ -11,6 +11,66 @@ export const WA_MESSAGE_TYPES = Object.freeze({
11
11
  ACK_TYPE_ERROR: 'error',
12
12
  ACK_CLASS_ERROR: 'error',
13
13
  ACK_CLASS_MESSAGE: 'message',
14
- RECEIPT_TYPE_PEER: 'peer_msg'
14
+ RECEIPT_TYPE_DELIVERY: 'delivery',
15
+ RECEIPT_TYPE_SENDER: 'sender',
16
+ RECEIPT_TYPE_INACTIVE: 'inactive',
17
+ RECEIPT_TYPE_READ: 'read',
18
+ RECEIPT_TYPE_READ_SELF: 'read-self',
19
+ RECEIPT_TYPE_PLAYED: 'played',
20
+ RECEIPT_TYPE_PLAYED_SELF: 'played-self',
21
+ RECEIPT_TYPE_HISTORY_SYNC: 'hist_sync',
22
+ RECEIPT_TYPE_PEER: 'peer_msg',
23
+ RECEIPT_TYPE_SERVER_ERROR: 'server-error',
24
+ RECEIPT_TYPE_RETRY: 'retry'
15
25
  });
16
26
  export const WA_RETRYABLE_ACK_CODES = Object.freeze(['408', '429', '500', '503']);
27
+ export const WA_STANZA_MSG_TYPES = Object.freeze({
28
+ TEXT: 'text',
29
+ MEDIA: 'media',
30
+ MEDIA_NOTIFY: 'medianotify',
31
+ PAY: 'pay',
32
+ POLL: 'poll',
33
+ REACTION: 'reaction',
34
+ EVENT: 'event'
35
+ });
36
+ export const WA_EDIT_ATTRS = Object.freeze({
37
+ MESSAGE_EDIT: '1',
38
+ PIN_IN_CHAT: '2',
39
+ SENDER_REVOKE: '7',
40
+ ADMIN_REVOKE: '8'
41
+ });
42
+ export const WA_POLL_META_TYPES = Object.freeze({
43
+ CREATION: 'creation',
44
+ VOTE: 'vote',
45
+ RESULT_SNAPSHOT: 'result_snapshot',
46
+ EDIT: 'edit'
47
+ });
48
+ export const WA_EVENT_META_TYPES = Object.freeze({
49
+ CREATION: 'creation',
50
+ RESPONSE: 'response',
51
+ EDIT: 'edit'
52
+ });
53
+ export const WA_ENC_MEDIA_TYPES = Object.freeze({
54
+ IMAGE: 'image',
55
+ VIDEO: 'video',
56
+ PTV: 'ptv',
57
+ AUDIO: 'audio',
58
+ PTT: 'ptt',
59
+ LOCATION: 'location',
60
+ LIVE_LOCATION: 'livelocation',
61
+ VCARD: 'vcard',
62
+ CONTACT_ARRAY: 'contact_array',
63
+ DOCUMENT: 'document',
64
+ URL: 'url',
65
+ GIF: 'gif',
66
+ STICKER: 'sticker',
67
+ STICKER_PACK: 'sticker_pack',
68
+ LIST: 'list',
69
+ LIST_RESPONSE: 'list_response',
70
+ BUTTON: 'button',
71
+ BUTTON_RESPONSE: 'buttons_response',
72
+ ORDER: 'order',
73
+ PRODUCT: 'product',
74
+ NATIVE_FLOW_RESPONSE: 'native_flow_response',
75
+ GROUP_HISTORY: 'group_history'
76
+ });
@@ -23,6 +23,8 @@ export const WA_NODE_TAGS = Object.freeze({
23
23
  KEY_FETCH: 'key_fetch',
24
24
  LIST: 'list',
25
25
  USER: 'user',
26
+ CONTACT: 'contact',
27
+ LID: 'lid',
26
28
  PICTURE: 'picture',
27
29
  PRIVACY: 'privacy',
28
30
  PARTICIPATING: 'participating',
@@ -76,6 +78,8 @@ export const WA_XMLNS = Object.freeze({
76
78
  PRIVACY: 'privacy',
77
79
  BLOCKLIST: 'blocklist',
78
80
  USYNC: 'usync',
81
+ BUSINESS: 'w:biz',
82
+ STATUS: 'status',
79
83
  GROUPS: 'w:g2',
80
84
  NEWSLETTER: 'newsletter',
81
85
  XMPP_PING: 'urn:xmpp:ping',
@@ -1,5 +1,7 @@
1
1
  export const WA_NOTIFICATION_TYPES = Object.freeze({
2
- GROUP: 'w:gp2'
2
+ GROUP: 'w:gp2',
3
+ ENCRYPT: 'encrypt',
4
+ DEVICES: 'devices'
3
5
  });
4
6
  export const WA_GROUP_NOTIFICATION_TAGS = Object.freeze({
5
7
  REMOVE: 'remove',
@@ -0,0 +1,17 @@
1
+ export const WA_PRIVACY_TOKEN_TYPES = Object.freeze({
2
+ TRUSTED_CONTACT: 'trusted_contact'
3
+ });
4
+ export const WA_PRIVACY_TOKEN_TAGS = Object.freeze({
5
+ TOKENS: 'tokens',
6
+ TOKEN: 'token',
7
+ TC_TOKEN: 'tctoken',
8
+ CS_TOKEN: 'cstoken'
9
+ });
10
+ export const WA_PRIVACY_TOKEN_NOTIFICATION_TYPE = 'privacy_token';
11
+ export const WA_TC_TOKEN_DEFAULTS = Object.freeze({
12
+ DURATION_S: 604800,
13
+ NUM_BUCKETS: 4,
14
+ SENDER_DURATION_S: 604800,
15
+ SENDER_NUM_BUCKETS: 4,
16
+ MAX_DURATION_S: 15552000
17
+ });
@@ -0,0 +1,55 @@
1
+ export const WA_PRIVACY_CATEGORIES = Object.freeze({
2
+ READ_RECEIPTS: 'readreceipts',
3
+ LAST_SEEN: 'last',
4
+ ONLINE: 'online',
5
+ PROFILE_PICTURE: 'profile',
6
+ ABOUT: 'status',
7
+ GROUP_ADD: 'groupadd',
8
+ CALL_ADD: 'calladd',
9
+ MESSAGES: 'messages',
10
+ DEFENSE_MODE: 'defense'
11
+ });
12
+ export const WA_PRIVACY_VALUES = Object.freeze({
13
+ ALL: 'all',
14
+ CONTACTS: 'contacts',
15
+ CONTACT_BLACKLIST: 'contact_blacklist',
16
+ NONE: 'none',
17
+ MATCH_LAST_SEEN: 'match_last_seen',
18
+ KNOWN: 'known',
19
+ OFF: 'off',
20
+ ON_STANDARD: 'on_standard',
21
+ ERROR: 'error'
22
+ });
23
+ export const WA_PRIVACY_CATEGORY_TO_SETTING = Object.freeze({
24
+ [WA_PRIVACY_CATEGORIES.READ_RECEIPTS]: 'readReceipts',
25
+ [WA_PRIVACY_CATEGORIES.LAST_SEEN]: 'lastSeen',
26
+ [WA_PRIVACY_CATEGORIES.ONLINE]: 'online',
27
+ [WA_PRIVACY_CATEGORIES.PROFILE_PICTURE]: 'profilePicture',
28
+ [WA_PRIVACY_CATEGORIES.ABOUT]: 'about',
29
+ [WA_PRIVACY_CATEGORIES.GROUP_ADD]: 'groupAdd',
30
+ [WA_PRIVACY_CATEGORIES.CALL_ADD]: 'callAdd',
31
+ [WA_PRIVACY_CATEGORIES.MESSAGES]: 'messages',
32
+ [WA_PRIVACY_CATEGORIES.DEFENSE_MODE]: 'defenseMode'
33
+ });
34
+ export const WA_PRIVACY_SETTING_TO_CATEGORY = Object.freeze({
35
+ readReceipts: WA_PRIVACY_CATEGORIES.READ_RECEIPTS,
36
+ lastSeen: WA_PRIVACY_CATEGORIES.LAST_SEEN,
37
+ online: WA_PRIVACY_CATEGORIES.ONLINE,
38
+ profilePicture: WA_PRIVACY_CATEGORIES.PROFILE_PICTURE,
39
+ about: WA_PRIVACY_CATEGORIES.ABOUT,
40
+ groupAdd: WA_PRIVACY_CATEGORIES.GROUP_ADD,
41
+ callAdd: WA_PRIVACY_CATEGORIES.CALL_ADD,
42
+ messages: WA_PRIVACY_CATEGORIES.MESSAGES,
43
+ defenseMode: WA_PRIVACY_CATEGORIES.DEFENSE_MODE
44
+ });
45
+ export const WA_PRIVACY_DISALLOWED_LIST_CATEGORIES = Object.freeze({
46
+ ABOUT: WA_PRIVACY_CATEGORIES.ABOUT,
47
+ GROUP_ADD: WA_PRIVACY_CATEGORIES.GROUP_ADD,
48
+ LAST_SEEN: WA_PRIVACY_CATEGORIES.LAST_SEEN,
49
+ PROFILE_PICTURE: WA_PRIVACY_CATEGORIES.PROFILE_PICTURE
50
+ });
51
+ export const WA_PRIVACY_TAGS = Object.freeze({
52
+ CATEGORY: 'category',
53
+ LIST: 'list',
54
+ USER: 'user'
55
+ });
@@ -49,6 +49,18 @@ export const WA_STREAM_SIGNALING = Object.freeze({
49
49
  FORCE_LOGIN_CODE: 515,
50
50
  FORCE_LOGOUT_CODE: 516
51
51
  });
52
+ export const WA_FAILURE_REASONS = Object.freeze({
53
+ GENERIC_FAILURE: 400,
54
+ NOT_AUTHORIZED: 401,
55
+ TEMP_BANNED: 402,
56
+ LOCKED: 403,
57
+ CLIENT_TOO_OLD: 405,
58
+ BANNED: 406,
59
+ BAD_USER_AGENT: 409,
60
+ INTERNAL_SERVER_ERROR: 500,
61
+ EXPERIMENTAL: 501,
62
+ SERVICE_UNAVAILABLE: 503
63
+ });
52
64
  export const WA_DISCONNECT_REASONS = Object.freeze({
53
65
  CLIENT_DISCONNECTED: 'client_disconnected',
54
66
  COMMS_STOPPED: 'comms_stopped',
@@ -56,5 +68,18 @@ export const WA_DISCONNECT_REASONS = Object.freeze({
56
68
  STREAM_ERROR_DEVICE_REMOVED: 'stream_error_device_removed',
57
69
  STREAM_ERROR_ACK: 'stream_error_ack',
58
70
  STREAM_ERROR_XML_NOT_WELL_FORMED: 'stream_error_xml_not_well_formed',
59
- STREAM_ERROR_OTHER: 'stream_error_other'
71
+ STREAM_ERROR_OTHER: 'stream_error_other',
72
+ STREAM_ERROR_FORCE_LOGIN: 'stream_error_force_login',
73
+ STREAM_ERROR_FORCE_LOGOUT: 'stream_error_force_logout',
74
+ FAILURE_LOCKED: 'failure_locked',
75
+ FAILURE_NOT_AUTHORIZED: 'failure_not_authorized',
76
+ FAILURE_BANNED: 'failure_banned',
77
+ FAILURE_CLIENT_TOO_OLD: 'failure_client_too_old',
78
+ FAILURE_BAD_USER_AGENT: 'failure_bad_user_agent',
79
+ FAILURE_SERVICE_UNAVAILABLE: 'failure_service_unavailable',
80
+ PRIMARY_IDENTITY_KEY_CHANGE: 'primary_identity_key_change'
81
+ });
82
+ export const WA_CONNECTION_REASONS = Object.freeze({
83
+ CONNECTED: 'connected',
84
+ RECONNECTED: 'reconnected'
60
85
  });
@@ -0,0 +1,11 @@
1
+ export const WA_USYNC_MODES = Object.freeze({
2
+ QUERY: 'query'
3
+ });
4
+ export const WA_USYNC_CONTEXTS = Object.freeze({
5
+ INTERACTIVE: 'interactive',
6
+ NOTIFICATION: 'notification'
7
+ });
8
+ export const WA_USYNC_DEFAULTS = Object.freeze({
9
+ INDEX: '0',
10
+ LAST: 'true'
11
+ });
@@ -0,0 +1,216 @@
1
+ import { concatBytes, TEXT_DECODER, TEXT_ENCODER } from '../util/bytes.js';
2
+ const RETRY_PAYLOAD_CODEC_MAGIC = 0x5a;
3
+ const RETRY_PAYLOAD_CODEC_VERSION = 1;
4
+ const RETRY_PAYLOAD_MODE = Object.freeze({
5
+ plaintext: 1,
6
+ encrypted: 2,
7
+ opaque_node: 3
8
+ });
9
+ const RETRY_PAYLOAD_ENC_TYPE = Object.freeze({
10
+ msg: 1,
11
+ pkmsg: 2,
12
+ skmsg: 3
13
+ });
14
+ const RETRY_PAYLOAD_ENC_TYPE_REVERSE = Object.freeze({
15
+ 1: 'msg',
16
+ 2: 'pkmsg',
17
+ 3: 'skmsg'
18
+ });
19
+ export function encodeRetryReplayPayload(payload) {
20
+ const chunks = [];
21
+ if (payload.mode === 'plaintext') {
22
+ const header = new Uint8Array(3);
23
+ header[0] = RETRY_PAYLOAD_CODEC_MAGIC;
24
+ header[1] = RETRY_PAYLOAD_CODEC_VERSION;
25
+ header[2] = RETRY_PAYLOAD_MODE.plaintext;
26
+ chunks.push(header);
27
+ pushStringField(chunks, payload.to, 'to');
28
+ pushStringField(chunks, payload.type, 'type');
29
+ pushBytesField(chunks, payload.plaintext, 'plaintext');
30
+ return concatBytes(chunks);
31
+ }
32
+ if (payload.mode === 'encrypted') {
33
+ const header = new Uint8Array(3);
34
+ header[0] = RETRY_PAYLOAD_CODEC_MAGIC;
35
+ header[1] = RETRY_PAYLOAD_CODEC_VERSION;
36
+ header[2] = RETRY_PAYLOAD_MODE.encrypted;
37
+ chunks.push(header);
38
+ pushStringField(chunks, payload.to, 'to');
39
+ pushStringField(chunks, payload.type, 'type');
40
+ const hasParticipant = payload.participant !== undefined;
41
+ const modeDetails = new Uint8Array(2);
42
+ modeDetails[0] = RETRY_PAYLOAD_ENC_TYPE[payload.encType];
43
+ modeDetails[1] = hasParticipant ? 1 : 0;
44
+ chunks.push(modeDetails);
45
+ if (hasParticipant) {
46
+ pushStringField(chunks, payload.participant, 'participant');
47
+ }
48
+ pushBytesField(chunks, payload.ciphertext, 'ciphertext');
49
+ return concatBytes(chunks);
50
+ }
51
+ const header = new Uint8Array(3);
52
+ header[0] = RETRY_PAYLOAD_CODEC_MAGIC;
53
+ header[1] = RETRY_PAYLOAD_CODEC_VERSION;
54
+ header[2] = RETRY_PAYLOAD_MODE.opaque_node;
55
+ chunks.push(header);
56
+ pushBytesField(chunks, payload.node, 'node');
57
+ return concatBytes(chunks);
58
+ }
59
+ export function decodeRetryReplayPayload(raw) {
60
+ if (raw.byteLength < 3) {
61
+ throw new Error('invalid retry replay payload: unsupported codec version');
62
+ }
63
+ if (raw[0] !== RETRY_PAYLOAD_CODEC_MAGIC || raw[1] !== RETRY_PAYLOAD_CODEC_VERSION) {
64
+ throw new Error('invalid retry replay payload: unsupported codec version');
65
+ }
66
+ return decodeCompactRetryReplayPayload(raw);
67
+ }
68
+ function decodeEncryptedType(value) {
69
+ const result = RETRY_PAYLOAD_ENC_TYPE_REVERSE[value];
70
+ if (!result) {
71
+ throw new Error(`invalid retry encrypted encType code: ${value}`);
72
+ }
73
+ return result;
74
+ }
75
+ function pushUint16(chunks, value, field) {
76
+ if (!Number.isSafeInteger(value) || value < 0 || value > 0xffff) {
77
+ throw new Error(`invalid retry replay payload ${field} length`);
78
+ }
79
+ const out = new Uint8Array(2);
80
+ out[0] = value >>> 8;
81
+ out[1] = value & 0xff;
82
+ chunks.push(out);
83
+ }
84
+ function pushUint32(chunks, value, field) {
85
+ if (!Number.isSafeInteger(value) || value < 0 || value > 0xffffffff) {
86
+ throw new Error(`invalid retry replay payload ${field} length`);
87
+ }
88
+ const out = new Uint8Array(4);
89
+ out[0] = (value >>> 24) & 0xff;
90
+ out[1] = (value >>> 16) & 0xff;
91
+ out[2] = (value >>> 8) & 0xff;
92
+ out[3] = value & 0xff;
93
+ chunks.push(out);
94
+ }
95
+ function pushStringField(chunks, value, field) {
96
+ const encoded = TEXT_ENCODER.encode(value);
97
+ pushUint16(chunks, encoded.byteLength, field);
98
+ chunks.push(encoded);
99
+ }
100
+ function pushBytesField(chunks, value, field) {
101
+ pushUint32(chunks, value.byteLength, field);
102
+ chunks.push(value);
103
+ }
104
+ function readUint8(raw, offset, field) {
105
+ if (offset >= raw.byteLength) {
106
+ throw new Error(`invalid retry replay payload field: ${field}`);
107
+ }
108
+ return [raw[offset], offset + 1];
109
+ }
110
+ function readUint16(raw, offset, field) {
111
+ if (offset + 2 > raw.byteLength) {
112
+ throw new Error(`invalid retry replay payload field: ${field}`);
113
+ }
114
+ return [((raw[offset] << 8) | raw[offset + 1]) >>> 0, offset + 2];
115
+ }
116
+ function readUint32(raw, offset, field) {
117
+ if (offset + 4 > raw.byteLength) {
118
+ throw new Error(`invalid retry replay payload field: ${field}`);
119
+ }
120
+ return [
121
+ ((raw[offset] << 24) |
122
+ (raw[offset + 1] << 16) |
123
+ (raw[offset + 2] << 8) |
124
+ raw[offset + 3]) >>>
125
+ 0,
126
+ offset + 4
127
+ ];
128
+ }
129
+ function readString(raw, offset, field) {
130
+ const [byteLength, nextOffset] = readUint16(raw, offset, `${field}.length`);
131
+ const endOffset = nextOffset + byteLength;
132
+ if (endOffset > raw.byteLength) {
133
+ throw new Error(`invalid retry replay payload field: ${field}`);
134
+ }
135
+ return [TEXT_DECODER.decode(raw.subarray(nextOffset, endOffset)), endOffset];
136
+ }
137
+ function readBytes(raw, offset, field) {
138
+ const [byteLength, nextOffset] = readUint32(raw, offset, `${field}.length`);
139
+ const endOffset = nextOffset + byteLength;
140
+ if (endOffset > raw.byteLength) {
141
+ throw new Error(`invalid retry replay payload field: ${field}`);
142
+ }
143
+ return [raw.subarray(nextOffset, endOffset), endOffset];
144
+ }
145
+ function assertNoTrailingData(raw, offset) {
146
+ if (offset !== raw.byteLength) {
147
+ throw new Error('invalid retry replay payload: trailing data');
148
+ }
149
+ }
150
+ function decodeCompactRetryReplayPayload(raw) {
151
+ let offset = 0;
152
+ let magic = 0;
153
+ let version = 0;
154
+ let mode = 0;
155
+ [magic, offset] = readUint8(raw, offset, 'magic');
156
+ [version, offset] = readUint8(raw, offset, 'version');
157
+ [mode, offset] = readUint8(raw, offset, 'mode');
158
+ if (magic !== RETRY_PAYLOAD_CODEC_MAGIC || version !== RETRY_PAYLOAD_CODEC_VERSION) {
159
+ throw new Error('invalid retry replay payload: unsupported codec version');
160
+ }
161
+ if (mode === RETRY_PAYLOAD_MODE.plaintext) {
162
+ let to = '';
163
+ let type = '';
164
+ let plaintext = raw;
165
+ [to, offset] = readString(raw, offset, 'to');
166
+ [type, offset] = readString(raw, offset, 'type');
167
+ [plaintext, offset] = readBytes(raw, offset, 'plaintext');
168
+ assertNoTrailingData(raw, offset);
169
+ return {
170
+ mode: 'plaintext',
171
+ to,
172
+ type,
173
+ plaintext
174
+ };
175
+ }
176
+ if (mode === RETRY_PAYLOAD_MODE.encrypted) {
177
+ let to = '';
178
+ let type = '';
179
+ let encTypeCode = 0;
180
+ let hasParticipant = 0;
181
+ let participant;
182
+ let ciphertext = raw;
183
+ [to, offset] = readString(raw, offset, 'to');
184
+ [type, offset] = readString(raw, offset, 'type');
185
+ [encTypeCode, offset] = readUint8(raw, offset, 'encType');
186
+ [hasParticipant, offset] = readUint8(raw, offset, 'hasParticipant');
187
+ if (hasParticipant !== 0 && hasParticipant !== 1) {
188
+ throw new Error('invalid retry replay payload field: hasParticipant');
189
+ }
190
+ if (hasParticipant === 1) {
191
+ ;
192
+ [participant, offset] = readString(raw, offset, 'participant');
193
+ }
194
+ ;
195
+ [ciphertext, offset] = readBytes(raw, offset, 'ciphertext');
196
+ assertNoTrailingData(raw, offset);
197
+ return {
198
+ mode: 'encrypted',
199
+ to,
200
+ type,
201
+ encType: decodeEncryptedType(encTypeCode),
202
+ participant,
203
+ ciphertext
204
+ };
205
+ }
206
+ if (mode === RETRY_PAYLOAD_MODE.opaque_node) {
207
+ let node = raw;
208
+ [node, offset] = readBytes(raw, offset, 'node');
209
+ assertNoTrailingData(raw, offset);
210
+ return {
211
+ mode: 'opaque_node',
212
+ node
213
+ };
214
+ }
215
+ throw new Error(`invalid retry replay payload mode: ${mode}`);
216
+ }
@@ -1,6 +1,6 @@
1
1
  export const MAX_RETRY_ATTEMPTS = 5;
2
2
  export const RETRY_KEYS_MIN_COUNT = 2;
3
- export const RETRY_OUTBOUND_TTL_MS = 7 * 24 * 60 * 60 * 1000;
3
+ export const RETRY_OUTBOUND_TTL_MS = 60 * 1000;
4
4
  export const RETRY_RECEIPT_VERSION = '1';
5
5
  export const RETRY_REASON = Object.freeze({
6
6
  UnknownError: 0,