react-native-ble-nitro 1.5.0 → 1.7.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 (86) hide show
  1. package/README.md +56 -12
  2. package/android/src/main/java/com/margelo/nitro/co/zyke/ble/BleNitroBleManager.kt +12 -5
  3. package/android/src/main/java/com/margelo/nitro/co/zyke/ble/BleNitroBleManagerFactory.kt +21 -0
  4. package/ios/BleNitroBleManager.swift +37 -24
  5. package/ios/BleNitroBleManagerFactory.swift +19 -0
  6. package/lib/commonjs/index.d.ts +2 -5
  7. package/lib/commonjs/index.d.ts.map +1 -1
  8. package/lib/commonjs/index.js +7 -15
  9. package/lib/commonjs/index.js.map +1 -1
  10. package/lib/commonjs/manager.d.ts +43 -12
  11. package/lib/commonjs/manager.d.ts.map +1 -1
  12. package/lib/commonjs/manager.js +107 -43
  13. package/lib/commonjs/manager.js.map +1 -1
  14. package/lib/commonjs/singleton.d.ts +10 -0
  15. package/lib/commonjs/singleton.d.ts.map +1 -0
  16. package/lib/commonjs/singleton.js +20 -0
  17. package/lib/commonjs/singleton.js.map +1 -0
  18. package/lib/commonjs/specs/NativeBleNitro.d.ts +1 -1
  19. package/lib/commonjs/specs/NativeBleNitro.d.ts.map +1 -1
  20. package/lib/commonjs/specs/NativeBleNitro.js +1 -0
  21. package/lib/commonjs/specs/NativeBleNitro.js.map +1 -1
  22. package/lib/commonjs/specs/NativeBleNitro.nitro.d.ts +3 -1
  23. package/lib/commonjs/specs/NativeBleNitro.nitro.d.ts.map +1 -1
  24. package/lib/commonjs/specs/NativeBleNitro.nitro.js.map +1 -1
  25. package/lib/commonjs/specs/NativeBleNitroFactory.d.ts +5 -0
  26. package/lib/commonjs/specs/NativeBleNitroFactory.d.ts.map +1 -0
  27. package/lib/commonjs/specs/NativeBleNitroFactory.js +23 -0
  28. package/lib/commonjs/specs/NativeBleNitroFactory.js.map +1 -0
  29. package/lib/commonjs/specs/NativeBleNitroFactory.nitro.d.ts +9 -0
  30. package/lib/commonjs/specs/NativeBleNitroFactory.nitro.d.ts.map +1 -0
  31. package/lib/commonjs/specs/NativeBleNitroFactory.nitro.js +3 -0
  32. package/lib/commonjs/specs/NativeBleNitroFactory.nitro.js.map +1 -0
  33. package/lib/index.d.ts +2 -5
  34. package/lib/index.js +2 -11
  35. package/lib/manager.d.ts +43 -12
  36. package/lib/manager.js +100 -38
  37. package/lib/singleton.d.ts +9 -0
  38. package/lib/singleton.js +15 -0
  39. package/lib/specs/NativeBleNitro.d.ts +1 -1
  40. package/lib/specs/NativeBleNitro.js +1 -0
  41. package/lib/specs/NativeBleNitro.nitro.d.ts +3 -1
  42. package/lib/specs/NativeBleNitroFactory.d.ts +4 -0
  43. package/lib/specs/NativeBleNitroFactory.js +6 -0
  44. package/lib/specs/NativeBleNitroFactory.nitro.d.ts +8 -0
  45. package/lib/specs/NativeBleNitroFactory.nitro.js +1 -0
  46. package/nitro.json +4 -0
  47. package/nitrogen/generated/android/BleNitro+autolinking.cmake +2 -0
  48. package/nitrogen/generated/android/BleNitroOnLoad.cpp +11 -0
  49. package/nitrogen/generated/android/c++/JBLEDevice.hpp +6 -2
  50. package/nitrogen/generated/android/c++/JFunc_void_std__vector_BLEDevice_.hpp +12 -12
  51. package/nitrogen/generated/android/c++/JHybridNativeBleNitroFactorySpec.cpp +71 -0
  52. package/nitrogen/generated/android/c++/JHybridNativeBleNitroFactorySpec.hpp +64 -0
  53. package/nitrogen/generated/android/c++/JHybridNativeBleNitroSpec.cpp +14 -6
  54. package/nitrogen/generated/android/c++/JHybridNativeBleNitroSpec.hpp +3 -2
  55. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/BLEDevice.kt +4 -1
  56. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/Func_void_std__vector_BLEDevice_.kt +9 -9
  57. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/HybridNativeBleNitroFactorySpec.kt +57 -0
  58. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/HybridNativeBleNitroSpec.kt +8 -4
  59. package/nitrogen/generated/ios/BleNitro-Swift-Cxx-Bridge.cpp +17 -0
  60. package/nitrogen/generated/ios/BleNitro-Swift-Cxx-Bridge.hpp +53 -9
  61. package/nitrogen/generated/ios/BleNitro-Swift-Cxx-Umbrella.hpp +5 -0
  62. package/nitrogen/generated/ios/BleNitroAutolinking.mm +8 -0
  63. package/nitrogen/generated/ios/BleNitroAutolinking.swift +15 -0
  64. package/nitrogen/generated/ios/c++/HybridNativeBleNitroFactorySpecSwift.cpp +11 -0
  65. package/nitrogen/generated/ios/c++/HybridNativeBleNitroFactorySpecSwift.hpp +94 -0
  66. package/nitrogen/generated/ios/c++/HybridNativeBleNitroSpecSwift.hpp +11 -5
  67. package/nitrogen/generated/ios/swift/BLEDevice.swift +13 -2
  68. package/nitrogen/generated/ios/swift/Func_void_std__vector_BLEDevice_.swift +5 -5
  69. package/nitrogen/generated/ios/swift/HybridNativeBleNitroFactorySpec.swift +49 -0
  70. package/nitrogen/generated/ios/swift/HybridNativeBleNitroFactorySpec_cxx.swift +149 -0
  71. package/nitrogen/generated/ios/swift/HybridNativeBleNitroSpec.swift +2 -2
  72. package/nitrogen/generated/ios/swift/HybridNativeBleNitroSpec_cxx.swift +24 -3
  73. package/nitrogen/generated/shared/c++/BLEDevice.hpp +6 -2
  74. package/nitrogen/generated/shared/c++/HybridNativeBleNitroFactorySpec.cpp +21 -0
  75. package/nitrogen/generated/shared/c++/HybridNativeBleNitroFactorySpec.hpp +71 -0
  76. package/nitrogen/generated/shared/c++/HybridNativeBleNitroSpec.cpp +2 -0
  77. package/nitrogen/generated/shared/c++/HybridNativeBleNitroSpec.hpp +5 -4
  78. package/package.json +9 -1
  79. package/src/__tests__/index.test.ts +53 -43
  80. package/src/index.ts +2 -13
  81. package/src/manager.ts +107 -38
  82. package/src/singleton.ts +17 -0
  83. package/src/specs/NativeBleNitro.nitro.ts +3 -1
  84. package/src/specs/NativeBleNitro.ts +2 -1
  85. package/src/specs/NativeBleNitroFactory.nitro.ts +6 -0
  86. package/src/specs/NativeBleNitroFactory.ts +9 -0
