@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
@@ -0,0 +1,405 @@
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 uuid: String {
221
+ get {
222
+ return workout.uuid.uuidString
223
+ }
224
+ }
225
+
226
+ var device: Device? {
227
+ if let hkDevice = workout.device {
228
+ return Device(
229
+ name: hkDevice.name,
230
+ firmwareVersion: hkDevice.firmwareVersion,
231
+ hardwareVersion: hkDevice.hardwareVersion,
232
+ localIdentifier: hkDevice.localIdentifier,
233
+ manufacturer: hkDevice.manufacturer,
234
+ model: hkDevice.model,
235
+ softwareVersion: hkDevice.softwareVersion,
236
+ udiDeviceIdentifier: hkDevice.udiDeviceIdentifier
237
+ )
238
+ }
239
+ return nil
240
+ }
241
+
242
+ var workoutActivityType: WorkoutActivityType {
243
+ get {
244
+ if let activityType = WorkoutActivityType.init(
245
+ rawValue: Int32(workout.workoutActivityType.rawValue)
246
+ ) {
247
+ return activityType
248
+ }
249
+
250
+ print("Unknown workout activity type: \(workout.workoutActivityType.rawValue), falling back to 'other'")
251
+
252
+ return WorkoutActivityType.other
253
+ }
254
+ }
255
+
256
+ var duration: Quantity {
257
+ get {
258
+ let quantity = HKQuantity(unit: .second(), doubleValue: workout.duration)
259
+
260
+ let duration = serializeQuantityTyped(
261
+ unit: .second(),
262
+ quantity: quantity
263
+ )
264
+
265
+ return duration
266
+ }
267
+ }
268
+
269
+ var totalDistance: Quantity? {
270
+ if let hkTotalDistance = workout.totalDistance {
271
+ return Quantity(
272
+ unit: "meters",
273
+ quantity: hkTotalDistance.doubleValue(for: HKUnit.meter())
274
+ )
275
+ }
276
+ return nil
277
+ }
278
+
279
+ var totalEnergyBurned: Quantity? {
280
+ get {
281
+ return serializeQuantityTyped(
282
+ unit: energyUnit,
283
+ quantityNullable: workout.totalEnergyBurned
284
+ )
285
+ }
286
+ }
287
+
288
+ var totalSwimmingStrokeCount: Quantity? {
289
+ get {
290
+ return serializeQuantityTyped(
291
+ unit: .count(),
292
+ quantityNullable: workout.totalSwimmingStrokeCount
293
+ )
294
+ }
295
+
296
+ }
297
+
298
+ var totalFlightsClimbed: Quantity? {
299
+ if #available(iOS 11, *) {
300
+ if let hkTotalFlightsClimbed = workout.totalFlightsClimbed {
301
+ return Quantity(
302
+ unit: "count",
303
+ quantity: hkTotalFlightsClimbed.doubleValue(for: HKUnit.count())
304
+ )
305
+ }
306
+ }
307
+ return nil
308
+ }
309
+
310
+ var energyUnit: HKUnit
311
+
312
+ var startDate: Date {
313
+ get {
314
+ return workout.startDate
315
+ }
316
+ }
317
+
318
+ var endDate: Date {
319
+ get {
320
+ return workout.endDate
321
+ }
322
+ }
323
+
324
+ var metadata: AnyMapHolder? {
325
+ get {
326
+ return serializeMetadata(workout.metadata)
327
+ }
328
+ }
329
+
330
+ var sourceRevision: SourceRevision? {
331
+ get {
332
+ return serializeSourceRevision(workout.sourceRevision)
333
+ }
334
+ }
335
+
336
+ var events: [WorkoutEvent]? {
337
+ if let hkWorkoutEvents = workout.workoutEvents {
338
+ return hkWorkoutEvents.compactMap { event in
339
+ if let type = WorkoutEventType.init(
340
+ rawValue: Int32(event.type.rawValue)
341
+ ) {
342
+ return WorkoutEvent(
343
+ type: type,
344
+ startDate: event.dateInterval.start,
345
+ endDate: event.dateInterval.end
346
+ )
347
+ }
348
+ print(
349
+ "Failed to initialize WorkoutEventType with rawValue: \(event.type.rawValue)"
350
+ )
351
+ return nil
352
+ }
353
+ }
354
+ return nil
355
+ }
356
+
357
+ var activities: [WorkoutActivity]? {
358
+ if #available(iOS 16.0, *) {
359
+ let hkActivities = workout.workoutActivities
360
+
361
+ return hkActivities.map { activity in
362
+ return WorkoutActivity(
363
+ startDate: activity.startDate,
364
+ endDate: activity.endDate ?? activity.startDate,
365
+ uuid: activity.uuid.uuidString,
366
+ duration: activity.duration
367
+ )
368
+ }
369
+ }
370
+ return nil
371
+ }
372
+
373
+ let distanceUnit: HKUnit
374
+
375
+ private let workout: HKWorkout
376
+
377
+ init(workout: HKWorkout, distanceUnit: HKUnit, energyUnit: HKUnit) {
378
+ self.energyUnit = energyUnit
379
+ self.distanceUnit = distanceUnit
380
+
381
+ self.workout = workout
382
+ }
383
+
384
+ func getWorkoutPlan() throws -> Promise<WorkoutPlan?> {
385
+ return Promise.async {
386
+ if #available(iOS 17.0.0, *) {
387
+ return try await getWorkoutPlanInternal(workout: self.workout)
388
+ } else {
389
+ throw RuntimeError.error(
390
+ withMessage: "Workout plans are only available on iOS 17.0 or later"
391
+ )
392
+ }
393
+ }
394
+ }
395
+
396
+ func saveWorkoutRoute(locations: [LocationForSaving]) throws -> Promise<Bool> {
397
+ return saveWorkoutRouteInternal(workout: self.workout, locations: locations)
398
+ }
399
+
400
+ func getWorkoutRoutes() throws -> Promise<[WorkoutRoute]> {
401
+ return Promise.async {
402
+ return try await getSerializedWorkoutLocations(workout: self.workout)
403
+ }
404
+ }
405
+ }
@@ -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
+ }