react-native-rook-sdk 4.0.0-beta.1 → 4.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 (332) 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 +359 -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 +119 -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 +76 -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/useRookAppleHealth.js +63 -0
  78. package/lib/commonjs/hooks/useRookAppleHealth.js.map +1 -0
  79. package/lib/commonjs/hooks/useRookConfiguration.js +113 -0
  80. package/lib/commonjs/hooks/useRookConfiguration.js.map +1 -0
  81. package/lib/commonjs/hooks/useRookData.js +116 -0
  82. package/lib/commonjs/hooks/useRookData.js.map +1 -0
  83. package/lib/commonjs/hooks/useRookHealthConnect.js +70 -0
  84. package/lib/commonjs/hooks/useRookHealthConnect.js.map +1 -0
  85. package/lib/commonjs/hooks/useRookPermissions.js +211 -0
  86. package/lib/commonjs/hooks/useRookPermissions.js.map +1 -0
  87. package/lib/commonjs/hooks/useRookSamsungHealth.js +54 -0
  88. package/lib/commonjs/hooks/useRookSamsungHealth.js.map +1 -0
  89. package/lib/commonjs/hooks/useRookSync.js +148 -0
  90. package/lib/commonjs/hooks/useRookSync.js.map +1 -0
  91. package/lib/commonjs/hooks/useRookVariables.js +93 -0
  92. package/lib/commonjs/hooks/useRookVariables.js.map +1 -0
  93. package/lib/commonjs/index.js +121 -0
  94. package/lib/commonjs/index.js.map +1 -0
  95. package/lib/commonjs/modules/hook/useRookAutoSync.js +261 -0
  96. package/lib/commonjs/modules/hook/useRookAutoSync.js.map +1 -0
  97. package/lib/commonjs/modules/types/sendMessageBroadcast.js +2 -0
  98. package/lib/commonjs/modules/types/sendMessageBroadcast.js.map +1 -0
  99. package/lib/commonjs/modules/utils/errors.js +12 -0
  100. package/lib/commonjs/modules/utils/errors.js.map +1 -0
  101. package/lib/commonjs/types/ActivityEvent.js +6 -0
  102. package/lib/commonjs/types/ActivityEvent.js.map +1 -0
  103. package/lib/commonjs/types/AppleHealthNutritionEvent.js +77 -0
  104. package/lib/commonjs/types/AppleHealthNutritionEvent.js.map +1 -0
  105. package/lib/{module/NativeRookSdk.js → commonjs/types/AppleHealthPermissions.js} +7 -45
  106. package/lib/commonjs/types/AppleHealthPermissions.js.map +1 -0
  107. package/lib/commonjs/types/AuthorizedSources.js +6 -0
  108. package/lib/commonjs/types/AuthorizedSources.js.map +1 -0
  109. package/lib/commonjs/types/BodySummary.js +6 -0
  110. package/lib/{module/types/Rook.js.map → commonjs/types/BodySummary.js.map} +1 -1
  111. package/lib/commonjs/types/DataSource.js +16 -0
  112. package/lib/commonjs/types/DataSource.js.map +1 -0
  113. package/lib/commonjs/types/DiagnosticState.js +2 -0
  114. package/lib/commonjs/types/DiagnosticState.js.map +1 -0
  115. package/lib/commonjs/types/HCMealData.js +65 -0
  116. package/lib/commonjs/types/HCMealData.js.map +1 -0
  117. package/lib/commonjs/types/HeartRateEvent.js +2 -0
  118. package/lib/commonjs/types/HeartRateEvent.js.map +1 -0
  119. package/lib/commonjs/types/PermissionsType.js +2 -0
  120. package/lib/commonjs/types/PermissionsType.js.map +1 -0
  121. package/lib/commonjs/types/PhysicalSummary.js +6 -0
  122. package/lib/commonjs/types/PhysicalSummary.js.map +1 -0
  123. package/lib/commonjs/types/SDKSources.js +13 -0
  124. package/lib/commonjs/types/SDKSources.js.map +1 -0
  125. package/lib/commonjs/types/SamsungHealthPermissions.js +23 -0
  126. package/lib/commonjs/types/SamsungHealthPermissions.js.map +1 -0
  127. package/lib/commonjs/types/SleepSummary.js +6 -0
  128. package/lib/commonjs/types/SleepSummary.js.map +1 -0
  129. package/lib/commonjs/types/SummaryTypes.js +2 -0
  130. package/lib/commonjs/types/SummaryTypes.js.map +1 -0
  131. package/lib/commonjs/types/SyncTypes.js +33 -0
  132. package/lib/commonjs/types/SyncTypes.js.map +1 -0
  133. package/lib/commonjs/types/WriteNutrition.js +18 -0
  134. package/lib/commonjs/types/WriteNutrition.js.map +1 -0
  135. package/lib/commonjs/utils/getNativeModule.js +29 -0
  136. package/lib/commonjs/utils/getNativeModule.js.map +1 -0
  137. package/lib/commonjs/utils/getRookModule.js +28 -0
  138. package/lib/commonjs/utils/getRookModule.js.map +1 -0
  139. package/{src/utils/isModuleReady.ts → lib/commonjs/utils/isModuleReady.js} +10 -4
  140. package/lib/commonjs/utils/isModuleReady.js.map +1 -0
  141. package/lib/commonjs/utils/isRunningOnAndroid.js +15 -0
  142. package/lib/commonjs/utils/isRunningOnAndroid.js.map +1 -0
  143. package/lib/commonjs/utils/isRunningOniOS.js +15 -0
  144. package/lib/commonjs/utils/isRunningOniOS.js.map +1 -0
  145. package/lib/commonjs/utils/isValidDate.js +41 -0
  146. package/lib/commonjs/utils/isValidDate.js.map +1 -0
  147. package/lib/commonjs/utils/nativeModules.js +29 -0
  148. package/lib/commonjs/utils/nativeModules.js.map +1 -0
  149. package/lib/commonjs/utils/packageInfo.js +13 -0
  150. package/lib/commonjs/utils/packageInfo.js.map +1 -0
  151. package/lib/module/context/RookSyncGateContext.js +0 -2
  152. package/lib/module/context/RookSyncGateContext.js.map +1 -1
  153. package/lib/module/context/RookSyncGateProvider.js +31 -22
  154. package/lib/module/context/RookSyncGateProvider.js.map +1 -1
  155. package/lib/module/context/RookSyncGateReducer.js +12 -4
  156. package/lib/module/context/RookSyncGateReducer.js.map +1 -1
  157. package/lib/module/context/RookSyncGateTypes.js +0 -2
  158. package/lib/module/context/index.js +2 -0
  159. package/lib/module/context/index.js.map +1 -0
  160. package/lib/module/hooks/index.js +11 -0
  161. package/lib/module/hooks/index.js.map +1 -0
  162. package/lib/module/hooks/useRookAPISources.js +16 -10
  163. package/lib/module/hooks/useRookAPISources.js.map +1 -1
  164. package/lib/module/hooks/useRookAndroidBackgroundSteps.js +12 -11
  165. package/lib/module/hooks/useRookAndroidBackgroundSteps.js.map +1 -1
  166. package/lib/module/hooks/useRookAppleHealth.js +10 -9
  167. package/lib/module/hooks/useRookAppleHealth.js.map +1 -1
  168. package/lib/module/hooks/useRookConfiguration.js +34 -10
  169. package/lib/module/hooks/useRookConfiguration.js.map +1 -1
  170. package/lib/module/hooks/useRookData.js +45 -31
  171. package/lib/module/hooks/useRookData.js.map +1 -1
  172. package/lib/module/hooks/useRookHealthConnect.js +10 -9
  173. package/lib/module/hooks/useRookHealthConnect.js.map +1 -1
  174. package/lib/module/hooks/useRookPermissions.js +49 -26
  175. package/lib/module/hooks/useRookPermissions.js.map +1 -1
  176. package/lib/module/hooks/useRookSamsungHealth.js +20 -8
  177. package/lib/module/hooks/useRookSamsungHealth.js.map +1 -1
  178. package/lib/module/hooks/useRookSync.js +32 -23
  179. package/lib/module/hooks/useRookSync.js.map +1 -1
  180. package/lib/module/hooks/useRookVariables.js +37 -19
  181. package/lib/module/hooks/useRookVariables.js.map +1 -1
  182. package/lib/module/index.js +10 -18
  183. package/lib/module/index.js.map +1 -1
  184. package/lib/module/modules/hook/useRookAutoSync.js +40 -27
  185. package/lib/module/modules/hook/useRookAutoSync.js.map +1 -1
  186. package/lib/module/modules/types/sendMessageBroadcast.js +1 -1
  187. package/lib/module/modules/utils/errors.js +0 -2
  188. package/lib/module/modules/utils/errors.js.map +1 -1
  189. package/lib/module/types/ActivityEvent.js +0 -2
  190. package/lib/module/types/AppleHealthNutritionEvent.js +70 -0
  191. package/lib/module/types/AppleHealthNutritionEvent.js.map +1 -0
  192. package/lib/module/types/AppleHealthPermissions.js +0 -2
  193. package/lib/module/types/AppleHealthPermissions.js.map +1 -1
  194. package/lib/module/types/AuthorizedSources.js +0 -2
  195. package/lib/module/types/BodySummary.js +0 -2
  196. package/lib/module/types/DataSource.js +0 -2
  197. package/lib/module/types/DataSource.js.map +1 -1
  198. package/lib/module/types/DiagnosticState.js +2 -0
  199. package/lib/module/types/DiagnosticState.js.map +1 -0
  200. package/lib/module/types/HCMealData.js +59 -0
  201. package/lib/module/types/HCMealData.js.map +1 -0
  202. package/lib/module/types/HeartRateEvent.js +1 -1
  203. package/lib/module/types/PermissionsType.js +1 -1
  204. package/lib/module/types/PhysicalSummary.js +0 -2
  205. package/lib/module/types/SDKSources.js +0 -2
  206. package/lib/module/types/SDKSources.js.map +1 -1
  207. package/lib/module/types/SamsungHealthPermissions.js +0 -3
  208. package/lib/module/types/SamsungHealthPermissions.js.map +1 -1
  209. package/lib/module/types/SleepSummary.js +0 -2
  210. package/lib/module/types/SummaryTypes.js +1 -1
  211. package/lib/module/types/SyncTypes.js +0 -2
  212. package/lib/module/types/SyncTypes.js.map +1 -1
  213. package/lib/module/types/WriteNutrition.js +12 -0
  214. package/lib/module/types/WriteNutrition.js.map +1 -0
  215. package/lib/module/utils/getNativeModule.js +23 -0
  216. package/lib/module/utils/getNativeModule.js.map +1 -0
  217. package/lib/module/utils/getRookModule.js +22 -0
  218. package/lib/module/utils/getRookModule.js.map +1 -0
  219. package/lib/module/utils/isModuleReady.js +0 -2
  220. package/lib/module/utils/isModuleReady.js.map +1 -1
  221. package/lib/module/utils/isRunningOnAndroid.js +0 -2
  222. package/lib/module/utils/isRunningOnAndroid.js.map +1 -1
  223. package/lib/module/utils/isRunningOniOS.js +0 -2
  224. package/lib/module/utils/isRunningOniOS.js.map +1 -1
  225. package/lib/module/utils/isValidDate.js +20 -2
  226. package/lib/module/utils/isValidDate.js.map +1 -1
  227. package/lib/module/utils/nativeModules.js +23 -0
  228. package/lib/module/utils/nativeModules.js.map +1 -0
  229. package/lib/module/utils/packageInfo.js +7 -0
  230. package/lib/module/utils/packageInfo.js.map +1 -0
  231. package/lib/typescript/src/context/RookSyncGateContext.d.ts.map +1 -1
  232. package/lib/typescript/src/context/RookSyncGateProvider.d.ts.map +1 -1
  233. package/lib/typescript/src/context/RookSyncGateReducer.d.ts.map +1 -1
  234. package/lib/typescript/src/context/RookSyncGateTypes.d.ts +14 -4
  235. package/lib/typescript/src/context/RookSyncGateTypes.d.ts.map +1 -1
  236. package/lib/typescript/src/context/index.d.ts +2 -0
  237. package/lib/typescript/src/context/index.d.ts.map +1 -0
  238. package/lib/typescript/src/hooks/index.d.ts +11 -0
  239. package/lib/typescript/src/hooks/index.d.ts.map +1 -0
  240. package/lib/typescript/src/hooks/useRookAPISources.d.ts.map +1 -1
  241. package/lib/typescript/src/hooks/useRookAndroidBackgroundSteps.d.ts.map +1 -1
  242. package/lib/typescript/src/hooks/useRookAppleHealth.d.ts.map +1 -1
  243. package/lib/typescript/src/hooks/useRookConfiguration.d.ts +3 -1
  244. package/lib/typescript/src/hooks/useRookConfiguration.d.ts.map +1 -1
  245. package/lib/typescript/src/hooks/useRookData.d.ts +2 -2
  246. package/lib/typescript/src/hooks/useRookData.d.ts.map +1 -1
  247. package/lib/typescript/src/hooks/useRookHealthConnect.d.ts.map +1 -1
  248. package/lib/typescript/src/hooks/useRookPermissions.d.ts +2 -0
  249. package/lib/typescript/src/hooks/useRookPermissions.d.ts.map +1 -1
  250. package/lib/typescript/src/hooks/useRookSamsungHealth.d.ts +6 -0
  251. package/lib/typescript/src/hooks/useRookSamsungHealth.d.ts.map +1 -1
  252. package/lib/typescript/src/hooks/useRookSync.d.ts.map +1 -1
  253. package/lib/typescript/src/hooks/useRookVariables.d.ts +2 -0
  254. package/lib/typescript/src/hooks/useRookVariables.d.ts.map +1 -1
  255. package/lib/typescript/src/index.d.ts +8 -17
  256. package/lib/typescript/src/index.d.ts.map +1 -1
  257. package/lib/typescript/src/modules/hook/useRookAutoSync.d.ts.map +1 -1
  258. package/lib/typescript/src/types/AppleHealthNutritionEvent.d.ts +76 -0
  259. package/lib/typescript/src/types/AppleHealthNutritionEvent.d.ts.map +1 -0
  260. package/lib/typescript/src/types/AuthorizedSources.d.ts +0 -11
  261. package/lib/typescript/src/types/AuthorizedSources.d.ts.map +1 -1
  262. package/lib/typescript/src/types/DiagnosticState.d.ts +13 -0
  263. package/lib/typescript/src/types/DiagnosticState.d.ts.map +1 -0
  264. package/lib/typescript/src/types/HCMealData.d.ts +60 -0
  265. package/lib/typescript/src/types/HCMealData.d.ts.map +1 -0
  266. package/lib/typescript/src/types/HeartRateEvent.d.ts +2 -2
  267. package/lib/typescript/src/types/HeartRateEvent.d.ts.map +1 -1
  268. package/lib/typescript/src/types/SamsungHealthPermissions.d.ts +0 -1
  269. package/lib/typescript/src/types/SamsungHealthPermissions.d.ts.map +1 -1
  270. package/lib/typescript/src/types/SyncTypes.d.ts +1 -5
  271. package/lib/typescript/src/types/SyncTypes.d.ts.map +1 -1
  272. package/lib/typescript/src/types/WriteNutrition.d.ts +61 -0
  273. package/lib/typescript/src/types/WriteNutrition.d.ts.map +1 -0
  274. package/lib/typescript/src/utils/getNativeModule.d.ts +10 -0
  275. package/lib/typescript/src/utils/getNativeModule.d.ts.map +1 -0
  276. package/lib/typescript/src/utils/getRookModule.d.ts +9 -0
  277. package/lib/typescript/src/utils/getRookModule.d.ts.map +1 -0
  278. package/lib/typescript/src/utils/isModuleReady.d.ts.map +1 -1
  279. package/lib/typescript/src/utils/isValidDate.d.ts +8 -0
  280. package/lib/typescript/src/utils/isValidDate.d.ts.map +1 -1
  281. package/lib/typescript/src/utils/nativeModules.d.ts +24 -0
  282. package/lib/typescript/src/utils/nativeModules.d.ts.map +1 -0
  283. package/lib/typescript/src/utils/packageInfo.d.ts +6 -0
  284. package/lib/typescript/src/utils/packageInfo.d.ts.map +1 -0
  285. package/package.json +98 -94
  286. package/react-native-rook-sdk.podspec +45 -0
  287. package/RNRookSdk.podspec +0 -22
  288. package/ios/Encodable.swift +0 -25
  289. package/ios/RookEntry.swift +0 -61
  290. package/ios/RookSdk-Bridging-Header.h +0 -12
  291. package/ios/boost-boost_privacy-Bridging-Header.h +0 -4
  292. package/lib/module/NativeRookSdk.js.map +0 -1
  293. package/lib/module/package.json +0 -1
  294. package/lib/module/types/Rook.js +0 -2
  295. package/lib/typescript/package.json +0 -1
  296. package/lib/typescript/src/NativeRookSdk.d.ts +0 -190
  297. package/lib/typescript/src/NativeRookSdk.d.ts.map +0 -1
  298. package/lib/typescript/src/types/Rook.d.ts +0 -9
  299. package/lib/typescript/src/types/Rook.d.ts.map +0 -1
  300. package/src/NativeRookSdk.ts +0 -281
  301. package/src/context/RookSyncGateProvider.tsx +0 -78
  302. package/src/context/RookSyncGateTypes.ts +0 -34
  303. package/src/hooks/useRookAndroidBackgroundSteps.ts +0 -81
  304. package/src/hooks/useRookAppleHealth.ts +0 -55
  305. package/src/hooks/useRookConfiguration.ts +0 -82
  306. package/src/hooks/useRookData.ts +0 -122
  307. package/src/hooks/useRookHealthConnect.ts +0 -59
  308. package/src/hooks/useRookPermissions.ts +0 -224
  309. package/src/hooks/useRookSamsungHealth.ts +0 -37
  310. package/src/hooks/useRookSync.ts +0 -157
  311. package/src/hooks/useRookVariables.ts +0 -77
  312. package/src/index.tsx +0 -28
  313. package/src/modules/hook/useRookAutoSync.ts +0 -305
  314. package/src/modules/types/sendMessageBroadcast.ts +0 -5
  315. package/src/modules/utils/errors.ts +0 -9
  316. package/src/types/ActivityEvent.ts +0 -159
  317. package/src/types/AppleHealthPermissions.ts +0 -49
  318. package/src/types/AuthorizedSources.ts +0 -33
  319. package/src/types/BodySummary.ts +0 -116
  320. package/src/types/DataSource.ts +0 -16
  321. package/src/types/HeartRateEvent.ts +0 -26
  322. package/src/types/PermissionsType.ts +0 -9
  323. package/src/types/PhysicalSummary.ts +0 -84
  324. package/src/types/Rook.ts +0 -8
  325. package/src/types/SDKSources.ts +0 -5
  326. package/src/types/SamsungHealthPermissions.ts +0 -16
  327. package/src/types/SleepSummary.ts +0 -66
  328. package/src/types/SummaryTypes.ts +0 -70
  329. package/src/types/SyncTypes.ts +0 -63
  330. package/src/utils/isRunningOnAndroid.ts +0 -10
  331. package/src/utils/isRunningOniOS.ts +0 -10
  332. package/src/utils/isValidDate.ts +0 -15