package/README.md CHANGED
@@ -73,6 +73,15 @@ import { BleNitro, BLEState, AndroidScanMode, type BLEDevice } from 'react-nativ
73
73
 
74
74
  // Get the singleton instance
75
75
  const ble = BleNitro.instance();
76
+
77
+ // Use custom manager instance (e.g. for iOS state restoration)
78
+ // It is recommended to create this instance in an extra file seperated from other BLE business logic for better fast-refresh support
79
+ const ble = new BleNitroManager({
80
+ restoreStateIdentifier: 'my-unique-identifier',
81
+ onRestoreState: (peripherals) => {
82
+ console.log('Restored peripherals:', peripherals);
83
+ },
84
+ });
76
85
  ```
77
86
 
78
87
  ### Complete API Reference
@@ -145,6 +154,21 @@ const deviceId = await ble.connect(deviceId, (deviceId, interrupted, error) => {
145
154
  // Connect without disconnect callback
146
155
  const deviceId = await ble.connect(deviceId);
147
156
 
157
+ // You can also use findAndConnect to scan and connect in one step
158
+ // This could be useful for reconnecting after app restart or when device was disconnected unexpectedly
159
+ const deviceId = await ble.findAndConnect(deviceId, {
160
+ scanTimeout: 4000, // default 5000ms
161
+ onDisconnect: (deviceId, interrupted, error) => {
162
+ if (interrupted) {
163
+ console.log('Connection interrupted:', error);
164
+ // Handle unexpected disconnection (out of range, etc.)
165
+ } else {
166
+ console.log('Disconnected intentionally');
167
+ // Handle normal disconnection
168
+ }
169
+ }
170
+ });
171
+
148
172
  // Disconnect from a device
149
173
  await ble.disconnect(deviceId);
150
174
 
@@ -185,6 +209,10 @@ const characteristics = ble.getCharacteristics(deviceId, serviceUUID);
185
209
  const characteristics1 = ble.getCharacteristics(deviceId, '180d'); // Short form
186
210
  const characteristics2 = ble.getCharacteristics(deviceId, '0000180d-0000-1000-8000-00805f9b34fb'); // Long form
187
211
  // Both work identically - conversion handled automatically
212
+
213
+ // Get services with their characteristics
214
+ const servicesWithCharacteristics = await ble.getServicesWithCharacteristics(deviceId);
215
+ // Returns: [{ uuid: '0000180d-0000-1000-8000-00805f9b34fb', characteristics: ['00002a37-0000-1000-8000-00805f9b34fb', ...] }, ...]
188
216
  ```
