@kingstinct/react-native-healthkit 8.7.2 → 9.0.1

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/README.md +34 -21
  2. package/ReactNativeHealthkit.podspec +36 -0
  3. package/app.plugin.js +43 -33
  4. package/ios/Bridge.h +8 -0
  5. package/ios/CategoryTypeModule.swift +128 -0
  6. package/ios/CharacteristicTypeModule.swift +78 -0
  7. package/ios/Constants.swift +2 -0
  8. package/ios/CoreModule.swift +376 -0
  9. package/ios/CorrelationTypeModule.swift +153 -0
  10. package/ios/HeartbeatSeriesModule.swift +189 -0
  11. package/ios/Helpers.swift +525 -251
  12. package/ios/QuantityTypeModule.swift +461 -0
  13. package/ios/Serializers.swift +211 -124
  14. package/ios/SourceProxy.swift +35 -0
  15. package/ios/StateOfMindModule.swift +160 -0
  16. package/ios/WorkoutProxy.swift +412 -0
  17. package/ios/WorkoutSessionModule.swift +182 -0
  18. package/ios/WorkoutsModule.swift +357 -0
  19. package/package.json +43 -127
  20. package/react-native.config.js +16 -0
  21. package/src/hooks/useHealthkitAuthorization.test.ts +47 -29
  22. package/src/hooks/useHealthkitAuthorization.ts +21 -15
  23. package/src/hooks/useIsHealthDataAvailable.test.ts +17 -7
  24. package/src/hooks/useIsHealthDataAvailable.ts +7 -7
  25. package/src/hooks/useMostRecentCategorySample.ts +10 -12
  26. package/src/hooks/useMostRecentQuantitySample.ts +17 -36
  27. package/src/hooks/useMostRecentWorkout.ts +16 -38
  28. package/src/hooks/useSources.ts +8 -12
  29. package/src/hooks/useStatisticsForQuantity.ts +19 -14
  30. package/src/hooks/useSubscribeToChanges.ts +9 -13
  31. package/src/index.ios.ts +232 -0
  32. package/src/index.ts +444 -0
  33. package/src/modules.ts +43 -0
  34. package/src/specs/CategoryTypeModule.nitro.ts +64 -0
  35. package/src/specs/CharacteristicTypeModule.nitro.ts +22 -0
  36. package/src/specs/CoreModule.nitro.ts +107 -0
  37. package/src/specs/CorrelationTypeModule.nitro.ts +23 -0
  38. package/src/specs/HeartbeatSeriesModule.nitro.ts +19 -0
  39. package/src/specs/QuantityTypeModule.nitro.ts +60 -0
  40. package/src/specs/SourceProxy.nitro.ts +13 -0
  41. package/src/specs/StateOfMindModule.nitro.ts +23 -0
  42. package/src/specs/WorkoutProxy.nitro.ts +18 -0
  43. package/src/specs/WorkoutSessionModule.nitro.ts +71 -0
  44. package/src/specs/WorkoutsModule.nitro.ts +32 -0
  45. package/src/test-setup.ts +68 -54
  46. package/src/test-utils.ts +3 -2
  47. package/src/types/Auth.ts +17 -0
  48. package/src/types/Background.ts +9 -0
  49. package/src/types/CategoryType.ts +249 -0
  50. package/src/types/CategoryTypeIdentifier.ts +99 -0
  51. package/src/types/Characteristics.ts +53 -0
  52. package/src/types/Constants.ts +25 -0
  53. package/src/types/CorrelationType.ts +31 -0
  54. package/src/types/Device.ts +13 -0
  55. package/src/types/HeartbeatSeries.ts +29 -0
  56. package/src/types/InterfaceVerification.ts +164 -0
  57. package/src/types/InterfaceVerificationExample.ts +89 -0
  58. package/src/types/QuantitySample.ts +30 -0
  59. package/src/types/QuantityType.ts +192 -0
  60. package/src/types/QuantityTypeIdentifier.ts +758 -0
  61. package/src/types/QueryOptions.ts +69 -0
  62. package/src/types/README-InterfaceVerification.md +103 -0
  63. package/src/types/Shared.ts +79 -0
  64. package/src/types/Source.ts +11 -0
  65. package/src/types/StateOfMind.ts +110 -0
  66. package/src/types/Subscriptons.ts +10 -0
  67. package/src/types/Units.ts +190 -0
  68. package/src/types/WeatherCondition.ts +31 -0
  69. package/src/types/WorkoutKit.ts +18 -0
  70. package/src/types/Workouts.ts +282 -0
  71. package/src/utils/getMostRecentCategorySample.ts +7 -11
  72. package/src/utils/getMostRecentQuantitySample.ts +8 -18
  73. package/src/utils/getMostRecentWorkout.ts +7 -17
  74. package/src/utils/getPreferredUnit.ts +12 -8
  75. package/src/utils/subscribeToChanges.ts +9 -26
  76. package/LICENSE +0 -21
  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
