react-native-rook-sdk 4.0.0-beta.2 → 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 (333) 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/commonjs/types/AppleHealthPermissions.js +57 -0
  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 +0 -13
  293. package/lib/module/NativeRookSdk.js.map +0 -1
  294. package/lib/module/package.json +0 -1
  295. package/lib/module/types/Rook.js +0 -2
  296. package/lib/typescript/package.json +0 -1
  297. package/lib/typescript/src/NativeRookSdk.d.ts +0 -116
  298. package/lib/typescript/src/NativeRookSdk.d.ts.map +0 -1
  299. package/lib/typescript/src/types/Rook.d.ts +0 -9
  300. package/lib/typescript/src/types/Rook.d.ts.map +0 -1
  301. package/src/NativeRookSdk.ts +0 -274
  302. package/src/context/RookSyncGateProvider.tsx +0 -78
  303. package/src/context/RookSyncGateTypes.ts +0 -34
  304. package/src/hooks/useRookAndroidBackgroundSteps.ts +0 -81
  305. package/src/hooks/useRookAppleHealth.ts +0 -55
  306. package/src/hooks/useRookConfiguration.ts +0 -82
  307. package/src/hooks/useRookData.ts +0 -122
  308. package/src/hooks/useRookHealthConnect.ts +0 -59
  309. package/src/hooks/useRookPermissions.ts +0 -224
  310. package/src/hooks/useRookSamsungHealth.ts +0 -37
  311. package/src/hooks/useRookSync.ts +0 -157
  312. package/src/hooks/useRookVariables.ts +0 -77
  313. package/src/index.tsx +0 -28
  314. package/src/modules/hook/useRookAutoSync.ts +0 -305
  315. package/src/modules/types/sendMessageBroadcast.ts +0 -5
  316. package/src/modules/utils/errors.ts +0 -9
  317. package/src/types/ActivityEvent.ts +0 -159
  318. package/src/types/AppleHealthPermissions.ts +0 -49
  319. package/src/types/AuthorizedSources.ts +0 -33
  320. package/src/types/BodySummary.ts +0 -116
  321. package/src/types/DataSource.ts +0 -16
  322. package/src/types/HeartRateEvent.ts +0 -26
  323. package/src/types/PermissionsType.ts +0 -9
  324. package/src/types/PhysicalSummary.ts +0 -84
  325. package/src/types/Rook.ts +0 -8
  326. package/src/types/SDKSources.ts +0 -5
  327. package/src/types/SamsungHealthPermissions.ts +0 -16
  328. package/src/types/SleepSummary.ts +0 -66
  329. package/src/types/SummaryTypes.ts +0 -70
  330. package/src/types/SyncTypes.ts +0 -63
  331. package/src/utils/isRunningOnAndroid.ts +0 -10
  332. package/src/utils/isRunningOniOS.ts +0 -10
  333. package/src/utils/isValidDate.ts +0 -15
