munim-bluetooth 0.3.14 → 0.3.15

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.
@@ -30,6 +30,52 @@ class HybridMunimBluetooth: HybridMunimBluetoothSpec {
30
30
  centralManager = CBCentralManager(delegate: self, queue: nil)
31
31
  }
32
32
 
33
+ // MARK: - Event Emission
34
+ private func emitDeviceFound(device: CBPeripheral, advertisementData: [String: Any], rssi: NSNumber) {
35
+ // Build device data dictionary
36
+ var deviceData: [String: Any] = [
37
+ "id": device.identifier.uuidString,
38
+ "rssi": rssi.intValue
39
+ ]
40
+
41
+ // Add device name if available
42
+ if let name = device.name {
43
+ deviceData["name"] = name
44
+ }
45
+
46
+ // Extract and add advertising data
47
+ if let localName = advertisementData[CBAdvertisementDataLocalNameKey] as? String {
48
+ deviceData["localName"] = localName
49
+ }
50
+
51
+ if let serviceUUIDs = advertisementData[CBAdvertisementDataServiceUUIDsKey] as? [CBUUID] {
52
+ deviceData["serviceUUIDs"] = serviceUUIDs.map { $0.uuidString }
53
+ }
54
+
55
+ if let manufacturerData = advertisementData[CBAdvertisementDataManufacturerDataKey] as? Data {
56
+ deviceData["manufacturerData"] = manufacturerData.map { String(format: "%02x", $0) }.joined()
57
+ }
58
+
59
+ if let txPowerLevel = advertisementData[CBAdvertisementDataTxPowerLevelKey] as? NSNumber {
60
+ deviceData["txPowerLevel"] = txPowerLevel.intValue
61
+ }
62
+
63
+ if let isConnectable = advertisementData[CBAdvertisementDataIsConnectable] as? NSNumber {
64
+ deviceData["isConnectable"] = isConnectable.boolValue
65
+ }
66
+
67
+ // Store advertising data
68
+ deviceData["advertisingData"] = advertisementData
69
+
70
+ // Emit event through the event emitter
71
+ if let emitter = MunimBluetoothEventEmitter.shared {
72
+ emitter.emitDeviceFound(deviceData)
73
+ NSLog("[MunimBluetooth] ✅ Device found event emitted: %@", device.identifier.uuidString)
74
+ } else {
75
+ NSLog("[MunimBluetooth] ⚠️ Event emitter not initialized!")
76
+ }
77
+ }
78
+
33
79
  // MARK: - Peripheral Features
34
80
 
