@nativesquare/soma 0.9.0 → 0.9.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 (354) hide show
  1. package/dist/component/_generated/api.d.ts +20 -2
  2. package/dist/component/_generated/api.d.ts.map +1 -1
  3. package/dist/component/_generated/api.js.map +1 -1
  4. package/dist/component/_generated/component.d.ts +7 -6
  5. package/dist/component/_generated/component.d.ts.map +1 -1
  6. package/dist/{garmin → component/garmin}/auth.d.ts +8 -1
  7. package/dist/component/garmin/auth.d.ts.map +1 -0
  8. package/dist/component/garmin/auth.js.map +1 -0
  9. package/dist/component/garmin/client.d.ts +15 -0
  10. package/dist/component/garmin/client.d.ts.map +1 -0
  11. package/dist/component/garmin/client.js +32 -0
  12. package/dist/component/garmin/client.js.map +1 -0
  13. package/dist/component/garmin/private.d.ts +85 -17
  14. package/dist/component/garmin/private.d.ts.map +1 -1
  15. package/dist/component/garmin/private.js +52 -205
  16. package/dist/component/garmin/private.js.map +1 -1
  17. package/dist/component/garmin/public.d.ts +42 -48
  18. package/dist/component/garmin/public.d.ts.map +1 -1
  19. package/dist/component/garmin/public.js +404 -368
  20. package/dist/component/garmin/public.js.map +1 -1
  21. package/dist/component/garmin/schemas/activity.d.ts +2 -2
  22. package/dist/component/garmin/schemas/activity.d.ts.map +1 -1
  23. package/dist/component/garmin/schemas/activity.js +3 -1
  24. package/dist/component/garmin/schemas/activity.js.map +1 -1
  25. package/dist/component/garmin/schemas/activityDetails.d.ts +50 -50
  26. package/dist/component/garmin/schemas/activityDetails.d.ts.map +1 -1
  27. package/dist/component/garmin/schemas/activityDetails.js +4 -1
  28. package/dist/component/garmin/schemas/activityDetails.js.map +1 -1
  29. package/dist/component/garmin/schemas/bloodPressure.js +1 -1
  30. package/dist/component/garmin/schemas/bloodPressure.js.map +1 -1
  31. package/dist/component/garmin/schemas/bodyCompositions.js +1 -1
  32. package/dist/component/garmin/schemas/bodyCompositions.js.map +1 -1
  33. package/dist/component/garmin/schemas/dailies.js +1 -1
  34. package/dist/component/garmin/schemas/dailies.js.map +1 -1
  35. package/dist/component/garmin/schemas/epochs.js +1 -1
  36. package/dist/component/garmin/schemas/epochs.js.map +1 -1
  37. package/dist/component/garmin/schemas/healthSnapshot.js +1 -1
  38. package/dist/component/garmin/schemas/healthSnapshot.js.map +1 -1
  39. package/dist/component/garmin/schemas/hrvSummary.js +1 -1
  40. package/dist/component/garmin/schemas/hrvSummary.js.map +1 -1
  41. package/dist/component/garmin/schemas/manuallyUpdatedActivities.d.ts +2 -2
  42. package/dist/component/garmin/schemas/manuallyUpdatedActivities.d.ts.map +1 -1
  43. package/dist/component/garmin/schemas/manuallyUpdatedActivities.js +3 -1
  44. package/dist/component/garmin/schemas/manuallyUpdatedActivities.js.map +1 -1
  45. package/dist/component/garmin/schemas/menstrualCycleTracking.js +1 -1
  46. package/dist/component/garmin/schemas/menstrualCycleTracking.js.map +1 -1
  47. package/dist/component/garmin/schemas/moveIQ.js +1 -1
  48. package/dist/component/garmin/schemas/moveIQ.js.map +1 -1
  49. package/dist/component/garmin/schemas/pulseOx.js +1 -1
  50. package/dist/component/garmin/schemas/pulseOx.js.map +1 -1
  51. package/dist/component/garmin/schemas/respiration.js +1 -1
  52. package/dist/component/garmin/schemas/respiration.js.map +1 -1
  53. package/dist/component/garmin/schemas/skinTemperature.js +1 -1
  54. package/dist/component/garmin/schemas/skinTemperature.js.map +1 -1
  55. package/dist/component/garmin/schemas/sleeps.js +1 -1
  56. package/dist/component/garmin/schemas/sleeps.js.map +1 -1
  57. package/dist/component/garmin/schemas/stress.d.ts +6 -6
  58. package/dist/component/garmin/schemas/stress.d.ts.map +1 -1
  59. package/dist/component/garmin/schemas/stress.js +3 -1
  60. package/dist/component/garmin/schemas/stress.js.map +1 -1
  61. package/dist/component/garmin/schemas/userMetrics.js +1 -1
  62. package/dist/component/garmin/schemas/userMetrics.js.map +1 -1
  63. package/dist/component/garmin/transform/activity.d.ts +2 -2
  64. package/dist/component/garmin/transform/activity.d.ts.map +1 -1
  65. package/dist/component/garmin/transform/activity.js +1 -1
  66. package/dist/component/garmin/transform/activity.js.map +1 -1
  67. package/dist/component/garmin/transform/activityDetails.d.ts +2 -2
  68. package/dist/component/garmin/transform/activityDetails.d.ts.map +1 -1
  69. package/dist/component/garmin/transform/activityDetails.js.map +1 -1
  70. package/dist/component/garmin/transform/bloodPressure.d.ts +2 -2
  71. package/dist/component/garmin/transform/bloodPressure.d.ts.map +1 -1
  72. package/dist/component/garmin/transform/bodyCompositions.d.ts +2 -2
  73. package/dist/component/garmin/transform/bodyCompositions.d.ts.map +1 -1
  74. package/dist/component/garmin/transform/bodyCompositions.js.map +1 -1
  75. package/dist/component/garmin/transform/dailies.d.ts +2 -2
  76. package/dist/component/garmin/transform/dailies.d.ts.map +1 -1
  77. package/dist/component/garmin/transform/dailies.js +1 -1
  78. package/dist/component/garmin/transform/dailies.js.map +1 -1
  79. package/dist/component/garmin/transform/epochs.d.ts +2 -2
  80. package/dist/component/garmin/transform/epochs.d.ts.map +1 -1
  81. package/dist/component/garmin/transform/healthSnapshot.d.ts +2 -2
  82. package/dist/component/garmin/transform/healthSnapshot.d.ts.map +1 -1
  83. package/dist/component/garmin/transform/healthSnapshot.js.map +1 -1
  84. package/dist/component/garmin/transform/hrvSummary.d.ts +2 -2
  85. package/dist/component/garmin/transform/hrvSummary.d.ts.map +1 -1
  86. package/dist/component/garmin/transform/hrvSummary.js +1 -1
  87. package/dist/component/garmin/transform/hrvSummary.js.map +1 -1
  88. package/dist/component/garmin/transform/manuallyUpdatedActivities.d.ts +2 -2
  89. package/dist/component/garmin/transform/manuallyUpdatedActivities.d.ts.map +1 -1
  90. package/dist/{garmin/maps/activity-type.d.ts → component/garmin/transform/maps/activityType.d.ts} +1 -1
  91. package/dist/component/garmin/transform/maps/activityType.d.ts.map +1 -0
  92. package/dist/{garmin/maps/activity-type.js → component/garmin/transform/maps/activityType.js} +1 -1
  93. package/dist/component/garmin/transform/maps/activityType.js.map +1 -0
  94. package/dist/{garmin/maps/sleep-level.d.ts → component/garmin/transform/maps/sleepLevel.d.ts} +1 -1
  95. package/dist/component/garmin/transform/maps/sleepLevel.d.ts.map +1 -0
  96. package/dist/{garmin/maps/sleep-level.js → component/garmin/transform/maps/sleepLevel.js} +1 -1
  97. package/dist/component/garmin/transform/maps/sleepLevel.js.map +1 -0
  98. package/dist/component/garmin/transform/menstrualCycleTracking.d.ts +2 -2
  99. package/dist/component/garmin/transform/menstrualCycleTracking.d.ts.map +1 -1
  100. package/dist/component/garmin/transform/menstrualCycleTracking.js.map +1 -1
  101. package/dist/component/garmin/transform/moveIQ.d.ts +2 -5
  102. package/dist/component/garmin/transform/moveIQ.d.ts.map +1 -1
  103. package/dist/component/garmin/transform/moveIQ.js +1 -1
  104. package/dist/component/garmin/transform/moveIQ.js.map +1 -1
  105. package/dist/{garmin → component/garmin/transform}/plannedWorkout.d.ts +3 -4
  106. package/dist/component/garmin/transform/plannedWorkout.d.ts.map +1 -0
  107. package/dist/{garmin → component/garmin/transform}/plannedWorkout.js +61 -70
  108. package/dist/component/garmin/transform/plannedWorkout.js.map +1 -0
  109. package/dist/component/garmin/transform/pulseOx.d.ts +2 -2
  110. package/dist/component/garmin/transform/pulseOx.d.ts.map +1 -1
  111. package/dist/component/garmin/transform/pulseOx.js +1 -1
  112. package/dist/component/garmin/transform/pulseOx.js.map +1 -1
  113. package/dist/component/garmin/transform/respiration.d.ts +2 -2
  114. package/dist/component/garmin/transform/respiration.d.ts.map +1 -1
  115. package/dist/component/garmin/transform/respiration.js +1 -1
  116. package/dist/component/garmin/transform/respiration.js.map +1 -1
  117. package/dist/component/garmin/transform/skinTemperature.d.ts +2 -2
  118. package/dist/component/garmin/transform/skinTemperature.d.ts.map +1 -1
  119. package/dist/component/garmin/transform/skinTemperature.js.map +1 -1
  120. package/dist/component/garmin/transform/sleeps.d.ts +2 -2
  121. package/dist/component/garmin/transform/sleeps.d.ts.map +1 -1
  122. package/dist/component/garmin/transform/sleeps.js +3 -3
  123. package/dist/component/garmin/transform/sleeps.js.map +1 -1
  124. package/dist/component/garmin/transform/stress.d.ts +2 -2
  125. package/dist/component/garmin/transform/stress.d.ts.map +1 -1
  126. package/dist/component/garmin/transform/stress.js +2 -2
  127. package/dist/component/garmin/transform/stress.js.map +1 -1
  128. package/dist/component/garmin/transform/userMetrics.d.ts +2 -2
  129. package/dist/component/garmin/transform/userMetrics.d.ts.map +1 -1
  130. package/dist/component/garmin/transform/userMetrics.js.map +1 -1
  131. package/dist/component/garmin/types/trainingApiWorkouts/client/client.gen.d.ts +3 -0
  132. package/dist/component/garmin/types/trainingApiWorkouts/client/client.gen.d.ts.map +1 -0
  133. package/dist/component/garmin/types/trainingApiWorkouts/client/client.gen.js +236 -0
  134. package/dist/component/garmin/types/trainingApiWorkouts/client/client.gen.js.map +1 -0
  135. package/dist/component/garmin/types/trainingApiWorkouts/client/index.d.ts +9 -0
  136. package/dist/component/garmin/types/trainingApiWorkouts/client/index.d.ts.map +1 -0
  137. package/dist/component/garmin/types/trainingApiWorkouts/client/index.js +7 -0
  138. package/dist/component/garmin/types/trainingApiWorkouts/client/index.js.map +1 -0
  139. package/dist/component/garmin/types/trainingApiWorkouts/client/types.gen.d.ts +118 -0
  140. package/dist/component/garmin/types/trainingApiWorkouts/client/types.gen.d.ts.map +1 -0
  141. package/dist/component/garmin/types/trainingApiWorkouts/client/types.gen.js +3 -0
  142. package/dist/component/garmin/types/trainingApiWorkouts/client/types.gen.js.map +1 -0
  143. package/dist/component/garmin/types/trainingApiWorkouts/client/utils.gen.d.ts +34 -0
  144. package/dist/component/garmin/types/trainingApiWorkouts/client/utils.gen.d.ts.map +1 -0
  145. package/dist/component/garmin/types/trainingApiWorkouts/client/utils.gen.js +229 -0
  146. package/dist/component/garmin/types/trainingApiWorkouts/client/utils.gen.js.map +1 -0
  147. package/dist/component/garmin/types/trainingApiWorkouts/client.gen.d.ts +13 -0
  148. package/dist/component/garmin/types/trainingApiWorkouts/client.gen.d.ts.map +1 -0
  149. package/dist/component/garmin/types/trainingApiWorkouts/client.gen.js +4 -0
  150. package/dist/component/garmin/types/trainingApiWorkouts/client.gen.js.map +1 -0
  151. package/dist/component/garmin/types/trainingApiWorkouts/core/auth.gen.d.ts +19 -0
  152. package/dist/component/garmin/types/trainingApiWorkouts/core/auth.gen.d.ts.map +1 -0
  153. package/dist/component/garmin/types/trainingApiWorkouts/core/auth.gen.js +15 -0
  154. package/dist/component/garmin/types/trainingApiWorkouts/core/auth.gen.js.map +1 -0
  155. package/dist/component/garmin/types/trainingApiWorkouts/core/bodySerializer.gen.d.ts +26 -0
  156. package/dist/component/garmin/types/trainingApiWorkouts/core/bodySerializer.gen.d.ts.map +1 -0
  157. package/dist/component/garmin/types/trainingApiWorkouts/core/bodySerializer.gen.js +58 -0
  158. package/dist/component/garmin/types/trainingApiWorkouts/core/bodySerializer.gen.js.map +1 -0
  159. package/dist/component/garmin/types/trainingApiWorkouts/core/params.gen.d.ts +44 -0
  160. package/dist/component/garmin/types/trainingApiWorkouts/core/params.gen.d.ts.map +1 -0
  161. package/dist/component/garmin/types/trainingApiWorkouts/core/params.gen.js +101 -0
  162. package/dist/component/garmin/types/trainingApiWorkouts/core/params.gen.js.map +1 -0
  163. package/dist/component/garmin/types/trainingApiWorkouts/core/pathSerializer.gen.d.ts +34 -0
  164. package/dist/component/garmin/types/trainingApiWorkouts/core/pathSerializer.gen.d.ts.map +1 -0
  165. package/dist/component/garmin/types/trainingApiWorkouts/core/pathSerializer.gen.js +107 -0
  166. package/dist/component/garmin/types/trainingApiWorkouts/core/pathSerializer.gen.js.map +1 -0
  167. package/dist/component/garmin/types/trainingApiWorkouts/core/queryKeySerializer.gen.d.ts +19 -0
  168. package/dist/component/garmin/types/trainingApiWorkouts/core/queryKeySerializer.gen.d.ts.map +1 -0
  169. package/dist/component/garmin/types/trainingApiWorkouts/core/queryKeySerializer.gen.js +93 -0
  170. package/dist/component/garmin/types/trainingApiWorkouts/core/queryKeySerializer.gen.js.map +1 -0
  171. package/dist/component/garmin/types/trainingApiWorkouts/core/serverSentEvents.gen.d.ts +72 -0
  172. package/dist/component/garmin/types/trainingApiWorkouts/core/serverSentEvents.gen.d.ts.map +1 -0
  173. package/dist/component/garmin/types/trainingApiWorkouts/core/serverSentEvents.gen.js +134 -0
  174. package/dist/component/garmin/types/trainingApiWorkouts/core/serverSentEvents.gen.js.map +1 -0
  175. package/dist/component/garmin/types/trainingApiWorkouts/core/types.gen.d.ts +79 -0
  176. package/dist/component/garmin/types/trainingApiWorkouts/core/types.gen.d.ts.map +1 -0
  177. package/dist/component/garmin/types/trainingApiWorkouts/core/types.gen.js +3 -0
  178. package/dist/component/garmin/types/trainingApiWorkouts/core/types.gen.js.map +1 -0
  179. package/dist/component/garmin/types/trainingApiWorkouts/core/utils.gen.d.ts +20 -0
  180. package/dist/component/garmin/types/trainingApiWorkouts/core/utils.gen.d.ts.map +1 -0
  181. package/dist/component/garmin/types/trainingApiWorkouts/core/utils.gen.js +88 -0
  182. package/dist/component/garmin/types/trainingApiWorkouts/core/utils.gen.js.map +1 -0
  183. package/dist/component/garmin/types/trainingApiWorkouts/index.d.ts +3 -0
  184. package/dist/component/garmin/types/trainingApiWorkouts/index.d.ts.map +1 -0
  185. package/dist/component/garmin/types/trainingApiWorkouts/index.js +3 -0
  186. package/dist/component/garmin/types/trainingApiWorkouts/index.js.map +1 -0
  187. package/dist/component/garmin/types/trainingApiWorkouts/sdk.gen.d.ts +68 -0
  188. package/dist/component/garmin/types/trainingApiWorkouts/sdk.gen.d.ts.map +1 -0
  189. package/dist/component/garmin/types/trainingApiWorkouts/sdk.gen.js +97 -0
  190. package/dist/component/garmin/types/trainingApiWorkouts/sdk.gen.js.map +1 -0
  191. package/dist/component/garmin/types/trainingApiWorkouts/types.gen.d.ts +330 -0
  192. package/dist/component/garmin/types/trainingApiWorkouts/types.gen.d.ts.map +1 -0
  193. package/dist/component/garmin/types/trainingApiWorkouts/types.gen.js +3 -0
  194. package/dist/component/garmin/types/trainingApiWorkouts/types.gen.js.map +1 -0
  195. package/dist/component/garmin/types/trainingApiWorkouts/zod.gen.d.ts +2463 -0
  196. package/dist/component/garmin/types/trainingApiWorkouts/zod.gen.d.ts.map +1 -0
  197. package/dist/component/garmin/types/trainingApiWorkouts/zod.gen.js +388 -0
  198. package/dist/component/garmin/types/trainingApiWorkouts/zod.gen.js.map +1 -0
  199. package/dist/component/garmin/types/wellnessApi/client/client.gen.d.ts +3 -0
  200. package/dist/component/garmin/types/wellnessApi/client/client.gen.d.ts.map +1 -0
  201. package/dist/component/garmin/types/wellnessApi/client/client.gen.js +236 -0
  202. package/dist/component/garmin/types/wellnessApi/client/client.gen.js.map +1 -0
  203. package/dist/component/garmin/types/wellnessApi/client/index.d.ts +9 -0
  204. package/dist/component/garmin/types/wellnessApi/client/index.d.ts.map +1 -0
  205. package/dist/component/garmin/types/wellnessApi/client/index.js +7 -0
  206. package/dist/component/garmin/types/wellnessApi/client/index.js.map +1 -0
  207. package/dist/component/garmin/types/wellnessApi/client/types.gen.d.ts +118 -0
  208. package/dist/component/garmin/types/wellnessApi/client/types.gen.d.ts.map +1 -0
  209. package/dist/component/garmin/types/wellnessApi/client/types.gen.js +3 -0
  210. package/dist/component/garmin/types/wellnessApi/client/types.gen.js.map +1 -0
  211. package/dist/component/garmin/types/wellnessApi/client/utils.gen.d.ts +34 -0
  212. package/dist/component/garmin/types/wellnessApi/client/utils.gen.d.ts.map +1 -0
  213. package/dist/component/garmin/types/wellnessApi/client/utils.gen.js +229 -0
  214. package/dist/component/garmin/types/wellnessApi/client/utils.gen.js.map +1 -0
  215. package/dist/component/garmin/types/wellnessApi/client.gen.d.ts +13 -0
  216. package/dist/component/garmin/types/wellnessApi/client.gen.d.ts.map +1 -0
  217. package/dist/component/garmin/types/wellnessApi/client.gen.js +4 -0
  218. package/dist/component/garmin/types/wellnessApi/client.gen.js.map +1 -0
  219. package/dist/component/garmin/types/wellnessApi/core/auth.gen.d.ts +19 -0
  220. package/dist/component/garmin/types/wellnessApi/core/auth.gen.d.ts.map +1 -0
  221. package/dist/component/garmin/types/wellnessApi/core/auth.gen.js +15 -0
  222. package/dist/component/garmin/types/wellnessApi/core/auth.gen.js.map +1 -0
  223. package/dist/component/garmin/types/wellnessApi/core/bodySerializer.gen.d.ts +26 -0
  224. package/dist/component/garmin/types/wellnessApi/core/bodySerializer.gen.d.ts.map +1 -0
  225. package/dist/component/garmin/types/wellnessApi/core/bodySerializer.gen.js +58 -0
  226. package/dist/component/garmin/types/wellnessApi/core/bodySerializer.gen.js.map +1 -0
  227. package/dist/component/garmin/types/wellnessApi/core/params.gen.d.ts +44 -0
  228. package/dist/component/garmin/types/wellnessApi/core/params.gen.d.ts.map +1 -0
  229. package/dist/component/garmin/types/wellnessApi/core/params.gen.js +101 -0
  230. package/dist/component/garmin/types/wellnessApi/core/params.gen.js.map +1 -0
  231. package/dist/component/garmin/types/wellnessApi/core/pathSerializer.gen.d.ts +34 -0
  232. package/dist/component/garmin/types/wellnessApi/core/pathSerializer.gen.d.ts.map +1 -0
  233. package/dist/component/garmin/types/wellnessApi/core/pathSerializer.gen.js +107 -0
  234. package/dist/component/garmin/types/wellnessApi/core/pathSerializer.gen.js.map +1 -0
  235. package/dist/component/garmin/types/wellnessApi/core/queryKeySerializer.gen.d.ts +19 -0
  236. package/dist/component/garmin/types/wellnessApi/core/queryKeySerializer.gen.d.ts.map +1 -0
  237. package/dist/component/garmin/types/wellnessApi/core/queryKeySerializer.gen.js +93 -0
  238. package/dist/component/garmin/types/wellnessApi/core/queryKeySerializer.gen.js.map +1 -0
  239. package/dist/component/garmin/types/wellnessApi/core/serverSentEvents.gen.d.ts +72 -0
  240. package/dist/component/garmin/types/wellnessApi/core/serverSentEvents.gen.d.ts.map +1 -0
  241. package/dist/component/garmin/types/wellnessApi/core/serverSentEvents.gen.js +134 -0
  242. package/dist/component/garmin/types/wellnessApi/core/serverSentEvents.gen.js.map +1 -0
  243. package/dist/component/garmin/types/wellnessApi/core/types.gen.d.ts +79 -0
  244. package/dist/component/garmin/types/wellnessApi/core/types.gen.d.ts.map +1 -0
  245. package/dist/component/garmin/types/wellnessApi/core/types.gen.js +3 -0
  246. package/dist/component/garmin/types/wellnessApi/core/types.gen.js.map +1 -0
  247. package/dist/component/garmin/types/wellnessApi/core/utils.gen.d.ts +20 -0
  248. package/dist/component/garmin/types/wellnessApi/core/utils.gen.d.ts.map +1 -0
  249. package/dist/component/garmin/types/wellnessApi/core/utils.gen.js +88 -0
  250. package/dist/component/garmin/types/wellnessApi/core/utils.gen.js.map +1 -0
  251. package/dist/component/garmin/types/wellnessApi/index.d.ts +3 -0
  252. package/dist/component/garmin/types/wellnessApi/index.d.ts.map +1 -0
  253. package/dist/component/garmin/types/wellnessApi/index.js +3 -0
  254. package/dist/component/garmin/types/wellnessApi/index.js.map +1 -0
  255. package/dist/component/garmin/types/wellnessApi/sdk.gen.d.ts +166 -0
  256. package/dist/component/garmin/types/wellnessApi/sdk.gen.d.ts.map +1 -0
  257. package/dist/component/garmin/types/wellnessApi/sdk.gen.js +153 -0
  258. package/dist/component/garmin/types/wellnessApi/sdk.gen.js.map +1 -0
  259. package/dist/component/garmin/types/wellnessApi/types.gen.d.ts +2733 -0
  260. package/dist/component/garmin/types/wellnessApi/types.gen.d.ts.map +1 -0
  261. package/dist/component/garmin/types/wellnessApi/types.gen.js +3 -0
  262. package/dist/component/garmin/types/wellnessApi/types.gen.js.map +1 -0
  263. package/dist/component/garmin/types/wellnessApi/zod.gen.d.ts.map +1 -0
  264. package/dist/component/garmin/types/wellnessApi/zod.gen.js.map +1 -0
  265. package/dist/component/garmin/utils.d.ts +16 -0
  266. package/dist/component/garmin/utils.d.ts.map +1 -0
  267. package/dist/component/garmin/utils.js +17 -0
  268. package/dist/component/garmin/utils.js.map +1 -0
  269. package/dist/component/garmin/webhooks.d.ts +8 -21
  270. package/dist/component/garmin/webhooks.d.ts.map +1 -1
  271. package/dist/component/garmin/webhooks.js +71 -306
  272. package/dist/component/garmin/webhooks.js.map +1 -1
  273. package/dist/component/validators/plannedWorkout.d.ts +6 -0
  274. package/dist/component/validators/plannedWorkout.d.ts.map +1 -1
  275. package/dist/component/validators/plannedWorkout.js.map +1 -1
  276. package/package.json +1 -1
  277. package/src/component/_generated/api.ts +2 -0
  278. package/dist/component/garmin/types/garmin.d.ts +0 -21
  279. package/dist/component/garmin/types/garmin.d.ts.map +0 -1
  280. package/dist/component/garmin/types/garmin.js +0 -6
  281. package/dist/component/garmin/types/garmin.js.map +0 -1
  282. package/dist/component/garmin/types/zod/zod.gen.d.ts.map +0 -1
  283. package/dist/component/garmin/types/zod/zod.gen.js.map +0 -1
  284. package/dist/garmin/auth.d.ts.map +0 -1
  285. package/dist/garmin/auth.js.map +0 -1
  286. package/dist/garmin/bloodPressure.d.ts +0 -28
  287. package/dist/garmin/bloodPressure.d.ts.map +0 -1
  288. package/dist/garmin/bloodPressure.js +0 -34
  289. package/dist/garmin/bloodPressure.js.map +0 -1
  290. package/dist/garmin/body.d.ts +0 -26
  291. package/dist/garmin/body.d.ts.map +0 -1
  292. package/dist/garmin/body.js +0 -44
  293. package/dist/garmin/body.js.map +0 -1
  294. package/dist/garmin/client.d.ts +0 -246
  295. package/dist/garmin/client.d.ts.map +0 -1
  296. package/dist/garmin/client.js +0 -566
  297. package/dist/garmin/client.js.map +0 -1
  298. package/dist/garmin/daily.d.ts +0 -74
  299. package/dist/garmin/daily.d.ts.map +0 -1
  300. package/dist/garmin/daily.js +0 -143
  301. package/dist/garmin/daily.js.map +0 -1
  302. package/dist/garmin/hrv.d.ts +0 -30
  303. package/dist/garmin/hrv.d.ts.map +0 -1
  304. package/dist/garmin/hrv.js +0 -45
  305. package/dist/garmin/hrv.js.map +0 -1
  306. package/dist/garmin/index.d.ts +0 -32
  307. package/dist/garmin/index.d.ts.map +0 -1
  308. package/dist/garmin/index.js +0 -27
  309. package/dist/garmin/index.js.map +0 -1
  310. package/dist/garmin/maps/activity-type.d.ts.map +0 -1
  311. package/dist/garmin/maps/activity-type.js.map +0 -1
  312. package/dist/garmin/maps/sleep-level.d.ts.map +0 -1
  313. package/dist/garmin/maps/sleep-level.js.map +0 -1
  314. package/dist/garmin/menstruation.d.ts +0 -25
  315. package/dist/garmin/menstruation.d.ts.map +0 -1
  316. package/dist/garmin/menstruation.js +0 -38
  317. package/dist/garmin/menstruation.js.map +0 -1
  318. package/dist/garmin/plannedWorkout.d.ts.map +0 -1
  319. package/dist/garmin/plannedWorkout.js.map +0 -1
  320. package/dist/garmin/pulseOx.d.ts +0 -24
  321. package/dist/garmin/pulseOx.d.ts.map +0 -1
  322. package/dist/garmin/pulseOx.js +0 -33
  323. package/dist/garmin/pulseOx.js.map +0 -1
  324. package/dist/garmin/respiration.d.ts +0 -29
  325. package/dist/garmin/respiration.d.ts.map +0 -1
  326. package/dist/garmin/respiration.js +0 -42
  327. package/dist/garmin/respiration.js.map +0 -1
  328. package/dist/garmin/skinTemp.d.ts +0 -27
  329. package/dist/garmin/skinTemp.d.ts.map +0 -1
  330. package/dist/garmin/skinTemp.js +0 -35
  331. package/dist/garmin/skinTemp.js.map +0 -1
  332. package/dist/garmin/sleep.d.ts +0 -62
  333. package/dist/garmin/sleep.d.ts.map +0 -1
  334. package/dist/garmin/sleep.js +0 -131
  335. package/dist/garmin/sleep.js.map +0 -1
  336. package/dist/garmin/stressDetails.d.ts +0 -30
  337. package/dist/garmin/stressDetails.d.ts.map +0 -1
  338. package/dist/garmin/stressDetails.js +0 -49
  339. package/dist/garmin/stressDetails.js.map +0 -1
  340. package/dist/garmin/sync.d.ts +0 -53
  341. package/dist/garmin/sync.d.ts.map +0 -1
  342. package/dist/garmin/sync.js +0 -458
  343. package/dist/garmin/sync.js.map +0 -1
  344. package/dist/garmin/types.d.ts +0 -175
  345. package/dist/garmin/types.d.ts.map +0 -1
  346. package/dist/garmin/types.js +0 -10
  347. package/dist/garmin/types.js.map +0 -1
  348. package/dist/garmin/userMetrics.d.ts +0 -23
  349. package/dist/garmin/userMetrics.d.ts.map +0 -1
  350. package/dist/garmin/userMetrics.js +0 -41
  351. package/dist/garmin/userMetrics.js.map +0 -1
  352. /package/dist/{garmin → component/garmin}/auth.js +0 -0
  353. /package/dist/component/garmin/types/{zod → wellnessApi}/zod.gen.d.ts +0 -0
  354. /package/dist/component/garmin/types/{zod → wellnessApi}/zod.gen.js +0 -0