@@ -0,0 +1,114 @@
1
+ //
2
+ // NutritionMapper.swift
3
+ // react-native-rook-sdk
4
+ //
5
+ // Created by Javier Villanueva on 24/02/26.
6
+ //
7
+
8
+ import Foundation
9
+ import RookSDK
10
+
11
+ class NutritionMapper {
12
+
13
+ static func mapToNutritionInsertionEvent(data: [String: Any]) -> NutritionInsertionEvent? {
14
+ // Helper for Date parsing
15
+ let dateFormatter = ISO8601DateFormatter()
16
+ guard let dateString = data["date"] as? String,
17
+ let date = dateFormatter.date(from: dateString),
18
+ let name = data["name"] as? String,
19
+ let quantityMap = data["quantity"] as? [String: Any],
20
+ let amount = quantityMap["amount"] as? Double,
21
+ let unit = quantityMap["unit"] as? Int else {
22
+ return nil
23
+ }
24
+
25
+ // Range check helper: [0.0, 100,000.0] for large values, [0.0, 100.0] for small
26
+ func validate(_ value: Any?, max: Double = 100000.0) -> Double? {
27
+ guard let val = value as? Double else { return nil }
28
+ return (val >= 0.0 && val <= max) ? val : nil
29
+ }
30
+
31
+ // 1. Quantity
32
+ let quantity = NutritionInsertionEventQuantity(unit: unit, amount: amount)
33
+
34
+ // 2. Energy & Water
35
+ let energyData = data["energyWaterData"] as? [String: Any]
36
+ let energyRelated = NutritionInsertionEnergyWaterDataRelated(
37
+ dietaryKiloCaloriesEnergyConsumed: validate(energyData?["dietaryKiloCaloriesEnergyConsumed"]),
38
+ dietaryMilliLiterWater: validate(energyData?["dietaryMilliLiterWater"])
39
+ )
40
+
41
+ // 3. Carbohydrates
42
+ let carbData = data["carbohydratesData"] as? [String: Any]
43
+ let carbRelated = NutritionCarbohydratesDataRelated(
44
+ dietaryGramCarbohydrates: validate(carbData?["dietaryGramCarbohydrates"]),
45
+ dietaryGramFiber: validate(carbData?["dietaryGramFiber"]),
46
+ dietaryGramSugar: validate(carbData?["dietaryGramSugar"])
47
+ )
48
+
49
+ // 4. Fats
50
+ let fatData = data["fatsData"] as? [String: Any]
51
+ let fatRelated = NutritionFatsDataRelated(
52
+ dietaryGramFatTotal: validate(fatData?["dietaryGramFatTotal"]),
53
+ dietaryGramFatSaturated: validate(fatData?["dietaryGramFatSaturated"]),
54
+ dietaryGramFatMonounsaturated: validate(fatData?["dietaryGramFatMonounsaturated"]),
55
+ dietaryGramFatPolyunsaturated: validate(fatData?["dietaryGramFatPolyunsaturated"])
56
+ )
57
+
58
+ // 5. Protein
59
+ let proteinData = data["proteinData"] as? [String: Any]
60
+ let proteinRelated = NutritionProteinDataRelated(
61
+ dietaryGramProtein: validate(proteinData?["dietaryGramProtein"]),
62
+ dietaryMilliGramCholesterol: validate(proteinData?["dietaryMilliGramCholesterol"])
63
+ )
64
+
65
+ // 6. Vitamins (Using 100.0 as limit for safety, adjust if needed)
66
+ let vitData = data["vitaminsData"] as? [String: Any]
67
+ let vitRelated = NutritionVitaminsDataRelated(
68
+ dietaryMicroGramVitaminA: validate(vitData?["dietaryMicroGramVitaminA"]),
69
+ dietaryMilliGramVitaminB6: validate(vitData?["dietaryMilliGramVitaminB6"]),
70
+ dietaryMicroGramVitaminB12: validate(vitData?["dietaryMicroGramVitaminB12"]),
71
+ dietaryMilliGramVitaminC: validate(vitData?["dietaryMilliGramVitaminC"]),
72
+ dietaryMicroGramVitaminD: validate(vitData?["dietaryMicroGramVitaminD"]),
73
+ dietaryMilliGramVitaminE: validate(vitData?["dietaryMilliGramVitaminE"]),
74
+ dietaryMicroGramVitaminK: validate(vitData?["dietaryMicroGramVitaminK"]),
75
+ dietaryMilliGramThiamin: validate(vitData?["dietaryMilliGramThiamin"]),
76
+ dietaryMilliGramRiboflavin: validate(vitData?["dietaryMilliGramRiboflavin"]),
77
+ dietaryMilliGramNiacin: validate(vitData?["dietaryMilliGramNiacin"]),
78
+ dietaryMilliGramPantothenicAcid: validate(vitData?["dietaryMilliGramPantothenicAcid"]),
79
+ dietaryMicroGramFolate: validate(vitData?["dietaryMicroGramFolate"]),
80
+ dietaryMicroGramBiotin: validate(vitData?["dietaryMicroGramBiotin"])
81
+ )
82
+
83
+ // 7. Minerals
84
+ let minData = data["mineralData"] as? [String: Any]
85
+ let minRelated = NutritionMineralDataRelated(
86
+ dietaryMilliGramsCalcium: validate(minData?["dietaryMilliGramsCalcium"]),
87
+ dietaryMilliGramsChloride: validate(minData?["dietaryMilliGramsChloride"]),
88
+ dietaryMilliGramsChromium: validate(minData?["dietaryMilliGramsChromium"]),
89
+ dietaryMilliGramsCopper: validate(minData?["dietaryMilliGramsCopper"]),
90
+ dietaryMilliGramsIodine: validate(minData?["dietaryMilliGramsIodine"]),
91
+ dietaryMilliGramsIron: validate(minData?["dietaryMilliGramsIron"]),
92
+ dietaryMilliGramsMagnesium: validate(minData?["dietaryMilliGramsMagnesium"]),
93
+ dietaryMilliGramsManganese: validate(minData?["dietaryMilliGramsManganese"]),
94
+ dietaryMilliGramsMolybdenum: validate(minData?["dietaryMilliGramsMolybdenum"]),
95
+ dietaryMilliGramsPhosphorus: validate(minData?["dietaryMilliGramsPhosphorus"]),
96
+ dietaryMilliGramsPotassium: validate(minData?["dietaryMilliGramsPotassium"]),
97
+ dietaryMilliGramsSelenium: validate(minData?["dietaryMilliGramsSelenium"]),
98
+ dietaryMilliGramsSodium: validate(minData?["dietaryMilliGramsSodium"]),
99
+ dietaryMilliGramsZinc: validate(minData?["dietaryMilliGramsZinc"])
100
+ )
101
+
102
+ return NutritionInsertionEvent(
103
+ name: name,
104
+ quantity: quantity,
105
+ date: date,
106
+ nutritionInsertionEnergyWaterDataRelated: energyRelated,
107
+ nutritionCarbohydratesDataRelated: carbRelated,
108
+ nutritionFatsDataRelated: fatRelated,
109
+ nutritionProteinDataRelated: proteinRelated,
110
+ nutritionVitaminsDataRelated: vitRelated,
111
+ nutritionMineralDataRelated: minRelated
112
+ )
113
+ }
114
+ }
@@ -1,15 +1,16 @@
1
1
  //
