react-native-rook-sdk 4.0.0-beta.2 → 4.1.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 (339) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -35
  3. package/android/build.gradle +45 -20
  4. package/android/gradle.properties +5 -5
  5. package/android/src/main/AndroidManifest.xml +2 -1
  6. package/android/src/main/AndroidManifestNew.xml +36 -0
  7. package/android/src/main/java/com/rooksdk/RookSdkModule.kt +263 -11
  8. package/android/src/main/java/com/rooksdk/RookSdkPackage.kt +42 -26
  9. package/android/src/main/java/com/rooksdk/broadcasts/AndroidPermissionsReceiverTransmitter.kt +65 -0
  10. package/android/src/main/java/com/rooksdk/broadcasts/HealthConnectPermissionsReceiverTransmitter.kt +70 -0
  11. package/android/src/main/java/com/rooksdk/broadcasts/SamsungHealthPermissionsReceiverTransmitter.kt +52 -0
  12. package/android/src/main/java/com/rooksdk/modules/RookBackgroundSyncModule.kt +99 -0
  13. package/android/src/main/java/com/rooksdk/modules/RookConfigurationModule.kt +182 -0
  14. package/android/src/main/java/com/rooksdk/modules/RookLocalData.kt +301 -0
  15. package/android/src/main/java/com/rooksdk/modules/RookPermissionsModule.kt +382 -0
  16. package/android/src/main/java/com/rooksdk/modules/RookSourcesModule.kt +102 -0
  17. package/android/src/main/java/com/rooksdk/modules/RookStepsModule.kt +189 -0
  18. package/android/src/main/java/com/rooksdk/modules/RookSyncModule.kt +551 -0
  19. package/android/src/main/java/com/rooksdk/utils/DatasourcesUtils.kt +34 -0
  20. package/android/src/main/java/com/rooksdk/utils/PermissionConversion.kt +21 -0
  21. package/android/src/main/java/com/rooksdk/utils/ReadableToWritable.kt +145 -0
  22. package/android/src/main/java/com/rooksdk/utils/RookDateTime.kt +26 -0
  23. package/android/src/main/java/com/rooksdk/utils/RookGsonBuilder.kt +17 -0
  24. package/android/src/main/java/com/rooksdk/utils/SamsungAvailability.kt +21 -0
  25. package/android/src/main/java/com/rooksdk/utils/Source.kt +6 -0
  26. package/android/src/main/java/com/rooksdk/utils/StringToSyncType.kt +41 -0
  27. package/android/src/main/java/com/rooksdk/utils/serializers/InstantSerializer.kt +19 -0
  28. package/android/src/main/java/com/rooksdk/utils/serializers/LocalDateSerializer.kt +21 -0
  29. package/android/src/main/res/drawable/ic_health_connect.xml +19 -0
  30. package/android/src/main/res/values/themes.xml +3 -0
  31. package/ios/DateHelper.swift +4 -4
  32. package/ios/EncodableDataSource.swift +3 -2
  33. package/ios/EncodableDataSourceAuthorizer.swift +3 -2
  34. package/ios/{HearRateMapper.swift → EncodableHeartRate.swift} +3 -3
  35. package/ios/EncodableRookDataSource.swift +36 -0
  36. package/ios/EncodableSDKState.swift +94 -0
  37. package/ios/EncodableStatusDataSources.swift +47 -0
  38. package/ios/NutritionMapper.swift +114 -0
  39. package/ios/RookBackground.swift +8 -5
  40. package/ios/RookBackgroundModule.h +5 -0
  41. package/ios/RookBackgroundModule.mm +15 -0
  42. package/ios/RookConfiguration.swift +34 -24
  43. package/ios/RookConfigurationModule.h +5 -0
  44. package/ios/RookConfigurationModule.mm +22 -0
  45. package/ios/RookExternalModule.h +5 -0
  46. package/ios/RookExternalModule.m +31 -0
  47. package/ios/{RookData.swift → RookLocalData.swift} +70 -48
  48. package/ios/RookPermissions.swift +33 -5
  49. package/ios/RookPermissionsModule.h +5 -0
  50. package/ios/RookPermissionsModule.mm +20 -0
  51. package/ios/RookSdk.h +2 -14
  52. package/ios/RookSdk.mm +97 -546
  53. package/ios/RookSources.swift +54 -60
  54. package/ios/RookSourcesModule.h +5 -0
  55. package/ios/RookSourcesModule.mm +18 -0
  56. package/ios/RookSync.h +5 -0
  57. package/ios/RookSync.m +35 -0
  58. package/ios/RookSync.swift +78 -48
  59. package/ios/SwiftTest.swift +18 -0
  60. package/ios/react-native-rook-sdk-Bridging-Header.h +12 -0
  61. package/{src/context/RookSyncGateContext.ts → lib/commonjs/context/RookSyncGateContext.js} +13 -10
  62. package/lib/commonjs/context/RookSyncGateContext.js.map +1 -0
  63. package/lib/commonjs/context/RookSyncGateProvider.js +108 -0
  64. package/lib/commonjs/context/RookSyncGateProvider.js.map +1 -0
  65. package/{src/context/RookSyncGateReducer.ts → lib/commonjs/context/RookSyncGateReducer.js} +44 -13
  66. package/lib/commonjs/context/RookSyncGateReducer.js.map +1 -0
  67. package/lib/commonjs/context/RookSyncGateTypes.js +6 -0
  68. package/lib/commonjs/context/RookSyncGateTypes.js.map +1 -0
  69. package/lib/commonjs/context/index.js +14 -0
  70. package/lib/commonjs/context/index.js.map +1 -0
  71. package/lib/commonjs/hooks/index.js +83 -0
  72. package/lib/commonjs/hooks/index.js.map +1 -0
  73. package/{src/hooks/useRookAPISources.ts → lib/commonjs/hooks/useRookAPISources.js} +36 -40
  74. package/lib/commonjs/hooks/useRookAPISources.js.map +1 -0
  75. package/lib/commonjs/hooks/useRookAndroidBackgroundSteps.js +88 -0
  76. package/lib/commonjs/hooks/useRookAndroidBackgroundSteps.js.map +1 -0
  77. package/lib/commonjs/hooks/useRookAndroidStepCounter.js +56 -0
  78. package/lib/commonjs/hooks/useRookAndroidStepCounter.js.map +1 -0
  79. package/lib/commonjs/hooks/useRookAppleHealth.js +63 -0
  80. package/lib/commonjs/hooks/useRookAppleHealth.js.map +1 -0
  81. package/lib/commonjs/hooks/useRookConfiguration.js +113 -0
  82. package/lib/commonjs/hooks/useRookConfiguration.js.map +1 -0
  83. package/lib/commonjs/hooks/useRookData.js +116 -0
  84. package/lib/commonjs/hooks/useRookData.js.map +1 -0
  85. package/lib/commonjs/hooks/useRookHealthConnect.js +70 -0
  86. package/lib/commonjs/hooks/useRookHealthConnect.js.map +1 -0
  87. package/lib/commonjs/hooks/useRookPermissions.js +223 -0
  88. package/lib/commonjs/hooks/useRookPermissions.js.map +1 -0
  89. package/lib/commonjs/hooks/useRookSamsungHealth.js +54 -0
  90. package/lib/commonjs/hooks/useRookSamsungHealth.js.map +1 -0
  91. package/lib/commonjs/hooks/useRookSync.js +148 -0
  92. package/lib/commonjs/hooks/useRookSync.js.map +1 -0
  93. package/lib/commonjs/hooks/useRookVariables.js +93 -0
  94. package/lib/commonjs/hooks/useRookVariables.js.map +1 -0
  95. package/lib/commonjs/index.js +121 -0
  96. package/lib/commonjs/index.js.map +1 -0
  97. package/lib/commonjs/modules/hook/useRookAutoSync.js +261 -0
  98. package/lib/commonjs/modules/hook/useRookAutoSync.js.map +1 -0
  99. package/lib/commonjs/modules/types/sendMessageBroadcast.js +2 -0
  100. package/lib/commonjs/modules/types/sendMessageBroadcast.js.map +1 -0
  101. package/lib/commonjs/modules/utils/errors.js +12 -0
  102. package/lib/commonjs/modules/utils/errors.js.map +1 -0
  103. package/lib/commonjs/types/ActivityEvent.js +6 -0
  104. package/lib/commonjs/types/ActivityEvent.js.map +1 -0
  105. package/lib/commonjs/types/AppleHealthNutritionEvent.js +77 -0
  106. package/lib/commonjs/types/AppleHealthNutritionEvent.js.map +1 -0
  107. package/lib/commonjs/types/AppleHealthPermissions.js +57 -0
  108. package/lib/commonjs/types/AppleHealthPermissions.js.map +1 -0
  109. package/lib/commonjs/types/AuthorizedSources.js +6 -0
  110. package/lib/commonjs/types/AuthorizedSources.js.map +1 -0
  111. package/lib/commonjs/types/BodySummary.js +6 -0
  112. package/lib/{module/types/Rook.js.map → commonjs/types/BodySummary.js.map} +1 -1
  113. package/lib/commonjs/types/DataSource.js +16 -0
  114. package/lib/commonjs/types/DataSource.js.map +1 -0
  115. package/lib/commonjs/types/DiagnosticState.js +2 -0
  116. package/lib/commonjs/types/DiagnosticState.js.map +1 -0
  117. package/lib/commonjs/types/HCMealData.js +65 -0
  118. package/lib/commonjs/types/HCMealData.js.map +1 -0
  119. package/lib/commonjs/types/HeartRateEvent.js +2 -0
  120. package/lib/commonjs/types/HeartRateEvent.js.map +1 -0
  121. package/lib/commonjs/types/PermissionsType.js +2 -0
  122. package/lib/commonjs/types/PermissionsType.js.map +1 -0
  123. package/lib/commonjs/types/PhysicalSummary.js +6 -0
  124. package/lib/commonjs/types/PhysicalSummary.js.map +1 -0
  125. package/lib/commonjs/types/SDKSources.js +13 -0
  126. package/lib/commonjs/types/SDKSources.js.map +1 -0
  127. package/lib/commonjs/types/SamsungHealthPermissions.js +23 -0
  128. package/lib/commonjs/types/SamsungHealthPermissions.js.map +1 -0
  129. package/lib/commonjs/types/SleepSummary.js +6 -0
  130. package/lib/commonjs/types/SleepSummary.js.map +1 -0
  131. package/lib/commonjs/types/SummaryTypes.js +2 -0
  132. package/lib/commonjs/types/SummaryTypes.js.map +1 -0
  133. package/lib/commonjs/types/SyncTypes.js +33 -0
  134. package/lib/commonjs/types/SyncTypes.js.map +1 -0
  135. package/lib/commonjs/types/WriteNutrition.js +18 -0
  136. package/lib/commonjs/types/WriteNutrition.js.map +1 -0
  137. package/lib/commonjs/utils/getNativeModule.js +29 -0
  138. package/lib/commonjs/utils/getNativeModule.js.map +1 -0
  139. package/lib/commonjs/utils/getRookModule.js +28 -0
  140. package/lib/commonjs/utils/getRookModule.js.map +1 -0
  141. package/{src/utils/isModuleReady.ts → lib/commonjs/utils/isModuleReady.js} +10 -4
  142. package/lib/commonjs/utils/isModuleReady.js.map +1 -0
  143. package/lib/commonjs/utils/isRunningOnAndroid.js +15 -0
  144. package/lib/commonjs/utils/isRunningOnAndroid.js.map +1 -0
  145. package/lib/commonjs/utils/isRunningOniOS.js +15 -0
  146. package/lib/commonjs/utils/isRunningOniOS.js.map +1 -0
  147. package/lib/commonjs/utils/isValidDate.js +41 -0
  148. package/lib/commonjs/utils/isValidDate.js.map +1 -0
  149. package/lib/commonjs/utils/nativeModules.js +29 -0
  150. package/lib/commonjs/utils/nativeModules.js.map +1 -0
  151. package/lib/commonjs/utils/packageInfo.js +13 -0
  152. package/lib/commonjs/utils/packageInfo.js.map +1 -0
  153. package/lib/module/context/RookSyncGateContext.js +0 -2
  154. package/lib/module/context/RookSyncGateContext.js.map +1 -1
  155. package/lib/module/context/RookSyncGateProvider.js +31 -22
  156. package/lib/module/context/RookSyncGateProvider.js.map +1 -1
  157. package/lib/module/context/RookSyncGateReducer.js +12 -4
  158. package/lib/module/context/RookSyncGateReducer.js.map +1 -1
  159. package/lib/module/context/RookSyncGateTypes.js +0 -2
  160. package/lib/module/context/index.js +2 -0
  161. package/lib/module/context/index.js.map +1 -0
  162. package/lib/module/hooks/index.js +12 -0
  163. package/lib/module/hooks/index.js.map +1 -0
  164. package/lib/module/hooks/useRookAPISources.js +16 -10
  165. package/lib/module/hooks/useRookAPISources.js.map +1 -1
  166. package/lib/module/hooks/useRookAndroidBackgroundSteps.js +12 -11
  167. package/lib/module/hooks/useRookAndroidBackgroundSteps.js.map +1 -1
  168. package/lib/module/hooks/useRookAndroidStepCounter.js +48 -0
  169. package/lib/module/hooks/useRookAndroidStepCounter.js.map +1 -0
  170. package/lib/module/hooks/useRookAppleHealth.js +10 -9
  171. package/lib/module/hooks/useRookAppleHealth.js.map +1 -1
  172. package/lib/module/hooks/useRookConfiguration.js +34 -10
  173. package/lib/module/hooks/useRookConfiguration.js.map +1 -1
  174. package/lib/module/hooks/useRookData.js +45 -31
  175. package/lib/module/hooks/useRookData.js.map +1 -1
  176. package/lib/module/hooks/useRookHealthConnect.js +10 -9
  177. package/lib/module/hooks/useRookHealthConnect.js.map +1 -1
  178. package/lib/module/hooks/useRookPermissions.js +63 -28
  179. package/lib/module/hooks/useRookPermissions.js.map +1 -1
  180. package/lib/module/hooks/useRookSamsungHealth.js +20 -8
  181. package/lib/module/hooks/useRookSamsungHealth.js.map +1 -1
  182. package/lib/module/hooks/useRookSync.js +32 -23
  183. package/lib/module/hooks/useRookSync.js.map +1 -1
  184. package/lib/module/hooks/useRookVariables.js +37 -19
  185. package/lib/module/hooks/useRookVariables.js.map +1 -1
  186. package/lib/module/index.js +10 -18
  187. package/lib/module/index.js.map +1 -1
  188. package/lib/module/modules/hook/useRookAutoSync.js +40 -27
  189. package/lib/module/modules/hook/useRookAutoSync.js.map +1 -1
  190. package/lib/module/modules/types/sendMessageBroadcast.js +1 -1
  191. package/lib/module/modules/utils/errors.js +0 -2
  192. package/lib/module/modules/utils/errors.js.map +1 -1
  193. package/lib/module/types/ActivityEvent.js +0 -2
  194. package/lib/module/types/AppleHealthNutritionEvent.js +70 -0
  195. package/lib/module/types/AppleHealthNutritionEvent.js.map +1 -0
  196. package/lib/module/types/AppleHealthPermissions.js +0 -2
  197. package/lib/module/types/AppleHealthPermissions.js.map +1 -1
  198. package/lib/module/types/AuthorizedSources.js +0 -2
  199. package/lib/module/types/BodySummary.js +0 -2
  200. package/lib/module/types/DataSource.js +0 -2
  201. package/lib/module/types/DataSource.js.map +1 -1
  202. package/lib/module/types/DiagnosticState.js +2 -0
  203. package/lib/module/types/DiagnosticState.js.map +1 -0
  204. package/lib/module/types/HCMealData.js +59 -0
  205. package/lib/module/types/HCMealData.js.map +1 -0
  206. package/lib/module/types/HeartRateEvent.js +1 -1
  207. package/lib/module/types/PermissionsType.js +1 -1
  208. package/lib/module/types/PhysicalSummary.js +0 -2
  209. package/lib/module/types/SDKSources.js +0 -2
  210. package/lib/module/types/SDKSources.js.map +1 -1
  211. package/lib/module/types/SamsungHealthPermissions.js +0 -3
  212. package/lib/module/types/SamsungHealthPermissions.js.map +1 -1
  213. package/lib/module/types/SleepSummary.js +0 -2
  214. package/lib/module/types/SummaryTypes.js +1 -1
  215. package/lib/module/types/SyncTypes.js +0 -2
  216. package/lib/module/types/SyncTypes.js.map +1 -1
  217. package/lib/module/types/WriteNutrition.js +12 -0
  218. package/lib/module/types/WriteNutrition.js.map +1 -0
  219. package/lib/module/utils/getNativeModule.js +23 -0
  220. package/lib/module/utils/getNativeModule.js.map +1 -0
  221. package/lib/module/utils/getRookModule.js +22 -0
  222. package/lib/module/utils/getRookModule.js.map +1 -0
  223. package/lib/module/utils/isModuleReady.js +0 -2
  224. package/lib/module/utils/isModuleReady.js.map +1 -1
  225. package/lib/module/utils/isRunningOnAndroid.js +0 -2
  226. package/lib/module/utils/isRunningOnAndroid.js.map +1 -1
  227. package/lib/module/utils/isRunningOniOS.js +0 -2
  228. package/lib/module/utils/isRunningOniOS.js.map +1 -1
  229. package/lib/module/utils/isValidDate.js +20 -2
  230. package/lib/module/utils/isValidDate.js.map +1 -1
  231. package/lib/module/utils/nativeModules.js +23 -0
  232. package/lib/module/utils/nativeModules.js.map +1 -0
  233. package/lib/module/utils/packageInfo.js +7 -0
  234. package/lib/module/utils/packageInfo.js.map +1 -0
  235. package/lib/typescript/src/context/RookSyncGateContext.d.ts.map +1 -1
  236. package/lib/typescript/src/context/RookSyncGateProvider.d.ts.map +1 -1
  237. package/lib/typescript/src/context/RookSyncGateReducer.d.ts.map +1 -1
  238. package/lib/typescript/src/context/RookSyncGateTypes.d.ts +14 -4
  239. package/lib/typescript/src/context/RookSyncGateTypes.d.ts.map +1 -1
  240. package/lib/typescript/src/context/index.d.ts +2 -0
  241. package/lib/typescript/src/context/index.d.ts.map +1 -0
  242. package/lib/typescript/src/hooks/index.d.ts +12 -0
  243. package/lib/typescript/src/hooks/index.d.ts.map +1 -0
  244. package/lib/typescript/src/hooks/useRookAPISources.d.ts.map +1 -1
  245. package/lib/typescript/src/hooks/useRookAndroidBackgroundSteps.d.ts.map +1 -1
  246. package/lib/typescript/src/hooks/useRookAndroidStepCounter.d.ts +9 -0
  247. package/lib/typescript/src/hooks/useRookAndroidStepCounter.d.ts.map +1 -0
  248. package/lib/typescript/src/hooks/useRookAppleHealth.d.ts.map +1 -1
  249. package/lib/typescript/src/hooks/useRookConfiguration.d.ts +3 -1
  250. package/lib/typescript/src/hooks/useRookConfiguration.d.ts.map +1 -1
  251. package/lib/typescript/src/hooks/useRookData.d.ts +2 -2
  252. package/lib/typescript/src/hooks/useRookData.d.ts.map +1 -1
  253. package/lib/typescript/src/hooks/useRookHealthConnect.d.ts.map +1 -1
  254. package/lib/typescript/src/hooks/useRookPermissions.d.ts +6 -2
  255. package/lib/typescript/src/hooks/useRookPermissions.d.ts.map +1 -1
  256. package/lib/typescript/src/hooks/useRookSamsungHealth.d.ts +6 -0
  257. package/lib/typescript/src/hooks/useRookSamsungHealth.d.ts.map +1 -1
  258. package/lib/typescript/src/hooks/useRookSync.d.ts.map +1 -1
  259. package/lib/typescript/src/hooks/useRookVariables.d.ts +2 -0
  260. package/lib/typescript/src/hooks/useRookVariables.d.ts.map +1 -1
  261. package/lib/typescript/src/index.d.ts +8 -17
  262. package/lib/typescript/src/index.d.ts.map +1 -1
  263. package/lib/typescript/src/modules/hook/useRookAutoSync.d.ts.map +1 -1
  264. package/lib/typescript/src/types/AppleHealthNutritionEvent.d.ts +76 -0
  265. package/lib/typescript/src/types/AppleHealthNutritionEvent.d.ts.map +1 -0
  266. package/lib/typescript/src/types/AuthorizedSources.d.ts +0 -11
  267. package/lib/typescript/src/types/AuthorizedSources.d.ts.map +1 -1
  268. package/lib/typescript/src/types/DiagnosticState.d.ts +13 -0
  269. package/lib/typescript/src/types/DiagnosticState.d.ts.map +1 -0
  270. package/lib/typescript/src/types/HCMealData.d.ts +60 -0
  271. package/lib/typescript/src/types/HCMealData.d.ts.map +1 -0
  272. package/lib/typescript/src/types/HeartRateEvent.d.ts +2 -2
  273. package/lib/typescript/src/types/HeartRateEvent.d.ts.map +1 -1
  274. package/lib/typescript/src/types/SamsungHealthPermissions.d.ts +0 -1
  275. package/lib/typescript/src/types/SamsungHealthPermissions.d.ts.map +1 -1
  276. package/lib/typescript/src/types/SyncTypes.d.ts +1 -5
  277. package/lib/typescript/src/types/SyncTypes.d.ts.map +1 -1
  278. package/lib/typescript/src/types/WriteNutrition.d.ts +61 -0
  279. package/lib/typescript/src/types/WriteNutrition.d.ts.map +1 -0
  280. package/lib/typescript/src/utils/getNativeModule.d.ts +10 -0
  281. package/lib/typescript/src/utils/getNativeModule.d.ts.map +1 -0
  282. package/lib/typescript/src/utils/getRookModule.d.ts +9 -0
  283. package/lib/typescript/src/utils/getRookModule.d.ts.map +1 -0
  284. package/lib/typescript/src/utils/isModuleReady.d.ts.map +1 -1
  285. package/lib/typescript/src/utils/isValidDate.d.ts +8 -0
  286. package/lib/typescript/src/utils/isValidDate.d.ts.map +1 -1
  287. package/lib/typescript/src/utils/nativeModules.d.ts +24 -0
  288. package/lib/typescript/src/utils/nativeModules.d.ts.map +1 -0
  289. package/lib/typescript/src/utils/packageInfo.d.ts +6 -0
  290. package/lib/typescript/src/utils/packageInfo.d.ts.map +1 -0
  291. package/package.json +98 -94
  292. package/react-native-rook-sdk.podspec +45 -0
  293. package/RNRookSdk.podspec +0 -22
  294. package/ios/Encodable.swift +0 -25
  295. package/ios/RookEntry.swift +0 -61
  296. package/ios/RookSdk-Bridging-Header.h +0 -12
  297. package/ios/boost-boost_privacy-Bridging-Header.h +0 -4
  298. package/lib/module/NativeRookSdk.js +0 -13
  299. package/lib/module/NativeRookSdk.js.map +0 -1
  300. package/lib/module/package.json +0 -1
  301. package/lib/module/types/Rook.js +0 -2
  302. package/lib/typescript/package.json +0 -1
  303. package/lib/typescript/src/NativeRookSdk.d.ts +0 -116
  304. package/lib/typescript/src/NativeRookSdk.d.ts.map +0 -1
  305. package/lib/typescript/src/types/Rook.d.ts +0 -9
  306. package/lib/typescript/src/types/Rook.d.ts.map +0 -1
  307. package/src/NativeRookSdk.ts +0 -274
  308. package/src/context/RookSyncGateProvider.tsx +0 -78
  309. package/src/context/RookSyncGateTypes.ts +0 -34
  310. package/src/hooks/useRookAndroidBackgroundSteps.ts +0 -81
  311. package/src/hooks/useRookAppleHealth.ts +0 -55
  312. package/src/hooks/useRookConfiguration.ts +0 -82
  313. package/src/hooks/useRookData.ts +0 -122
  314. package/src/hooks/useRookHealthConnect.ts +0 -59
  315. package/src/hooks/useRookPermissions.ts +0 -224
  316. package/src/hooks/useRookSamsungHealth.ts +0 -37
  317. package/src/hooks/useRookSync.ts +0 -157
  318. package/src/hooks/useRookVariables.ts +0 -77
  319. package/src/index.tsx +0 -28
  320. package/src/modules/hook/useRookAutoSync.ts +0 -305
  321. package/src/modules/types/sendMessageBroadcast.ts +0 -5
  322. package/src/modules/utils/errors.ts +0 -9
  323. package/src/types/ActivityEvent.ts +0 -159
  324. package/src/types/AppleHealthPermissions.ts +0 -49
  325. package/src/types/AuthorizedSources.ts +0 -33
  326. package/src/types/BodySummary.ts +0 -116
  327. package/src/types/DataSource.ts +0 -16
  328. package/src/types/HeartRateEvent.ts +0 -26
  329. package/src/types/PermissionsType.ts +0 -9
  330. package/src/types/PhysicalSummary.ts +0 -84
  331. package/src/types/Rook.ts +0 -8
  332. package/src/types/SDKSources.ts +0 -5
  333. package/src/types/SamsungHealthPermissions.ts +0 -16
  334. package/src/types/SleepSummary.ts +0 -66
  335. package/src/types/SummaryTypes.ts +0 -70
  336. package/src/types/SyncTypes.ts +0 -63
  337. package/src/utils/isRunningOnAndroid.ts +0 -10
  338. package/src/utils/isRunningOniOS.ts +0 -10
  339. package/src/utils/isValidDate.ts +0 -15
