react-native-ble-nitro 1.0.0-beta.9 → 1.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 (354) hide show
  1. package/BleNitro.podspec +39 -0
  2. package/LICENSE +1 -1
  3. package/README.md +273 -77
  4. package/ios/BleNitroBleManager.swift +426 -458
  5. package/ios/BlePeripheralDelegate.swift +174 -0
  6. package/lib/commonjs/index.d.ts +174 -10
  7. package/lib/commonjs/index.d.ts.map +1 -1
  8. package/lib/commonjs/index.js +461 -38
  9. package/lib/commonjs/index.js.map +1 -1
  10. package/lib/commonjs/specs/NativeBleNitro.d.ts +5 -0
  11. package/lib/commonjs/specs/NativeBleNitro.d.ts.map +1 -0
  12. package/lib/commonjs/{utils/index.js → specs/NativeBleNitro.js} +6 -3
  13. package/lib/commonjs/specs/NativeBleNitro.js.map +1 -0
  14. package/lib/commonjs/specs/NativeBleNitro.nitro.d.ts +69 -0
  15. package/lib/commonjs/specs/NativeBleNitro.nitro.d.ts.map +1 -0
  16. package/lib/commonjs/specs/NativeBleNitro.nitro.js +14 -0
  17. package/lib/commonjs/specs/NativeBleNitro.nitro.js.map +1 -0
  18. package/lib/index.d.ts +174 -10
  19. package/lib/index.js +456 -16
  20. package/lib/specs/NativeBleNitro.d.ts +4 -0
  21. package/lib/specs/NativeBleNitro.js +5 -0
  22. package/lib/specs/NativeBleNitro.nitro.d.ts +68 -0
  23. package/lib/specs/NativeBleNitro.nitro.js +10 -0
  24. package/nitro.json +1 -1
  25. package/nitrogen/generated/android/BleNitro+autolinking.cmake +2 -10
  26. package/nitrogen/generated/android/BleNitroOnLoad.cpp +25 -22
  27. package/nitrogen/generated/android/c++/JBLEDevice.hpp +95 -0
  28. package/nitrogen/generated/android/c++/{JState.hpp → JBLEState.hpp} +22 -22
  29. package/nitrogen/generated/android/c++/JFunc_void_BLEDevice.hpp +82 -0
  30. package/nitrogen/generated/android/c++/JFunc_void_BLEState.hpp +76 -0
  31. package/nitrogen/generated/android/c++/JFunc_void_bool.hpp +74 -0
  32. package/nitrogen/generated/android/c++/JFunc_void_bool_std__string.hpp +75 -0
  33. package/nitrogen/generated/android/c++/JFunc_void_bool_std__string_std__string.hpp +75 -0
  34. package/nitrogen/generated/android/c++/JFunc_void_bool_std__vector_double__std__string.hpp +86 -0
  35. package/nitrogen/generated/android/c++/JFunc_void_std__string_bool_std__string.hpp +75 -0
  36. package/nitrogen/generated/android/c++/JFunc_void_std__string_std__vector_double_.hpp +86 -0
  37. package/nitrogen/generated/android/c++/JFunc_void_std__vector_BLEDevice_.hpp +99 -0
  38. package/nitrogen/generated/android/c++/JFunc_void_std__vector_std__string_.hpp +93 -0
  39. package/nitrogen/generated/android/c++/JHybridNativeBleNitroSpec.cpp +171 -0
  40. package/nitrogen/generated/android/c++/JHybridNativeBleNitroSpec.hpp +83 -0
  41. package/nitrogen/generated/android/c++/JManufacturerData.hpp +73 -0
  42. package/nitrogen/generated/android/c++/JManufacturerDataEntry.hpp +68 -0
  43. package/nitrogen/generated/android/c++/JScanFilter.hpp +79 -0
  44. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/BLEDevice.kt +44 -0
  45. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/{LogLevel.kt → BLEState.kt} +9 -13
  46. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/{Func_void_std__optional_NativeBleError__std__optional_NativeDevice_.kt → Func_void_BLEDevice.kt} +15 -14
  47. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/{Func_void.kt → Func_void_BLEState.kt} +15 -14
  48. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/{Func_void_State.kt → Func_void_bool.kt} +15 -14
  49. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/{Func_void_std__optional_NativeBleError__std__optional_NativeCharacteristic_.kt → Func_void_bool_std__string.kt} +15 -14
  50. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/Func_void_bool_std__string_std__string.kt +81 -0
  51. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/Func_void_bool_std__vector_double__std__string.kt +81 -0
  52. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/Func_void_std__string_bool_std__string.kt +81 -0
  53. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/Func_void_std__string_std__vector_double_.kt +81 -0
  54. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/Func_void_std__vector_BLEDevice_.kt +81 -0
  55. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/Func_void_std__vector_std__string_.kt +81 -0
  56. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/HybridNativeBleNitroSpec.kt +223 -0
  57. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/{ServiceDataEntry.kt → ManufacturerData.kt} +7 -5
  58. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/{ConnectionOptions.kt → ManufacturerDataEntry.kt} +10 -6
  59. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/{NativeService.kt → ScanFilter.kt} +13 -7
  60. package/nitrogen/generated/ios/BleNitro-Swift-Cxx-Bridge.cpp +67 -175
  61. package/nitrogen/generated/ios/BleNitro-Swift-Cxx-Bridge.hpp +205 -867
  62. package/nitrogen/generated/ios/BleNitro-Swift-Cxx-Umbrella.hpp +20 -88
  63. package/nitrogen/generated/ios/BleNitroAutolinking.mm +3 -3
  64. package/nitrogen/generated/ios/BleNitroAutolinking.swift +4 -4
  65. package/nitrogen/generated/ios/c++/{HybridCharacteristicSpecSwift.cpp → HybridNativeBleNitroSpecSwift.cpp} +2 -2
  66. package/nitrogen/generated/ios/c++/HybridNativeBleNitroSpecSwift.hpp +205 -0
  67. package/nitrogen/generated/ios/swift/BLEDevice.swift +102 -0
  68. package/nitrogen/generated/ios/swift/{State.swift → BLEState.swift} +6 -6
  69. package/nitrogen/generated/ios/swift/Func_void.swift +1 -0
  70. package/nitrogen/generated/ios/swift/{Func_void_State.swift → Func_void_BLEDevice.swift} +12 -11
  71. package/nitrogen/generated/ios/swift/{Func_void_LogLevel.swift → Func_void_BLEState.swift} +12 -11
  72. package/nitrogen/generated/ios/swift/Func_void_bool.swift +6 -5
  73. package/nitrogen/generated/ios/swift/{Func_void_NativeDescriptor.swift → Func_void_bool_std__string.swift} +12 -11
  74. package/nitrogen/generated/ios/swift/{Func_void_std__vector_NativeCharacteristic_.swift → Func_void_bool_std__string_std__string.swift} +12 -11
  75. package/nitrogen/generated/ios/swift/Func_void_bool_std__vector_double__std__string.swift +47 -0
  76. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +1 -0
  77. package/nitrogen/generated/ios/swift/{Func_void_NativeDevice.swift → Func_void_std__string_bool_std__string.swift} +12 -11
  78. package/nitrogen/generated/ios/swift/{Func_void_std__optional_BleRestoredState_.swift → Func_void_std__string_std__vector_double_.swift} +12 -17
  79. package/nitrogen/generated/ios/swift/{Func_void_NativeCharacteristic.swift → Func_void_std__vector_BLEDevice_.swift} +12 -11
  80. package/nitrogen/generated/ios/swift/{Func_void_std__vector_NativeDevice_.swift → Func_void_std__vector_std__string_.swift} +12 -11
  81. package/nitrogen/generated/ios/swift/HybridNativeBleNitroSpec.swift +68 -0
  82. package/nitrogen/generated/ios/swift/HybridNativeBleNitroSpec_cxx.swift +485 -0
  83. package/nitrogen/generated/ios/swift/ManufacturerData.swift +47 -0
  84. package/nitrogen/generated/ios/swift/ManufacturerDataEntry.swift +58 -0
  85. package/nitrogen/generated/ios/swift/ScanFilter.swift +69 -0
  86. package/nitrogen/generated/shared/c++/BLEDevice.hpp +90 -0
  87. package/nitrogen/generated/shared/c++/{State.hpp → BLEState.hpp} +13 -15
  88. package/nitrogen/generated/shared/c++/HybridNativeBleNitroSpec.cpp +40 -0
  89. package/nitrogen/generated/shared/c++/HybridNativeBleNitroSpec.hpp +93 -0
  90. package/nitrogen/generated/shared/c++/ManufacturerData.hpp +69 -0
  91. package/nitrogen/generated/shared/c++/{ServiceDataEntry.hpp → ManufacturerDataEntry.hpp} +19 -20
  92. package/nitrogen/generated/shared/c++/ScanFilter.hpp +76 -0
  93. package/package.json +9 -11
  94. package/react-native.config.js +2 -7
  95. package/src/__tests__/index.test.ts +188 -0
  96. package/src/index.ts +604 -45
  97. package/src/specs/NativeBleNitro.nitro.ts +84 -0
  98. package/src/specs/NativeBleNitro.ts +8 -0
  99. package/android/build.gradle +0 -58
  100. package/android/src/main/AndroidManifest.xml +0 -23
  101. package/android/src/main/kotlin/com/margelo/nitro/co/zyke/ble/BleNitroBleManager.kt +0 -760
  102. package/ios/BleNitro.podspec +0 -44
  103. package/ios/BleNitroModule.swift +0 -24
  104. package/lib/BleManagerCompatFactory.d.ts +0 -55
  105. package/lib/BleManagerCompatFactory.js +0 -194
  106. package/lib/BleManagerFactory.d.ts +0 -30
  107. package/lib/BleManagerFactory.js +0 -73
  108. package/lib/commonjs/BleManagerCompatFactory.d.ts +0 -56
  109. package/lib/commonjs/BleManagerCompatFactory.d.ts.map +0 -1
  110. package/lib/commonjs/BleManagerCompatFactory.js +0 -201
  111. package/lib/commonjs/BleManagerCompatFactory.js.map +0 -1
  112. package/lib/commonjs/BleManagerFactory.d.ts +0 -31
  113. package/lib/commonjs/BleManagerFactory.d.ts.map +0 -1
  114. package/lib/commonjs/BleManagerFactory.js +0 -81
  115. package/lib/commonjs/BleManagerFactory.js.map +0 -1
  116. package/lib/commonjs/compatibility/constants.d.ts +0 -50
  117. package/lib/commonjs/compatibility/constants.d.ts.map +0 -1
  118. package/lib/commonjs/compatibility/constants.js +0 -58
  119. package/lib/commonjs/compatibility/constants.js.map +0 -1
  120. package/lib/commonjs/compatibility/deviceWrapper.d.ts +0 -100
  121. package/lib/commonjs/compatibility/deviceWrapper.d.ts.map +0 -1
  122. package/lib/commonjs/compatibility/deviceWrapper.js +0 -268
  123. package/lib/commonjs/compatibility/deviceWrapper.js.map +0 -1
  124. package/lib/commonjs/compatibility/enums.d.ts +0 -39
  125. package/lib/commonjs/compatibility/enums.d.ts.map +0 -1
  126. package/lib/commonjs/compatibility/enums.js +0 -179
  127. package/lib/commonjs/compatibility/enums.js.map +0 -1
  128. package/lib/commonjs/compatibility/index.d.ts +0 -13
  129. package/lib/commonjs/compatibility/index.d.ts.map +0 -1
  130. package/lib/commonjs/compatibility/index.js +0 -41
  131. package/lib/commonjs/compatibility/index.js.map +0 -1
  132. package/lib/commonjs/compatibility/serviceData.d.ts +0 -52
  133. package/lib/commonjs/compatibility/serviceData.d.ts.map +0 -1
  134. package/lib/commonjs/compatibility/serviceData.js +0 -80
  135. package/lib/commonjs/compatibility/serviceData.js.map +0 -1
  136. package/lib/commonjs/errors/BleError.d.ts +0 -60
  137. package/lib/commonjs/errors/BleError.d.ts.map +0 -1
  138. package/lib/commonjs/errors/BleError.js +0 -125
  139. package/lib/commonjs/errors/BleError.js.map +0 -1
  140. package/lib/commonjs/specs/BleManager.nitro.d.ts +0 -45
  141. package/lib/commonjs/specs/BleManager.nitro.d.ts.map +0 -1
  142. package/lib/commonjs/specs/BleManager.nitro.js +0 -3
  143. package/lib/commonjs/specs/BleManager.nitro.js.map +0 -1
  144. package/lib/commonjs/specs/Characteristic.nitro.d.ts +0 -27
  145. package/lib/commonjs/specs/Characteristic.nitro.d.ts.map +0 -1
  146. package/lib/commonjs/specs/Characteristic.nitro.js +0 -3
  147. package/lib/commonjs/specs/Characteristic.nitro.js.map +0 -1
  148. package/lib/commonjs/specs/Descriptor.nitro.d.ts +0 -18
  149. package/lib/commonjs/specs/Descriptor.nitro.d.ts.map +0 -1
  150. package/lib/commonjs/specs/Descriptor.nitro.js +0 -3
  151. package/lib/commonjs/specs/Descriptor.nitro.js.map +0 -1
  152. package/lib/commonjs/specs/Device.nitro.d.ts +0 -38
  153. package/lib/commonjs/specs/Device.nitro.d.ts.map +0 -1
  154. package/lib/commonjs/specs/Device.nitro.js +0 -3
  155. package/lib/commonjs/specs/Device.nitro.js.map +0 -1
  156. package/lib/commonjs/specs/Service.nitro.d.ts +0 -20
  157. package/lib/commonjs/specs/Service.nitro.d.ts.map +0 -1
  158. package/lib/commonjs/specs/Service.nitro.js +0 -3
  159. package/lib/commonjs/specs/Service.nitro.js.map +0 -1
  160. package/lib/commonjs/specs/types.d.ts +0 -229
  161. package/lib/commonjs/specs/types.d.ts.map +0 -1
  162. package/lib/commonjs/specs/types.js +0 -150
  163. package/lib/commonjs/specs/types.js.map +0 -1
  164. package/lib/commonjs/utils/base64.d.ts +0 -26
  165. package/lib/commonjs/utils/base64.d.ts.map +0 -1
  166. package/lib/commonjs/utils/base64.js +0 -88
  167. package/lib/commonjs/utils/base64.js.map +0 -1
  168. package/lib/commonjs/utils/index.d.ts +0 -3
  169. package/lib/commonjs/utils/index.d.ts.map +0 -1
  170. package/lib/commonjs/utils/index.js.map +0 -1
  171. package/lib/commonjs/utils/uuid.d.ts +0 -10
  172. package/lib/commonjs/utils/uuid.d.ts.map +0 -1
  173. package/lib/commonjs/utils/uuid.js +0 -41
  174. package/lib/commonjs/utils/uuid.js.map +0 -1
  175. package/lib/compatibility/constants.d.ts +0 -49
  176. package/lib/compatibility/constants.js +0 -50
  177. package/lib/compatibility/deviceWrapper.d.ts +0 -99
  178. package/lib/compatibility/deviceWrapper.js +0 -259
  179. package/lib/compatibility/enums.d.ts +0 -38
  180. package/lib/compatibility/enums.js +0 -159
  181. package/lib/compatibility/index.d.ts +0 -12
  182. package/lib/compatibility/index.js +0 -12
  183. package/lib/compatibility/serviceData.d.ts +0 -51
  184. package/lib/compatibility/serviceData.js +0 -70
  185. package/lib/errors/BleError.d.ts +0 -59
  186. package/lib/errors/BleError.js +0 -120
  187. package/lib/specs/BleManager.nitro.d.ts +0 -44
  188. package/lib/specs/BleManager.nitro.js +0 -1
  189. package/lib/specs/Characteristic.nitro.d.ts +0 -26
  190. package/lib/specs/Characteristic.nitro.js +0 -1
  191. package/lib/specs/Descriptor.nitro.d.ts +0 -17
  192. package/lib/specs/Descriptor.nitro.js +0 -1
  193. package/lib/specs/Device.nitro.d.ts +0 -37
  194. package/lib/specs/Device.nitro.js +0 -1
  195. package/lib/specs/Service.nitro.d.ts +0 -19
  196. package/lib/specs/Service.nitro.js +0 -1
  197. package/lib/specs/types.d.ts +0 -228
  198. package/lib/specs/types.js +0 -146
  199. package/lib/utils/base64.d.ts +0 -25
  200. package/lib/utils/base64.js +0 -80
  201. package/lib/utils/index.d.ts +0 -2
  202. package/lib/utils/index.js +0 -2
  203. package/lib/utils/uuid.d.ts +0 -9
  204. package/lib/utils/uuid.js +0 -37
  205. package/nitrogen/generated/android/c++/JBleATTErrorCode.hpp +0 -107
  206. package/nitrogen/generated/android/c++/JBleAndroidErrorCode.hpp +0 -101
  207. package/nitrogen/generated/android/c++/JBleErrorCode.hpp +0 -170
  208. package/nitrogen/generated/android/c++/JBleIOSErrorCode.hpp +0 -92
  209. package/nitrogen/generated/android/c++/JBleManagerNitroOptions.hpp +0 -54
  210. package/nitrogen/generated/android/c++/JBleRestoredState.hpp +0 -76
  211. package/nitrogen/generated/android/c++/JCharacteristicSubscriptionType.hpp +0 -59
  212. package/nitrogen/generated/android/c++/JConnectionOptions.hpp +0 -61
  213. package/nitrogen/generated/android/c++/JConnectionPriority.hpp +0 -62
  214. package/nitrogen/generated/android/c++/JFunc_void.hpp +0 -74
  215. package/nitrogen/generated/android/c++/JFunc_void_State.hpp +0 -76
  216. package/nitrogen/generated/android/c++/JFunc_void_std__optional_NativeBleError__std__optional_NativeCharacteristic_.hpp +0 -88
  217. package/nitrogen/generated/android/c++/JFunc_void_std__optional_NativeBleError__std__optional_NativeDevice_.hpp +0 -91
  218. package/nitrogen/generated/android/c++/JHybridBleManagerSpec.cpp +0 -653
  219. package/nitrogen/generated/android/c++/JHybridBleManagerSpec.hpp +0 -92
  220. package/nitrogen/generated/android/c++/JHybridCharacteristicSpec.cpp +0 -253
  221. package/nitrogen/generated/android/c++/JHybridCharacteristicSpec.hpp +0 -79
  222. package/nitrogen/generated/android/c++/JHybridDescriptorSpec.cpp +0 -115
  223. package/nitrogen/generated/android/c++/JHybridDescriptorSpec.hpp +0 -70
  224. package/nitrogen/generated/android/c++/JHybridDeviceSpec.cpp +0 -476
  225. package/nitrogen/generated/android/c++/JHybridDeviceSpec.hpp +0 -90
  226. package/nitrogen/generated/android/c++/JHybridServiceSpec.cpp +0 -232
  227. package/nitrogen/generated/android/c++/JHybridServiceSpec.hpp +0 -72
  228. package/nitrogen/generated/android/c++/JLogLevel.hpp +0 -71
  229. package/nitrogen/generated/android/c++/JNativeBleError.hpp +0 -98
  230. package/nitrogen/generated/android/c++/JNativeCharacteristic.hpp +0 -98
  231. package/nitrogen/generated/android/c++/JNativeDescriptor.hpp +0 -82
  232. package/nitrogen/generated/android/c++/JNativeDevice.hpp +0 -173
  233. package/nitrogen/generated/android/c++/JNativeService.hpp +0 -65
  234. package/nitrogen/generated/android/c++/JScanCallbackType.hpp +0 -62
  235. package/nitrogen/generated/android/c++/JScanMode.hpp +0 -65
  236. package/nitrogen/generated/android/c++/JScanOptions.hpp +0 -69
  237. package/nitrogen/generated/android/c++/JServiceDataEntry.hpp +0 -57
  238. package/nitrogen/generated/android/c++/JSubscription.hpp +0 -64
  239. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/BleATTErrorCode.kt +0 -41
  240. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/BleAndroidErrorCode.kt +0 -39
  241. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/BleErrorCode.kt +0 -62
  242. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/BleIOSErrorCode.kt +0 -36
  243. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/BleManagerNitroOptions.kt +0 -26
  244. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/BleRestoredState.kt +0 -26
  245. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/CharacteristicSubscriptionType.kt +0 -25
  246. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/ConnectionPriority.kt +0 -26
  247. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/HybridBleManagerSpec.kt +0 -192
  248. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/HybridCharacteristicSpec.kt +0 -127
  249. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/HybridDescriptorSpec.kt +0 -86
  250. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/HybridDeviceSpec.kt +0 -176
  251. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/HybridServiceSpec.kt +0 -99
  252. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/NativeBleError.kt +0 -35
  253. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/NativeCharacteristic.kt +0 -37
  254. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/NativeDescriptor.kt +0 -33
  255. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/NativeDevice.kt +0 -38
  256. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/ScanCallbackType.kt +0 -26
  257. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/ScanMode.kt +0 -27
  258. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/ScanOptions.kt +0 -29
  259. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/State.kt +0 -29
  260. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/Subscription.kt +0 -30
  261. package/nitrogen/generated/ios/c++/HybridBleManagerSpecSwift.cpp +0 -11
  262. package/nitrogen/generated/ios/c++/HybridBleManagerSpecSwift.hpp +0 -377
  263. package/nitrogen/generated/ios/c++/HybridCharacteristicSpecSwift.hpp +0 -192
  264. package/nitrogen/generated/ios/c++/HybridDescriptorSpecSwift.cpp +0 -11
  265. package/nitrogen/generated/ios/c++/HybridDescriptorSpecSwift.hpp +0 -112
  266. package/nitrogen/generated/ios/c++/HybridDeviceSpecSwift.cpp +0 -11
  267. package/nitrogen/generated/ios/c++/HybridDeviceSpecSwift.hpp +0 -294
  268. package/nitrogen/generated/ios/c++/HybridServiceSpecSwift.cpp +0 -11
  269. package/nitrogen/generated/ios/c++/HybridServiceSpecSwift.hpp +0 -170
  270. package/nitrogen/generated/ios/swift/BleATTErrorCode.swift +0 -104
  271. package/nitrogen/generated/ios/swift/BleAndroidErrorCode.swift +0 -96
  272. package/nitrogen/generated/ios/swift/BleErrorCode.swift +0 -188
  273. package/nitrogen/generated/ios/swift/BleIOSErrorCode.swift +0 -84
  274. package/nitrogen/generated/ios/swift/BleManagerNitroOptions.swift +0 -53
  275. package/nitrogen/generated/ios/swift/BleRestoredState.swift +0 -47
  276. package/nitrogen/generated/ios/swift/CharacteristicSubscriptionType.swift +0 -40
  277. package/nitrogen/generated/ios/swift/ConnectionOptions.swift +0 -57
  278. package/nitrogen/generated/ios/swift/ConnectionPriority.swift +0 -44
  279. package/nitrogen/generated/ios/swift/Func_void_std__optional_NativeBleError__std__optional_NativeCharacteristic_.swift +0 -58
  280. package/nitrogen/generated/ios/swift/Func_void_std__optional_NativeBleError__std__optional_NativeDevice_.swift +0 -58
  281. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_margelo__nitro__co__zyke__ble__HybridCharacteristicSpec_.swift +0 -50
  282. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_margelo__nitro__co__zyke__ble__HybridDescriptorSpec_.swift +0 -50
  283. package/nitrogen/generated/ios/swift/Func_void_std__vector_NativeDescriptor_.swift +0 -46
  284. package/nitrogen/generated/ios/swift/Func_void_std__vector_NativeService_.swift +0 -46
  285. package/nitrogen/generated/ios/swift/HybridBleManagerSpec.swift +0 -78
  286. package/nitrogen/generated/ios/swift/HybridBleManagerSpec_cxx.swift +0 -852
  287. package/nitrogen/generated/ios/swift/HybridCharacteristicSpec.swift +0 -65
  288. package/nitrogen/generated/ios/swift/HybridCharacteristicSpec_cxx.swift +0 -384
  289. package/nitrogen/generated/ios/swift/HybridDescriptorSpec.swift +0 -56
  290. package/nitrogen/generated/ios/swift/HybridDescriptorSpec_cxx.swift +0 -218
  291. package/nitrogen/generated/ios/swift/HybridDeviceSpec.swift +0 -76
  292. package/nitrogen/generated/ios/swift/HybridDeviceSpec_cxx.swift +0 -702
  293. package/nitrogen/generated/ios/swift/HybridServiceSpec.swift +0 -58
  294. package/nitrogen/generated/ios/swift/HybridServiceSpec_cxx.swift +0 -338
  295. package/nitrogen/generated/ios/swift/LogLevel.swift +0 -56
  296. package/nitrogen/generated/ios/swift/NativeBleError.swift +0 -278
  297. package/nitrogen/generated/ios/swift/NativeCharacteristic.swift +0 -174
  298. package/nitrogen/generated/ios/swift/NativeDescriptor.swift +0 -130
  299. package/nitrogen/generated/ios/swift/NativeDevice.swift +0 -377
  300. package/nitrogen/generated/ios/swift/NativeService.swift +0 -68
  301. package/nitrogen/generated/ios/swift/ScanCallbackType.swift +0 -44
  302. package/nitrogen/generated/ios/swift/ScanMode.swift +0 -48
  303. package/nitrogen/generated/ios/swift/ScanOptions.swift +0 -116
  304. package/nitrogen/generated/ios/swift/ServiceDataEntry.swift +0 -46
  305. package/nitrogen/generated/ios/swift/Subscription.swift +0 -46
  306. package/nitrogen/generated/shared/c++/BleATTErrorCode.hpp +0 -80
  307. package/nitrogen/generated/shared/c++/BleAndroidErrorCode.hpp +0 -78
  308. package/nitrogen/generated/shared/c++/BleErrorCode.hpp +0 -101
  309. package/nitrogen/generated/shared/c++/BleIOSErrorCode.hpp +0 -75
  310. package/nitrogen/generated/shared/c++/BleManagerNitroOptions.hpp +0 -70
  311. package/nitrogen/generated/shared/c++/BleRestoredState.hpp +0 -71
  312. package/nitrogen/generated/shared/c++/CharacteristicSubscriptionType.hpp +0 -64
  313. package/nitrogen/generated/shared/c++/ConnectionOptions.hpp +0 -77
  314. package/nitrogen/generated/shared/c++/ConnectionPriority.hpp +0 -65
  315. package/nitrogen/generated/shared/c++/HybridBleManagerSpec.cpp +0 -51
  316. package/nitrogen/generated/shared/c++/HybridBleManagerSpec.hpp +0 -137
  317. package/nitrogen/generated/shared/c++/HybridCharacteristicSpec.cpp +0 -39
  318. package/nitrogen/generated/shared/c++/HybridCharacteristicSpec.hpp +0 -101
  319. package/nitrogen/generated/shared/c++/HybridDescriptorSpec.cpp +0 -30
  320. package/nitrogen/generated/shared/c++/HybridDescriptorSpec.hpp +0 -75
  321. package/nitrogen/generated/shared/c++/HybridDeviceSpec.cpp +0 -50
  322. package/nitrogen/generated/shared/c++/HybridDeviceSpec.hpp +0 -123
  323. package/nitrogen/generated/shared/c++/HybridServiceSpec.cpp +0 -32
  324. package/nitrogen/generated/shared/c++/HybridServiceSpec.hpp +0 -90
  325. package/nitrogen/generated/shared/c++/LogLevel.hpp +0 -68
  326. package/nitrogen/generated/shared/c++/NativeBleError.hpp +0 -117
  327. package/nitrogen/generated/shared/c++/NativeCharacteristic.hpp +0 -114
  328. package/nitrogen/generated/shared/c++/NativeDescriptor.hpp +0 -98
  329. package/nitrogen/generated/shared/c++/NativeDevice.hpp +0 -121
  330. package/nitrogen/generated/shared/c++/NativeService.hpp +0 -81
  331. package/nitrogen/generated/shared/c++/ScanCallbackType.hpp +0 -65
  332. package/nitrogen/generated/shared/c++/ScanMode.hpp +0 -66
  333. package/nitrogen/generated/shared/c++/ScanOptions.hpp +0 -86
  334. package/nitrogen/generated/shared/c++/Subscription.hpp +0 -69
  335. package/src/BleManagerCompatFactory.ts +0 -371
  336. package/src/BleManagerFactory.ts +0 -93
  337. package/src/__tests__/BleManager.test.ts +0 -327
  338. package/src/__tests__/compatibility/deviceWrapper.test.ts +0 -563
  339. package/src/__tests__/compatibility/enums.test.ts +0 -264
  340. package/src/compatibility/constants.ts +0 -71
  341. package/src/compatibility/deviceWrapper.ts +0 -427
  342. package/src/compatibility/enums.ts +0 -190
  343. package/src/compatibility/index.ts +0 -32
  344. package/src/compatibility/serviceData.ts +0 -85
  345. package/src/errors/BleError.ts +0 -193
  346. package/src/specs/BleManager.nitro.ts +0 -165
  347. package/src/specs/Characteristic.nitro.ts +0 -61
  348. package/src/specs/Descriptor.nitro.ts +0 -28
  349. package/src/specs/Device.nitro.ts +0 -104
  350. package/src/specs/Service.nitro.ts +0 -64
  351. package/src/specs/types.ts +0 -259
  352. package/src/utils/base64.ts +0 -80
  353. package/src/utils/index.ts +0 -2
  354. package/src/utils/uuid.ts +0 -45
