@nativesquare/soma 0.9.0 → 0.9.2

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