@@ -0,0 +1,382 @@
1
+ package com.rooksdk.modules
2
+
3
+ import com.facebook.react.bridge.Promise
4
+ import com.facebook.react.bridge.ReactApplicationContext
5
+ import com.facebook.react.bridge.ReactContextBaseJavaModule
6
+ import com.facebook.react.bridge.ReactMethod
7
+ import com.facebook.react.bridge.ReadableArray
8
+ import com.rookmotion.rook.sdk.RookPermissionsManager
9
+ import com.rookmotion.rook.sdk.domain.enums.BackgroundReadStatus
10
+ import com.rookmotion.rook.sdk.domain.enums.HealthConnectAvailability
11
+ import com.rookmotion.rook.sdk.domain.enums.RequestPermissionsStatus
12
+ import com.rookmotion.rook.sdk.domain.exception.HCException
13
+ import com.rooksdk.utils.PermissionConversion
14
+ import com.rooksdk.utils.SamsungAvailability
15
+ import io.tryrook.sdk.samsung.RookSamsung
16
+ import io.tryrook.sdk.samsung.domain.enums.SHRequestPermissionsStatus
17
+ import io.tryrook.sdk.samsung.domain.enums.SamsungHealthAvailability
18
+ import io.tryrook.sdk.samsung.domain.enums.SamsungHealthPermission
19
+ import io.tryrook.sdk.samsung.domain.exception.SHException
20
+ import kotlinx.coroutines.CoroutineScope
21
+ import kotlinx.coroutines.Dispatchers
22
+ import kotlinx.coroutines.SupervisorJob
23
+ import kotlinx.coroutines.launch
24
+
25
+ class RookPermissionsModule(reactContext: ReactApplicationContext, private val rookSamsung: RookSamsung):
26
+ ReactContextBaseJavaModule(reactContext) {
27
+
28
+ private val rookPermissionsManager: RookPermissionsManager by lazy {
29
+ RookPermissionsManager(reactContext)
30
+ }
31
+
32
+ private val scope: CoroutineScope by lazy {
33
+ CoroutineScope(SupervisorJob() + Dispatchers.Main)
34
+ }
35
+
36
+ @ReactMethod
37
+ fun checkSamsungAvailability(promise: Promise) {
38
+ scope.launch {
39
+ rookSamsung.checkSamsungHealthAvailability().fold(
40
+ { availability ->
41
+ when (availability) {
42
+ SamsungHealthAvailability.INSTALLED -> promise.resolve("INSTALLED")
43
+ SamsungHealthAvailability.NOT_INSTALLED -> promise.resolve("NOT_INSTALLED")
44
+ SamsungHealthAvailability.OUTDATED -> promise.resolve("OUTDATED")
45
+ SamsungHealthAvailability.DISABLED -> promise.resolve("DISABLED")
46
+ SamsungHealthAvailability.NOT_READY -> promise.resolve("NOT_READY")
47
+ }
48
+ },
49
+ {
50
+ promise.reject(it)
51
+ },
52
+ )
53
+
54
+ }
55
+ }
56
+
57
+ /**
58
+ * Checks the availability of Health Connect on the device (whether it is installed, not installed, or not supported).
59
+ * @param promise A promise object to handle the result (resolved with the availability status or rejected on failure).
60
+ */
61
+ @ReactMethod
62
+ fun checkHealthConnectAvailability(promise: Promise) {
63
+ val r = rookPermissionsManager.checkHealthConnectAvailability()
64
+
65
+ when(r) {
66
+ HealthConnectAvailability.INSTALLED -> promise.resolve("INSTALLED")
67
+ HealthConnectAvailability.NOT_INSTALLED -> promise.resolve("NOT_INSTALLED")
68
+ HealthConnectAvailability.NOT_SUPPORTED -> promise.resolve("NOT_SUPPORTED")
69
+ }
70
+ }
71
+
72
+ /**
73
+ * Opens the Health Connect settings page on the device for the user to manage permissions.
74
+ * @param promise A promise object to handle the result (resolved on success, rejected on failure).
75
+ */
76
+ @ReactMethod
77
+ fun openHealthConnectSettings(promise: Promise) {
78
+ scope.launch {
79
+
80
+ val result = rookPermissionsManager.openHealthConnectSettings()
81
+
82
+ result.fold({
83
+ promise.resolve(true)
84
+ },{
85
+ if (it is HCException) {
86
+ promise.reject(it.code.toString(), it.message, it)
87
+ } else {
88
+ promise.reject("1001", it.message, it)
89
+ }
90
+ })
91
+
92
+ }
93
+ }
94
+
95
+ @ReactMethod
96
+ fun checkSamsungHealthPermissions(promise: Promise){
97
+ scope.launch {
98
+ if (!SamsungAvailability.isSamsungAvailable(rookSamsung)){
99
+ promise.reject(Throwable("Samsung health is not available"))
100
+ return@launch
101
+ }
102
+
103
+ rookSamsung.checkSamsungHealthPermissions(SamsungHealthPermission.values().toSet()).fold(
104
+ { hasAllPermissions ->
105
+ promise.resolve(hasAllPermissions)
106
+ },
107
+ {
108
+ if (it is SHException) {
109
+ promise.reject(it.code.toString(), it.message, it)
110
+ } else {
111
+ promise.reject("1001", it.message, it)
112
+ }
113
+ }
114
+ )
115
+ }
116
+ }
117
+
118
+ @ReactMethod
119
+ fun checkSamsungHealthPermissionsPartially(promise: Promise){
120
+ scope.launch {
121
+ if (!SamsungAvailability.isSamsungAvailable(rookSamsung)){
122
+ promise.reject(Throwable("Samsung health is not available"))
123
+ return@launch
124
+ }
125
+
126
+ rookSamsung.checkSamsungHealthPermissionsPartially(SamsungHealthPermission.values().toSet()).fold(
127
+ { hasAllPermissions ->
128
+ promise.resolve(hasAllPermissions)
129
+ },
130
+ {
131
+ if (it is SHException) {
132
+ promise.reject(it.code.toString(), it.message, it)
133
+ } else {
134
+ promise.reject("1001", it.message, it)
135
+ }
136
+ }
137
+ )
138
+ }
139
+ }
140
+
141
+ /**
142
+ * Checks the current permissions granted by Health Conect to ensure the application has the necessary access.
143
+ * @param promise A promise object to handle the result (resolved with permission status or rejected on failure).
144
+ */
145
+ @ReactMethod
146
+ fun checkHealthConnectPermissions(promise: Promise) {
147
+ scope.launch {
148
+ val result = rookPermissionsManager.checkHealthConnectPermissions()
149
+
150
+ result.fold({
151
+ promise.resolve(it)
152
+ }, {
153
+ if (it is HCException) {
154
+ promise.reject(it.code.toString(), it.message, it)
155
+ } else {
156
+ promise.reject("1001", it.message, it)
157
+ }
158
+ })
159
+ }
160
+ }
161
+
162
+ @ReactMethod
163
+ fun checkHealthConnectPermissionsPartially(promise: Promise) {
164
+ scope.launch {
165
+ val result = rookPermissionsManager.checkHealthConnectPermissionsPartially()
166
+
167
+ result.fold({
168
+ promise.resolve(it)
169
+ }, {
170
+ if (it is HCException) {
171
+ promise.reject(it.code.toString(), it.message, it)
172
+ } else {
173
+ promise.reject("1001", it.message, it)
174
+ }
175
+ })
176
+ }
177
+ }
178
+
179
+ /**
180
+ * Requests Health Connect permissions from the user if they are not already granted.
181
+ * @param promise A promise object to handle the result (resolved with the permission status or rejected on failure).
182
+ */
183
+ @ReactMethod
184
+ fun requestHealthConnectPermissions(promise: Promise) {
185
+ scope.launch {
186
+ rookPermissionsManager.requestHealthConnectPermissions().fold({
187
+ when(it) {
188
+ RequestPermissionsStatus.REQUEST_SENT -> {
189
+ promise.resolve("REQUEST_SENT")
190
+ }
191
+ RequestPermissionsStatus .ALREADY_GRANTED -> {
192
+ promise.resolve("ALREADY_GRANTED")
193
+ }
194
+ }
195
+ }, {
196
+ if (it is HCException) {
197
+ promise.reject(it.code.toString(), it.message, it)
198
+ } else {
199
+ promise.reject("1001", it.message, it)
200
+ }
201
+ })
202
+ }
203
+ }
204
+
205
+ @ReactMethod
206
+ fun requestSamsungPermissions(permissions: ReadableArray, promise: Promise) {
207
+ val shPermissions = PermissionConversion.parseSamsungPermissions(permissions)
208
+
209
+ scope.launch {
210
+ if (!SamsungAvailability.isSamsungAvailable(rookSamsung)) {
211
+ promise.reject(Throwable("Samsung Health is not available"))
212
+ return@launch
213
+ }
214
+
215
+ rookSamsung.requestSamsungHealthPermissions(shPermissions).fold(
216
+ {
217
+ when (it) {
218
+ SHRequestPermissionsStatus.ALREADY_GRANTED -> promise.resolve("ALREADY_GRANTED")
219
+ SHRequestPermissionsStatus.REQUEST_SENT -> promise.resolve("REQUEST_SENT")
220
+ }
221
+ },
222
+ {
223
+ if (it is SHException) {
224
+ promise.reject(it.code.toString(), it.message, it)
225
+ } else {
226
+ promise.reject("1001", it.message, it)
227
+ }
228
+ }
229
+ )
230
+ }
231
+ }
232
+
233
+ /**
234
+ * Checks if the SDK has permissions to use background permissions
235
+ * */
236
+ @ReactMethod
237
+ fun hasAndroidBackgroundPermissions(promise: Promise) {
238
+ try {
239
+ val result = rookPermissionsManager.checkAndroidPermissions()
240
+ promise.resolve(result)
241
+ }
242
+ catch (it: Exception) {
243
+ if (it is HCException) {
244
+ promise.reject(it.code.toString(), it.message, it)
245
+ } else {
246
+ promise.reject("1001", it.message, it)
247
+ }
248
+ }
249
+ }
250
+
251
+ @ReactMethod
252
+ fun androidHasAlarmPermissions(promise: Promise) {
253
+ try {
254
+ val result = rookPermissionsManager.checkAndroidPermissions()
255
+ promise.resolve(result)
256
+ } catch (it: Exception) {
257
+ promise.reject("1001", it.message, it)
258
+ }
259
+ }
260
+
261
+ /**
262
+ * Requests Android permissions for step counting if they are not already granted.
263
+ * @param promise A promise object to handle the result (resolved with the permission status or rejected on failure).
264
+ */
265
+ @ReactMethod
266
+ fun requestAndroidBackgroundPermissions(promise: Promise) {
267
+ try {
268
+ val response = rookPermissionsManager.requestAndroidPermissions()
269
+
270
+ if (response == RequestPermissionsStatus.REQUEST_SENT)
271
+ promise.resolve("REQUEST_SENT")
272
+ else promise.resolve("ALREADY_GRANTED")
273
+ }
274
+ catch (it: Exception) {
275
+ if (it is HCException) {
276
+ promise.reject(it.code.toString(), it.message, it)
277
+ } else {
278
+ promise.reject("1001", it.message, it)
279
+ }
280
+ }
281
+ }
282
+
283
+ @ReactMethod
284
+ fun requestAndroidAlarmPermissions(promise: Promise) {
285
+ scope.launch {
286
+ try {
287
+ rookPermissionsManager.requestExactAlarmPermission()
288
+ promise.resolve(null)
289
+ } catch (it: Exception) {
290
+ promise.reject("1001", it.message, it)
291
+ }
292
+ }
293
+
294
+ }
295
+
296
+ /**
297
+ * Check if the SDK should request permissions to use android services
298
+ * to show an sticky notification
299
+ * */
300
+ @ReactMethod
301
+ fun shouldRequestAndroidBackgroundPermissions(promise: Promise) {
302
+ val activity = reactApplicationContext.currentActivity
303
+
304
+ if (activity == null) {
305
+ promise.reject(Exception("Error trying to request permissions"))
306
+ return
307
+ }
308
+
309
+ try {
310
+ val r = RookPermissionsManager.shouldRequestAndroidPermissions(activity)
311
+ promise.resolve(r)
312
+ }
313
+ catch (it: Exception) {
314
+ if (it is HCException) {
315
+ promise.reject(it.code.toString(), it.message, it)
316
+ } else {
317
+ promise.reject("1001", it.message, it)
318
+ }
319
+ }
320
+ }
321
+
322
+ @ReactMethod
323
+ fun revokeHealthConnectPermissions(promise: Promise) {
324
+ scope.launch {
325
+ rookPermissionsManager.revokeHealthConnectPermissions()
326
+ .fold({
327
+ promise.resolve(true)
328
+ }, {
329
+ if (it is HCException) {
330
+ promise.reject(it.code.toString(), it.message, it)
331
+ } else {
332
+ promise.reject("1001", it.message, it)
333
+ }
334
+ })
335
+ }
336
+ }
337
+
338
+ /**
339
+ * Checks the status of background read permissions using RookPermissionsManager.
340
+ *
341
+ * This function determines whether the app has permission to read health data in the background.
342
+ * The result is returned as a promise to React Native.
343
+ *
344
+ * Possible results:
345
+ * - "UNAVAILABLE": Background read is not available on this device.
346
+ * - "PERMISSION_NOT_GRANTED": The background read permission has not been granted.
347
+ * - "PERMISSION_GRANTED": The background read permission has been granted.
348
+ *
349
+ * If an error occurs while checking the permission status, the promise will be rejected.
350
+ *
351
+ * @param promise A React Native promise that resolves with the permission status or rejects with an error.
352
+ */
353
+ @ReactMethod
354
+ fun checkHealthConnectBackgroundReadStatus(promise: Promise) {
355
+ scope.launch {
356
+ rookPermissionsManager.checkBackgroundReadStatus().fold(
357
+ { status ->
358
+ when (status) {
359
+ BackgroundReadStatus.UNAVAILABLE -> promise.resolve("UNAVAILABLE")
360
+ BackgroundReadStatus.PERMISSION_NOT_GRANTED -> promise.resolve("PERMISSION_NOT_GRANTED")
361
+ BackgroundReadStatus.PERMISSION_GRANTED -> promise.resolve("PERMISSION_GRANTED")
362
+ }
363
+ },
364
+ {
365
+ if (it is HCException) {
366
+ promise.reject(it.code.toString(), it.message, it)
367
+ } else {
368
+ promise.reject("1001", it.message, it)
369
+ }
370
+ }
371
+ )
372
+ }
373
+ }
374
+
375
+ companion object {
376
+ const val NAME = "RookPermissionsModule"
377
+ }
378
+
379
+ override fun getName(): String {
380
+ return NAME
381
+ }
382
+ }
@@ -0,0 +1,102 @@
1
+ package com.rooksdk.modules
2
+
3
+ import com.facebook.react.bridge.Promise
4
+ import com.facebook.react.bridge.ReactApplicationContext
5
+ import com.facebook.react.bridge.ReactContextBaseJavaModule
6
+ import com.facebook.react.bridge.ReactMethod
7
+ import com.facebook.react.bridge.ReadableMap
8
+ import com.google.gson.Gson
9
+ import com.rooksdk.utils.DatasourcesUtils.mapToDataSourceType
10
+ import io.tryrook.api.sources.RookApiSources
11
+ import io.tryrook.api.sources.domain.exception.ApiException
12
+ import kotlinx.coroutines.CoroutineScope
13
+ import kotlinx.coroutines.Dispatchers
14
+ import kotlinx.coroutines.SupervisorJob
15
+ import kotlinx.coroutines.launch
16
+
17
+ class RookSourcesModule(
18
+ private val reactContext: ReactApplicationContext
19
+ ): ReactContextBaseJavaModule(reactContext) {
20
+ private val scope: CoroutineScope by lazy {
21
+ CoroutineScope(SupervisorJob() + Dispatchers.Main)
22
+ }
23
+
24
+ /**
25
+ * Revokes authorization for a specific data source, disconnecting it from the app.
26
+ * This method allows the user to revoke a previously authorized data source,
27
+ * such as Garmin, Fitbit, or Oura, preventing further data synchronization.
28
+ *
29
+ * @param source The name of the data source to revoke (e.g., "Garmin", "Fitbit").
30
+ * @param promise A promise object that resolves with true if the data source was revoked successfully,
31
+ * or rejects with an error if the operation fails or if the source is invalid.
32
+ */
33
+ @ReactMethod
34
+ fun revokeDataSource(userid: String, source: String, promise: Promise) {
35
+ val type = mapToDataSourceType(source)
36
+
37
+ if (type == null) {
38
+ promise.reject("Invalid", "Enter a valid data source")
39
+ return
40
+ }
41
+
42
+ scope.launch {
43
+ RookApiSources(reactContext).revokeDataSource(userID = userid, dataSource = type).fold({
44
+ promise.resolve(true)
45
+ }, {
46
+ if (it is ApiException) {
47
+ promise.reject(it.code.toString(), it.message, it)
48
+ } else {
49
+ promise.reject("1001", it.message, it)
50
+ }
51
+ })
52
+ }
53
+ }
54
+
55
+ @ReactMethod
56
+ fun getAuthorizedDataSourcesV2(userid: String, promise: Promise) {
57
+ scope.launch {
58
+ RookApiSources(reactContext).getAuthorizedDataSourcesV2(
59
+ userID = userid
60
+ ).fold(
61
+ {
62
+ val gson = Gson()
63
+ promise.resolve(gson.toJson(it))
64
+ }, {
65
+ if (it is ApiException) {
66
+ promise.reject(it.code.toString(), it.message, it)
67
+ } else {
68
+ promise.reject("1001", it.message, it)
69
+ }
70
+ }
71
+ )
72
+ }
73
+ }
74
+
75
+ @ReactMethod
76
+ fun getDataSourceAuthorizer(options: ReadableMap, promise: Promise) {
77
+ val source = options.getString("dataSource") ?: ""
78
+ val redirect = options.getString("redirectURL")
79
+ val userid = options.getString("userID") ?: ""
80
+
81
+ scope.launch {
82
+ RookApiSources(reactContext).getDataSourceAuthorizer(
83
+ dataSource = source,
84
+ redirectUrl = redirect,
85
+ userID = userid
86
+ ).fold({ value ->
87
+ val gson = Gson()
88
+ promise.resolve(gson.toJson(value))
89
+ }, {
90
+ if (it is ApiException) {
91
+ promise.reject(it.code.toString(), it.message, it)
92
+ } else {
93
+ promise.reject("1001", it.message, it)
94
+ }
95
+ })
96
+ }
97
+ }
98
+
99
+ override fun getName(): String {
100
+ return "RookSourcesModule"
101
+ }
102
+ }
@@ -0,0 +1,189 @@
1
+ package com.rooksdk.modules
2
+
3
+ import com.facebook.react.bridge.Promise
4
+ import com.facebook.react.bridge.ReactApplicationContext
5
+ import com.facebook.react.bridge.ReactContextBaseJavaModule
6
+ import com.facebook.react.bridge.ReactMethod
7
+ import com.rookmotion.rook.sdk.RookStepsCounter
8
+ import com.rookmotion.rook.sdk.RookStepsManager
9
+ import com.rookmotion.rook.sdk.domain.exception.HCException
10
+ import io.tryrook.sdk.samsung.domain.exception.SHException
11
+ import kotlinx.coroutines.CoroutineScope
12
+ import kotlinx.coroutines.Dispatchers
13
+ import kotlinx.coroutines.SupervisorJob
14
+ import kotlinx.coroutines.cancel
15
+ import kotlinx.coroutines.launch
16
+
17
+ class RookStepsModule(
18
+ reactContext: ReactApplicationContext
19
+ ): ReactContextBaseJavaModule(reactContext) {
20
+
21
+ private val scope: CoroutineScope by lazy {
22
+ CoroutineScope(SupervisorJob() + Dispatchers.Main)
23
+ }
24
+
25
+ private val rookStepsManager: RookStepsManager by lazy {
26
+ RookStepsManager(reactApplicationContext)
27
+ }
28
+
29
+ private val rookStepsCounter: RookStepsCounter by lazy {
30
+ RookStepsCounter(reactContext)
31
+ }
32
+
33
+ /**
34
+ * Checks if step count data is available on the device.
35
+ * @param promise A promise object to handle the result (resolved with true/false).
36
+ */
37
+ @ReactMethod
38
+ fun isStepsAvailable(promise: Promise) {
39
+ promise.resolve(rookStepsManager.isAvailable())
40
+ }
41
+
42
+ /**
43
+ * Enables background step counting on Android devices, allowing the app to track steps continuously.
44
+ * @param promise A promise object to handle the result (resolved on success, rejected on failure).
45
+ */
46
+ @ReactMethod
47
+ fun enableBackgroundAndroidSteps(promise: Promise) {
48
+ rookStepsManager.enableBackgroundAndroidSteps().fold({
49
+ promise.resolve(true)
50
+ }, {
51
+ if (it is HCException) {
52
+ promise.reject(it.code.toString(), it.message, it)
53
+ } else {
54
+ promise.reject("1001", it.message, it)
55
+ }
56
+ })
57
+ }
58
+
59
+ /**
60
+ * Disables background step counting on Android devices.
61
+ * @param promise A promise object to handle the result (resolved on success, rejected on failure).
62
+ */
63
+ @ReactMethod
64
+ fun disableBackgroundAndroidSteps(promise: Promise) {
65
+ rookStepsManager
66
+ .disableBackgroundAndroidSteps()
67
+ .fold({
68
+ scope.cancel()
69
+ promise.resolve(true)
70
+ }, {
71
+ if (it is HCException) {
72
+ promise.reject(it.code.toString(), it.message, it)
73
+ } else {
74
+ promise.reject("1001", it.message, it)
75
+ }
76
+ })
77
+ }
78
+
79
+ /**
80
+ * Checks whether background step tracking on Android is currently active.
81
+ * This method queries the Rook SDK to determine if background step counting
82
+ * is enabled and active on the device.
83
+ *
84
+ * @param promise A promise object that resolves with a boolean value:
85
+ * - true if background step tracking is active,
86
+ * - false otherwise.
87
+ */
88
+ @ReactMethod
89
+ fun isBackgroundAndroidStepsActive(promise: Promise) {
90
+ scope.launch {
91
+ val response = rookStepsManager.isBackgroundAndroidStepsActive()
92
+ promise.resolve(response)
93
+ }
94
+ }
95
+
96
+ /**
97
+ * Synchronizes the step count for the current day
98
+ * This method queries the Rook SDK to retrieve the number of steps counted today
99
+ * from the Android platform and returns the result to the React Native layer.
100
+ *
101
+ * @param promise A promise object that resolves with the step count as a string
102
+ * or rejects with an error if the synchronization fails.
103
+ */
104
+ @ReactMethod
105
+ fun syncTodayAndroidStepsCount(promise: Promise) {
106
+ scope.launch {
107
+ rookStepsManager
108
+ .syncTodayAndroidStepsCount()
109
+ .fold({
110
+ promise.resolve(it.toString())
111
+ }, {
112
+ if (it is HCException) {
113
+ promise.reject(it.code.toString(), it.message, it)
114
+ } else {
115
+ promise.reject("1001", it.message, it)
116
+ }
117
+ })
118
+ }
119
+ }
120
+
121
+ @ReactMethod
122
+ fun isStepsCounterAvailable(promise: Promise?) {
123
+ if (promise == null) return
124
+
125
+ try {
126
+ val available = rookStepsCounter.isStepsCounterAvailable()
127
+ promise.resolve(available)
128
+ } catch (e: Exception) {
129
+ promise.reject("1001", e.message, e)
130
+ }
131
+ }
132
+
133
+ @ReactMethod
134
+ fun isStepsCounterActive(promise: Promise?) {
135
+ if (promise == null) return
136
+
137
+ scope.launch {
138
+ try {
139
+ val active = rookStepsCounter.isStepsCounterActive()
140
+ promise.resolve(active)
141
+ } catch (e: Exception) {
142
+ promise.reject("1001", e.message, e)
143
+ }
144
+ }
145
+ }
146
+
147
+ @ReactMethod
148
+ fun enableStepsCounter(promise: Promise?) {
149
+ if (promise == null) return
150
+
151
+ try {
152
+ // Using getOrThrow to trigger the catch block on Result.failure
153
+ rookStepsCounter.enableStepsCounter().getOrThrow()
154
+ promise.resolve(null)
155
+ } catch (e: Exception) {
156
+ promise.reject("1001", e.message, e)
157
+ }
158
+ }
159
+
160
+ @ReactMethod
161
+ fun disableStepsCounter(promise: Promise?) {
162
+ if (promise == null) return
163
+
164
+ try {
165
+ rookStepsCounter.disableStepsCounter().getOrThrow()
166
+ promise.resolve(null)
167
+ } catch (e: Exception) {
168
+ promise.reject("1001", e.message, e)
169
+ }
170
+ }
171
+
172
+ @ReactMethod
173
+ fun getTodayStepsCount(promise: Promise?) {
174
+ if (promise == null) return
175
+
176
+ scope.launch {
177
+ try {
178
+ val steps = rookStepsCounter.getTodayStepsCount().getOrThrow()
179
+ promise.resolve(steps.toDouble())
180
+ } catch (e: Exception) {
181
+ promise.reject("1001", e.message, e)
182
+ }
183
+ }
184
+ }
185
+
186
+ override fun getName(): String {
187
+ return "RookStepsModule"
188
+ }
189
+ }