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,103 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * @fileoverview Cryptographic error class
5
+ * @module errors/CryptoError
6
+ */
7
+
8
+ const MeshError = require('./MeshError');
9
+ const { ERROR_MESSAGES } = require('../constants/errors');
10
+
11
+ /**
12
+ * Error class for cryptographic operation failures
13
+ * @class CryptoError
14
+ * @extends MeshError
15
+ */
16
+ class CryptoError extends MeshError {
17
+ /**
18
+ * Creates a new CryptoError
19
+ * @param {string} message - Human-readable error message
20
+ * @param {string} [code='E400'] - Error code (E4xx range)
21
+ * @param {Object|null} [details=null] - Additional error context
22
+ */
23
+ constructor(message, code = 'E400', details = null) {
24
+ super(message, code, details);
25
+ this.name = 'CryptoError';
26
+ }
27
+
28
+ /**
29
+ * Creates an error from an error code
30
+ * @param {string} code - Error code from ERROR_CODE constants
31
+ * @param {Object|null} [details=null] - Additional error context
32
+ * @returns {CryptoError} New CryptoError instance
33
+ */
34
+ static fromCode(code, details = null) {
35
+ const message = ERROR_MESSAGES[code] || ERROR_MESSAGES.E400;
36
+ return new CryptoError(message, code, details);
37
+ }
38
+
39
+ /**
40
+ * Creates a key generation error
41
+ * @param {Object|null} [details=null] - Additional error context
42
+ * @returns {CryptoError} New CryptoError instance
43
+ */
44
+ static keyGenerationFailed(details = null) {
45
+ return CryptoError.fromCode('E400', details);
46
+ }
47
+
48
+ /**
49
+ * Creates an encryption error
50
+ * @param {Object|null} [details=null] - Additional error context
51
+ * @returns {CryptoError} New CryptoError instance
52
+ */
53
+ static encryptionFailed(details = null) {
54
+ return CryptoError.fromCode('E401', details);
55
+ }
56
+
57
+ /**
58
+ * Creates a decryption error
59
+ * @param {Object|null} [details=null] - Additional error context
60
+ * @returns {CryptoError} New CryptoError instance
61
+ */
62
+ static decryptionFailed(details = null) {
63
+ return CryptoError.fromCode('E402', details);
64
+ }
65
+
66
+ /**
67
+ * Creates an invalid key error
68
+ * @param {Object|null} [details=null] - Additional error context
69
+ * @returns {CryptoError} New CryptoError instance
70
+ */
71
+ static invalidKey(details = null) {
72
+ return CryptoError.fromCode('E403', details);
73
+ }
74
+
75
+ /**
76
+ * Creates an invalid nonce error
77
+ * @param {Object|null} [details=null] - Additional error context
78
+ * @returns {CryptoError} New CryptoError instance
79
+ */
80
+ static invalidNonce(details = null) {
81
+ return CryptoError.fromCode('E404', details);
82
+ }
83
+
84
+ /**
85
+ * Creates an authentication tag mismatch error
86
+ * @param {Object|null} [details=null] - Additional error context
87
+ * @returns {CryptoError} New CryptoError instance
88
+ */
89
+ static authTagMismatch(details = null) {
90
+ return CryptoError.fromCode('E405', details);
91
+ }
92
+
93
+ /**
94
+ * Creates a nonce exhausted error
95
+ * @param {Object|null} [details=null] - Additional error context
96
+ * @returns {CryptoError} New CryptoError instance
97
+ */
98
+ static nonceExhausted(details = null) {
99
+ return CryptoError.fromCode('E406', details);
100
+ }
101
+ }
102
+
103
+ module.exports = CryptoError;
@@ -0,0 +1,122 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * @fileoverview Handshake error class
5
+ * @module errors/HandshakeError
6
+ */
7
+
8
+ const MeshError = require('./MeshError');
9
+ const { ERROR_MESSAGES } = require('../constants/errors');
10
+
11
+ /**
12
+ * Error class for Noise Protocol handshake failures
13
+ * @class HandshakeError
14
+ * @extends MeshError
15
+ */
16
+ class HandshakeError extends MeshError {
17
+ /**
18
+ * Creates a new HandshakeError
19
+ * @param {string} message - Human-readable error message
20
+ * @param {string} [code='E300'] - Error code (E3xx range)
21
+ * @param {string|null} [peerId=null] - ID of the peer involved
22
+ * @param {number|null} [step=null] - Handshake step where error occurred
23
+ * @param {Object|null} [details=null] - Additional error context
24
+ */
25
+ constructor(message, code = 'E300', peerId = null, step = null, details = null) {
26
+ super(message, code, details);
27
+ this.name = 'HandshakeError';
28
+
29
+ /**
30
+ * ID of the peer involved in the handshake
31
+ * @type {string|null}
32
+ */
33
+ this.peerId = peerId;
34
+
35
+ /**
36
+ * Handshake step where the error occurred (1, 2, or 3 for XX pattern)
37
+ * @type {number|null}
38
+ */
39
+ this.step = step;
40
+ }
41
+
42
+ /**
43
+ * Creates an error from an error code
44
+ * @param {string} code - Error code from ERROR_CODE constants
45
+ * @param {string|null} [peerId=null] - ID of the peer involved
46
+ * @param {number|null} [step=null] - Handshake step where error occurred
47
+ * @param {Object|null} [details=null] - Additional error context
48
+ * @returns {HandshakeError} New HandshakeError instance
49
+ */
50
+ static fromCode(code, peerId = null, step = null, details = null) {
51
+ const message = ERROR_MESSAGES[code] || ERROR_MESSAGES.E300;
52
+ return new HandshakeError(message, code, peerId, step, details);
53
+ }
54
+
55
+ /**
56
+ * Creates a handshake failed error
57
+ * @param {string|null} [peerId=null] - ID of the peer
58
+ * @param {number|null} [step=null] - Handshake step
59
+ * @param {Object|null} [details=null] - Additional error context
60
+ * @returns {HandshakeError} New HandshakeError instance
61
+ */
62
+ static handshakeFailed(peerId = null, step = null, details = null) {
63
+ return HandshakeError.fromCode('E300', peerId, step, details);
64
+ }
65
+
66
+ /**
67
+ * Creates a handshake timeout error
68
+ * @param {string|null} [peerId=null] - ID of the peer
69
+ * @param {number|null} [step=null] - Handshake step
70
+ * @param {Object|null} [details=null] - Additional error context
71
+ * @returns {HandshakeError} New HandshakeError instance
72
+ */
73
+ static handshakeTimeout(peerId = null, step = null, details = null) {
74
+ return HandshakeError.fromCode('E301', peerId, step, details);
75
+ }
76
+
77
+ /**
78
+ * Creates an invalid handshake state error
79
+ * @param {string|null} [peerId=null] - ID of the peer
80
+ * @param {number|null} [step=null] - Handshake step
81
+ * @param {Object|null} [details=null] - Additional error context
82
+ * @returns {HandshakeError} New HandshakeError instance
83
+ */
84
+ static invalidState(peerId = null, step = null, details = null) {
85
+ return HandshakeError.fromCode('E302', peerId, step, details);
86
+ }
87
+
88
+ /**
89
+ * Creates a decryption failed error during handshake
90
+ * @param {string|null} [peerId=null] - ID of the peer
91
+ * @param {number|null} [step=null] - Handshake step
92
+ * @param {Object|null} [details=null] - Additional error context
93
+ * @returns {HandshakeError} New HandshakeError instance
94
+ */
95
+ static decryptionFailed(peerId = null, step = null, details = null) {
96
+ return HandshakeError.fromCode('E303', peerId, step, details);
97
+ }
98
+
99
+ /**
100
+ * Creates an already in progress error
101
+ * @param {string|null} [peerId=null] - ID of the peer
102
+ * @param {Object|null} [details=null] - Additional error context
103
+ * @returns {HandshakeError} New HandshakeError instance
104
+ */
105
+ static alreadyInProgress(peerId = null, details = null) {
106
+ return HandshakeError.fromCode('E304', peerId, null, details);
107
+ }
108
+
109
+ /**
110
+ * Converts error to a JSON-serializable object
111
+ * @returns {Object} JSON representation of the error
112
+ */
113
+ toJSON() {
114
+ return {
115
+ ...super.toJSON(),
116
+ peerId: this.peerId,
117
+ step: this.step
118
+ };
119
+ }
120
+ }
121
+
122
+ module.exports = HandshakeError;
@@ -0,0 +1,100 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * @fileoverview Base error class for BLE Mesh Network library
5
+ * @module errors/MeshError
6
+ */
7
+
8
+ const { ERROR_CODE, ERROR_MESSAGES } = require('../constants/errors');
9
+
10
+ /**
11
+ * Base error class for all mesh-related errors
12
+ * @class MeshError
13
+ * @extends Error
14
+ */
15
+ class MeshError extends Error {
16
+ /**
17
+ * Creates a new MeshError
18
+ * @param {string} message - Human-readable error message
19
+ * @param {string} [code='E900'] - Error code from ERROR_CODE constants
20
+ * @param {Object|null} [details=null] - Additional error context
21
+ */
22
+ constructor(message, code = 'E900', details = null) {
23
+ super(message);
24
+
25
+ /**
26
+ * Error name
27
+ * @type {string}
28
+ */
29
+ this.name = this.constructor.name;
30
+
31
+ /**
32
+ * Error code
33
+ * @type {string}
34
+ */
35
+ this.code = code;
36
+
37
+ /**
38
+ * Additional error details
39
+ * @type {Object|null}
40
+ */
41
+ this.details = details;
42
+
43
+ /**
44
+ * Timestamp when error occurred
45
+ * @type {number}
46
+ */
47
+ this.timestamp = Date.now();
48
+
49
+ // Capture stack trace (V8 engines)
50
+ if (Error.captureStackTrace) {
51
+ Error.captureStackTrace(this, this.constructor);
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Creates an error from an error code
57
+ * @param {string} code - Error code from ERROR_CODE constants
58
+ * @param {Object|null} [details=null] - Additional error context
59
+ * @returns {MeshError} New MeshError instance
60
+ */
61
+ static fromCode(code, details = null) {
62
+ const message = ERROR_MESSAGES[code] || ERROR_MESSAGES.E900;
63
+ return new MeshError(message, code, details);
64
+ }
65
+
66
+ /**
67
+ * Gets the error type name from ERROR_CODE
68
+ * @returns {string} Error type name
69
+ */
70
+ getTypeName() {
71
+ return ERROR_CODE[this.code] || 'UNKNOWN_ERROR';
72
+ }
73
+
74
+ /**
75
+ * Converts error to a JSON-serializable object
76
+ * @returns {Object} JSON representation of the error
77
+ */
78
+ toJSON() {
79
+ return {
80
+ name: this.name,
81
+ message: this.message,
82
+ code: this.code,
83
+ typeName: this.getTypeName(),
84
+ details: this.details,
85
+ timestamp: this.timestamp,
86
+ stack: this.stack
87
+ };
88
+ }
89
+
90
+ /**
91
+ * Creates a string representation of the error
92
+ * @returns {string} String representation
93
+ */
94
+ toString() {
95
+ const typeName = this.getTypeName();
96
+ return `${this.name} [${this.code}:${typeName}]: ${this.message}`;
97
+ }
98
+ }
99
+
100
+ module.exports = MeshError;
@@ -0,0 +1,129 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * @fileoverview Message error class
5
+ * @module errors/MessageError
6
+ */
7
+
8
+ const MeshError = require('./MeshError');
9
+ const { ERROR_MESSAGES } = require('../constants/errors');
10
+
11
+ /**
12
+ * Error class for message-related failures
13
+ * @class MessageError
14
+ * @extends MeshError
15
+ */
16
+ class MessageError extends MeshError {
17
+ /**
18
+ * Creates a new MessageError
19
+ * @param {string} message - Human-readable error message
20
+ * @param {string} [code='E500'] - Error code (E5xx range)
21
+ * @param {string|null} [messageId=null] - ID of the message involved
22
+ * @param {Object|null} [details=null] - Additional error context
23
+ */
24
+ constructor(message, code = 'E500', messageId = null, details = null) {
25
+ super(message, code, details);
26
+ this.name = 'MessageError';
27
+
28
+ /**
29
+ * ID of the message involved in the error
30
+ * @type {string|null}
31
+ */
32
+ this.messageId = messageId;
33
+ }
34
+
35
+ /**
36
+ * Creates an error from an error code
37
+ * @param {string} code - Error code from ERROR_CODE constants
38
+ * @param {string|null} [messageId=null] - ID of the message involved
39
+ * @param {Object|null} [details=null] - Additional error context
40
+ * @returns {MessageError} New MessageError instance
41
+ */
42
+ static fromCode(code, messageId = null, details = null) {
43
+ const message = ERROR_MESSAGES[code] || ERROR_MESSAGES.E500;
44
+ return new MessageError(message, code, messageId, details);
45
+ }
46
+
47
+ /**
48
+ * Creates a message too large error
49
+ * @param {string|null} [messageId=null] - ID of the message
50
+ * @param {Object|null} [details=null] - Additional error context
51
+ * @returns {MessageError} New MessageError instance
52
+ */
53
+ static messageTooLarge(messageId = null, details = null) {
54
+ return MessageError.fromCode('E500', messageId, details);
55
+ }
56
+
57
+ /**
58
+ * Creates a message expired error
59
+ * @param {string|null} [messageId=null] - ID of the message
60
+ * @param {Object|null} [details=null] - Additional error context
61
+ * @returns {MessageError} New MessageError instance
62
+ */
63
+ static messageExpired(messageId = null, details = null) {
64
+ return MessageError.fromCode('E501', messageId, details);
65
+ }
66
+
67
+ /**
68
+ * Creates an invalid format error
69
+ * @param {string|null} [messageId=null] - ID of the message
70
+ * @param {Object|null} [details=null] - Additional error context
71
+ * @returns {MessageError} New MessageError instance
72
+ */
73
+ static invalidFormat(messageId = null, details = null) {
74
+ return MessageError.fromCode('E502', messageId, details);
75
+ }
76
+
77
+ /**
78
+ * Creates an invalid checksum error
79
+ * @param {string|null} [messageId=null] - ID of the message
80
+ * @param {Object|null} [details=null] - Additional error context
81
+ * @returns {MessageError} New MessageError instance
82
+ */
83
+ static invalidChecksum(messageId = null, details = null) {
84
+ return MessageError.fromCode('E503', messageId, details);
85
+ }
86
+
87
+ /**
88
+ * Creates a duplicate message error
89
+ * @param {string|null} [messageId=null] - ID of the message
90
+ * @param {Object|null} [details=null] - Additional error context
91
+ * @returns {MessageError} New MessageError instance
92
+ */
93
+ static duplicate(messageId = null, details = null) {
94
+ return MessageError.fromCode('E504', messageId, details);
95
+ }
96
+
97
+ /**
98
+ * Creates a max hops exceeded error
99
+ * @param {string|null} [messageId=null] - ID of the message
100
+ * @param {Object|null} [details=null] - Additional error context
101
+ * @returns {MessageError} New MessageError instance
102
+ */
103
+ static maxHopsExceeded(messageId = null, details = null) {
104
+ return MessageError.fromCode('E505', messageId, details);
105
+ }
106
+
107
+ /**
108
+ * Creates a send failed error
109
+ * @param {string|null} [messageId=null] - ID of the message
110
+ * @param {Object|null} [details=null] - Additional error context
111
+ * @returns {MessageError} New MessageError instance
112
+ */
113
+ static sendFailed(messageId = null, details = null) {
114
+ return MessageError.fromCode('E506', messageId, details);
115
+ }
116
+
117
+ /**
118
+ * Converts error to a JSON-serializable object
119
+ * @returns {Object} JSON representation of the error
120
+ */
121
+ toJSON() {
122
+ return {
123
+ ...super.toJSON(),
124
+ messageId: this.messageId
125
+ };
126
+ }
127
+ }
128
+
129
+ module.exports = MessageError;
@@ -0,0 +1,150 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * @fileoverview Validation error class
5
+ * @module errors/ValidationError
6
+ */
7
+
8
+ const MeshError = require('./MeshError');
9
+ const { ERROR_MESSAGES } = require('../constants/errors');
10
+
11
+ /**
12
+ * Error class for input validation failures
13
+ * @class ValidationError
14
+ * @extends MeshError
15
+ */
16
+ class ValidationError extends MeshError {
17
+ /**
18
+ * Creates a new ValidationError
19
+ * @param {string} message - Human-readable error message
20
+ * @param {string} [code='E800'] - Error code (E8xx range)
21
+ * @param {string|null} [field=null] - Name of the field that failed validation
22
+ * @param {*} [value=undefined] - The invalid value
23
+ * @param {Object|null} [details=null] - Additional error context
24
+ */
25
+ constructor(message, code = 'E800', field = null, value = undefined, details = null) {
26
+ super(message, code, details);
27
+ this.name = 'ValidationError';
28
+
29
+ /**
30
+ * Name of the field that failed validation
31
+ * @type {string|null}
32
+ */
33
+ this.field = field;
34
+
35
+ /**
36
+ * The invalid value (sanitized to prevent secret exposure)
37
+ * @type {string|undefined}
38
+ */
39
+ this.value = value !== undefined ? ValidationError.sanitizeValue(value) : undefined;
40
+ }
41
+
42
+ /**
43
+ * Sanitizes a value for safe inclusion in error output
44
+ * @param {*} value - The value to sanitize
45
+ * @returns {string} Sanitized string representation
46
+ * @private
47
+ */
48
+ static sanitizeValue(value) {
49
+ if (value === null) { return 'null'; }
50
+ if (value === undefined) { return 'undefined'; }
51
+
52
+ const type = typeof value;
53
+
54
+ if (type === 'string') {
55
+ // Truncate long strings and mask potentially sensitive data
56
+ if (value.length > 50) {
57
+ return `"${value.substring(0, 47)}..." (${value.length} chars)`;
58
+ }
59
+ return `"${value}"`;
60
+ }
61
+
62
+ if (type === 'number' || type === 'boolean') {
63
+ return String(value);
64
+ }
65
+
66
+ if (value instanceof Uint8Array) {
67
+ return `Uint8Array(${value.length})`;
68
+ }
69
+
70
+ if (Array.isArray(value)) {
71
+ return `Array(${value.length})`;
72
+ }
73
+
74
+ if (type === 'object') {
75
+ return `Object(${Object.keys(value).length} keys)`;
76
+ }
77
+
78
+ return `[${type}]`;
79
+ }
80
+
81
+ /**
82
+ * Creates an error from an error code
83
+ * @param {string} code - Error code from ERROR_CODE constants
84
+ * @param {string|null} [field=null] - Name of the field
85
+ * @param {*} [value=undefined] - The invalid value
86
+ * @param {Object|null} [details=null] - Additional error context
87
+ * @returns {ValidationError} New ValidationError instance
88
+ */
89
+ static fromCode(code, field = null, value = undefined, details = null) {
90
+ const message = ERROR_MESSAGES[code] || ERROR_MESSAGES.E800;
91
+ return new ValidationError(message, code, field, value, details);
92
+ }
93
+
94
+ /**
95
+ * Creates an invalid argument error
96
+ * @param {string} field - Name of the field
97
+ * @param {*} [value=undefined] - The invalid value
98
+ * @param {Object|null} [details=null] - Additional error context
99
+ * @returns {ValidationError} New ValidationError instance
100
+ */
101
+ static invalidArgument(field, value = undefined, details = null) {
102
+ return ValidationError.fromCode('E801', field, value, details);
103
+ }
104
+
105
+ /**
106
+ * Creates a missing argument error
107
+ * @param {string} field - Name of the missing field
108
+ * @param {Object|null} [details=null] - Additional error context
109
+ * @returns {ValidationError} New ValidationError instance
110
+ */
111
+ static missingArgument(field, details = null) {
112
+ return ValidationError.fromCode('E802', field, undefined, details);
113
+ }
114
+
115
+ /**
116
+ * Creates an invalid type error
117
+ * @param {string} field - Name of the field
118
+ * @param {*} value - The invalid value
119
+ * @param {string} expectedType - Expected type description
120
+ * @returns {ValidationError} New ValidationError instance
121
+ */
122
+ static invalidType(field, value, expectedType) {
123
+ return ValidationError.fromCode('E803', field, value, { expectedType });
124
+ }
125
+
126
+ /**
127
+ * Creates an out of range error
128
+ * @param {string} field - Name of the field
129
+ * @param {*} value - The invalid value
130
+ * @param {Object} range - Expected range { min, max }
131
+ * @returns {ValidationError} New ValidationError instance
132
+ */
133
+ static outOfRange(field, value, range) {
134
+ return ValidationError.fromCode('E804', field, value, { range });
135
+ }
136
+
137
+ /**
138
+ * Converts error to a JSON-serializable object
139
+ * @returns {Object} JSON representation of the error
140
+ */
141
+ toJSON() {
142
+ return {
143
+ ...super.toJSON(),
144
+ field: this.field,
145
+ value: this.value
146
+ };
147
+ }
148
+ }
149
+
150
+ module.exports = ValidationError;
@@ -0,0 +1,24 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * @fileoverview Error classes for BLE Mesh Network library
5
+ * @module errors
6
+ */
7
+
8
+ const MeshError = require('./MeshError');
9
+ const CryptoError = require('./CryptoError');
10
+ const ConnectionError = require('./ConnectionError');
11
+ const HandshakeError = require('./HandshakeError');
12
+ const MessageError = require('./MessageError');
13
+ const ValidationError = require('./ValidationError');
14
+ const AudioError = require('./AudioError');
15
+
16
+ module.exports = {
17
+ MeshError,
18
+ CryptoError,
19
+ ConnectionError,
20
+ HandshakeError,
21
+ MessageError,
22
+ ValidationError,
23
+ AudioError
24
+ };