@nativesquare/soma 0.7.3 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (390) hide show
  1. package/dist/client/index.d.ts +17 -55
  2. package/dist/client/index.d.ts.map +1 -1
  3. package/dist/client/index.js +63 -13
  4. package/dist/client/index.js.map +1 -1
  5. package/dist/component/_generated/api.d.ts +80 -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 +153 -120
  9. package/dist/component/_generated/component.d.ts.map +1 -1
  10. package/dist/component/garmin/private.d.ts +475 -0
  11. package/dist/component/garmin/private.d.ts.map +1 -0
  12. package/dist/component/garmin/private.js +1614 -0
  13. package/dist/component/garmin/private.js.map +1 -0
  14. package/dist/component/{garmin.d.ts → garmin/public.d.ts} +25 -52
  15. package/dist/component/garmin/public.d.ts.map +1 -0
  16. package/dist/component/{garmin.js → garmin/public.js} +301 -215
  17. package/dist/component/garmin/public.js.map +1 -0
  18. package/dist/component/garmin/schemas/activity.d.ts +94 -0
  19. package/dist/component/garmin/schemas/activity.d.ts.map +1 -0
  20. package/dist/component/garmin/schemas/activity.js +27 -0
  21. package/dist/component/garmin/schemas/activity.js.map +1 -0
  22. package/dist/component/garmin/schemas/activityDetails.d.ts +146 -0
  23. package/dist/component/garmin/schemas/activityDetails.d.ts.map +1 -0
  24. package/dist/component/garmin/schemas/activityDetails.js +27 -0
  25. package/dist/component/garmin/schemas/activityDetails.js.map +1 -0
  26. package/dist/component/garmin/schemas/bloodPressure.d.ts +38 -0
  27. package/dist/component/garmin/schemas/bloodPressure.d.ts.map +1 -0
  28. package/dist/component/garmin/schemas/bloodPressure.js +27 -0
  29. package/dist/component/garmin/schemas/bloodPressure.js.map +1 -0
  30. package/dist/component/garmin/schemas/bodyCompositions.d.ts +42 -0
  31. package/dist/component/garmin/schemas/bodyCompositions.d.ts.map +1 -0
  32. package/dist/component/garmin/schemas/bodyCompositions.js +27 -0
  33. package/dist/component/garmin/schemas/bodyCompositions.js.map +1 -0
  34. package/dist/component/garmin/schemas/dailies.d.ts +98 -0
  35. package/dist/component/garmin/schemas/dailies.d.ts.map +1 -0
  36. package/dist/component/garmin/schemas/dailies.js +27 -0
  37. package/dist/component/garmin/schemas/dailies.js.map +1 -0
  38. package/dist/component/garmin/schemas/epochs.d.ts +54 -0
  39. package/dist/component/garmin/schemas/epochs.d.ts.map +1 -0
  40. package/dist/component/garmin/schemas/epochs.js +27 -0
  41. package/dist/component/garmin/schemas/epochs.js.map +1 -0
  42. package/dist/component/garmin/schemas/healthSnapshot.d.ts +48 -0
  43. package/dist/component/garmin/schemas/healthSnapshot.d.ts.map +1 -0
  44. package/dist/component/garmin/schemas/healthSnapshot.js +27 -0
  45. package/dist/component/garmin/schemas/healthSnapshot.js.map +1 -0
  46. package/dist/component/garmin/schemas/hrvSummary.d.ts +40 -0
  47. package/dist/component/garmin/schemas/hrvSummary.d.ts.map +1 -0
  48. package/dist/component/garmin/schemas/hrvSummary.js +27 -0
  49. package/dist/component/garmin/schemas/hrvSummary.js.map +1 -0
  50. package/dist/component/garmin/schemas/manuallyUpdatedActivities.d.ts +94 -0
  51. package/dist/component/garmin/schemas/manuallyUpdatedActivities.d.ts.map +1 -0
  52. package/dist/component/garmin/schemas/manuallyUpdatedActivities.js +27 -0
  53. package/dist/component/garmin/schemas/manuallyUpdatedActivities.js.map +1 -0
  54. package/dist/component/garmin/schemas/menstrualCycleTracking.d.ts +100 -0
  55. package/dist/component/garmin/schemas/menstrualCycleTracking.d.ts.map +1 -0
  56. package/dist/component/garmin/schemas/menstrualCycleTracking.js +28 -0
  57. package/dist/component/garmin/schemas/menstrualCycleTracking.js.map +1 -0
  58. package/dist/component/garmin/schemas/moveIQ.d.ts +40 -0
  59. package/dist/component/garmin/schemas/moveIQ.d.ts.map +1 -0
  60. package/dist/component/garmin/schemas/moveIQ.js +27 -0
  61. package/dist/component/garmin/schemas/moveIQ.js.map +1 -0
  62. package/dist/component/garmin/schemas/pulseOx.d.ts +38 -0
  63. package/dist/component/garmin/schemas/pulseOx.d.ts.map +1 -0
  64. package/dist/component/garmin/schemas/pulseOx.js +28 -0
  65. package/dist/component/garmin/schemas/pulseOx.js.map +1 -0
  66. package/dist/component/garmin/schemas/respiration.d.ts +34 -0
  67. package/dist/component/garmin/schemas/respiration.d.ts.map +1 -0
  68. package/dist/component/garmin/schemas/respiration.js +28 -0
  69. package/dist/component/garmin/schemas/respiration.js.map +1 -0
  70. package/dist/component/garmin/schemas/skinTemperature.d.ts +36 -0
  71. package/dist/component/garmin/schemas/skinTemperature.d.ts.map +1 -0
  72. package/dist/component/garmin/schemas/skinTemperature.js +28 -0
  73. package/dist/component/garmin/schemas/skinTemperature.js.map +1 -0
  74. package/dist/component/garmin/schemas/sleeps.d.ts +88 -0
  75. package/dist/component/garmin/schemas/sleeps.d.ts.map +1 -0
  76. package/dist/component/garmin/schemas/sleeps.js +27 -0
  77. package/dist/component/garmin/schemas/sleeps.js.map +1 -0
  78. package/dist/component/garmin/schemas/stress.d.ts +70 -0
  79. package/dist/component/garmin/schemas/stress.d.ts.map +1 -0
  80. package/dist/component/garmin/schemas/stress.js +28 -0
  81. package/dist/component/garmin/schemas/stress.js.map +1 -0
  82. package/dist/component/garmin/schemas/userMetrics.d.ts +36 -0
  83. package/dist/component/garmin/schemas/userMetrics.d.ts.map +1 -0
  84. package/dist/component/garmin/schemas/userMetrics.js +28 -0
  85. package/dist/component/garmin/schemas/userMetrics.js.map +1 -0
  86. package/dist/component/garmin/transform/activity.d.ts +13 -0
  87. package/dist/component/garmin/transform/activity.d.ts.map +1 -0
  88. package/dist/component/garmin/transform/activity.js +111 -0
  89. package/dist/component/garmin/transform/activity.js.map +1 -0
  90. package/dist/component/garmin/transform/activityDetails.d.ts +13 -0
  91. package/dist/component/garmin/transform/activityDetails.d.ts.map +1 -0
  92. package/dist/component/garmin/transform/activityDetails.js +173 -0
  93. package/dist/component/garmin/transform/activityDetails.js.map +1 -0
  94. package/dist/component/garmin/transform/bloodPressure.d.ts +12 -0
  95. package/dist/component/garmin/transform/bloodPressure.d.ts.map +1 -0
  96. package/dist/component/garmin/transform/bloodPressure.js +33 -0
  97. package/dist/component/garmin/transform/bloodPressure.js.map +1 -0
  98. package/dist/component/garmin/transform/bodyCompositions.d.ts +12 -0
  99. package/dist/component/garmin/transform/bodyCompositions.d.ts.map +1 -0
  100. package/dist/component/garmin/transform/bodyCompositions.js +42 -0
  101. package/dist/component/garmin/transform/bodyCompositions.js.map +1 -0
  102. package/dist/component/garmin/transform/dailies.d.ts +12 -0
  103. package/dist/component/garmin/transform/dailies.d.ts.map +1 -0
  104. package/dist/component/garmin/transform/dailies.js +132 -0
  105. package/dist/component/garmin/transform/dailies.js.map +1 -0
  106. package/dist/component/garmin/transform/epochs.d.ts +13 -0
  107. package/dist/component/garmin/transform/epochs.d.ts.map +1 -0
  108. package/dist/component/garmin/transform/epochs.js +76 -0
  109. package/dist/component/garmin/transform/epochs.js.map +1 -0
  110. package/dist/component/garmin/transform/healthSnapshot.d.ts +12 -0
  111. package/dist/component/garmin/transform/healthSnapshot.d.ts.map +1 -0
  112. package/dist/component/garmin/transform/healthSnapshot.js +111 -0
  113. package/dist/component/garmin/transform/healthSnapshot.js.map +1 -0
  114. package/dist/component/garmin/transform/hrvSummary.d.ts +12 -0
  115. package/dist/component/garmin/transform/hrvSummary.d.ts.map +1 -0
  116. package/dist/component/garmin/transform/hrvSummary.js +45 -0
  117. package/dist/component/garmin/transform/hrvSummary.js.map +1 -0
  118. package/dist/component/garmin/transform/manuallyUpdatedActivities.d.ts +11 -0
  119. package/dist/component/garmin/transform/manuallyUpdatedActivities.d.ts.map +1 -0
  120. package/dist/component/garmin/transform/manuallyUpdatedActivities.js +20 -0
  121. package/dist/component/garmin/transform/manuallyUpdatedActivities.js.map +1 -0
  122. package/dist/component/garmin/transform/menstrualCycleTracking.d.ts +10 -0
  123. package/dist/component/garmin/transform/menstrualCycleTracking.d.ts.map +1 -0
  124. package/dist/component/garmin/transform/menstrualCycleTracking.js +43 -0
  125. package/dist/component/garmin/transform/menstrualCycleTracking.js.map +1 -0
  126. package/dist/component/garmin/transform/moveIQ.d.ts +17 -0
  127. package/dist/component/garmin/transform/moveIQ.d.ts.map +1 -0
  128. package/dist/component/garmin/transform/moveIQ.js +41 -0
  129. package/dist/component/garmin/transform/moveIQ.js.map +1 -0
  130. package/dist/component/garmin/transform/pulseOx.d.ts +12 -0
  131. package/dist/component/garmin/transform/pulseOx.d.ts.map +1 -0
  132. package/dist/component/garmin/transform/pulseOx.js +46 -0
  133. package/dist/component/garmin/transform/pulseOx.js.map +1 -0
  134. package/dist/component/garmin/transform/respiration.d.ts +12 -0
  135. package/dist/component/garmin/transform/respiration.d.ts.map +1 -0
  136. package/dist/component/garmin/transform/respiration.js +54 -0
  137. package/dist/component/garmin/transform/respiration.js.map +1 -0
  138. package/dist/component/garmin/transform/skinTemperature.d.ts +12 -0
  139. package/dist/component/garmin/transform/skinTemperature.d.ts.map +1 -0
  140. package/dist/component/garmin/transform/skinTemperature.js +38 -0
  141. package/dist/component/garmin/transform/skinTemperature.js.map +1 -0
  142. package/dist/component/garmin/transform/sleeps.d.ts +55 -0
  143. package/dist/component/garmin/transform/sleeps.d.ts.map +1 -0
  144. package/dist/component/garmin/transform/sleeps.js +120 -0
  145. package/dist/component/garmin/transform/sleeps.js.map +1 -0
  146. package/dist/component/garmin/transform/stress.d.ts +12 -0
  147. package/dist/component/garmin/transform/stress.d.ts.map +1 -0
  148. package/dist/component/garmin/transform/stress.js +56 -0
  149. package/dist/component/garmin/transform/stress.js.map +1 -0
  150. package/dist/component/garmin/transform/userMetrics.d.ts +12 -0
  151. package/dist/component/garmin/transform/userMetrics.d.ts.map +1 -0
  152. package/dist/component/garmin/transform/userMetrics.js +48 -0
  153. package/dist/component/garmin/transform/userMetrics.js.map +1 -0
  154. package/dist/component/garmin/types/garmin.d.ts +21 -0
  155. package/dist/component/garmin/types/garmin.d.ts.map +1 -0
  156. package/dist/component/garmin/types/garmin.js +6 -0
  157. package/dist/component/garmin/types/garmin.js.map +1 -0
  158. package/dist/component/garmin/types/zod/zod.gen.d.ts +1319 -0
  159. package/dist/component/garmin/types/zod/zod.gen.d.ts.map +1 -0
  160. package/dist/component/garmin/types/zod/zod.gen.js +784 -0
  161. package/dist/component/garmin/types/zod/zod.gen.js.map +1 -0
  162. package/dist/component/garmin/webhooks.d.ts +141 -0
  163. package/dist/component/garmin/webhooks.d.ts.map +1 -0
  164. package/dist/component/garmin/webhooks.js +766 -0
  165. package/dist/component/garmin/webhooks.js.map +1 -0
  166. package/dist/component/private.d.ts +20 -2
  167. package/dist/component/private.d.ts.map +1 -1
  168. package/dist/component/private.js +18 -0
  169. package/dist/component/private.js.map +1 -1
  170. package/dist/component/public.d.ts +433 -387
  171. package/dist/component/public.d.ts.map +1 -1
  172. package/dist/component/public.js +12 -2
  173. package/dist/component/public.js.map +1 -1
  174. package/dist/component/schema.d.ts +217 -162
  175. package/dist/component/schema.d.ts.map +1 -1
  176. package/dist/component/schema.js +2 -1
  177. package/dist/component/schema.js.map +1 -1
  178. package/dist/component/strava/private.d.ts +30 -0
  179. package/dist/component/strava/private.d.ts.map +1 -0
  180. package/dist/component/strava/private.js +71 -0
  181. package/dist/component/strava/private.js.map +1 -0
  182. package/dist/component/{strava.d.ts → strava/public.d.ts} +3 -31
  183. package/dist/component/strava/public.d.ts.map +1 -0
  184. package/dist/component/{strava.js → strava/public.js} +22 -101
  185. package/dist/component/strava/public.js.map +1 -0
  186. package/dist/component/validators/activity.d.ts +6 -0
  187. package/dist/component/validators/activity.d.ts.map +1 -1
  188. package/dist/component/validators/activity.js.map +1 -1
  189. package/dist/component/validators/body.d.ts +20 -14
  190. package/dist/component/validators/body.d.ts.map +1 -1
  191. package/dist/component/validators/body.js.map +1 -1
  192. package/dist/component/validators/connection.d.ts +1 -0
  193. package/dist/component/validators/connection.d.ts.map +1 -1
  194. package/dist/component/validators/connection.js +2 -0
  195. package/dist/component/validators/connection.js.map +1 -1
  196. package/dist/component/validators/daily.d.ts +46 -5
  197. package/dist/component/validators/daily.d.ts.map +1 -1
  198. package/dist/component/validators/daily.js +10 -1
  199. package/dist/component/validators/daily.js.map +1 -1
  200. package/dist/component/validators/enums.d.ts +2 -2
  201. package/dist/component/validators/menstruation.d.ts +5 -0
  202. package/dist/component/validators/menstruation.d.ts.map +1 -1
  203. package/dist/component/validators/menstruation.js.map +1 -1
  204. package/dist/component/validators/plannedWorkout.d.ts +5 -1
  205. package/dist/component/validators/plannedWorkout.d.ts.map +1 -1
  206. package/dist/component/validators/plannedWorkout.js +4 -0
  207. package/dist/component/validators/plannedWorkout.js.map +1 -1
  208. package/dist/component/validators/sleep.d.ts +8 -8
  209. package/dist/garmin/bloodPressure.d.ts +28 -0
  210. package/dist/garmin/bloodPressure.d.ts.map +1 -0
  211. package/dist/garmin/bloodPressure.js +34 -0
  212. package/dist/garmin/bloodPressure.js.map +1 -0
  213. package/dist/garmin/body.js +1 -1
  214. package/dist/garmin/body.js.map +1 -1
  215. package/dist/garmin/client.d.ts +117 -17
  216. package/dist/garmin/client.d.ts.map +1 -1
  217. package/dist/garmin/client.js +337 -43
  218. package/dist/garmin/client.js.map +1 -1
  219. package/dist/garmin/daily.d.ts.map +1 -1
  220. package/dist/garmin/daily.js +3 -3
  221. package/dist/garmin/daily.js.map +1 -1
  222. package/dist/garmin/hrv.d.ts +30 -0
  223. package/dist/garmin/hrv.d.ts.map +1 -0
  224. package/dist/garmin/hrv.js +45 -0
  225. package/dist/garmin/hrv.js.map +1 -0
  226. package/dist/garmin/index.d.ts +16 -4
  227. package/dist/garmin/index.d.ts.map +1 -1
  228. package/dist/garmin/index.js +8 -2
  229. package/dist/garmin/index.js.map +1 -1
  230. package/dist/garmin/maps/activity-type.d.ts +1 -2
  231. package/dist/garmin/maps/activity-type.d.ts.map +1 -1
  232. package/dist/garmin/maps/activity-type.js +1 -0
  233. package/dist/garmin/maps/activity-type.js.map +1 -1
  234. package/dist/garmin/menstruation.d.ts +6 -4
  235. package/dist/garmin/menstruation.d.ts.map +1 -1
  236. package/dist/garmin/menstruation.js +12 -8
  237. package/dist/garmin/menstruation.js.map +1 -1
  238. package/dist/garmin/pulseOx.d.ts +24 -0
  239. package/dist/garmin/pulseOx.d.ts.map +1 -0
  240. package/dist/garmin/pulseOx.js +33 -0
  241. package/dist/garmin/pulseOx.js.map +1 -0
  242. package/dist/garmin/respiration.d.ts +29 -0
  243. package/dist/garmin/respiration.d.ts.map +1 -0
  244. package/dist/garmin/respiration.js +42 -0
  245. package/dist/garmin/respiration.js.map +1 -0
  246. package/dist/garmin/skinTemp.d.ts +27 -0
  247. package/dist/garmin/skinTemp.d.ts.map +1 -0
  248. package/dist/garmin/skinTemp.js +35 -0
  249. package/dist/garmin/skinTemp.js.map +1 -0
  250. package/dist/garmin/sleep.d.ts +4 -4
  251. package/dist/garmin/sleep.d.ts.map +1 -1
  252. package/dist/garmin/sleep.js +15 -9
  253. package/dist/garmin/sleep.js.map +1 -1
  254. package/dist/garmin/stressDetails.d.ts +30 -0
  255. package/dist/garmin/stressDetails.d.ts.map +1 -0
  256. package/dist/garmin/stressDetails.js +49 -0
  257. package/dist/garmin/stressDetails.js.map +1 -0
  258. package/dist/garmin/sync.d.ts +14 -0
  259. package/dist/garmin/sync.d.ts.map +1 -1
  260. package/dist/garmin/sync.js +290 -7
  261. package/dist/garmin/sync.js.map +1 -1
  262. package/dist/garmin/types.d.ts +77 -186
  263. package/dist/garmin/types.d.ts.map +1 -1
  264. package/dist/garmin/types.js +4 -2
  265. package/dist/garmin/types.js.map +1 -1
  266. package/dist/garmin/userMetrics.d.ts +23 -0
  267. package/dist/garmin/userMetrics.d.ts.map +1 -0
  268. package/dist/garmin/userMetrics.js +41 -0
  269. package/dist/garmin/userMetrics.js.map +1 -0
  270. package/dist/validators.d.ts +138 -56
  271. package/dist/validators.d.ts.map +1 -1
  272. package/dist/validators.js +2 -2
  273. package/dist/validators.js.map +1 -1
  274. package/package.json +130 -124
  275. package/src/client/index.ts +86 -18
  276. package/src/component/_generated/api.ts +96 -4
  277. package/src/component/_generated/component.ts +271 -144
  278. package/src/{garmin → component/garmin}/auth.ts +8 -1
  279. package/src/component/garmin/client.ts +39 -0
  280. package/src/component/garmin/private.ts +1798 -0
  281. package/src/component/garmin/public.ts +938 -0
  282. package/src/component/garmin/schemas/activity.ts +40 -0
  283. package/src/component/garmin/schemas/activityDetails.ts +45 -0
  284. package/src/component/garmin/schemas/bloodPressure.ts +38 -0
  285. package/src/component/garmin/schemas/bodyCompositions.ts +38 -0
  286. package/src/component/garmin/schemas/dailies.ts +38 -0
  287. package/src/component/garmin/schemas/epochs.ts +38 -0
  288. package/src/component/garmin/schemas/healthSnapshot.ts +38 -0
  289. package/src/component/garmin/schemas/hrvSummary.ts +38 -0
  290. package/src/component/garmin/schemas/manuallyUpdatedActivities.ts +49 -0
  291. package/src/component/garmin/schemas/menstrualCycleTracking.ts +39 -0
  292. package/src/component/garmin/schemas/moveIQ.ts +38 -0
  293. package/src/component/garmin/schemas/pulseOx.ts +39 -0
  294. package/src/component/garmin/schemas/respiration.ts +39 -0
  295. package/src/component/garmin/schemas/skinTemperature.ts +39 -0
  296. package/src/component/garmin/schemas/sleeps.ts +38 -0
  297. package/src/component/garmin/schemas/stress.ts +43 -0
  298. package/src/component/garmin/schemas/userMetrics.ts +39 -0
  299. package/src/component/garmin/transform/activity.ts +143 -0
  300. package/src/component/garmin/transform/activityDetails.ts +236 -0
  301. package/src/component/garmin/transform/bloodPressure.ts +39 -0
  302. package/src/component/garmin/transform/bodyCompositions.ts +51 -0
  303. package/src/component/garmin/transform/dailies.ts +179 -0
  304. package/src/component/garmin/transform/epochs.ts +94 -0
  305. package/src/component/garmin/transform/healthSnapshot.ts +152 -0
  306. package/src/component/garmin/transform/hrvSummary.ts +56 -0
  307. package/src/component/garmin/transform/manuallyUpdatedActivities.ts +27 -0
  308. package/src/{garmin/maps/activity-type.ts → component/garmin/transform/maps/activityType.ts} +116 -116
  309. package/src/{garmin/maps/sleep-level.ts → component/garmin/transform/maps/sleepLevel.ts} +22 -22
  310. package/src/component/garmin/transform/menstrualCycleTracking.ts +48 -0
  311. package/src/component/garmin/transform/moveIQ.ts +48 -0
  312. package/src/{garmin → component/garmin/transform}/plannedWorkout.ts +328 -333
  313. package/src/component/garmin/transform/pulseOx.ts +64 -0
  314. package/src/component/garmin/transform/respiration.ts +73 -0
  315. package/src/component/garmin/transform/skinTemperature.ts +44 -0
  316. package/src/component/garmin/transform/sleeps.ts +159 -0
  317. package/src/component/garmin/transform/stress.ts +78 -0
  318. package/src/component/garmin/transform/userMetrics.ts +56 -0
  319. package/src/component/garmin/types/specs/training-api-workouts.json +699 -0
  320. package/src/component/garmin/types/specs/wellness-api.json +1 -0
  321. package/src/component/garmin/types/trainingApiWorkouts/client/client.gen.ts +290 -0
  322. package/src/component/garmin/types/trainingApiWorkouts/client/index.ts +25 -0
  323. package/src/component/garmin/types/trainingApiWorkouts/client/types.gen.ts +214 -0
  324. package/src/component/garmin/types/trainingApiWorkouts/client/utils.gen.ts +316 -0
  325. package/src/component/garmin/types/trainingApiWorkouts/client.gen.ts +16 -0
  326. package/src/component/garmin/types/trainingApiWorkouts/core/auth.gen.ts +41 -0
  327. package/src/component/garmin/types/trainingApiWorkouts/core/bodySerializer.gen.ts +82 -0
  328. package/src/component/garmin/types/trainingApiWorkouts/core/params.gen.ts +169 -0
  329. package/src/component/garmin/types/trainingApiWorkouts/core/pathSerializer.gen.ts +171 -0
  330. package/src/component/garmin/types/trainingApiWorkouts/core/queryKeySerializer.gen.ts +117 -0
  331. package/src/component/garmin/types/trainingApiWorkouts/core/serverSentEvents.gen.ts +243 -0
  332. package/src/component/garmin/types/trainingApiWorkouts/core/types.gen.ts +104 -0
  333. package/src/component/garmin/types/trainingApiWorkouts/core/utils.gen.ts +140 -0
  334. package/src/component/garmin/types/trainingApiWorkouts/index.ts +4 -0
  335. package/src/component/garmin/types/trainingApiWorkouts/sdk.gen.ts +126 -0
  336. package/src/component/garmin/types/trainingApiWorkouts/types.gen.ts +387 -0
  337. package/src/component/garmin/types/trainingApiWorkouts/zod.gen.ts +423 -0
  338. package/src/component/garmin/types/wellnessApi/client/client.gen.ts +290 -0
  339. package/src/component/garmin/types/wellnessApi/client/index.ts +25 -0
  340. package/src/component/garmin/types/wellnessApi/client/types.gen.ts +214 -0
  341. package/src/component/garmin/types/wellnessApi/client/utils.gen.ts +316 -0
  342. package/src/component/garmin/types/wellnessApi/client.gen.ts +16 -0
  343. package/src/component/garmin/types/wellnessApi/core/auth.gen.ts +41 -0
  344. package/src/component/garmin/types/wellnessApi/core/bodySerializer.gen.ts +82 -0
  345. package/src/component/garmin/types/wellnessApi/core/params.gen.ts +169 -0
  346. package/src/component/garmin/types/wellnessApi/core/pathSerializer.gen.ts +171 -0
  347. package/src/component/garmin/types/wellnessApi/core/queryKeySerializer.gen.ts +117 -0
  348. package/src/component/garmin/types/wellnessApi/core/serverSentEvents.gen.ts +243 -0
  349. package/src/component/garmin/types/wellnessApi/core/types.gen.ts +104 -0
  350. package/src/component/garmin/types/wellnessApi/core/utils.gen.ts +140 -0
  351. package/src/component/garmin/types/wellnessApi/index.ts +4 -0
  352. package/src/component/garmin/types/wellnessApi/sdk.gen.ts +207 -0
  353. package/src/component/garmin/types/wellnessApi/types.gen.ts +2942 -0
  354. package/src/component/garmin/types/wellnessApi/zod.gen.ts +878 -0
  355. package/src/component/garmin/utils.ts +25 -0
  356. package/src/component/garmin/webhooks.ts +852 -0
  357. package/src/component/private.ts +21 -0
  358. package/src/component/public.ts +11 -2
  359. package/src/component/schema.ts +2 -1
  360. package/src/component/strava/private.ts +89 -0
  361. package/src/component/{strava.ts → strava/public.ts} +341 -404
  362. package/src/component/validators/activity.ts +5 -0
  363. package/src/component/validators/body.ts +5 -0
  364. package/src/component/validators/connection.ts +2 -0
  365. package/src/component/validators/daily.ts +20 -0
  366. package/src/component/validators/menstruation.ts +5 -1
  367. package/src/component/validators/plannedWorkout.ts +9 -0
  368. package/src/validators.ts +12 -2
  369. package/dist/component/garmin.d.ts.map +0 -1
  370. package/dist/component/garmin.js.map +0 -1
  371. package/dist/component/strava.d.ts.map +0 -1
  372. package/dist/component/strava.js.map +0 -1
  373. package/dist/garmin/activity.d.ts +0 -101
  374. package/dist/garmin/activity.d.ts.map +0 -1
  375. package/dist/garmin/activity.js +0 -207
  376. package/dist/garmin/activity.js.map +0 -1
  377. package/src/component/garmin.ts +0 -850
  378. package/src/garmin/activity.test.ts +0 -178
  379. package/src/garmin/activity.ts +0 -272
  380. package/src/garmin/auth.test.ts +0 -103
  381. package/src/garmin/body.ts +0 -59
  382. package/src/garmin/client.ts +0 -407
  383. package/src/garmin/daily.ts +0 -211
  384. package/src/garmin/index.ts +0 -75
  385. package/src/garmin/maps/activity-type.test.ts +0 -78
  386. package/src/garmin/menstruation.ts +0 -42
  387. package/src/garmin/sleep.test.ts +0 -110
  388. package/src/garmin/sleep.ts +0 -170
  389. package/src/garmin/sync.ts +0 -223
  390. package/src/garmin/types.ts +0 -480
