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,240 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * SHA-256 Hash Function (FIPS 180-4)
5
+ * Pure JavaScript implementation for BLE Mesh Network
6
+ * @module crypto/sha256
7
+ */
8
+
9
+ /**
10
+ * SHA-256 round constants K[64]
11
+ * First 32 bits of fractional parts of cube roots of first 64 primes
12
+ * @type {Uint32Array}
13
+ */
14
+ const K = new Uint32Array([
15
+ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
16
+ 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
17
+ 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
18
+ 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
19
+ 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
20
+ 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
21
+ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
22
+ 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
23
+ 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
24
+ 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
25
+ 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
26
+ 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
27
+ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
28
+ 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
29
+ 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
30
+ 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
31
+ ]);
32
+
33
+ /**
34
+ * Initial hash values H[8]
35
+ * First 32 bits of fractional parts of square roots of first 8 primes
36
+ * @type {Uint32Array}
37
+ */
38
+ const H_INIT = new Uint32Array([
39
+ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
40
+ 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
41
+ ]);
42
+
43
+ /**
44
+ * Right rotate a 32-bit integer
45
+ * @param {number} x - Value to rotate
46
+ * @param {number} n - Bits to rotate
47
+ * @returns {number} Rotated value
48
+ */
49
+ function rotr(x, n) {
50
+ return ((x >>> n) | (x << (32 - n))) >>> 0;
51
+ }
52
+
53
+ /**
54
+ * SHA-256 compression function
55
+ * Processes a single 512-bit block
56
+ * @param {Uint32Array} H - Current hash state (8 words)
57
+ * @param {Uint32Array} W - Message schedule (64 words)
58
+ */
59
+ function compress(H, W) {
60
+ // Extend 16 words to 64 words
61
+ for (let i = 16; i < 64; i++) {
62
+ const s0 = rotr(W[i - 15], 7) ^ rotr(W[i - 15], 18) ^ (W[i - 15] >>> 3);
63
+ const s1 = rotr(W[i - 2], 17) ^ rotr(W[i - 2], 19) ^ (W[i - 2] >>> 10);
64
+ W[i] = (W[i - 16] + s0 + W[i - 7] + s1) >>> 0;
65
+ }
66
+
67
+ // Initialize working variables
68
+ let a = H[0], b = H[1], c = H[2], d = H[3];
69
+ let e = H[4], f = H[5], g = H[6], h = H[7];
70
+
71
+ // 64 rounds
72
+ for (let i = 0; i < 64; i++) {
73
+ const S1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25);
74
+ const ch = (e & f) ^ (~e & g);
75
+ const temp1 = (h + S1 + ch + K[i] + W[i]) >>> 0;
76
+ const S0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22);
77
+ const maj = (a & b) ^ (a & c) ^ (b & c);
78
+ const temp2 = (S0 + maj) >>> 0;
79
+
80
+ h = g; g = f; f = e;
81
+ e = (d + temp1) >>> 0;
82
+ d = c; c = b; b = a;
83
+ a = (temp1 + temp2) >>> 0;
84
+ }
85
+
86
+ // Add compressed chunk to hash
87
+ H[0] = (H[0] + a) >>> 0;
88
+ H[1] = (H[1] + b) >>> 0;
89
+ H[2] = (H[2] + c) >>> 0;
90
+ H[3] = (H[3] + d) >>> 0;
91
+ H[4] = (H[4] + e) >>> 0;
92
+ H[5] = (H[5] + f) >>> 0;
93
+ H[6] = (H[6] + g) >>> 0;
94
+ H[7] = (H[7] + h) >>> 0;
95
+ }
96
+
97
+ /**
98
+ * HashContext for streaming SHA-256 computation
99
+ * @class
100
+ */
101
+ class HashContext {
102
+ constructor() {
103
+ this._H = new Uint32Array(H_INIT);
104
+ this._buffer = new Uint8Array(64);
105
+ this._bufferLength = 0;
106
+ this._totalLength = 0;
107
+ this._finalized = false;
108
+ }
109
+
110
+ /**
111
+ * Update hash with additional data
112
+ * @param {Uint8Array} data - Data to hash
113
+ * @returns {HashContext} This context for chaining
114
+ */
115
+ update(data) {
116
+ if (this._finalized) {
117
+ throw new Error('Cannot update finalized hash');
118
+ }
119
+
120
+ const W = new Uint32Array(64);
121
+ let offset = 0;
122
+
123
+ // Process any buffered data first
124
+ if (this._bufferLength > 0) {
125
+ const needed = 64 - this._bufferLength;
126
+ const toCopy = Math.min(needed, data.length);
127
+ this._buffer.set(data.subarray(0, toCopy), this._bufferLength);
128
+ this._bufferLength += toCopy;
129
+ offset = toCopy;
130
+
131
+ if (this._bufferLength === 64) {
132
+ for (let i = 0; i < 16; i++) {
133
+ W[i] = (this._buffer[i * 4] << 24) | (this._buffer[i * 4 + 1] << 16) |
134
+ (this._buffer[i * 4 + 2] << 8) | this._buffer[i * 4 + 3];
135
+ }
136
+ compress(this._H, W);
137
+ this._bufferLength = 0;
138
+ }
139
+ }
140
+
141
+ // Process complete 64-byte blocks
142
+ while (offset + 64 <= data.length) {
143
+ for (let i = 0; i < 16; i++) {
144
+ W[i] = (data[offset + i * 4] << 24) | (data[offset + i * 4 + 1] << 16) |
145
+ (data[offset + i * 4 + 2] << 8) | data[offset + i * 4 + 3];
146
+ }
147
+ compress(this._H, W);
148
+ offset += 64;
149
+ }
150
+
151
+ // Buffer remaining bytes
152
+ if (offset < data.length) {
153
+ this._buffer.set(data.subarray(offset), 0);
154
+ this._bufferLength = data.length - offset;
155
+ }
156
+
157
+ this._totalLength += data.length;
158
+ return this;
159
+ }
160
+
161
+ /**
162
+ * Finalize hash and return digest
163
+ * @returns {Uint8Array} 32-byte hash digest
164
+ */
165
+ digest() {
166
+ if (this._finalized) {
167
+ throw new Error('Hash already finalized');
168
+ }
169
+ this._finalized = true;
170
+
171
+ const W = new Uint32Array(64);
172
+ const bitLength = this._totalLength * 8;
173
+
174
+ // Append padding bit
175
+ this._buffer[this._bufferLength++] = 0x80;
176
+
177
+ // If not enough room for length, process current block
178
+ if (this._bufferLength > 56) {
179
+ this._buffer.fill(0, this._bufferLength, 64);
180
+ for (let i = 0; i < 16; i++) {
181
+ W[i] = (this._buffer[i * 4] << 24) | (this._buffer[i * 4 + 1] << 16) |
182
+ (this._buffer[i * 4 + 2] << 8) | this._buffer[i * 4 + 3];
183
+ }
184
+ compress(this._H, W);
185
+ this._bufferLength = 0;
186
+ }
187
+
188
+ // Pad with zeros and append 64-bit length (big-endian)
189
+ this._buffer.fill(0, this._bufferLength, 56);
190
+ // Note: JavaScript bitwise ops are 32-bit, handle high bits separately
191
+ const highBits = Math.floor(bitLength / 0x100000000);
192
+ this._buffer[56] = (highBits >>> 24) & 0xff;
193
+ this._buffer[57] = (highBits >>> 16) & 0xff;
194
+ this._buffer[58] = (highBits >>> 8) & 0xff;
195
+ this._buffer[59] = highBits & 0xff;
196
+ this._buffer[60] = (bitLength >>> 24) & 0xff;
197
+ this._buffer[61] = (bitLength >>> 16) & 0xff;
198
+ this._buffer[62] = (bitLength >>> 8) & 0xff;
199
+ this._buffer[63] = bitLength & 0xff;
200
+
201
+ for (let i = 0; i < 16; i++) {
202
+ W[i] = (this._buffer[i * 4] << 24) | (this._buffer[i * 4 + 1] << 16) |
203
+ (this._buffer[i * 4 + 2] << 8) | this._buffer[i * 4 + 3];
204
+ }
205
+ compress(this._H, W);
206
+
207
+ // Convert hash to bytes
208
+ const result = new Uint8Array(32);
209
+ for (let i = 0; i < 8; i++) {
210
+ result[i * 4] = (this._H[i] >>> 24) & 0xff;
211
+ result[i * 4 + 1] = (this._H[i] >>> 16) & 0xff;
212
+ result[i * 4 + 2] = (this._H[i] >>> 8) & 0xff;
213
+ result[i * 4 + 3] = this._H[i] & 0xff;
214
+ }
215
+ return result;
216
+ }
217
+ }
218
+
219
+ /**
220
+ * Create a new streaming hash context
221
+ * @returns {HashContext} New hash context
222
+ */
223
+ function createHash() {
224
+ return new HashContext();
225
+ }
226
+
227
+ /**
228
+ * Compute SHA-256 hash of data
229
+ * @param {Uint8Array} data - Data to hash
230
+ * @returns {Uint8Array} 32-byte hash digest
231
+ */
232
+ function hash(data) {
233
+ return createHash().update(data).digest();
234
+ }
235
+
236
+ module.exports = {
237
+ hash,
238
+ createHash,
239
+ HashContext
240
+ };
@@ -0,0 +1,154 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * @fileoverview X25519 Elliptic Curve Diffie-Hellman (RFC 7748)
5
+ * Pure JavaScript implementation using BigInt for field arithmetic.
6
+ * @module crypto/x25519
7
+ */
8
+
9
+ const { randomBytes } = require('../utils/bytes');
10
+
11
+ /** Prime field modulus: p = 2^255 - 19 */
12
+ const P = (1n << 255n) - 19n;
13
+ /** a24 = (A - 2) / 4 = 121665 where A = 486662 for Curve25519 */
14
+ const A24 = 121665n;
15
+ /** Base point u-coordinate */
16
+ const BASE_POINT = 9n;
17
+
18
+ /** Converts Uint8Array to BigInt (little-endian). */
19
+ function bytesToBigInt(bytes) {
20
+ let result = 0n;
21
+ for (let i = bytes.length - 1; i >= 0; i--) {
22
+ result = (result << 8n) | BigInt(bytes[i]);
23
+ }
24
+ return result;
25
+ }
26
+
27
+ /** Converts BigInt to Uint8Array (little-endian, 32 bytes). */
28
+ function bigIntToBytes(n) {
29
+ const bytes = new Uint8Array(32);
30
+ let value = n;
31
+ for (let i = 0; i < 32; i++) {
32
+ bytes[i] = Number(value & 0xffn);
33
+ value >>= 8n;
34
+ }
35
+ return bytes;
36
+ }
37
+
38
+ /** Field operations: add, sub, mul, square */
39
+ const fieldAdd = (a, b) => (a + b) % P;
40
+ const fieldSub = (a, b) => ((a - b) % P + P) % P;
41
+ const fieldMul = (a, b) => (a * b) % P;
42
+ const fieldSquare = (a) => (a * a) % P;
43
+
44
+ /** Modular exponentiation using square-and-multiply. */
45
+ function fieldPow(base, exp) {
46
+ let result = 1n;
47
+ base = base % P;
48
+ while (exp > 0n) {
49
+ if (exp & 1n) { result = fieldMul(result, base); }
50
+ exp >>= 1n;
51
+ base = fieldSquare(base);
52
+ }
53
+ return result;
54
+ }
55
+
56
+ /** Modular inverse using Fermat's little theorem: a^(-1) = a^(p-2) mod p. */
57
+ const fieldInvert = (a) => fieldPow(a, P - 2n);
58
+
59
+ /**
60
+ * Conditional swap - swaps a and b if swap is 1, otherwise leaves unchanged.
61
+ * Implemented without branching on secret data.
62
+ */
63
+ function cswap(swap, a, b) {
64
+ const mask = -swap;
65
+ const diff = (a ^ b) & mask;
66
+ return [a ^ diff, b ^ diff];
67
+ }
68
+
69
+ /**
70
+ * Clamps a scalar per RFC 7748 Section 5.
71
+ * @param {Uint8Array} k - 32-byte scalar
72
+ * @returns {Uint8Array} Clamped scalar
73
+ */
74
+ function clampScalar(k) {
75
+ const clamped = new Uint8Array(k);
76
+ clamped[0] &= 248; // Clear bits 0, 1, 2
77
+ clamped[31] &= 127; // Clear bit 7 of last byte
78
+ clamped[31] |= 64; // Set bit 6 of last byte
79
+ return clamped;
80
+ }
81
+
82
+ /**
83
+ * Montgomery ladder for X25519 scalar multiplication.
84
+ * Computes scalar * point on Curve25519.
85
+ * @param {Uint8Array} scalar - 32-byte scalar (will be clamped)
86
+ * @param {Uint8Array} point - 32-byte u-coordinate
87
+ * @returns {Uint8Array} 32-byte result u-coordinate
88
+ */
89
+ function scalarMult(scalar, point) {
90
+ const k = bytesToBigInt(clampScalar(scalar));
91
+ let u = bytesToBigInt(point);
92
+
93
+ // Handle edge case: all-zeros point returns all-zeros
94
+ if (u === 0n) { return new Uint8Array(32); }
95
+ u = u % P;
96
+
97
+ // Montgomery ladder state (RFC 7748 naming convention)
98
+ // eslint-disable-next-line camelcase, prefer-const
99
+ let x_1 = u, x_2 = 1n, z_2 = 0n, x_3 = u, z_3 = 1n, swap = 0n;
100
+
101
+ // Process bits from 254 down to 0
102
+ for (let t = 254; t >= 0; t--) {
103
+ // eslint-disable-next-line camelcase
104
+ const k_t = (k >> BigInt(t)) & 1n;
105
+ swap ^= k_t; // eslint-disable-line camelcase
106
+ [x_2, x_3] = cswap(swap, x_2, x_3); // eslint-disable-line camelcase
107
+ [z_2, z_3] = cswap(swap, z_2, z_3); // eslint-disable-line camelcase
108
+ swap = k_t; // eslint-disable-line camelcase
109
+
110
+ const A = fieldAdd(x_2, z_2); // eslint-disable-line camelcase
111
+ const AA = fieldSquare(A);
112
+ const B = fieldSub(x_2, z_2); // eslint-disable-line camelcase
113
+ const BB = fieldSquare(B);
114
+ const E = fieldSub(AA, BB);
115
+ const C = fieldAdd(x_3, z_3); // eslint-disable-line camelcase
116
+ const D = fieldSub(x_3, z_3); // eslint-disable-line camelcase
117
+ const DA = fieldMul(D, A);
118
+ const CB = fieldMul(C, B);
119
+ x_3 = fieldSquare(fieldAdd(DA, CB)); // eslint-disable-line camelcase
120
+ z_3 = fieldMul(x_1, fieldSquare(fieldSub(DA, CB))); // eslint-disable-line camelcase
121
+ x_2 = fieldMul(AA, BB); // eslint-disable-line camelcase
122
+ z_2 = fieldMul(E, fieldAdd(AA, fieldMul(A24, E))); // eslint-disable-line camelcase
123
+ }
124
+
125
+ [x_2, x_3] = cswap(swap, x_2, x_3); // eslint-disable-line camelcase
126
+ [z_2, z_3] = cswap(swap, z_2, z_3); // eslint-disable-line camelcase
127
+
128
+ return bigIntToBytes(fieldMul(x_2, fieldInvert(z_2))); // eslint-disable-line camelcase
129
+ }
130
+
131
+ /**
132
+ * Computes scalar multiplication with the base point (u = 9).
133
+ * @param {Uint8Array} scalar - 32-byte scalar (will be clamped)
134
+ * @returns {Uint8Array} 32-byte public key
135
+ */
136
+ function scalarMultBase(scalar) {
137
+ return scalarMult(scalar, bigIntToBytes(BASE_POINT));
138
+ }
139
+
140
+ /**
141
+ * Generates a new X25519 key pair.
142
+ * @returns {{publicKey: Uint8Array, secretKey: Uint8Array}} Key pair
143
+ */
144
+ function generateKeyPair() {
145
+ const secretKey = randomBytes(32);
146
+ const publicKey = scalarMultBase(secretKey);
147
+ return { publicKey, secretKey };
148
+ }
149
+
150
+ module.exports = {
151
+ generateKeyPair,
152
+ scalarMult,
153
+ scalarMultBase
154
+ };
@@ -0,0 +1,164 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * @fileoverview Audio-specific error class for LC3 codec and streaming
5
+ * @module errors/AudioError
6
+ */
7
+
8
+ const MeshError = require('./MeshError');
9
+ const { ERROR_MESSAGES } = require('../constants/errors');
10
+
11
+ /**
12
+ * Error class for audio operation failures
13
+ * @class AudioError
14
+ * @extends MeshError
15
+ */
16
+ class AudioError extends MeshError {
17
+ /**
18
+ * Creates a new AudioError
19
+ * @param {string} message - Human-readable error message
20
+ * @param {string} [code='EA00'] - Error code (EAxx range)
21
+ * @param {Object|null} [details=null] - Additional error context
22
+ */
23
+ constructor(message, code = 'EA00', details = null) {
24
+ super(message, code, details);
25
+ this.name = 'AudioError';
26
+ }
27
+
28
+ /**
29
+ * Creates an error from an error code
30
+ * @param {string} code - Error code
31
+ * @param {Object|null} [details=null] - Additional error context
32
+ * @returns {AudioError}
33
+ */
34
+ static fromCode(code, details = null) {
35
+ const message = ERROR_MESSAGES[code] || 'Audio operation failed';
36
+ return new AudioError(message, code, details);
37
+ }
38
+
39
+ /**
40
+ * Creates a codec initialization error
41
+ * @param {Object|null} [details=null] - Additional error context
42
+ * @returns {AudioError}
43
+ */
44
+ static codecInitFailed(details = null) {
45
+ return new AudioError('LC3 codec initialization failed', 'EA01', details);
46
+ }
47
+
48
+ /**
49
+ * Creates an encoding error
50
+ * @param {Object|null} [details=null] - Additional error context
51
+ * @returns {AudioError}
52
+ */
53
+ static encodingFailed(details = null) {
54
+ return new AudioError('Audio encoding failed', 'EA02', details);
55
+ }
56
+
57
+ /**
58
+ * Creates a decoding error
59
+ * @param {Object|null} [details=null] - Additional error context
60
+ * @returns {AudioError}
61
+ */
62
+ static decodingFailed(details = null) {
63
+ return new AudioError('Audio decoding failed', 'EA03', details);
64
+ }
65
+
66
+ /**
67
+ * Creates a session error
68
+ * @param {string} peerId - Peer ID
69
+ * @param {Object|null} [details=null] - Additional error context
70
+ * @returns {AudioError}
71
+ */
72
+ static sessionFailed(peerId, details = null) {
73
+ return new AudioError(
74
+ `Audio session failed with peer ${peerId}`,
75
+ 'EA04',
76
+ { peerId, ...details }
77
+ );
78
+ }
79
+
80
+ /**
81
+ * Creates a buffer overflow error
82
+ * @param {Object|null} [details=null] - Additional error context
83
+ * @returns {AudioError}
84
+ */
85
+ static bufferOverflow(details = null) {
86
+ return new AudioError('Audio buffer overflow', 'EA05', details);
87
+ }
88
+
89
+ /**
90
+ * Creates a buffer underrun error
91
+ * @param {Object|null} [details=null] - Additional error context
92
+ * @returns {AudioError}
93
+ */
94
+ static bufferUnderrun(details = null) {
95
+ return new AudioError('Audio buffer underrun', 'EA06', details);
96
+ }
97
+
98
+ /**
99
+ * Creates a voice message too large error
100
+ * @param {number} size - Actual size in bytes
101
+ * @param {number} maxSize - Maximum allowed size in bytes
102
+ * @returns {AudioError}
103
+ */
104
+ static voiceMessageTooLarge(size, maxSize) {
105
+ return new AudioError(
106
+ `Voice message too large: ${size} bytes (max: ${maxSize})`,
107
+ 'EA07',
108
+ { size, maxSize }
109
+ );
110
+ }
111
+
112
+ /**
113
+ * Creates a stream rejected error
114
+ * @param {string} peerId - Peer ID
115
+ * @param {string} [reason] - Rejection reason
116
+ * @returns {AudioError}
117
+ */
118
+ static streamRejected(peerId, reason) {
119
+ return new AudioError(
120
+ `Audio stream rejected by peer ${peerId}`,
121
+ 'EA08',
122
+ { peerId, reason }
123
+ );
124
+ }
125
+
126
+ /**
127
+ * Creates a codec not available error
128
+ * @returns {AudioError}
129
+ */
130
+ static codecNotAvailable() {
131
+ return new AudioError(
132
+ 'LC3 codec not available - native module not installed',
133
+ 'EA09'
134
+ );
135
+ }
136
+
137
+ /**
138
+ * Creates an invalid configuration error
139
+ * @param {string} [reason] - Reason for invalid configuration
140
+ * @returns {AudioError}
141
+ */
142
+ static invalidConfig(reason) {
143
+ return new AudioError(
144
+ `Invalid audio configuration: ${reason || 'unknown'}`,
145
+ 'EA10',
146
+ { reason }
147
+ );
148
+ }
149
+
150
+ /**
151
+ * Creates a voice message timeout error
152
+ * @param {string} messageId - Message ID
153
+ * @returns {AudioError}
154
+ */
155
+ static voiceMessageTimeout(messageId) {
156
+ return new AudioError(
157
+ `Voice message assembly timed out: ${messageId}`,
158
+ 'EA11',
159
+ { messageId }
160
+ );
161
+ }
162
+ }
163
+
164
+ module.exports = AudioError;
@@ -0,0 +1,109 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * @fileoverview Connection error class
5
+ * @module errors/ConnectionError
6
+ */
7
+
8
+ const MeshError = require('./MeshError');
9
+ const { ERROR_MESSAGES } = require('../constants/errors');
10
+
11
+ /**
12
+ * Error class for connection-related failures
13
+ * @class ConnectionError
14
+ * @extends MeshError
15
+ */
16
+ class ConnectionError extends MeshError {
17
+ /**
18
+ * Creates a new ConnectionError
19
+ * @param {string} message - Human-readable error message
20
+ * @param {string} [code='E200'] - Error code (E2xx range)
21
+ * @param {string|null} [peerId=null] - ID of the peer involved
22
+ * @param {Object|null} [details=null] - Additional error context
23
+ */
24
+ constructor(message, code = 'E200', peerId = null, details = null) {
25
+ super(message, code, details);
26
+ this.name = 'ConnectionError';
27
+
28
+ /**
29
+ * ID of the peer involved in the connection error
30
+ * @type {string|null}
31
+ */
32
+ this.peerId = peerId;
33
+ }
34
+
35
+ /**
36
+ * Creates an error from an error code
37
+ * @param {string} code - Error code from ERROR_CODE constants
38
+ * @param {string|null} [peerId=null] - ID of the peer involved
39
+ * @param {Object|null} [details=null] - Additional error context
40
+ * @returns {ConnectionError} New ConnectionError instance
41
+ */
42
+ static fromCode(code, peerId = null, details = null) {
43
+ const message = ERROR_MESSAGES[code] || ERROR_MESSAGES.E200;
44
+ return new ConnectionError(message, code, peerId, details);
45
+ }
46
+
47
+ /**
48
+ * Creates a connection failed error
49
+ * @param {string|null} [peerId=null] - ID of the peer
50
+ * @param {Object|null} [details=null] - Additional error context
51
+ * @returns {ConnectionError} New ConnectionError instance
52
+ */
53
+ static connectionFailed(peerId = null, details = null) {
54
+ return ConnectionError.fromCode('E200', peerId, details);
55
+ }
56
+
57
+ /**
58
+ * Creates a connection timeout error
59
+ * @param {string|null} [peerId=null] - ID of the peer
60
+ * @param {Object|null} [details=null] - Additional error context
61
+ * @returns {ConnectionError} New ConnectionError instance
62
+ */
63
+ static connectionTimeout(peerId = null, details = null) {
64
+ return ConnectionError.fromCode('E201', peerId, details);
65
+ }
66
+
67
+ /**
68
+ * Creates a connection lost error
69
+ * @param {string|null} [peerId=null] - ID of the peer
70
+ * @param {Object|null} [details=null] - Additional error context
71
+ * @returns {ConnectionError} New ConnectionError instance
72
+ */
73
+ static connectionLost(peerId = null, details = null) {
74
+ return ConnectionError.fromCode('E202', peerId, details);
75
+ }
76
+
77
+ /**
78
+ * Creates a peer not found error
79
+ * @param {string|null} [peerId=null] - ID of the peer
80
+ * @param {Object|null} [details=null] - Additional error context
81
+ * @returns {ConnectionError} New ConnectionError instance
82
+ */
83
+ static peerNotFound(peerId = null, details = null) {
84
+ return ConnectionError.fromCode('E204', peerId, details);
85
+ }
86
+
87
+ /**
88
+ * Creates a peer blocked error
89
+ * @param {string|null} [peerId=null] - ID of the peer
90
+ * @param {Object|null} [details=null] - Additional error context
91
+ * @returns {ConnectionError} New ConnectionError instance
92
+ */
93
+ static peerBlocked(peerId = null, details = null) {
94
+ return ConnectionError.fromCode('E205', peerId, details);
95
+ }
96
+
97
+ /**
98
+ * Converts error to a JSON-serializable object
99
+ * @returns {Object} JSON representation of the error
100
+ */
101
+ toJSON() {
102
+ return {
103
+ ...super.toJSON(),
104
+ peerId: this.peerId
105
+ };
106
+ }
107
+ }
108
+
109
+ module.exports = ConnectionError;