189
217
 
190
218
  #### 📖 Reading Characteristics
@@ -256,7 +284,16 @@ const HEART_RATE_SERVICE = '180d';
256
284
  const HEART_RATE_MEASUREMENT = '2a37';
257
285
 
258
286
  // Connect and subscribe to heart rate
259
- const deviceId = await ble.connect(heartRateDeviceId);
287
+ const autoConnectOnAndroid = true; // Optional: auto-reconnect on Android
288
+ const deviceId = await ble.connect(
289
+ heartRateDeviceId,
290
+ (deviceId, interrupted, error) => {
291
+ console.log('Device got Disconnected');
292
+ console.log('Was Interrupted?', interrupted);
293
+ console.log('Error:', error);
294
+ },
295
+ autoConnectOnAndroid,
296
+ );
260
297
  await ble.discoverServices(deviceId);
261
298
 
262
299
  const subscription = ble.subscribeToCharacteristic(
@@ -336,28 +373,35 @@ const fullUUIDs = BleNitro.normalizeGattUUIDs(['180d', '180f']);
336
373
 
337
374
  ### iOS Restore State
338
375
 
339
- There are two ways to handle state restoration on iOS:
376
+ There is built-in support for iOS state restoration. You need to provide a unique identifier and a callback to handle restored peripherals. If no unique identifier is provided, state restoration is disabled.
340
377
 
341
- ```typescript
342
- // Enable state restoration in BleNitro singleton
343
- const ble = BleNitro.instance();
344
- ble.onRestoreState((peripherals) => {
345
- console.log('Restored peripherals:', peripherals);
346
- });
347
- ```
378
+ > [!CAUTION]
379
+ > From 1.7.0 on you have to create your own instance of `BleNitroManager` if you want to use state restoration. The singleton `BleNitro.instance()` will not have state restoration enabled by default anymore.
348
380
 
349
381
  ```typescript
350
- // Or use BleNitroManager with options
351
- // This way you have to assure that only one instance of BleNitroManager is created and that you always use this instance.
352
- import { BleNitroManager, BLEDevice } from 'react-native-ble-nitro/manager';
382
+ import { BleNitroManager, BLEDevice } from 'react-native-ble-nitro';
353
383
 
354
384
  const customBleInstance = new BleNitroManager({
385
+ restoreStateIdentifier: 'my-unique-identifier', // unique identifier for state restoration
355
386
  onRestoreState: (peripherals: BLEDevice[]) => {
356
387
  console.log('Restored peripherals:', peripherals);
388
+ // Handle restored peripherals
357
389
  }
358
390
  });
359
391
  ```
360
392
 
393
+ <details>
394
+ <summary><strong>Singleton Restore State before 1.7.0 (<= 1.6.0)</strong></summary>
395
+
396
+ ```typescript
397
+ // Enable state restoration in BleNitro singleton
398
+ const ble = BleNitro.instance();
399
+ ble.onRestoreState((peripherals) => {
400
+ console.log('Restored peripherals:', peripherals);
401
+ });
402
+ ```
403
+ </details>
404
+
361
405
  ### TypeScript Types
362
406
 
363
407
  ```typescript
@@ -33,7 +33,10 @@ import java.util.concurrent.ConcurrentHashMap
33
33
  * This class provides the actual BLE functionality for Android devices
34
34
  */
35
35
  class BleNitroBleManager : HybridNativeBleNitroSpec() {
36
-
36
+
37
+ // iOS-specific property (not used on Android)
38
+ override var restoreStateIdentifier: String? = null
39
+
37
40
  private var bluetoothAdapter: BluetoothAdapter? = null
38
41
  private var stateCallback: ((state: BLEState) -> Unit)? = null
39
42
  private var bluetoothStateReceiver: BroadcastReceiver? = null
@@ -207,7 +210,8 @@ class BleNitroBleManager : HybridNativeBleNitroSpec() {
207
210
  rssi = scanResult.rssi.toDouble(),
208
211
  manufacturerData = manufacturerData,
209
212
  serviceUUIDs = serviceUUIDs,
210
- isConnectable = true // Assume scannable devices are connectable
213
+ isConnectable = true, // Assume scannable devices are connectable
214
+ isConnected = false // Scanned devices are not yet connected
211
215
  )
212
216
  }
213
217
 
@@ -491,7 +495,8 @@ class BleNitroBleManager : HybridNativeBleNitroSpec() {
491
495
  rssi = 0.0, // RSSI not available for already connected devices
492
496
  manufacturerData = ManufacturerData(companyIdentifiers = emptyArray()),
493
497
  serviceUUIDs = emptyArray(), // Service UUIDs not available without service discovery
494
- isConnectable = true
498
+ isConnectable = true,
499
+ isConnected = true
495
500
  )
496
501
  }.toTypedArray()
497
502
  } catch (e: Exception) {
@@ -503,7 +508,8 @@ class BleNitroBleManager : HybridNativeBleNitroSpec() {
503
508
  override fun connect(
504
509
  deviceId: String,
505
510
  callback: (success: Boolean, deviceId: String, error: String) -> Unit,
506
- disconnectCallback: ((deviceId: String, interrupted: Boolean, error: String) -> Unit)?
511
+ disconnectCallback: ((deviceId: String, interrupted: Boolean, error: String) -> Unit)?,
512
+ autoConnectAndroid: Boolean?
507
513
  ) {
508
514
  try {
509
515
  initializeBluetoothIfNeeded()
@@ -531,7 +537,8 @@ class BleNitroBleManager : HybridNativeBleNitroSpec() {
531
537
  // Connect to device
532
538
  val context = appContext
533
539
  if (context != null) {
534
- val gatt = device.connectGatt(context, false, gattCallback)
540
+ val autoConnect = autoConnectAndroid ?: false
541
+ val gatt = device.connectGatt(context, autoConnect, gattCallback)
535
542
  connectedDevices[deviceId] = gatt
536
543
  } else {
537
544
  callback(false, deviceId, "Context not available")
@@ -0,0 +1,21 @@
1
+ package com.margelo.nitro.co.zyke.ble
2
+
3
+ import com.margelo.nitro.core.*
4
+
5
+ /**
6
+ * Android Factory implementation for BLE Nitro Manager
7
+ * Creates BleNitroBleManager instances
8
+ *
9
+ * Note: restoreStateIdentifier and restoreStateCallback are iOS-specific
10
+ * and ignored on Android
11
+ */
12
+ class BleNitroBleManagerFactory : HybridNativeBleNitroFactorySpec() {
13
+
14
+ override fun create(
15
+ nativeRestoreStateIdentifier: String?,
16
+ restoreStateCallback: ((peripherals: Array<BLEDevice>) -> Unit)?
17
+ ): HybridNativeBleNitroSpec {
18
+ // Ignore iOS-specific parameters on Android
19
+ return BleNitroBleManager()
20
+ }
21
+ }
@@ -5,13 +5,10 @@ import NitroModules
5
5
  * iOS implementation of the BLE Nitro Manager
6
6
  * Implements the HybridNativeBleNitroSpec protocol for Core Bluetooth operations
7
7
  */
8
- public class BleNitroBleManager: HybridNativeBleNitroSpec_base, HybridNativeBleNitroSpec_protocol {
9
-
10
- // MARK: - Constants
11
- private static let restoreStateIdentifier = "react-native-ble-nitro"
12
-
8
+ public class BleNitroBleManager: HybridNativeBleNitroSpec {
9
+
13
10
  // MARK: - Static Properties
14
- private static var globalRestoreStateCallback: (([BLEDevice]) -> Void)?
11
+ internal static var globalRestoreStateCallback: (([BLEDevice]) -> Void)?
15
12
 
16
13
  // MARK: - Private Properties
17
14
  private var centralManager: CBCentralManager!
@@ -26,23 +23,30 @@ public class BleNitroBleManager: HybridNativeBleNitroSpec_base, HybridNativeBleN
26
23
  private var centralManagerDelegate: BleCentralManagerDelegate!
27
24
 
28
25
  // MARK: - Restore State Properties
29
- private var restoreStateCallback: (([BLEDevice]) -> Void)?
26
+ internal var restoreStateCallback: (([BLEDevice]) -> Void)?
27
+
28
+ // MARK: - Public Properties (from spec)
29
+ public var restoreStateIdentifier: String? = nil
30
30
 
31
31
  // MARK: - Initialization
32
- public override init() {
32
+ public init(restoreStateIdentifier: String? = nil, restoreStateCallback: (([BLEDevice]) -> Void)? = nil) {
33
+ self.restoreStateIdentifier = restoreStateIdentifier
34
+ self.restoreStateCallback = restoreStateCallback
33
35
  super.init()
34
36
  setupCentralManager()
35
37
  }
36
38
 
37
39
  private func setupCentralManager() {
38
40
  centralManagerDelegate = BleCentralManagerDelegate(manager: self)
39
-
40
- // Create options dictionary for central manager with fixed restore identifier
41
- let options: [String: Any] = [
42
- CBCentralManagerOptionRestoreIdentifierKey: BleNitroBleManager.restoreStateIdentifier
43
- ]
44
-
45
- centralManager = CBCentralManager(delegate: centralManagerDelegate, queue: DispatchQueue.main, options: options)
41
+
42
+ // Create options dictionary for central manager with restore identifier if set
43
+ var options: [String: Any] = [:]
44
+ print("Restore Identifier: \(String(describing: restoreStateIdentifier))")
45
+ if let identifier = restoreStateIdentifier {
46
+ options[CBCentralManagerOptionRestoreIdentifierKey] = identifier
47
+ }
48
+
49
+ centralManager = CBCentralManager(delegate: centralManagerDelegate, queue: DispatchQueue.main, options: options.isEmpty ? nil : options)
46
50
  }
47
51
 
48
52
 
@@ -72,11 +76,9 @@ public class BleNitroBleManager: HybridNativeBleNitroSpec_base, HybridNativeBleN
72
76
 
73
77
  // MARK: - Restore State Management
74
78
  public func setRestoreStateCallback(callback: @escaping ([BLEDevice]) -> Void) throws {
75
- print("🔄 setRestoreStateCallback called")
76
79
  // Set both static and instance variables
77
80
  BleNitroBleManager.globalRestoreStateCallback = callback
78
81
  self.restoreStateCallback = callback
79
- print("🔄 Callback set successfully")
80
82
  }
81
83
 
82
84
  // MARK: - Scanning Operations
@@ -132,7 +134,8 @@ public class BleNitroBleManager: HybridNativeBleNitroSpec_base, HybridNativeBleN
132
134
  rssi: 0, // RSSI not available for connected devices without explicit read
133
135
  manufacturerData: ManufacturerData(companyIdentifiers: []), // Not available for connected devices
134
136
  serviceUUIDs: peripheral.services?.map { $0.uuid.uuidString } ?? [],
135
- isConnectable: true // Already connected, so it was connectable
137
+ isConnectable: true, // Already connected, so it was connectable
138
+ isConnected: true
136
139
  )
137
140
  connectedDevices.append(device)
138
141
  }
@@ -152,7 +155,8 @@ public class BleNitroBleManager: HybridNativeBleNitroSpec_base, HybridNativeBleN
152
155
  rssi: 0,
153
156
  manufacturerData: ManufacturerData(companyIdentifiers: []),
154
157
  serviceUUIDs: peripheral.services?.map { $0.uuid.uuidString } ?? [],
155
- isConnectable: true
158
+ isConnectable: true,
159
+ isConnected: true
156
160
  )
157
161
  connectedDevices.append(device)
158
162
 
@@ -177,7 +181,8 @@ public class BleNitroBleManager: HybridNativeBleNitroSpec_base, HybridNativeBleN
177
181
  rssi: 0,
178
182
  manufacturerData: ManufacturerData(companyIdentifiers: []),
179
183
  serviceUUIDs: peripheral.services?.map { $0.uuid.uuidString } ?? [],
180
- isConnectable: true
184
+ isConnectable: true,
185
+ isConnected: true
181
186
  )
182
187
  connectedDevices.append(device)
183
188
 
@@ -192,7 +197,7 @@ public class BleNitroBleManager: HybridNativeBleNitroSpec_base, HybridNativeBleN
192
197
  }
193
198
 
194
199
  // MARK: - Connection Management
195
- public func connect(deviceId: String, callback: @escaping (Bool, String, String) -> Void, disconnectCallback: ((String, Bool, String) -> Void)?) throws {
200
+ public func connect(deviceId: String, callback: @escaping (Bool, String, String) -> Void, disconnectCallback: ((String, Bool, String) -> Void)?, autoConnectAndroid: Bool?) throws {
196
201
  // Find peripheral by identifier
197
202
  guard let peripheral = findPeripheral(by: deviceId) else {
198
203
  callback(false, "", "Peripheral not found")
@@ -507,7 +512,8 @@ public class BleNitroBleManager: HybridNativeBleNitroSpec_base, HybridNativeBleN
507
512
  rssi: 0, // RSSI not available for restored peripherals
508
513
  manufacturerData: ManufacturerData(companyIdentifiers: []),
509
514
  serviceUUIDs: peripheral.services?.map { $0.uuid.uuidString } ?? [],
510
- isConnectable: true
515
+ isConnectable: true,
516
+ isConnected: peripheral.state == .connected
511
517
  )
512
518
  restoredDevices.append(device)
513
519
 
@@ -634,7 +640,8 @@ public class BleNitroBleManager: HybridNativeBleNitroSpec_base, HybridNativeBleN
634
640
  rssi: rssi,
635
641
  manufacturerData: manufacturerData,
636
642
  serviceUUIDs: serviceUUIDs,
637
- isConnectable: isConnectable
643
+ isConnectable: isConnectable,
644
+ isConnected: peripheral.state == .connected
638
645
  )
639
646
  }
640
647
 
@@ -719,6 +726,12 @@ class BleCentralManagerDelegate: NSObject, CBCentralManagerDelegate {
719
726
  }
720
727
 
721
728
  func centralManager(_ central: CBCentralManager, willRestoreState dict: [String: Any]) {
722
- manager?.handleStateRestoration(dict)
729
+ // Only handle state restoration if restoreStateIdentifier is set and a callback is registered
730
+ guard let manager = manager,
731
+ manager.restoreStateIdentifier != nil,
732
+ (BleNitroBleManager.globalRestoreStateCallback != nil || manager.restoreStateCallback != nil) else {
733
+ return
734
+ }
735
+ manager.handleStateRestoration(dict)
723
736
  }
724
737
  }
@@ -0,0 +1,19 @@
1
+ import Foundation
2
+ import NitroModules
3
+
4
+ /**
5
+ * iOS Factory implementation for BLE Nitro Manager
6
+ * Creates BleNitroBleManager instances with optional state restoration configuration
7
+ */
8
+ public class BleNitroBleManagerFactory: HybridNativeBleNitroFactorySpec_base, HybridNativeBleNitroFactorySpec_protocol {
9
+
10
+ public func create(
11
+ nativeRestoreStateIdentifier: String?,
12
+ restoreStateCallback: (([BLEDevice]) -> Void)?
13
+ ) throws -> any HybridNativeBleNitroSpec {
14
+ return BleNitroBleManager(
15
+ restoreStateIdentifier: nativeRestoreStateIdentifier,
16
+ restoreStateCallback: restoreStateCallback
17
+ )
18
+ }
19
+ }
@@ -1,6 +1,3 @@
1
- import { BleNitroManager } from "./manager";
2
- export { type ByteArray, type ScanFilter, type BLEDevice, type ScanCallback, type ManufacturerDataEntry, type ManufacturerData, type ConnectionCallback, type DisconnectEventCallback, type OperationCallback, type CharacteristicUpdateCallback, type Subscription, type BleNitroManager, type BleNitroManagerOptions, BLEState, AndroidScanMode, } from "./manager";
3
- export declare class BleNitro extends BleNitroManager {
4
- static instance(): BleNitroManager;
5
- }
1
+ export { type ByteArray, type ScanFilter, type BLEDevice, type ScanCallback, type ManufacturerDataEntry, type ManufacturerData, type ConnectionCallback, type DisconnectEventCallback, type OperationCallback, type CharacteristicUpdateCallback, type Subscription, type BleNitroManagerOptions, BLEState, AndroidScanMode, BleNitroManager, } from "./manager";
2
+ export { BleNitro } from './singleton';
6
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EACL,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,4BAA4B,EACjC,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,QAAQ,EACR,eAAe,GAChB,MAAM,WAAW,CAAC;AAInB,qBAAa,QAAS,SAAQ,eAAe;WAC7B,QAAQ;CAMvB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,4BAA4B,EACjC,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,QAAQ,EACR,eAAe,EACf,eAAe,GAChB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC"}
@@ -1,18 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BleNitro = exports.AndroidScanMode = exports.BLEState = void 0;
4
- const manager_1 = require("./manager");
5
- var manager_2 = require("./manager");
6
- Object.defineProperty(exports, "BLEState", { enumerable: true, get: function () { return manager_2.BLEState; } });
7
- Object.defineProperty(exports, "AndroidScanMode", { enumerable: true, get: function () { return manager_2.AndroidScanMode; } });
8
- let _instance;
9
- class BleNitro extends manager_1.BleNitroManager {
10
- static instance() {
11
- if (!_instance) {
12
- _instance = new BleNitro();
13
- }
14
- return _instance;
15
- }
16
- }
17
- exports.BleNitro = BleNitro;
3
+ exports.BleNitro = exports.BleNitroManager = exports.AndroidScanMode = exports.BLEState = void 0;
4
+ var manager_1 = require("./manager");
5
+ Object.defineProperty(exports, "BLEState", { enumerable: true, get: function () { return manager_1.BLEState; } });
6
+ Object.defineProperty(exports, "AndroidScanMode", { enumerable: true, get: function () { return manager_1.AndroidScanMode; } });
7
+ Object.defineProperty(exports, "BleNitroManager", { enumerable: true, get: function () { return manager_1.BleNitroManager; } });
8
+ var singleton_1 = require("./singleton");
9
+ Object.defineProperty(exports, "BleNitro", { enumerable: true, get: function () { return singleton_1.BleNitro; } });
18
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,uCAA4C;AAE5C,qCAgBmB;AAFjB,mGAAA,QAAQ,OAAA;AACR,0GAAA,eAAe,OAAA;AAGjB,IAAI,SAA0B,CAAC;AAE/B,MAAa,QAAS,SAAQ,yBAAe;IACpC,MAAM,CAAC,QAAQ;QACpB,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC7B,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAPD,4BAOC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,qCAgBmB;AAHjB,mGAAA,QAAQ,OAAA;AACR,0GAAA,eAAe,OAAA;AACf,0GAAA,eAAe,OAAA;AAGjB,yCAAuC;AAA9B,qGAAA,QAAQ,OAAA"}
@@ -20,6 +20,7 @@ export interface BLEDevice {
20
20
  manufacturerData: ManufacturerData;
21
21
  serviceUUIDs: string[];
22
22
  isConnectable: boolean;
23
+ isConnected: boolean;
23
24
  }
24
25
  export type ScanCallback = (device: BLEDevice) => void;
25
26
  export type RestoreStateCallback = (connectedPeripherals: BLEDevice[]) => void;
@@ -45,6 +46,7 @@ export declare enum AndroidScanMode {
45
46
  Opportunistic = "Opportunistic"
46
47
  }
47
48
  export type BleNitroManagerOptions = {
49
+ restoreIdentifier?: string;
48
50
  onRestoredState?: RestoreStateCallback;
49
51
  };
50
52
  export declare function mapNativeBLEStateToBLEState(nativeState: NativeBLEState): BLEState;
@@ -57,8 +59,15 @@ export declare class BleNitroManager {
57
59
  private _connectedDevices;
58
60
  private _restoredStateCallback;
59
61
  private _restoredState;
62
+ private _restoreStateIdentifier;
63
+ private Instance;
60
64
  constructor(options?: BleNitroManagerOptions);
61
65
  private onNativeRestoreStateCallback;
66
+ /**
67
+ *
68
+ * Registers callback and returns restored peripheral state in it. Not working from 1.7.x upwards for singleton implementation!
69
+ * @deprecated This method is deprecated and will be removed in 2.x, use onRestoredState option in BleNitroManageroptions instead!
70
+ */
62
71
  onRestoredState(callback: RestoreStateCallback): void;
63
72
  /**
64
73
  * Converts a 16- oder 32-Bit UUID to a 128-Bit UUID
@@ -72,17 +81,17 @@ export declare class BleNitroManager {
72
81
  * Start scanning for Bluetooth devices
73
82
  * @param filter Optional scan filter
74
83
  * @param callback Callback function called when a device is found
75
- * @returns Promise resolving to success state
84
+ * @returns void
76
85
  */
77
86
  startScan(filter: ScanFilter | undefined, callback: ScanCallback, onError?: (error: string) => void): void;
78
87
  /**
79
88
  * Stop scanning for Bluetooth devices
80
- * @returns Promise resolving to success state
89
+ * @returns void
81
90
  */
82
91
  stopScan(): void;
83
92
  /**
84
93
  * Check if currently scanning for devices
85
- * @returns Promise resolving to scanning state
94
+ * @returns Boolean indicating if currently scanning
86
95
  */
87
96
  isScanning(): boolean;
88
97
  /**
@@ -95,9 +104,20 @@ export declare class BleNitroManager {
95
104
  * Connect to a Bluetooth device
96
105
  * @param deviceId ID of the device to connect to
97
106
  * @param onDisconnect Optional callback for disconnect events
98
- * @returns Promise resolving when connected
107
+ * @returns Promise resolving deviceId when connected
99
108
  */
100
- connect(deviceId: string, onDisconnect?: DisconnectEventCallback): Promise<string>;
109
+ connect(deviceId: string, onDisconnect?: DisconnectEventCallback, autoConnectAndroid?: boolean): Promise<string>;
110
+ /**
111
+ * Scans for a device and connects to it
112
+ * @param deviceId ID of the device to connect to
113
+ * @param scanTimeout Optional timeout for the scan in milliseconds (default: 5000ms)
114
+ * @returns Promise resolving deviceId when connected
115
+ */
116
+ findAndConnect(deviceId: string, options?: {
117
+ scanTimeout?: number;
118
+ autoConnectAndroid?: boolean;
119
+ onDisconnect?: DisconnectEventCallback;
120
+ }): Promise<string>;
101
121
  /**
102
122
  * Disconnect from a Bluetooth device
103
123
  * @param deviceId ID of the device to disconnect from
@@ -107,7 +127,7 @@ export declare class BleNitroManager {
107
127
  /**
108
128
  * Check if connected to a device
109
129
  * @param deviceId ID of the device to check
110
- * @returns Promise resolving to connection state
130
+ * @returns Boolean indicating if device is connected
111
131
  */
112
132
  isConnected(deviceId: string): boolean;
113
133
  /**
@@ -139,15 +159,26 @@ export declare class BleNitroManager {
139
159
  * Get characteristics for a service
140
160
  * @param deviceId ID of the device
141
161
  * @param serviceId ID of the service
142
- * @returns Promise resolving to array of characteristic UUIDs
162
+ * @returns array of characteristic UUIDs
143
163
  */
144
164
  getCharacteristics(deviceId: string, serviceId: string): string[];
165
+ /**
166
+ * Get services and characteristics for a connected device
167
+ * @param deviceId ID of the device
168
+ * @returns Promise resolving to array of service and characteristic UUIDs
169
+ * @see getServices
170
+ * @see getCharacteristics
171
+ */
172
+ getServicesWithCharacteristics(deviceId: string): Promise<{
173
+ uuid: string;
174
+ characteristics: string[];
175
+ }[]>;
145
176
  /**
146
177
  * Read a characteristic value
147
178
  * @param deviceId ID of the device
148
179
  * @param serviceId ID of the service
149
180
  * @param characteristicId ID of the characteristic
150
- * @returns Promise resolving to the characteristic data as ArrayBuffer
181
+ * @returns Promise resolving to the characteristic data as ByteArray
151
182
  */
152
183
  readCharacteristic(deviceId: string, serviceId: string, characteristicId: string): Promise<ByteArray>;
153
184
  /**
@@ -166,7 +197,7 @@ export declare class BleNitroManager {
166
197
  * @param serviceId ID of the service
167
198
  * @param characteristicId ID of the characteristic
168
199
  * @param callback Callback function called when notification is received
169
- * @returns Promise resolving when subscription is complete
200
+ * @returns Subscription
170
201
  */
171
202
  subscribeToCharacteristic(deviceId: string, serviceId: string, characteristicId: string, callback: CharacteristicUpdateCallback): Subscription;
172
203
  /**
@@ -179,7 +210,7 @@ export declare class BleNitroManager {
179
210
  unsubscribeFromCharacteristic(deviceId: string, serviceId: string, characteristicId: string): Promise<void>;
180
211
  /**
181
212
  * Check if Bluetooth is enabled
182
- * @returns Promise resolving to Bluetooth state
213
+ * @returns returns Boolean according to Bluetooth state
183
214
  */
184
215
  isBluetoothEnabled(): boolean;
185
216
  /**
@@ -189,7 +220,7 @@ export declare class BleNitroManager {
189
220
  requestBluetoothEnable(): Promise<boolean>;
190
221
  /**
191
222
  * Get the current Bluetooth state
192
- * @returns Promise resolving to Bluetooth state
223
+ * @returns Bluetooth state
193
224
  * @see BLEState
194
225
  */
195
226
  state(): BLEState;
@@ -197,7 +228,7 @@ export declare class BleNitroManager {
197
228
  * Subscribe to Bluetooth state changes
198
229
  * @param callback Callback function called when state changes
199
230
  * @param emitInitial Whether to emit initial state callback
200
- * @returns Promise resolving when subscription is complete
231
+ * @returns Subscription
201
232
  * @see BLEState
202
233
  */
203
234
  subscribeToStateChange(callback: (state: BLEState) => void, emitInitial?: boolean): Subscription;
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/manager.ts"],"names":[],"mappings":"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"}