2
- // File.swift
3
- // RNRookSdk
2
+ // RookBackground.swift
3
+ // Pods
4
4
  //
5
- // Created by Javier Villanueva on 17/12/25.
5
+ // Created by Javier Villanueva on 03/12/25.
6
6
  //
7
7
 
8
8
  import RookSDK
9
- import React
10
9
 
11
- @objcMembers public class RookBackground: NSObject {
10
+ @objc(RookBackground)
11
+ public class RookBackground: NSObject {
12
12
 
13
+ @objc(enableBackGroundUpdates:reject:)
13
14
  public func enableBackGroundUpdates(
14
15
  _ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
15
16
  ) {
@@ -17,6 +18,7 @@ import React
17
18
  resolve(true)
18
19
  }
19
20
 
21
+ @objc(disableBackGroundUpdates:reject:)
20
22
  public func disableBackGroundUpdates(
21
23
  _ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
22
24
  ){
@@ -24,6 +26,7 @@ import React
24
26
  resolve(true)
25
27
  }
26
28
 
29
+ @objc(isBackgroundUpdatesEnabled:reject:)
27
30
  public func isBackgroundUpdatesEnabled(
28
31
  _ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
29
32
  ) {
@@ -0,0 +1,5 @@
1
+ #import <React/RCTBridgeModule.h>
2
+
3
+ @interface RookBackgroundModule : NSObject<RCTBridgeModule>
4
+
5
+ @end
@@ -0,0 +1,15 @@
1
+ #import <Foundation/Foundation.h>
2
+ #import <React/RCTBridgeModule.h>
3
+
4
+ @interface RCT_EXTERN_MODULE(RookBackground, NSObject)
5
+
6
+ RCT_EXTERN_METHOD(enableBackGroundUpdates: (RCTPromiseResolveBlock)resolve
7
+ reject:(RCTPromiseRejectBlock)reject)
8
+
9
+ RCT_EXTERN_METHOD(disableBackGroundUpdates: (RCTPromiseResolveBlock)resolve
10
+ reject:(RCTPromiseRejectBlock)reject)
11
+
12
+ RCT_EXTERN_METHOD(isBackgroundUpdatesEnabled: (RCTPromiseResolveBlock)resolve
13
+ reject:(RCTPromiseRejectBlock)reject)
14
+
15
+ @end
@@ -1,18 +1,19 @@
1
1
  //
2
- // File.swift
3
- // RNRookSdk
2
+ // RookConfiguration.swift
3
+ // Pods
4
4
  //
5
- // Created by Javier Villanueva on 17/12/25.
5
+ // Created by Javier Villanueva on 03/12/25.
6
6
  //
7
-
8
- import React
9
7
  import RookSDK
10
8
 
11
- @objcMembers public class RookConfiguration: NSObject {
9
+ @objc(RookConfiguration)
10
+ public class RookConfiguration: NSObject {
11
+
12
12
  lazy var userManager: UserManager = {
13
- return UserManager()
14
- }()
15
-
13
+ return UserManager()
14
+ }()
15
+
16
+ @objc(getUserID:reject:)
16
17
  public func getUserID(
17
18
  _ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
18
19
  ) {
@@ -29,14 +30,13 @@ import RookSDK
29
30
  reject(String(rookError.code), rookError.errorDescription, error as NSError)
30
31
  }
31
32
  } else {
32
- DispatchQueue.main.async {
33
- reject("1001", "An error ocurred with SDK try again", error as NSError)
34
- }
33
+ reject("1001", "An error ocurred with SDK try again", error as NSError)
35
34
  }
36
35
  }
37
36
  }
38
37
  }
