@nativesquare/soma 0.8.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 (530) hide show
  1. package/dist/client/index.d.ts +7 -128
  2. package/dist/client/index.d.ts.map +1 -1
  3. package/dist/client/index.js +31 -112
  4. package/dist/client/index.js.map +1 -1
  5. package/dist/component/_generated/api.d.ts +98 -4
  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 +136 -261
  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 +543 -0
  18. package/dist/component/garmin/private.d.ts.map +1 -0
  19. package/dist/component/garmin/private.js +1461 -0
  20. package/dist/component/garmin/private.js.map +1 -0
  21. package/dist/component/garmin/public.d.ts +149 -0
  22. package/dist/component/garmin/public.d.ts.map +1 -0
  23. package/dist/component/garmin/public.js +823 -0
  24. package/dist/component/garmin/public.js.map +1 -0
  25. package/dist/component/garmin/schemas/activity.d.ts +94 -0
  26. package/dist/component/garmin/schemas/activity.d.ts.map +1 -0
  27. package/dist/component/garmin/schemas/activity.js +29 -0
  28. package/dist/component/garmin/schemas/activity.js.map +1 -0
  29. package/dist/component/garmin/schemas/activityDetails.d.ts +146 -0
  30. package/dist/component/garmin/schemas/activityDetails.d.ts.map +1 -0
  31. package/dist/component/garmin/schemas/activityDetails.js +30 -0
  32. package/dist/component/garmin/schemas/activityDetails.js.map +1 -0
  33. package/dist/component/garmin/schemas/bloodPressure.d.ts +38 -0
  34. package/dist/component/garmin/schemas/bloodPressure.d.ts.map +1 -0
  35. package/dist/component/garmin/schemas/bloodPressure.js +27 -0
  36. package/dist/component/garmin/schemas/bloodPressure.js.map +1 -0
  37. package/dist/component/garmin/schemas/bodyCompositions.d.ts +42 -0
  38. package/dist/component/garmin/schemas/bodyCompositions.d.ts.map +1 -0
  39. package/dist/component/garmin/schemas/bodyCompositions.js +27 -0
  40. package/dist/component/garmin/schemas/bodyCompositions.js.map +1 -0
  41. package/dist/component/garmin/schemas/dailies.d.ts +98 -0
  42. package/dist/component/garmin/schemas/dailies.d.ts.map +1 -0
  43. package/dist/component/garmin/schemas/dailies.js +27 -0
  44. package/dist/component/garmin/schemas/dailies.js.map +1 -0
  45. package/dist/component/garmin/schemas/epochs.d.ts +54 -0
  46. package/dist/component/garmin/schemas/epochs.d.ts.map +1 -0
  47. package/dist/component/garmin/schemas/epochs.js +27 -0
  48. package/dist/component/garmin/schemas/epochs.js.map +1 -0
  49. package/dist/component/garmin/schemas/healthSnapshot.d.ts +48 -0
  50. package/dist/component/garmin/schemas/healthSnapshot.d.ts.map +1 -0
  51. package/dist/component/garmin/schemas/healthSnapshot.js +27 -0
  52. package/dist/component/garmin/schemas/healthSnapshot.js.map +1 -0
  53. package/dist/component/garmin/schemas/hrvSummary.d.ts +40 -0
  54. package/dist/component/garmin/schemas/hrvSummary.d.ts.map +1 -0
  55. package/dist/component/garmin/schemas/hrvSummary.js +27 -0
  56. package/dist/component/garmin/schemas/hrvSummary.js.map +1 -0
  57. package/dist/component/garmin/schemas/manuallyUpdatedActivities.d.ts +94 -0
  58. package/dist/component/garmin/schemas/manuallyUpdatedActivities.d.ts.map +1 -0
  59. package/dist/component/garmin/schemas/manuallyUpdatedActivities.js +29 -0
  60. package/dist/component/garmin/schemas/manuallyUpdatedActivities.js.map +1 -0
  61. package/dist/component/garmin/schemas/menstrualCycleTracking.d.ts +100 -0
  62. package/dist/component/garmin/schemas/menstrualCycleTracking.d.ts.map +1 -0
  63. package/dist/component/garmin/schemas/menstrualCycleTracking.js +28 -0
  64. package/dist/component/garmin/schemas/menstrualCycleTracking.js.map +1 -0
  65. package/dist/component/garmin/schemas/moveIQ.d.ts +40 -0
  66. package/dist/component/garmin/schemas/moveIQ.d.ts.map +1 -0
  67. package/dist/component/garmin/schemas/moveIQ.js +27 -0
  68. package/dist/component/garmin/schemas/moveIQ.js.map +1 -0
  69. package/dist/component/garmin/schemas/pulseOx.d.ts +38 -0
  70. package/dist/component/garmin/schemas/pulseOx.d.ts.map +1 -0
  71. package/dist/component/garmin/schemas/pulseOx.js +28 -0
  72. package/dist/component/garmin/schemas/pulseOx.js.map +1 -0
  73. package/dist/component/garmin/schemas/respiration.d.ts +34 -0
  74. package/dist/component/garmin/schemas/respiration.d.ts.map +1 -0
  75. package/dist/component/garmin/schemas/respiration.js +28 -0
  76. package/dist/component/garmin/schemas/respiration.js.map +1 -0
  77. package/dist/component/garmin/schemas/skinTemperature.d.ts +36 -0
  78. package/dist/component/garmin/schemas/skinTemperature.d.ts.map +1 -0
  79. package/dist/component/garmin/schemas/skinTemperature.js +28 -0
  80. package/dist/component/garmin/schemas/skinTemperature.js.map +1 -0
  81. package/dist/component/garmin/schemas/sleeps.d.ts +88 -0
  82. package/dist/component/garmin/schemas/sleeps.d.ts.map +1 -0
  83. package/dist/component/garmin/schemas/sleeps.js +27 -0
  84. package/dist/component/garmin/schemas/sleeps.js.map +1 -0
  85. package/dist/component/garmin/schemas/stress.d.ts +70 -0
  86. package/dist/component/garmin/schemas/stress.d.ts.map +1 -0
  87. package/dist/component/garmin/schemas/stress.js +30 -0
  88. package/dist/component/garmin/schemas/stress.js.map +1 -0
  89. package/dist/component/garmin/schemas/userMetrics.d.ts +36 -0
  90. package/dist/component/garmin/schemas/userMetrics.d.ts.map +1 -0
  91. package/dist/component/garmin/schemas/userMetrics.js +28 -0
  92. package/dist/component/garmin/schemas/userMetrics.js.map +1 -0
  93. package/dist/component/garmin/transform/activity.d.ts +13 -0
  94. package/dist/component/garmin/transform/activity.d.ts.map +1 -0
  95. package/dist/component/garmin/transform/activity.js +111 -0
  96. package/dist/component/garmin/transform/activity.js.map +1 -0
  97. package/dist/component/garmin/transform/activityDetails.d.ts +13 -0
  98. package/dist/component/garmin/transform/activityDetails.d.ts.map +1 -0
  99. package/dist/component/garmin/transform/activityDetails.js +173 -0
  100. package/dist/component/garmin/transform/activityDetails.js.map +1 -0
  101. package/dist/component/garmin/transform/bloodPressure.d.ts +12 -0
  102. package/dist/component/garmin/transform/bloodPressure.d.ts.map +1 -0
  103. package/dist/{garmin → component/garmin/transform}/bloodPressure.js +7 -8
  104. package/dist/component/garmin/transform/bloodPressure.js.map +1 -0
  105. package/dist/component/garmin/transform/bodyCompositions.d.ts +12 -0
  106. package/dist/component/garmin/transform/bodyCompositions.d.ts.map +1 -0
  107. package/dist/component/garmin/transform/bodyCompositions.js +42 -0
  108. package/dist/component/garmin/transform/bodyCompositions.js.map +1 -0
  109. package/dist/component/garmin/transform/dailies.d.ts +12 -0
  110. package/dist/component/garmin/transform/dailies.d.ts.map +1 -0
  111. package/dist/{garmin/daily.js → component/garmin/transform/dailies.js} +38 -49
  112. package/dist/component/garmin/transform/dailies.js.map +1 -0
  113. package/dist/component/garmin/transform/epochs.d.ts +13 -0
  114. package/dist/component/garmin/transform/epochs.d.ts.map +1 -0
  115. package/dist/component/garmin/transform/epochs.js +76 -0
  116. package/dist/component/garmin/transform/epochs.js.map +1 -0
  117. package/dist/component/garmin/transform/healthSnapshot.d.ts +12 -0
  118. package/dist/component/garmin/transform/healthSnapshot.d.ts.map +1 -0
  119. package/dist/component/garmin/transform/healthSnapshot.js +111 -0
  120. package/dist/component/garmin/transform/healthSnapshot.js.map +1 -0
  121. package/dist/component/garmin/transform/hrvSummary.d.ts +12 -0
  122. package/dist/component/garmin/transform/hrvSummary.d.ts.map +1 -0
  123. package/dist/{garmin/hrv.js → component/garmin/transform/hrvSummary.js} +16 -16
  124. package/dist/component/garmin/transform/hrvSummary.js.map +1 -0
  125. package/dist/component/garmin/transform/manuallyUpdatedActivities.d.ts +11 -0
  126. package/dist/component/garmin/transform/manuallyUpdatedActivities.d.ts.map +1 -0
  127. package/dist/component/garmin/transform/manuallyUpdatedActivities.js +20 -0
  128. package/dist/component/garmin/transform/manuallyUpdatedActivities.js.map +1 -0
  129. package/dist/{garmin/maps/activity-type.d.ts → component/garmin/transform/maps/activityType.d.ts} +1 -1
  130. package/dist/component/garmin/transform/maps/activityType.d.ts.map +1 -0
  131. package/dist/{garmin/maps/activity-type.js → component/garmin/transform/maps/activityType.js} +1 -1
  132. package/dist/component/garmin/transform/maps/activityType.js.map +1 -0
  133. package/dist/{garmin/maps/sleep-level.d.ts → component/garmin/transform/maps/sleepLevel.d.ts} +1 -1
  134. package/dist/component/garmin/transform/maps/sleepLevel.d.ts.map +1 -0
  135. package/dist/{garmin/maps/sleep-level.js → component/garmin/transform/maps/sleepLevel.js} +1 -1
  136. package/dist/component/garmin/transform/maps/sleepLevel.js.map +1 -0
  137. package/dist/component/garmin/transform/menstrualCycleTracking.d.ts +10 -0
  138. package/dist/component/garmin/transform/menstrualCycleTracking.d.ts.map +1 -0
  139. package/dist/{garmin/menstruation.js → component/garmin/transform/menstrualCycleTracking.js} +17 -12
  140. package/dist/component/garmin/transform/menstrualCycleTracking.js.map +1 -0
  141. package/dist/component/garmin/transform/moveIQ.d.ts +14 -0
  142. package/dist/component/garmin/transform/moveIQ.d.ts.map +1 -0
  143. package/dist/component/garmin/transform/moveIQ.js +41 -0
  144. package/dist/component/garmin/transform/moveIQ.js.map +1 -0
  145. package/dist/{garmin → component/garmin/transform}/plannedWorkout.d.ts +3 -4
  146. package/dist/component/garmin/transform/plannedWorkout.d.ts.map +1 -0
  147. package/dist/{garmin → component/garmin/transform}/plannedWorkout.js +61 -70
  148. package/dist/component/garmin/transform/plannedWorkout.js.map +1 -0
  149. package/dist/component/garmin/transform/pulseOx.d.ts +12 -0
  150. package/dist/component/garmin/transform/pulseOx.d.ts.map +1 -0
  151. package/dist/component/garmin/transform/pulseOx.js +46 -0
  152. package/dist/component/garmin/transform/pulseOx.js.map +1 -0
  153. package/dist/component/garmin/transform/respiration.d.ts +12 -0
  154. package/dist/component/garmin/transform/respiration.d.ts.map +1 -0
  155. package/dist/component/garmin/transform/respiration.js +54 -0
  156. package/dist/component/garmin/transform/respiration.js.map +1 -0
  157. package/dist/component/garmin/transform/skinTemperature.d.ts +12 -0
  158. package/dist/component/garmin/transform/skinTemperature.d.ts.map +1 -0
  159. package/dist/{garmin/skinTemp.js → component/garmin/transform/skinTemperature.js} +13 -10
  160. package/dist/component/garmin/transform/skinTemperature.js.map +1 -0
  161. package/dist/{garmin/sleep.d.ts → component/garmin/transform/sleeps.d.ts} +13 -20
  162. package/dist/component/garmin/transform/sleeps.d.ts.map +1 -0
  163. package/dist/{garmin/sleep.js → component/garmin/transform/sleeps.js} +39 -50
  164. package/dist/component/garmin/transform/sleeps.js.map +1 -0
  165. package/dist/component/garmin/transform/stress.d.ts +12 -0
  166. package/dist/component/garmin/transform/stress.d.ts.map +1 -0
  167. package/dist/component/garmin/transform/stress.js +56 -0
  168. package/dist/component/garmin/transform/stress.js.map +1 -0
  169. package/dist/component/garmin/transform/userMetrics.d.ts +12 -0
  170. package/dist/component/garmin/transform/userMetrics.d.ts.map +1 -0
  171. package/dist/{garmin → component/garmin/transform}/userMetrics.js +19 -12
  172. package/dist/component/garmin/transform/userMetrics.js.map +1 -0
  173. package/dist/component/garmin/types/trainingApiWorkouts/client/client.gen.d.ts +3 -0
  174. package/dist/component/garmin/types/trainingApiWorkouts/client/client.gen.d.ts.map +1 -0
  175. package/dist/component/garmin/types/trainingApiWorkouts/client/client.gen.js +236 -0
  176. package/dist/component/garmin/types/trainingApiWorkouts/client/client.gen.js.map +1 -0
  177. package/dist/component/garmin/types/trainingApiWorkouts/client/index.d.ts +9 -0
  178. package/dist/component/garmin/types/trainingApiWorkouts/client/index.d.ts.map +1 -0
  179. package/dist/component/garmin/types/trainingApiWorkouts/client/index.js +7 -0
  180. package/dist/component/garmin/types/trainingApiWorkouts/client/index.js.map +1 -0
  181. package/dist/component/garmin/types/trainingApiWorkouts/client/types.gen.d.ts +118 -0
  182. package/dist/component/garmin/types/trainingApiWorkouts/client/types.gen.d.ts.map +1 -0
  183. package/dist/component/garmin/types/trainingApiWorkouts/client/types.gen.js +3 -0
  184. package/dist/component/garmin/types/trainingApiWorkouts/client/types.gen.js.map +1 -0
  185. package/dist/component/garmin/types/trainingApiWorkouts/client/utils.gen.d.ts +34 -0
  186. package/dist/component/garmin/types/trainingApiWorkouts/client/utils.gen.d.ts.map +1 -0
  187. package/dist/component/garmin/types/trainingApiWorkouts/client/utils.gen.js +229 -0
  188. package/dist/component/garmin/types/trainingApiWorkouts/client/utils.gen.js.map +1 -0
  189. package/dist/component/garmin/types/trainingApiWorkouts/client.gen.d.ts +13 -0
  190. package/dist/component/garmin/types/trainingApiWorkouts/client.gen.d.ts.map +1 -0
  191. package/dist/component/garmin/types/trainingApiWorkouts/client.gen.js +4 -0
  192. package/dist/component/garmin/types/trainingApiWorkouts/client.gen.js.map +1 -0
  193. package/dist/component/garmin/types/trainingApiWorkouts/core/auth.gen.d.ts +19 -0
  194. package/dist/component/garmin/types/trainingApiWorkouts/core/auth.gen.d.ts.map +1 -0
  195. package/dist/component/garmin/types/trainingApiWorkouts/core/auth.gen.js +15 -0
  196. package/dist/component/garmin/types/trainingApiWorkouts/core/auth.gen.js.map +1 -0
  197. package/dist/component/garmin/types/trainingApiWorkouts/core/bodySerializer.gen.d.ts +26 -0
  198. package/dist/component/garmin/types/trainingApiWorkouts/core/bodySerializer.gen.d.ts.map +1 -0
  199. package/dist/component/garmin/types/trainingApiWorkouts/core/bodySerializer.gen.js +58 -0
  200. package/dist/component/garmin/types/trainingApiWorkouts/core/bodySerializer.gen.js.map +1 -0
  201. package/dist/component/garmin/types/trainingApiWorkouts/core/params.gen.d.ts +44 -0
  202. package/dist/component/garmin/types/trainingApiWorkouts/core/params.gen.d.ts.map +1 -0
  203. package/dist/component/garmin/types/trainingApiWorkouts/core/params.gen.js +101 -0
  204. package/dist/component/garmin/types/trainingApiWorkouts/core/params.gen.js.map +1 -0
  205. package/dist/component/garmin/types/trainingApiWorkouts/core/pathSerializer.gen.d.ts +34 -0
  206. package/dist/component/garmin/types/trainingApiWorkouts/core/pathSerializer.gen.d.ts.map +1 -0
  207. package/dist/component/garmin/types/trainingApiWorkouts/core/pathSerializer.gen.js +107 -0
  208. package/dist/component/garmin/types/trainingApiWorkouts/core/pathSerializer.gen.js.map +1 -0
  209. package/dist/component/garmin/types/trainingApiWorkouts/core/queryKeySerializer.gen.d.ts +19 -0
  210. package/dist/component/garmin/types/trainingApiWorkouts/core/queryKeySerializer.gen.d.ts.map +1 -0
  211. package/dist/component/garmin/types/trainingApiWorkouts/core/queryKeySerializer.gen.js +93 -0
  212. package/dist/component/garmin/types/trainingApiWorkouts/core/queryKeySerializer.gen.js.map +1 -0
  213. package/dist/component/garmin/types/trainingApiWorkouts/core/serverSentEvents.gen.d.ts +72 -0
  214. package/dist/component/garmin/types/trainingApiWorkouts/core/serverSentEvents.gen.d.ts.map +1 -0
  215. package/dist/component/garmin/types/trainingApiWorkouts/core/serverSentEvents.gen.js +134 -0
  216. package/dist/component/garmin/types/trainingApiWorkouts/core/serverSentEvents.gen.js.map +1 -0
  217. package/dist/component/garmin/types/trainingApiWorkouts/core/types.gen.d.ts +79 -0
  218. package/dist/component/garmin/types/trainingApiWorkouts/core/types.gen.d.ts.map +1 -0
  219. package/dist/component/garmin/types/trainingApiWorkouts/core/types.gen.js +3 -0
  220. package/dist/component/garmin/types/trainingApiWorkouts/core/types.gen.js.map +1 -0
  221. package/dist/component/garmin/types/trainingApiWorkouts/core/utils.gen.d.ts +20 -0
  222. package/dist/component/garmin/types/trainingApiWorkouts/core/utils.gen.d.ts.map +1 -0
  223. package/dist/component/garmin/types/trainingApiWorkouts/core/utils.gen.js +88 -0
  224. package/dist/component/garmin/types/trainingApiWorkouts/core/utils.gen.js.map +1 -0
  225. package/dist/component/garmin/types/trainingApiWorkouts/index.d.ts +3 -0
  226. package/dist/component/garmin/types/trainingApiWorkouts/index.d.ts.map +1 -0
  227. package/dist/component/garmin/types/trainingApiWorkouts/index.js +3 -0
  228. package/dist/component/garmin/types/trainingApiWorkouts/index.js.map +1 -0
  229. package/dist/component/garmin/types/trainingApiWorkouts/sdk.gen.d.ts +68 -0
  230. package/dist/component/garmin/types/trainingApiWorkouts/sdk.gen.d.ts.map +1 -0
  231. package/dist/component/garmin/types/trainingApiWorkouts/sdk.gen.js +97 -0
  232. package/dist/component/garmin/types/trainingApiWorkouts/sdk.gen.js.map +1 -0
  233. package/dist/component/garmin/types/trainingApiWorkouts/types.gen.d.ts +330 -0
  234. package/dist/component/garmin/types/trainingApiWorkouts/types.gen.d.ts.map +1 -0
  235. package/dist/component/garmin/types/trainingApiWorkouts/types.gen.js +3 -0
  236. package/dist/component/garmin/types/trainingApiWorkouts/types.gen.js.map +1 -0
  237. package/dist/component/garmin/types/trainingApiWorkouts/zod.gen.d.ts +2463 -0
  238. package/dist/component/garmin/types/trainingApiWorkouts/zod.gen.d.ts.map +1 -0
  239. package/dist/component/garmin/types/trainingApiWorkouts/zod.gen.js +388 -0
  240. package/dist/component/garmin/types/trainingApiWorkouts/zod.gen.js.map +1 -0
  241. package/dist/component/garmin/types/wellnessApi/client/client.gen.d.ts +3 -0
  242. package/dist/component/garmin/types/wellnessApi/client/client.gen.d.ts.map +1 -0
  243. package/dist/component/garmin/types/wellnessApi/client/client.gen.js +236 -0
  244. package/dist/component/garmin/types/wellnessApi/client/client.gen.js.map +1 -0
  245. package/dist/component/garmin/types/wellnessApi/client/index.d.ts +9 -0
  246. package/dist/component/garmin/types/wellnessApi/client/index.d.ts.map +1 -0
  247. package/dist/component/garmin/types/wellnessApi/client/index.js +7 -0
  248. package/dist/component/garmin/types/wellnessApi/client/index.js.map +1 -0
  249. package/dist/component/garmin/types/wellnessApi/client/types.gen.d.ts +118 -0
  250. package/dist/component/garmin/types/wellnessApi/client/types.gen.d.ts.map +1 -0
  251. package/dist/component/garmin/types/wellnessApi/client/types.gen.js +3 -0
  252. package/dist/component/garmin/types/wellnessApi/client/types.gen.js.map +1 -0
  253. package/dist/component/garmin/types/wellnessApi/client/utils.gen.d.ts +34 -0
  254. package/dist/component/garmin/types/wellnessApi/client/utils.gen.d.ts.map +1 -0
  255. package/dist/component/garmin/types/wellnessApi/client/utils.gen.js +229 -0
  256. package/dist/component/garmin/types/wellnessApi/client/utils.gen.js.map +1 -0
  257. package/dist/component/garmin/types/wellnessApi/client.gen.d.ts +13 -0
  258. package/dist/component/garmin/types/wellnessApi/client.gen.d.ts.map +1 -0
  259. package/dist/component/garmin/types/wellnessApi/client.gen.js +4 -0
  260. package/dist/component/garmin/types/wellnessApi/client.gen.js.map +1 -0
  261. package/dist/component/garmin/types/wellnessApi/core/auth.gen.d.ts +19 -0
  262. package/dist/component/garmin/types/wellnessApi/core/auth.gen.d.ts.map +1 -0
  263. package/dist/component/garmin/types/wellnessApi/core/auth.gen.js +15 -0
  264. package/dist/component/garmin/types/wellnessApi/core/auth.gen.js.map +1 -0
  265. package/dist/component/garmin/types/wellnessApi/core/bodySerializer.gen.d.ts +26 -0
  266. package/dist/component/garmin/types/wellnessApi/core/bodySerializer.gen.d.ts.map +1 -0
  267. package/dist/component/garmin/types/wellnessApi/core/bodySerializer.gen.js +58 -0
  268. package/dist/component/garmin/types/wellnessApi/core/bodySerializer.gen.js.map +1 -0
  269. package/dist/component/garmin/types/wellnessApi/core/params.gen.d.ts +44 -0
  270. package/dist/component/garmin/types/wellnessApi/core/params.gen.d.ts.map +1 -0
  271. package/dist/component/garmin/types/wellnessApi/core/params.gen.js +101 -0
  272. package/dist/component/garmin/types/wellnessApi/core/params.gen.js.map +1 -0
  273. package/dist/component/garmin/types/wellnessApi/core/pathSerializer.gen.d.ts +34 -0
  274. package/dist/component/garmin/types/wellnessApi/core/pathSerializer.gen.d.ts.map +1 -0
  275. package/dist/component/garmin/types/wellnessApi/core/pathSerializer.gen.js +107 -0
  276. package/dist/component/garmin/types/wellnessApi/core/pathSerializer.gen.js.map +1 -0
  277. package/dist/component/garmin/types/wellnessApi/core/queryKeySerializer.gen.d.ts +19 -0
  278. package/dist/component/garmin/types/wellnessApi/core/queryKeySerializer.gen.d.ts.map +1 -0
  279. package/dist/component/garmin/types/wellnessApi/core/queryKeySerializer.gen.js +93 -0
  280. package/dist/component/garmin/types/wellnessApi/core/queryKeySerializer.gen.js.map +1 -0
  281. package/dist/component/garmin/types/wellnessApi/core/serverSentEvents.gen.d.ts +72 -0
  282. package/dist/component/garmin/types/wellnessApi/core/serverSentEvents.gen.d.ts.map +1 -0
  283. package/dist/component/garmin/types/wellnessApi/core/serverSentEvents.gen.js +134 -0
  284. package/dist/component/garmin/types/wellnessApi/core/serverSentEvents.gen.js.map +1 -0
  285. package/dist/component/garmin/types/wellnessApi/core/types.gen.d.ts +79 -0
  286. package/dist/component/garmin/types/wellnessApi/core/types.gen.d.ts.map +1 -0
  287. package/dist/component/garmin/types/wellnessApi/core/types.gen.js +3 -0
  288. package/dist/component/garmin/types/wellnessApi/core/types.gen.js.map +1 -0
  289. package/dist/component/garmin/types/wellnessApi/core/utils.gen.d.ts +20 -0
  290. package/dist/component/garmin/types/wellnessApi/core/utils.gen.d.ts.map +1 -0
  291. package/dist/component/garmin/types/wellnessApi/core/utils.gen.js +88 -0
  292. package/dist/component/garmin/types/wellnessApi/core/utils.gen.js.map +1 -0
  293. package/dist/component/garmin/types/wellnessApi/index.d.ts +3 -0
  294. package/dist/component/garmin/types/wellnessApi/index.d.ts.map +1 -0
  295. package/dist/component/garmin/types/wellnessApi/index.js +3 -0
  296. package/dist/component/garmin/types/wellnessApi/index.js.map +1 -0
  297. package/dist/component/garmin/types/wellnessApi/sdk.gen.d.ts +166 -0
  298. package/dist/component/garmin/types/wellnessApi/sdk.gen.d.ts.map +1 -0
  299. package/dist/component/garmin/types/wellnessApi/sdk.gen.js +153 -0
  300. package/dist/component/garmin/types/wellnessApi/sdk.gen.js.map +1 -0
  301. package/dist/component/garmin/types/wellnessApi/types.gen.d.ts +2733 -0
  302. package/dist/component/garmin/types/wellnessApi/types.gen.d.ts.map +1 -0
  303. package/dist/component/garmin/types/wellnessApi/types.gen.js +3 -0
  304. package/dist/component/garmin/types/wellnessApi/types.gen.js.map +1 -0
  305. package/dist/component/garmin/types/wellnessApi/zod.gen.d.ts +1319 -0
  306. package/dist/component/garmin/types/wellnessApi/zod.gen.d.ts.map +1 -0
  307. package/dist/component/garmin/types/wellnessApi/zod.gen.js +784 -0
  308. package/dist/component/garmin/types/wellnessApi/zod.gen.js.map +1 -0
  309. package/dist/component/garmin/utils.d.ts +16 -0
  310. package/dist/component/garmin/utils.d.ts.map +1 -0
  311. package/dist/component/garmin/utils.js +17 -0
  312. package/dist/component/garmin/utils.js.map +1 -0
  313. package/dist/component/garmin/webhooks.d.ts +128 -0
  314. package/dist/component/garmin/webhooks.d.ts.map +1 -0
  315. package/dist/component/garmin/webhooks.js +531 -0
  316. package/dist/component/garmin/webhooks.js.map +1 -0
  317. package/dist/component/private.d.ts +4 -4
  318. package/dist/component/public.d.ts +333 -333
  319. package/dist/component/schema.d.ts +133 -133
  320. package/dist/component/strava/private.d.ts +30 -0
  321. package/dist/component/strava/private.d.ts.map +1 -0
  322. package/dist/component/strava/private.js +71 -0
  323. package/dist/component/strava/private.js.map +1 -0
  324. package/dist/component/{strava.d.ts → strava/public.d.ts} +3 -31
  325. package/dist/component/strava/public.d.ts.map +1 -0
  326. package/dist/component/{strava.js → strava/public.js} +22 -101
  327. package/dist/component/strava/public.js.map +1 -0
  328. package/dist/component/validators/activity.d.ts +6 -0
  329. package/dist/component/validators/activity.d.ts.map +1 -1
  330. package/dist/component/validators/activity.js.map +1 -1
  331. package/dist/component/validators/body.d.ts +20 -14
  332. package/dist/component/validators/body.d.ts.map +1 -1
  333. package/dist/component/validators/body.js.map +1 -1
  334. package/dist/component/validators/daily.d.ts +6 -0
  335. package/dist/component/validators/daily.d.ts.map +1 -1
  336. package/dist/component/validators/daily.js.map +1 -1
  337. package/dist/component/validators/enums.d.ts +1 -1
  338. package/dist/component/validators/menstruation.d.ts +5 -0
  339. package/dist/component/validators/menstruation.d.ts.map +1 -1
  340. package/dist/component/validators/menstruation.js.map +1 -1
  341. package/dist/component/validators/plannedWorkout.d.ts +6 -0
  342. package/dist/component/validators/plannedWorkout.d.ts.map +1 -1
  343. package/dist/component/validators/plannedWorkout.js.map +1 -1
  344. package/dist/validators.d.ts +31 -28
  345. package/dist/validators.d.ts.map +1 -1
  346. package/dist/validators.js +2 -2
  347. package/dist/validators.js.map +1 -1
  348. package/package.json +4 -7
  349. package/src/client/index.ts +41 -172
  350. package/src/component/_generated/api.ts +98 -4
  351. package/src/component/_generated/component.ts +252 -284
  352. package/src/{garmin → component/garmin}/auth.ts +8 -1
  353. package/src/component/garmin/client.ts +39 -0
  354. package/src/component/garmin/private.ts +1798 -0
  355. package/src/component/garmin/public.ts +938 -0
  356. package/src/component/garmin/schemas/activity.ts +40 -0
  357. package/src/component/garmin/schemas/activityDetails.ts +45 -0
  358. package/src/component/garmin/schemas/bloodPressure.ts +38 -0
  359. package/src/component/garmin/schemas/bodyCompositions.ts +38 -0
  360. package/src/component/garmin/schemas/dailies.ts +38 -0
  361. package/src/component/garmin/schemas/epochs.ts +38 -0
  362. package/src/component/garmin/schemas/healthSnapshot.ts +38 -0
  363. package/src/component/garmin/schemas/hrvSummary.ts +38 -0
  364. package/src/component/garmin/schemas/manuallyUpdatedActivities.ts +49 -0
  365. package/src/component/garmin/schemas/menstrualCycleTracking.ts +39 -0
  366. package/src/component/garmin/schemas/moveIQ.ts +38 -0
  367. package/src/component/garmin/schemas/pulseOx.ts +39 -0
  368. package/src/component/garmin/schemas/respiration.ts +39 -0
  369. package/src/component/garmin/schemas/skinTemperature.ts +39 -0
  370. package/src/component/garmin/schemas/sleeps.ts +38 -0
  371. package/src/component/garmin/schemas/stress.ts +43 -0
  372. package/src/component/garmin/schemas/userMetrics.ts +39 -0
  373. package/src/component/garmin/transform/activity.ts +143 -0
  374. package/src/component/garmin/transform/activityDetails.ts +236 -0
  375. package/src/{garmin → component/garmin/transform}/bloodPressure.ts +39 -41
  376. package/src/component/garmin/transform/bodyCompositions.ts +51 -0
  377. package/src/component/garmin/transform/dailies.ts +179 -0
  378. package/src/component/garmin/transform/epochs.ts +94 -0
  379. package/src/component/garmin/transform/healthSnapshot.ts +152 -0
  380. package/src/component/garmin/transform/hrvSummary.ts +56 -0
  381. package/src/component/garmin/transform/manuallyUpdatedActivities.ts +27 -0
  382. package/src/{garmin/maps/activity-type.ts → component/garmin/transform/maps/activityType.ts} +116 -116
  383. package/src/{garmin/maps/sleep-level.ts → component/garmin/transform/maps/sleepLevel.ts} +22 -22
  384. package/src/component/garmin/transform/menstrualCycleTracking.ts +48 -0
  385. package/src/component/garmin/transform/moveIQ.ts +48 -0
  386. package/src/{garmin → component/garmin/transform}/plannedWorkout.ts +328 -333
  387. package/src/component/garmin/transform/pulseOx.ts +64 -0
  388. package/src/component/garmin/transform/respiration.ts +73 -0
  389. package/src/component/garmin/transform/skinTemperature.ts +44 -0
  390. package/src/component/garmin/transform/sleeps.ts +159 -0
  391. package/src/component/garmin/transform/stress.ts +78 -0
  392. package/src/component/garmin/transform/userMetrics.ts +56 -0
  393. package/src/component/garmin/types/specs/training-api-workouts.json +699 -0
  394. package/src/component/garmin/types/trainingApiWorkouts/client/client.gen.ts +290 -0
  395. package/src/component/garmin/types/trainingApiWorkouts/client/index.ts +25 -0
  396. package/src/component/garmin/types/trainingApiWorkouts/client/types.gen.ts +214 -0
  397. package/src/component/garmin/types/trainingApiWorkouts/client/utils.gen.ts +316 -0
  398. package/src/component/garmin/types/trainingApiWorkouts/client.gen.ts +16 -0
  399. package/src/component/garmin/types/trainingApiWorkouts/core/auth.gen.ts +41 -0
  400. package/src/component/garmin/types/trainingApiWorkouts/core/bodySerializer.gen.ts +82 -0
  401. package/src/component/garmin/types/trainingApiWorkouts/core/params.gen.ts +169 -0
  402. package/src/component/garmin/types/trainingApiWorkouts/core/pathSerializer.gen.ts +171 -0
  403. package/src/component/garmin/types/trainingApiWorkouts/core/queryKeySerializer.gen.ts +117 -0
  404. package/src/component/garmin/types/trainingApiWorkouts/core/serverSentEvents.gen.ts +243 -0
  405. package/src/component/garmin/types/trainingApiWorkouts/core/types.gen.ts +104 -0
  406. package/src/component/garmin/types/trainingApiWorkouts/core/utils.gen.ts +140 -0
  407. package/src/component/garmin/types/trainingApiWorkouts/index.ts +4 -0
  408. package/src/component/garmin/types/trainingApiWorkouts/sdk.gen.ts +126 -0
  409. package/src/component/garmin/types/trainingApiWorkouts/types.gen.ts +387 -0
  410. package/src/component/garmin/types/trainingApiWorkouts/zod.gen.ts +423 -0
  411. package/src/component/garmin/types/wellnessApi/client/client.gen.ts +290 -0
  412. package/src/component/garmin/types/wellnessApi/client/index.ts +25 -0
  413. package/src/component/garmin/types/wellnessApi/client/types.gen.ts +214 -0
  414. package/src/component/garmin/types/wellnessApi/client/utils.gen.ts +316 -0
  415. package/src/component/garmin/types/wellnessApi/client.gen.ts +16 -0
  416. package/src/component/garmin/types/wellnessApi/core/auth.gen.ts +41 -0
  417. package/src/component/garmin/types/wellnessApi/core/bodySerializer.gen.ts +82 -0
  418. package/src/component/garmin/types/wellnessApi/core/params.gen.ts +169 -0
  419. package/src/component/garmin/types/wellnessApi/core/pathSerializer.gen.ts +171 -0
  420. package/src/component/garmin/types/wellnessApi/core/queryKeySerializer.gen.ts +117 -0
  421. package/src/component/garmin/types/wellnessApi/core/serverSentEvents.gen.ts +243 -0
  422. package/src/component/garmin/types/wellnessApi/core/types.gen.ts +104 -0
  423. package/src/component/garmin/types/wellnessApi/core/utils.gen.ts +140 -0
  424. package/src/component/garmin/types/wellnessApi/index.ts +4 -0
  425. package/src/component/garmin/types/wellnessApi/sdk.gen.ts +207 -0
  426. package/src/component/garmin/types/wellnessApi/types.gen.ts +2942 -0
  427. package/src/component/garmin/types/wellnessApi/zod.gen.ts +878 -0
  428. package/src/component/garmin/utils.ts +25 -0
  429. package/src/component/garmin/webhooks.ts +852 -0
  430. package/src/component/strava/private.ts +89 -0
  431. package/src/component/{strava.ts → strava/public.ts} +341 -404
  432. package/src/component/validators/activity.ts +5 -0
  433. package/src/component/validators/body.ts +5 -0
  434. package/src/component/validators/daily.ts +5 -0
  435. package/src/component/validators/menstruation.ts +5 -1
  436. package/src/component/validators/plannedWorkout.ts +5 -0
  437. package/src/validators.ts +12 -2
  438. package/dist/component/garmin.d.ts +0 -366
  439. package/dist/component/garmin.d.ts.map +0 -1
  440. package/dist/component/garmin.js +0 -1481
  441. package/dist/component/garmin.js.map +0 -1
  442. package/dist/component/strava.d.ts.map +0 -1
  443. package/dist/component/strava.js.map +0 -1
  444. package/dist/garmin/activity.d.ts +0 -92
  445. package/dist/garmin/activity.d.ts.map +0 -1
  446. package/dist/garmin/activity.js +0 -201
  447. package/dist/garmin/activity.js.map +0 -1
  448. package/dist/garmin/auth.d.ts.map +0 -1
  449. package/dist/garmin/auth.js.map +0 -1
  450. package/dist/garmin/bloodPressure.d.ts +0 -28
  451. package/dist/garmin/bloodPressure.d.ts.map +0 -1
  452. package/dist/garmin/bloodPressure.js.map +0 -1
  453. package/dist/garmin/body.d.ts +0 -26
  454. package/dist/garmin/body.d.ts.map +0 -1
  455. package/dist/garmin/body.js +0 -44
  456. package/dist/garmin/body.js.map +0 -1
  457. package/dist/garmin/client.d.ts +0 -246
  458. package/dist/garmin/client.d.ts.map +0 -1
  459. package/dist/garmin/client.js +0 -566
  460. package/dist/garmin/client.js.map +0 -1
  461. package/dist/garmin/daily.d.ts +0 -74
  462. package/dist/garmin/daily.d.ts.map +0 -1
  463. package/dist/garmin/daily.js.map +0 -1
  464. package/dist/garmin/hrv.d.ts +0 -30
  465. package/dist/garmin/hrv.d.ts.map +0 -1
  466. package/dist/garmin/hrv.js.map +0 -1
  467. package/dist/garmin/index.d.ts +0 -34
  468. package/dist/garmin/index.d.ts.map +0 -1
  469. package/dist/garmin/index.js +0 -28
  470. package/dist/garmin/index.js.map +0 -1
  471. package/dist/garmin/maps/activity-type.d.ts.map +0 -1
  472. package/dist/garmin/maps/activity-type.js.map +0 -1
  473. package/dist/garmin/maps/sleep-level.d.ts.map +0 -1
  474. package/dist/garmin/maps/sleep-level.js.map +0 -1
  475. package/dist/garmin/menstruation.d.ts +0 -25
  476. package/dist/garmin/menstruation.d.ts.map +0 -1
  477. package/dist/garmin/menstruation.js.map +0 -1
  478. package/dist/garmin/plannedWorkout.d.ts.map +0 -1
  479. package/dist/garmin/plannedWorkout.js.map +0 -1
  480. package/dist/garmin/pulseOx.d.ts +0 -24
  481. package/dist/garmin/pulseOx.d.ts.map +0 -1
  482. package/dist/garmin/pulseOx.js +0 -33
  483. package/dist/garmin/pulseOx.js.map +0 -1
  484. package/dist/garmin/respiration.d.ts +0 -29
  485. package/dist/garmin/respiration.d.ts.map +0 -1
  486. package/dist/garmin/respiration.js +0 -42
  487. package/dist/garmin/respiration.js.map +0 -1
  488. package/dist/garmin/skinTemp.d.ts +0 -27
  489. package/dist/garmin/skinTemp.d.ts.map +0 -1
  490. package/dist/garmin/skinTemp.js.map +0 -1
  491. package/dist/garmin/sleep.d.ts.map +0 -1
  492. package/dist/garmin/sleep.js.map +0 -1
  493. package/dist/garmin/stressDetails.d.ts +0 -30
  494. package/dist/garmin/stressDetails.d.ts.map +0 -1
  495. package/dist/garmin/stressDetails.js +0 -49
  496. package/dist/garmin/stressDetails.js.map +0 -1
  497. package/dist/garmin/sync.d.ts +0 -53
  498. package/dist/garmin/sync.d.ts.map +0 -1
  499. package/dist/garmin/sync.js +0 -457
  500. package/dist/garmin/sync.js.map +0 -1
  501. package/dist/garmin/types.d.ts +0 -175
  502. package/dist/garmin/types.d.ts.map +0 -1
  503. package/dist/garmin/types.js +0 -10
  504. package/dist/garmin/types.js.map +0 -1
  505. package/dist/garmin/userMetrics.d.ts +0 -23
  506. package/dist/garmin/userMetrics.d.ts.map +0 -1
  507. package/dist/garmin/userMetrics.js.map +0 -1
  508. package/src/component/garmin.ts +0 -1722
  509. package/src/garmin/activity.test.ts +0 -170
  510. package/src/garmin/activity.ts +0 -265
  511. package/src/garmin/auth.test.ts +0 -103
  512. package/src/garmin/body.ts +0 -59
  513. package/src/garmin/client.ts +0 -886
  514. package/src/garmin/daily.ts +0 -215
  515. package/src/garmin/hrv.ts +0 -57
  516. package/src/garmin/index.ts +0 -145
  517. package/src/garmin/maps/activity-type.test.ts +0 -78
  518. package/src/garmin/menstruation.ts +0 -44
  519. package/src/garmin/pulseOx.ts +0 -45
  520. package/src/garmin/respiration.ts +0 -55
  521. package/src/garmin/skinTemp.ts +0 -42
  522. package/src/garmin/sleep.test.ts +0 -109
  523. package/src/garmin/sleep.ts +0 -176
  524. package/src/garmin/stressDetails.ts +0 -71
  525. package/src/garmin/sync.ts +0 -566
  526. package/src/garmin/types.ts +0 -268
  527. package/src/garmin/userMetrics.ts +0 -50
  528. package/src/garmin/wellness-api.d.ts +0 -5637
  529. /package/dist/{garmin → component/garmin}/auth.js +0 -0
  530. /package/src/{garmin/spec → component/garmin/types/specs}/wellness-api.json +0 -0
