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,182 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Testing Helper Example
4
+ *
5
+ * Shows how to use the library in unit tests with MockTransport.
6
+ * Compatible with Jest, Mocha, and other test frameworks.
7
+ *
8
+ * Usage in tests:
9
+ * const { createTestPair, createTestMesh } = require('react-native-ble-mesh/examples/testing/test-helper');
10
+ */
11
+
12
+ 'use strict';
13
+
14
+ const { MeshService, MockTransport, MemoryStorage, utils } = require('../../src');
15
+
16
+ /**
17
+ * Create a single test mesh instance
18
+ * @param {Object} options - Configuration options
19
+ * @param {string} [options.displayName='TestNode'] - Display name
20
+ * @returns {Promise<{mesh: MeshService, transport: MockTransport}>}
21
+ */
22
+ async function createTestMesh(options = {}) {
23
+ const mesh = new MeshService({
24
+ displayName: options.displayName || 'TestNode'
25
+ });
26
+
27
+ const transport = new MockTransport({ localPeerId: utils.generateUUID() });
28
+
29
+ await mesh.initialize({
30
+ storage: new MemoryStorage()
31
+ });
32
+
33
+ await mesh.start(transport);
34
+
35
+ return { mesh, transport };
36
+ }
37
+
38
+ /**
39
+ * Create a pair of connected test mesh instances
40
+ * @param {Object} options - Configuration options
41
+ * @param {string} [options.name1='Alice'] - First node name
42
+ * @param {string} [options.name2='Bob'] - Second node name
43
+ * @returns {Promise<{alice: MeshService, bob: MeshService, aliceTransport: MockTransport, bobTransport: MockTransport}>}
44
+ */
45
+ async function createTestPair(options = {}) {
46
+ const { mesh: alice, transport: aliceTransport } = await createTestMesh({
47
+ displayName: options.name1 || 'Alice'
48
+ });
49
+
50
+ const { mesh: bob, transport: bobTransport } = await createTestMesh({
51
+ displayName: options.name2 || 'Bob'
52
+ });
53
+
54
+ // Link the transports
55
+ aliceTransport.linkTo(bobTransport);
56
+
57
+ return { alice, bob, aliceTransport, bobTransport };
58
+ }
59
+
60
+ /**
61
+ * Create a mesh network of test nodes
62
+ * @param {number} count - Number of nodes to create
63
+ * @param {string} [topology='chain'] - 'chain', 'star', or 'full'
64
+ * @returns {Promise<Array<{mesh: MeshService, transport: MockTransport}>>}
65
+ */
66
+ async function createTestNetwork(count, topology = 'chain') {
67
+ const nodes = [];
68
+
69
+ // Create nodes
70
+ for (let i = 0; i < count; i++) {
71
+ const node = await createTestMesh({
72
+ displayName: `Node${i + 1}`
73
+ });
74
+ nodes.push(node);
75
+ }
76
+
77
+ // Connect based on topology
78
+ switch (topology) {
79
+ case 'chain':
80
+ // A - B - C - D
81
+ for (let i = 0; i < nodes.length - 1; i++) {
82
+ nodes[i].transport.linkTo(nodes[i + 1].transport);
83
+ }
84
+ break;
85
+
86
+ case 'star':
87
+ // All connect to first node
88
+ for (let i = 1; i < nodes.length; i++) {
89
+ nodes[0].transport.linkTo(nodes[i].transport);
90
+ }
91
+ break;
92
+
93
+ case 'full':
94
+ // Everyone connects to everyone
95
+ for (let i = 0; i < nodes.length; i++) {
96
+ for (let j = i + 1; j < nodes.length; j++) {
97
+ nodes[i].transport.linkTo(nodes[j].transport);
98
+ }
99
+ }
100
+ break;
101
+
102
+ default:
103
+ throw new Error(`Unknown topology: ${topology}`);
104
+ }
105
+
106
+ return nodes;
107
+ }
108
+
109
+ /**
110
+ * Clean up test mesh instances
111
+ * @param {...MeshService} meshes - Mesh instances to clean up
112
+ */
113
+ async function cleanupTestMeshes(...meshes) {
114
+ for (const mesh of meshes) {
115
+ try {
116
+ await mesh.stop();
117
+ await mesh.destroy();
118
+ } catch (e) {
119
+ // Ignore cleanup errors
120
+ }
121
+ }
122
+ }
123
+
124
+ /**
125
+ * Wait for a specific event with timeout
126
+ * @param {MeshService} mesh - Mesh service instance
127
+ * @param {string} eventName - Event to wait for
128
+ * @param {number} [timeout=5000] - Timeout in ms
129
+ * @returns {Promise<any>} Event data
130
+ */
131
+ function waitForEvent(mesh, eventName, timeout = 5000) {
132
+ return new Promise((resolve, reject) => {
133
+ const timer = setTimeout(() => {
134
+ reject(new Error(`Timeout waiting for event: ${eventName}`));
135
+ }, timeout);
136
+
137
+ mesh.once(eventName, (data) => {
138
+ clearTimeout(timer);
139
+ resolve(data);
140
+ });
141
+ });
142
+ }
143
+
144
+ // Export helpers
145
+ module.exports = {
146
+ createTestMesh,
147
+ createTestPair,
148
+ createTestNetwork,
149
+ cleanupTestMeshes,
150
+ waitForEvent
151
+ };
152
+
153
+ // Demo if run directly
154
+ if (require.main === module) {
155
+ (async () => {
156
+ console.log('Test Helper Demo\n');
157
+
158
+ // Demo: Create a test pair
159
+ console.log('1. Creating test pair...');
160
+ const { alice, bob, aliceTransport, bobTransport } = await createTestPair();
161
+ console.log(' Alice state:', alice.getState());
162
+ console.log(' Bob state:', bob.getState());
163
+
164
+ // Demo: Send message
165
+ console.log('\n2. Sending broadcast...');
166
+ alice.sendBroadcast('Test message');
167
+
168
+ // Demo: Create network
169
+ console.log('\n3. Creating 4-node chain network...');
170
+ const network = await createTestNetwork(4, 'chain');
171
+ console.log(` Created ${network.length} nodes`);
172
+
173
+ // Cleanup
174
+ console.log('\n4. Cleaning up...');
175
+ await cleanupTestMeshes(alice, bob);
176
+ for (const node of network) {
177
+ await cleanupTestMeshes(node.mesh);
178
+ }
179
+
180
+ console.log('\nDemo complete!');
181
+ })().catch(console.error);
182
+ }
package/package.json ADDED
@@ -0,0 +1,111 @@
1
+ {
2
+ "name": "react-native-ble-mesh",
3
+ "version": "1.0.1",
4
+ "description": "Production-ready BLE Mesh Network with Noise Protocol security",
5
+ "main": "src/index.js",
6
+ "types": "src/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./src/index.d.ts",
10
+ "require": "./src/index.js",
11
+ "default": "./src/index.js"
12
+ },
13
+ "./adapters": {
14
+ "require": "./src/transport/adapters/index.js",
15
+ "default": "./src/transport/adapters/index.js"
16
+ },
17
+ "./errors": {
18
+ "require": "./src/errors/index.js",
19
+ "default": "./src/errors/index.js"
20
+ },
21
+ "./crypto": {
22
+ "require": "./src/crypto/index.js",
23
+ "default": "./src/crypto/index.js"
24
+ },
25
+ "./utils": {
26
+ "require": "./src/utils/index.js",
27
+ "default": "./src/utils/index.js"
28
+ },
29
+ "./hooks": {
30
+ "require": "./src/hooks/index.js",
31
+ "default": "./src/hooks/index.js"
32
+ },
33
+ "./package.json": "./package.json"
34
+ },
35
+ "sideEffects": false,
36
+ "engines": {
37
+ "node": ">=18.0.0"
38
+ },
39
+ "scripts": {
40
+ "test": "jest",
41
+ "test:coverage": "jest --coverage",
42
+ "test:watch": "jest --watch",
43
+ "test:ci": "jest --ci --coverage --reporters=default --reporters=jest-junit",
44
+ "lint": "eslint src/",
45
+ "lint:fix": "eslint src/ --fix",
46
+ "typecheck": "tsc --noEmit",
47
+ "docs": "jsdoc -c jsdoc.json",
48
+ "validate": "npm run lint && npm test",
49
+ "prepublishOnly": "npm run validate",
50
+ "preversion": "npm run validate",
51
+ "version": "npm run docs && git add -A docs",
52
+ "postversion": "git push && git push --tags",
53
+ "release": "npm version patch && npm publish",
54
+ "release:minor": "npm version minor && npm publish",
55
+ "release:major": "npm version major && npm publish",
56
+ "size": "node -e \"const s=require('fs').statSync('src/index.js');console.log('Index size:',s.size,'bytes')\"",
57
+ "example:node": "node examples/node-quickstart/index.js",
58
+ "example:chat": "node examples/node-chat/chat.js"
59
+ },
60
+ "keywords": [
61
+ "bluetooth",
62
+ "ble",
63
+ "mesh",
64
+ "p2p",
65
+ "peer-to-peer",
66
+ "noise-protocol",
67
+ "encryption",
68
+ "react-native",
69
+ "node",
70
+ "offline-first",
71
+ "x25519",
72
+ "chacha20-poly1305"
73
+ ],
74
+ "author": "Suhail Taj Shaik",
75
+ "license": "MIT",
76
+ "devDependencies": {
77
+ "eslint": "^8.57.0",
78
+ "jest": "^29.7.0",
79
+ "jest-junit": "^16.0.0",
80
+ "jsdoc": "^4.0.4",
81
+ "typescript": "^5.9.3"
82
+ },
83
+ "peerDependencies": {
84
+ "@abandonware/noble": ">=1.9.0",
85
+ "react-native-ble-plx": ">=2.0.0"
86
+ },
87
+ "peerDependenciesMeta": {
88
+ "react-native-ble-plx": {
89
+ "optional": true
90
+ },
91
+ "@abandonware/noble": {
92
+ "optional": true
93
+ }
94
+ },
95
+ "files": [
96
+ "src",
97
+ "docs",
98
+ "examples",
99
+ "README.md",
100
+ "LICENSE",
101
+ "CHANGELOG.md"
102
+ ],
103
+ "repository": {
104
+ "type": "git",
105
+ "url": "git+https://github.com/suhailtajshaik/react-native-ble-mesh.git"
106
+ },
107
+ "bugs": {
108
+ "url": "https://github.com/suhailtajshaik/react-native-ble-mesh/issues"
109
+ },
110
+ "homepage": "https://github.com/suhailtajshaik/react-native-ble-mesh#readme"
111
+ }
@@ -0,0 +1,130 @@
1
+ /**
2
+ * @fileoverview Audio constants for LC3 codec and audio streaming
3
+ * @module constants/audio
4
+ */
5
+
6
+ 'use strict';
7
+
8
+ /**
9
+ * LC3 codec configuration
10
+ * @constant {Object}
11
+ */
12
+ const LC3_CONFIG = Object.freeze({
13
+ /** Supported sample rates (Hz) */
14
+ SAMPLE_RATES: [16000, 24000, 32000, 48000],
15
+ /** Default sample rate for voice (optimized for speech) */
16
+ DEFAULT_SAMPLE_RATE: 16000,
17
+ /** Supported frame durations (ms) */
18
+ FRAME_DURATIONS: [7.5, 10],
19
+ /** Default frame duration */
20
+ DEFAULT_FRAME_DURATION_MS: 10,
21
+ /** Bit rate presets (bps) */
22
+ BIT_RATES: {
23
+ LOW: 16000,
24
+ MEDIUM: 24000,
25
+ HIGH: 32000
26
+ },
27
+ /** Default bit rate for voice */
28
+ DEFAULT_BIT_RATE: 24000,
29
+ /** Channels */
30
+ CHANNELS: {
31
+ MONO: 1,
32
+ STEREO: 2
33
+ },
34
+ /** Default channel count (mono for voice) */
35
+ DEFAULT_CHANNELS: 1
36
+ });
37
+
38
+ /**
39
+ * Audio quality presets
40
+ * @constant {Object.<string, Object>}
41
+ */
42
+ const AUDIO_QUALITY = Object.freeze({
43
+ LOW: {
44
+ sampleRate: 16000,
45
+ bitRate: 16000,
46
+ frameMs: 10,
47
+ channels: 1
48
+ },
49
+ MEDIUM: {
50
+ sampleRate: 16000,
51
+ bitRate: 24000,
52
+ frameMs: 10,
53
+ channels: 1
54
+ },
55
+ HIGH: {
56
+ sampleRate: 24000,
57
+ bitRate: 32000,
58
+ frameMs: 10,
59
+ channels: 1
60
+ }
61
+ });
62
+
63
+ /**
64
+ * Voice message configuration
65
+ * @constant {Object}
66
+ */
67
+ const VOICE_MESSAGE_CONFIG = Object.freeze({
68
+ /** Maximum voice message duration in seconds */
69
+ MAX_DURATION_SEC: 300,
70
+ /** Maximum voice message size in bytes (512KB) */
71
+ MAX_SIZE_BYTES: 512 * 1024,
72
+ /** Chunk size for voice message data (fits BLE MTU) */
73
+ CHUNK_SIZE: 180,
74
+ /** Voice message assembly timeout in milliseconds */
75
+ TIMEOUT_MS: 120000,
76
+ /** Voice message header size */
77
+ HEADER_SIZE: 51
78
+ });
79
+
80
+ /**
81
+ * Audio streaming configuration
82
+ * @constant {Object}
83
+ */
84
+ const AUDIO_STREAM_CONFIG = Object.freeze({
85
+ /** Default jitter buffer size in frames */
86
+ JITTER_BUFFER_FRAMES: 5,
87
+ /** Maximum jitter buffer size in frames */
88
+ MAX_JITTER_BUFFER_FRAMES: 20,
89
+ /** Frame timeout in milliseconds */
90
+ FRAME_TIMEOUT_MS: 100,
91
+ /** Maximum consecutive dropped frames before quality event */
92
+ MAX_DROPPED_FRAMES: 10,
93
+ /** Session timeout in milliseconds */
94
+ SESSION_TIMEOUT_MS: 60000,
95
+ /** Audio frame header size */
96
+ FRAME_HEADER_SIZE: 8
97
+ });
98
+
99
+ /**
100
+ * Audio session states
101
+ * @constant {Object.<string, string>}
102
+ */
103
+ const AUDIO_SESSION_STATE = Object.freeze({
104
+ IDLE: 'idle',
105
+ REQUESTING: 'requesting',
106
+ PENDING: 'pending',
107
+ ACTIVE: 'active',
108
+ PAUSED: 'paused',
109
+ ENDING: 'ending',
110
+ ENDED: 'ended',
111
+ FAILED: 'failed'
112
+ });
113
+
114
+ /**
115
+ * Audio codec types
116
+ * @constant {Object.<string, number>}
117
+ */
118
+ const AUDIO_CODEC_TYPE = Object.freeze({
119
+ LC3: 0x01,
120
+ OPUS: 0x02
121
+ });
122
+
123
+ module.exports = {
124
+ LC3_CONFIG,
125
+ AUDIO_QUALITY,
126
+ VOICE_MESSAGE_CONFIG,
127
+ AUDIO_STREAM_CONFIG,
128
+ AUDIO_SESSION_STATE,
129
+ AUDIO_CODEC_TYPE
130
+ };
@@ -0,0 +1,111 @@
1
+ /**
2
+ * @fileoverview Bluetooth Low Energy constants
3
+ * @module constants/ble
4
+ */
5
+
6
+ 'use strict';
7
+
8
+ /**
9
+ * Nordic UART Service UUID
10
+ * Standard UUID for BLE serial communication
11
+ * @constant {string}
12
+ */
13
+ const BLE_SERVICE_UUID = '6E400001-B5A3-F393-E0A9-E50E24DCCA9E';
14
+
15
+ /**
16
+ * Nordic UART TX Characteristic UUID
17
+ * Used for writing data to peripheral
18
+ * @constant {string}
19
+ */
20
+ const BLE_CHARACTERISTIC_TX = '6E400002-B5A3-F393-E0A9-E50E24DCCA9E';
21
+
22
+ /**
23
+ * Nordic UART RX Characteristic UUID
24
+ * Used for receiving data from peripheral
25
+ * @constant {string}
26
+ */
27
+ const BLE_CHARACTERISTIC_RX = '6E400003-B5A3-F393-E0A9-E50E24DCCA9E';
28
+
29
+ /**
30
+ * Default MTU (Maximum Transmission Unit) size
31
+ * @constant {number}
32
+ */
33
+ const DEFAULT_MTU = 23;
34
+
35
+ /**
36
+ * Maximum MTU size for BLE 4.2+
37
+ * @constant {number}
38
+ */
39
+ const MAX_MTU = 512;
40
+
41
+ /**
42
+ * Power mode configurations
43
+ * @constant {Object.<string, Object>}
44
+ */
45
+ const POWER_MODE = Object.freeze({
46
+ /**
47
+ * High performance mode
48
+ * Best responsiveness, highest power consumption
49
+ */
50
+ PERFORMANCE: Object.freeze({
51
+ scanInterval: 1000,
52
+ scanWindow: 500,
53
+ advInterval: 100,
54
+ connectionInterval: 7.5
55
+ }),
56
+ /**
57
+ * Balanced mode
58
+ * Good balance between responsiveness and power
59
+ */
60
+ BALANCED: Object.freeze({
61
+ scanInterval: 5000,
62
+ scanWindow: 1000,
63
+ advInterval: 500,
64
+ connectionInterval: 30
65
+ }),
66
+ /**
67
+ * Power saver mode
68
+ * Minimum power consumption, slower responsiveness
69
+ */
70
+ POWER_SAVER: Object.freeze({
71
+ scanInterval: 30000,
72
+ scanWindow: 2000,
73
+ advInterval: 1000,
74
+ connectionInterval: 100
75
+ })
76
+ });
77
+
78
+ /**
79
+ * Bluetooth adapter states
80
+ * @constant {Object.<string, string>}
81
+ */
82
+ const BLUETOOTH_STATE = Object.freeze({
83
+ UNKNOWN: 'unknown',
84
+ RESETTING: 'resetting',
85
+ UNSUPPORTED: 'unsupported',
86
+ UNAUTHORIZED: 'unauthorized',
87
+ POWERED_OFF: 'poweredOff',
88
+ POWERED_ON: 'poweredOn'
89
+ });
90
+
91
+ /**
92
+ * Scan modes
93
+ * @constant {Object.<string, number>}
94
+ */
95
+ const SCAN_MODE = Object.freeze({
96
+ LOW_POWER: 0,
97
+ BALANCED: 1,
98
+ LOW_LATENCY: 2,
99
+ OPPORTUNISTIC: -1
100
+ });
101
+
102
+ module.exports = {
103
+ BLE_SERVICE_UUID,
104
+ BLE_CHARACTERISTIC_TX,
105
+ BLE_CHARACTERISTIC_RX,
106
+ DEFAULT_MTU,
107
+ MAX_MTU,
108
+ POWER_MODE,
109
+ BLUETOOTH_STATE,
110
+ SCAN_MODE
111
+ };
@@ -0,0 +1,53 @@
1
+ /**
2
+ * @fileoverview Cryptographic constants
3
+ * @module constants/crypto
4
+ */
5
+
6
+ 'use strict';
7
+
8
+ /**
9
+ * Cryptographic configuration
10
+ * @constant {Object.<string, number|string>}
11
+ */
12
+ const CRYPTO_CONFIG = Object.freeze({
13
+ /** Key size in bytes (256 bits) */
14
+ KEY_SIZE: 32,
15
+ /** Nonce size in bytes (96 bits) */
16
+ NONCE_SIZE: 12,
17
+ /** Authentication tag size in bytes (128 bits) */
18
+ TAG_SIZE: 16,
19
+ /** Public key size in bytes (256 bits) */
20
+ PUBLIC_KEY_SIZE: 32,
21
+ /** Hash output size in bytes (256 bits) */
22
+ HASH_SIZE: 32,
23
+ /** HMAC block size in bytes */
24
+ HMAC_BLOCK_SIZE: 64,
25
+ /** Maximum nonce value before rekey */
26
+ MAX_NONCE: Number.MAX_SAFE_INTEGER
27
+ });
28
+
29
+ /**
30
+ * Noise Protocol name
31
+ * XX pattern with X25519, ChaChaPoly, and SHA256
32
+ * @constant {string}
33
+ */
34
+ const NOISE_PROTOCOL_NAME = 'Noise_XX_25519_ChaChaPoly_SHA256';
35
+
36
+ /**
37
+ * Noise handshake states
38
+ * @constant {Object.<string, string>}
39
+ */
40
+ const NOISE_HANDSHAKE_STATE = Object.freeze({
41
+ INITIAL: 'initial',
42
+ AWAITING_MESSAGE_1: 'awaitingMessage1',
43
+ AWAITING_MESSAGE_2: 'awaitingMessage2',
44
+ AWAITING_MESSAGE_3: 'awaitingMessage3',
45
+ COMPLETE: 'complete',
46
+ FAILED: 'failed'
47
+ });
48
+
49
+ module.exports = {
50
+ CRYPTO_CONFIG,
51
+ NOISE_PROTOCOL_NAME,
52
+ NOISE_HANDSHAKE_STATE
53
+ };