39
-
38
+
39
+ @objc(updateUserID:resolve:reject:)
40
40
  public func updateUserID(
41
41
  _ userID: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
42
42
  ){
@@ -55,14 +55,13 @@ import RookSDK
55
55
  reject(String(rookError.code), rookError.errorDescription, error as NSError)
56
56
  }
57
57
  } else {
58
- DispatchQueue.main.async {
59
- reject("1001", "An error ocurred with SDK try again", error as NSError)
60
- }
58
+ reject("1001", "An error ocurred with SDK try again", error as NSError)
61
59
  }
62
60
  }
63
61
  }
64
62
  }
65
-
63
+
64
+ @objc(removeUserFromRook:reject:)
66
65
  public func removeUserFromRook(
67
66
  _ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
68
67
  ) {
@@ -80,14 +79,13 @@ import RookSDK
80
79
  reject(String(rookError.code), rookError.errorDescription, error as NSError)
81
80
  }
82
81
  } else {
83
- DispatchQueue.main.async {
84
- reject("1001", "An error ocurred with SDK try again", error as NSError)
85
- }
82
+ reject("1001", "An error ocurred with SDK try again", error as NSError)
86
83
  }
87
84
  }
88
85
  }
89
86
  }
90
-
87
+
88
+ @objc(syncUserTimeZone:reject:)
91
89
  public func syncUserTimeZone(
92
90
  _ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
93
91
  ){
@@ -106,11 +104,23 @@ import RookSDK
106
104
  reject(String(rookError.code), rookError.errorDescription, error as NSError)
107
105
  }
108
106
  } else {
109
- DispatchQueue.main.async {
110
- reject("1001", "An error ocurred with SDK try again", error as NSError)
111
- }
107
+ reject("1001", "An error ocurred with SDK try again", error as NSError)
112
108
  }
113
109
  }
114
110
  }
115
111
  }
