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,328 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * @fileoverview React Native BLE adapter using react-native-ble-plx
5
+ * @module transport/RNBLEAdapter
6
+ */
7
+
8
+ const BLEAdapter = require('./BLEAdapter');
9
+
10
+ /**
11
+ * React Native BLE adapter implementation.
12
+ * Wraps react-native-ble-plx for BLE communication in React Native apps.
13
+ *
14
+ * NOTE: react-native-ble-plx is an optional peer dependency.
15
+ * Install it separately: npm install react-native-ble-plx
16
+ *
17
+ * @class RNBLEAdapter
18
+ * @extends BLEAdapter
19
+ */
20
+ class RNBLEAdapter extends BLEAdapter {
21
+ /**
22
+ * Creates a new RNBLEAdapter instance
23
+ * @param {Object} [options={}] - Adapter options
24
+ * @param {Object} [options.BleManager] - BleManager class from react-native-ble-plx
25
+ */
26
+ constructor(options = {}) {
27
+ super(options);
28
+
29
+ /**
30
+ * BleManager instance
31
+ * @type {Object|null}
32
+ * @private
33
+ */
34
+ this._manager = null;
35
+
36
+ /**
37
+ * BleManager class reference
38
+ * @type {Function|null}
39
+ * @private
40
+ */
41
+ this._BleManager = options.BleManager || null;
42
+
43
+ /**
44
+ * Connected devices map
45
+ * @type {Map<string, Object>}
46
+ * @private
47
+ */
48
+ this._devices = new Map();
49
+
50
+ /**
51
+ * Subscription handlers map
52
+ * @type {Map<string, Object>}
53
+ * @private
54
+ */
55
+ this._subscriptions = new Map();
56
+
57
+ /**
58
+ * Scan subscription reference
59
+ * @type {Object|null}
60
+ * @private
61
+ */
62
+ this._scanSubscription = null;
63
+
64
+ /**
65
+ * State subscription reference
66
+ * @type {Object|null}
67
+ * @private
68
+ */
69
+ this._stateSubscription = null;
70
+ }
71
+
72
+ /**
73
+ * Initializes the BLE manager
74
+ * @returns {Promise<void>}
75
+ * @throws {Error} If react-native-ble-plx is not available
76
+ */
77
+ async initialize() {
78
+ if (this._initialized) {
79
+ return;
80
+ }
81
+
82
+ // Try to load BleManager if not provided
83
+ if (!this._BleManager) {
84
+ try {
85
+ const blePlx = require('react-native-ble-plx');
86
+ this._BleManager = blePlx.BleManager;
87
+ } catch (error) {
88
+ throw new Error(
89
+ 'react-native-ble-plx is required. Install with: npm install react-native-ble-plx'
90
+ );
91
+ }
92
+ }
93
+
94
+ this._manager = new this._BleManager();
95
+
96
+ // Subscribe to state changes
97
+ this._stateSubscription = this._manager.onStateChange((state) => {
98
+ this._notifyStateChange(this._mapState(state));
99
+ }, true);
100
+
101
+ this._initialized = true;
102
+ }
103
+
104
+ /**
105
+ * Destroys the BLE manager and releases resources
106
+ * @returns {Promise<void>}
107
+ */
108
+ async destroy() {
109
+ if (!this._initialized) {
110
+ return;
111
+ }
112
+
113
+ // Cancel all subscriptions
114
+ for (const subscription of this._subscriptions.values()) {
115
+ subscription.remove();
116
+ }
117
+ this._subscriptions.clear();
118
+
119
+ // Stop scanning
120
+ this.stopScan();
121
+
122
+ // Remove state subscription
123
+ if (this._stateSubscription) {
124
+ this._stateSubscription.remove();
125
+ this._stateSubscription = null;
126
+ }
127
+
128
+ // Disconnect all devices
129
+ for (const deviceId of this._devices.keys()) {
130
+ await this.disconnect(deviceId);
131
+ }
132
+
133
+ // Destroy manager
134
+ if (this._manager) {
135
+ this._manager.destroy();
136
+ this._manager = null;
137
+ }
138
+
139
+ this._initialized = false;
140
+ }
141
+
142
+ /**
143
+ * Starts scanning for BLE devices
144
+ * @param {string[]} serviceUUIDs - Service UUIDs to filter by
145
+ * @param {Function} callback - Callback for discovered devices
146
+ * @returns {Promise<void>}
147
+ */
148
+ async startScan(serviceUUIDs, callback) {
149
+ this._ensureInitialized();
150
+
151
+ this._manager.startDeviceScan(serviceUUIDs, null, (error, device) => {
152
+ if (error) {
153
+ return;
154
+ }
155
+ if (device) {
156
+ callback({
157
+ id: device.id,
158
+ name: device.name || device.localName,
159
+ rssi: device.rssi
160
+ });
161
+ }
162
+ });
163
+ }
164
+
165
+ /**
166
+ * Stops scanning for BLE devices
167
+ */
168
+ stopScan() {
169
+ if (this._manager) {
170
+ this._manager.stopDeviceScan();
171
+ }
172
+ }
173
+
174
+ /**
175
+ * Connects to a BLE device
176
+ * @param {string} deviceId - Device ID to connect to
177
+ * @returns {Promise<Object>} Connected device info
178
+ */
179
+ async connect(deviceId) {
180
+ this._ensureInitialized();
181
+
182
+ const device = await this._manager.connectToDevice(deviceId);
183
+ await device.discoverAllServicesAndCharacteristics();
184
+
185
+ this._devices.set(deviceId, device);
186
+
187
+ // Monitor disconnection
188
+ device.onDisconnected(() => {
189
+ this._devices.delete(deviceId);
190
+ });
191
+
192
+ return {
193
+ id: device.id,
194
+ name: device.name,
195
+ rssi: device.rssi
196
+ };
197
+ }
198
+
199
+ /**
200
+ * Disconnects from a BLE device
201
+ * @param {string} deviceId - Device ID to disconnect from
202
+ * @returns {Promise<void>}
203
+ */
204
+ async disconnect(deviceId) {
205
+ const device = this._devices.get(deviceId);
206
+ if (device) {
207
+ await this._manager.cancelDeviceConnection(deviceId);
208
+ this._devices.delete(deviceId);
209
+ }
210
+ }
211
+
212
+ /**
213
+ * Writes data to a characteristic
214
+ * @param {string} deviceId - Target device ID
215
+ * @param {string} serviceUUID - Service UUID
216
+ * @param {string} charUUID - Characteristic UUID
217
+ * @param {Uint8Array} data - Data to write
218
+ * @returns {Promise<void>}
219
+ */
220
+ async write(deviceId, serviceUUID, charUUID, data) {
221
+ this._ensureInitialized();
222
+
223
+ const base64Data = this._uint8ArrayToBase64(data);
224
+ await this._manager.writeCharacteristicWithResponseForDevice(
225
+ deviceId,
226
+ serviceUUID,
227
+ charUUID,
228
+ base64Data
229
+ );
230
+ }
231
+
232
+ /**
233
+ * Subscribes to characteristic notifications
234
+ * @param {string} deviceId - Target device ID
235
+ * @param {string} serviceUUID - Service UUID
236
+ * @param {string} charUUID - Characteristic UUID
237
+ * @param {Function} callback - Notification callback
238
+ * @returns {Promise<void>}
239
+ */
240
+ async subscribe(deviceId, serviceUUID, charUUID, callback) {
241
+ this._ensureInitialized();
242
+
243
+ const key = `${deviceId}:${serviceUUID}:${charUUID}`;
244
+ const subscription = this._manager.monitorCharacteristicForDevice(
245
+ deviceId,
246
+ serviceUUID,
247
+ charUUID,
248
+ (error, characteristic) => {
249
+ if (!error && characteristic) {
250
+ const data = this._base64ToUint8Array(characteristic.value);
251
+ callback(data);
252
+ }
253
+ }
254
+ );
255
+
256
+ this._subscriptions.set(key, subscription);
257
+ }
258
+
259
+ /**
260
+ * Gets the current Bluetooth state
261
+ * @returns {Promise<string>} Bluetooth state
262
+ */
263
+ async getState() {
264
+ this._ensureInitialized();
265
+ const state = await this._manager.state();
266
+ return this._mapState(state);
267
+ }
268
+
269
+ /**
270
+ * Maps react-native-ble-plx state to BLEAdapter state
271
+ * @param {string} state - RN BLE state
272
+ * @returns {string} Mapped state
273
+ * @private
274
+ */
275
+ _mapState(state) {
276
+ const stateMap = {
277
+ Unknown: BLEAdapter.STATE.UNKNOWN,
278
+ Resetting: BLEAdapter.STATE.RESETTING,
279
+ Unsupported: BLEAdapter.STATE.UNSUPPORTED,
280
+ Unauthorized: BLEAdapter.STATE.UNAUTHORIZED,
281
+ PoweredOff: BLEAdapter.STATE.POWERED_OFF,
282
+ PoweredOn: BLEAdapter.STATE.POWERED_ON
283
+ };
284
+ return stateMap[state] || BLEAdapter.STATE.UNKNOWN;
285
+ }
286
+
287
+ /**
288
+ * Ensures the adapter is initialized
289
+ * @throws {Error} If not initialized
290
+ * @private
291
+ */
292
+ _ensureInitialized() {
293
+ if (!this._initialized) {
294
+ throw new Error('RNBLEAdapter is not initialized');
295
+ }
296
+ }
297
+
298
+ /**
299
+ * Converts Uint8Array to Base64 string
300
+ * @param {Uint8Array} bytes - Bytes to convert
301
+ * @returns {string} Base64 string
302
+ * @private
303
+ */
304
+ _uint8ArrayToBase64(bytes) {
305
+ let binary = '';
306
+ for (let i = 0; i < bytes.length; i++) {
307
+ binary += String.fromCharCode(bytes[i]);
308
+ }
309
+ return btoa(binary);
310
+ }
311
+
312
+ /**
313
+ * Converts Base64 string to Uint8Array
314
+ * @param {string} base64 - Base64 string
315
+ * @returns {Uint8Array} Byte array
316
+ * @private
317
+ */
318
+ _base64ToUint8Array(base64) {
319
+ const binary = atob(base64);
320
+ const bytes = new Uint8Array(binary.length);
321
+ for (let i = 0; i < binary.length; i++) {
322
+ bytes[i] = binary.charCodeAt(i);
323
+ }
324
+ return bytes;
325
+ }
326
+ }
327
+
328
+ module.exports = RNBLEAdapter;
@@ -0,0 +1,188 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * @fileoverview Abstract transport interface for BLE Mesh Network
5
+ * @module transport/Transport
6
+ */
7
+
8
+ const EventEmitter = require('events');
9
+
10
+ /**
11
+ * Transport states
12
+ * @constant {Object.<string, string>}
13
+ */
14
+ const TRANSPORT_STATE = Object.freeze({
15
+ STOPPED: 'stopped',
16
+ STARTING: 'starting',
17
+ RUNNING: 'running',
18
+ STOPPING: 'stopping',
19
+ ERROR: 'error'
20
+ });
21
+
22
+ /**
23
+ * Abstract transport interface for mesh network communication.
24
+ * Extend this class to implement specific transport mechanisms (BLE, WiFi, etc.)
25
+ *
26
+ * @abstract
27
+ * @class Transport
28
+ * @extends EventEmitter
29
+ *
30
+ * @fires Transport#message - When a message is received from a peer
31
+ * @fires Transport#peerConnected - When a peer connects
32
+ * @fires Transport#peerDisconnected - When a peer disconnects
33
+ * @fires Transport#error - When an error occurs
34
+ * @fires Transport#stateChanged - When transport state changes
35
+ */
36
+ class Transport extends EventEmitter {
37
+ /**
38
+ * Creates a new Transport instance
39
+ * @param {Object} [options={}] - Transport options
40
+ * @param {number} [options.maxPeers=8] - Maximum number of simultaneous peers
41
+ */
42
+ constructor(options = {}) {
43
+ super();
44
+
45
+ /**
46
+ * Transport options
47
+ * @type {Object}
48
+ * @protected
49
+ */
50
+ this._options = {
51
+ maxPeers: 8,
52
+ ...options
53
+ };
54
+
55
+ /**
56
+ * Current transport state
57
+ * @type {string}
58
+ * @protected
59
+ */
60
+ this._state = TRANSPORT_STATE.STOPPED;
61
+
62
+ /**
63
+ * Connected peers map (peerId -> connection info)
64
+ * @type {Map<string, Object>}
65
+ * @protected
66
+ */
67
+ this._peers = new Map();
68
+ }
69
+
70
+ /**
71
+ * Gets the current transport state
72
+ * @returns {string} Current state
73
+ */
74
+ get state() {
75
+ return this._state;
76
+ }
77
+
78
+ /**
79
+ * Checks if transport is running
80
+ * @returns {boolean} True if running
81
+ */
82
+ get isRunning() {
83
+ return this._state === TRANSPORT_STATE.RUNNING;
84
+ }
85
+
86
+ /**
87
+ * Sets the transport state and emits state change event
88
+ * @param {string} newState - New state
89
+ * @protected
90
+ */
91
+ _setState(newState) {
92
+ const oldState = this._state;
93
+ if (oldState !== newState) {
94
+ this._state = newState;
95
+ this.emit('stateChanged', { oldState, newState });
96
+ }
97
+ }
98
+
99
+ /**
100
+ * Starts the transport layer
101
+ * @abstract
102
+ * @returns {Promise<void>}
103
+ * @throws {Error} If not implemented by subclass
104
+ */
105
+ async start() {
106
+ throw new Error('Transport.start() must be implemented by subclass');
107
+ }
108
+
109
+ /**
110
+ * Stops the transport layer
111
+ * @abstract
112
+ * @returns {Promise<void>}
113
+ * @throws {Error} If not implemented by subclass
114
+ */
115
+ async stop() {
116
+ throw new Error('Transport.stop() must be implemented by subclass');
117
+ }
118
+
119
+ /**
120
+ * Sends data to a specific peer
121
+ * @abstract
122
+ * @param {string} peerId - Target peer ID
123
+ * @param {Uint8Array} data - Data to send
124
+ * @returns {Promise<void>}
125
+ * @throws {Error} If not implemented by subclass
126
+ */
127
+ async send(_peerId, _data) {
128
+ throw new Error('Transport.send() must be implemented by subclass');
129
+ }
130
+
131
+ /**
132
+ * Broadcasts data to all connected peers
133
+ * @abstract
134
+ * @param {Uint8Array} data - Data to broadcast
135
+ * @returns {Promise<string[]>} Array of peer IDs that received the broadcast
136
+ * @throws {Error} If not implemented by subclass
137
+ */
138
+ async broadcast(_data) {
139
+ throw new Error('Transport.broadcast() must be implemented by subclass');
140
+ }
141
+
142
+ /**
143
+ * Gets list of connected peer IDs
144
+ * @returns {string[]} Array of connected peer IDs
145
+ */
146
+ getConnectedPeers() {
147
+ return Array.from(this._peers.keys());
148
+ }
149
+
150
+ /**
151
+ * Checks if a peer is connected
152
+ * @param {string} peerId - Peer ID to check
153
+ * @returns {boolean} True if peer is connected
154
+ */
155
+ isConnected(peerId) {
156
+ return this._peers.has(peerId);
157
+ }
158
+
159
+ /**
160
+ * Gets connection info for a peer
161
+ * @param {string} peerId - Peer ID
162
+ * @returns {Object|undefined} Connection info or undefined
163
+ */
164
+ getPeerInfo(peerId) {
165
+ return this._peers.get(peerId);
166
+ }
167
+
168
+ /**
169
+ * Gets the number of connected peers
170
+ * @returns {number} Number of connected peers
171
+ */
172
+ getConnectionCount() {
173
+ return this._peers.size;
174
+ }
175
+
176
+ /**
177
+ * Checks if more peers can connect
178
+ * @returns {boolean} True if under max peer limit
179
+ */
180
+ canAcceptPeer() {
181
+ return this._peers.size < this._options.maxPeers;
182
+ }
183
+ }
184
+
185
+ // Export state constants with the class
186
+ Transport.STATE = TRANSPORT_STATE;
187
+
188
+ module.exports = Transport;
@@ -0,0 +1,177 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * @fileoverview Abstract BLE adapter interface
5
+ * @module transport/adapters/BLEAdapter
6
+ */
7
+
8
+ const { BLUETOOTH_STATE } = require('../../constants');
9
+
10
+ /**
11
+ * Abstract BLE adapter interface.
12
+ * Provides a unified API for different BLE implementations.
13
+ *
14
+ * @abstract
15
+ * @class BLEAdapter
16
+ */
17
+ class BLEAdapter {
18
+ /**
19
+ * Creates a new BLEAdapter instance
20
+ * @param {Object} [options={}] - Adapter options
21
+ */
22
+ constructor(options = {}) {
23
+ /**
24
+ * Adapter options
25
+ * @type {Object}
26
+ * @protected
27
+ */
28
+ this._options = options;
29
+
30
+ /**
31
+ * State change callback
32
+ * @type {Function|null}
33
+ * @protected
34
+ */
35
+ this._stateChangeCallback = null;
36
+
37
+ /**
38
+ * Whether adapter is initialized
39
+ * @type {boolean}
40
+ * @protected
41
+ */
42
+ this._initialized = false;
43
+ }
44
+
45
+ /**
46
+ * Gets whether the adapter is initialized
47
+ * @returns {boolean} True if initialized
48
+ */
49
+ get isInitialized() {
50
+ return this._initialized;
51
+ }
52
+
53
+ /**
54
+ * Initializes the BLE adapter
55
+ * @abstract
56
+ * @returns {Promise<void>}
57
+ * @throws {Error} If not implemented by subclass
58
+ */
59
+ async initialize() {
60
+ throw new Error('BLEAdapter.initialize() must be implemented by subclass');
61
+ }
62
+
63
+ /**
64
+ * Destroys the BLE adapter and releases resources
65
+ * @abstract
66
+ * @returns {Promise<void>}
67
+ * @throws {Error} If not implemented by subclass
68
+ */
69
+ async destroy() {
70
+ throw new Error('BLEAdapter.destroy() must be implemented by subclass');
71
+ }
72
+
73
+ /**
74
+ * Starts scanning for BLE devices
75
+ * @abstract
76
+ * @param {string[]} serviceUUIDs - Service UUIDs to filter by
77
+ * @param {Function} callback - Callback for discovered devices
78
+ * @returns {Promise<void>}
79
+ * @throws {Error} If not implemented by subclass
80
+ */
81
+ async startScan(_serviceUUIDs, _callback) {
82
+ throw new Error('BLEAdapter.startScan() must be implemented by subclass');
83
+ }
84
+
85
+ /**
86
+ * Stops scanning for BLE devices
87
+ * @abstract
88
+ * @throws {Error} If not implemented by subclass
89
+ */
90
+ stopScan() {
91
+ throw new Error('BLEAdapter.stopScan() must be implemented by subclass');
92
+ }
93
+
94
+ /**
95
+ * Connects to a BLE device
96
+ * @abstract
97
+ * @param {string} deviceId - Device ID to connect to
98
+ * @returns {Promise<Object>} Connected device info
99
+ * @throws {Error} If not implemented by subclass
100
+ */
101
+ async connect(_deviceId) {
102
+ throw new Error('BLEAdapter.connect() must be implemented by subclass');
103
+ }
104
+
105
+ /**
106
+ * Disconnects from a BLE device
107
+ * @abstract
108
+ * @param {string} deviceId - Device ID to disconnect from
109
+ * @returns {Promise<void>}
110
+ * @throws {Error} If not implemented by subclass
111
+ */
112
+ async disconnect(_deviceId) {
113
+ throw new Error('BLEAdapter.disconnect() must be implemented by subclass');
114
+ }
115
+
116
+ /**
117
+ * Writes data to a characteristic
118
+ * @abstract
119
+ * @param {string} deviceId - Target device ID
120
+ * @param {string} serviceUUID - Service UUID
121
+ * @param {string} charUUID - Characteristic UUID
122
+ * @param {Uint8Array} data - Data to write
123
+ * @returns {Promise<void>}
124
+ * @throws {Error} If not implemented by subclass
125
+ */
126
+ async write(_deviceId, _serviceUUID, _charUUID, _data) {
127
+ throw new Error('BLEAdapter.write() must be implemented by subclass');
128
+ }
129
+
130
+ /**
131
+ * Subscribes to characteristic notifications
132
+ * @abstract
133
+ * @param {string} deviceId - Target device ID
134
+ * @param {string} serviceUUID - Service UUID
135
+ * @param {string} charUUID - Characteristic UUID
136
+ * @param {Function} callback - Notification callback
137
+ * @returns {Promise<void>}
138
+ * @throws {Error} If not implemented by subclass
139
+ */
140
+ async subscribe(_deviceId, _serviceUUID, _charUUID, _callback) {
141
+ throw new Error('BLEAdapter.subscribe() must be implemented by subclass');
142
+ }
143
+
144
+ /**
145
+ * Gets the current Bluetooth state
146
+ * @abstract
147
+ * @returns {Promise<string>} Bluetooth state
148
+ * @throws {Error} If not implemented by subclass
149
+ */
150
+ async getState() {
151
+ throw new Error('BLEAdapter.getState() must be implemented by subclass');
152
+ }
153
+
154
+ /**
155
+ * Registers a callback for Bluetooth state changes
156
+ * @param {Function} callback - State change callback
157
+ */
158
+ onStateChange(callback) {
159
+ this._stateChangeCallback = callback;
160
+ }
161
+
162
+ /**
163
+ * Notifies listeners of state change
164
+ * @param {string} state - New Bluetooth state
165
+ * @protected
166
+ */
167
+ _notifyStateChange(state) {
168
+ if (this._stateChangeCallback) {
169
+ this._stateChangeCallback(state);
170
+ }
171
+ }
172
+ }
173
+
174
+ // Export state constants with the class
175
+ BLEAdapter.STATE = BLUETOOTH_STATE;
176
+
177
+ module.exports = BLEAdapter;