@kingstinct/react-native-healthkit 8.7.2 → 9.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 (449) hide show
  1. package/ReactNativeHealthkit.podspec +36 -0
  2. package/app.plugin.js +43 -33
  3. package/ios/Bridge.h +8 -0
  4. package/ios/CategoryTypeModule.swift +128 -0
  5. package/ios/CharacteristicTypeModule.swift +78 -0
  6. package/ios/Constants.swift +2 -0
  7. package/ios/CoreModule.swift +376 -0
  8. package/ios/CorrelationTypeModule.swift +153 -0
  9. package/ios/HeartbeatSeriesModule.swift +189 -0
  10. package/ios/Helpers.swift +529 -251
  11. package/ios/QuantityTypeModule.swift +461 -0
  12. package/ios/Serializers.swift +211 -124
  13. package/ios/SourceProxy.swift +35 -0
  14. package/ios/StateOfMindModule.swift +160 -0
  15. package/ios/WorkoutProxy.swift +405 -0
  16. package/ios/WorkoutSessionModule.swift +182 -0
  17. package/ios/WorkoutsModule.swift +357 -0
  18. package/package.json +43 -127
  19. package/react-native.config.js +16 -0
  20. package/src/hooks/useHealthkitAuthorization.test.ts +47 -29
  21. package/src/hooks/useHealthkitAuthorization.ts +21 -15
  22. package/src/hooks/useIsHealthDataAvailable.test.ts +17 -7
  23. package/src/hooks/useIsHealthDataAvailable.ts +7 -7
  24. package/src/hooks/useMostRecentCategorySample.ts +10 -12
  25. package/src/hooks/useMostRecentQuantitySample.ts +17 -36
  26. package/src/hooks/useMostRecentWorkout.ts +16 -38
  27. package/src/hooks/useSources.ts +8 -12
  28. package/src/hooks/useStatisticsForQuantity.ts +19 -14
  29. package/src/hooks/useSubscribeToChanges.ts +9 -13
  30. package/src/index.ios.ts +232 -0
  31. package/src/index.ts +444 -0
  32. package/src/modules.ts +43 -0
  33. package/src/specs/CategoryTypeModule.nitro.ts +64 -0
  34. package/src/specs/CharacteristicTypeModule.nitro.ts +22 -0
  35. package/src/specs/CoreModule.nitro.ts +107 -0
  36. package/src/specs/CorrelationTypeModule.nitro.ts +23 -0
  37. package/src/specs/HeartbeatSeriesModule.nitro.ts +19 -0
  38. package/src/specs/QuantityTypeModule.nitro.ts +60 -0
  39. package/src/specs/SourceProxy.nitro.ts +13 -0
  40. package/src/specs/StateOfMindModule.nitro.ts +23 -0
  41. package/src/specs/WorkoutProxy.nitro.ts +18 -0
  42. package/src/specs/WorkoutSessionModule.nitro.ts +71 -0
  43. package/src/specs/WorkoutsModule.nitro.ts +32 -0
  44. package/src/test-setup.ts +68 -54
  45. package/src/test-utils.ts +3 -2
  46. package/src/types/Auth.ts +17 -0
  47. package/src/types/Background.ts +9 -0
  48. package/src/types/CategoryType.ts +249 -0
  49. package/src/types/CategoryTypeIdentifier.ts +99 -0
  50. package/src/types/Characteristics.ts +53 -0
  51. package/src/types/Constants.ts +25 -0
  52. package/src/types/CorrelationType.ts +31 -0
  53. package/src/types/Device.ts +13 -0
  54. package/src/types/HeartbeatSeries.ts +29 -0
  55. package/src/types/InterfaceVerification.ts +164 -0
  56. package/src/types/InterfaceVerificationExample.ts +89 -0
  57. package/src/types/QuantitySample.ts +30 -0
  58. package/src/types/QuantityType.ts +192 -0
  59. package/src/types/QuantityTypeIdentifier.ts +758 -0
  60. package/src/types/QueryOptions.ts +69 -0
  61. package/src/types/README-InterfaceVerification.md +103 -0
  62. package/src/types/Shared.ts +79 -0
  63. package/src/types/Source.ts +11 -0
  64. package/src/types/StateOfMind.ts +110 -0
  65. package/src/types/Subscriptons.ts +10 -0
  66. package/src/types/Units.ts +190 -0
  67. package/src/types/WeatherCondition.ts +31 -0
  68. package/src/types/WorkoutKit.ts +18 -0
  69. package/src/types/Workouts.ts +282 -0
  70. package/src/utils/getMostRecentCategorySample.ts +7 -11
  71. package/src/utils/getMostRecentQuantitySample.ts +8 -18
  72. package/src/utils/getMostRecentWorkout.ts +7 -17
  73. package/src/utils/getPreferredUnit.ts +12 -8
  74. package/src/utils/subscribeToChanges.ts +9 -26
  75. package/LICENSE +0 -21
  76. package/README.md +0 -179
  77. package/ios/ReactNativeHealthkit-Bridging-Header.h +0 -2
  78. package/ios/ReactNativeHealthkit.m +0 -271
  79. package/ios/ReactNativeHealthkit.swift +0 -2333
  80. package/ios/ReactNativeHealthkit.xcodeproj/project.pbxproj +0 -279
  81. package/kingstinct-react-native-healthkit.podspec +0 -21
  82. package/lib/commonjs/hooks/useHealthkitAuthorization.js +0 -39
  83. package/lib/commonjs/hooks/useHealthkitAuthorization.js.map +0 -1
  84. package/lib/commonjs/hooks/useHealthkitAuthorization.test.js +0 -72
  85. package/lib/commonjs/hooks/useHealthkitAuthorization.test.js.map +0 -1
  86. package/lib/commonjs/hooks/useIsHealthDataAvailable.js +0 -27
  87. package/lib/commonjs/hooks/useIsHealthDataAvailable.js.map +0 -1
  88. package/lib/commonjs/hooks/useIsHealthDataAvailable.test.js +0 -41
  89. package/lib/commonjs/hooks/useIsHealthDataAvailable.test.js.map +0 -1
  90. package/lib/commonjs/hooks/useMostRecentCategorySample.js +0 -23
  91. package/lib/commonjs/hooks/useMostRecentCategorySample.js.map +0 -1
  92. package/lib/commonjs/hooks/useMostRecentQuantitySample.js +0 -37
  93. package/lib/commonjs/hooks/useMostRecentQuantitySample.js.map +0 -1
  94. package/lib/commonjs/hooks/useMostRecentWorkout.js +0 -48
  95. package/lib/commonjs/hooks/useMostRecentWorkout.js.map +0 -1
  96. package/lib/commonjs/hooks/useSources.js +0 -22
  97. package/lib/commonjs/hooks/useSources.js.map +0 -1
  98. package/lib/commonjs/hooks/useStatisticsForQuantity.js +0 -28
  99. package/lib/commonjs/hooks/useStatisticsForQuantity.js.map +0 -1
  100. package/lib/commonjs/hooks/useSubscribeToChanges.js +0 -28
  101. package/lib/commonjs/hooks/useSubscribeToChanges.js.map +0 -1
  102. package/lib/commonjs/index.ios.js +0 -531
  103. package/lib/commonjs/index.ios.js.map +0 -1
  104. package/lib/commonjs/index.js +0 -22
  105. package/lib/commonjs/index.js.map +0 -1
  106. package/lib/commonjs/index.native.js +0 -235
  107. package/lib/commonjs/index.native.js.map +0 -1
  108. package/lib/commonjs/index.web.js +0 -22
  109. package/lib/commonjs/index.web.js.map +0 -1
  110. package/lib/commonjs/native-types.js +0 -1575
  111. package/lib/commonjs/native-types.js.map +0 -1
  112. package/lib/commonjs/test-setup.js +0 -57
  113. package/lib/commonjs/test-setup.js.map +0 -1
  114. package/lib/commonjs/test-utils.js +0 -18
  115. package/lib/commonjs/test-utils.js.map +0 -1
  116. package/lib/commonjs/types.js +0 -17
  117. package/lib/commonjs/types.js.map +0 -1
  118. package/lib/commonjs/utils/deleteQuantitySample.js +0 -11
  119. package/lib/commonjs/utils/deleteQuantitySample.js.map +0 -1
  120. package/lib/commonjs/utils/deleteSamples.js +0 -18
  121. package/lib/commonjs/utils/deleteSamples.js.map +0 -1
  122. package/lib/commonjs/utils/deleteWorkoutSample.js +0 -11
  123. package/lib/commonjs/utils/deleteWorkoutSample.js.map +0 -1
  124. package/lib/commonjs/utils/deserializeCategorySample.js +0 -13
  125. package/lib/commonjs/utils/deserializeCategorySample.js.map +0 -1
  126. package/lib/commonjs/utils/deserializeCategorySample.test.js +0 -26
  127. package/lib/commonjs/utils/deserializeCategorySample.test.js.map +0 -1
  128. package/lib/commonjs/utils/deserializeCorrelation.js +0 -26
  129. package/lib/commonjs/utils/deserializeCorrelation.js.map +0 -1
  130. package/lib/commonjs/utils/deserializeHeartbeatSeriesSample.js +0 -15
  131. package/lib/commonjs/utils/deserializeHeartbeatSeriesSample.js.map +0 -1
  132. package/lib/commonjs/utils/deserializeSample.js +0 -15
  133. package/lib/commonjs/utils/deserializeSample.js.map +0 -1
  134. package/lib/commonjs/utils/deserializeWorkout.js +0 -15
  135. package/lib/commonjs/utils/deserializeWorkout.js.map +0 -1
  136. package/lib/commonjs/utils/ensureMetadata.js +0 -11
  137. package/lib/commonjs/utils/ensureMetadata.js.map +0 -1
  138. package/lib/commonjs/utils/ensureTotals.js +0 -11
  139. package/lib/commonjs/utils/ensureTotals.js.map +0 -1
  140. package/lib/commonjs/utils/ensureUnit.js +0 -17
  141. package/lib/commonjs/utils/ensureUnit.js.map +0 -1
  142. package/lib/commonjs/utils/getDateOfBirth.js +0 -14
  143. package/lib/commonjs/utils/getDateOfBirth.js.map +0 -1
  144. package/lib/commonjs/utils/getMostRecentCategorySample.js +0 -17
  145. package/lib/commonjs/utils/getMostRecentCategorySample.js.map +0 -1
  146. package/lib/commonjs/utils/getMostRecentQuantitySample.js +0 -21
  147. package/lib/commonjs/utils/getMostRecentQuantitySample.js.map +0 -1
  148. package/lib/commonjs/utils/getMostRecentWorkout.js +0 -19
  149. package/lib/commonjs/utils/getMostRecentWorkout.js.map +0 -1
  150. package/lib/commonjs/utils/getPreferredUnit.js +0 -14
  151. package/lib/commonjs/utils/getPreferredUnit.js.map +0 -1
  152. package/lib/commonjs/utils/getPreferredUnits.js +0 -14
  153. package/lib/commonjs/utils/getPreferredUnits.js.map +0 -1
  154. package/lib/commonjs/utils/getPreferredUnitsTyped.js +0 -33
  155. package/lib/commonjs/utils/getPreferredUnitsTyped.js.map +0 -1
  156. package/lib/commonjs/utils/getRequestStatusForAuthorization.js +0 -21
  157. package/lib/commonjs/utils/getRequestStatusForAuthorization.js.map +0 -1
  158. package/lib/commonjs/utils/getWorkoutPlanById.js +0 -13
  159. package/lib/commonjs/utils/getWorkoutPlanById.js.map +0 -1
  160. package/lib/commonjs/utils/prepareOptions.js +0 -25
  161. package/lib/commonjs/utils/prepareOptions.js.map +0 -1
  162. package/lib/commonjs/utils/queryCategorySamples.js +0 -17
  163. package/lib/commonjs/utils/queryCategorySamples.js.map +0 -1
  164. package/lib/commonjs/utils/queryCategorySamplesWithAnchor.js +0 -21
  165. package/lib/commonjs/utils/queryCategorySamplesWithAnchor.js.map +0 -1
  166. package/lib/commonjs/utils/queryCorrelationSamples.js +0 -17
  167. package/lib/commonjs/utils/queryCorrelationSamples.js.map +0 -1
  168. package/lib/commonjs/utils/queryHeartbeatSeriesSamples.js +0 -17
  169. package/lib/commonjs/utils/queryHeartbeatSeriesSamples.js.map +0 -1
  170. package/lib/commonjs/utils/queryHeartbeatSeriesSamplesWithAnchor.js +0 -21
  171. package/lib/commonjs/utils/queryHeartbeatSeriesSamplesWithAnchor.js.map +0 -1
  172. package/lib/commonjs/utils/queryQuantitySamples.js +0 -19
  173. package/lib/commonjs/utils/queryQuantitySamples.js.map +0 -1
  174. package/lib/commonjs/utils/queryQuantitySamplesWithAnchor.js +0 -23
  175. package/lib/commonjs/utils/queryQuantitySamplesWithAnchor.js.map +0 -1
  176. package/lib/commonjs/utils/querySources.js +0 -14
  177. package/lib/commonjs/utils/querySources.js.map +0 -1
  178. package/lib/commonjs/utils/queryStateOfMindSamples.js +0 -22
  179. package/lib/commonjs/utils/queryStateOfMindSamples.js.map +0 -1
  180. package/lib/commonjs/utils/queryStatisticsCollectionForQuantity.js +0 -16
  181. package/lib/commonjs/utils/queryStatisticsCollectionForQuantity.js.map +0 -1
  182. package/lib/commonjs/utils/queryStatisticsForQuantity.js +0 -29
  183. package/lib/commonjs/utils/queryStatisticsForQuantity.js.map +0 -1
  184. package/lib/commonjs/utils/queryWorkoutSamplesWithAnchor.js +0 -26
  185. package/lib/commonjs/utils/queryWorkoutSamplesWithAnchor.js.map +0 -1
  186. package/lib/commonjs/utils/queryWorkouts.js +0 -22
  187. package/lib/commonjs/utils/queryWorkouts.js.map +0 -1
  188. package/lib/commonjs/utils/requestAuthorization.js +0 -22
  189. package/lib/commonjs/utils/requestAuthorization.js.map +0 -1
  190. package/lib/commonjs/utils/saveCategorySample.js +0 -20
  191. package/lib/commonjs/utils/saveCategorySample.js.map +0 -1
  192. package/lib/commonjs/utils/saveCorrelationSample.js +0 -35
  193. package/lib/commonjs/utils/saveCorrelationSample.js.map +0 -1
  194. package/lib/commonjs/utils/saveQuantitySample.js +0 -16
  195. package/lib/commonjs/utils/saveQuantitySample.js.map +0 -1
  196. package/lib/commonjs/utils/saveStateOfMindSample.js +0 -17
  197. package/lib/commonjs/utils/saveStateOfMindSample.js.map +0 -1
  198. package/lib/commonjs/utils/saveWorkoutRoute.js +0 -26
  199. package/lib/commonjs/utils/saveWorkoutRoute.js.map +0 -1
  200. package/lib/commonjs/utils/saveWorkoutSample.js +0 -36
  201. package/lib/commonjs/utils/saveWorkoutSample.js.map +0 -1
  202. package/lib/commonjs/utils/serializeDate.js +0 -9
  203. package/lib/commonjs/utils/serializeDate.js.map +0 -1
  204. package/lib/commonjs/utils/serializeDate.test.js +0 -17
  205. package/lib/commonjs/utils/serializeDate.test.js.map +0 -1
  206. package/lib/commonjs/utils/startWatchApp.js +0 -11
  207. package/lib/commonjs/utils/startWatchApp.js.map +0 -1
  208. package/lib/commonjs/utils/subscribeToChanges.js +0 -27
  209. package/lib/commonjs/utils/subscribeToChanges.js.map +0 -1
  210. package/lib/module/hooks/useHealthkitAuthorization.js +0 -32
  211. package/lib/module/hooks/useHealthkitAuthorization.js.map +0 -1
  212. package/lib/module/hooks/useHealthkitAuthorization.test.js +0 -68
  213. package/lib/module/hooks/useHealthkitAuthorization.test.js.map +0 -1
  214. package/lib/module/hooks/useIsHealthDataAvailable.js +0 -21
  215. package/lib/module/hooks/useIsHealthDataAvailable.js.map +0 -1
  216. package/lib/module/hooks/useIsHealthDataAvailable.test.js +0 -37
  217. package/lib/module/hooks/useIsHealthDataAvailable.test.js.map +0 -1
  218. package/lib/module/hooks/useMostRecentCategorySample.js +0 -16
  219. package/lib/module/hooks/useMostRecentCategorySample.js.map +0 -1
  220. package/lib/module/hooks/useMostRecentQuantitySample.js +0 -30
  221. package/lib/module/hooks/useMostRecentQuantitySample.js.map +0 -1
  222. package/lib/module/hooks/useMostRecentWorkout.js +0 -41
  223. package/lib/module/hooks/useMostRecentWorkout.js.map +0 -1
  224. package/lib/module/hooks/useSources.js +0 -15
  225. package/lib/module/hooks/useSources.js.map +0 -1
  226. package/lib/module/hooks/useStatisticsForQuantity.js +0 -21
  227. package/lib/module/hooks/useStatisticsForQuantity.js.map +0 -1
  228. package/lib/module/hooks/useSubscribeToChanges.js +0 -21
  229. package/lib/module/hooks/useSubscribeToChanges.js.map +0 -1
  230. package/lib/module/index.ios.js +0 -209
  231. package/lib/module/index.ios.js.map +0 -1
  232. package/lib/module/index.js +0 -4
  233. package/lib/module/index.js.map +0 -1
  234. package/lib/module/index.native.js +0 -160
  235. package/lib/module/index.native.js.map +0 -1
  236. package/lib/module/index.web.js +0 -4
  237. package/lib/module/index.web.js.map +0 -1
  238. package/lib/module/native-types.js +0 -1606
  239. package/lib/module/native-types.js.map +0 -1
  240. package/lib/module/test-setup.js +0 -54
  241. package/lib/module/test-setup.js.map +0 -1
  242. package/lib/module/test-utils.js +0 -11
  243. package/lib/module/test-utils.js.map +0 -1
  244. package/lib/module/types.js +0 -67
  245. package/lib/module/types.js.map +0 -1
  246. package/lib/module/utils/deleteQuantitySample.js +0 -4
  247. package/lib/module/utils/deleteQuantitySample.js.map +0 -1
  248. package/lib/module/utils/deleteSamples.js +0 -11
  249. package/lib/module/utils/deleteSamples.js.map +0 -1
  250. package/lib/module/utils/deleteWorkoutSample.js +0 -4
  251. package/lib/module/utils/deleteWorkoutSample.js.map +0 -1
  252. package/lib/module/utils/deserializeCategorySample.js +0 -7
  253. package/lib/module/utils/deserializeCategorySample.js.map +0 -1
  254. package/lib/module/utils/deserializeCategorySample.test.js +0 -22
  255. package/lib/module/utils/deserializeCategorySample.test.js.map +0 -1
  256. package/lib/module/utils/deserializeCorrelation.js +0 -19
  257. package/lib/module/utils/deserializeCorrelation.js.map +0 -1
  258. package/lib/module/utils/deserializeHeartbeatSeriesSample.js +0 -9
  259. package/lib/module/utils/deserializeHeartbeatSeriesSample.js.map +0 -1
  260. package/lib/module/utils/deserializeSample.js +0 -9
  261. package/lib/module/utils/deserializeSample.js.map +0 -1
  262. package/lib/module/utils/deserializeWorkout.js +0 -9
  263. package/lib/module/utils/deserializeWorkout.js.map +0 -1
  264. package/lib/module/utils/ensureMetadata.js +0 -5
  265. package/lib/module/utils/ensureMetadata.js.map +0 -1
  266. package/lib/module/utils/ensureTotals.js +0 -5
  267. package/lib/module/utils/ensureTotals.js.map +0 -1
  268. package/lib/module/utils/ensureUnit.js +0 -10
  269. package/lib/module/utils/ensureUnit.js.map +0 -1
  270. package/lib/module/utils/getDateOfBirth.js +0 -7
  271. package/lib/module/utils/getDateOfBirth.js.map +0 -1
  272. package/lib/module/utils/getMostRecentCategorySample.js +0 -10
  273. package/lib/module/utils/getMostRecentCategorySample.js.map +0 -1
  274. package/lib/module/utils/getMostRecentQuantitySample.js +0 -14
  275. package/lib/module/utils/getMostRecentQuantitySample.js.map +0 -1
  276. package/lib/module/utils/getMostRecentWorkout.js +0 -12
  277. package/lib/module/utils/getMostRecentWorkout.js.map +0 -1
  278. package/lib/module/utils/getPreferredUnit.js +0 -7
  279. package/lib/module/utils/getPreferredUnit.js.map +0 -1
  280. package/lib/module/utils/getPreferredUnits.js +0 -7
  281. package/lib/module/utils/getPreferredUnits.js.map +0 -1
  282. package/lib/module/utils/getPreferredUnitsTyped.js +0 -26
  283. package/lib/module/utils/getPreferredUnitsTyped.js.map +0 -1
  284. package/lib/module/utils/getRequestStatusForAuthorization.js +0 -14
  285. package/lib/module/utils/getRequestStatusForAuthorization.js.map +0 -1
  286. package/lib/module/utils/getWorkoutPlanById.js +0 -6
  287. package/lib/module/utils/getWorkoutPlanById.js.map +0 -1
  288. package/lib/module/utils/prepareOptions.js +0 -18
  289. package/lib/module/utils/prepareOptions.js.map +0 -1
  290. package/lib/module/utils/queryCategorySamples.js +0 -10
  291. package/lib/module/utils/queryCategorySamples.js.map +0 -1
  292. package/lib/module/utils/queryCategorySamplesWithAnchor.js +0 -14
  293. package/lib/module/utils/queryCategorySamplesWithAnchor.js.map +0 -1
  294. package/lib/module/utils/queryCorrelationSamples.js +0 -10
  295. package/lib/module/utils/queryCorrelationSamples.js.map +0 -1
  296. package/lib/module/utils/queryHeartbeatSeriesSamples.js +0 -10
  297. package/lib/module/utils/queryHeartbeatSeriesSamples.js.map +0 -1
  298. package/lib/module/utils/queryHeartbeatSeriesSamplesWithAnchor.js +0 -14
  299. package/lib/module/utils/queryHeartbeatSeriesSamplesWithAnchor.js.map +0 -1
  300. package/lib/module/utils/queryQuantitySamples.js +0 -12
  301. package/lib/module/utils/queryQuantitySamples.js.map +0 -1
  302. package/lib/module/utils/queryQuantitySamplesWithAnchor.js +0 -16
  303. package/lib/module/utils/queryQuantitySamplesWithAnchor.js.map +0 -1
  304. package/lib/module/utils/querySources.js +0 -7
  305. package/lib/module/utils/querySources.js.map +0 -1
  306. package/lib/module/utils/queryStateOfMindSamples.js +0 -14
  307. package/lib/module/utils/queryStateOfMindSamples.js.map +0 -1
  308. package/lib/module/utils/queryStatisticsCollectionForQuantity.js +0 -9
  309. package/lib/module/utils/queryStatisticsCollectionForQuantity.js.map +0 -1
  310. package/lib/module/utils/queryStatisticsForQuantity.js +0 -22
  311. package/lib/module/utils/queryStatisticsForQuantity.js.map +0 -1
  312. package/lib/module/utils/queryWorkoutSamplesWithAnchor.js +0 -19
  313. package/lib/module/utils/queryWorkoutSamplesWithAnchor.js.map +0 -1
  314. package/lib/module/utils/queryWorkouts.js +0 -15
  315. package/lib/module/utils/queryWorkouts.js.map +0 -1
  316. package/lib/module/utils/requestAuthorization.js +0 -15
  317. package/lib/module/utils/requestAuthorization.js.map +0 -1
  318. package/lib/module/utils/saveCategorySample.js +0 -13
  319. package/lib/module/utils/saveCategorySample.js.map +0 -1
  320. package/lib/module/utils/saveCorrelationSample.js +0 -28
  321. package/lib/module/utils/saveCorrelationSample.js.map +0 -1
  322. package/lib/module/utils/saveQuantitySample.js +0 -9
  323. package/lib/module/utils/saveQuantitySample.js.map +0 -1
  324. package/lib/module/utils/saveStateOfMindSample.js +0 -10
  325. package/lib/module/utils/saveStateOfMindSample.js.map +0 -1
  326. package/lib/module/utils/saveWorkoutRoute.js +0 -19
  327. package/lib/module/utils/saveWorkoutRoute.js.map +0 -1
  328. package/lib/module/utils/saveWorkoutSample.js +0 -29
  329. package/lib/module/utils/saveWorkoutSample.js.map +0 -1
  330. package/lib/module/utils/serializeDate.js +0 -3
  331. package/lib/module/utils/serializeDate.js.map +0 -1
  332. package/lib/module/utils/serializeDate.test.js +0 -14
  333. package/lib/module/utils/serializeDate.test.js.map +0 -1
  334. package/lib/module/utils/startWatchApp.js +0 -4
  335. package/lib/module/utils/startWatchApp.js.map +0 -1
  336. package/lib/module/utils/subscribeToChanges.js +0 -20
  337. package/lib/module/utils/subscribeToChanges.js.map +0 -1
  338. package/lib/typescript/example-expo/App.d.ts +0 -2
  339. package/lib/typescript/src/hooks/useHealthkitAuthorization.d.ts +0 -8
  340. package/lib/typescript/src/hooks/useHealthkitAuthorization.test.d.ts +0 -1
  341. package/lib/typescript/src/hooks/useIsHealthDataAvailable.d.ts +0 -7
  342. package/lib/typescript/src/hooks/useIsHealthDataAvailable.test.d.ts +0 -1
  343. package/lib/typescript/src/hooks/useMostRecentCategorySample.d.ts +0 -7
  344. package/lib/typescript/src/hooks/useMostRecentQuantitySample.d.ts +0 -7
  345. package/lib/typescript/src/hooks/useMostRecentWorkout.d.ts +0 -10
  346. package/lib/typescript/src/hooks/useSources.d.ts +0 -3
  347. package/lib/typescript/src/hooks/useStatisticsForQuantity.d.ts +0 -4
  348. package/lib/typescript/src/hooks/useSubscribeToChanges.d.ts +0 -3
  349. package/lib/typescript/src/index.d.ts +0 -3
  350. package/lib/typescript/src/index.ios.d.ts +0 -198
  351. package/lib/typescript/src/index.native.d.ts +0 -41
  352. package/lib/typescript/src/index.web.d.ts +0 -3
  353. package/lib/typescript/src/native-types.d.ts +0 -1764
  354. package/lib/typescript/src/test-setup.d.ts +0 -1
  355. package/lib/typescript/src/test-utils.d.ts +0 -2
  356. package/lib/typescript/src/types.d.ts +0 -111
  357. package/lib/typescript/src/utils/deleteQuantitySample.d.ts +0 -4
  358. package/lib/typescript/src/utils/deleteSamples.d.ts +0 -8
  359. package/lib/typescript/src/utils/deleteWorkoutSample.d.ts +0 -3
  360. package/lib/typescript/src/utils/deserializeCategorySample.d.ts +0 -4
  361. package/lib/typescript/src/utils/deserializeCategorySample.test.d.ts +0 -1
  362. package/lib/typescript/src/utils/deserializeCorrelation.d.ts +0 -4
  363. package/lib/typescript/src/utils/deserializeHeartbeatSeriesSample.d.ts +0 -4
  364. package/lib/typescript/src/utils/deserializeSample.d.ts +0 -4
  365. package/lib/typescript/src/utils/deserializeWorkout.d.ts +0 -4
  366. package/lib/typescript/src/utils/ensureMetadata.d.ts +0 -2
  367. package/lib/typescript/src/utils/ensureTotals.d.ts +0 -2
  368. package/lib/typescript/src/utils/ensureUnit.d.ts +0 -3
  369. package/lib/typescript/src/utils/getDateOfBirth.d.ts +0 -2
  370. package/lib/typescript/src/utils/getMostRecentCategorySample.d.ts +0 -4
  371. package/lib/typescript/src/utils/getMostRecentQuantitySample.d.ts +0 -4
  372. package/lib/typescript/src/utils/getMostRecentWorkout.d.ts +0 -5
  373. package/lib/typescript/src/utils/getPreferredUnit.d.ts +0 -4
  374. package/lib/typescript/src/utils/getPreferredUnits.d.ts +0 -4
  375. package/lib/typescript/src/utils/getPreferredUnitsTyped.d.ts +0 -9
  376. package/lib/typescript/src/utils/getRequestStatusForAuthorization.d.ts +0 -3
  377. package/lib/typescript/src/utils/getWorkoutPlanById.d.ts +0 -5
  378. package/lib/typescript/src/utils/prepareOptions.d.ts +0 -9
  379. package/lib/typescript/src/utils/queryCategorySamples.d.ts +0 -5
  380. package/lib/typescript/src/utils/queryCategorySamplesWithAnchor.d.ts +0 -10
  381. package/lib/typescript/src/utils/queryCorrelationSamples.d.ts +0 -5
  382. package/lib/typescript/src/utils/queryHeartbeatSeriesSamples.d.ts +0 -10
  383. package/lib/typescript/src/utils/queryHeartbeatSeriesSamplesWithAnchor.d.ts +0 -10
  384. package/lib/typescript/src/utils/queryQuantitySamples.d.ts +0 -7
  385. package/lib/typescript/src/utils/queryQuantitySamplesWithAnchor.d.ts +0 -12
  386. package/lib/typescript/src/utils/querySources.d.ts +0 -4
  387. package/lib/typescript/src/utils/queryStateOfMindSamples.d.ts +0 -7
  388. package/lib/typescript/src/utils/queryStatisticsCollectionForQuantity.d.ts +0 -3
  389. package/lib/typescript/src/utils/queryStatisticsForQuantity.d.ts +0 -14
  390. package/lib/typescript/src/utils/queryWorkoutSamplesWithAnchor.d.ts +0 -9
  391. package/lib/typescript/src/utils/queryWorkouts.d.ts +0 -4
  392. package/lib/typescript/src/utils/requestAuthorization.d.ts +0 -4
  393. package/lib/typescript/src/utils/saveCategorySample.d.ts +0 -11
  394. package/lib/typescript/src/utils/saveCorrelationSample.d.ts +0 -8
  395. package/lib/typescript/src/utils/saveQuantitySample.d.ts +0 -7
  396. package/lib/typescript/src/utils/saveStateOfMindSample.d.ts +0 -11
  397. package/lib/typescript/src/utils/saveWorkoutRoute.d.ts +0 -3
  398. package/lib/typescript/src/utils/saveWorkoutSample.d.ts +0 -11
  399. package/lib/typescript/src/utils/serializeDate.d.ts +0 -2
  400. package/lib/typescript/src/utils/serializeDate.test.d.ts +0 -1
  401. package/lib/typescript/src/utils/startWatchApp.d.ts +0 -3
  402. package/lib/typescript/src/utils/subscribeToChanges.d.ts +0 -3
  403. package/src/index.ios.tsx +0 -292
  404. package/src/index.native.tsx +0 -233
  405. package/src/index.tsx +0 -5
  406. package/src/index.web.tsx +0 -5
  407. package/src/native-types.ts +0 -2471
  408. package/src/types.ts +0 -156
  409. package/src/utils/deleteQuantitySample.ts +0 -14
  410. package/src/utils/deleteSamples.ts +0 -23
  411. package/src/utils/deleteWorkoutSample.ts +0 -7
  412. package/src/utils/deserializeCategorySample.test.ts +0 -24
  413. package/src/utils/deserializeCategorySample.ts +0 -12
  414. package/src/utils/deserializeCorrelation.ts +0 -28
  415. package/src/utils/deserializeHeartbeatSeriesSample.ts +0 -12
  416. package/src/utils/deserializeSample.ts +0 -17
  417. package/src/utils/deserializeWorkout.ts +0 -14
  418. package/src/utils/ensureMetadata.ts +0 -5
  419. package/src/utils/ensureTotals.ts +0 -5
  420. package/src/utils/ensureUnit.ts +0 -19
  421. package/src/utils/getDateOfBirth.ts +0 -8
  422. package/src/utils/getPreferredUnits.ts +0 -14
  423. package/src/utils/getPreferredUnitsTyped.ts +0 -38
  424. package/src/utils/getRequestStatusForAuthorization.ts +0 -21
  425. package/src/utils/getWorkoutPlanById.ts +0 -7
  426. package/src/utils/prepareOptions.ts +0 -19
  427. package/src/utils/queryCategorySamples.ts +0 -29
  428. package/src/utils/queryCategorySamplesWithAnchor.ts +0 -39
  429. package/src/utils/queryCorrelationSamples.ts +0 -29
  430. package/src/utils/queryHeartbeatSeriesSamples.ts +0 -29
  431. package/src/utils/queryHeartbeatSeriesSamplesWithAnchor.ts +0 -33
  432. package/src/utils/queryQuantitySamples.ts +0 -38
  433. package/src/utils/queryQuantitySamplesWithAnchor.ts +0 -46
  434. package/src/utils/querySources.ts +0 -21
  435. package/src/utils/queryStateOfMindSamples.ts +0 -14
  436. package/src/utils/queryStatisticsCollectionForQuantity.ts +0 -38
  437. package/src/utils/queryStatisticsForQuantity.ts +0 -38
  438. package/src/utils/queryWorkoutSamplesWithAnchor.ts +0 -46
  439. package/src/utils/queryWorkouts.ts +0 -28
  440. package/src/utils/requestAuthorization.ts +0 -19
  441. package/src/utils/saveCategorySample.ts +0 -31
  442. package/src/utils/saveCorrelationSample.ts +0 -43
  443. package/src/utils/saveQuantitySample.ts +0 -29
  444. package/src/utils/saveStateOfMindSample.ts +0 -38
  445. package/src/utils/saveWorkoutRoute.ts +0 -21
  446. package/src/utils/saveWorkoutSample.ts +0 -42
  447. package/src/utils/serializeDate.test.ts +0 -16
  448. package/src/utils/serializeDate.ts +0 -5
  449. package/src/utils/startWatchApp.ts +0 -7