112
+
113
+ @objc(getDiagnosticState:reject:)
114
+ public func getDiagnosticState(
115
+ _ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
116
+ ){
117
+ Task {
118
+ var result = await RookConnectConfigurationManager.shared.getDiagnosticState()
119
+ let dic = EncodableSDKState(result).toDictionary()
120
+
121
+ DispatchQueue.main.async {
122
+ resolve(dic)
123
+ }
124
+ }
125
+ }
116
126
  }
@@ -0,0 +1,5 @@
1
+ #import <React/RCTBridgeModule.h>
2
+
3
+ @interface RookConfigurationModule : NSObject<RCTBridgeModule>
4
+
5
+ @end
@@ -0,0 +1,22 @@
1
+ #import <Foundation/Foundation.h>
2
+ #import <React/RCTBridgeModule.h>
3
+
4
+ @interface RCT_EXTERN_MODULE(RookConfiguration, NSObject)
5
+
6
+ RCT_EXTERN_METHOD(getUserID: (RCTPromiseResolveBlock)resolve
7
+ reject:(RCTPromiseRejectBlock)reject)
8
+
9
+ RCT_EXTERN_METHOD(updateUserID: (NSString *) userID
10
+ resolve:(RCTPromiseResolveBlock)resolve
11
+ reject:(RCTPromiseRejectBlock)reject)
12
+
13
+ RCT_EXTERN_METHOD(removeUserFromRook: (RCTPromiseResolveBlock)resolve
14
+ reject:(RCTPromiseRejectBlock)reject)
15
+
16
+ RCT_EXTERN_METHOD(syncUserTimeZone: (RCTPromiseResolveBlock)resolve
17
+ reject:(RCTPromiseRejectBlock)reject)
18
+
19
+ RCT_EXTERN_METHOD(getDiagnosticState: (RCTPromiseResolveBlock)resolve
20
+ reject:(RCTPromiseRejectBlock)reject)
21
+
22
+ @end
@@ -0,0 +1,5 @@
1
+ #import <React/RCTBridgeModule.h>
2
+
3
+ @interface RookExternalModule: NSObject<RCTBridgeModule>
4
+
5
+ @end
@@ -0,0 +1,31 @@
1
+ //
2
+ // RookExternalModule.m
3
+ // react-native-rook-sdk
4
+ //
5
+ // Created by Javier Villanueva on 10/09/25.
6
+ //
7
+ #import <Foundation/Foundation.h>
8
+ #import <React/RCTBridgeModule.h>
9
+
10
+ @interface RCT_EXTERN_MODULE(RookLocalData, NSObject)
11
+
12
+ RCT_EXTERN_METHOD(getAppleHealthSleepSummary: (NSString *) date
13
+ resolve:(RCTPromiseResolveBlock)resolve
14
+ reject:(RCTPromiseRejectBlock)reject)
15
+
16
+ RCT_EXTERN_METHOD(getAppleHealthPhysicalSummary: (NSString *) date
17
+ resolve:(RCTPromiseResolveBlock)resolve
18
+ reject:(RCTPromiseRejectBlock)reject)
19
+
20
+ RCT_EXTERN_METHOD(getAppleHealthBodySummary: (NSString *) date
21
+ resolve:(RCTPromiseResolveBlock)resolve
22
+ reject:(RCTPromiseRejectBlock)reject)
23
+
24
+ RCT_EXTERN_METHOD(getAppleHealthActivityEvents: (NSString *) date
25
+ resolve:(RCTPromiseResolveBlock)resolve
26
+ reject:(RCTPromiseRejectBlock)reject)
27
+
28
+ RCT_EXTERN_METHOD(writeAppleHealthMealData: (NSDictionary *) data
29
+ resolve:(RCTPromiseResolveBlock)resolve
30
+ reject:(RCTPromiseRejectBlock)reject)
31
+ @end
@@ -1,14 +1,14 @@
1
1
  //
2
- // RookData.swift
3
- // RNRookSdk
2
+ // RookLocalData.swift
3
+ // react-native-rook-sdk
4
4
  //
