react-native-ble-mesh 1.0.1

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 (465) hide show
  1. package/CHANGELOG.md +151 -0
  2. package/LICENSE +21 -0
  3. package/README.md +706 -0
  4. package/docs/API.md +462 -0
  5. package/docs/ARCHITECTURE.md +384 -0
  6. package/docs/CONTRIBUTING.md +244 -0
  7. package/docs/NODE_QUICKSTART.md +259 -0
  8. package/docs/PROTOCOL.md +195 -0
  9. package/docs/REACT_NATIVE.md +315 -0
  10. package/docs/SECURITY.md +152 -0
  11. package/docs/api/constants_audio.js.html +184 -0
  12. package/docs/api/constants_ble.js.html +165 -0
  13. package/docs/api/constants_crypto.js.html +107 -0
  14. package/docs/api/constants_errors.js.html +256 -0
  15. package/docs/api/constants_events.js.html +148 -0
  16. package/docs/api/constants_index.js.html +76 -0
  17. package/docs/api/constants_protocol.js.html +205 -0
  18. package/docs/api/crypto_aead.js.html +243 -0
  19. package/docs/api/crypto_chacha20.js.html +235 -0
  20. package/docs/api/crypto_hkdf.js.html +241 -0
  21. package/docs/api/crypto_hmac.js.html +197 -0
  22. package/docs/api/crypto_index.js.html +126 -0
  23. package/docs/api/crypto_keys_KeyManager.js.html +325 -0
  24. package/docs/api/crypto_keys_KeyPair.js.html +270 -0
  25. package/docs/api/crypto_keys_SecureStorage.js.html +273 -0
  26. package/docs/api/crypto_keys_index.js.html +86 -0
  27. package/docs/api/crypto_noise_handshake.js.html +464 -0
  28. package/docs/api/crypto_noise_index.js.html +81 -0
  29. package/docs/api/crypto_noise_session.js.html +307 -0
  30. package/docs/api/crypto_noise_state.js.html +322 -0
  31. package/docs/api/crypto_poly1305.js.html +167 -0
  32. package/docs/api/crypto_sha256.js.html +294 -0
  33. package/docs/api/crypto_x25519.js.html +208 -0
  34. package/docs/api/errors_AudioError.js.html +218 -0
  35. package/docs/api/errors_ConnectionError.js.html +163 -0
  36. package/docs/api/errors_CryptoError.js.html +157 -0
  37. package/docs/api/errors_HandshakeError.js.html +176 -0
  38. package/docs/api/errors_MeshError.js.html +154 -0
  39. package/docs/api/errors_MessageError.js.html +183 -0
  40. package/docs/api/errors_ValidationError.js.html +204 -0
  41. package/docs/api/errors_index.js.html +78 -0
  42. package/docs/api/fonts/OpenSans-Bold-webfont.eot +0 -0
  43. package/docs/api/fonts/OpenSans-Bold-webfont.svg +1830 -0
  44. package/docs/api/fonts/OpenSans-Bold-webfont.woff +0 -0
  45. package/docs/api/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  46. package/docs/api/fonts/OpenSans-BoldItalic-webfont.svg +1830 -0
  47. package/docs/api/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  48. package/docs/api/fonts/OpenSans-Italic-webfont.eot +0 -0
  49. package/docs/api/fonts/OpenSans-Italic-webfont.svg +1830 -0
  50. package/docs/api/fonts/OpenSans-Italic-webfont.woff +0 -0
  51. package/docs/api/fonts/OpenSans-Light-webfont.eot +0 -0
  52. package/docs/api/fonts/OpenSans-Light-webfont.svg +1831 -0
  53. package/docs/api/fonts/OpenSans-Light-webfont.woff +0 -0
  54. package/docs/api/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  55. package/docs/api/fonts/OpenSans-LightItalic-webfont.svg +1835 -0
  56. package/docs/api/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  57. package/docs/api/fonts/OpenSans-Regular-webfont.eot +0 -0
  58. package/docs/api/fonts/OpenSans-Regular-webfont.svg +1831 -0
  59. package/docs/api/fonts/OpenSans-Regular-webfont.woff +0 -0
  60. package/docs/api/hooks_AppStateManager.js.html +233 -0
  61. package/docs/api/hooks_index.js.html +87 -0
  62. package/docs/api/hooks_useMesh.js.html +213 -0
  63. package/docs/api/hooks_useMessages.js.html +263 -0
  64. package/docs/api/hooks_usePeers.js.html +165 -0
  65. package/docs/api/index.html +868 -0
  66. package/docs/api/index.js.html +236 -0
  67. package/docs/api/mesh_dedup_BloomFilter.js.html +261 -0
  68. package/docs/api/mesh_dedup_DedupManager.js.html +266 -0
  69. package/docs/api/mesh_dedup_MessageCache.js.html +273 -0
  70. package/docs/api/mesh_dedup_index.js.html +70 -0
  71. package/docs/api/mesh_fragment_Assembler.js.html +335 -0
  72. package/docs/api/mesh_fragment_Fragmenter.js.html +230 -0
  73. package/docs/api/mesh_fragment_index.js.html +75 -0
  74. package/docs/api/mesh_index.js.html +72 -0
  75. package/docs/api/mesh_peer_Peer.js.html +296 -0
  76. package/docs/api/mesh_peer_PeerDiscovery.js.html +334 -0
  77. package/docs/api/mesh_peer_PeerManager.js.html +320 -0
  78. package/docs/api/mesh_peer_index.js.html +70 -0
  79. package/docs/api/mesh_router_MessageRouter.js.html +411 -0
  80. package/docs/api/mesh_router_PathFinder.js.html +386 -0
  81. package/docs/api/mesh_router_RouteTable.js.html +346 -0
  82. package/docs/api/mesh_router_index.js.html +70 -0
  83. package/docs/api/module-audio_buffer.html +168 -0
  84. package/docs/api/module-audio_buffer_FrameBuffer-FrameBuffer.html +2971 -0
  85. package/docs/api/module-audio_buffer_FrameBuffer.html +178 -0
  86. package/docs/api/module-audio_buffer_JitterBuffer-JitterBuffer.html +2761 -0
  87. package/docs/api/module-audio_buffer_JitterBuffer.html +178 -0
  88. package/docs/api/module-audio_codec.html +168 -0
  89. package/docs/api/module-audio_codec_LC3Codec-LC3Codec.html +2876 -0
  90. package/docs/api/module-audio_codec_LC3Codec.html +178 -0
  91. package/docs/api/module-audio_codec_LC3Decoder-LC3Decoder.html +1788 -0
  92. package/docs/api/module-audio_codec_LC3Decoder.html +178 -0
  93. package/docs/api/module-audio_codec_LC3Encoder-LC3Encoder.html +1512 -0
  94. package/docs/api/module-audio_codec_LC3Encoder.html +178 -0
  95. package/docs/api/module-audio_session.html +168 -0
  96. package/docs/api/module-audio_session_AudioSession-AudioSession.html +3922 -0
  97. package/docs/api/module-audio_session_AudioSession.html +178 -0
  98. package/docs/api/module-audio_session_VoiceMessage-VoiceMessage.html +3690 -0
  99. package/docs/api/module-audio_session_VoiceMessage-VoiceMessageRecorder.html +1780 -0
  100. package/docs/api/module-audio_session_VoiceMessage.html +332 -0
  101. package/docs/api/module-audio_transport.html +168 -0
  102. package/docs/api/module-audio_transport_AudioFragmenter-AudioAssembler.html +1545 -0
  103. package/docs/api/module-audio_transport_AudioFragmenter-AudioFragmenter.html +658 -0
  104. package/docs/api/module-audio_transport_AudioFragmenter.html +181 -0
  105. package/docs/api/module-audio_transport_AudioFramer.html +1414 -0
  106. package/docs/api/module-constants.html +168 -0
  107. package/docs/api/module-constants_audio.html +1782 -0
  108. package/docs/api/module-constants_ble.html +940 -0
  109. package/docs/api/module-constants_crypto.html +823 -0
  110. package/docs/api/module-constants_errors.html +316 -0
  111. package/docs/api/module-constants_events.html +244 -0
  112. package/docs/api/module-constants_protocol.html +1534 -0
  113. package/docs/api/module-crypto.html +169 -0
  114. package/docs/api/module-crypto_aead.html +1625 -0
  115. package/docs/api/module-crypto_chacha20.html +1440 -0
  116. package/docs/api/module-crypto_hkdf.html +1421 -0
  117. package/docs/api/module-crypto_hmac.html +828 -0
  118. package/docs/api/module-crypto_keys.html +169 -0
  119. package/docs/api/module-crypto_keys_KeyManager-KeyManager.html +2364 -0
  120. package/docs/api/module-crypto_keys_KeyManager.html +252 -0
  121. package/docs/api/module-crypto_keys_KeyPair.html +245 -0
  122. package/docs/api/module-crypto_keys_SecureStorage-MemorySecureStorage.html +923 -0
  123. package/docs/api/module-crypto_keys_SecureStorage-SecureStorage.html +942 -0
  124. package/docs/api/module-crypto_keys_SecureStorage.html +516 -0
  125. package/docs/api/module-crypto_noise.html +169 -0
  126. package/docs/api/module-crypto_noise_handshake-NoiseHandshake.html +2240 -0
  127. package/docs/api/module-crypto_noise_handshake.html +782 -0
  128. package/docs/api/module-crypto_noise_session-NoiseSession.html +1804 -0
  129. package/docs/api/module-crypto_noise_session.html +325 -0
  130. package/docs/api/module-crypto_noise_state-SymmetricState.html +1387 -0
  131. package/docs/api/module-crypto_noise_state.html +324 -0
  132. package/docs/api/module-crypto_poly1305.html +884 -0
  133. package/docs/api/module-crypto_sha256-HashContext.html +447 -0
  134. package/docs/api/module-crypto_sha256.html +942 -0
  135. package/docs/api/module-crypto_x25519.html +1503 -0
  136. package/docs/api/module-errors.html +168 -0
  137. package/docs/api/module-errors_AudioError-AudioError.html +4711 -0
  138. package/docs/api/module-errors_AudioError.html +178 -0
  139. package/docs/api/module-errors_ConnectionError-ConnectionError.html +3649 -0
  140. package/docs/api/module-errors_ConnectionError.html +178 -0
  141. package/docs/api/module-errors_CryptoError-CryptoError.html +3453 -0
  142. package/docs/api/module-errors_CryptoError.html +178 -0
  143. package/docs/api/module-errors_HandshakeError-HandshakeError.html +4261 -0
  144. package/docs/api/module-errors_HandshakeError.html +178 -0
  145. package/docs/api/module-errors_MeshError-MeshError.html +2155 -0
  146. package/docs/api/module-errors_MeshError.html +178 -0
  147. package/docs/api/module-errors_MessageError-MessageError.html +4545 -0
  148. package/docs/api/module-errors_MessageError.html +178 -0
  149. package/docs/api/module-errors_ValidationError-ValidationError.html +3432 -0
  150. package/docs/api/module-errors_ValidationError.html +178 -0
  151. package/docs/api/module-hooks.html +182 -0
  152. package/docs/api/module-hooks_AppStateManager-AppStateManager.html +1620 -0
  153. package/docs/api/module-hooks_AppStateManager.html +178 -0
  154. package/docs/api/module-hooks_useMesh.html +457 -0
  155. package/docs/api/module-hooks_useMessages.html +466 -0
  156. package/docs/api/module-hooks_usePeers.html +348 -0
  157. package/docs/api/module-mesh.html +168 -0
  158. package/docs/api/module-mesh_dedup.html +168 -0
  159. package/docs/api/module-mesh_dedup_BloomFilter-BloomFilter.html +2158 -0
  160. package/docs/api/module-mesh_dedup_BloomFilter.html +178 -0
  161. package/docs/api/module-mesh_dedup_DedupManager-DedupManager.html +2880 -0
  162. package/docs/api/module-mesh_dedup_DedupManager.html +178 -0
  163. package/docs/api/module-mesh_dedup_MessageCache-CacheNode.html +246 -0
  164. package/docs/api/module-mesh_dedup_MessageCache-MessageCache.html +2314 -0
  165. package/docs/api/module-mesh_dedup_MessageCache.html +181 -0
  166. package/docs/api/module-mesh_fragment.html +168 -0
  167. package/docs/api/module-mesh_fragment_Assembler-Assembler.html +2869 -0
  168. package/docs/api/module-mesh_fragment_Assembler-PendingFragmentSet.html +895 -0
  169. package/docs/api/module-mesh_fragment_Assembler.html +181 -0
  170. package/docs/api/module-mesh_fragment_Fragmenter.html +1084 -0
  171. package/docs/api/module-mesh_peer.html +168 -0
  172. package/docs/api/module-mesh_peer_Peer-Peer.html +4986 -0
  173. package/docs/api/module-mesh_peer_Peer.html +178 -0
  174. package/docs/api/module-mesh_peer_PeerDiscovery-PeerDiscovery.html +3423 -0
  175. package/docs/api/module-mesh_peer_PeerDiscovery.html +438 -0
  176. package/docs/api/module-mesh_peer_PeerManager-PeerManager.html +5258 -0
  177. package/docs/api/module-mesh_peer_PeerManager.html +178 -0
  178. package/docs/api/module-mesh_router.html +168 -0
  179. package/docs/api/module-mesh_router_MessageRouter-MessageRouter.html +3285 -0
  180. package/docs/api/module-mesh_router_MessageRouter.html +178 -0
  181. package/docs/api/module-mesh_router_PathFinder-PathFinder.html +3323 -0
  182. package/docs/api/module-mesh_router_PathFinder.html +421 -0
  183. package/docs/api/module-mesh_router_RouteTable-RouteTable.html +4115 -0
  184. package/docs/api/module-mesh_router_RouteTable.html +421 -0
  185. package/docs/api/module-protocol.html +169 -0
  186. package/docs/api/module-protocol_crc32.html +815 -0
  187. package/docs/api/module-protocol_deserializer.html +1393 -0
  188. package/docs/api/module-protocol_header-MessageHeader.html +2879 -0
  189. package/docs/api/module-protocol_header.html +892 -0
  190. package/docs/api/module-protocol_message-Message.html +4682 -0
  191. package/docs/api/module-protocol_message.html +178 -0
  192. package/docs/api/module-protocol_serializer.html +911 -0
  193. package/docs/api/module-protocol_validator.html +1396 -0
  194. package/docs/api/module-rn-ble-mesh.html +866 -0
  195. package/docs/api/module-service.html +168 -0
  196. package/docs/api/module-service_HandshakeManager-HandshakeManager.html +185 -0
  197. package/docs/api/module-service_HandshakeManager.html +175 -0
  198. package/docs/api/module-service_MeshService-MeshService.html +185 -0
  199. package/docs/api/module-service_MeshService.html +175 -0
  200. package/docs/api/module-service_SessionManager-SessionManager.html +174 -0
  201. package/docs/api/module-service_SessionManager.html +175 -0
  202. package/docs/api/module-service_audio.html +168 -0
  203. package/docs/api/module-service_audio_AudioManager-AudioManager.html +4653 -0
  204. package/docs/api/module-service_audio_AudioManager.html +254 -0
  205. package/docs/api/module-service_text.html +168 -0
  206. package/docs/api/module-service_text_TextManager-TextManager.html +6104 -0
  207. package/docs/api/module-service_text_TextManager.html +254 -0
  208. package/docs/api/module-service_text_broadcast.html +168 -0
  209. package/docs/api/module-service_text_broadcast_BroadcastManager-BroadcastManager.html +2434 -0
  210. package/docs/api/module-service_text_broadcast_BroadcastManager.html +254 -0
  211. package/docs/api/module-service_text_channel.html +168 -0
  212. package/docs/api/module-service_text_channel_Channel-Channel.html +4337 -0
  213. package/docs/api/module-service_text_channel_Channel.html +178 -0
  214. package/docs/api/module-service_text_channel_ChannelManager-ChannelManager.html +1927 -0
  215. package/docs/api/module-service_text_channel_ChannelManager.html +175 -0
  216. package/docs/api/module-service_text_message.html +168 -0
  217. package/docs/api/module-service_text_message_TextMessage-TextMessage.html +4162 -0
  218. package/docs/api/module-service_text_message_TextMessage.html +178 -0
  219. package/docs/api/module-service_text_message_TextSerializer.html +1725 -0
  220. package/docs/api/module-storage.html +168 -0
  221. package/docs/api/module-storage_AsyncStorageAdapter-AsyncStorageAdapter.html +4159 -0
  222. package/docs/api/module-storage_AsyncStorageAdapter.html +178 -0
  223. package/docs/api/module-storage_MemoryStorage-MemoryStorage.html +3154 -0
  224. package/docs/api/module-storage_MemoryStorage.html +178 -0
  225. package/docs/api/module-storage_MessageStore-MessageStore.html +5299 -0
  226. package/docs/api/module-storage_MessageStore.html +178 -0
  227. package/docs/api/module-storage_Storage-Storage.html +4169 -0
  228. package/docs/api/module-storage_Storage.html +178 -0
  229. package/docs/api/module-transport.html +168 -0
  230. package/docs/api/module-transport_BLEAdapter-BLEAdapter.html +4724 -0
  231. package/docs/api/module-transport_BLEAdapter.html +178 -0
  232. package/docs/api/module-transport_BLETransport-BLETransport.html +3263 -0
  233. package/docs/api/module-transport_BLETransport.html +178 -0
  234. package/docs/api/module-transport_MockTransport-MockTransport.html +3947 -0
  235. package/docs/api/module-transport_MockTransport.html +178 -0
  236. package/docs/api/module-transport_NodeBLEAdapter-NodeBLEAdapter.html +3216 -0
  237. package/docs/api/module-transport_NodeBLEAdapter.html +178 -0
  238. package/docs/api/module-transport_RNBLEAdapter-RNBLEAdapter.html +3216 -0
  239. package/docs/api/module-transport_RNBLEAdapter.html +178 -0
  240. package/docs/api/module-transport_Transport-Transport.html +4071 -0
  241. package/docs/api/module-transport_Transport.html +254 -0
  242. package/docs/api/module-transport_adapters.html +168 -0
  243. package/docs/api/module-transport_adapters_BLEAdapter-BLEAdapter.html +4724 -0
  244. package/docs/api/module-transport_adapters_BLEAdapter.html +178 -0
  245. package/docs/api/module-transport_adapters_NodeBLEAdapter-NodeBLEAdapter.html +3216 -0
  246. package/docs/api/module-transport_adapters_NodeBLEAdapter.html +178 -0
  247. package/docs/api/module-transport_adapters_RNBLEAdapter-RNBLEAdapter.html +3216 -0
  248. package/docs/api/module-transport_adapters_RNBLEAdapter.html +178 -0
  249. package/docs/api/module-utils.html +168 -0
  250. package/docs/api/module-utils_BoundedMap-BoundedMap.html +3301 -0
  251. package/docs/api/module-utils_BoundedMap.html +178 -0
  252. package/docs/api/module-utils_EventEmitter-EventEmitter.html +3358 -0
  253. package/docs/api/module-utils_EventEmitter.html +178 -0
  254. package/docs/api/module-utils_LRUCache-LRUCache.html +4134 -0
  255. package/docs/api/module-utils_LRUCache.html +178 -0
  256. package/docs/api/module-utils_RateLimiter-RateLimiter.html +2176 -0
  257. package/docs/api/module-utils_RateLimiter.html +500 -0
  258. package/docs/api/module-utils_TimeoutManager-TimeoutManager.html +1781 -0
  259. package/docs/api/module-utils_TimeoutManager.html +175 -0
  260. package/docs/api/module-utils_bytes.html +1789 -0
  261. package/docs/api/module-utils_debug.html +837 -0
  262. package/docs/api/module-utils_encoding.html +1184 -0
  263. package/docs/api/module-utils_retry.html +1457 -0
  264. package/docs/api/module-utils_time.html +1665 -0
  265. package/docs/api/module-utils_uuid.html +1269 -0
  266. package/docs/api/module-utils_validation.html +2176 -0
  267. package/docs/api/protocol_crc32.js.html +147 -0
  268. package/docs/api/protocol_deserializer.js.html +295 -0
  269. package/docs/api/protocol_header.js.html +276 -0
  270. package/docs/api/protocol_index.js.html +120 -0
  271. package/docs/api/protocol_message.js.html +287 -0
  272. package/docs/api/protocol_serializer.js.html +240 -0
  273. package/docs/api/protocol_validator.js.html +330 -0
  274. package/docs/api/scripts/linenumber.js +25 -0
  275. package/docs/api/scripts/prettify/Apache-License-2.0.txt +202 -0
  276. package/docs/api/scripts/prettify/lang-css.js +2 -0
  277. package/docs/api/scripts/prettify/prettify.js +28 -0
  278. package/docs/api/service_HandshakeManager.js.html +232 -0
  279. package/docs/api/service_MeshService.js.html +371 -0
  280. package/docs/api/service_SessionManager.js.html +153 -0
  281. package/docs/api/service_audio_AudioManager.js.html +541 -0
  282. package/docs/api/service_audio_buffer_FrameBuffer.js.html +223 -0
  283. package/docs/api/service_audio_buffer_JitterBuffer.js.html +244 -0
  284. package/docs/api/service_audio_buffer_index.js.html +68 -0
  285. package/docs/api/service_audio_codec_LC3Codec.js.html +345 -0
  286. package/docs/api/service_audio_codec_LC3Decoder.js.html +185 -0
  287. package/docs/api/service_audio_codec_LC3Encoder.js.html +194 -0
  288. package/docs/api/service_audio_codec_index.js.html +70 -0
  289. package/docs/api/service_audio_index.js.html +96 -0
  290. package/docs/api/service_audio_session_AudioSession.js.html +348 -0
  291. package/docs/api/service_audio_session_VoiceMessage.js.html +432 -0
  292. package/docs/api/service_audio_session_index.js.html +70 -0
  293. package/docs/api/service_audio_transport_AudioFragmenter.js.html +314 -0
  294. package/docs/api/service_audio_transport_AudioFramer.js.html +236 -0
  295. package/docs/api/service_audio_transport_index.js.html +69 -0
  296. package/docs/api/service_index.js.html +93 -0
  297. package/docs/api/service_text_TextManager.js.html +578 -0
  298. package/docs/api/service_text_broadcast_BroadcastManager.js.html +276 -0
  299. package/docs/api/service_text_broadcast_index.js.html +66 -0
  300. package/docs/api/service_text_channel_Channel.js.html +280 -0
  301. package/docs/api/service_text_channel_ChannelManager.js.html +225 -0
  302. package/docs/api/service_text_channel_index.js.html +68 -0
  303. package/docs/api/service_text_index.js.html +85 -0
  304. package/docs/api/service_text_message_TextMessage.js.html +350 -0
  305. package/docs/api/service_text_message_TextSerializer.js.html +218 -0
  306. package/docs/api/service_text_message_index.js.html +68 -0
  307. package/docs/api/storage_AsyncStorageAdapter.js.html +357 -0
  308. package/docs/api/storage_MemoryStorage.js.html +279 -0
  309. package/docs/api/storage_MessageStore.js.html +369 -0
  310. package/docs/api/storage_Storage.js.html +214 -0
  311. package/docs/api/storage_index.js.html +72 -0
  312. package/docs/api/styles/jsdoc-default.css +358 -0
  313. package/docs/api/styles/prettify-jsdoc.css +111 -0
  314. package/docs/api/styles/prettify-tomorrow.css +132 -0
  315. package/docs/api/transport_BLEAdapter.js.html +231 -0
  316. package/docs/api/transport_BLETransport.js.html +411 -0
  317. package/docs/api/transport_MockTransport.js.html +339 -0
  318. package/docs/api/transport_NodeBLEAdapter.js.html +479 -0
  319. package/docs/api/transport_RNBLEAdapter.js.html +382 -0
  320. package/docs/api/transport_Transport.js.html +242 -0
  321. package/docs/api/transport_adapters_BLEAdapter.js.html +231 -0
  322. package/docs/api/transport_adapters_NodeBLEAdapter.js.html +479 -0
  323. package/docs/api/transport_adapters_RNBLEAdapter.js.html +382 -0
  324. package/docs/api/transport_adapters_index.js.html +70 -0
  325. package/docs/api/transport_index.js.html +87 -0
  326. package/docs/api/utils_BoundedMap.js.html +205 -0
  327. package/docs/api/utils_EventEmitter.js.html +259 -0
  328. package/docs/api/utils_LRUCache.js.html +256 -0
  329. package/docs/api/utils_RateLimiter.js.html +256 -0
  330. package/docs/api/utils_TimeoutManager.js.html +218 -0
  331. package/docs/api/utils_base64%0A%0AThis%20implementation%20avoids%20string%20concatenation%20in%20loops%20which%20is%20O(n%C2%B2).%0AUses%20array%20building%20which%20is%20O(n)%20-%20critical%20for%20React%20Native%20performance.module_.html +717 -0
  332. package/docs/api/utils_base64.js.html +205 -0
  333. package/docs/api/utils_bytes.js.html +241 -0
  334. package/docs/api/utils_debug.js.html +205 -0
  335. package/docs/api/utils_encoding.js.html +302 -0
  336. package/docs/api/utils_index.js.html +160 -0
  337. package/docs/api/utils_retry.js.html +200 -0
  338. package/docs/api/utils_time.js.html +220 -0
  339. package/docs/api/utils_uuid.js.html +199 -0
  340. package/docs/api/utils_validation.js.html +259 -0
  341. package/examples/node-chat/chat.js +220 -0
  342. package/examples/node-quickstart/index.js +94 -0
  343. package/examples/testing/test-helper.js +182 -0
  344. package/package.json +111 -0
  345. package/src/constants/audio.js +130 -0
  346. package/src/constants/ble.js +111 -0
  347. package/src/constants/crypto.js +53 -0
  348. package/src/constants/errors.js +202 -0
  349. package/src/constants/events.js +94 -0
  350. package/src/constants/index.js +22 -0
  351. package/src/constants/protocol.js +151 -0
  352. package/src/crypto/aead.js +189 -0
  353. package/src/crypto/chacha20.js +181 -0
  354. package/src/crypto/hkdf.js +187 -0
  355. package/src/crypto/hmac.js +143 -0
  356. package/src/crypto/index.js +72 -0
  357. package/src/crypto/keys/KeyManager.js +271 -0
  358. package/src/crypto/keys/KeyPair.js +216 -0
  359. package/src/crypto/keys/SecureStorage.js +219 -0
  360. package/src/crypto/keys/index.js +32 -0
  361. package/src/crypto/noise/handshake.js +410 -0
  362. package/src/crypto/noise/index.js +27 -0
  363. package/src/crypto/noise/session.js +253 -0
  364. package/src/crypto/noise/state.js +268 -0
  365. package/src/crypto/poly1305.js +113 -0
  366. package/src/crypto/sha256.js +240 -0
  367. package/src/crypto/x25519.js +154 -0
  368. package/src/errors/AudioError.js +164 -0
  369. package/src/errors/ConnectionError.js +109 -0
  370. package/src/errors/CryptoError.js +103 -0
  371. package/src/errors/HandshakeError.js +122 -0
  372. package/src/errors/MeshError.js +100 -0
  373. package/src/errors/MessageError.js +129 -0
  374. package/src/errors/ValidationError.js +150 -0
  375. package/src/errors/index.js +24 -0
  376. package/src/hooks/AppStateManager.js +179 -0
  377. package/src/hooks/index.js +33 -0
  378. package/src/hooks/useMesh.js +159 -0
  379. package/src/hooks/useMessages.js +209 -0
  380. package/src/hooks/usePeers.js +111 -0
  381. package/src/index.d.ts +494 -0
  382. package/src/index.js +182 -0
  383. package/src/index.mjs +62 -0
  384. package/src/mesh/dedup/BloomFilter.js +207 -0
  385. package/src/mesh/dedup/DedupManager.js +212 -0
  386. package/src/mesh/dedup/MessageCache.js +219 -0
  387. package/src/mesh/dedup/index.js +16 -0
  388. package/src/mesh/fragment/Assembler.js +281 -0
  389. package/src/mesh/fragment/Fragmenter.js +176 -0
  390. package/src/mesh/fragment/index.js +21 -0
  391. package/src/mesh/index.js +18 -0
  392. package/src/mesh/peer/Peer.js +242 -0
  393. package/src/mesh/peer/PeerDiscovery.js +280 -0
  394. package/src/mesh/peer/PeerManager.js +266 -0
  395. package/src/mesh/peer/index.js +16 -0
  396. package/src/mesh/router/MessageRouter.js +357 -0
  397. package/src/mesh/router/PathFinder.js +332 -0
  398. package/src/mesh/router/RouteTable.js +292 -0
  399. package/src/mesh/router/index.js +16 -0
  400. package/src/protocol/crc32.js +93 -0
  401. package/src/protocol/deserializer.js +241 -0
  402. package/src/protocol/header.js +222 -0
  403. package/src/protocol/index.js +66 -0
  404. package/src/protocol/message.js +233 -0
  405. package/src/protocol/serializer.js +186 -0
  406. package/src/protocol/validator.js +276 -0
  407. package/src/service/HandshakeManager.js +178 -0
  408. package/src/service/MeshService.js +317 -0
  409. package/src/service/SessionManager.js +99 -0
  410. package/src/service/audio/AudioManager.js +487 -0
  411. package/src/service/audio/buffer/FrameBuffer.js +169 -0
  412. package/src/service/audio/buffer/JitterBuffer.js +190 -0
  413. package/src/service/audio/buffer/index.js +14 -0
  414. package/src/service/audio/codec/LC3Codec.js +291 -0
  415. package/src/service/audio/codec/LC3Decoder.js +131 -0
  416. package/src/service/audio/codec/LC3Encoder.js +140 -0
  417. package/src/service/audio/codec/index.js +16 -0
  418. package/src/service/audio/index.js +42 -0
  419. package/src/service/audio/session/AudioSession.js +294 -0
  420. package/src/service/audio/session/VoiceMessage.js +378 -0
  421. package/src/service/audio/session/index.js +16 -0
  422. package/src/service/audio/transport/AudioFragmenter.js +260 -0
  423. package/src/service/audio/transport/AudioFramer.js +182 -0
  424. package/src/service/audio/transport/index.js +15 -0
  425. package/src/service/index.js +39 -0
  426. package/src/service/text/TextManager.js +524 -0
  427. package/src/service/text/broadcast/BroadcastManager.js +222 -0
  428. package/src/service/text/broadcast/index.js +12 -0
  429. package/src/service/text/channel/Channel.js +226 -0
  430. package/src/service/text/channel/ChannelManager.js +171 -0
  431. package/src/service/text/channel/index.js +14 -0
  432. package/src/service/text/index.js +31 -0
  433. package/src/service/text/message/TextMessage.js +296 -0
  434. package/src/service/text/message/TextSerializer.js +164 -0
  435. package/src/service/text/message/index.js +14 -0
  436. package/src/storage/AsyncStorageAdapter.js +303 -0
  437. package/src/storage/MemoryStorage.js +225 -0
  438. package/src/storage/MessageStore.js +315 -0
  439. package/src/storage/Storage.js +160 -0
  440. package/src/storage/index.js +18 -0
  441. package/src/transport/BLEAdapter.js +177 -0
  442. package/src/transport/BLETransport.js +357 -0
  443. package/src/transport/MockTransport.js +285 -0
  444. package/src/transport/NodeBLEAdapter.js +425 -0
  445. package/src/transport/RNBLEAdapter.js +328 -0
  446. package/src/transport/Transport.js +188 -0
  447. package/src/transport/adapters/BLEAdapter.js +177 -0
  448. package/src/transport/adapters/NodeBLEAdapter.js +425 -0
  449. package/src/transport/adapters/RNBLEAdapter.js +328 -0
  450. package/src/transport/adapters/index.js +16 -0
  451. package/src/transport/index.js +33 -0
  452. package/src/utils/BoundedMap.js +151 -0
  453. package/src/utils/EventEmitter.js +205 -0
  454. package/src/utils/LRUCache.js +202 -0
  455. package/src/utils/RateLimiter.js +202 -0
  456. package/src/utils/TimeoutManager.js +164 -0
  457. package/src/utils/base64.js +151 -0
  458. package/src/utils/bytes.js +187 -0
  459. package/src/utils/debug.js +151 -0
  460. package/src/utils/encoding.js +248 -0
  461. package/src/utils/index.js +106 -0
  462. package/src/utils/retry.js +146 -0
  463. package/src/utils/time.js +166 -0
  464. package/src/utils/uuid.js +145 -0
  465. package/src/utils/validation.js +205 -0