@@ -0,0 +1,412 @@
1
+ //
2
+ // WorkoutProxy.swift
3
+ // Pods
4
+ //
5
+ // Created by Robert Herber on 2025-06-07.
6
+ //
7
+
8
+ import CoreLocation
9
+ import HealthKit
10
+ import NitroModules
11
+
12
+ @available(iOS 17.0.0, *)
13
+ func getWorkoutPlanInternal(workout: HKWorkout) async throws -> WorkoutPlan? {
14
+ let workoutPlan = try await workout.workoutPlan
15
+ if let id = workoutPlan?.id.uuidString {
16
+ if let activityType = workoutPlan?.workout.activity {
17
+ let workoutPlan = WorkoutPlan(
18
+ id: id,
19
+ activityType: WorkoutActivityType.init(
20
+ rawValue: Int32(activityType.rawValue)
21
+ )!
22
+ )
23
+
24
+ return workoutPlan
25
+ }
26
+ }
27
+
28
+ return nil
29
+ }
30
+
31
+ func getWorkoutRoutesInternal(
32
+ workout: HKWorkout
33
+ ) async throws -> [HKWorkoutRoute]? {
34
+ let workoutPredicate = HKQuery.predicateForObjects(from: workout)
35
+ let samples = try await withCheckedThrowingContinuation {
36
+ (continuation: CheckedContinuation<[HKSample], Error>) in
37
+ let query = HKAnchoredObjectQuery(
38
+ type: HKSeriesType.workoutRoute(),
39
+ predicate: workoutPredicate,
40
+ anchor: nil,
41
+ limit: HKObjectQueryNoLimit
42
+ ) {
43
+ (_, samples, _, _, error) in
44
+
45
+ if let hasError = error {
46
+ return continuation.resume(throwing: hasError)
47
+
48
+ }
49
+
50
+ guard let samples = samples else {
51
+ return continuation.resume(
52
+ throwing: RuntimeError.error(withMessage: "Empty response")
53
+ )
54
+ }
55
+
56
+ continuation.resume(returning: samples)
57
+ }
58
+ store.execute(query)
59
+ }
60
+
61
+ guard let routes = samples as? [HKWorkoutRoute] else {
62
+ return nil
63
+ }
64
+
65
+ return routes
66
+ }
67
+
68
+ func getRouteLocations(
69
+ route: HKWorkoutRoute
70
+ ) async -> [CLLocation] {
71
+ let locations = try! await withCheckedThrowingContinuation {
72
+ (continuation: CheckedContinuation<[CLLocation], Error>) in
73
+ var allLocations: [CLLocation] = []
74
+
75
+ let query = HKWorkoutRouteQuery(route: route) {
76
+ (_, locationsOrNil, done, errorOrNil) in
77
+
78
+ if let error = errorOrNil {
79
+ continuation.resume(throwing: error)
80
+ return
81
+ }
82
+
83
+ guard let currentLocationBatch = locationsOrNil else {
84
+ return continuation.resume(
85
+ throwing: RuntimeError.error(withMessage: "Empty response")
86
+ )
87
+ }
88
+
89
+ allLocations.append(contentsOf: currentLocationBatch)
90
+
91
+ if done {
92
+ continuation.resume(returning: allLocations)
93
+ }
94
+ }
95
+
96
+ store.execute(query)
97
+ }
98
+
99
+ return locations
100
+ }
101
+
102
+ func serializeLocation(location: CLLocation, previousLocation: CLLocation?)
103
+ -> WorkoutRouteLocation {
104
+ var distance: CLLocationDistance?
105
+ if let previousLocation = previousLocation {
106
+ distance = location.distance(from: previousLocation)
107
+ } else {
108
+ distance = nil
109
+ }
110
+
111
+ return WorkoutRouteLocation(
112
+ altitude: location.altitude,
113
+ course: location.course,
114
+ date: location.timestamp,
115
+ distance: distance,
116
+ horizontalAccuracy: location.horizontalAccuracy,
117
+ latitude: location.coordinate.latitude,
118
+ longitude: location.coordinate.longitude,
119
+ speed: location.speed,
120
+ speedAccuracy: location.speedAccuracy,
121
+ verticalAccuracy: location.verticalAccuracy
122
+ )
123
+ }
124
+
125
+ func getSerializedWorkoutLocations(
126
+ workout: HKWorkout
127
+ ) async throws -> [WorkoutRoute] {
128
+ let routes = try await getWorkoutRoutesInternal(
129
+ workout: workout
130
+ )
131
+
132
+ var allRoutes: [WorkoutRoute] = []
133
+ guard let _routes = routes else {
134
+ throw RuntimeError.error(withMessage: "Unexpected empty response")
135
+ }
136
+ for route in _routes {
137
+ let routeMetadata = serializeMetadata(
138
+ route.metadata
139
+ )
140
+
141
+ let routeCLLocations = await getRouteLocations(
142
+ route: route
143
+ )
144
+
145
+ let routeLocations = routeCLLocations.enumerated().map {
146
+ (i, loc) in
147
+ serializeLocation(
148
+ location: loc,
149
+ previousLocation: i == 0 ? nil : routeCLLocations[i - 1]
150
+ )
151
+ }
152
+ // let routeInfos: WorkoutRoute = ["locations": routeLocations]
153
+
154
+ allRoutes.append(
155
+ WorkoutRoute(
156
+ locations: routeLocations,
157
+ HKMetadataKeySyncIdentifier: routeMetadata.getString(
158
+ key: "HKMetadataKeySyncIdentifier"
159
+ ),
160
+ HKMetadataKeySyncVersion: routeMetadata.getDouble(
161
+ key: "HKMetadataKeySyncVersion"
162
+ )
163
+ )
164
+ )
165
+ }
166
+ return allRoutes
167
+ }
168
+
169
+ func saveWorkoutRouteInternal(
170
+ workout: HKWorkout,
171
+ locations: [LocationForSaving]
172
+ ) -> Promise<Bool> {
173
+ return Promise.async {
174
+ try await withCheckedThrowingContinuation { continuation in
175
+ Task {
176
+ do {
177
+ // create CLLocations and return if locations are empty
178
+ let clLocations = mapLocations(from: locations)
179
+ let routeBuilder = HKWorkoutRouteBuilder(
180
+ healthStore: store,
181
+ device: nil
182
+ )
183
+ try await routeBuilder.insertRouteData(clLocations)
184
+ try await routeBuilder.finishRoute(with: workout, metadata: nil)
185
+
186
+ return continuation.resume(returning: true)
187
+ } catch {
188
+ return continuation.resume(throwing: error)
189
+ }
190
+ }
191
+
192
+ }
193
+ }
194
+ }
195
+
196
+ class WorkoutProxy: HybridWorkoutProxySpec {
197
+ func toJSON(key: String?) throws -> WorkoutSample {
198
+ if key != nil && key?.isEmpty != true {
199
+ print("WorkoutProxy does not support toJSON with key: \(key!)")
200
+ }
201
+
202
+ return WorkoutSample(
203
+ uuid: self.uuid,
204
+ device: self.device,
205
+ workoutActivityType: self.workoutActivityType,
206
+ duration: self.duration,
207
+ totalDistance: self.totalDistance,
208
+ totalEnergyBurned: self.totalEnergyBurned,
209
+ totalSwimmingStrokeCount: self.totalSwimmingStrokeCount,
210
+ totalFlightsClimbed: self.totalFlightsClimbed,
211
+ startDate: self.startDate,
212
+ endDate: self.endDate,
213
+ metadata: self.metadata,
214
+ sourceRevision: self.sourceRevision,
215
+ events: self.events,
216
+ activities: self.activities
217
+ )
218
+ }
219
+
220
+ var workoutPredicate: NSPredicate {
221
+ get {
222
+ let predicate = HKQuery.predicateForObjects(from: self.workout)
223
+ return predicate
224
+ }
225
+ }
226
+
227
+ var uuid: String {
228
+ get {
229
+ return workout.uuid.uuidString
230
+ }
231
+ }
232
+
233
+ var device: Device? {
234
+ if let hkDevice = workout.device {
235
+ return Device(
236
+ name: hkDevice.name,
237
+ firmwareVersion: hkDevice.firmwareVersion,
238
+ hardwareVersion: hkDevice.hardwareVersion,
239
+ localIdentifier: hkDevice.localIdentifier,
240
+ manufacturer: hkDevice.manufacturer,
241
+ model: hkDevice.model,
242
+ softwareVersion: hkDevice.softwareVersion,
243
+ udiDeviceIdentifier: hkDevice.udiDeviceIdentifier
244
+ )
245
+ }
246
+ return nil
247
+ }
248
+
249
+ var workoutActivityType: WorkoutActivityType {
250
+ get {
251
+ if let activityType = WorkoutActivityType.init(
252
+ rawValue: Int32(workout.workoutActivityType.rawValue)
253
+ ) {
254
+ return activityType
255
+ }
256
+
257
+ print("Unknown workout activity type: \(workout.workoutActivityType.rawValue), falling back to 'other'")
258
+
259
+ return WorkoutActivityType.other
260
+ }
261
+ }
262
+
263
+ var duration: Quantity {
264
+ get {
265
+ let quantity = HKQuantity(unit: .second(), doubleValue: workout.duration)
266
+
267
+ let duration = serializeQuantityTyped(
268
+ unit: .second(),
269
+ quantity: quantity
270
+ )
271
+
272
+ return duration
273
+ }
274
+ }
275
+
276
+ var totalDistance: Quantity? {
277
+ if let hkTotalDistance = workout.totalDistance {
278
+ return Quantity(
279
+ unit: "meters",
280
+ quantity: hkTotalDistance.doubleValue(for: HKUnit.meter())
281
+ )
282
+ }
283
+ return nil
284
+ }
285
+
286
+ var totalEnergyBurned: Quantity? {
287
+ get {
288
+ return serializeQuantityTyped(
289
+ unit: energyUnit,
290
+ quantityNullable: workout.totalEnergyBurned
291
+ )
292
+ }
293
+ }
294
+
295
+ var totalSwimmingStrokeCount: Quantity? {
296
+ get {
297
+ return serializeQuantityTyped(
298
+ unit: .count(),
299
+ quantityNullable: workout.totalSwimmingStrokeCount
300
+ )
301
+ }
302
+
303
+ }
304
+
305
+ var totalFlightsClimbed: Quantity? {
306
+ if #available(iOS 11, *) {
307
+ if let hkTotalFlightsClimbed = workout.totalFlightsClimbed {
308
+ return Quantity(
309
+ unit: "count",
310
+ quantity: hkTotalFlightsClimbed.doubleValue(for: HKUnit.count())
311
+ )
312
+ }
313
+ }
314
+ return nil
315
+ }
316
+
317
+ var energyUnit: HKUnit
318
+
319
+ var startDate: Date {
320
+ get {
321
+ return workout.startDate
322
+ }
323
+ }
324
+
325
+ var endDate: Date {
326
+ get {
327
+ return workout.endDate
328
+ }
329
+ }
330
+
331
+ var metadata: AnyMapHolder? {
332
+ get {
333
+ return serializeMetadata(workout.metadata)
334
+ }
335
+ }
336
+
337
+ var sourceRevision: SourceRevision? {
338
+ get {
339
+ return serializeSourceRevision(workout.sourceRevision)
340
+ }
341
+ }
342
+
343
+ var events: [WorkoutEvent]? {
344
+ if let hkWorkoutEvents = workout.workoutEvents {
345
+ return hkWorkoutEvents.compactMap { event in
346
+ if let type = WorkoutEventType.init(
347
+ rawValue: Int32(event.type.rawValue)
348
+ ) {
349
+ return WorkoutEvent(
350
+ type: type,
351
+ startDate: event.dateInterval.start,
352
+ endDate: event.dateInterval.end
353
+ )
354
+ }
355
+ print(
356
+ "Failed to initialize WorkoutEventType with rawValue: \(event.type.rawValue)"
357
+ )
358
+ return nil
359
+ }
360
+ }
361
+ return nil
362
+ }
363
+
364
+ var activities: [WorkoutActivity]? {
365
+ if #available(iOS 16.0, *) {
366
+ let hkActivities = workout.workoutActivities
367
+
368
+ return hkActivities.map { activity in
369
+ return WorkoutActivity(
370
+ startDate: activity.startDate,
371
+ endDate: activity.endDate ?? activity.startDate,
372
+ uuid: activity.uuid.uuidString,
373
+ duration: activity.duration
374
+ )
375
+ }
376
+ }
377
+ return nil
378
+ }
379
+
380
+ let distanceUnit: HKUnit
381
+
382
+ private let workout: HKWorkout
383
+
384
+ init(workout: HKWorkout, distanceUnit: HKUnit, energyUnit: HKUnit) {
385
+ self.energyUnit = energyUnit
386
+ self.distanceUnit = distanceUnit
387
+
388
+ self.workout = workout
389
+ }
390
+
391
+ func getWorkoutPlan() throws -> Promise<WorkoutPlan?> {
392
+ return Promise.async {
393
+ if #available(iOS 17.0.0, *) {
394
+ return try await getWorkoutPlanInternal(workout: self.workout)
395
+ } else {
396
+ throw RuntimeError.error(
397
+ withMessage: "Workout plans are only available on iOS 17.0 or later"
398
+ )
399
+ }
400
+ }
401
+ }
402
+
403
+ func saveWorkoutRoute(locations: [LocationForSaving]) throws -> Promise<Bool> {
404
+ return saveWorkoutRouteInternal(workout: self.workout, locations: locations)
405
+ }
406
+
407
+ func getWorkoutRoutes() throws -> Promise<[WorkoutRoute]> {
408
+ return Promise.async {
409
+ return try await getSerializedWorkoutLocations(workout: self.workout)
410
+ }
411
+ }
412
+ }
@@ -0,0 +1,182 @@
1
+ //
2
+ // Workout.swift
3
+ // Pods
4
+ //
5
+ // Created by Robert Herber on 2025-06-13.
6
+ //
7
+
8
+ import WorkoutKit
9
+ import NitroModules
10
+ import HealthKit
11
+
12
+
13
+ @available(iOS 17.0, *)
14
+ class WorkoutSessionDelegate: NSObject, HKWorkoutSessionDelegate {
15
+ func workoutSession(_ workoutSession: HKWorkoutSession, didChangeTo toState: HKWorkoutSessionState, from fromState: HKWorkoutSessionState, date: Date) {
16
+
17
+ }
18
+
19
+ func workoutSession(_ workoutSession: HKWorkoutSession, didFailWithError error: any Error) {
20
+
21
+ }
22
+
23
+
24
+
25
+ // var options: WorkoutSessionMirroringStartHandlerOptions? = nil
26
+ /*var onStateChange: ((_ event: WorkoutStateChangeEvent) -> Void)?
27
+ var onError: ((_ event: WorkoutErrorEvent) -> Void)?
28
+ var onDataReceived: ((_ event: WorkoutDataReceivedEvent) -> Void)?
29
+ var onEventReceived: ((_ event: WorkoutEventReceivedEvent) -> Void)?*/
30
+ // var options: WorkoutSessionMirroringStartHandlerOptions? = nil
31
+
32
+
33
+ /*func workoutSession(
34
+ _ workoutSession: HKWorkoutSession,
35
+ didChangeTo toState: HKWorkoutSessionState,
36
+ from fromState: HKWorkoutSessionState,
37
+ date: Date
38
+ ) {
39
+ Task { @MainActor [weak self] in
40
+ guard let self = self else { return }
41
+
42
+ _listeners.onStateChange(
43
+ WorkoutStateChangeEvent(
44
+ toState: WorkoutSessionState(rawValue: Int32(toState.rawValue))!,
45
+ fromState: WorkoutSessionState(rawValue: Int32(fromState.rawValue))!,
46
+ date: date
47
+ )
48
+ )
49
+ }
50
+ }
51
+
52
+ func workoutSession(_ workoutSession: HKWorkoutSession, didFailWithError error: any Error) {
53
+ Task { @MainActor [weak self] in
54
+ guard let self = self else { return }
55
+
56
+ self._listeners.onError(
57
+ WorkoutErrorEvent(error: error.localizedDescription)
58
+ )
59
+ }
60
+ }
61
+
62
+ func workoutSession(
63
+ _ workoutSession: HKWorkoutSession,
64
+ didReceiveDataFromRemoteWorkoutSession data: [Data]
65
+ ) {
66
+ Task { [weak self] in
67
+ guard let self = self else { return }
68
+
69
+ do {
70
+ let serializedData = data.compactMap { dataItem -> RemoteSessionSharableData? in
71
+ guard let json = try? JSONSerialization.jsonObject(with: dataItem) as? [String: Any] else {
72
+ return nil
73
+ }
74
+ if let type = json["type"] as? String,
75
+ let payload = json["payload"] as? [String: Any] {
76
+
77
+ return RemoteSessionSharableData(
78
+ type: type,
79
+ payload: serializeMetadata(payload)
80
+ )
81
+ }
82
+ return nil
83
+ }
84
+
85
+ await MainActor.run { [weak self] in
86
+ guard let self = self else { return }
87
+
88
+ self._listeners.onDataReceived(
89
+ WorkoutDataReceivedEvent(data: serializedData)
90
+ )
91
+ }
92
+ }
93
+ }
94
+ }
95
+
96
+
97
+ func workoutSession(_ workoutSession: HKWorkoutSession, didGenerate event: HKWorkoutEvent) {
98
+
99
+ self._listeners.onEventReceived(
100
+ WorkoutEventReceivedEvent(
101
+ type: WorkoutEventType(rawValue: Int32(event.type.rawValue))!,
102
+ )
103
+ )
104
+ }*/
105
+ }
106
+
107
+ class WorkoutSessionModule: HybridWorkoutSessionModuleSpec {
108
+ // var options: WorkoutSessionMirroringStartHandlerOptions? = nil
109
+ func workoutSessionMirroringStartHandler(options: WorkoutSessionMirroringStartHandlerOptions) throws -> Bool {
110
+ // self.options = options
111
+ if #available(iOS 17.0, *) {
112
+ store.workoutSessionMirroringStartHandler = { [weak self] mirroringSession in
113
+ let workoutSessionDelegate = WorkoutSessionDelegate()
114
+ // workoutSessionDelegate.options = options
115
+ /*workoutSessionDelegate.onStateChange = { event in
116
+ // if let options = self?.options {
117
+ // options.onStateChange(event)
118
+ // }
119
+
120
+
121
+ options.onStateChange(event)
122
+ }*/
123
+ mirroringSession.delegate = workoutSessionDelegate
124
+ self?._workoutSession = mirroringSession
125
+ self?._workoutSessionDelegate = workoutSessionDelegate
126
+ }
127
+ }
128
+
129
+ return true
130
+ }
131
+
132
+ /*func workoutSessionMirroringStartHandler(onError: @escaping (WorkoutErrorEvent) -> Void, onStateChange: @escaping (WorkoutStateChangeEvent) -> Void, onDataReceived: @escaping (WorkoutDataReceivedEvent) -> Void, onEventReceived: @escaping (WorkoutEventReceivedEvent) -> Void) throws -> Bool {
133
+ if #available(iOS 17.0, *) {
134
+ /*store.workoutSessionMirroringStartHandler = { [weak self] mirroringSession in
135
+ let workoutSessionDelegate = WorkoutSessionDelegate()
136
+ // workoutSessionDelegate.onStateChange = onStateChange
137
+ mirroringSession.delegate = workoutSessionDelegate
138
+ self?._workoutSession = mirroringSession
139
+ self?._workoutSessionDelegate = workoutSessionDelegate
140
+ }*/
141
+ }
142
+
143
+ return true
144
+ }*/
145
+
146
+ // var workoutSession: HKWorkoutSession? = nil
147
+ // var workoutSessionDelegate: WorkoutSessionDelegate? = nil
148
+
149
+ func startWatchAppWithWorkoutConfiguration(workoutConfiguration: WorkoutConfiguration) throws -> Promise<Bool> {
150
+ let configuration = parseWorkoutConfiguration(workoutConfiguration)
151
+
152
+ return Promise.async {
153
+ try await withCheckedThrowingContinuation { continuation in
154
+ store.startWatchApp(with: configuration) { success, error in
155
+ if let error {
156
+ continuation.resume(throwing: RuntimeError.error(withMessage: error.localizedDescription))
157
+ }
158
+
159
+ continuation.resume(returning: success)
160
+ }
161
+ }
162
+ }
163
+ }
164
+
165
+ var _workoutSession: Any? = nil
166
+ var _workoutSessionDelegate: Any? = nil
167
+
168
+ /*func workoutSessionMirroringStartHandler(options: StartWatchAppWithWorkoutConfigurationOptions) throws -> Bool {
169
+ if #available(iOS 17.0, *) {
170
+ store.workoutSessionMirroringStartHandler = { [weak self] mirroringSession in
171
+ let workoutSessionDelegate = WorkoutSessionDelegate()
172
+ workoutSessionDelegate.onStateChange = options.onStateChange
173
+ mirroringSession.delegate = workoutSessionDelegate
174
+ self?._workoutSession = mirroringSession
175
+ self?._workoutSessionDelegate = workoutSessionDelegate
176
+ }
177
+ }
178
+
179
+ return true
180
+ }*/
181
+
182
+ }