5
- // Created by Javier Villanueva on 18/12/25.
5
+ // Created by Javier Villanueva on 10/09/25.
6
6
  //
7
7
 
8
8
  import RookSDK
9
- import React
10
9
 
11
- @objcMembers public class RookData: NSObject {
10
+ @objc(RookLocalData)
11
+ public class RookLocalData: NSObject {
12
12
 
13
13
  lazy var summaryManager: RookSummaryManager = {
14
14
  return RookSummaryManager()
@@ -18,20 +18,23 @@ import React
18
18
  return RookEventsManager()
19
19
  }()
20
20
 
21
- lazy var dateHelper: DateHelper = {
22
- return DateHelper()
23
- }()
21
+ func parseStringToDate(_ input: String) -> Date? {
22
+ let dateFormatter = DateFormatter()
23
+ dateFormatter.dateFormat = "yyyy-MM-dd"
24
+ return dateFormatter.date(from: input)
25
+ }
24
26
 
27
+ @objc(getAppleHealthSleepSummary:resolve:reject:)
25
28
  public func getAppleHealthSleepSummary(
26
29
  _ date: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
27
30
  ) {
28
31
  Task {
29
32
  do {
30
- guard let parsed: Date = dateHelper.getDateFromString(stringDate: date) else {
31
- reject("AppleHealthGetPhysicalSummaryError", "Invalid date format", nil)
33
+ guard let parsed = parseStringToDate(date) else {
34
+ reject("AppleHealthGetSleepSummaryError", "Invalid date format", nil)
32
35
  return
33
36
  }
34
-
37
+
35
38
  let sleepSummaries = try await summaryManager.getSleepSummary(date: parsed)
36
39
  let dic = sleepSummaries.map { $0.toDictionary() }
37
40
 
@@ -44,20 +47,19 @@ import React
44
47
  reject(String(rookError.code), rookError.errorDescription, error as NSError)
45
48
  }
46
49
  } else {
47
- DispatchQueue.main.async {
48
- reject("1001", "An error ocurred with SDK try again", error as NSError)
49
- }
50
+ reject("1001", "An error ocurred with SDK try again", error as NSError)
50
51
  }
51
52
  }
52
53
  }
53
54
  }
54
55
 
56
+ @objc(getAppleHealthPhysicalSummary:resolve:reject:)
55
57
  public func getAppleHealthPhysicalSummary(
56
58
  _ date: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
57
59
  ) {
58
60
  Task {
59
61
  do {
60
- guard let parsed = dateHelper.getDateFromString(stringDate: date) else {
62
+ guard let parsed = parseStringToDate(date) else {
61
63
  reject("AppleHealthGetPhysicalSummaryError", "Invalid date format", nil)
62
64
  return
63
65
  }
@@ -75,20 +77,19 @@ import React
75
77
  reject(String(rookError.code), rookError.errorDescription, error as NSError)
76
78
  }
77
79
  } else {
78
- DispatchQueue.main.async {
79
- reject("1001", "An error ocurred with SDK try again", error as NSError)
80
- }
80
+ reject("1001", "An error ocurred with SDK try again", error as NSError)
81
81
  }
82
82
  }
83
83
  }
84
84
  }
85
85
 
86
+ @objc(getAppleHealthBodySummary:resolve:reject:)
86
87
  public func getAppleHealthBodySummary(
87
88
  _ date: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
88
89
  ) {
89
90
  Task {
90
91
  do {
91
- guard let parsed = dateHelper.getDateFromString(stringDate: date) else {
92
+ guard let parsed = parseStringToDate(date) else {
92
93
  reject("AppleHealthGetBodySummaryError", "Invalid date format", nil)
93
94
  return
94
95
  }
@@ -105,20 +106,19 @@ import React
105
106
  reject(String(rookError.code), rookError.errorDescription, error as NSError)
106
107
  }
107
108
  } else {
108
- DispatchQueue.main.async {
109
- reject("1001", "An error ocurred with SDK try again", error as NSError)
110
- }
109
+ reject("1001", "An error ocurred with SDK try again", error as NSError)
111
110
  }
112
111
  }
113
112
  }