package/src/index.ts CHANGED
@@ -1,45 +1,604 @@
1
- // Export compatibility layer types and constants
2
- export * from './compatibility/constants';
3
-
4
- // Export utility functions
5
- export * from './utils/index';
6
-
7
- // Export the main BleManager instance with compatibility wrapper
8
- export { BleManagerCompat as BleManager, createBleManagerCompat as createBleManager } from './BleManagerCompatFactory';
9
-
10
- // Export BleManager factory utilities (for internal use by error handling)
11
- export { getCustomErrorMessage, getStoredCallbacks } from './BleManagerFactory';
12
-
13
- // Export error handling utilities
14
- export * from './errors/BleError';
15
-
16
- // Export device wrapper for compatibility
17
- export { DeviceWrapper as Device } from './compatibility/deviceWrapper';
18
-
19
- // Export interfaces for TypeScript (but not runtime values)
20
- export type {
21
- BleManagerOptions,
22
- ScanOptions,
23
- ConnectionOptions,
24
- NativeBleError,
25
- NativeDevice,
26
- NativeService,
27
- NativeCharacteristic,
28
- NativeDescriptor,
29
- Subscription
30
- } from './specs/types';
31
-
32
- // Export react-native-ble-plx compatible enum types (drop-in replacement)
33
- export {
34
- State,
35
- LogLevel
36
- } from './compatibility/enums';
37
-
38
- // Export react-native-ble-plx compatible type literals (drop-in replacement)
39
- export type {
40
- CharacteristicSubscriptionType,
41
- RefreshGattMoment
42
- } from './compatibility/enums';
43
-
44
- // Re-export react-native-ble-plx compatible API
45
- export { fullUUID } from './utils/uuid';
1
+ import BleNitroNative from './specs/NativeBleNitro';
2
+ import {
3
+ ScanFilter as NativeScanFilter,
4
+ BLEDevice as NativeBLEDevice,
5
+ BLEState as NativeBLEState,
6
+ } from './specs/NativeBleNitro';
7
+
8
+ export interface ScanFilter {
9
+ serviceUUIDs?: string[];
10
+ rssiThreshold?: number;
11
+ allowDuplicates?: boolean;
12
+ }
13
+
14
+ export interface ManufacturerDataEntry {
15
+ id: string;
16
+ data: number[];
17
+ }
18
+
19
+ export interface ManufacturerData {
20
+ companyIdentifiers: ManufacturerDataEntry[];
21
+ }
22
+
23
+ export interface BLEDevice {
24
+ id: string;
25
+ name: string;
26
+ rssi: number;
27
+ manufacturerData: ManufacturerData;
28
+ serviceUUIDs: string[];
29
+ isConnectable: boolean;
30
+ }
31
+
32
+ export type ScanCallback = (device: BLEDevice) => void;
33
+ export type ConnectionCallback = (
34
+ success: boolean,
35
+ deviceId: string,
36
+ error: string
37
+ ) => void;
38
+ export type DisconnectEventCallback = (
39
+ deviceId: string,
40
+ interrupted: boolean,
41
+ error: string
42
+ ) => void;
43
+ export type OperationCallback = (success: boolean, error: string) => void;
44
+ export type CharacteristicUpdateCallback = (
45
+ characteristicId: string,
46
+ data: number[]
47
+ ) => void;
48
+
49
+ export type Subscription = {
50
+ remove: () => Promise<void>;
51
+ };
52
+
53
+ export enum BLEState {
54
+ Unknown = 'Unknown',
55
+ Resetting = 'Resetting',
56
+ Unsupported = 'Unsupported',
57
+ Unauthorized = 'Unauthorized',
58
+ PoweredOff = 'PoweredOff',
59
+ PoweredOn = 'PoweredOn',
60
+ };
61
+
62
+ function mapNativeBLEStateToBLEState(nativeState: NativeBLEState): BLEState {
63
+ const map = {
64
+ 0: BLEState.Unknown,
65
+ 1: BLEState.Resetting,
66
+ 2: BLEState.Unsupported,
67
+ 3: BLEState.Unauthorized,
68
+ 4: BLEState.PoweredOff,
69
+ 5: BLEState.PoweredOn,
70
+ };
71
+ return map[nativeState];
72
+ }
73
+
74
+ let _instance: BleNitro;
75
+
76
+ export class BleNitro {
77
+ private _isScanning: boolean = false;
78
+ private _connectedDevices: { [deviceId: string]: boolean } = {};
79
+
80
+ public static instance(): BleNitro {
81
+ if (!_instance) {
82
+ _instance = new BleNitro();
83
+ }
84
+ return _instance;
85
+ }
86
+
87
+ /**
88
+ * Converts a 16- oder 32-Bit UUID to a 128-Bit UUID
89
+ *
90
+ * @param uuid 16-, 32- or 128-Bit UUID as string
91
+ * @returns Full 128-Bit UUID
92
+ */
93
+ public static normalizeGattUUID(uuid: string): string {
94
+ const cleanUuid = uuid.toLowerCase();
95
+
96
+ // 128-Bit UUID → normalisieren
97
+ if (cleanUuid.length === 36 && cleanUuid.includes("-")) {
98
+ return cleanUuid;
99
+ }
100
+
101
+ // GATT-Service UUIDs
102
+ // 16- oder 32-Bit UUID → 128-Bit UUID
103
+ const padded = cleanUuid.padStart(8, "0");
104
+ return `${padded}-0000-1000-8000-00805f9b34fb`;
105
+ }
106
+
107
+ public static normalizeGattUUIDs(uuids: string[]): string[] {
108
+ return uuids.map((uuid) => BleNitro.normalizeGattUUID(uuid));
109
+ }
110
+
111
+ /**
112
+ * Start scanning for Bluetooth devices
113
+ * @param filter Optional scan filter
114
+ * @param callback Callback function called when a device is found
115
+ * @returns Promise resolving to success state
116
+ */
117
+ public startScan(
118
+ filter: ScanFilter = {},
119
+ callback: ScanCallback
120
+ ): Promise<boolean> {
121
+ return new Promise((resolve) => {
122
+ // Don't start scanning if already scanning
123
+ if (this._isScanning) {
124
+ resolve(true);
125
+ return;
126
+ }
127
+
128
+ // Create native scan filter with defaults
129
+ const nativeFilter: NativeScanFilter = {
130
+ serviceUUIDs: filter.serviceUUIDs || [],
131
+ rssiThreshold: filter.rssiThreshold ?? -100,
132
+ allowDuplicates: filter.allowDuplicates ?? false,
133
+ };
134
+
135
+ // Create callback wrapper
136
+ const scanCallback = (device: NativeBLEDevice) => {
137
+ device.serviceUUIDs = BleNitro.normalizeGattUUIDs(device.serviceUUIDs);
138
+ callback(device);
139
+ };
140
+
141
+ // Start scan
142
+ BleNitroNative.startScan(nativeFilter, scanCallback);
143
+ this._isScanning = true;
144
+ resolve(true);
145
+ });
146
+ }
147
+
148
+ /**
149
+ * Stop scanning for Bluetooth devices
150
+ * @returns Promise resolving to success state
151
+ */
152
+ public stopScan(): Promise<boolean> {
153
+ return new Promise((resolve, reject) => {
154
+ // Don't stop scanning if not scanning
155
+ if (!this._isScanning) {
156
+ resolve(true);
157
+ return;
158
+ }
159
+
160
+ BleNitroNative.stopScan((success: boolean, error: string) => {
161
+ if (success) {
162
+ this._isScanning = false;
163
+ resolve(true);
164
+ } else {
165
+ reject(new Error(error));
166
+ }
167
+ });
168
+ });
169
+ }
170
+
171
+ /**
172
+ * Check if currently scanning for devices
173
+ * @returns Promise resolving to scanning state
174
+ */
175
+ public isScanning(): Promise<boolean> {
176
+ return new Promise((resolve) => {
177
+ BleNitroNative.isScanning((scanning: boolean) => {
178
+ this._isScanning = scanning;
179
+ resolve(scanning);
180
+ });
181
+ });
182
+ }
183
+
184
+ /**
185
+ * Get all currently connected devices
186
+ * @returns Promise resolving to array of connected devices
187
+ */
188
+ public getConnectedDevices(): Promise<BLEDevice[]> {
189
+ return new Promise((resolve) => {
190
+ BleNitroNative.getConnectedDevices((devices: BLEDevice[]) => {
191
+ // Normalize service UUIDs for connected devices
192
+ const normalizedDevices = devices.map(device => ({
193
+ ...device,
194
+ serviceUUIDs: BleNitro.normalizeGattUUIDs(device.serviceUUIDs)
195
+ }));
196
+ resolve(normalizedDevices);
197
+ });
198
+ });
199
+ }
200
+
201
+ /**
202
+ * Connect to a Bluetooth device
203
+ * @param deviceId ID of the device to connect to
204
+ * @param onDisconnect Optional callback for disconnect events
205
+ * @returns Promise resolving when connected
206
+ */
207
+ public connect(
208
+ deviceId: string,
209
+ onDisconnect?: DisconnectEventCallback
210
+ ): Promise<string> {
211
+ return new Promise((resolve, reject) => {
212
+ // Check if already connected
213
+ if (this._connectedDevices[deviceId]) {
214
+ resolve(deviceId);
215
+ return;
216
+ }
217
+
218
+ BleNitroNative.connect(
219
+ deviceId,
220
+ (success: boolean, connectedDeviceId: string, error: string) => {
221
+ if (success) {
222
+ this._connectedDevices[deviceId] = true;
223
+ resolve(connectedDeviceId);
224
+ } else {
225
+ reject(new Error(error));
226
+ }
227
+ },
228
+ onDisconnect ? (deviceId: string, interrupted: boolean, error: string) => {
229
+ // Remove from connected devices when disconnected
230
+ delete this._connectedDevices[deviceId];
231
+ onDisconnect(deviceId, interrupted, error);
232
+ } : undefined
233
+ );
234
+ });
235
+ }
236
+
237
+ /**
238
+ * Disconnect from a Bluetooth device
239
+ * @param deviceId ID of the device to disconnect from
240
+ * @returns Promise resolving when disconnected
241
+ */
242
+ public disconnect(deviceId: string): Promise<boolean> {
243
+ return new Promise((resolve, reject) => {
244
+ // Check if already disconnected
245
+ if (!this._connectedDevices[deviceId]) {
246
+ resolve(true);
247
+ return;
248
+ }
249
+
250
+ BleNitroNative.disconnect(
251
+ deviceId,
252
+ (success: boolean, error: string) => {
253
+ if (success) {
254
+ delete this._connectedDevices[deviceId];
255
+ resolve(true);
256
+ } else {
257
+ reject(new Error(error));
258
+ }
259
+ }
260
+ );
261
+ });
262
+ }
263
+
264
+ /**
265
+ * Check if connected to a device
266
+ * @param deviceId ID of the device to check
267
+ * @returns Promise resolving to connection state
268
+ */
269
+ public isConnected(deviceId: string): Promise<boolean> {
270
+ return new Promise((resolve) => {
271
+ BleNitroNative.isConnected(deviceId, (connected: boolean) => {
272
+ this._connectedDevices[deviceId] = connected;
273
+ resolve(connected);
274
+ });
275
+ });
276
+ }
277
+
278
+ /**
279
+ * Discover services for a connected device
280
+ * @param deviceId ID of the device
281
+ * @returns Promise resolving when services are discovered
282
+ */
283
+ public discoverServices(deviceId: string): Promise<boolean> {
284
+ return new Promise((resolve, reject) => {
285
+ // Check if connected first
286
+ if (!this._connectedDevices[deviceId]) {
287
+ reject(new Error('Device not connected'));
288
+ return;
289
+ }
290
+
291
+ BleNitroNative.discoverServices(
292
+ deviceId,
293
+ (success: boolean, error: string) => {
294
+ if (success) {
295
+ resolve(true);
296
+ } else {
297
+ reject(new Error(error));
298
+ }
299
+ }
300
+ );
301
+ });
302
+ }
303
+
304
+ /**
305
+ * Get services for a connected device
306
+ * @param deviceId ID of the device
307
+ * @returns Promise resolving to array of service UUIDs
308
+ */
309
+ public getServices(deviceId: string): Promise<string[]> {
310
+ return new Promise(async (resolve, reject) => {
311
+ // Check if connected first
312
+ if (!this._connectedDevices[deviceId]) {
313
+ reject(new Error('Device not connected'));
314
+ return;
315
+ }
316
+
317
+ const success = await this.discoverServices(deviceId);
318
+ if (!success) {
319
+ reject(new Error('Failed to discover services'));
320
+ return;
321
+ }
322
+ BleNitroNative.getServices(deviceId, (services: string[]) => {
323
+ resolve(BleNitro.normalizeGattUUIDs(services));
324
+ });
325
+ });
326
+ }
327
+
328
+ /**
329
+ * Get characteristics for a service
330
+ * @param deviceId ID of the device
331
+ * @param serviceId ID of the service
332
+ * @returns Promise resolving to array of characteristic UUIDs
333
+ */
334
+ public getCharacteristics(
335
+ deviceId: string,
336
+ serviceId: string
337
+ ): Promise<string[]> {
338
+ return new Promise((resolve, reject) => {
339
+ // Check if connected first
340
+ if (!this._connectedDevices[deviceId]) {
341
+ reject(new Error('Device not connected'));
342
+ return;
343
+ }
344
+
345
+ BleNitroNative.getCharacteristics(
346
+ deviceId,
347
+ BleNitro.normalizeGattUUID(serviceId),
348
+ (characteristics: string[]) => {
349
+ resolve(BleNitro.normalizeGattUUIDs(characteristics));
350
+ }
351
+ );
352
+ });
353
+ }
354
+
355
+ /**
356
+ * Read a characteristic value
357
+ * @param deviceId ID of the device
358
+ * @param serviceId ID of the service
359
+ * @param characteristicId ID of the characteristic
360
+ * @returns Promise resolving to the characteristic data as byte array
361
+ */
362
+ public readCharacteristic(
363
+ deviceId: string,
364
+ serviceId: string,
365
+ characteristicId: string
366
+ ): Promise<number[]> {
367
+ return new Promise((resolve, reject) => {
368
+ // Check if connected first
369
+ if (!this._connectedDevices[deviceId]) {
370
+ reject(new Error('Device not connected'));
371
+ return;
372
+ }
373
+
374
+ BleNitroNative.readCharacteristic(
375
+ deviceId,
376
+ BleNitro.normalizeGattUUID(serviceId),
377
+ BleNitro.normalizeGattUUID(characteristicId),
378
+ (success: boolean, data: number[], error: string) => {
379
+ if (success) {
380
+ resolve(data);
381
+ } else {
382
+ reject(new Error(error));
383
+ }
384
+ }
385
+ );
386
+ });
387
+ }
388
+
389
+ /**
390
+ * Write a value to a characteristic
391
+ * @param deviceId ID of the device
392
+ * @param serviceId ID of the service
393
+ * @param characteristicId ID of the characteristic
394
+ * @param data Data to write as an array of bytes
395
+ * @param withResponse Whether to wait for response
396
+ * @returns Promise resolving when write is complete
397
+ */
398
+ public writeCharacteristic(
399
+ deviceId: string,
400
+ serviceId: string,
401
+ characteristicId: string,
402
+ data: number[],
403
+ withResponse: boolean = true
404
+ ): Promise<boolean> {
405
+ return new Promise((resolve, reject) => {
406
+ // Check if connected first
407
+ if (!this._connectedDevices[deviceId]) {
408
+ reject(new Error('Device not connected'));
409
+ return;
410
+ }
411
+
412
+ BleNitroNative.writeCharacteristic(
413
+ deviceId,
414
+ BleNitro.normalizeGattUUID(serviceId),
415
+ BleNitro.normalizeGattUUID(characteristicId),
416
+ data,
417
+ withResponse,
418
+ (success: boolean, error: string) => {
419
+ if (success) {
420
+ resolve(true);
421
+ } else {
422
+ reject(new Error(error));
423
+ }
424
+ }
425
+ );
426
+ });
427
+ }
428
+
429
+ /**
430
+ * Subscribe to characteristic notifications
431
+ * @param deviceId ID of the device
432
+ * @param serviceId ID of the service
433
+ * @param characteristicId ID of the characteristic
434
+ * @param callback Callback function called when notification is received
435
+ * @returns Promise resolving when subscription is complete
436
+ */
437
+ public subscribeToCharacteristic(
438
+ deviceId: string,
439
+ serviceId: string,
440
+ characteristicId: string,
441
+ callback: CharacteristicUpdateCallback
442
+ ): Promise<Subscription> {
443
+ return new Promise((resolve, reject) => {
444
+ // Check if connected first
445
+ if (!this._connectedDevices[deviceId]) {
446
+ reject(new Error('Device not connected'));
447
+ return;
448
+ }
449
+
450
+ BleNitroNative.subscribeToCharacteristic(
451
+ deviceId,
452
+ BleNitro.normalizeGattUUID(serviceId),
453
+ BleNitro.normalizeGattUUID(characteristicId),
454
+ (charId: string, data: number[]) => {
455
+ callback(charId, data);
456
+ },
457
+ (success: boolean, error: string) => {
458
+ if (success) {
459
+ resolve({
460
+ remove: () => {
461
+ return new Promise((resolve, reject) => {
462
+ this.unsubscribeFromCharacteristic(
463
+ deviceId,
464
+ serviceId,
465
+ characteristicId
466
+ ).then(resolve).catch(reject);
467
+ });
468
+ },
469
+ });
470
+ } else {
471
+ reject(new Error(error));
472
+ }
473
+ }
474
+ );
475
+ });
476
+ }
477
+
478
+ /**
479
+ * Unsubscribe from characteristic notifications
480
+ * @param deviceId ID of the device
481
+ * @param serviceId ID of the service
482
+ * @param characteristicId ID of the characteristic
483
+ * @returns Promise resolving when unsubscription is complete
484
+ */
485
+ public unsubscribeFromCharacteristic(
486
+ deviceId: string,
487
+ serviceId: string,
488
+ characteristicId: string
489
+ ): Promise<void> {
490
+ return new Promise((resolve, reject) => {
491
+ // Check if connected first
492
+ if (!this._connectedDevices[deviceId]) {
493
+ reject(new Error('Device not connected'));
494
+ return;
495
+ }
496
+
497
+ BleNitroNative.unsubscribeFromCharacteristic(
498
+ deviceId,
499
+ BleNitro.normalizeGattUUID(serviceId),
500
+ BleNitro.normalizeGattUUID(characteristicId),
501
+ (success: boolean, error: string) => {
502
+ if (success) {
503
+ resolve();
504
+ } else {
505
+ reject(new Error(error));
506
+ }
507
+ }
508
+ );
509
+ });
510
+ }
511
+
512
+ /**
513
+ * Check if Bluetooth is enabled
514
+ * @returns Promise resolving to Bluetooth state
515
+ */
516
+ public isBluetoothEnabled(): Promise<boolean> {
517
+ return new Promise((resolve) => {
518
+ BleNitroNative.isBluetoothEnabled((enabled: boolean) => {
519
+ resolve(enabled);
520
+ });
521
+ });
522
+ }
523
+
524
+ /**
525
+ * Request to enable Bluetooth
526
+ * @returns Promise resolving when Bluetooth is enabled
527
+ */
528
+ public requestBluetoothEnable(): Promise<boolean> {
529
+ return new Promise((resolve, reject) => {
530
+ BleNitroNative.requestBluetoothEnable(
531
+ (success: boolean, error: string) => {
532
+ if (success) {
533
+ resolve(true);
534
+ } else {
535
+ reject(new Error(error));
536
+ }
537
+ }
538
+ );
539
+ });
540
+ }
541
+
542
+ /**
543
+ * Get the current Bluetooth state
544
+ * @returns Promise resolving to Bluetooth state
545
+ * @see BLEState
546
+ */
547
+ public state(): Promise<BLEState> {
548
+ return new Promise((resolve) => {
549
+ BleNitroNative.state((state: NativeBLEState) => {
550
+ resolve(mapNativeBLEStateToBLEState(state));
551
+ });
552
+ });
553
+ }
554
+
555
+ /**
556
+ * Subscribe to Bluetooth state changes
557
+ * @param callback Callback function called when state changes
558
+ * @param emitInitial Whether to emit initial state callback
559
+ * @returns Promise resolving when subscription is complete
560
+ * @see BLEState
561
+ */
562
+ public subscribeToStateChange(callback: (state: BLEState) => void, emitInitial = false): Promise<Subscription> {
563
+ return new Promise(async (resolve, reject) => {
564
+ if (emitInitial) {
565
+ const state = await this.state().catch(() => {
566
+ return BLEState.Unknown;
567
+ });
568
+ callback(state);
569
+ }
570
+ BleNitroNative.subscribeToStateChange((nativeState: NativeBLEState) => {
571
+ callback(mapNativeBLEStateToBLEState(nativeState));
572
+ }, (success: boolean, error: string) => {
573
+ if (success) {
574
+ resolve({
575
+ remove: () => {
576
+ return new Promise((resolve, reject) => {
577
+ BleNitroNative.unsubscribeFromStateChange((success, error) => {
578
+ if (success) {
579
+ resolve();
580
+ } else {
581
+ reject(new Error(error));
582
+ }
583
+ });
584
+ });
585
+ },
586
+ });
587
+ } else {
588
+ reject(new Error(error));
589
+ }
590
+ });
591
+ })
592
+ }
593
+
594
+ /**
595
+ * Open Bluetooth settings
596
+ * @returns Promise resolving when settings are opened
597
+ */
598
+ public openSettings(): Promise<void> {
599
+ return BleNitroNative.openSettings();
600
+ }
601
+ }
602
+
603
+ // Singleton instance
604
+ export const ble = BleNitro.instance();