@@ -4,40 +4,27 @@
4
4
  // credentials automatically from env vars or constructor config.
5
5
  import { v } from "convex/values";
6
6
  import { action } from "../_generated/server";
7
- import { generateCodeVerifier, generateCodeChallenge, generateState, buildAuthUrl, exchangeCode, refreshToken, } from "../../garmin/auth.js";
8
- import { GarminClient } from "../../garmin/client.js";
7
+ import { generateCodeVerifier, generateCodeChallenge, generateState, buildAuthUrl, exchangeCode, refreshToken, } from "./auth.js";
8
+ import { createWellnessClient, createTrainingClient, } from "./client.js";
9
+ import { timeRangeQuery } from "./utils.js";
10
+ import { createWorkoutV2 as sdkCreateWorkoutV2, createWorkoutSchedule as sdkCreateWorkoutSchedule, } from "./types/trainingApiWorkouts/sdk.gen";
11
+ import { userId as sdkUserId, dereg as sdkDereg, getActivities, getDailies, getSleeps, getBodyComps, getMct, getBloodPressures, getSkinTemp, getUserMetrics, getHrv, getStressDetails, getPulseox, getRespiration, } from "./types/wellnessApi/sdk.gen";
9
12
  import { transformActivity } from "./transform/activity.js";