114
113
  }
115
114
 
115
+ @objc(getAppleHealthActivityEvents:resolve:reject:)
116
116
  public func getAppleHealthActivityEvents(
117
117
  _ date: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
118
118
  ) {
119
119
  Task {
120
120
  do {
121
- guard let parsed = dateHelper.getDateFromString(stringDate: date) else {
121
+ guard let parsed = parseStringToDate(date) else {
122
122
  reject("AppleHealthGetActivityEventsError", "Invalid date format", nil)
123
123
  return
124
124
  }
@@ -136,35 +136,57 @@ import React
136
136
  reject(String(rookError.code), rookError.errorDescription, error as NSError)
137
137
  }
138
138
  } else {
139
+ reject("1001", "An error ocurred with SDK try again", error as NSError)
140
+ }
141
+ }
142
+ }
143
+ }
144
+
145
+ @objc(writeAppleHealthMealData:resolve:reject:)
146
+ public func writeAppleHealthMealData(
147
+ _ data: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
148
+ ){
149
+ guard let event = NutritionMapper.mapToNutritionInsertionEvent(data: data as! [String : Any]) else {
150
+ reject("1001", "Could not parse nutrition data", nil)
151
+ return
152
+ }
153
+
154
+ Task {
155
+ do {
156
+
157
+ let result = try await eventManager.writeNutritionEvent(event: event)
158
+ DispatchQueue.main.async {
159
+ resolve(result)
160
+ }
161
+
162
+ } catch {
163
+ if let rookError: RookError = error as? RookError {
139
164
  DispatchQueue.main.async {
140
- reject("1001", "An error ocurred with SDK try again", error as NSError)
165
+ reject(String(rookError.code), rookError.errorDescription, error as NSError)
141
166
  }
167
+ } else {
168
+ reject("1001", "An error ocurred with SDK try again", error as NSError)
142
169
  }
143
170
  }
144
171
  }
145
172
  }
146
-
147
- public func getTodayHeartRate(
148
- _ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
149
- ){
150
- Task {
151
- do {
152
- let result = try await eventManager.getTodayHeartRate()
153
- let mapper: HeartRateMapper = HeartRateMapper()
154
- let data: [String: Any?] = mapper.map(result)
155
-
156
- DispatchQueue.main.async {
157
- resolve(data)
158
- }
159
- } catch {
160
- if let rookError: RookError = error as? RookError {
161
- DispatchQueue.main.async {
162
- reject(String(rookError.code), rookError.errorDescription, error as NSError)
163
- }
164
- } else {
165
- reject("1001", "An error ocurred with SDK try again", error as NSError)
166
- }
167
- }
168
- }
169
- }
173
+ }
174
+
175
+ extension Encodable {
176
+ func toDictionary() -> [String: Any] {
177
+ let encoder = JSONEncoder()
178
+
179
+ let dateFormatter = DateFormatter()
180
+ dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
181
+
182
+ encoder.dateEncodingStrategy = .formatted(dateFormatter)
183
+
184
+ guard let data = try? encoder.encode(self),
185
+ let dictionary = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: Any]
186
+ else {
187
+ return [:]
188
+ }
189
+
190
+ return dictionary
191
+ }
170
192
  }
@@ -1,18 +1,20 @@
1
1
  //
2
2
  // RookPermissions.swift
3
- // RNRookSdk
3
+ // react-native-rook-sdk
4
4
  //
5
- // Created by Javier Villanueva on 17/12/25.
5
+ // Created by Javier Villanueva on 03/12/25.
6
6
  //
7
7
 
8
- import React
9
8
  import RookSDK
10
9
 
