react-native-ble-mesh 1.1.1 → 2.0.0

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 (65) hide show
  1. package/README.md +288 -172
  2. package/docs/IOS-BACKGROUND-BLE.md +231 -0
  3. package/docs/OPTIMIZATION.md +70 -0
  4. package/docs/SPEC-v2.1.md +308 -0
  5. package/package.json +1 -1
  6. package/src/MeshNetwork.js +659 -465
  7. package/src/constants/index.js +1 -0
  8. package/src/crypto/AutoCrypto.js +79 -0
  9. package/src/crypto/CryptoProvider.js +99 -0
  10. package/src/crypto/index.js +15 -63
  11. package/src/crypto/providers/ExpoCryptoProvider.js +125 -0
  12. package/src/crypto/providers/QuickCryptoProvider.js +134 -0
  13. package/src/crypto/providers/TweetNaClProvider.js +124 -0
  14. package/src/crypto/providers/index.js +11 -0
  15. package/src/errors/MeshError.js +2 -1
  16. package/src/expo/withBLEMesh.js +102 -0
  17. package/src/hooks/useMesh.js +30 -9
  18. package/src/hooks/useMessages.js +2 -0
  19. package/src/index.js +23 -8
  20. package/src/mesh/dedup/DedupManager.js +36 -10
  21. package/src/mesh/fragment/Assembler.js +5 -0
  22. package/src/mesh/index.js +1 -1
  23. package/src/mesh/monitor/ConnectionQuality.js +408 -0
  24. package/src/mesh/monitor/NetworkMonitor.js +327 -316
  25. package/src/mesh/monitor/index.js +7 -3
  26. package/src/mesh/peer/PeerManager.js +6 -1
  27. package/src/mesh/router/MessageRouter.js +26 -15
  28. package/src/mesh/router/RouteTable.js +7 -1
  29. package/src/mesh/store/StoreAndForwardManager.js +295 -297
  30. package/src/mesh/store/index.js +1 -1
  31. package/src/service/BatteryOptimizer.js +282 -278
  32. package/src/service/EmergencyManager.js +224 -214
  33. package/src/service/HandshakeManager.js +167 -13
  34. package/src/service/MeshService.js +72 -6
  35. package/src/service/SessionManager.js +77 -2
  36. package/src/service/audio/AudioManager.js +8 -2
  37. package/src/service/file/FileAssembler.js +106 -0
  38. package/src/service/file/FileChunker.js +79 -0
  39. package/src/service/file/FileManager.js +307 -0
  40. package/src/service/file/FileMessage.js +122 -0
  41. package/src/service/file/index.js +15 -0
  42. package/src/service/text/broadcast/BroadcastManager.js +16 -0
  43. package/src/transport/BLETransport.js +131 -9
  44. package/src/transport/MockTransport.js +1 -1
  45. package/src/transport/MultiTransport.js +305 -0
  46. package/src/transport/WiFiDirectTransport.js +295 -0
  47. package/src/transport/adapters/NodeBLEAdapter.js +34 -0
  48. package/src/transport/adapters/RNBLEAdapter.js +56 -1
  49. package/src/transport/index.js +6 -0
  50. package/src/utils/compression.js +291 -291
  51. package/src/crypto/aead.js +0 -189
  52. package/src/crypto/chacha20.js +0 -181
  53. package/src/crypto/hkdf.js +0 -187
  54. package/src/crypto/hmac.js +0 -143
  55. package/src/crypto/keys/KeyManager.js +0 -271
  56. package/src/crypto/keys/KeyPair.js +0 -216
  57. package/src/crypto/keys/SecureStorage.js +0 -219
  58. package/src/crypto/keys/index.js +0 -32
  59. package/src/crypto/noise/handshake.js +0 -410
  60. package/src/crypto/noise/index.js +0 -27
  61. package/src/crypto/noise/session.js +0 -253
  62. package/src/crypto/noise/state.js +0 -268
  63. package/src/crypto/poly1305.js +0 -113
  64. package/src/crypto/sha256.js +0 -240
  65. package/src/crypto/x25519.js +0 -154