10
- import { transformDaily } from "../../garmin/daily.js";
11
- import { transformSleep } from "../../garmin/sleep.js";
12
- import { transformBody } from "../../garmin/body.js";
13
- import { transformMenstruation } from "../../garmin/menstruation.js";
14
- import { transformBloodPressure } from "../../garmin/bloodPressure.js";
15
- import { transformSkinTemp } from "../../garmin/skinTemp.js";
16
- import { transformUserMetrics } from "../../garmin/userMetrics.js";
17
- import { transformHRV } from "../../garmin/hrv.js";
18
- import { transformStressDetails } from "../../garmin/stressDetails.js";
19
- import { transformPulseOx } from "../../garmin/pulseOx.js";
20
- import { transformRespiration } from "../../garmin/respiration.js";
21
- import { transformPlannedWorkoutToGarmin } from "../../garmin/plannedWorkout.js";
13
+ import { transformDailies } from "./transform/dailies.js";
14
+ import { transformSleeps } from "./transform/sleeps.js";
15
+ import { transformBodyComposition } from "./transform/bodyCompositions.js";
16
+ import { transformMenstrualCycleTracking } from "./transform/menstrualCycleTracking.js";
17
+ import { transformBloodPressure } from "./transform/bloodPressure.js";
18
+ import { transformSkinTemperature } from "./transform/skinTemperature.js";
19
+ import { transformUserMetrics } from "./transform/userMetrics.js";
20
+ import { transformHRVSummary } from "./transform/hrvSummary.js";
21
+ import { transformStress } from "./transform/stress.js";
22
+ import { transformPulseOx } from "./transform/pulseOx.js";
23
+ import { transformRespiration } from "./transform/respiration.js";
24
+ import { transformPlannedWorkoutToGarmin } from "./transform/plannedWorkout.js";
22
25
  import { api, internal } from "../_generated/api";