@@ -0,0 +1,179 @@
1
+ // ─── Dailies Transformer ─────────────────────────────────────────────────────
2
+ // Transforms a Garmin daily summary push item into the Soma Daily schema shape.
3
+
4
+ import type { SomaDaily } from "../../validators/daily.js";
5
+ import type { ClientDaily } from "../types/wellnessApi/types.gen.js";
6
+
7
+ /**
8
+ * Transform a Garmin daily summary push item into a Soma Daily document shape.
9
+ *
10
+ * Daily summaries are ingested into the `daily` table via `ingestDaily`,
11
+ * keyed by `metadata.start_time + metadata.end_time`.
12
+ *
13
+ * Returns `null` when no meaningful data is present.
14
+ */
15
+ export function transformDailies(daily: ClientDaily): SomaDaily | null {
16
+ const startMs = (daily.startTimeInSeconds ?? 0) * 1000;
17
+ const endMs = startMs + (daily.durationInSeconds ?? 0) * 1000;
18
+
19
+ const activeDurations = buildActiveDurationsData(daily);
20
+ const calories = buildCaloriesData(daily);
21
+ const distance = buildDistanceData(daily);
22
+ const heartRate = buildHeartRateData(daily);
23
+ const stress = buildStressData(daily);
24
+
25
+ // Skip if there's no meaningful data at all
26
+ if (
27
+ activeDurations == null &&
28
+ calories == null &&
29
+ distance == null &&
30
+ heartRate == null &&
31
+ stress == null
32
+ ) {
33
+ return null;
34
+ }
35
+
36
+ return {
37
+ metadata: {
38
+ start_time: new Date(startMs).toISOString(),
39
+ end_time: new Date(endMs).toISOString(),
40
+ upload_type: 1, // Automatic
41
+ },
42
+
43
+ active_durations_data: activeDurations,
44
+ calories_data: calories,
45
+ distance_data: distance,
46
+ heart_rate_data: heartRate,
47
+ stress_data: stress,
48
+ };
49
+ }
50
+
51
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
52
+
53
+ function buildActiveDurationsData(daily: ClientDaily) {
54
+ if (
55
+ daily.activeTimeInSeconds == null &&
56
+ daily.moderateIntensityDurationInSeconds == null &&
57
+ daily.vigorousIntensityDurationInSeconds == null
58
+ ) {
59
+ return undefined;
60
+ }
61
+
62
+ return {
63
+ activity_seconds: daily.activeTimeInSeconds,
64
+ moderate_intensity_seconds: daily.moderateIntensityDurationInSeconds,
65
+ vigorous_intensity_seconds: daily.vigorousIntensityDurationInSeconds,
66
+ };
67
+ }
68
+
69
+ function buildCaloriesData(daily: ClientDaily) {
70
+ if (daily.activeKilocalories == null && daily.bmrKilocalories == null) {
71
+ return undefined;
72
+ }
73
+
74
+ const total =
75
+ (daily.activeKilocalories ?? 0) + (daily.bmrKilocalories ?? 0);
76
+
77
+ return {
78
+ net_activity_calories: daily.activeKilocalories,
79
+ BMR_calories: daily.bmrKilocalories,
80
+ total_burned_calories: total || undefined,
81
+ };
82
+ }
83
+
84
+ function buildDistanceData(daily: ClientDaily) {
85
+ if (
86
+ daily.distanceInMeters == null &&
87
+ daily.steps == null &&
88
+ daily.floorsClimbed == null
89
+ ) {
90
+ return undefined;
91
+ }
92
+
93
+ return {
94
+ distance_meters: daily.distanceInMeters,
95
+ steps: daily.steps,
96
+ floors_climbed: daily.floorsClimbed,
97
+ };
98
+ }
99
+
100
+ function buildHeartRateData(daily: ClientDaily) {
101
+ if (
102
+ daily.averageHeartRateInBeatsPerMinute == null &&
103
+ daily.maxHeartRateInBeatsPerMinute == null &&
104
+ daily.restingHeartRateInBeatsPerMinute == null &&
105
+ (daily.timeOffsetHeartRateSamples == null ||
106
+ Object.keys(daily.timeOffsetHeartRateSamples).length === 0)
107
+ ) {
108
+ return undefined;
109
+ }
110
+
111
+ const hasSummary =
112
+ daily.averageHeartRateInBeatsPerMinute != null ||
113
+ daily.maxHeartRateInBeatsPerMinute != null ||
114
+ daily.restingHeartRateInBeatsPerMinute != null;
115
+
116
+ const hasSamples =
117
+ daily.timeOffsetHeartRateSamples != null &&
118
+ Object.keys(daily.timeOffsetHeartRateSamples).length > 0;
119
+
120
+ const hrSamples = hasSamples
121
+ ? buildTimeOffsetSamples(
122
+ daily.startTimeInSeconds,
123
+ daily.timeOffsetHeartRateSamples ?? {},
124
+ (bpm) => ({ bpm }),
125
+ )
126
+ : undefined;
127
+
128
+ return {
129
+ summary: hasSummary
130
+ ? {
131
+ avg_hr_bpm: daily.averageHeartRateInBeatsPerMinute,
132
+ max_hr_bpm: daily.maxHeartRateInBeatsPerMinute,
133
+ min_hr_bpm: daily.minHeartRateInBeatsPerMinute,
134
+ resting_hr_bpm: daily.restingHeartRateInBeatsPerMinute,
135
+ }
136
+ : undefined,
137
+ detailed:
138
+ hrSamples && hrSamples.length > 0
139
+ ? { hr_samples: hrSamples }
140
+ : undefined,
141
+ };
142
+ }
143
+
144
+ function buildStressData(daily: ClientDaily) {
145
+ if (
146
+ daily.averageStressLevel == null &&
147
+ daily.maxStressLevel == null &&
148
+ daily.stressDurationInSeconds == null
149
+ ) {
150
+ return undefined;
151
+ }
152
+
153
+ return {
154
+ avg_stress_level: daily.averageStressLevel,
155
+ max_stress_level: daily.maxStressLevel,
156
+ stress_duration_seconds: daily.stressDurationInSeconds,
157
+ rest_stress_duration_seconds: daily.restStressDurationInSeconds,
158
+ activity_stress_duration_seconds: daily.activityStressDurationInSeconds,
159
+ low_stress_duration_seconds: daily.lowStressDurationInSeconds,
160
+ medium_stress_duration_seconds: daily.mediumStressDurationInSeconds,
161
+ high_stress_duration_seconds: daily.highStressDurationInSeconds,
162
+ };
163
+ }
164
+
165
+ /**
166
+ * Convert Garmin offset-keyed time-series data into timestamped samples.
167
+ */
168
+ function buildTimeOffsetSamples<T extends Record<string, unknown>>(
169
+ startTimeInSeconds: number | undefined,
170
+ offsets: Record<string, number>,
171
+ mapValue: (value: number) => T,
172
+ ): Array<{ timestamp: string } & T> {
173
+ return Object.entries(offsets).map(([offset, value]) => ({
174
+ timestamp: new Date(
175
+ ((startTimeInSeconds ?? 0) + parseInt(offset, 10)) * 1000,
176
+ ).toISOString(),
177
+ ...mapValue(value),
178
+ }));
179
+ }
@@ -0,0 +1,94 @@
1
+ // ─── Epochs Transformer ──────────────────────────────────────────────────────
2
+ // Transforms a Garmin epoch summary push item into the Soma Daily schema shape.
3
+ // Epoch summaries are 15-minute wellness monitoring records with per-activity-type
4
+ // granularity (steps, distance, calories, MET). They are ingested into the daily
5
+ // table just like daily summaries.
6
+
7
+ import type { SomaDaily } from "../../validators/daily.js";
8
+ import type { ClientEpoch } from "../types/wellnessApi/types.gen.js";
9
+
10
+ /**
11
+ * Transform a Garmin epoch summary push item into a Soma Daily document shape.
12
+ *
13
+ * Epoch summaries represent 15-minute time slices of wellness monitoring data.
14
+ * They are ingested into the `daily` table via `ingestDaily`,
15
+ * keyed by `metadata.start_time + metadata.end_time`.
16
+ *
17
+ * Returns `null` when no meaningful data is present.
18
+ */
19
+ export function transformEpoch(epoch: ClientEpoch): SomaDaily | null {
20
+ const startMs = (epoch.startTimeInSeconds ?? 0) * 1000;
21
+ const endMs = startMs + (epoch.durationInSeconds ?? 0) * 1000;
22
+
23
+ const activeDurations = buildActiveDurationsData(epoch);
24
+ const calories = buildCaloriesData(epoch);
25
+ const distance = buildDistanceData(epoch);
26
+ const met = buildMETData(epoch);
27
+
28
+ // Skip if there's no meaningful data at all
29
+ if (
30
+ activeDurations == null &&
31
+ calories == null &&
32
+ distance == null &&
33
+ met == null
34
+ ) {
35
+ return null;
36
+ }
37
+
38
+ return {
39
+ metadata: {
40
+ start_time: new Date(startMs).toISOString(),
41
+ end_time: new Date(endMs).toISOString(),
42
+ upload_type: 1, // Automatic
43
+ },
44
+
45
+ active_durations_data: activeDurations,
46
+ calories_data: calories,
47
+ distance_data: distance,
48
+ MET_data: met,
49
+ };
50
+ }
51
+
52
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
53
+
54
+ function buildActiveDurationsData(epoch: ClientEpoch) {
55
+ if (epoch.activeTimeInSeconds == null) {
56
+ return undefined;
57
+ }
58
+
59
+ return {
60
+ activity_seconds: epoch.activeTimeInSeconds,
61
+ };
62
+ }
63
+
64
+ function buildCaloriesData(epoch: ClientEpoch) {
65
+ if (epoch.activeKilocalories == null) {
66
+ return undefined;
67
+ }
68
+
69
+ return {
70
+ net_activity_calories: epoch.activeKilocalories,
71
+ total_burned_calories: epoch.activeKilocalories,
72
+ };
73
+ }
74
+
75
+ function buildDistanceData(epoch: ClientEpoch) {
76
+ if (epoch.distanceInMeters == null && epoch.steps == null) {
77
+ return undefined;
78
+ }
79
+
80
+ return {
81
+ distance_meters: epoch.distanceInMeters,
82
+ steps: epoch.steps,
83
+ };
84
+ }
85
+
86
+ function buildMETData(epoch: ClientEpoch) {
87
+ if (epoch.met == null) {
88
+ return undefined;
89
+ }
90
+
91
+ return {
92
+ avg_level: epoch.met,
93
+ };
94
+ }
@@ -0,0 +1,152 @@
1
+ // ─── Health Snapshot Transformer ─────────────────────────────────────────────
2
+ // Transforms a Garmin Health Snapshot push item into the Soma Daily schema shape.
3
+ //
4
+ // Health Snapshots are 2-minute sessions containing heart rate, stress, SpO2,
5
+ // respiration, and HRV data. We map these into the Daily model since the data
6
+ // types (HR, stress, oxygen, respiration) align with Daily's sub-fields.
7
+
8
+ import type { SomaDaily } from "../../validators/daily.js";
9
+ import type { ClientHealthSnapshot } from "../types/wellnessApi/types.gen.js";
10
+
11
+ /**
12
+ * Transform a Garmin Health Snapshot push item into a Soma Daily document shape.
13
+ *
14
+ * Health Snapshot summaries contain epoch-level readings for heart rate, stress,
15
+ * SpO2, respiration, and HRV over a ~2-minute window.
16
+ *
17
+ * Returns `null` when no meaningful data is present.
18
+ */
19
+ export function transformHealthSnapshot(
20
+ snapshot: ClientHealthSnapshot,
21
+ ): SomaDaily | null {
22
+ const startMs = (snapshot.startTimeInSeconds ?? 0) * 1000;
23
+ const endMs = startMs + (snapshot.durationInSeconds ?? 0) * 1000;
24
+
25
+ const summaries = snapshot.summaries;
26
+ if (!summaries || summaries.length === 0) return null;
27
+
28
+ const heartRate = buildHeartRateData(snapshot);
29
+ const stress = buildStressData(snapshot);
30
+ const oxygen = buildOxygenData(snapshot);
31
+ const respiration = buildRespirationData(snapshot);
32
+
33
+ // Skip if there's no meaningful data at all
34
+ if (
35
+ heartRate == null &&
36
+ stress == null &&
37
+ oxygen == null &&
38
+ respiration == null
39
+ ) {
40
+ return null;
41
+ }
42
+
43
+ return {
44
+ metadata: {
45
+ start_time: new Date(startMs).toISOString(),
46
+ end_time: new Date(endMs).toISOString(),
47
+ upload_type: 1, // Automatic
48
+ },
49
+
50
+ heart_rate_data: heartRate,
51
+ stress_data: stress,
52
+ oxygen_data: oxygen,
53
+ respiration_data: respiration,
54
+ };
55
+ }
56
+
57
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
58
+
59
+ type SnapshotSummary = NonNullable<ClientHealthSnapshot["summaries"]>[number];
60
+
61
+ function findSummary(
62
+ snapshot: ClientHealthSnapshot,
63
+ type: string,
64
+ ): SnapshotSummary | undefined {
65
+ return snapshot.summaries?.find((s) => s.summaryType === type);
66
+ }
67
+
68
+ function buildHeartRateData(snapshot: ClientHealthSnapshot) {
69
+ const hr = findSummary(snapshot, "heart_rate");
70
+ const rmssd = findSummary(snapshot, "rmssd_hrv");
71
+ const sdrr = findSummary(snapshot, "sdrr_hrv");
72
+
73
+ if (!hr && !rmssd && !sdrr) return undefined;
74
+
75
+ const hasSummary =
76
+ hr?.avgValue != null || hr?.maxValue != null || hr?.minValue != null;
77
+ const hasHrvSummary = rmssd?.avgValue != null || sdrr?.avgValue != null;
78
+
79
+ const hrSamples =
80
+ hr?.epochSummaries && Object.keys(hr.epochSummaries).length > 0
81
+ ? buildEpochSamples(
82
+ snapshot.startTimeInSeconds,
83
+ hr.epochSummaries,
84
+ (bpm) => ({ bpm }),
85
+ )
86
+ : undefined;
87
+
88
+ return {
89
+ summary:
90
+ hasSummary || hasHrvSummary
91
+ ? {
92
+ avg_hr_bpm: hr?.avgValue,
93
+ max_hr_bpm: hr?.maxValue,
94
+ min_hr_bpm: hr?.minValue,
95
+ avg_hrv_rmssd: rmssd?.avgValue,
96
+ avg_hrv_sdnn: sdrr?.avgValue,
97
+ }
98
+ : undefined,
99
+ detailed:
100
+ hrSamples && hrSamples.length > 0
101
+ ? { hr_samples: hrSamples }
102
+ : undefined,
103
+ };
104
+ }
105
+
106
+ function buildStressData(snapshot: ClientHealthSnapshot) {
107
+ const stress = findSummary(snapshot, "stress");
108
+ if (!stress) return undefined;
109
+
110
+ return {
111
+ avg_stress_level: stress.avgValue,
112
+ max_stress_level: stress.maxValue,
113
+ };
114
+ }
115
+
116
+ function buildOxygenData(snapshot: ClientHealthSnapshot) {
117
+ const spo2 = findSummary(snapshot, "spo2");
118
+ if (!spo2) return undefined;
119
+
120
+ return {
121
+ avg_saturation_percentage: spo2.avgValue,
122
+ };
123
+ }
124
+
125
+ function buildRespirationData(snapshot: ClientHealthSnapshot) {
126
+ const resp = findSummary(snapshot, "respiration");
127
+ if (!resp) return undefined;
128
+
129
+ return {
130
+ breaths_data: {
131
+ avg_breaths_per_min: resp.avgValue,
132
+ max_breaths_per_min: resp.maxValue,
133
+ min_breaths_per_min: resp.minValue,
134
+ },
135
+ };
136
+ }
137
+
138
+ /**
139
+ * Convert Garmin epoch-keyed summaries into timestamped samples.
140
+ */
141
+ function buildEpochSamples<T extends Record<string, unknown>>(
142
+ startTimeInSeconds: number | undefined,
143
+ epochs: Record<string, number>,
144
+ mapValue: (value: number) => T,
145
+ ): Array<{ timestamp: string } & T> {
146
+ return Object.entries(epochs).map(([offset, value]) => ({
147
+ timestamp: new Date(
148
+ ((startTimeInSeconds ?? 0) + parseInt(offset, 10)) * 1000,
149
+ ).toISOString(),
150
+ ...mapValue(value),
151
+ }));
152
+ }
@@ -0,0 +1,56 @@
1
+ // ─── HRV Summary Transformer ─────────────────────────────────────────────────
2
+ // Transforms a Garmin HRV summary push item into a partial Soma Daily schema
3
+ // shape. HRV data enriches daily records with heart_rate_data (HRV fields).
4
+
5
+ import type { SomaDaily } from "../../validators/daily.js";
6
+ import type { ClientHrvSummary } from "../types/wellnessApi/types.gen.js";
7
+
8
+ /**
9
+ * Transform a Garmin HRV summary push item into a partial Soma Daily shape.
10
+ *
11
+ * HRV summaries are ingested into the `daily` table via `ingestDaily`,
12
+ * enriching the daily record with HRV-specific heart rate data.
13
+ *
14
+ * Returns `null` when no meaningful HRV data is present.
15
+ */
16
+ export function transformHRVSummary(hrv: ClientHrvSummary): SomaDaily | null {
17
+ const startMs = (hrv.startTimeInSeconds ?? 0) * 1000;
18
+ const endMs = startMs + (hrv.durationInSeconds ?? 0) * 1000;
19
+
20
+ const hasSummary = hrv.lastNightAvg != null || hrv.lastNight5MinHigh != null;
21
+ const hasSamples =
22
+ hrv.hrvValues != null && Object.keys(hrv.hrvValues).length > 0;
23
+
24
+ if (!hasSummary && !hasSamples) {
25
+ return null;
26
+ }
27
+
28
+ const startTime = hrv.startTimeInSeconds ?? 0;
29
+ const hrvSamples = hasSamples
30
+ ? Object.entries(hrv.hrvValues ?? {}).map(([offset, rmssd]) => ({
31
+ timestamp: new Date(
32
+ (startTime + parseInt(offset, 10)) * 1000,
33
+ ).toISOString(),
34
+ hrv_rmssd: rmssd,
35
+ }))
36
+ : undefined;
37
+
38
+ return {
39
+ metadata: {
40
+ start_time: new Date(startMs).toISOString(),
41
+ end_time: new Date(endMs).toISOString(),
42
+ upload_type: 1, // Automatic
43
+ },
44
+ heart_rate_data: {
45
+ summary: hasSummary
46
+ ? {
47
+ avg_hrv_rmssd: hrv.lastNightAvg,
48
+ }
49
+ : undefined,
50
+ detailed:
51
+ hrvSamples && hrvSamples.length > 0
52
+ ? { hrv_samples_rmssd: hrvSamples }
53
+ : undefined,
54
+ },
55
+ };
56
+ }
@@ -0,0 +1,27 @@
1
+ // ─── Manually Updated Activity Transformer ───────────────────────────────────
2
+ // Transforms a Garmin manually updated activity into the Soma Activity schema.
3
+ //
4
+ // Manually updated activities share the same data model as regular activities,
5
+ // so we delegate to transformActivity but force upload_type = 2 (manual).
6
+
7
+ import type { SomaActivity } from "../../validators/activity.js";
8
+ import type { ClientActivity } from "../types/wellnessApi/types.gen.js";
9
+ import { transformActivity } from "./activity.js";
10
+
11
+ /**
12
+ * Transform a Garmin manually updated activity into a Soma Activity shape.
13
+ *
14
+ * Per the Garmin API, manually updated activities always have `manual: true`.
15
+ * We enforce `upload_type: 2` regardless, since these items are by definition
16
+ * manual edits from Garmin Connect.
17
+ */
18
+ export function transformManuallyUpdatedActivity(
19
+ activity: ClientActivity,
20
+ ): SomaActivity {
21
+ const result = transformActivity(activity);
22
+
23
+ // Force manual upload type — these are always user-edited on Garmin Connect
24
+ result.metadata.upload_type = 2;
25
+
26
+ return result;
27
+ }