@@ -40,6 +40,13 @@ class RNBLEAdapter extends BLEAdapter {
40
40
  */
41
41
  this._BleManager = options.BleManager || null;
42
42
 
43
+ /**
44
+ * iOS state restoration identifier
45
+ * @type {string|null}
46
+ * @private
47
+ */
48
+ this._restoreIdentifier = options.restoreIdentifier || null;
49
+
43
50
  /**
44
51
  * Connected devices map
45
52
  * @type {Map<string, Object>}
@@ -67,6 +74,13 @@ class RNBLEAdapter extends BLEAdapter {
67
74
  * @private
68
75
  */
69
76
  this._stateSubscription = null;
77
+
78
+ /**
79
+ * Disconnect callback
80
+ * @type {Function|null}
81
+ * @private
82
+ */
83
+ this._disconnectCallback = null;
70
84
  }
71
85
 
72
86
  /**
@@ -91,7 +105,19 @@ class RNBLEAdapter extends BLEAdapter {
91
105
  }
92
106
  }
93
107
 
94
- this._manager = new this._BleManager();
108
+ const managerOptions = {};
109
+ if (this._restoreIdentifier) {
110
+ managerOptions.restoreStateIdentifier = this._restoreIdentifier;
111
+ managerOptions.restoreStateFunction = (restoredState) => {
112
+ // Re-populate devices from restored state
113
+ if (restoredState && restoredState.connectedPeripherals) {
114
+ for (const peripheral of restoredState.connectedPeripherals) {
115
+ this._devices.set(peripheral.id, peripheral);
116
+ }
117
+ }
118
+ };
119
+ }
120
+ this._manager = new this._BleManager(managerOptions);
95
121
 
96
122
  // Subscribe to state changes
97
123
  this._stateSubscription = this._manager.onStateChange((state) => {
@@ -187,6 +213,19 @@ class RNBLEAdapter extends BLEAdapter {
187
213
  // Monitor disconnection
188
214
  device.onDisconnected(() => {
189
215
  this._devices.delete(deviceId);
216
+
217
+ // Clean up subscriptions for this device
218
+ for (const [key, subscription] of this._subscriptions.entries()) {
219
+ if (key.startsWith(`${deviceId}:`)) {
220
+ subscription.remove();
221
+ this._subscriptions.delete(key);
222
+ }
223
+ }
224
+
225
+ // Notify transport
226
+ if (this._disconnectCallback) {
227
+ this._disconnectCallback(deviceId);
228
+ }
190
229
  });
191
230
 
192
231
  return {
@@ -202,6 +241,14 @@ class RNBLEAdapter extends BLEAdapter {
202
241
  * @returns {Promise<void>}
203
242
  */
204
243
  async disconnect(deviceId) {
244
+ // Clean up subscriptions first
245
+ for (const [key, subscription] of this._subscriptions.entries()) {
246
+ if (key.startsWith(`${deviceId}:`)) {
247
+ subscription.remove();
248
+ this._subscriptions.delete(key);
249
+ }
250
+ }
251
+
205
252
  const device = this._devices.get(deviceId);
206
253
  if (device) {
207
254
  await this._manager.cancelDeviceConnection(deviceId);
@@ -284,6 +331,14 @@ class RNBLEAdapter extends BLEAdapter {
284
331
  return stateMap[state] || BLEAdapter.STATE.UNKNOWN;
285
332
  }
286
333
 
334
+ /**
335
+ * Registers a callback for device disconnection events
336
+ * @param {Function} callback - Callback function receiving peerId
337
+ */
338
+ onDeviceDisconnected(callback) {
339
+ this._disconnectCallback = callback;
340
+ }
341
+
287
342
  /**
288
343
  * Ensures the adapter is initialized
289
344
  * @throws {Error} If not initialized
@@ -8,6 +8,8 @@
8
8
  const Transport = require('./Transport');
9
9
  const MockTransport = require('./MockTransport');
10
10
  const BLETransport = require('./BLETransport');
11
+ const { WiFiDirectTransport, WIFI_DIRECT_STATE } = require('./WiFiDirectTransport');
12
+ const { MultiTransport, STRATEGY: MULTI_TRANSPORT_STRATEGY } = require('./MultiTransport');
11
13
 
12
14
  // React Native compatible adapters (from adapters subdirectory)
13
15
  const BLEAdapter = require('./adapters/BLEAdapter');
@@ -17,6 +19,10 @@ module.exports = {
17
19
  Transport,
18
20
  MockTransport,
19
21
  BLETransport,
22
+ WiFiDirectTransport,
23
+ WIFI_DIRECT_STATE,
24
+ MultiTransport,
25
+ MULTI_TRANSPORT_STRATEGY,
20
26
  BLEAdapter,
21
27
  RNBLEAdapter,
22
28