@@ -1,19 +1,22 @@
1
- import {
2
- useCallback, useEffect, useRef, useState,
3
- } from 'react'
1
+ import { useCallback, useEffect, useRef, useState } from 'react'
4
2
 
5
- import getRequestStatusForAuthorization from '../utils/getRequestStatusForAuthorization'
6
- import requestAuthorization from '../utils/requestAuthorization'
7
-
8
- import type { HealthkitReadAuthorization, HealthkitWriteAuthorization, HKAuthorizationRequestStatus } from '../native-types'
3
+ import { Core } from '../modules'
4
+ import type { AuthorizationRequestStatus } from '../types/Auth'
5
+ import type {
6
+ ObjectTypeIdentifier,
7
+ SampleTypeIdentifierWriteable,
8
+ } from '../types/Shared'
9
9
 
10
10
  /**
11
- * @description Hook to retrieve the current authorization status for the given types, and request authorization if needed.
12
- * @see {@link https://developer.apple.com/documentation/healthkit/hkhealthstore/1614152-requestauthorization Apple Docs - requestAuthorization}
13
- * @see {@link https://developer.apple.com/documentation/healthkit/authorizing_access_to_health_data Apple Docs - Authorizing access to health data}
14
- */
15
- const useHealthkitAuthorization = (read: readonly HealthkitReadAuthorization[], write?: readonly HealthkitWriteAuthorization[]) => {
16
- const [status, setStatus] = useState<HKAuthorizationRequestStatus | null>(null)
11
+ * @description Hook to retrieve the current authorization status for the given types, and request authorization if needed.
12
+ * @see {@link https://developer.apple.com/documentation/healthkit/hkhealthstore/1614152-requestauthorization Apple Docs - requestAuthorization}
13
+ * @see {@link https://developer.apple.com/documentation/healthkit/authorizing_access_to_health_data Apple Docs - Authorizing access to health data}
14
+ */
15
+ export const useHealthkitAuthorization = (
16
+ read: ObjectTypeIdentifier[],
17
+ write?: SampleTypeIdentifierWriteable[],
18
+ ) => {
19
+ const [status, setStatus] = useState<AuthorizationRequestStatus | null>(null)
17
20
 
18
21
  const readMemo = useRef(read)
19
22
  const writeMemo = useRef(write)
@@ -24,14 +27,17 @@ const useHealthkitAuthorization = (read: readonly HealthkitReadAuthorization[],
24
27
  }, [read, write])
25
28
 
26
29
  const refreshAuthStatus = useCallback(async () => {
27
- const auth = await getRequestStatusForAuthorization(readMemo.current, writeMemo.current)
30
+ const auth = await Core.getRequestStatusForAuthorization(
31
+ writeMemo.current ?? [],
32
+ readMemo.current,
33
+ )
28
34
 
29
35
  setStatus(auth)
30
36
  return auth
31
37
  }, [])
32
38
 
33
39
  const request = useCallback(async () => {
34
- await requestAuthorization(readMemo.current, writeMemo.current)
40
+ await Core.requestAuthorization(writeMemo.current ?? [], readMemo.current)
35
41
  return refreshAuthStatus()
36
42
  }, [refreshAuthStatus])
37
43
 
@@ -1,12 +1,17 @@
1
+ import { describe, expect, jest, test } from 'bun:test'
1
2
  import { renderHook } from '@testing-library/react-native'
2
3
 
4
+ import { Core } from '../modules'
3
5
  import waitForNextUpdate from '../test-utils'
4
6
 
5
7
  describe('useIsHealthDataAvailable', () => {
6
8
  test('should return false', async () => {
7
- const useIsHealthDataAvailable = (await import('./useIsHealthDataAvailable')).default
8
- const { default: Native } = await import('../native-types')
9
- jest.spyOn(Native, 'isHealthDataAvailable').mockReturnValue(Promise.resolve(false))
9
+ const useIsHealthDataAvailable = (
10
+ await import('./useIsHealthDataAvailable')
11
+ ).default
12
+ jest
13
+ .spyOn(Core, 'isHealthDataAvailableAsync')
14
+ .mockReturnValue(Promise.resolve(false))
10
15
 
11
16
  const { result } = renderHook(useIsHealthDataAvailable)
12
17
 
@@ -16,9 +21,12 @@ describe('useIsHealthDataAvailable', () => {
16
21
  })
17
22
 
18
23
  test('should return true', async () => {
19
- const useIsHealthDataAvailable = (await import('./useIsHealthDataAvailable')).default
20
- const { default: Native } = await import('../native-types')
21
- jest.spyOn(Native, 'isHealthDataAvailable').mockReturnValue(Promise.resolve(true))
24
+ const useIsHealthDataAvailable = (
25
+ await import('./useIsHealthDataAvailable')
26
+ ).default
27
+ jest
28
+ .spyOn(Core, 'isHealthDataAvailableAsync')
29
+ .mockReturnValue(Promise.resolve(true))
22
30
 
23
31
  const { result } = renderHook(useIsHealthDataAvailable)
24
32
 
@@ -28,7 +36,9 @@ describe('useIsHealthDataAvailable', () => {
28
36
  })
29
37
 
30
38
  test('should return null before initalizing', async () => {
31
- const useIsHealthDataAvailable = (await import('./useIsHealthDataAvailable')).default
39
+ const useIsHealthDataAvailable = (
40
+ await import('./useIsHealthDataAvailable')
41
+ ).default
32
42
  const { result } = renderHook(useIsHealthDataAvailable)
33
43
 
34
44
  expect(result.current).toBe(null)
@@ -1,18 +1,18 @@
1
1
  import { useEffect, useState } from 'react'
2
2
 
3
- import Native from '../native-types'
3
+ import { Core } from '../modules'
4
4
 
5
5
  /**
6
- * @description By default, HealthKit data is available on iOS and watchOS. HealthKit data is also available on iPadOS 17 or later. However, devices running in an enterprise environment may restrict access to HealthKit data.
7
- * @see {@link https://developer.apple.com/documentation/healthkit/hkhealthstore/1614180-ishealthdataavailable Apple HealthKit isHealthDataAvailable}
8
- * @returns {boolean | null} true if HealthKit is available; otherwise, false. null while initializing.
9
- */
10
- const useIsHealthDataAvailable = (): boolean | null => {
6
+ * @description Now there is a Core.isHealthDataAvailable() that can be called synchronously. By default, HealthKit data is available on iOS and watchOS. HealthKit data is also available on iPadOS 17 or later. However, devices running in an enterprise environment may restrict access to HealthKit data.
7
+ * @see {@link https://developer.apple.com/documentation/healthkit/hkhealthstore/1614180-ishealthdataavailable Apple HealthKit isHealthDataAvailable}
8
+ * @returns {boolean | null} true if HealthKit is available; otherwise, false. null while initializing.
9
+ */
10
+ export const useIsHealthDataAvailable = (): boolean | null => {
11
11
  const [isAvailable, setIsAvailable] = useState<boolean | null>(null)
12
12
 
13
13
  useEffect(() => {
14
14
  const init = async () => {
15
- const res = await Native.isHealthDataAvailable()
15
+ const res = await Core.isHealthDataAvailableAsync()
16
16
  setIsAvailable(res)
17
17
  }
18
18
  void init()
@@ -1,20 +1,18 @@
1
1
  import { useCallback, useState } from 'react'
2
2
 
3
- import useSubscribeToChanges from './useSubscribeToChanges'
3
+ import type { CategorySampleTyped } from '../types/CategoryType'
4
+ import type { CategoryTypeIdentifier } from '../types/CategoryTypeIdentifier'
4
5
  import getMostRecentCategorySample from '../utils/getMostRecentCategorySample'
5
-
6
- import type { HKCategoryTypeIdentifier } from '../native-types'
7
- import type { HKCategorySample } from '../types'
6
+ import useSubscribeToChanges from './useSubscribeToChanges'
8
7
 
9
8
  /**
10
- * @returns the most recent sample for the given category type.
11
- */
12
- function useMostRecentCategorySample<
13
- TCategory extends HKCategoryTypeIdentifier
14
- >(identifier: TCategory) {
15
- const [category, setCategory] = useState<HKCategorySample<TCategory> | null>(
16
- null,
17
- )
9
+ * @returns the most recent sample for the given category type.
10
+ */
11
+ export function useMostRecentCategorySample<T extends CategoryTypeIdentifier>(
12
+ identifier: T,
13
+ ) {
14
+ const [category, setCategory] = useState<CategorySampleTyped<T>>()
15
+
18
16
  const updater = useCallback(() => {
19
17
  void getMostRecentCategorySample(identifier).then(setCategory)
20
18
  }, [identifier])
@@ -1,44 +1,25 @@
1
- import { useEffect, useState } from 'react'
2
-
3
- import ensureUnit from '../utils/ensureUnit'
1
+ import { useCallback, useState } from 'react'
2
+ import type { QuantitySample } from '../types/QuantitySample'
3
+ import type { QuantityTypeIdentifier } from '../types/QuantityTypeIdentifier'
4
4
  import getMostRecentQuantitySample from '../utils/getMostRecentQuantitySample'
5
- import subscribeToChanges from '../utils/subscribeToChanges'
6
-
7
- import type { HKQuantityTypeIdentifier, UnitForIdentifier } from '../native-types'
8
- import type { HKQuantitySample } from '../types'
5
+ import useSubscribeToChanges from './useSubscribeToChanges'
9
6
 
10
7
  /**
11
- * @returns the most recent sample for the given quantity type.
12
- */
13
- function useMostRecentQuantitySample<
14
- TIdentifier extends HKQuantityTypeIdentifier,
15
- TUnit extends UnitForIdentifier<TIdentifier>
16
- >(identifier: TIdentifier, unit?: TUnit) {
17
- const [lastSample, setLastSample] = useState<HKQuantitySample<
18
- TIdentifier
19
- > | null>(null)
20
-
21
- useEffect(() => {
22
- let cancelSubscription: (() => Promise<boolean>) | undefined
23
-
24
- const init = async () => {
25
- const actualUnit = await ensureUnit(identifier, unit)
26
-
27
- const value = await getMostRecentQuantitySample(identifier, actualUnit)
28
- setLastSample(value)
29
-
30
- cancelSubscription = await subscribeToChanges(identifier, async () => {
31
- const value = await getMostRecentQuantitySample(identifier, actualUnit)
32
- setLastSample(value)
33
- })
34
- }
35
- void init()
36
-
37
- return () => {
38
- void cancelSubscription?.()
39
- }
8
+ * @returns the most recent sample for the given quantity type.
9
+ */
10
+ export function useMostRecentQuantitySample(
11
+ identifier: QuantityTypeIdentifier,
12
+ unit?: string,
13
+ ) {
14
+ const [lastSample, setLastSample] = useState<QuantitySample>()
15
+
16
+ const fetchMostRecentSample = useCallback(async () => {
17
+ const value = await getMostRecentQuantitySample(identifier, unit)
18
+ setLastSample(value)
40
19
  }, [identifier, unit])
41
20
 
21
+ useSubscribeToChanges(identifier, fetchMostRecentSample)
22
+
42
23
  return lastSample
43
24
  }
44
25
 
@@ -1,22 +1,16 @@
1
- import {
2
- useEffect, useState, useRef, useCallback,
3
- } from 'react'
4
-
1
+ import { useCallback, useEffect, useRef, useState } from 'react'
2
+ import type { WorkoutProxy } from '../specs/WorkoutProxy.nitro'
5
3
  import getMostRecentWorkout from '../utils/getMostRecentWorkout'
6
- import getPreferredUnitsTyped from '../utils/getPreferredUnitsTyped'
7
- import subscribeToChanges from '../utils/subscribeToChanges'
8
-
9
- import type { EnergyUnit, LengthUnit } from '../native-types'
10
- import type { HKWorkout } from '../types'
4
+ import useSubscribeToChanges from './useSubscribeToChanges'
11
5
 
12
6
  /**
13
- * @returns the most recent workout sample.
14
- */
15
- function useMostRecentWorkout<
16
- TEnergy extends EnergyUnit,
17
- TDistance extends LengthUnit
18
- >(options?: { readonly energyUnit?: TEnergy; readonly distanceUnit?: TDistance }) {
19
- const [workout, setWorkout] = useState<HKWorkout<TEnergy, TDistance> | null>(null)
7
+ * @returns the most recent workout sample.
8
+ */
9
+ export function useMostRecentWorkout(options?: {
10
+ readonly energyUnit?: string
11
+ readonly distanceUnit?: string
12
+ }) {
13
+ const [workout, setWorkout] = useState<WorkoutProxy>()
20
14
 
21
15
  const optionsRef = useRef(options)
22
16
 
@@ -25,35 +19,19 @@ function useMostRecentWorkout<
25
19
  }, [options])
26
20
 
27
21
  const update = useCallback(async () => {
28
- const { energyUnit, distanceUnit } = await getPreferredUnitsTyped(
29
- optionsRef.current,
22
+ setWorkout(
23
+ await getMostRecentWorkout({
24
+ energyUnit: optionsRef.current?.energyUnit,
25
+ distanceUnit: optionsRef.current?.distanceUnit,
26
+ }),
30
27
  )
31
-
32
- setWorkout(await getMostRecentWorkout({
33
- energyUnit,
34
- distanceUnit,
35
- }))
36
28
  }, [])
37
29
 
38
30
  useEffect(() => {
39
31
  void update()
40
32
  }, [update])
41
33
 
42
- useEffect(() => {
43
- let cancelSubscription: (() => Promise<boolean>) | undefined
44
-
45
- const init = async () => {
46
- cancelSubscription = await subscribeToChanges(
47
- 'HKWorkoutTypeIdentifier',
48
- update,
49
- )
50
- }
51
- void init()
52
-
53
- return () => {
54
- void cancelSubscription?.()
55
- }
56
- }, [update])
34
+ useSubscribeToChanges('HKWorkoutTypeIdentifier', update)
57
35
 
58
36
  return workout
59
37
  }
@@ -1,20 +1,16 @@
1
1
  import { useCallback, useEffect, useState } from 'react'
2
2
 
3
- import querySources from '../utils/querySources'
3
+ import { Core } from '../modules'
4
+ import type { SourceProxy } from '../specs/SourceProxy.nitro'
5
+ import type { SampleTypeIdentifier } from '../types/Shared'
4
6
 
5
- import type {
6
- HKCategoryTypeIdentifier,
7
- HKQuantityTypeIdentifier,
8
- HKSource,
9
- } from '../native-types'
10
-
11
- function useSources<
12
- TIdentifier extends HKCategoryTypeIdentifier | HKQuantityTypeIdentifier
13
- >(identifier: TIdentifier) {
14
- const [result, setResult] = useState<readonly HKSource[] | null>(null)
7
+ export function useSources<TIdentifier extends SampleTypeIdentifier>(
8
+ identifier: TIdentifier,
9
+ ) {
10
+ const [result, setResult] = useState<readonly SourceProxy[] | null>(null)
15
11
 
16
12
  const update = useCallback(async () => {
17
- const res = await querySources(identifier)
13
+ const res = await Core.querySources(identifier)
18
14
  setResult(res)
19
15
  }, [identifier])
20
16
 
@@ -1,21 +1,24 @@
1
- import {
2
- useState, useEffect, useCallback, useRef,
3
- } from 'react'
1
+ import { useCallback, useEffect, useRef, useState } from 'react'
4
2
 
5
3
  import useSubscribeToChanges from './useSubscribeToChanges'
6
- import queryStatisticsForQuantity from '../utils/queryStatisticsForQuantity'
7
4
 
8
- import type { HKQuantityTypeIdentifier, HKStatisticsOptions, UnitForIdentifier } from '../native-types'
9
- import type { QueryStatisticsResponse } from '../types'
5
+ import { QuantityTypes } from '../modules'
6
+ import type {
7
+ QueryStatisticsResponse,
8
+ StatisticsOptions,
9
+ } from '../types/QuantityType'
10
+ import type { QuantityTypeIdentifier } from '../types/QuantityTypeIdentifier'
10
11
 
11
- function useStatisticsForQuantity<TIdentifier extends HKQuantityTypeIdentifier, TUnit extends UnitForIdentifier<TIdentifier> = UnitForIdentifier<TIdentifier>>(
12
+ export function useStatisticsForQuantity<
13
+ TIdentifier extends QuantityTypeIdentifier,
14
+ >(
12
15
  identifier: TIdentifier,
13
- options: readonly HKStatisticsOptions[],
16
+ options: readonly StatisticsOptions[],
14
17
  from: Date,
15
18
  to?: Date,
16
- unit?: TUnit,
19
+ unit?: string,
17
20
  ) {
18
- const [result, setResult] = useState<QueryStatisticsResponse<TIdentifier, TUnit> | null>(null)
21
+ const [result, setResult] = useState<QueryStatisticsResponse | null>(null)
19
22
 
20
23
  const optionsRef = useRef(options)
21
24
 
@@ -24,11 +27,13 @@ function useStatisticsForQuantity<TIdentifier extends HKQuantityTypeIdentifier,
24
27
  }, [options])
25
28
 
26
29
  const update = useCallback(async () => {
27
- const res = await queryStatisticsForQuantity(identifier, optionsRef.current, from, to, unit)
30
+ const res = await QuantityTypes.queryStatisticsForQuantity(
31
+ identifier,
32
+ optionsRef.current,
33
+ { filter: { startDate: from, endDate: to }, unit },
34
+ )
28
35
  setResult(res)
29
- }, [
30
- identifier, from, to, unit,
31
- ])
36
+ }, [identifier, from, to, unit])
32
37
 
33
38
  useEffect(() => {
34
39
  void update()
@@ -1,12 +1,11 @@
1
1
  import { useEffect, useRef } from 'react'
2
+ import type { SampleTypeIdentifier } from '../types/Shared'
3
+ import type { OnChangeCallbackArgs } from '../types/Subscriptons'
4
+ import { subscribeToChanges } from '../utils/subscribeToChanges'
2
5
 
3
- import subscribeToChanges from '../utils/subscribeToChanges'
4
-
5
- import type { HKSampleTypeIdentifier } from '..'
6
-
7
- function useSubscribeToChanges<TIdentifier extends HKSampleTypeIdentifier>(
6
+ export function useSubscribeToChanges<TIdentifier extends SampleTypeIdentifier>(
8
7
  identifier: TIdentifier,
9
- onChange: () => void,
8
+ onChange: (args: OnChangeCallbackArgs) => void,
10
9
  ): void {
11
10
  const onChangeRef = useRef(onChange)
12
11
 
@@ -15,15 +14,12 @@ function useSubscribeToChanges<TIdentifier extends HKSampleTypeIdentifier>(
15
14
  }, [onChange])
16
15
 
17
16
  useEffect(() => {
18
- let cancelSubscription: (() => Promise<boolean>) | undefined
19
-
20
- const init = async () => {
21
- cancelSubscription = await subscribeToChanges(identifier, onChangeRef.current)
22
- }
23
- void init()
17
+ const subscription = subscribeToChanges(identifier, (args) => {
18
+ onChangeRef.current(args)
19
+ })
24
20
 
25
21
  return () => {
26
- void cancelSubscription?.()
22
+ subscription.remove()
27
23
  }
28
24
  }, [identifier])
29
25
  }
@@ -0,0 +1,232 @@
1
+ import { Platform } from 'react-native'
2
+ import useHealthkitAuthorization from './hooks/useHealthkitAuthorization'
3
+ import { useIsHealthDataAvailable } from './hooks/useIsHealthDataAvailable'
4
+ import useMostRecentCategorySample from './hooks/useMostRecentCategorySample'
5
+ import useMostRecentQuantitySample from './hooks/useMostRecentQuantitySample'
6
+ import useMostRecentWorkout from './hooks/useMostRecentWorkout'
7
+ import useSources from './hooks/useSources'
8
+ import useStatisticsForQuantity from './hooks/useStatisticsForQuantity'
9
+ import useSubscribeToChanges from './hooks/useSubscribeToChanges'
10
+ import {
11
+ CategoryTypes,
12
+ Characteristics,
13
+ Core,
14
+ CorrelationTypes,
15
+ HeartbeatSeries,
16
+ QuantityTypes,
17
+ StateOfMind,
18
+ Workouts,
19
+ } from './modules'
20
+ import type { QuantityTypeIdentifier } from './types/QuantityTypeIdentifier'
21
+ import getMostRecentCategorySample from './utils/getMostRecentCategorySample'
22
+ import getMostRecentQuantitySample from './utils/getMostRecentQuantitySample'
23
+ import getMostRecentWorkout from './utils/getMostRecentWorkout'
24
+ import getPreferredUnit from './utils/getPreferredUnit'
25
+
26
+ const currentMajorVersionIOS =
27
+ Platform.OS === 'ios' ? Number.parseInt(Platform.Version, 10) : 0
28
+
29
+ /**
30
+ * Quantity types that are not available before iOS 17
31
+ */
32
+ type QuantityTypesIOS17Plus =
33
+ | 'HKQuantityTypeIdentifierCyclingCadence'
34
+ | 'HKQuantityTypeIdentifierCyclingFunctionalThresholdPower'
35
+ | 'HKQuantityTypeIdentifierCyclingPower'
36
+ | 'HKQuantityTypeIdentifierCyclingSpeed'
37
+ | 'HKQuantityTypeIdentifierPhysicalEffort'
38
+ | 'HKQuantityTypeIdentifierTimeInDaylight'
39
+
40
+ /**
41
+ * Available quantity types for iOS versions before iOS 17
42
+ */
43
+ export type AvailableQuantityTypesBeforeIOS17 = Exclude<
44
+ QuantityTypeIdentifier,
45
+ QuantityTypesIOS17Plus
46
+ >
47
+
48
+ export {
49
+ getMostRecentCategorySample,
50
+ getMostRecentQuantitySample,
51
+ getMostRecentWorkout,
52
+ getPreferredUnit,
53
+ useMostRecentCategorySample,
54
+ useMostRecentQuantitySample,
55
+ useMostRecentWorkout,
56
+ useSubscribeToChanges,
57
+ useHealthkitAuthorization,
58
+ useIsHealthDataAvailable,
59
+ useSources,
60
+ useStatisticsForQuantity,
61
+ }
62
+
63
+ /**
64
+ * Available quantity types for iOS 17 and later (all quantity types)
65
+ */
66
+ export type AvailableQuantityTypesIOS17Plus = QuantityTypeIdentifier
67
+
68
+ /**
69
+ * Get available quantity types based on iOS version
70
+ * @param majorVersionIOS - iOS major version number (defaults to current iOS version)
71
+ * @returns Available quantity types for the given iOS version
72
+ */
73
+ export type AvailableQuantityTypes<
74
+ T extends number = typeof currentMajorVersionIOS,
75
+ > = T extends 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25
76
+ ? AvailableQuantityTypesIOS17Plus
77
+ : AvailableQuantityTypesBeforeIOS17
78
+
79
+ // Named exports - all functions bound to their respective modules
80
+ export const authorizationStatusFor = Core.authorizationStatusFor.bind(Core)
81
+ export const disableAllBackgroundDelivery =
82
+ Core.disableAllBackgroundDelivery.bind(Core)
83
+ export const disableBackgroundDelivery =
84
+ Core.disableBackgroundDelivery.bind(Core)
85
+ export const enableBackgroundDelivery = Core.enableBackgroundDelivery.bind(Core)
86
+ export const getBiologicalSex =
87
+ Characteristics.getBiologicalSex.bind(Characteristics)
88
+ export const getBloodType = Characteristics.getBloodType.bind(Characteristics)
89
+ export const getDateOfBirth =
90
+ Characteristics.getDateOfBirth.bind(Characteristics)
91
+ export const getFitzpatrickSkinType =
92
+ Characteristics.getFitzpatrickSkinType.bind(Characteristics)
93
+ export const getPreferredUnits = Core.getPreferredUnits.bind(Core)
94
+ export const getRequestStatusForAuthorization =
95
+ Core.getRequestStatusForAuthorization.bind(Core)
96
+ export const getWheelchairUse =
97
+ Characteristics.getWheelchairUse.bind(Characteristics)
98
+ export const isHealthDataAvailable = Core.isHealthDataAvailable.bind(Core)
99
+ export const isHealthDataAvailableAsync =
100
+ Core.isHealthDataAvailableAsync.bind(Core)
101
+ export const queryCategorySamples =
102
+ CategoryTypes.queryCategorySamples.bind(CategoryTypes)
103
+ export const queryCategorySamplesWithAnchor =
104
+ CategoryTypes.queryCategorySamplesWithAnchor.bind(CategoryTypes)
105
+ export const queryCorrelationSamples =
106
+ CorrelationTypes.queryCorrelationSamples.bind(CorrelationTypes)
107
+ export const queryHeartbeatSeriesSamples =
108
+ HeartbeatSeries.queryHeartbeatSeriesSamples.bind(HeartbeatSeries)
109
+ export const queryHeartbeatSeriesSamplesWithAnchor =
110
+ HeartbeatSeries.queryHeartbeatSeriesSamplesWithAnchor.bind(HeartbeatSeries)
111
+ export const queryQuantitySamples =
112
+ QuantityTypes.queryQuantitySamples.bind(QuantityTypes)
113
+ export const queryQuantitySamplesWithAnchor =
114
+ QuantityTypes.queryQuantitySamplesWithAnchor.bind(QuantityTypes)
115
+ export const queryStatisticsForQuantity =
116
+ QuantityTypes.queryStatisticsForQuantity.bind(QuantityTypes)
117
+ export const queryStatisticsCollectionForQuantity =
118
+ QuantityTypes.queryStatisticsCollectionForQuantity.bind(QuantityTypes)
119
+ export const queryWorkoutSamples = Workouts.queryWorkoutSamples.bind(Workouts)
120
+ export const queryWorkoutSamplesWithAnchor =
121
+ Workouts.queryWorkoutSamplesWithAnchor.bind(Workouts)
122
+ export const querySources = Core.querySources.bind(Core)
123
+ export const requestAuthorization = Core.requestAuthorization.bind(Core)
124
+ export const deleteObjects = Core.deleteObjects.bind(Core)
125
+ export const saveCategorySample =
126
+ CategoryTypes.saveCategorySample.bind(CategoryTypes)
127
+ export const saveCorrelationSample =
128
+ CorrelationTypes.saveCorrelationSample.bind(CorrelationTypes)
129
+ export const saveQuantitySample =
130
+ QuantityTypes.saveQuantitySample.bind(QuantityTypes)
131
+ export const saveWorkoutSample = Workouts.saveWorkoutSample.bind(Workouts)
132
+ export const subscribeToChanges = Core.subscribeToObserverQuery.bind(Core)
133
+ export const startWatchApp =
134
+ Workouts.startWatchAppWithWorkoutConfiguration.bind(Workouts)
135
+ export const isProtectedDataAvailable = Core.isProtectedDataAvailable.bind(Core)
136
+ export const queryStateOfMindSamples =
137
+ StateOfMind.queryStateOfMindSamples.bind(StateOfMind)
138
+ export const saveStateOfMindSample =
139
+ StateOfMind.saveStateOfMindSample.bind(StateOfMind)
140
+ export const isQuantityCompatibleWithUnit =
141
+ QuantityTypes.isQuantityCompatibleWithUnit.bind(QuantityTypes)
142
+ export const unsubscribeQueries = Core.unsubscribeQueries.bind(Core)
143
+
144
+ export const isObjectTypeAvailable = Core.isObjectTypeAvailable.bind(Core)
145
+ export const isObjectTypeAvailableAsync =
146
+ Core.isObjectTypeAvailableAsync.bind(Core)
147
+ export const areObjectTypesAvailable = Core.areObjectTypesAvailable.bind(Core)
148
+ export const areObjectTypesAvailableAsync =
149
+ Core.areObjectTypesAvailableAsync.bind(Core)
150
+
151
+ export const getBiologicalSexAsync =
152
+ Characteristics.getBiologicalSexAsync.bind(Characteristics)
153
+ export const getBloodTypeAsync =
154
+ Characteristics.getBloodTypeAsync.bind(Characteristics)
155
+ export const getDateOfBirthAsync =
156
+ Characteristics.getDateOfBirthAsync.bind(Characteristics)
157
+ export const getFitzpatrickSkinTypeAsync =
158
+ Characteristics.getFitzpatrickSkinTypeAsync.bind(Characteristics)
159
+ export const getWheelchairUseAsync =
160
+ Characteristics.getWheelchairUseAsync.bind(Characteristics)
161
+
162
+ export default {
163
+ authorizationStatusFor,
164
+ isObjectTypeAvailable,
165
+ isObjectTypeAvailableAsync,
166
+ areObjectTypesAvailable,
167
+ areObjectTypesAvailableAsync,
168
+ isQuantityCompatibleWithUnit,
169
+ disableAllBackgroundDelivery,
170
+ disableBackgroundDelivery,
171
+ enableBackgroundDelivery,
172
+ getBiologicalSex,
173
+ getBloodType,
174
+ getDateOfBirth,
175
+ getFitzpatrickSkinType,
176
+ getBiologicalSexAsync,
177
+ getBloodTypeAsync,
178
+ getDateOfBirthAsync,
179
+ getFitzpatrickSkinTypeAsync,
180
+ getWheelchairUseAsync,
181
+ getMostRecentCategorySample,
182
+ getMostRecentQuantitySample,
183
+ getMostRecentWorkout,
184
+ getPreferredUnits,
185
+ getPreferredUnit,
186
+ getRequestStatusForAuthorization,
187
+ getWheelchairUse,
188
+ isHealthDataAvailable,
189
+ isHealthDataAvailableAsync,
190
+ queryCategorySamples,
191
+ queryCategorySamplesWithAnchor,
192
+ queryCorrelationSamples,
193
+ queryHeartbeatSeriesSamples,
194
+ queryHeartbeatSeriesSamplesWithAnchor,
195
+ queryQuantitySamples,
196
+ queryQuantitySamplesWithAnchor,
197
+ queryStatisticsForQuantity,
198
+ queryStatisticsCollectionForQuantity,
199
+ queryWorkoutSamples,
200
+ queryWorkoutSamplesWithAnchor,
201
+ querySources,
202
+ requestAuthorization,
203
+ deleteObjects,
204
+ saveCategorySample,
205
+ saveCorrelationSample,
206
+ saveQuantitySample,
207
+ saveWorkoutSample,
208
+ subscribeToChanges,
209
+ unsubscribeQueries,
210
+ startWatchApp,
211
+ isProtectedDataAvailable,
212
+ queryStateOfMindSamples,
213
+ saveStateOfMindSample,
214
+ // Modules
215
+ // Core,
216
+ // Workouts,
217
+ // Characteristics,
218
+ // QuantityTypes,
219
+ // CategoryTypes,
220
+ // CorrelationTypes,
221
+ // HeartbeatSeries,
222
+ // StateOfMind,
223
+ // hooks
224
+ useMostRecentCategorySample,
225
+ useMostRecentQuantitySample,
226
+ useMostRecentWorkout,
227
+ useSubscribeToChanges,
228
+ useHealthkitAuthorization,
229
+ useIsHealthDataAvailable,
230
+ useSources,
231
+ useStatisticsForQuantity,
232
+ }