23
- import { zClientActivity } from "./types/zod/zod.gen";
24
26
  // Default sync window: last 30 days
25
27
  const DEFAULT_SYNC_DAYS = 30;
26
- // Shared synced counter validator for all sync actions
27
- const syncedValidator = v.object({
28
- activities: v.number(),
29
- dailies: v.number(),
30
- sleep: v.number(),
31
- body: v.number(),
32
- menstruation: v.number(),
33
- bloodPressures: v.number(),
34
- skinTemp: v.number(),
35
- userMetrics: v.number(),
36
- hrv: v.number(),
37
- stressDetails: v.number(),
38
- pulseOx: v.number(),
39
- respiration: v.number(),
40
- });
41
28
  // Refresh buffer: refresh tokens 10 minutes before expiry
42
29
  const REFRESH_BUFFER_SECONDS = 600;
43
30
  // ─── Public Actions ──────────────────────────────────────────────────────────
@@ -113,11 +100,10 @@ export const connectGarmin = action({
113
100
  refreshToken: tokenResult.refresh_token,
114
101
  expiresAt,
115
102
  });
116
- const client = new GarminClient({
117
- accessToken: tokenResult.access_token,
118
- });
119
103
  // Best-effort: resolve Garmin user ID for webhook mapping
120
- const garminUserId = await client.getUserId();
104
+ const wellnessClient = createWellnessClient(tokenResult.access_token);
105
+ const { data: userIdData } = await sdkUserId({ client: wellnessClient });
106
+ const garminUserId = userIdData?.userId ?? null;
121
107
  if (garminUserId) {
122
108
  const _updated = await ctx.runMutation(api.public.updateConnection, {
123
109
  connectionId,
@@ -130,10 +116,12 @@ export const connectGarmin = action({
130
116
  uploadStartTimeInSeconds: thirtyDaysAgo,
131
117
  uploadEndTimeInSeconds: now,
132
118
  };
133
- const result = await syncAllTypes(ctx, client, {
119
+ const result = await ctx.runAction(api.garmin.public.syncAllTypes, {
120
+ accessToken: tokenResult.access_token,
134
121
  connectionId,
135
122
  userId: args.userId,
136
- timeRange,
123
+ uploadStartTimeInSeconds: timeRange.uploadStartTimeInSeconds,
124
+ uploadEndTimeInSeconds: timeRange.uploadEndTimeInSeconds,
137
125
  });
138
126
  const _updated = await ctx.runMutation(api.public.updateConnection, {
139
127
  connectionId,
@@ -192,11 +180,10 @@ export const completeGarminOAuth = action({
192
180
  refreshToken: tokenResult.refresh_token,
193
181
  expiresAt,
194
182
  });
195
- const client = new GarminClient({
196
- accessToken: tokenResult.access_token,
197
- });
198
183
  // Best-effort: resolve Garmin user ID for webhook mapping
199
- const garminUserId = await client.getUserId();
184
+ const wellnessClient = createWellnessClient(tokenResult.access_token);
185
+ const { data: userIdData } = await sdkUserId({ client: wellnessClient });
186
+ const garminUserId = userIdData?.userId ?? null;
200
187
  if (garminUserId) {
201
188
  const _updated = await ctx.runMutation(api.public.updateConnection, {
202
189
  connectionId,
@@ -209,10 +196,12 @@ export const completeGarminOAuth = action({
209
196
  uploadStartTimeInSeconds: thirtyDaysAgo,
210
197
  uploadEndTimeInSeconds: now,
211
198
  };
212
- const result = await syncAllTypes(ctx, client, {
199
+ const result = await ctx.runAction(api.garmin.public.syncAllTypes, {
200
+ accessToken: tokenResult.access_token,
213
201
  connectionId,
214
202
  userId: pending.userId,
215
- timeRange,
203
+ uploadStartTimeInSeconds: timeRange.uploadStartTimeInSeconds,
204
+ uploadEndTimeInSeconds: timeRange.uploadEndTimeInSeconds,
216
205
  });
217
206
  const _updated = await ctx.runMutation(api.public.updateConnection, {
218
207
  connectionId,
@@ -276,10 +265,11 @@ export const syncGarmin = action({
276
265
  expiresAt: newExpiresAt,
277
266
  });
278
267
  }
279
- const client = new GarminClient({ accessToken });
280
268
  // Lazy backfill: resolve Garmin user ID if missing (for webhook mapping)
281
269
  if (!connection.providerUserId) {
282
- const garminUserId = await client.getUserId();
270
+ const wellnessClient = createWellnessClient(accessToken);
271
+ const { data: userIdData } = await sdkUserId({ client: wellnessClient });
272
+ const garminUserId = userIdData?.userId ?? null;
283
273
  if (garminUserId) {
284
274
  const _updated = await ctx.runMutation(api.public.updateConnection, {
285
275
  connectionId,
@@ -292,10 +282,12 @@ export const syncGarmin = action({
292
282
  uploadStartTimeInSeconds: args.startTimeInSeconds ?? now - DEFAULT_SYNC_DAYS * 86400,
293
283
  uploadEndTimeInSeconds: args.endTimeInSeconds ?? now,
294
284
  };
295
- const result = await syncAllTypes(ctx, client, {
285
+ const result = await ctx.runAction(api.garmin.public.syncAllTypes, {
286
+ accessToken,
296
287
  connectionId,
297
288
  userId: args.userId,
298
- timeRange,
289
+ uploadStartTimeInSeconds: timeRange.uploadStartTimeInSeconds,
290
+ uploadEndTimeInSeconds: timeRange.uploadEndTimeInSeconds,
299
291
  });
300
292
  const _updated = await ctx.runMutation(api.public.updateConnection, {
301
293
  connectionId,
@@ -326,8 +318,8 @@ export const disconnectGarmin = action({
326
318
  });
327
319
  if (tokenDoc) {
328
320
  try {
329
- const client = new GarminClient({ accessToken: tokenDoc.accessToken });
330
- await client.deleteUserRegistration();
321
+ const wellnessClient = createWellnessClient(tokenDoc.accessToken);
322
+ await sdkDereg({ client: wellnessClient });
331
323
  }
332
324
  catch {
333
325
  // Deregistration is best-effort; proceed with local cleanup
@@ -407,16 +399,28 @@ export const pushPlannedWorkout = action({
407
399
  }
408
400
  const providerName = args.workoutProvider ?? "Soma";
409
401
  const garminWorkout = transformPlannedWorkoutToGarmin(plannedWorkout, providerName);
410
- const client = new GarminClient({ accessToken });
411
- const created = await client.createWorkout(garminWorkout);
402
+ const trainingClient = createTrainingClient(accessToken);
403
+ const { data: created, error: createError } = await sdkCreateWorkoutV2({
404
+ client: trainingClient,
405
+ body: garminWorkout,
406
+ });
407
+ if (createError || !created) {
408
+ throw new Error(`Garmin API error creating workout: ${createError ? JSON.stringify(createError) : "No data"}`);
409
+ }
412
410
  if (!created.workoutId) {
413
411
  throw new Error("Garmin API did not return a workoutId after creation.");
414
412
  }
415
413
  let garminScheduleId = null;
416
414
  const plannedDate = plannedWorkout.metadata?.planned_date;
417
415
  if (plannedDate) {
418
- const schedule = await client.createSchedule(created.workoutId, plannedDate);
419
- garminScheduleId = schedule.scheduleId ?? null;
416
+ const { data: scheduleId, error: scheduleError } = await sdkCreateWorkoutSchedule({
417
+ client: trainingClient,
418
+ body: { workoutId: Number(created.workoutId), date: plannedDate },
419
+ });
420
+ if (scheduleError) {
421
+ throw new Error(`Garmin API error creating schedule: ${JSON.stringify(scheduleError)}`);
422
+ }
423
+ garminScheduleId = scheduleId ?? null;
420
424
  }
421
425
  // Store the Garmin workout/schedule IDs back on the planned workout
422
426
  // so the host app can match completed activities to planned sessions.
@@ -436,352 +440,384 @@ export const pushPlannedWorkout = action({
436
440
  };
437
441
  },
438
442
  });
439
- async function syncAllTypes(ctx, client, config) {
440
- const { connectionId, userId, timeRange } = config;
441
- const synced = {
442
- activities: 0, dailies: 0, sleep: 0, body: 0, menstruation: 0,
443
- bloodPressures: 0, skinTemp: 0, userMetrics: 0,
444
- hrv: 0, stressDetails: 0, pulseOx: 0, respiration: 0,
445
- };
446
- const errors = [];
447
- // ── Activities ──────────────────────────────────────────────────────────
448
- try {
449
- const activities = await client.getActivities(timeRange);
450
- for (const activity of activities) {
451
- try {
452
- const data = transformActivity(zClientActivity.parse(activity));
453
- await ctx.runMutation(api.public.ingestActivity, {
454
- connectionId,
455
- userId,
456
- ...data,
457
- });
458
- synced.activities++;
459
- }
460
- catch (err) {
461
- errors.push({
462
- type: "activity",
463
- id: activity.summaryId ?? String(activity.activityId),
464
- error: err instanceof Error ? err.message : String(err),
465
- });
443
+ // ─── Sync Engine ────────────────────────────────────────────────────────────
444
+ /**
445
+ * Fetch and ingest all Garmin wellness data types for a time range.
446
+ *
447
+ * Called by the public actions (connectGarmin, completeGarminOAuth, syncGarmin)
448
+ * after obtaining a valid access token.
449
+ */
450
+ export const syncAllTypes = action({
451
+ args: {
452
+ accessToken: v.string(),
453
+ connectionId: v.id("connections"),
454
+ userId: v.string(),
455
+ uploadStartTimeInSeconds: v.number(),
456
+ uploadEndTimeInSeconds: v.number(),
457
+ },
458
+ handler: async (ctx, args) => {
459
+ const { accessToken, connectionId, userId } = args;
460
+ const timeRange = {
461
+ uploadStartTimeInSeconds: args.uploadStartTimeInSeconds,
462
+ uploadEndTimeInSeconds: args.uploadEndTimeInSeconds,
463
+ };
464
+ const wellnessClient = createWellnessClient(accessToken);
465
+ const query = timeRangeQuery(timeRange, accessToken);
466
+ const synced = {
467
+ activities: 0, dailies: 0, sleep: 0, body: 0, menstruation: 0,
468
+ bloodPressures: 0, skinTemp: 0, userMetrics: 0,
469
+ hrv: 0, stressDetails: 0, pulseOx: 0, respiration: 0,
470
+ };
471
+ const errors = [];
472
+ // ── Activities ──────────────────────────────────────────────────────────
473
+ try {
474
+ const { data: activities, error } = await getActivities({ client: wellnessClient, query });
475
+ if (error || !activities)
476
+ throw new Error(error ? JSON.stringify(error) : "No data");
477
+ for (const activity of activities) {
478
+ try {
479
+ const data = transformActivity(activity);
480
+ await ctx.runMutation(api.public.ingestActivity, {
481
+ connectionId,
482
+ userId,
483
+ ...data,
484
+ });
485
+ synced.activities++;
486
+ }
487
+ catch (err) {
488
+ errors.push({
489
+ type: "activity",
490
+ id: activity.summaryId ?? String(activity.activityId),
491
+ error: err instanceof Error ? err.message : String(err),
492
+ });
493
+ }
466
494
  }
467
495
  }
468
- }
469
- catch (err) {
470
- errors.push({
471
- type: "activity",
472
- id: "fetch",
473
- error: err instanceof Error ? err.message : String(err),
474
- });
475
- }
476
- // ── Dailies ─────────────────────────────────────────────────────────────
477
- try {
478
- const dailies = await client.getDailies(timeRange);
479
- for (const daily of dailies) {
480
- try {
481
- const data = transformDaily(daily);
482
- await ctx.runMutation(api.public.ingestDaily, {
483
- connectionId,
484
- userId,
485
- ...data,
486
- });
487
- synced.dailies++;
488
- }
489
- catch (err) {
490
- errors.push({
491
- type: "daily",
492
- id: daily.summaryId ?? daily.calendarDate ?? "unknown",
493
- error: err instanceof Error ? err.message : String(err),
494
- });
495
- }
496
+ catch (err) {
497
+ errors.push({
498
+ type: "activity",
499
+ id: "fetch",
500
+ error: err instanceof Error ? err.message : String(err),
501
+ });
496
502
  }
497
- }
498
- catch (err) {
499
- errors.push({
500
- type: "daily",
501
- id: "fetch",
502
- error: err instanceof Error ? err.message : String(err),
503
- });
504
- }
505
- // ── Sleep ───────────────────────────────────────────────────────────────
506
- try {
507
- const sleeps = await client.getSleeps(timeRange);
508
- for (const sleep of sleeps) {
509
- try {
510
- const data = transformSleep(sleep);
511
- await ctx.runMutation(api.public.ingestSleep, {
512
- connectionId,
513
- userId,
514
- ...data,
515
- });
516
- synced.sleep++;
517
- }
518
- catch (err) {
519
- errors.push({
520
- type: "sleep",
521
- id: sleep.summaryId ?? sleep.calendarDate ?? "unknown",
522
- error: err instanceof Error ? err.message : String(err),
523
- });
503
+ // ── Dailies ─────────────────────────────────────────────────────────────
504
+ try {
505
+ const { data: dailies, error } = await getDailies({ client: wellnessClient, query });
506
+ if (error || !dailies)
507
+ throw new Error(error ? JSON.stringify(error) : "No data");
508
+ for (const daily of dailies) {
509
+ try {
510
+ const data = transformDailies(daily);
511
+ if (!data)
512
+ continue;
513
+ await ctx.runMutation(api.public.ingestDaily, {
514
+ connectionId,
515
+ userId,
516
+ ...data,
517
+ });
518
+ synced.dailies++;
519
+ }
520
+ catch (err) {
521
+ errors.push({
522
+ type: "daily",
523
+ id: daily.summaryId ?? daily.calendarDate ?? "unknown",
524
+ error: err instanceof Error ? err.message : String(err),
525
+ });
526
+ }
524
527
  }
525
528
  }
526
- }
527
- catch (err) {
528
- errors.push({
529
- type: "sleep",
530
- id: "fetch",
531
- error: err instanceof Error ? err.message : String(err),
532
- });
533
- }
534
- // ── Body ────────────────────────────────────────────────────────────────
535
- try {
536
- const bodyComps = await client.getBodyCompositions(timeRange);
537
- for (const body of bodyComps) {
538
- try {
539
- const data = transformBody(body);
540
- await ctx.runMutation(api.public.ingestBody, {
541
- connectionId,
542
- userId,
543
- ...data,
544
- });
545
- synced.body++;
546
- }
547
- catch (err) {
548
- errors.push({
549
- type: "body",
550
- id: body.summaryId ?? String(body.measurementTimeInSeconds),
551
- error: err instanceof Error ? err.message : String(err),
552
- });
553
- }
529
+ catch (err) {
530
+ errors.push({
531
+ type: "daily",
532
+ id: "fetch",
533
+ error: err instanceof Error ? err.message : String(err),
534
+ });
554
535
  }
555
- }
556
- catch (err) {
557
- errors.push({
558
- type: "body",
559
- id: "fetch",
560
- error: err instanceof Error ? err.message : String(err),
561
- });
562
- }
563
- // ── Menstruation ────────────────────────────────────────────────────────
564
- try {
565
- const records = await client.getMenstrualCycleData(timeRange);
566
- for (const record of records) {
567
- try {
568
- const data = transformMenstruation(record);
569
- await ctx.runMutation(api.public.ingestMenstruation, {
570
- connectionId,
571
- userId,
572
- ...data,
573
- });
574
- synced.menstruation++;
575
- }
576
- catch (err) {
577
- errors.push({
578
- type: "menstruation",
579
- id: record.summaryId ?? record.periodStartDate ?? "unknown",
580
- error: err instanceof Error ? err.message : String(err),
581
- });
536
+ // ── Sleep ───────────────────────────────────────────────────────────────
537
+ try {
538
+ const { data: sleeps, error } = await getSleeps({ client: wellnessClient, query });
539
+ if (error || !sleeps)
540
+ throw new Error(error ? JSON.stringify(error) : "No data");
541
+ for (const sleep of sleeps) {
542
+ try {
543
+ const data = transformSleeps(sleep);
544
+ await ctx.runMutation(api.public.ingestSleep, {
545
+ connectionId,
546
+ userId,
547
+ ...data,
548
+ });
549
+ synced.sleep++;
550
+ }
551
+ catch (err) {
552
+ errors.push({
553
+ type: "sleep",
554
+ id: sleep.summaryId ?? sleep.calendarDate ?? "unknown",
555
+ error: err instanceof Error ? err.message : String(err),
556
+ });
557
+ }
582
558
  }
583
559
  }
584
- }
585
- catch (err) {
586
- errors.push({
587
- type: "menstruation",
588
- id: "fetch",
589
- error: err instanceof Error ? err.message : String(err),
590
- });
591
- }
592
- // ── Blood Pressures (→ body) ───────────────────────────────────────────
593
- try {
594
- const bpRecords = await client.getBloodPressures(timeRange);
595
- for (const bp of bpRecords) {
596
- try {
597
- const data = transformBloodPressure(bp);
598
- await ctx.runMutation(api.public.ingestBody, {
599
- connectionId, userId, ...data,
600
- });
601
- synced.bloodPressures++;
602
- }
603
- catch (err) {
604
- errors.push({
605
- type: "bloodPressure",
606
- id: bp.summaryId ?? String(bp.measurementTimeInSeconds),
607
- error: err instanceof Error ? err.message : String(err),
608
- });
609
- }
560
+ catch (err) {
561
+ errors.push({
562
+ type: "sleep",
563
+ id: "fetch",
564
+ error: err instanceof Error ? err.message : String(err),
565
+ });
610
566
  }
611
- }
612
- catch (err) {
613
- errors.push({ type: "bloodPressure", id: "fetch", error: err instanceof Error ? err.message : String(err) });
614
- }
615
- // ── Skin Temperature ( body) ──────────────────────────────────────────
616
- try {
617
- const skinRecords = await client.getSkinTemperature(timeRange);
618
- for (const skin of skinRecords) {
619
- try {
620
- const data = transformSkinTemp(skin);
621
- await ctx.runMutation(api.public.ingestBody, {
622
- connectionId, userId, ...data,
623
- });
624
- synced.skinTemp++;
625
- }
626
- catch (err) {
627
- errors.push({
628
- type: "skinTemp",
629
- id: skin.summaryId ?? skin.calendarDate ?? "unknown",
630
- error: err instanceof Error ? err.message : String(err),
631
- });
567
+ // ── Body ────────────────────────────────────────────────────────────────
568
+ try {
569
+ const { data: bodyComps, error } = await getBodyComps({ client: wellnessClient, query });
570
+ if (error || !bodyComps)
571
+ throw new Error(error ? JSON.stringify(error) : "No data");
572
+ for (const body of bodyComps) {
573
+ try {
574
+ const data = transformBodyComposition(body);
575
+ if (!data)
576
+ continue;
577
+ await ctx.runMutation(api.public.ingestBody, {
578
+ connectionId,
579
+ userId,
580
+ ...data,
581
+ });
582
+ synced.body++;
583
+ }
584
+ catch (err) {
585
+ errors.push({
586
+ type: "body",
587
+ id: body.summaryId ?? String(body.measurementTimeInSeconds),
588
+ error: err instanceof Error ? err.message : String(err),
589
+ });
590
+ }
632
591
  }
633
592
  }
634
- }
635
- catch (err) {
636
- errors.push({ type: "skinTemp", id: "fetch", error: err instanceof Error ? err.message : String(err) });
637
- }
638
- // ── User Metrics (→ body) ──────────────────────────────────────────────
639
- try {
640
- const metricsRecords = await client.getUserMetrics(timeRange);
641
- for (const metrics of metricsRecords) {
642
- try {
643
- const data = transformUserMetrics(metrics);
644
- await ctx.runMutation(api.public.ingestBody, {
645
- connectionId, userId, ...data,
646
- });
647
- synced.userMetrics++;
648
- }
649
- catch (err) {
650
- errors.push({
651
- type: "userMetrics",
652
- id: metrics.summaryId ?? metrics.calendarDate ?? "unknown",
653
- error: err instanceof Error ? err.message : String(err),
654
- });
655
- }
593
+ catch (err) {
594
+ errors.push({
595
+ type: "body",
596
+ id: "fetch",
597
+ error: err instanceof Error ? err.message : String(err),
598
+ });
656
599
  }
657
- }
658
- catch (err) {
659
- errors.push({ type: "userMetrics", id: "fetch", error: err instanceof Error ? err.message : String(err) });
660
- }
661
- // ── HRV (enriches daily) ──────────────────────────────────────────────
662
- try {
663
- const hrvRecords = await client.getHRV(timeRange);
664
- for (const hrv of hrvRecords) {
665
- try {
666
- const data = transformHRV(hrv);
667
- if (data.heart_rate_data) {
668
- await ctx.runMutation(api.public.ingestDaily, {
669
- connectionId, userId,
670
- metadata: {
671
- start_time: new Date((hrv.startTimeInSeconds ?? 0) * 1000).toISOString(),
672
- end_time: new Date(((hrv.startTimeInSeconds ?? 0) + (hrv.durationInSeconds ?? 86400)) * 1000).toISOString(),
673
- upload_type: 1,
674
- },
675
- heart_rate_data: data.heart_rate_data,
600
+ // ── Menstruation ────────────────────────────────────────────────────────
601
+ try {
602
+ const { data: records, error } = await getMct({ client: wellnessClient, query });
603
+ if (error || !records)
604
+ throw new Error(error ? JSON.stringify(error) : "No data");
605
+ for (const record of records) {
606
+ try {
607
+ const data = transformMenstrualCycleTracking(record);
608
+ await ctx.runMutation(api.public.ingestMenstruation, {
609
+ connectionId,
610
+ userId,
611
+ ...data,
612
+ });
613
+ synced.menstruation++;
614
+ }
615
+ catch (err) {
616
+ errors.push({
617
+ type: "menstruation",
618
+ id: record.summaryId ?? record.periodStartDate ?? "unknown",
619
+ error: err instanceof Error ? err.message : String(err),
676
620
  });
677
- synced.hrv++;
678
621
  }
679
622
  }
680
- catch (err) {
681
- errors.push({
682
- type: "hrv",
683
- id: hrv.summaryId ?? hrv.calendarDate ?? "unknown",
684
- error: err instanceof Error ? err.message : String(err),
685
- });
623
+ }
624
+ catch (err) {
625
+ errors.push({
626
+ type: "menstruation",
627
+ id: "fetch",
628
+ error: err instanceof Error ? err.message : String(err),
629
+ });
630
+ }
631
+ // ── Blood Pressures (→ body) ───────────────────────────────────────────
632
+ try {
633
+ const { data: bpRecords, error } = await getBloodPressures({ client: wellnessClient, query });
634
+ if (error || !bpRecords)
635
+ throw new Error(error ? JSON.stringify(error) : "No data");
636
+ for (const bp of bpRecords) {
637
+ try {
638
+ const data = transformBloodPressure(bp);
639
+ if (!data)
640
+ continue;
641
+ await ctx.runMutation(api.public.ingestBody, {
642
+ connectionId, userId, ...data,
643
+ });
644
+ synced.bloodPressures++;
645
+ }
646
+ catch (err) {
647
+ errors.push({
648
+ type: "bloodPressure",
649
+ id: bp.summaryId ?? String(bp.measurementTimeInSeconds),
650
+ error: err instanceof Error ? err.message : String(err),
651
+ });
652
+ }
686
653
  }
687
654
  }
688
- }
689
- catch (err) {
690
- errors.push({ type: "hrv", id: "fetch", error: err instanceof Error ? err.message : String(err) });
691
- }
692
- // ── Stress Details (enriches daily) ────────────────────────────────────
693
- try {
694
- const stressRecords = await client.getStressDetails(timeRange);
695
- for (const stress of stressRecords) {
696
- try {
697
- const data = transformStressDetails(stress);
698
- if (data.stress_data) {
699
- await ctx.runMutation(api.public.ingestDaily, {
700
- connectionId, userId,
701
- metadata: {
702
- start_time: new Date((stress.startTimeInSeconds ?? 0) * 1000).toISOString(),
703
- end_time: new Date(((stress.startTimeInSeconds ?? 0) + (stress.durationInSeconds ?? 86400)) * 1000).toISOString(),
704
- upload_type: 1,
705
- },
706
- stress_data: data.stress_data,
655
+ catch (err) {
656
+ errors.push({ type: "bloodPressure", id: "fetch", error: err instanceof Error ? err.message : String(err) });
657
+ }
658
+ // ── Skin Temperature (→ body) ──────────────────────────────────────────
659
+ try {
660
+ const { data: skinRecords, error } = await getSkinTemp({ client: wellnessClient, query });
661
+ if (error || !skinRecords)
662
+ throw new Error(error ? JSON.stringify(error) : "No data");
663
+ for (const skin of skinRecords) {
664
+ try {
665
+ const data = transformSkinTemperature(skin);
666
+ if (!data)
667
+ continue;
668
+ await ctx.runMutation(api.public.ingestBody, {
669
+ connectionId, userId, ...data,
670
+ });
671
+ synced.skinTemp++;
672
+ }
673
+ catch (err) {
674
+ errors.push({
675
+ type: "skinTemp",
676
+ id: skin.summaryId ?? skin.calendarDate ?? "unknown",
677
+ error: err instanceof Error ? err.message : String(err),
707
678
  });
708
- synced.stressDetails++;
709
679
  }
710
680
  }
711
- catch (err) {
712
- errors.push({
713
- type: "stressDetails",
714
- id: stress.summaryId ?? stress.calendarDate ?? "unknown",
715
- error: err instanceof Error ? err.message : String(err),
716
- });
681
+ }
682
+ catch (err) {
683
+ errors.push({ type: "skinTemp", id: "fetch", error: err instanceof Error ? err.message : String(err) });
684
+ }
685
+ // ── User Metrics (→ body) ──────────────────────────────────────────────
686
+ try {
687
+ const { data: metricsRecords, error } = await getUserMetrics({ client: wellnessClient, query });
688
+ if (error || !metricsRecords)
689
+ throw new Error(error ? JSON.stringify(error) : "No data");
690
+ for (const metrics of metricsRecords) {
691
+ try {
692
+ const data = transformUserMetrics(metrics);
693
+ if (!data)
694
+ continue;
695
+ await ctx.runMutation(api.public.ingestBody, {
696
+ connectionId, userId, ...data,
697
+ });
698
+ synced.userMetrics++;
699
+ }
700
+ catch (err) {
701
+ errors.push({
702
+ type: "userMetrics",
703
+ id: metrics.summaryId ?? metrics.calendarDate ?? "unknown",
704
+ error: err instanceof Error ? err.message : String(err),
705
+ });
706
+ }
717
707
  }
718
708
  }
719
- }
720
- catch (err) {
721
- errors.push({ type: "stressDetails", id: "fetch", error: err instanceof Error ? err.message : String(err) });
722
- }
723
- // ── Pulse Ox (enriches daily) ──────────────────────────────────────────
724
- try {
725
- const pulseOxRecords = await client.getPulseOx(timeRange);
726
- for (const po of pulseOxRecords) {
727
- try {
728
- const data = transformPulseOx(po);
729
- if (data.oxygen_data) {
730
- await ctx.runMutation(api.public.ingestDaily, {
731
- connectionId, userId,
732
- metadata: {
733
- start_time: new Date((po.startTimeInSeconds ?? 0) * 1000).toISOString(),
734
- end_time: new Date(((po.startTimeInSeconds ?? 0) + (po.durationInSeconds ?? 86400)) * 1000).toISOString(),
735
- upload_type: 1,
736
- },
737
- oxygen_data: data.oxygen_data,
709
+ catch (err) {
710
+ errors.push({ type: "userMetrics", id: "fetch", error: err instanceof Error ? err.message : String(err) });
711
+ }
712
+ // ── HRV (enriches daily) ──────────────────────────────────────────────
713
+ try {
714
+ const { data: hrvRecords, error } = await getHrv({ client: wellnessClient, query });
715
+ if (error || !hrvRecords)
716
+ throw new Error(error ? JSON.stringify(error) : "No data");
717
+ for (const hrv of hrvRecords) {
718
+ try {
719
+ const data = transformHRVSummary(hrv);
720
+ if (data) {
721
+ await ctx.runMutation(api.public.ingestDaily, {
722
+ connectionId, userId, ...data,
723
+ });
724
+ synced.hrv++;
725
+ }
726
+ }
727
+ catch (err) {
728
+ errors.push({
729
+ type: "hrv",
730
+ id: hrv.summaryId ?? hrv.calendarDate ?? "unknown",
731
+ error: err instanceof Error ? err.message : String(err),
738
732
  });
739
- synced.pulseOx++;
740
733
  }
741
734
  }
742
- catch (err) {
743
- errors.push({
744
- type: "pulseOx",
745
- id: po.summaryId ?? po.calendarDate ?? "unknown",
746
- error: err instanceof Error ? err.message : String(err),
747
- });
735
+ }
736
+ catch (err) {
737
+ errors.push({ type: "hrv", id: "fetch", error: err instanceof Error ? err.message : String(err) });
738
+ }
739
+ // ── Stress Details (enriches daily) ────────────────────────────────────
740
+ try {
741
+ const { data: stressRecords, error } = await getStressDetails({ client: wellnessClient, query });
742
+ if (error || !stressRecords)
743
+ throw new Error(error ? JSON.stringify(error) : "No data");
744
+ for (const stress of stressRecords) {
745
+ try {
746
+ const data = transformStress(stress);
747
+ if (data) {
748
+ await ctx.runMutation(api.public.ingestDaily, {
749
+ connectionId, userId, ...data,
750
+ });
751
+ synced.stressDetails++;
752
+ }
753
+ }
754
+ catch (err) {
755
+ errors.push({
756
+ type: "stressDetails",
757
+ id: stress.summaryId ?? stress.calendarDate ?? "unknown",
758
+ error: err instanceof Error ? err.message : String(err),
759
+ });
760
+ }
748
761
  }
749
762
  }
750
- }
751
- catch (err) {
752
- errors.push({ type: "pulseOx", id: "fetch", error: err instanceof Error ? err.message : String(err) });
753
- }
754
- // ── Respiration (enriches daily) ───────────────────────────────────────
755
- try {
756
- const respRecords = await client.getRespiration(timeRange);
757
- for (const resp of respRecords) {
758
- try {
759
- const data = transformRespiration(resp);
760
- if (data.respiration_data) {
761
- await ctx.runMutation(api.public.ingestDaily, {
762
- connectionId, userId,
763
- metadata: {
764
- start_time: new Date((resp.startTimeInSeconds ?? 0) * 1000).toISOString(),
765
- end_time: new Date(((resp.startTimeInSeconds ?? 0) + (resp.durationInSeconds ?? 86400)) * 1000).toISOString(),
766
- upload_type: 1,
767
- },
768
- respiration_data: data.respiration_data,
763
+ catch (err) {
764
+ errors.push({ type: "stressDetails", id: "fetch", error: err instanceof Error ? err.message : String(err) });
765
+ }
766
+ // ── Pulse Ox (enriches daily) ──────────────────────────────────────────
767
+ try {
768
+ const { data: pulseOxRecords, error } = await getPulseox({ client: wellnessClient, query });
769
+ if (error || !pulseOxRecords)
770
+ throw new Error(error ? JSON.stringify(error) : "No data");
771
+ for (const po of pulseOxRecords) {
772
+ try {
773
+ const data = transformPulseOx(po);
774
+ if (data) {
775
+ await ctx.runMutation(api.public.ingestDaily, {
776
+ connectionId, userId, ...data,
777
+ });
778
+ synced.pulseOx++;
779
+ }
780
+ }
781
+ catch (err) {
782
+ errors.push({
783
+ type: "pulseOx",
784
+ id: po.summaryId ?? po.calendarDate ?? "unknown",
785
+ error: err instanceof Error ? err.message : String(err),
769
786
  });
770
- synced.respiration++;
771
787
  }
772
788
  }
773
- catch (err) {
774
- errors.push({
775
- type: "respiration",
776
- id: resp.summaryId ?? "unknown",
777
- error: err instanceof Error ? err.message : String(err),
778
- });
789
+ }
790
+ catch (err) {
791
+ errors.push({ type: "pulseOx", id: "fetch", error: err instanceof Error ? err.message : String(err) });
792
+ }
793
+ // ── Respiration (enriches daily) ───────────────────────────────────────
794
+ try {
795
+ const { data: respRecords, error } = await getRespiration({ client: wellnessClient, query });
796
+ if (error || !respRecords)
797
+ throw new Error(error ? JSON.stringify(error) : "No data");
798
+ for (const resp of respRecords) {
799
+ try {
800
+ const data = transformRespiration(resp);
801
+ if (data) {
802
+ await ctx.runMutation(api.public.ingestDaily, {
803
+ connectionId, userId, ...data,
804
+ });
805
+ synced.respiration++;
806
+ }
807
+ }
808
+ catch (err) {
809
+ errors.push({
810
+ type: "respiration",
811
+ id: resp.summaryId ?? "unknown",
812
+ error: err instanceof Error ? err.message : String(err),
813
+ });
814
+ }
779
815
  }
780
816
  }
781
- }
782
- catch (err) {
783
- errors.push({ type: "respiration", id: "fetch", error: err instanceof Error ? err.message : String(err) });
784
- }
785
- return { synced, errors };
786
- }
817
+ catch (err) {
818
+ errors.push({ type: "respiration", id: "fetch", error: err instanceof Error ? err.message : String(err) });
819
+ }
820
+ return { synced, errors };
821
+ },
822
+ });
787
823
  //# sourceMappingURL=public.js.map