@@ -0,0 +1,202 @@
1
+ /**
2
+ * @fileoverview Error code definitions
3
+ * @module constants/errors
4
+ */
5
+
6
+ 'use strict';
7
+
8
+ /**
9
+ * Error codes organized by category
10
+ * @constant {Object.<string, string>}
11
+ */
12
+ const ERROR_CODE = Object.freeze({
13
+ // Initialization errors (E0xx)
14
+ E001: 'INIT_FAILED',
15
+ E002: 'ALREADY_INITIALIZED',
16
+ E003: 'NOT_INITIALIZED',
17
+ E004: 'INVALID_CONFIG',
18
+ E005: 'STORAGE_INIT_FAILED',
19
+
20
+ // Bluetooth errors (E1xx)
21
+ E100: 'BLUETOOTH_UNAVAILABLE',
22
+ E101: 'BLUETOOTH_UNAUTHORIZED',
23
+ E102: 'BLUETOOTH_POWERED_OFF',
24
+ E103: 'SCAN_FAILED',
25
+ E104: 'ADVERTISE_FAILED',
26
+ E105: 'MTU_NEGOTIATION_FAILED',
27
+
28
+ // Connection errors (E2xx)
29
+ E200: 'CONNECTION_FAILED',
30
+ E201: 'CONNECTION_TIMEOUT',
31
+ E202: 'CONNECTION_LOST',
32
+ E203: 'MAX_CONNECTIONS_REACHED',
33
+ E204: 'PEER_NOT_FOUND',
34
+ E205: 'PEER_BLOCKED',
35
+ E206: 'ALREADY_CONNECTED',
36
+ E207: 'NOT_CONNECTED',
37
+
38
+ // Handshake errors (E3xx)
39
+ E300: 'HANDSHAKE_FAILED',
40
+ E301: 'HANDSHAKE_TIMEOUT',
41
+ E302: 'HANDSHAKE_INVALID_STATE',
42
+ E303: 'HANDSHAKE_DECRYPTION_FAILED',
43
+ E304: 'HANDSHAKE_ALREADY_IN_PROGRESS',
44
+ E305: 'HANDSHAKE_INVALID_MESSAGE',
45
+
46
+ // Crypto errors (E4xx)
47
+ E400: 'KEY_GENERATION_FAILED',
48
+ E401: 'ENCRYPTION_FAILED',
49
+ E402: 'DECRYPTION_FAILED',
50
+ E403: 'INVALID_KEY',
51
+ E404: 'INVALID_NONCE',
52
+ E405: 'AUTH_TAG_MISMATCH',
53
+ E406: 'NONCE_EXHAUSTED',
54
+ E407: 'INVALID_SIGNATURE',
55
+
56
+ // Message errors (E5xx)
57
+ E500: 'MESSAGE_TOO_LARGE',
58
+ E501: 'MESSAGE_EXPIRED',
59
+ E502: 'MESSAGE_INVALID_FORMAT',
60
+ E503: 'MESSAGE_INVALID_CHECKSUM',
61
+ E504: 'MESSAGE_DUPLICATE',
62
+ E505: 'MESSAGE_MAX_HOPS_EXCEEDED',
63
+ E506: 'MESSAGE_SEND_FAILED',
64
+ E507: 'MESSAGE_INVALID_TYPE',
65
+ E508: 'FRAGMENT_ASSEMBLY_FAILED',
66
+ E509: 'FRAGMENT_TIMEOUT',
67
+
68
+ // Channel errors (E6xx)
69
+ E600: 'CHANNEL_NOT_FOUND',
70
+ E601: 'CHANNEL_ALREADY_JOINED',
71
+ E602: 'CHANNEL_NOT_JOINED',
72
+ E603: 'CHANNEL_INVALID_PASSWORD',
73
+ E604: 'CHANNEL_FULL',
74
+
75
+ // Session errors (E7xx)
76
+ E700: 'SESSION_NOT_FOUND',
77
+ E701: 'SESSION_EXPIRED',
78
+ E702: 'SESSION_INVALID',
79
+
80
+ // Validation errors (E8xx)
81
+ E800: 'VALIDATION_FAILED',
82
+ E801: 'INVALID_ARGUMENT',
83
+ E802: 'MISSING_ARGUMENT',
84
+ E803: 'INVALID_TYPE',
85
+ E804: 'OUT_OF_RANGE',
86
+
87
+ // General errors (E9xx)
88
+ E900: 'UNKNOWN_ERROR',
89
+ E901: 'OPERATION_CANCELLED',
90
+ E902: 'TIMEOUT',
91
+ E903: 'NOT_SUPPORTED',
92
+ E904: 'INTERNAL_ERROR',
93
+
94
+ // Audio errors (EAxx)
95
+ EA00: 'AUDIO_ERROR',
96
+ EA01: 'CODEC_INIT_FAILED',
97
+ EA02: 'ENCODING_FAILED',
98
+ EA03: 'DECODING_FAILED',
99
+ EA04: 'AUDIO_SESSION_FAILED',
100
+ EA05: 'AUDIO_BUFFER_OVERFLOW',
101
+ EA06: 'AUDIO_BUFFER_UNDERRUN',
102
+ EA07: 'VOICE_MESSAGE_TOO_LARGE',
103
+ EA08: 'AUDIO_STREAM_REJECTED',
104
+ EA09: 'CODEC_NOT_AVAILABLE',
105
+ EA10: 'AUDIO_INVALID_CONFIG',
106
+ EA11: 'VOICE_MESSAGE_TIMEOUT'
107
+ });
108
+
109
+ /**
110
+ * Error messages for each error code
111
+ * @constant {Object.<string, string>}
112
+ */
113
+ const ERROR_MESSAGES = Object.freeze({
114
+ E001: 'Initialization failed',
115
+ E002: 'Service is already initialized',
116
+ E003: 'Service is not initialized',
117
+ E004: 'Invalid configuration provided',
118
+ E005: 'Storage initialization failed',
119
+
120
+ E100: 'Bluetooth is not available on this device',
121
+ E101: 'Bluetooth permission not granted',
122
+ E102: 'Bluetooth is powered off',
123
+ E103: 'Failed to start BLE scan',
124
+ E104: 'Failed to start BLE advertising',
125
+ E105: 'MTU negotiation failed',
126
+
127
+ E200: 'Failed to establish connection',
128
+ E201: 'Connection timed out',
129
+ E202: 'Connection was lost',
130
+ E203: 'Maximum number of connections reached',
131
+ E204: 'Peer not found',
132
+ E205: 'Peer is blocked',
133
+ E206: 'Already connected to this peer',
134
+ E207: 'Not connected to this peer',
135
+
136
+ E300: 'Handshake failed',
137
+ E301: 'Handshake timed out',
138
+ E302: 'Invalid handshake state',
139
+ E303: 'Failed to decrypt handshake message',
140
+ E304: 'Handshake already in progress with this peer',
141
+ E305: 'Invalid handshake message received',
142
+
143
+ E400: 'Failed to generate cryptographic key',
144
+ E401: 'Encryption failed',
145
+ E402: 'Decryption failed',
146
+ E403: 'Invalid key provided',
147
+ E404: 'Invalid nonce provided',
148
+ E405: 'Authentication tag mismatch',
149
+ E406: 'Nonce counter exhausted, rekey required',
150
+ E407: 'Invalid signature',
151
+
152
+ E500: 'Message exceeds maximum size',
153
+ E501: 'Message has expired',
154
+ E502: 'Invalid message format',
155
+ E503: 'Message checksum validation failed',
156
+ E504: 'Duplicate message detected',
157
+ E505: 'Message exceeded maximum hop count',
158
+ E506: 'Failed to send message',
159
+ E507: 'Invalid message type',
160
+ E508: 'Failed to assemble message fragments',
161
+ E509: 'Fragment assembly timed out',
162
+
163
+ E600: 'Channel not found',
164
+ E601: 'Already joined this channel',
165
+ E602: 'Not a member of this channel',
166
+ E603: 'Invalid channel password',
167
+ E604: 'Channel is full',
168
+
169
+ E700: 'Session not found',
170
+ E701: 'Session has expired',
171
+ E702: 'Invalid session',
172
+
173
+ E800: 'Validation failed',
174
+ E801: 'Invalid argument provided',
175
+ E802: 'Required argument is missing',
176
+ E803: 'Invalid type',
177
+ E804: 'Value is out of valid range',
178
+
179
+ E900: 'An unknown error occurred',
180
+ E901: 'Operation was cancelled',
181
+ E902: 'Operation timed out',
182
+ E903: 'Operation not supported',
183
+ E904: 'Internal error',
184
+
185
+ EA00: 'Audio operation failed',
186
+ EA01: 'LC3 codec initialization failed',
187
+ EA02: 'Audio encoding failed',
188
+ EA03: 'Audio decoding failed',
189
+ EA04: 'Audio session failed',
190
+ EA05: 'Audio buffer overflow',
191
+ EA06: 'Audio buffer underrun',
192
+ EA07: 'Voice message exceeds maximum size',
193
+ EA08: 'Audio stream was rejected',
194
+ EA09: 'LC3 codec not available - native module not installed',
195
+ EA10: 'Invalid audio configuration',
196
+ EA11: 'Voice message assembly timed out'
197
+ });
198
+
199
+ module.exports = {
200
+ ERROR_CODE,
201
+ ERROR_MESSAGES
202
+ };
@@ -0,0 +1,94 @@
1
+ /**
2
+ * @fileoverview Event name constants
3
+ * @module constants/events
4
+ */
5
+
6
+ 'use strict';
7
+
8
+ /**
9
+ * Event names for the mesh network
10
+ * @constant {Object.<string, string>}
11
+ */
12
+ const EVENTS = Object.freeze({
13
+ // Lifecycle events
14
+ INITIALIZED: 'initialized',
15
+ DESTROYED: 'destroyed',
16
+ STATE_CHANGED: 'state:changed',
17
+ ERROR: 'error',
18
+
19
+ // Bluetooth events
20
+ BLUETOOTH_STATE: 'bluetooth:state',
21
+ SCAN_STARTED: 'scan:started',
22
+ SCAN_STOPPED: 'scan:stopped',
23
+
24
+ // Peer events
25
+ PEER_DISCOVERED: 'peer:discovered',
26
+ PEER_CONNECTED: 'peer:connected',
27
+ PEER_DISCONNECTED: 'peer:disconnected',
28
+ PEER_SECURED: 'peer:secured',
29
+ PEER_UPDATED: 'peer:updated',
30
+ PEER_LOST: 'peer:lost',
31
+ PEER_BLOCKED: 'peer:blocked',
32
+ PEER_UNBLOCKED: 'peer:unblocked',
33
+
34
+ // Handshake events
35
+ HANDSHAKE_STARTED: 'handshake:started',
36
+ HANDSHAKE_PROGRESS: 'handshake:progress',
37
+ HANDSHAKE_COMPLETE: 'handshake:complete',
38
+ HANDSHAKE_FAILED: 'handshake:failed',
39
+
40
+ // Message events
41
+ MESSAGE_RECEIVED: 'message:received',
42
+ MESSAGE_SENT: 'message:sent',
43
+ MESSAGE_FAILED: 'message:failed',
44
+ MESSAGE_RELAYED: 'message:relayed',
45
+ MESSAGE_DROPPED: 'message:dropped',
46
+ MESSAGE_ACK: 'message:ack',
47
+
48
+ // Private message events
49
+ PRIVATE_MESSAGE_RECEIVED: 'private:received',
50
+ PRIVATE_MESSAGE_SENT: 'private:sent',
51
+
52
+ // Broadcast events
53
+ BROADCAST_RECEIVED: 'broadcast:received',
54
+ BROADCAST_SENT: 'broadcast:sent',
55
+
56
+ // Channel events
57
+ CHANNEL_JOINED: 'channel:joined',
58
+ CHANNEL_LEFT: 'channel:left',
59
+ CHANNEL_MESSAGE: 'channel:message',
60
+ CHANNEL_MEMBER_JOINED: 'channel:memberJoined',
61
+ CHANNEL_MEMBER_LEFT: 'channel:memberLeft',
62
+
63
+ // Route events
64
+ ROUTE_ADDED: 'route:added',
65
+ ROUTE_UPDATED: 'route:updated',
66
+ ROUTE_REMOVED: 'route:removed',
67
+
68
+ // Session events
69
+ SESSION_CREATED: 'session:created',
70
+ SESSION_DESTROYED: 'session:destroyed',
71
+ SESSION_EXPIRED: 'session:expired',
72
+
73
+ // Audio streaming events
74
+ AUDIO_STREAM_REQUEST: 'audio:stream-request',
75
+ AUDIO_STREAM_STARTED: 'audio:stream-started',
76
+ AUDIO_STREAM_ENDED: 'audio:stream-ended',
77
+ AUDIO_STREAM_PAUSED: 'audio:stream-paused',
78
+ AUDIO_STREAM_RESUMED: 'audio:stream-resumed',
79
+
80
+ // Voice message events
81
+ VOICE_MESSAGE_RECEIVED: 'audio:voice-message-received',
82
+ VOICE_MESSAGE_SENT: 'audio:voice-message-sent',
83
+ VOICE_MESSAGE_PROGRESS: 'audio:voice-message-progress',
84
+ VOICE_MESSAGE_FAILED: 'audio:voice-message-failed',
85
+
86
+ // Audio quality events
87
+ AUDIO_BUFFER_UNDERRUN: 'audio:buffer-underrun',
88
+ AUDIO_BUFFER_OVERFLOW: 'audio:buffer-overflow',
89
+ AUDIO_QUALITY_CHANGE: 'audio:quality-change'
90
+ });
91
+
92
+ module.exports = {
93
+ EVENTS
94
+ };
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @fileoverview Constants module exports
3
+ * @module constants
4
+ */
5
+
6
+ 'use strict';
7
+
8
+ const protocol = require('./protocol');
9
+ const ble = require('./ble');
10
+ const crypto = require('./crypto');
11
+ const errors = require('./errors');
12
+ const events = require('./events');
13
+ const audio = require('./audio');
14
+
15
+ module.exports = {
16
+ ...protocol,
17
+ ...ble,
18
+ ...crypto,
19
+ ...errors,
20
+ ...events,
21
+ ...audio
22
+ };
@@ -0,0 +1,151 @@
1
+ /**
2
+ * @fileoverview Protocol constants for the BLE Mesh Network
3
+ * @module constants/protocol
4
+ */
5
+
6
+ 'use strict';
7
+
8
+ /**
9
+ * Protocol version for compatibility checking
10
+ * @constant {number}
11
+ */
12
+ const PROTOCOL_VERSION = 1;
13
+
14
+ /**
15
+ * Message type identifiers
16
+ * @constant {Object.<string, number>}
17
+ */
18
+ const MESSAGE_TYPE = Object.freeze({
19
+ // Data messages (0x01-0x0F)
20
+ TEXT: 0x01,
21
+ TEXT_ACK: 0x02,
22
+
23
+ // Handshake (0x10-0x1F)
24
+ HANDSHAKE_INIT: 0x10,
25
+ HANDSHAKE_RESPONSE: 0x11,
26
+ HANDSHAKE_FINAL: 0x12,
27
+
28
+ // Discovery (0x20-0x2F)
29
+ PEER_ANNOUNCE: 0x20,
30
+ PEER_REQUEST: 0x21,
31
+ PEER_RESPONSE: 0x22,
32
+
33
+ // Channels (0x30-0x3F)
34
+ CHANNEL_JOIN: 0x30,
35
+ CHANNEL_LEAVE: 0x31,
36
+ CHANNEL_MESSAGE: 0x32,
37
+
38
+ // Private (0x40-0x4F)
39
+ PRIVATE_MESSAGE: 0x40,
40
+ PRIVATE_ACK: 0x41,
41
+
42
+ // Control (0x60-0x6F)
43
+ HEARTBEAT: 0x60,
44
+ PING: 0x61,
45
+ PONG: 0x62,
46
+
47
+ // Fragments (0x70-0x7F)
48
+ FRAGMENT: 0x70,
49
+
50
+ // Audio messages (0x80-0x8F)
51
+ VOICE_MESSAGE_START: 0x80,
52
+ VOICE_MESSAGE_DATA: 0x81,
53
+ VOICE_MESSAGE_END: 0x82,
54
+ VOICE_MESSAGE_ACK: 0x83,
55
+ AUDIO_STREAM_REQUEST: 0x84,
56
+ AUDIO_STREAM_ACCEPT: 0x85,
57
+ AUDIO_STREAM_REJECT: 0x86,
58
+ AUDIO_STREAM_DATA: 0x87,
59
+ AUDIO_STREAM_END: 0x88,
60
+
61
+ // Error (0xFF)
62
+ ERROR: 0xFF
63
+ });
64
+
65
+ /**
66
+ * Message flags
67
+ * @constant {Object.<string, number>}
68
+ */
69
+ const MESSAGE_FLAGS = Object.freeze({
70
+ NONE: 0x00,
71
+ ENCRYPTED: 0x01,
72
+ COMPRESSED: 0x02,
73
+ REQUIRES_ACK: 0x04,
74
+ IS_FRAGMENT: 0x08,
75
+ IS_BROADCAST: 0x10,
76
+ HIGH_PRIORITY: 0x20
77
+ });
78
+
79
+ /**
80
+ * Mesh network configuration
81
+ * @constant {Object.<string, number>}
82
+ */
83
+ const MESH_CONFIG = Object.freeze({
84
+ /** Maximum number of hops a message can travel */
85
+ MAX_HOPS: 7,
86
+ /** Maximum message payload size in bytes */
87
+ MAX_MESSAGE_SIZE: 500,
88
+ /** Fragment payload size in bytes */
89
+ FRAGMENT_SIZE: 180,
90
+ /** Message header size in bytes */
91
+ HEADER_SIZE: 48,
92
+ /** Message time-to-live in milliseconds (30 minutes) */
93
+ MESSAGE_TTL_MS: 30 * 60 * 1000,
94
+ /** Peer timeout in milliseconds (5 minutes) */
95
+ PEER_TIMEOUT_MS: 5 * 60 * 1000,
96
+ /** Heartbeat interval in milliseconds (30 seconds) */
97
+ HEARTBEAT_INTERVAL_MS: 30 * 1000,
98
+ /** Handshake timeout in milliseconds (30 seconds) */
99
+ HANDSHAKE_TIMEOUT_MS: 30 * 1000,
100
+ /** Maximum retry attempts */
101
+ MAX_RETRIES: 3,
102
+ /** Bloom filter size in bits */
103
+ BLOOM_FILTER_SIZE: 2048,
104
+ /** Number of hash functions for bloom filter */
105
+ BLOOM_HASH_COUNT: 7,
106
+ /** Maximum pending fragments per message */
107
+ MAX_PENDING_FRAGMENTS: 256,
108
+ /** Fragment assembly timeout in milliseconds (60 seconds) */
109
+ FRAGMENT_TIMEOUT_MS: 60 * 1000,
110
+ /** Maximum connected peers */
111
+ MAX_PEERS: 8,
112
+ /** Route entry timeout in milliseconds (10 minutes) */
113
+ ROUTE_TIMEOUT_MS: 10 * 60 * 1000
114
+ });
115
+
116
+ /**
117
+ * Connection states
118
+ * @constant {Object.<string, string>}
119
+ */
120
+ const CONNECTION_STATE = Object.freeze({
121
+ DISCONNECTED: 'disconnected',
122
+ CONNECTING: 'connecting',
123
+ CONNECTED: 'connected',
124
+ SECURING: 'securing',
125
+ SECURED: 'secured',
126
+ DISCONNECTING: 'disconnecting',
127
+ FAILED: 'failed'
128
+ });
129
+
130
+ /**
131
+ * Service states
132
+ * @constant {Object.<string, string>}
133
+ */
134
+ const SERVICE_STATE = Object.freeze({
135
+ UNINITIALIZED: 'uninitialized',
136
+ INITIALIZING: 'initializing',
137
+ READY: 'ready',
138
+ ACTIVE: 'active',
139
+ SUSPENDED: 'suspended',
140
+ DESTROYED: 'destroyed',
141
+ ERROR: 'error'
142
+ });
143
+
144
+ module.exports = {
145
+ PROTOCOL_VERSION,
146
+ MESSAGE_TYPE,
147
+ MESSAGE_FLAGS,
148
+ MESH_CONFIG,
149
+ CONNECTION_STATE,
150
+ SERVICE_STATE
151
+ };
@@ -0,0 +1,189 @@
1
+ /**
2
+ * @fileoverview ChaCha20-Poly1305 AEAD implementation (RFC 8439)
3
+ * @module crypto/aead
4
+ */
5
+
6
+ 'use strict';
7
+
8
+ const { chacha20 } = require('./chacha20');
9
+ const { poly1305 } = require('./poly1305');
10
+
11
+ /**
12
+ * Generates Poly1305 key using ChaCha20 with counter=0
13
+ * @param {Uint8Array} key - 32-byte encryption key
14
+ * @param {Uint8Array} nonce - 12-byte nonce
15
+ * @returns {Uint8Array} 32-byte Poly1305 key
16
+ */
17
+ function generatePolyKey(key, nonce) {
18
+ const zeros = new Uint8Array(64);
19
+ const block = chacha20(key, nonce, 0, zeros);
20
+ return block.subarray(0, 32);
21
+ }
22
+
23
+ /**
24
+ * Pads data to 16-byte boundary with zeros
25
+ * @param {number} length - Current data length
26
+ * @returns {Uint8Array} Padding bytes (0-15 bytes)
27
+ */
28
+ function pad16(length) {
29
+ const remainder = length % 16;
30
+ if (remainder === 0) {
31
+ return new Uint8Array(0);
32
+ }
33
+ return new Uint8Array(16 - remainder);
34
+ }
35
+
36
+ /**
37
+ * Encodes a 64-bit little-endian integer
38
+ * @param {number} value - Value to encode
39
+ * @returns {Uint8Array} 8-byte little-endian representation
40
+ */
41
+ function encode64LE(value) {
42
+ const bytes = new Uint8Array(8);
43
+ const view = new DataView(bytes.buffer);
44
+ // JavaScript numbers are 64-bit floats, safe for values up to 2^53-1
45
+ view.setUint32(0, value >>> 0, true);
46
+ view.setUint32(4, Math.floor(value / 0x100000000) >>> 0, true);
47
+ return bytes;
48
+ }
49
+
50
+ /**
51
+ * Constructs Poly1305 MAC input per RFC 8439
52
+ * @param {Uint8Array} aad - Additional authenticated data
53
+ * @param {Uint8Array} ciphertext - Ciphertext
54
+ * @returns {Uint8Array} MAC input
55
+ */
56
+ function constructMacData(aad, ciphertext) {
57
+ const aadPad = pad16(aad.length);
58
+ const ctPad = pad16(ciphertext.length);
59
+ const aadLen = encode64LE(aad.length);
60
+ const ctLen = encode64LE(ciphertext.length);
61
+
62
+ const totalLen = aad.length + aadPad.length + ciphertext.length +
63
+ ctPad.length + 8 + 8;
64
+ const data = new Uint8Array(totalLen);
65
+
66
+ let offset = 0;
67
+ data.set(aad, offset);
68
+ offset += aad.length;
69
+ data.set(aadPad, offset);
70
+ offset += aadPad.length;
71
+ data.set(ciphertext, offset);
72
+ offset += ciphertext.length;
73
+ data.set(ctPad, offset);
74
+ offset += ctPad.length;
75
+ data.set(aadLen, offset);
76
+ offset += 8;
77
+ data.set(ctLen, offset);
78
+
79
+ return data;
80
+ }
81
+
82
+ /**
83
+ * Constant-time comparison of two byte arrays
84
+ * @param {Uint8Array} a - First array
85
+ * @param {Uint8Array} b - Second array
86
+ * @returns {boolean} True if arrays are equal
87
+ */
88
+ function constantTimeEqual(a, b) {
89
+ if (a.length !== b.length) {
90
+ return false;
91
+ }
92
+ let diff = 0;
93
+ for (let i = 0; i < a.length; i++) {
94
+ diff |= a[i] ^ b[i];
95
+ }
96
+ return diff === 0;
97
+ }
98
+
99
+ /**
100
+ * Encrypts and authenticates data using ChaCha20-Poly1305 AEAD
101
+ * @param {Uint8Array} key - 32-byte encryption key
102
+ * @param {Uint8Array} nonce - 12-byte nonce (must be unique per key)
103
+ * @param {Uint8Array} plaintext - Data to encrypt
104
+ * @param {Uint8Array} [aad] - Additional authenticated data (optional)
105
+ * @returns {Uint8Array} Ciphertext with appended 16-byte authentication tag
106
+ * @throws {Error} If key is not 32 bytes or nonce is not 12 bytes
107
+ */
108
+ function encrypt(key, nonce, plaintext, aad = new Uint8Array(0)) {
109
+ if (!(key instanceof Uint8Array) || key.length !== 32) {
110
+ throw new Error('Key must be 32 bytes');
111
+ }
112
+ if (!(nonce instanceof Uint8Array) || nonce.length !== 12) {
113
+ throw new Error('Nonce must be 12 bytes');
114
+ }
115
+ if (!(plaintext instanceof Uint8Array)) {
116
+ throw new Error('Plaintext must be a Uint8Array');
117
+ }
118
+ if (!(aad instanceof Uint8Array)) {
119
+ throw new Error('AAD must be a Uint8Array');
120
+ }
121
+
122
+ // Generate Poly1305 key
123
+ const polyKey = generatePolyKey(key, nonce);
124
+
125
+ // Encrypt plaintext with counter starting at 1
126
+ const ciphertext = chacha20(key, nonce, 1, plaintext);
127
+
128
+ // Compute MAC
129
+ const macData = constructMacData(aad, ciphertext);
130
+ const tag = poly1305(polyKey, macData);
131
+
132
+ // Concatenate ciphertext and tag
133
+ const result = new Uint8Array(ciphertext.length + 16);
134
+ result.set(ciphertext);
135
+ result.set(tag, ciphertext.length);
136
+
137
+ return result;
138
+ }
139
+
140
+ /**
141
+ * Decrypts and verifies data using ChaCha20-Poly1305 AEAD
142
+ * @param {Uint8Array} key - 32-byte encryption key
143
+ * @param {Uint8Array} nonce - 12-byte nonce
144
+ * @param {Uint8Array} ciphertext - Ciphertext with 16-byte authentication tag
145
+ * @param {Uint8Array} [aad] - Additional authenticated data (optional)
146
+ * @returns {Uint8Array|null} Decrypted plaintext, or null if authentication fails
147
+ * @throws {Error} If key is not 32 bytes, nonce is not 12 bytes, or ciphertext too short
148
+ */
149
+ function decrypt(key, nonce, ciphertext, aad = new Uint8Array(0)) {
150
+ if (!(key instanceof Uint8Array) || key.length !== 32) {
151
+ throw new Error('Key must be 32 bytes');
152
+ }
153
+ if (!(nonce instanceof Uint8Array) || nonce.length !== 12) {
154
+ throw new Error('Nonce must be 12 bytes');
155
+ }
156
+ if (!(ciphertext instanceof Uint8Array)) {
157
+ throw new Error('Ciphertext must be a Uint8Array');
158
+ }
159
+ if (ciphertext.length < 16) {
160
+ throw new Error('Ciphertext must be at least 16 bytes (tag size)');
161
+ }
162
+ if (!(aad instanceof Uint8Array)) {
163
+ throw new Error('AAD must be a Uint8Array');
164
+ }
165
+
166
+ // Split ciphertext and tag
167
+ const ct = ciphertext.subarray(0, ciphertext.length - 16);
168
+ const receivedTag = ciphertext.subarray(ciphertext.length - 16);
169
+
170
+ // Generate Poly1305 key
171
+ const polyKey = generatePolyKey(key, nonce);
172
+
173
+ // Compute expected MAC
174
+ const macData = constructMacData(aad, ct);
175
+ const expectedTag = poly1305(polyKey, macData);
176
+
177
+ // Verify tag using constant-time comparison
178
+ if (!constantTimeEqual(receivedTag, expectedTag)) {
179
+ return null;
180
+ }
181
+
182
+ // Decrypt ciphertext with counter starting at 1
183
+ return chacha20(key, nonce, 1, ct);
184
+ }
185
+
186
+ module.exports = {
187
+ encrypt,
188
+ decrypt
189
+ };