@@ -0,0 +1,551 @@
1
+ package com.rooksdk.modules
2
+
3
+ import com.facebook.react.bridge.Arguments
4
+ import com.facebook.react.bridge.Callback
5
+ import com.facebook.react.bridge.Promise
6
+ import com.facebook.react.bridge.ReactApplicationContext
7
+ import com.facebook.react.bridge.ReactContextBaseJavaModule
8
+ import com.facebook.react.bridge.ReactMethod
9
+ import com.google.gson.Gson
10
+ import com.google.gson.GsonBuilder
11
+ import com.rookmotion.rook.sdk.RookSyncManager
12
+ import com.rookmotion.rook.sdk.domain.enums.SyncStatus
13
+ import com.rookmotion.rook.sdk.domain.exception.HCException
14
+ import com.rookmotion.rook.sdk.domain.exception.HCRecordsNotFoundException
15
+ import com.rookmotion.rook.sdk.domain.model.HCHeartRate
16
+ import com.rookmotion.rook.sdk.domain.model.SyncStatusWithData
17
+ import com.rooksdk.utils.RookDateTime
18
+ import com.rooksdk.utils.SamsungAvailability
19
+ import com.rooksdk.utils.StringToSyncType
20
+ import com.rooksdk.utils.serializers.InstantSerializer
21
+ import com.rooksdk.utils.serializers.LocalDateSerializer
22
+ import io.tryrook.sdk.samsung.RookSamsung
23
+ import io.tryrook.sdk.samsung.domain.enums.SHSyncStatus
24
+ import io.tryrook.sdk.samsung.domain.exception.SHException
25
+ import io.tryrook.sdk.samsung.domain.model.SHSyncStatusWithData
26
+ import kotlinx.coroutines.CoroutineScope
27
+ import kotlinx.coroutines.Dispatchers
28
+ import kotlinx.coroutines.SupervisorJob
29
+ import kotlinx.coroutines.launch
30
+ import java.time.Instant
31
+ import java.time.LocalDate
32
+
33
+ class RookSyncModule(
34
+ reactContext: ReactApplicationContext,
35
+ private val rookSamsung: RookSamsung
36
+ ): ReactContextBaseJavaModule(reactContext) {
37
+
38
+ private val rookSync by lazy {
39
+ RookSyncManager(reactContext)
40
+ }
41
+
42
+ private val scope: CoroutineScope by lazy {
43
+ CoroutineScope(SupervisorJob() + Dispatchers.Main)
44
+ }
45
+
46
+ private val gsonBuilder: Gson by lazy {
47
+ GsonBuilder()
48
+ .registerTypeAdapter(Instant::class.java, InstantSerializer())
49
+ .registerTypeAdapter(LocalDate::class.java, LocalDateSerializer())
50
+ .create()
51
+ }
52
+
53
+ @ReactMethod
54
+ fun enableSamsungSync(promise: Promise) {
55
+ scope.launch {
56
+ rookSamsung.schedule(true)
57
+ promise.resolve(true)
58
+ }
59
+ }
60
+
61
+ @ReactMethod
62
+ fun isSamsungSyncEnabled(promise: Promise) {
63
+ scope.launch {
64
+ rookSamsung.isScheduled().fold(
65
+ {
66
+ promise.resolve(it)
67
+ },
68
+ {
69
+ if (it is SHException) {
70
+ promise.reject(it.code.toString(), it.message, it)
71
+ } else {
72
+ promise.reject("1001", it.message, it)
73
+ }
74
+ }
75
+ )
76
+ }
77
+ }
78
+
79
+ @ReactMethod
80
+ fun disableSamsungSync(promise: Promise) {
81
+ scope.launch {
82
+ rookSamsung.cancel()
83
+ promise.resolve(true)
84
+ }
85
+ }
86
+
87
+ @ReactMethod
88
+ fun syncTodaySamsungHealthStepsCount(promise: Promise) {
89
+ scope.launch {
90
+ rookSamsung.getTodayStepsCount().fold({
91
+ when (it) {
92
+ SHSyncStatusWithData.RecordsNotFound -> {
93
+ promise.reject("SamsungStepsCount", "Records Not Found")
94
+ }
95
+
96
+ is SHSyncStatusWithData.Synced -> {
97
+ val steps = it.data
98
+ promise.resolve(steps)
99
+ }
100
+ }
101
+ }, {
102
+ if (it is SHException) {
103
+ promise.reject(it.code.toString(), it.message, it)
104
+ } else {
105
+ promise.reject("1001", it.message, it)
106
+ }
107
+ })
108
+ }
109
+ }
110
+
111
+ /**
112
+ * Synchronizes the step count for the current day from Health Connect.
113
+ * This method queries the Health Connect platform via the Rook SDK to retrieve
114
+ * the step count for today. If no records are found, it rejects the promise with an error message.
115
+ *
116
+ * @param promise A promise object that resolves with the step count if data is found,
117
+ * or rejects with an error if records are not found or synchronization fails.
118
+ */
119
+ @ReactMethod
120
+ fun syncTodayHealthConnectStepsCount(promise: Promise) {
121
+ scope.launch {
122
+ rookSync.getTodayStepsCount().fold(
123
+ {
124
+ when (it) {
125
+ SyncStatusWithData.RecordsNotFound -> {
126
+ promise.reject("HealthConnectStepsCount", "Records Not Found")
127
+ }
128
+
129
+ is SyncStatusWithData.Synced -> {
130
+ val steps = it.data
131
+ promise.resolve(steps)
132
+ }
133
+ }
134
+ },
135
+ {
136
+ if (it is HCException) {
137
+ promise.reject(it.code.toString(), it.message, it)
138
+ } else {
139
+ promise.reject("1001", it.message, it)
140
+ }
141
+ }
142
+ )
143
+ }
144
+ }
145
+
146
+ @ReactMethod
147
+ fun syncSHTodayCaloriesCount(promise: Promise) {
148
+ scope.launch {
149
+ rookSamsung.getTodayCaloriesCount().fold(
150
+ {
151
+ when (it) {
152
+ SHSyncStatusWithData.RecordsNotFound -> {
153
+ promise.reject("7", "The SDK could not find any health data related with calories")
154
+ }
155
+
156
+ is SHSyncStatusWithData.Synced -> {
157
+ val data = Arguments.createMap().apply {
158
+ putDouble("basal", it.data.basal ?: 0.0)
159
+ putDouble("active", it.data.active ?: 0.0)
160
+ }
161
+
162
+ promise.resolve(data)
163
+ }
164
+ }
165
+ },
166
+ {
167
+ if (it is SHException) {
168
+ promise.reject(it.code.toString(), it.message, it)
169
+ } else {
170
+ promise.reject("1001", it.message, it)
171
+ }
172
+ }
173
+ )
174
+ }
175
+ }
176
+
177
+ /**
178
+ * Synchronizes the calories count for the current day from Health Connect.
179
+ * This method queries the Health Connect platform via the Rook SDK to retrieve
180
+ * the calories count for today. If no records are found, it rejects the promise with an error message.
181
+ *
182
+ * @param promise A promise object that resolves with the step count if data is found,
183
+ * or rejects with an error if records are not found or synchronization fails.
184
+ */
185
+ @ReactMethod
186
+ fun syncTodayCaloriesCount(promise: Promise) {
187
+ scope.launch {
188
+ rookSync.getTodayCaloriesCount().fold(
189
+ {
190
+ when (it) {
191
+ SyncStatusWithData.RecordsNotFound -> {
192
+ promise.reject("7", "The SDK could not find any health data related with calories")
193
+ }
194
+
195
+ is SyncStatusWithData.Synced -> {
196
+ val data = Arguments.createMap().apply {
197
+ putDouble("basal", it.data.basal ?: 0.0)
198
+ putDouble("active", it.data.active ?: 0.0)
199
+ }
200
+
201
+ promise.resolve(data)
202
+ }
203
+ }
204
+ },
205
+ {
206
+ if (it is HCException) {
207
+ promise.reject(it.code.toString(), it.message, it)
208
+ } else {
209
+ promise.reject("1001", it.message, it)
210
+ }
211
+ }
212
+ )
213
+ }
214
+ }
215
+
216
+ @ReactMethod
217
+ fun getTodayHeartRate(promise: Promise) {
218
+ scope.launch {
219
+ rookSync.getTodayHeartRate().fold(
220
+ { syncStatus ->
221
+ when (syncStatus) {
222
+ SyncStatusWithData.RecordsNotFound -> {
223
+ promise.reject("7", "The SDK could not find any health data related with calories")
224
+ }
225
+
226
+ is SyncStatusWithData.Synced -> {
227
+ promise.resolve(gsonBuilder.toJson(syncStatus.data))
228
+ }
229
+ }
230
+ },
231
+ {
232
+ if (it is HCException) {
233
+ promise.reject(it.code.toString(), it.message, it)
234
+ } else {
235
+ promise.reject("1001", it.message, it)
236
+ }
237
+ },
238
+ )
239
+ }
240
+ }
241
+
242
+ @ReactMethod
243
+ fun getSHTodayHeartRate(promise: Promise) {
244
+ scope.launch {
245
+ rookSamsung.getTodayHeartRate().fold(
246
+ { syncStatus ->
247
+ when (syncStatus) {
248
+ SHSyncStatusWithData.RecordsNotFound -> {
249
+ promise.reject("7", "The SDK could not find any health data related with calories")
250
+ }
251
+
252
+ is SHSyncStatusWithData.Synced -> {
253
+ promise.resolve(gsonBuilder.toJson(syncStatus.data))
254
+ }
255
+ }
256
+ },
257
+ {
258
+ if (it is HCException) {
259
+ promise.reject(it.code.toString(), it.message, it)
260
+ } else {
261
+ promise.reject("1001", it.message, it)
262
+ }
263
+ },
264
+ )
265
+ }
266
+ }
267
+
268
+ @ReactMethod
269
+ fun sync(enableLogs: Boolean, callback: Callback) {
270
+ scope.launch {
271
+ rookSync.sync(enableLogs).fold({ result ->
272
+ callback.invoke(null, result)
273
+ }, {
274
+ val params = Arguments.createMap().apply {
275
+ if (it is HCException) {
276
+ putString(it.code.toString(), it.message)
277
+ } else {
278
+ putString("1001", it.localizedMessage ?: it.message)
279
+ }
280
+ }
281
+
282
+ callback.invoke(params, false)
283
+ })
284
+ }
285
+ }
286
+
287
+ @ReactMethod
288
+ fun syncByDate(date: String, callback: Callback) {
289
+ val localDate = RookDateTime.stringToLocalDate(date)
290
+
291
+ scope.launch {
292
+ val result = rookSync.sync(localDate)
293
+
294
+ try {
295
+ val sleepSummaryStatus = result.sleepSummary.getOrThrow()
296
+ val physicalSummaryStatus = result.physicalSummary.getOrThrow()
297
+ val bodySummaryStatus = result.bodySummary.getOrThrow()
298
+
299
+ val noSleepData = sleepSummaryStatus == SyncStatus.RECORDS_NOT_FOUND
300
+ val noPhysicalData = physicalSummaryStatus == SyncStatus.RECORDS_NOT_FOUND
301
+ val noBodyData = bodySummaryStatus == SyncStatus.RECORDS_NOT_FOUND
302
+
303
+ if (noSleepData && noPhysicalData && noBodyData) {
304
+ val throwable = HCRecordsNotFoundException("Sleep, Physical and Body summary")
305
+
306
+ val params = Arguments.createMap().apply {
307
+ putString(throwable.code.toString(), throwable.message)
308
+ }
309
+
310
+ callback.invoke(params, false)
311
+ } else {
312
+ callback.invoke(null, true)
313
+ }
314
+ } catch (e: Exception) {
315
+ val params = Arguments.createMap().apply {
316
+ if (e is HCException){
317
+ putString(e.code.toString(), e.message)
318
+ } else {
319
+ putString("1001", e.message ?: "Unknown error")
320
+ }
321
+ }
322
+
323
+ callback.invoke(params, false)
324
+ }
325
+ }
326
+ }
327
+
328
+ @ReactMethod
329
+ fun syncByDefinition(summary: String, date: String, callback: Callback) {
330
+ val localDate = RookDateTime.stringToLocalDate(date)
331
+ val type = StringToSyncType.stringToSummary(summary)
332
+
333
+ scope.launch {
334
+ val result = rookSync.sync(localDate, type)
335
+ result.onSuccess {
336
+ when (it) {
337
+ SyncStatus.RECORDS_NOT_FOUND -> {
338
+ val throwable = HCRecordsNotFoundException(type.toString())
339
+
340
+ val params = Arguments.createMap().apply {
341
+ putString(throwable.code.toString(), throwable.message)
342
+ }
343
+
344
+ callback.invoke(params, false)
345
+ }
346
+ SyncStatus.SYNCED -> callback.invoke(null, true)
347
+ }
348
+ }
349
+
350
+ result.onFailure {
351
+ val params = Arguments.createMap().apply {
352
+ if (it is HCException) {
353
+ putString(it.code.toString(), it.message)
354
+ } else {
355
+ putString("1001", it.localizedMessage ?: it.message)
356
+ }
357
+ }
358
+
359
+ callback.invoke(params, false)
360
+ }
361
+ }
362
+ }
363
+
364
+ @ReactMethod
365
+ fun syncEvent(date: String, event: String, promise: Promise) {
366
+ val localDate = RookDateTime.stringToLocalDate(date)
367
+ val type = StringToSyncType.stringToEvent(event)
368
+
369
+ scope.launch {
370
+ rookSync.syncEvents(localDate, type).fold({ result ->
371
+ when(result) {
372
+ SyncStatus.RECORDS_NOT_FOUND -> {
373
+ val throwable = HCRecordsNotFoundException(type.toString())
374
+
375
+ promise.reject(throwable.code.toString(), throwable.message, throwable)
376
+ }
377
+ SyncStatus.SYNCED -> promise.resolve(true)
378
+ }
379
+ }, {
380
+ if (it is HCException) {
381
+ promise.reject(it.code.toString(), it.message, it)
382
+ } else {
383
+ promise.reject("1001", it.message, it)
384
+ }
385
+ })
386
+ }
387
+ }
388
+
389
+ @ReactMethod
390
+ fun shSync(enableLogs: Boolean, callback: Callback) {
391
+ scope.launch {
392
+ if (!SamsungAvailability.isSamsungAvailable(rookSamsung)){
393
+ val params = Arguments.createMap().apply {
394
+ putString("5", "Samsung health is not available")
395
+ }
396
+
397
+ callback.invoke(params, false)
398
+ return@launch
399
+ }
400
+
401
+ rookSamsung.sync(enableLogs).fold(
402
+ {
403
+ callback(null, true)
404
+ }, {
405
+ val params = Arguments.createMap().apply {
406
+ if (it is SHException) {
407
+ putString(it.code.toString(), it.message)
408
+ } else {
409
+ putString("1001", it.localizedMessage ?: it.message)
410
+ }
411
+ }
412
+
413
+ callback.invoke(params, false)
414
+ }
415
+ )
416
+ }
417
+ }
418
+
419
+ @ReactMethod
420
+ fun shSyncByDate(date: String, callback: Callback) {
421
+ val localDate = RookDateTime.stringToLocalDate(date)
422
+
423
+ scope.launch {
424
+ if (!SamsungAvailability.isSamsungAvailable(rookSamsung)){
425
+ val params = Arguments.createMap().apply {
426
+ putString("5", "Samsung health is not available")
427
+ }
428
+
429
+ callback.invoke(params, false)
430
+ return@launch
431
+ }
432
+
433
+ val result = rookSamsung.sync(localDate)
434
+
435
+ try {
436
+ val sleepSummaryStatus = result.sleepSummary.getOrThrow()
437
+ val physicalSummaryStatus = result.physicalSummary.getOrThrow()
438
+ val bodySummaryStatus = result.bodySummary.getOrThrow()
439
+
440
+ val noSleepData = sleepSummaryStatus == SHSyncStatus.RECORDS_NOT_FOUND
441
+ val noPhysicalData = physicalSummaryStatus == SHSyncStatus.RECORDS_NOT_FOUND
442
+ val noBodyData = bodySummaryStatus == SHSyncStatus.RECORDS_NOT_FOUND
443
+
444
+ if (noSleepData && noPhysicalData && noBodyData) {
445
+ val throwable = HCRecordsNotFoundException("Sleep, Physical and Body summary")
446
+
447
+ val params = Arguments.createMap().apply {
448
+ putString(throwable.code.toString(), throwable.message)
449
+ }
450
+
451
+ callback.invoke(params, false)
452
+ } else {
453
+ callback.invoke(null, true)
454
+ }
455
+ } catch (e: Exception) {
456
+ val params = Arguments.createMap().apply {
457
+ if (e is HCException){
458
+ putString(e.code.toString(), e.message)
459
+ } else {
460
+ putString("1001", e.message ?: "Unknown error")
461
+ }
462
+ }
463
+
464
+ callback.invoke(params, false)
465
+ }
466
+ }
467
+ }
468
+
469
+ @ReactMethod
470
+ fun shSyncByDefinition(summary: String, date: String, callback: Callback) {
471
+ val localDate = RookDateTime.stringToLocalDate(date)
472
+ val type = StringToSyncType.stringToSamsungPillar(summary)
473
+
474
+ scope.launch {
475
+ if (!SamsungAvailability.isSamsungAvailable(rookSamsung)){
476
+ val params = Arguments.createMap().apply {
477
+ putString("5", "Samsung health is not available")
478
+ }
479
+
480
+ callback.invoke(params, false)
481
+ return@launch
482
+ }
483
+
484
+ val result = rookSamsung.sync(localDate, type)
485
+ result.onSuccess {
486
+ when (it) {
487
+ SHSyncStatus.RECORDS_NOT_FOUND -> {
488
+ val throwable = HCRecordsNotFoundException(type.toString())
489
+
490
+ val params = Arguments.createMap().apply {
491
+ putString(throwable.code.toString(), throwable.message)
492
+ }
493
+
494
+ callback.invoke(params, false)
495
+ }
496
+ SHSyncStatus.SYNCED -> callback.invoke(null, true)
497
+ }
498
+ }
499
+
500
+ result.onFailure {
501
+ val params = Arguments.createMap().apply {
502
+ if (it is HCException) {
503
+ putString(it.code.toString(), it.message)
504
+ } else {
505
+ putString("1001", it.localizedMessage ?: it.message)
506
+ }
507
+ }
508
+
509
+ callback.invoke(params, false)
510
+ }
511
+ }
512
+ }
513
+
514
+ @ReactMethod
515
+ fun shSyncEvent(date: String, event: String, promise: Promise) {
516
+ val localDate = RookDateTime.stringToLocalDate(date)
517
+ val type = StringToSyncType.stringToSamsungEvent(event)
518
+
519
+ scope.launch {
520
+ if (!SamsungAvailability.isSamsungAvailable(rookSamsung)){
521
+ promise.reject(
522
+ "5",
523
+ "Samsung health is not available",
524
+ Throwable("Samsung health is not available")
525
+ )
526
+ return@launch
527
+ }
528
+
529
+ rookSamsung.syncEvents(localDate, type).fold({ result ->
530
+ when(result) {
531
+ SHSyncStatus.RECORDS_NOT_FOUND -> {
532
+ val throwable = HCRecordsNotFoundException(type.toString())
533
+
534
+ promise.reject(throwable.code.toString(), throwable.message, throwable)
535
+ }
536
+ SHSyncStatus.SYNCED -> promise.resolve(true)
537
+ }
538
+ }, {
539
+ if (it is HCException) {
540
+ promise.reject(it.code.toString(), it.message, it)
541
+ } else {
542
+ promise.reject("1001", it.message, it)
543
+ }
544
+ })
545
+ }
546
+ }
547
+ override fun getName(): String {
548
+ return "RookSyncModule"
549
+ }
550
+
551
+ }
@@ -0,0 +1,34 @@
1
+ package com.rooksdk.utils
2
+
3
+ import com.facebook.react.bridge.ReadableArray
4
+ import io.tryrook.api.sources.domain.enums.DataSourceType
5
+
6
+ object DatasourcesUtils {
7
+
8
+ /**
9
+ * Maps a data source string to its corresponding DataSourceType enum.
10
+ * @param source The data source name as a string (e.g., "Garmin", "Fitbit").
11
+ * @return The corresponding DataSourceType enum or null if the string does not match.
12
+ */
13
+ fun mapToDataSourceType(source: String): DataSourceType? {
14
+ return try {
15
+ DataSourceType.valueOf(source)
16
+ } catch (e: IllegalArgumentException) {
17
+ null
18
+ }
19
+ }
20
+
21
+ fun readableArrayToSourceList(sources: ReadableArray): List<Source> {
22
+ val rawList = sources.toArrayList()
23
+
24
+ return rawList
25
+ .mapNotNull { it as? String }
26
+ .mapNotNull {
27
+ try {
28
+ Source.valueOf(it)
29
+ } catch (e: IllegalArgumentException) {
30
+ null
31
+ }
32
+ }
33
+ }
34
+ }
@@ -0,0 +1,21 @@
1
+ package com.rooksdk.utils
2
+
3
+ import com.facebook.react.bridge.ReadableArray
4
+ import io.tryrook.sdk.samsung.domain.enums.SamsungHealthPermission
5
+
6
+ object PermissionConversion {
7
+
8
+ fun parseSamsungPermissions(rawPermissions: ReadableArray): Set<SamsungHealthPermission> {
9
+ val rawList = rawPermissions.toArrayList()
10
+
11
+ return rawList
12
+ .mapNotNull { it as? String }
13
+ .mapNotNull {
14
+ try {
15
+ SamsungHealthPermission.valueOf(it)
16
+ } catch (e: IllegalArgumentException) {
17
+ null
18
+ }
19
+ }.toSet()
20
+ }
21
+ }