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.
- package/README.md +288 -172
- package/docs/IOS-BACKGROUND-BLE.md +231 -0
- package/docs/OPTIMIZATION.md +70 -0
- package/docs/SPEC-v2.1.md +308 -0
- package/package.json +1 -1
- package/src/MeshNetwork.js +659 -465
- package/src/constants/index.js +1 -0
- package/src/crypto/AutoCrypto.js +79 -0
- package/src/crypto/CryptoProvider.js +99 -0
- package/src/crypto/index.js +15 -63
- package/src/crypto/providers/ExpoCryptoProvider.js +125 -0
- package/src/crypto/providers/QuickCryptoProvider.js +134 -0
- package/src/crypto/providers/TweetNaClProvider.js +124 -0
- package/src/crypto/providers/index.js +11 -0
- package/src/errors/MeshError.js +2 -1
- package/src/expo/withBLEMesh.js +102 -0
- package/src/hooks/useMesh.js +30 -9
- package/src/hooks/useMessages.js +2 -0
- package/src/index.js +23 -8
- package/src/mesh/dedup/DedupManager.js +36 -10
- package/src/mesh/fragment/Assembler.js +5 -0
- package/src/mesh/index.js +1 -1
- package/src/mesh/monitor/ConnectionQuality.js +408 -0
- package/src/mesh/monitor/NetworkMonitor.js +327 -316
- package/src/mesh/monitor/index.js +7 -3
- package/src/mesh/peer/PeerManager.js +6 -1
- package/src/mesh/router/MessageRouter.js +26 -15
- package/src/mesh/router/RouteTable.js +7 -1
- package/src/mesh/store/StoreAndForwardManager.js +295 -297
- package/src/mesh/store/index.js +1 -1
- package/src/service/BatteryOptimizer.js +282 -278
- package/src/service/EmergencyManager.js +224 -214
- package/src/service/HandshakeManager.js +167 -13
- package/src/service/MeshService.js +72 -6
- package/src/service/SessionManager.js +77 -2
- package/src/service/audio/AudioManager.js +8 -2
- package/src/service/file/FileAssembler.js +106 -0
- package/src/service/file/FileChunker.js +79 -0
- package/src/service/file/FileManager.js +307 -0
- package/src/service/file/FileMessage.js +122 -0
- package/src/service/file/index.js +15 -0
- package/src/service/text/broadcast/BroadcastManager.js +16 -0
- package/src/transport/BLETransport.js +131 -9
- package/src/transport/MockTransport.js +1 -1
- package/src/transport/MultiTransport.js +305 -0
- package/src/transport/WiFiDirectTransport.js +295 -0
- package/src/transport/adapters/NodeBLEAdapter.js +34 -0
- package/src/transport/adapters/RNBLEAdapter.js +56 -1
- package/src/transport/index.js +6 -0
- package/src/utils/compression.js +291 -291
- package/src/crypto/aead.js +0 -189
- package/src/crypto/chacha20.js +0 -181
- package/src/crypto/hkdf.js +0 -187
- package/src/crypto/hmac.js +0 -143
- package/src/crypto/keys/KeyManager.js +0 -271
- package/src/crypto/keys/KeyPair.js +0 -216
- package/src/crypto/keys/SecureStorage.js +0 -219
- package/src/crypto/keys/index.js +0 -32
- package/src/crypto/noise/handshake.js +0 -410
- package/src/crypto/noise/index.js +0 -27
- package/src/crypto/noise/session.js +0 -253
- package/src/crypto/noise/state.js +0 -268
- package/src/crypto/poly1305.js +0 -113
- package/src/crypto/sha256.js +0 -240
- 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
|
-
|
|
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
|
package/src/transport/index.js
CHANGED
|
@@ -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
|
|