35
81
  func startAdvertising(options: AdvertisingOptions) throws {
@@ -335,7 +381,10 @@ extension HybridMunimBluetooth: CBCentralManagerDelegate {
335
381
  let deviceId = peripheral.identifier.uuidString
336
382
  discoveredPeripherals[deviceId] = peripheral
337
383
 
338
- NSLog("Bluetooth: deviceFound")
384
+ // Emit the device found event
385
+ emitDeviceFound(device: peripheral, advertisementData: advertisementData, rssi: RSSI)
386
+
387
+ NSLog("Bluetooth: deviceFound - %@", deviceId)
339
388
  }
340
389
 
341
390
  func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
@@ -0,0 +1,15 @@
1
+ //
2
+ // MunimBluetoothEventEmitter.m
3
+ // munim-bluetooth
4
+ //
5
+ // Objective-C bridge for event emitter
6
+ //
7
+
8
+ #import <React/RCTBridgeModule.h>
9
+ #import <React/RCTEventEmitter.h>
10
+
11
+ @interface RCT_EXTERN_MODULE(MunimBluetoothEventEmitter, RCTEventEmitter)
12
+
13
+ RCT_EXTERN_METHOD(supportedEvents)
14
+
15
+ @end
@@ -0,0 +1,38 @@
1
+ //
2
+ // MunimBluetoothEventEmitter.swift
3
+ // munim-bluetooth
4
+ //
5
+ // Event emitter for Bluetooth events
6
+ //
7
+
8
+ import Foundation
9
+ import React
10
+
11
+ @objc(MunimBluetoothEventEmitter)
12
+ class MunimBluetoothEventEmitter: RCTEventEmitter {
13
+
14
+ public static var shared: MunimBluetoothEventEmitter?
15
+
16
+ override init() {
17
+ super.init()
18
+ MunimBluetoothEventEmitter.shared = self
19
+ }
20
+
21
+ override func supportedEvents() -> [String]! {
22
+ return [
23
+ "deviceFound",
24
+ "onDeviceFound",
25
+ "scanResult",
26
+ "connectionStateChanged",
27
+ "characteristicValueChanged"
28
+ ]
29
+ }
30
+
31
+ override static func requiresMainQueueSetup() -> Bool {
32
+ return false
33
+ }
34
+
35
+ func emitDeviceFound(_ deviceData: [String: Any]) {
36
+ sendEvent(withName: "deviceFound", body: deviceData)
37
+ }
38
+ }
@@ -3,6 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.addDeviceFoundListener = addDeviceFoundListener;
7
+ exports.addEventListener = addEventListener;
6
8
  exports.addListener = addListener;
7
9
  exports.connect = connect;
8
10
  exports.default = void 0;
@@ -25,8 +27,20 @@ exports.unsubscribeFromCharacteristic = unsubscribeFromCharacteristic;
25
27
  exports.updateAdvertisingData = updateAdvertisingData;
26
28
  exports.writeCharacteristic = writeCharacteristic;
27
29
  var _reactNativeNitroModules = require("react-native-nitro-modules");
30
+ var _reactNative = require("react-native");
28
31
  const MunimBluetooth = _reactNativeNitroModules.NitroModules.createHybridObject('MunimBluetooth');
29
32
 
33
+ // Event Emitter for Bluetooth events
34
+ const {
35
+ MunimBluetoothEventEmitter
36
+ } = _reactNative.NativeModules;
37
+ let eventEmitter = null;
38
+ if (MunimBluetoothEventEmitter) {
39
+ eventEmitter = new _reactNative.NativeEventEmitter(MunimBluetoothEventEmitter);
40
+ } else {
41
+ console.warn('[munim-bluetooth] Event emitter not available - device discovery events will not work');
42
+ }
43
+
30
44
  // ========== Peripheral Features ==========
31
45
 
32
46
  /**
@@ -206,10 +220,41 @@ function readRSSI(deviceId) {
206
220
 
207
221
  // ========== Event Management ==========
208
222
 
223
+ /**
224
+ * Add a device found event listener (for scanning).
225
+ *
226
+ * @param callback - Function to call when a device is found
227
+ * @returns A function to remove the listener
228
+ */
229
+ function addDeviceFoundListener(callback) {
230
+ if (!eventEmitter) {
231
+ console.warn('[munim-bluetooth] Cannot add listener - event emitter not available');
232
+ return () => {};
233
+ }
234
+ const subscription = eventEmitter.addListener('deviceFound', callback);
235
+ return () => subscription.remove();
236
+ }
237
+
209
238
  /**
210
239
  * Add an event listener.
211
240
  *
212
241
  * @param eventName - The name of the event to listen for.
242
+ * @param callback - The callback to invoke when the event occurs.
243
+ * @returns A function to remove the listener
244
+ */
245
+ function addEventListener(eventName, callback) {
246
+ if (!eventEmitter) {
247
+ console.warn('[munim-bluetooth] Cannot add listener - event emitter not available');
248
+ return () => {};
249
+ }
250
+ const subscription = eventEmitter.addListener(eventName, callback);
251
+ return () => subscription.remove();
252
+ }
253
+
254
+ /**
255
+ * Add an event listener (legacy method).
256
+ *
257
+ * @param eventName - The name of the event to listen for.
213
258
  */
214
259
  function addListener(eventName) {
215
260
  return MunimBluetooth.addListener(eventName);
@@ -248,6 +293,8 @@ var _default = exports.default = {
248
293
  getConnectedDevices,
249
294
  readRSSI,
250
295
  // Events
296
+ addDeviceFoundListener,
297
+ addEventListener,
251
298
  addListener,
252
299
  removeListeners
253
300
  };
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNativeNitroModules","require","MunimBluetooth","NitroModules","createHybridObject","startAdvertising","options","updateAdvertisingData","advertisingData","getAdvertisingData","stopAdvertising","setServices","services","isBluetoothEnabled","requestBluetoothPermission","startScan","stopScan","connect","deviceId","disconnect","discoverServices","readCharacteristic","serviceUUID","characteristicUUID","writeCharacteristic","value","writeType","subscribeToCharacteristic","unsubscribeFromCharacteristic","getConnectedDevices","readRSSI","addListener","eventName","removeListeners","count","_default","exports","default"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_reactNativeNitroModules","require","_reactNative","MunimBluetooth","NitroModules","createHybridObject","MunimBluetoothEventEmitter","NativeModules","eventEmitter","NativeEventEmitter","console","warn","startAdvertising","options","updateAdvertisingData","advertisingData","getAdvertisingData","stopAdvertising","setServices","services","isBluetoothEnabled","requestBluetoothPermission","startScan","stopScan","connect","deviceId","disconnect","discoverServices","readCharacteristic","serviceUUID","characteristicUUID","writeCharacteristic","value","writeType","subscribeToCharacteristic","unsubscribeFromCharacteristic","getConnectedDevices","readRSSI","addDeviceFoundListener","callback","subscription","addListener","remove","addEventListener","eventName","removeListeners","count","_default","exports","default"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
@@ -1,8 +1,20 @@
1
1
  "use strict";
2
2
 
3
3
  import { NitroModules } from 'react-native-nitro-modules';
4
+ import { NativeEventEmitter, NativeModules } from 'react-native';
4
5
  const MunimBluetooth = NitroModules.createHybridObject('MunimBluetooth');
5
6
 
7
+ // Event Emitter for Bluetooth events
8
+ const {
9
+ MunimBluetoothEventEmitter
10
+ } = NativeModules;
11
+ let eventEmitter = null;
12
+ if (MunimBluetoothEventEmitter) {
13
+ eventEmitter = new NativeEventEmitter(MunimBluetoothEventEmitter);
14
+ } else {
15
+ console.warn('[munim-bluetooth] Event emitter not available - device discovery events will not work');
16
+ }
17
+
6
18
  // ========== Peripheral Features ==========
7
19
 
8
20
  /**
@@ -182,10 +194,41 @@ export function readRSSI(deviceId) {
182
194
 
183
195
  // ========== Event Management ==========
184
196
 
197
+ /**
198
+ * Add a device found event listener (for scanning).
199
+ *
200
+ * @param callback - Function to call when a device is found
201
+ * @returns A function to remove the listener
202
+ */
203
+ export function addDeviceFoundListener(callback) {
204
+ if (!eventEmitter) {
205
+ console.warn('[munim-bluetooth] Cannot add listener - event emitter not available');
206
+ return () => {};
207
+ }
208
+ const subscription = eventEmitter.addListener('deviceFound', callback);
209
+ return () => subscription.remove();
210
+ }
211
+
185
212
  /**
186
213
  * Add an event listener.
187
214
  *
188
215
  * @param eventName - The name of the event to listen for.
216
+ * @param callback - The callback to invoke when the event occurs.
217
+ * @returns A function to remove the listener
218
+ */
219
+ export function addEventListener(eventName, callback) {
220
+ if (!eventEmitter) {
221
+ console.warn('[munim-bluetooth] Cannot add listener - event emitter not available');
222
+ return () => {};
223
+ }
224
+ const subscription = eventEmitter.addListener(eventName, callback);
225
+ return () => subscription.remove();
226
+ }
227
+
228
+ /**
229
+ * Add an event listener (legacy method).
230
+ *
231
+ * @param eventName - The name of the event to listen for.
189
232
  */
190
233
  export function addListener(eventName) {
191
234
  return MunimBluetooth.addListener(eventName);
@@ -225,6 +268,8 @@ export default {
225
268
  getConnectedDevices,
226
269
  readRSSI,
227
270
  // Events
271
+ addDeviceFoundListener,
272
+ addEventListener,
228
273
  addListener,
229
274
  removeListeners
230
275
  };
@@ -1 +1 @@
1
- {"version":3,"names":["NitroModules","MunimBluetooth","createHybridObject","startAdvertising","options","updateAdvertisingData","advertisingData","getAdvertisingData","stopAdvertising","setServices","services","isBluetoothEnabled","requestBluetoothPermission","startScan","stopScan","connect","deviceId","disconnect","discoverServices","readCharacteristic","serviceUUID","characteristicUUID","writeCharacteristic","value","writeType","subscribeToCharacteristic","unsubscribeFromCharacteristic","getConnectedDevices","readRSSI","addListener","eventName","removeListeners","count"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["NitroModules","NativeEventEmitter","NativeModules","MunimBluetooth","createHybridObject","MunimBluetoothEventEmitter","eventEmitter","console","warn","startAdvertising","options","updateAdvertisingData","advertisingData","getAdvertisingData","stopAdvertising","setServices","services","isBluetoothEnabled","requestBluetoothPermission","startScan","stopScan","connect","deviceId","disconnect","discoverServices","readCharacteristic","serviceUUID","characteristicUUID","writeCharacteristic","value","writeType","subscribeToCharacteristic","unsubscribeFromCharacteristic","getConnectedDevices","readRSSI","addDeviceFoundListener","callback","subscription","addListener","remove","addEventListener","eventName","removeListeners","count"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
@@ -123,10 +123,25 @@ export declare function getConnectedDevices(): Promise<string[]>;
123
123
  * @returns Promise resolving to RSSI value in dBm.
124
124
  */
125
125
  export declare function readRSSI(deviceId: string): Promise<number>;
126
+ /**
127
+ * Add a device found event listener (for scanning).
128
+ *
129
+ * @param callback - Function to call when a device is found
130
+ * @returns A function to remove the listener
131
+ */
132
+ export declare function addDeviceFoundListener(callback: (device: BLEDevice) => void): () => void;
126
133
  /**
127
134
  * Add an event listener.
128
135
  *
129
136
  * @param eventName - The name of the event to listen for.
137
+ * @param callback - The callback to invoke when the event occurs.
138
+ * @returns A function to remove the listener
139
+ */
140
+ export declare function addEventListener(eventName: string, callback: (data: any) => void): () => void;
141
+ /**
142
+ * Add an event listener (legacy method).
143
+ *
144
+ * @param eventName - The name of the event to listen for.
130
145
  */
131
146
  export declare function addListener(eventName: string): void;
132
147
  /**
@@ -155,6 +170,8 @@ declare const _default: {
155
170
  unsubscribeFromCharacteristic: typeof unsubscribeFromCharacteristic;
156
171
  getConnectedDevices: typeof getConnectedDevices;
157
172
  readRSSI: typeof readRSSI;
173
+ addDeviceFoundListener: typeof addDeviceFoundListener;
174
+ addEventListener: typeof addEventListener;
158
175
  addListener: typeof addListener;
159
176
  removeListeners: typeof removeListeners;
160
177
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,oBAAoB,EACpB,SAAS,EACT,WAAW,EACX,WAAW,EACX,mBAAmB,EACpB,MAAM,+BAA+B,CAAA;AAOtC;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IACxC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,oBAAoB,CAAC;CACxC,GAAG,IAAI,CAEP;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,eAAe,EAAE,oBAAoB,GACpC,IAAI,CAEN;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAElE;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,CAEzD;AAID;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAErD;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,OAAO,CAAC,OAAO,CAAC,CAE7D;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAErD;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,IAAI,CAE/B;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAEzE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAAC,mBAAmB,CAAC,CAM9B;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,kBAAkB,EAAE,MAAM,EAC1B,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,OAAO,GAAG,sBAAsB,GAC3C,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,kBAAkB,EAAE,MAAM,GACzB,IAAI,CAMN;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,kBAAkB,EAAE,MAAM,GACzB,IAAI,CAMN;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAEvD;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE1D;AAID;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAEnD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEnD;AAID,YAAY,EACV,oBAAoB,EACpB,SAAS,EACT,WAAW,EACX,WAAW,EACX,mBAAmB,GACpB,CAAA;;;;;;;;;;;;;;;;;;;;;;;AAGD,wBAwBC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "munim-bluetooth",
3
- "version": "0.3.14",
3
+ "version": "0.3.15",
4
4
  "description": "A comprehensive React Native library for all your Bluetooth Low Energy (BLE) needs, supporting both peripheral and central roles with Expo support",
5
5
  "main": "./lib/commonjs/index.js",
6
6
  "module": "./lib/module/index.js",
package/src/index.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { NitroModules } from 'react-native-nitro-modules'
2
+ import { NativeEventEmitter, NativeModules } from 'react-native'
2
3
  import type {
3
4
  MunimBluetooth as MunimBluetoothSpec,
4
5
  AdvertisingDataTypes,
@@ -11,6 +12,16 @@ import type {
11
12
  const MunimBluetooth =
12
13
  NitroModules.createHybridObject<MunimBluetoothSpec>('MunimBluetooth')
13
14
 
15
+ // Event Emitter for Bluetooth events
16
+ const { MunimBluetoothEventEmitter } = NativeModules
17
+ let eventEmitter: NativeEventEmitter | null = null
18
+
19
+ if (MunimBluetoothEventEmitter) {
20
+ eventEmitter = new NativeEventEmitter(MunimBluetoothEventEmitter)
21
+ } else {
22
+ console.warn('[munim-bluetooth] Event emitter not available - device discovery events will not work')
23
+ }
24
+
14
25
  // ========== Peripheral Features ==========
15
26
 
16
27
  /**
@@ -233,10 +244,43 @@ export function readRSSI(deviceId: string): Promise<number> {
233
244
 
234
245
  // ========== Event Management ==========
235
246
 
247
+ /**
248
+ * Add a device found event listener (for scanning).
249
+ *
250
+ * @param callback - Function to call when a device is found
251
+ * @returns A function to remove the listener
252
+ */
253
+ export function addDeviceFoundListener(callback: (device: BLEDevice) => void): () => void {
254
+ if (!eventEmitter) {
255
+ console.warn('[munim-bluetooth] Cannot add listener - event emitter not available')
256
+ return () => {}
257
+ }
258
+
259
+ const subscription = eventEmitter.addListener('deviceFound', callback)
260
+ return () => subscription.remove()
261
+ }
262
+
236
263
  /**
237
264
  * Add an event listener.
238
265
  *
239
266
  * @param eventName - The name of the event to listen for.
267
+ * @param callback - The callback to invoke when the event occurs.
268
+ * @returns A function to remove the listener
269
+ */
270
+ export function addEventListener(eventName: string, callback: (data: any) => void): () => void {
271
+ if (!eventEmitter) {
272
+ console.warn('[munim-bluetooth] Cannot add listener - event emitter not available')
273
+ return () => {}
274
+ }
275
+
276
+ const subscription = eventEmitter.addListener(eventName, callback)
277
+ return () => subscription.remove()
278
+ }
279
+
280
+ /**
281
+ * Add an event listener (legacy method).
282
+ *
283
+ * @param eventName - The name of the event to listen for.
240
284
  */
241
285
  export function addListener(eventName: string): void {
242
286
  return MunimBluetooth.addListener(eventName)
@@ -284,6 +328,8 @@ export default {
284
328
  getConnectedDevices,
285
329
  readRSSI,
286
330
  // Events
331
+ addDeviceFoundListener,
332
+ addEventListener,
287
333
  addListener,
288
334
  removeListeners,
289
335
  }