@@ -1,886 +0,0 @@
1
- // ─── Garmin Health API Client ────────────────────────────────────────────────
2
- // Uses openapi-fetch for type-safe Wellness API calls and manual fetch for
3
- // Training API endpoints that are not covered by the OpenAPI spec.
4
-
5
- import createClient from "openapi-fetch";
6
- import type { Middleware } from "openapi-fetch";
7
- import type { paths } from "./wellness-api.js";
8
- import type {
9
- GarminActivity,
10
- GarminActivityDetail,
11
- GarminDailyExtended,
12
- GarminSleepExtended,
13
- GarminBodyComposition,
14
- GarminMenstrualCycle,
15
- GarminUserMetrics,
16
- GarminStressDetail,
17
- GarminSkinTemperature,
18
- GarminRespiration,
19
- GarminPulseOx,
20
- GarminMoveIQEvent,
21
- GarminHRVSummary,
22
- GarminHealthSnapshot,
23
- GarminEpoch,
24
- GarminBloodPressure,
25
- GarminSolar,
26
- GarminWorkout,
27
- GarminWorkoutSchedule,
28
- } from "./types.js";
29
-
30
- const DEFAULT_BASE_URL = "https://apis.garmin.com";
31
-
32
- export interface GarminClientOptions {
33
- /** The user's OAuth 2.0 access token. */
34
- accessToken: string;
35
- /**
36
- * Base URL of the Garmin Health API.
37
- * @default "https://apis.garmin.com"
38
- */
39
- baseUrl?: string;
40
- }
41
-
42
- /**
43
- * A client for the Garmin Health API.
44
- *
45
- * Wellness API endpoints use openapi-fetch for type safety. Training API
46
- * endpoints use manual fetch since they are not part of the Wellness API spec.
47
- *
48
- * All requests are authenticated with a Bearer token. Time-range parameters
49
- * use Unix epoch seconds for `uploadStartTimeInSeconds` and
50
- * `uploadEndTimeInSeconds`.
51
- *
52
- * @example
53
- * ```ts
54
- * const client = new GarminClient({
55
- * accessToken: "user_access_token",
56
- * });
57
- *
58
- * const dailies = await client.getDailies({
59
- * uploadStartTimeInSeconds: startEpoch,
60
- * uploadEndTimeInSeconds: endEpoch,
61
- * });
62
- * ```
63
- */
64
- export class GarminClient {
65
- private readonly accessToken: string;
66
- private readonly baseUrl: string;
67
- private readonly wellness;
68
-
69
- constructor(opts: GarminClientOptions) {
70
- this.accessToken = opts.accessToken;
71
- this.baseUrl = (opts.baseUrl ?? DEFAULT_BASE_URL).replace(/\/+$/, "");
72
-
73
- const authMiddleware: Middleware = {
74
- async onRequest({ request }) {
75
- request.headers.set("Authorization", `Bearer ${opts.accessToken}`);
76
- request.headers.set("Accept", "application/json");
77
- return request;
78
- },
79
- };
80
-
81
- this.wellness = createClient<paths>({
82
- baseUrl: `${this.baseUrl}/wellness-api`,
83
- });
84
- this.wellness.use(authMiddleware);
85
- }
86
-
87
- // ─── User Identity ──────────────────────────────────────────────────────
88
-
89
- /**
90
- * Resolve the Garmin user ID for the authenticated user.
91
- *
92
- * Garmin API: `GET /wellness-api/rest/user/id`
93
- */
94
- async getUserId(): Promise<string | null> {
95
- const { data, error, response } = await this.wellness.GET("/rest/user/id");
96
- if (error) {
97
- throw new GarminApiError(
98
- `Garmin API error: ${response.status} ${response.statusText}`,
99
- response.status,
100
- JSON.stringify(error),
101
- );
102
- }
103
- return data?.userId ?? null;
104
- }
105
-
106
- // ─── User Permissions ─────────────────────────────────────────────────
107
-
108
- /**
109
- * Check which permissions the user has granted.
110
- *
111
- * Garmin API: `GET /wellness-api/rest/user/permissions`
112
- */
113
- async getUserPermissions(): Promise<string[]> {
114
- const { data, error, response } = await this.wellness.GET(
115
- "/rest/user/permissions",
116
- );
117
- if (error) {
118
- throw new GarminApiError(
119
- `Garmin API error: ${response.status} ${response.statusText}`,
120
- response.status,
121
- JSON.stringify(error),
122
- );
123
- }
124
- return data?.permissions ?? [];
125
- }
126
-
127
- // ─── Daily Summaries ──────────────────────────────────────────────────
128
-
129
- /**
130
- * Get daily wellness summaries.
131
- *
132
- * Garmin API: `GET /wellness-api/rest/dailies`
133
- */
134
- async getDailies(params: TimeRangeParams): Promise<GarminDailyExtended[]> {
135
- const { data, error, response } = await this.wellness.GET("/rest/dailies", {
136
- params: { query: timeRangeQuery(params, this.accessToken) },
137
- });
138
- if (error) {
139
- throw new GarminApiError(
140
- `Garmin API error: ${response.status} ${response.statusText}`,
141
- response.status,
142
- JSON.stringify(error),
143
- );
144
- }
145
- console.log("[getDailies] raw response:", JSON.stringify(data?.[0], null, 2));
146
- return (data ?? []) as GarminDailyExtended[];
147
- }
148
-
149
- // ─── Activities ───────────────────────────────────────────────────────
150
-
151
- /**
152
- * Get activity summaries.
153
- *
154
- * Garmin API: `GET /wellness-api/rest/activities`
155
- */
156
- async getActivities(params: TimeRangeParams): Promise<GarminActivity[]> {
157
- const { data, error, response } = await this.wellness.GET(
158
- "/rest/activities",
159
- {
160
- params: { query: timeRangeQuery(params, this.accessToken) },
161
- },
162
- );
163
- if (error) {
164
- throw new GarminApiError(
165
- `Garmin API error: ${response.status} ${response.statusText}`,
166
- response.status,
167
- JSON.stringify(error),
168
- );
169
- }
170
- return (data ?? []) as GarminActivity[];
171
- }
172
-
173
- // ─── Activity Details ─────────────────────────────────────────────────
174
-
175
- /**
176
- * Get detailed activity summaries including GPS, heart rate, and sensor data.
177
- *
178
- * Garmin API: `GET /wellness-api/rest/activityDetails`
179
- */
180
- async getActivityDetails(
181
- params: TimeRangeParams,
182
- ): Promise<GarminActivityDetail[]> {
183
- const { data, error, response } = await this.wellness.GET(
184
- "/rest/activityDetails",
185
- {
186
- params: { query: timeRangeQuery(params, this.accessToken) },
187
- },
188
- );
189
- if (error) {
190
- throw new GarminApiError(
191
- `Garmin API error: ${response.status} ${response.statusText}`,
192
- response.status,
193
- JSON.stringify(error),
194
- );
195
- }
196
- return (data ?? []) as GarminActivityDetail[];
197
- }
198
-
199
- // ─── Activity File ────────────────────────────────────────────────────
200
-
201
- /**
202
- * Download a raw activity file (FIT, TCX, or GPX).
203
- *
204
- * Garmin API: `GET /wellness-api/rest/activityFile`
205
- *
206
- * @returns The raw file as an ArrayBuffer.
207
- */
208
- async getActivityFile(id: string): Promise<ArrayBuffer> {
209
- const url = `${this.baseUrl}/wellness-api/rest/activityFile?id=${encodeURIComponent(id)}`;
210
- const response = await fetch(url, {
211
- method: "GET",
212
- headers: {
213
- Authorization: `Bearer ${this.accessToken}`,
214
- },
215
- });
216
-
217
- if (!response.ok) {
218
- const body = await response.text().catch(() => "");
219
- throw new GarminApiError(
220
- `Garmin API error: ${response.status} ${response.statusText}`,
221
- response.status,
222
- body,
223
- );
224
- }
225
-
226
- return response.arrayBuffer();
227
- }
228
-
229
- // ─── Sleep ────────────────────────────────────────────────────────────
230
-
231
- /**
232
- * Get sleep summaries.
233
- *
234
- * Garmin API: `GET /wellness-api/rest/sleeps`
235
- */
236
- async getSleeps(params: TimeRangeParams): Promise<GarminSleepExtended[]> {
237
- const { data, error, response } = await this.wellness.GET("/rest/sleeps", {
238
- params: { query: timeRangeQuery(params, this.accessToken) },
239
- });
240
- if (error) {
241
- throw new GarminApiError(
242
- `Garmin API error: ${response.status} ${response.statusText}`,
243
- response.status,
244
- JSON.stringify(error),
245
- );
246
- }
247
- return (data ?? []) as GarminSleepExtended[];
248
- }
249
-
250
- // ─── Body Composition ─────────────────────────────────────────────────
251
-
252
- /**
253
- * Get body composition summaries.
254
- *
255
- * Garmin API: `GET /wellness-api/rest/bodyComps`
256
- */
257
- async getBodyCompositions(
258
- params: TimeRangeParams,
259
- ): Promise<GarminBodyComposition[]> {
260
- const { data, error, response } = await this.wellness.GET(
261
- "/rest/bodyComps",
262
- {
263
- params: { query: timeRangeQuery(params, this.accessToken) },
264
- },
265
- );
266
- if (error) {
267
- throw new GarminApiError(
268
- `Garmin API error: ${response.status} ${response.statusText}`,
269
- response.status,
270
- JSON.stringify(error),
271
- );
272
- }
273
- return (data ?? []) as GarminBodyComposition[];
274
- }
275
-
276
- // ─── Menstrual Cycle ──────────────────────────────────────────────────
277
-
278
- /**
279
- * Get menstrual cycle tracking data.
280
- *
281
- * Garmin API: `GET /wellness-api/rest/mct`
282
- */
283
- async getMenstrualCycleData(
284
- params: TimeRangeParams,
285
- ): Promise<GarminMenstrualCycle[]> {
286
- const { data, error, response } = await this.wellness.GET("/rest/mct", {
287
- params: { query: timeRangeQuery(params, this.accessToken) },
288
- });
289
- if (error) {
290
- throw new GarminApiError(
291
- `Garmin API error: ${response.status} ${response.statusText}`,
292
- response.status,
293
- JSON.stringify(error),
294
- );
295
- }
296
- return (data ?? []) as GarminMenstrualCycle[];
297
- }
298
-
299
- // ─── User Metrics ─────────────────────────────────────────────────────
300
-
301
- /**
302
- * Get user metrics (VO2 max, fitness age, etc.).
303
- *
304
- * Garmin API: `GET /wellness-api/rest/userMetrics`
305
- */
306
- async getUserMetrics(
307
- params: TimeRangeParams,
308
- ): Promise<GarminUserMetrics[]> {
309
- const { data, error, response } = await this.wellness.GET(
310
- "/rest/userMetrics",
311
- {
312
- params: { query: timeRangeQuery(params, this.accessToken) },
313
- },
314
- );
315
- if (error) {
316
- throw new GarminApiError(
317
- `Garmin API error: ${response.status} ${response.statusText}`,
318
- response.status,
319
- JSON.stringify(error),
320
- );
321
- }
322
- return (data ?? []) as GarminUserMetrics[];
323
- }
324
-
325
- // ─── Stress Details ───────────────────────────────────────────────────
326
-
327
- /**
328
- * Get stress detail summaries.
329
- *
330
- * Garmin API: `GET /wellness-api/rest/stressDetails`
331
- */
332
- async getStressDetails(
333
- params: TimeRangeParams,
334
- ): Promise<GarminStressDetail[]> {
335
- const { data, error, response } = await this.wellness.GET(
336
- "/rest/stressDetails",
337
- {
338
- params: { query: timeRangeQuery(params, this.accessToken) },
339
- },
340
- );
341
- if (error) {
342
- throw new GarminApiError(
343
- `Garmin API error: ${response.status} ${response.statusText}`,
344
- response.status,
345
- JSON.stringify(error),
346
- );
347
- }
348
- return (data ?? []) as GarminStressDetail[];
349
- }
350
-
351
- // ─── Skin Temperature ─────────────────────────────────────────────────
352
-
353
- /**
354
- * Get skin temperature summaries.
355
- *
356
- * Garmin API: `GET /wellness-api/rest/skinTemp`
357
- */
358
- async getSkinTemperature(
359
- params: TimeRangeParams,
360
- ): Promise<GarminSkinTemperature[]> {
361
- const { data, error, response } = await this.wellness.GET(
362
- "/rest/skinTemp",
363
- {
364
- params: { query: timeRangeQuery(params, this.accessToken) },
365
- },
366
- );
367
- if (error) {
368
- throw new GarminApiError(
369
- `Garmin API error: ${response.status} ${response.statusText}`,
370
- response.status,
371
- JSON.stringify(error),
372
- );
373
- }
374
- return (data ?? []) as GarminSkinTemperature[];
375
- }
376
-
377
- // ─── Respiration ──────────────────────────────────────────────────────
378
-
379
- /**
380
- * Get respiration summaries.
381
- *
382
- * Garmin API: `GET /wellness-api/rest/respiration`
383
- */
384
- async getRespiration(
385
- params: TimeRangeParams,
386
- ): Promise<GarminRespiration[]> {
387
- const { data, error, response } = await this.wellness.GET(
388
- "/rest/respiration",
389
- {
390
- params: { query: timeRangeQuery(params, this.accessToken) },
391
- },
392
- );
393
- if (error) {
394
- throw new GarminApiError(
395
- `Garmin API error: ${response.status} ${response.statusText}`,
396
- response.status,
397
- JSON.stringify(error),
398
- );
399
- }
400
- return (data ?? []) as GarminRespiration[];
401
- }
402
-
403
- // ─── Pulse Ox ─────────────────────────────────────────────────────────
404
-
405
- /**
406
- * Get pulse oximetry (SpO2) summaries.
407
- *
408
- * Garmin API: `GET /wellness-api/rest/pulseOx`
409
- */
410
- async getPulseOx(params: TimeRangeParams): Promise<GarminPulseOx[]> {
411
- const { data, error, response } = await this.wellness.GET(
412
- "/rest/pulseOx",
413
- {
414
- params: { query: timeRangeQuery(params, this.accessToken) },
415
- },
416
- );
417
- if (error) {
418
- throw new GarminApiError(
419
- `Garmin API error: ${response.status} ${response.statusText}`,
420
- response.status,
421
- JSON.stringify(error),
422
- );
423
- }
424
- return (data ?? []) as GarminPulseOx[];
425
- }
426
-
427
- // ─── Move IQ ──────────────────────────────────────────────────────────
428
-
429
- /**
430
- * Get Move IQ auto-detected activity events.
431
- *
432
- * Garmin API: `GET /wellness-api/rest/moveiq`
433
- */
434
- async getMoveIQ(params: TimeRangeParams): Promise<GarminMoveIQEvent[]> {
435
- const { data, error, response } = await this.wellness.GET(
436
- "/rest/moveiq",
437
- {
438
- params: { query: timeRangeQuery(params, this.accessToken) },
439
- },
440
- );
441
- if (error) {
442
- throw new GarminApiError(
443
- `Garmin API error: ${response.status} ${response.statusText}`,
444
- response.status,
445
- JSON.stringify(error),
446
- );
447
- }
448
- return (data ?? []) as GarminMoveIQEvent[];
449
- }
450
-
451
- // ─── HRV ──────────────────────────────────────────────────────────────
452
-
453
- /**
454
- * Get heart rate variability (HRV) summaries.
455
- *
456
- * Garmin API: `GET /wellness-api/rest/hrv`
457
- */
458
- async getHRV(params: TimeRangeParams): Promise<GarminHRVSummary[]> {
459
- const { data, error, response } = await this.wellness.GET("/rest/hrv", {
460
- params: { query: timeRangeQuery(params, this.accessToken) },
461
- });
462
- if (error) {
463
- throw new GarminApiError(
464
- `Garmin API error: ${response.status} ${response.statusText}`,
465
- response.status,
466
- JSON.stringify(error),
467
- );
468
- }
469
- return (data ?? []) as GarminHRVSummary[];
470
- }
471
-
472
- // ─── Health Snapshot ──────────────────────────────────────────────────
473
-
474
- /**
475
- * Get health snapshot summaries.
476
- *
477
- * Garmin API: `GET /wellness-api/rest/healthSnapshot`
478
- */
479
- async getHealthSnapshot(
480
- params: TimeRangeParams,
481
- ): Promise<GarminHealthSnapshot[]> {
482
- const { data, error, response } = await this.wellness.GET(
483
- "/rest/healthSnapshot",
484
- {
485
- params: { query: timeRangeQuery(params, this.accessToken) },
486
- },
487
- );
488
- if (error) {
489
- throw new GarminApiError(
490
- `Garmin API error: ${response.status} ${response.statusText}`,
491
- response.status,
492
- JSON.stringify(error),
493
- );
494
- }
495
- return (data ?? []) as GarminHealthSnapshot[];
496
- }
497
-
498
- // ─── Epochs ───────────────────────────────────────────────────────────
499
-
500
- /**
501
- * Get epoch (15-minute interval) summaries.
502
- *
503
- * Garmin API: `GET /wellness-api/rest/epochs`
504
- */
505
- async getEpochs(params: TimeRangeParams): Promise<GarminEpoch[]> {
506
- const { data, error, response } = await this.wellness.GET("/rest/epochs", {
507
- params: { query: timeRangeQuery(params, this.accessToken) },
508
- });
509
- if (error) {
510
- throw new GarminApiError(
511
- `Garmin API error: ${response.status} ${response.statusText}`,
512
- response.status,
513
- JSON.stringify(error),
514
- );
515
- }
516
- return (data ?? []) as GarminEpoch[];
517
- }
518
-
519
- // ─── Blood Pressure ───────────────────────────────────────────────────
520
-
521
- /**
522
- * Get blood pressure summaries.
523
- *
524
- * Garmin API: `GET /wellness-api/rest/bloodPressures`
525
- */
526
- async getBloodPressures(
527
- params: TimeRangeParams,
528
- ): Promise<GarminBloodPressure[]> {
529
- const { data, error, response } = await this.wellness.GET(
530
- "/rest/bloodPressures",
531
- {
532
- params: { query: timeRangeQuery(params, this.accessToken) },
533
- },
534
- );
535
- if (error) {
536
- throw new GarminApiError(
537
- `Garmin API error: ${response.status} ${response.statusText}`,
538
- response.status,
539
- JSON.stringify(error),
540
- );
541
- }
542
- return (data ?? []) as GarminBloodPressure[];
543
- }
544
-
545
- // ─── Manually Updated Activities ──────────────────────────────────────
546
-
547
- /**
548
- * Get manually created or edited activities.
549
- *
550
- * Garmin API: `GET /wellness-api/rest/manuallyUpdatedActivities`
551
- */
552
- async getManuallyUpdatedActivities(
553
- params: TimeRangeParams,
554
- ): Promise<GarminActivity[]> {
555
- const { data, error, response } = await this.wellness.GET(
556
- "/rest/manuallyUpdatedActivities",
557
- {
558
- params: { query: timeRangeQuery(params, this.accessToken) },
559
- },
560
- );
561
- if (error) {
562
- throw new GarminApiError(
563
- `Garmin API error: ${response.status} ${response.statusText}`,
564
- response.status,
565
- JSON.stringify(error),
566
- );
567
- }
568
- return (data ?? []) as GarminActivity[];
569
- }
570
-
571
- // ─── Solar Intensity ──────────────────────────────────────────────────
572
-
573
- /**
574
- * Get solar intensity summaries.
575
- *
576
- * Garmin API: `GET /wellness-api/rest/solarIntensity`
577
- */
578
- async getSolarIntensity(
579
- params: TimeRangeParams,
580
- ): Promise<GarminSolar[]> {
581
- const { data, error, response } = await this.wellness.GET(
582
- "/rest/solarIntensity",
583
- {
584
- params: { query: timeRangeQuery(params, this.accessToken) },
585
- },
586
- );
587
- if (error) {
588
- throw new GarminApiError(
589
- `Garmin API error: ${response.status} ${response.statusText}`,
590
- response.status,
591
- JSON.stringify(error),
592
- );
593
- }
594
- return (data ?? []) as GarminSolar[];
595
- }
596
-
597
- // ─── Backfill ─────────────────────────────────────────────────────────
598
-
599
- /**
600
- * Request historical data backfill from Garmin.
601
- *
602
- * Garmin processes backfill requests asynchronously and delivers data
603
- * via the configured webhook endpoint. Maximum range: 90 days per request.
604
- *
605
- * Uses manual fetch because the spec defines individual backfill paths
606
- * (e.g. `/rest/backfill/dailies`) but this method accepts a dynamic
607
- * summaryType string.
608
- *
609
- * @param summaryType - The data type to backfill (e.g., "dailies", "activities", "sleeps", "bodyComps")
610
- * @param params - Time range for the backfill
611
- */
612
- async requestBackfill(
613
- summaryType: string,
614
- params: TimeRangeParams,
615
- ): Promise<void> {
616
- const query = timeRangeQuery(params, this.accessToken);
617
- const qs = new URLSearchParams(query).toString();
618
- const url = `${this.baseUrl}/wellness-api/rest/backfill/${summaryType}?${qs}`;
619
-
620
- const response = await fetch(url, {
621
- method: "GET",
622
- headers: {
623
- Authorization: `Bearer ${this.accessToken}`,
624
- Accept: "application/json",
625
- },
626
- });
627
-
628
- if (!response.ok) {
629
- const body = await response.text().catch(() => "");
630
- throw new GarminApiError(
631
- `Garmin API error: ${response.status} ${response.statusText}`,
632
- response.status,
633
- body,
634
- );
635
- }
636
- }
637
-
638
- // ─── User Deregistration ──────────────────────────────────────────────
639
-
640
- /**
641
- * Delete the user's registration with Garmin.
642
- *
643
- * Must be called when the user disconnects or deletes their account
644
- * to comply with Garmin's API requirements.
645
- */
646
- async deleteUserRegistration(): Promise<void> {
647
- const { error, response } = await this.wellness.DELETE(
648
- "/rest/user/registration",
649
- );
650
-
651
- if (error) {
652
- throw new GarminApiError(
653
- `Garmin API error: ${response.status} ${response.statusText}`,
654
- response.status,
655
- JSON.stringify(error),
656
- );
657
- }
658
- }
659
-
660
- // ─── Training API V2 ─────────────────────────────────────────────────
661
- // These endpoints are NOT part of the Wellness API spec, so they use
662
- // manual fetch.
663
-
664
- /**
665
- * Create a workout in Garmin Connect.
666
- *
667
- * Garmin API: `POST /workoutportal/workout/v2`
668
- * Note: uses a different base path than other Training API endpoints.
669
- */
670
- async createWorkout(workout: GarminWorkout): Promise<GarminWorkout> {
671
- return this.post<GarminWorkout>("/workoutportal/workout/v2", workout);
672
- }
673
-
674
- /**
675
- * Retrieve a workout by ID.
676
- *
677
- * Garmin API: `GET /training-api/workout/v2/{workoutId}`
678
- */
679
- async getWorkout(workoutId: number): Promise<GarminWorkout> {
680
- return this.get<GarminWorkout>(
681
- `/training-api/workout/v2/${workoutId}`,
682
- );
683
- }
684
-
685
- /**
686
- * Update a workout by ID.
687
- *
688
- * Garmin API: `PUT /training-api/workout/v2/{workoutId}`
689
- */
690
- async updateWorkout(
691
- workoutId: number,
692
- workout: GarminWorkout,
693
- ): Promise<GarminWorkout> {
694
- return this.put<GarminWorkout>(
695
- `/training-api/workout/v2/${workoutId}`,
696
- workout,
697
- );
698
- }
699
-
700
- /**
701
- * Delete a workout by ID.
702
- *
703
- * Garmin API: `DELETE /training-api/workout/v2/{workoutId}`
704
- */
705
- async deleteWorkout(workoutId: number): Promise<void> {
706
- await this.del(`/training-api/workout/v2/${workoutId}`);
707
- }
708
-
709
- /**
710
- * Schedule a workout to a specific date on the user's calendar.
711
- *
712
- * Garmin API: `POST /training-api/schedule/`
713
- */
714
- async createSchedule(
715
- workoutId: number,
716
- date: string,
717
- ): Promise<GarminWorkoutSchedule> {
718
- return this.post<GarminWorkoutSchedule>("/training-api/schedule/", {
719
- workoutId,
720
- date,
721
- });
722
- }
723
-
724
- /**
725
- * Retrieve workout schedules for a date range.
726
- *
727
- * Garmin API: `GET /training-api/schedule?startDate=...&endDate=...`
728
- */
729
- async getSchedulesByDate(
730
- startDate: string,
731
- endDate: string,
732
- ): Promise<GarminWorkoutSchedule[]> {
733
- return this.get<GarminWorkoutSchedule[]>("/training-api/schedule", {
734
- startDate,
735
- endDate,
736
- });
737
- }
738
-
739
- /**
740
- * Delete a workout schedule by ID.
741
- *
742
- * Garmin API: `DELETE /training-api/schedule/{scheduleId}`
743
- */
744
- async deleteSchedule(scheduleId: number): Promise<void> {
745
- await this.del(`/training-api/schedule/${scheduleId}`);
746
- }
747
-
748
- // ─── Internal (Training API helpers) ──────────────────────────────────
749
-
750
- private async get<T>(
751
- path: string,
752
- queryParams?: Record<string, string>,
753
- ): Promise<T> {
754
- const fullUrl = `${this.baseUrl}${path}`;
755
- const qs = queryParams
756
- ? `?${new URLSearchParams(queryParams).toString()}`
757
- : "";
758
- const requestUrl = `${fullUrl}${qs}`;
759
-
760
- const response = await fetch(requestUrl, {
761
- method: "GET",
762
- headers: {
763
- Authorization: `Bearer ${this.accessToken}`,
764
- Accept: "application/json",
765
- },
766
- });
767
-
768
- if (!response.ok) {
769
- const body = await response.text().catch(() => "");
770
- throw new GarminApiError(
771
- `Garmin API error: ${response.status} ${response.statusText}`,
772
- response.status,
773
- body,
774
- );
775
- }
776
-
777
- return (await response.json()) as T;
778
- }
779
-
780
- private async post<T>(path: string, body: unknown): Promise<T> {
781
- const url = `${this.baseUrl}${path}`;
782
- const response = await fetch(url, {
783
- method: "POST",
784
- headers: {
785
- Authorization: `Bearer ${this.accessToken}`,
786
- "Content-Type": "application/json",
787
- Accept: "application/json",
788
- },
789
- body: JSON.stringify(body),
790
- });
791
-
792
- if (!response.ok) {
793
- const text = await response.text().catch(() => "");
794
- const isTrainingApi =
795
- path.includes("/workoutportal/") || path.includes("/training-api/");
796
- const hint =
797
- isTrainingApi && response.status === 401
798
- ? " — Ensure the Garmin app is registered for the Training API program " +
799
- "and the user has WORKOUT_IMPORT permission."
800
- : "";
801
- throw new GarminApiError(
802
- `Garmin API error: ${response.status} ${response.statusText}${hint}`,
803
- response.status,
804
- text,
805
- );
806
- }
807
-
808
- return (await response.json()) as T;
809
- }
810
-
811
- private async put<T>(path: string, body: unknown): Promise<T> {
812
- const url = `${this.baseUrl}${path}`;
813
- const response = await fetch(url, {
814
- method: "PUT",
815
- headers: {
816
- Authorization: `Bearer ${this.accessToken}`,
817
- "Content-Type": "application/json",
818
- Accept: "application/json",
819
- },
820
- body: JSON.stringify(body),
821
- });
822
-
823
- if (!response.ok) {
824
- const text = await response.text().catch(() => "");
825
- throw new GarminApiError(
826
- `Garmin API error: ${response.status} ${response.statusText}`,
827
- response.status,
828
- text,
829
- );
830
- }
831
-
832
- return (await response.json()) as T;
833
- }
834
-
835
- private async del(path: string): Promise<void> {
836
- const url = `${this.baseUrl}${path}`;
837
- const response = await fetch(url, {
838
- method: "DELETE",
839
- headers: {
840
- Authorization: `Bearer ${this.accessToken}`,
841
- },
842
- });
843
-
844
- if (!response.ok) {
845
- const text = await response.text().catch(() => "");
846
- throw new GarminApiError(
847
- `Garmin API error: ${response.status} ${response.statusText}`,
848
- response.status,
849
- text,
850
- );
851
- }
852
- }
853
- }
854
-
855
- // ─── Helpers ──────────────────────────────────────────────────────────────────
856
-
857
- export interface TimeRangeParams {
858
- /** Start of the time range as Unix epoch seconds. */
859
- uploadStartTimeInSeconds: number;
860
- /** End of the time range as Unix epoch seconds. */
861
- uploadEndTimeInSeconds: number;
862
- }
863
-
864
- function timeRangeQuery(
865
- params: TimeRangeParams,
866
- token?: string,
867
- ): { uploadStartTimeInSeconds: string; uploadEndTimeInSeconds: string; token?: string } {
868
- return {
869
- uploadStartTimeInSeconds: String(params.uploadStartTimeInSeconds),
870
- uploadEndTimeInSeconds: String(params.uploadEndTimeInSeconds),
871
- ...(token ? { token } : {}),
872
- };
873
- }
874
-
875
- // ─── Error ────────────────────────────────────────────────────────────────────
876
-
877
- export class GarminApiError extends Error {
878
- constructor(
879
- message: string,
880
- public readonly status: number,
881
- public readonly body: string,
882
- ) {
883
- super(`${message} — ${body}`);
884
- this.name = "GarminApiError";
885
- }
886
- }