11
- @objcMembers public class RookPermissions: NSObject {
10
+ @objc(RookPermissions)
11
+ public class RookPermissions: NSObject {
12
+
12
13
  lazy var permissionsManager: RookConnectPermissionsManager = {
13
14
  return RookConnectPermissionsManager()
14
15
  }()
15
16
 
17
+ @objc(checkPermissionsStatus:resolve:reject:)
16
18
  public func checkPermissionsStatus(
17
19
  _ type: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
18
20
  ) {
@@ -37,6 +39,7 @@ import RookSDK
37
39
  }
38
40
  }
39
41
 
42
+ @objc(requestAppleHealthPermissions:resolve:reject:)
40
43
  public func requestAppleHealthPermissions(
41
44
  _ permissions: [String]?, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
42
45
  ) {
@@ -61,7 +64,32 @@ import RookSDK
61
64
  }
62
65
  }
63
66
  }
64
-
67
+
68
+ @objc(requestWriteNutritionPermission:reject:)
69
+ public func requestWriteNutritionPermission(
70
+ _ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
71
+ ) {
72
+ Task {
73
+ do {
74
+
75
+ let result = try await permissionsManager.requestDietaryWritePermissions()
76
+
77
+ DispatchQueue.main.async {
78
+ resolve(result)
79
+ }
80
+ } catch {
81
+ if let rookError: RookError = error as? RookError {
82
+ DispatchQueue.main.async {
83
+ reject(String(rookError.code), rookError.errorDescription, error as NSError)
84
+ }
85
+ } else {
86
+ reject("1001", "An error ocurred with SDK try again", error as NSError)
87
+ }
88
+ }
89
+ }
90
+ }
91
+
92
+ @objc(openAppleHealthSettings:reject:)
65
93
  public func openAppleHealthSettings(
66
94
  _ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
67
95
  ){
@@ -0,0 +1,5 @@
1
+ #import <React/RCTBridgeModule.h>
2
+
3
+ @interface RookPermissionsModule : NSObject<RCTBridgeModule>
4
+
5
+ @end
@@ -0,0 +1,20 @@
1
+ #import <Foundation/Foundation.h>
2
+ #import <React/RCTBridgeModule.h>
3
+
4
+ @interface RCT_EXTERN_MODULE(RookPermissions, NSObject)
5
+
6
+ RCT_EXTERN_METHOD(checkPermissionsStatus: (NSString *) type
7
+ resolve:(RCTPromiseResolveBlock)resolve
8
+ reject:(RCTPromiseRejectBlock)reject)
9
+
10
+ RCT_EXTERN_METHOD(requestAppleHealthPermissions: (NSArray<NSString *>) type
11
+ resolve:(RCTPromiseResolveBlock)resolve
12
+ reject:(RCTPromiseRejectBlock)reject)
13
+
14
+ RCT_EXTERN_METHOD(requestWriteNutritionPermission: (RCTPromiseResolveBlock)resolve
15
+ reject:(RCTPromiseRejectBlock)reject)
16
+
17
+ RCT_EXTERN_METHOD(openAppleHealthSettings: (RCTPromiseResolveBlock)resolve
18
+ reject:(RCTPromiseRejectBlock)reject)
19
+
20
+ @end
package/ios/RookSdk.h CHANGED
@@ -1,18 +1,6 @@
1
+ #import <React/RCTEventEmitter.h>
1
2
  #import <React/RCTBridgeModule.h>
2
- #import <React/RCTInitializing.h>
3
3
 
4
- #ifdef RCT_NEW_ARCH_ENABLED
5
- #import <RookSdkSpec/RookSdkSpec.h>
6
- #endif
7
-
8
- #ifdef RCT_NEW_ARCH_ENABLED
9
-
10
- // NEW ARCHITECTURE: Inherit from the generated Base class
11
- @interface RNRookSdk : NativeRookSdkSpecBase <NativeRookSdkSpec, RCTInitializing>
12
- #else
13
-
14
- // OLD ARCHITECTURE: Inherit from NSObject and conform to RCTBridgeModule
15
- @interface RNRookSdk : NSObject <RCTBridgeModule, RCTInitializing>
16
- #endif
4
+ @interface RookSdk : RCTEventEmitter <RCTBridgeModule>
17
5
 
18
6
  @end