@nativesquare/soma 0.8.0 → 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 (325) 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 +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 +135 -261
  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/public.d.ts +155 -0
  15. package/dist/component/garmin/public.d.ts.map +1 -0
  16. package/dist/component/garmin/public.js +787 -0
  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 +4 -4
  167. package/dist/component/public.d.ts +333 -333
  168. package/dist/component/schema.d.ts +133 -133
  169. package/dist/component/strava/private.d.ts +30 -0
  170. package/dist/component/strava/private.d.ts.map +1 -0
  171. package/dist/component/strava/private.js +71 -0
  172. package/dist/component/strava/private.js.map +1 -0
  173. package/dist/component/{strava.d.ts → strava/public.d.ts} +3 -31
  174. package/dist/component/strava/public.d.ts.map +1 -0
  175. package/dist/component/{strava.js → strava/public.js} +22 -101
  176. package/dist/component/strava/public.js.map +1 -0
  177. package/dist/component/validators/activity.d.ts +6 -0
  178. package/dist/component/validators/activity.d.ts.map +1 -1
  179. package/dist/component/validators/activity.js.map +1 -1
  180. package/dist/component/validators/body.d.ts +20 -14
  181. package/dist/component/validators/body.d.ts.map +1 -1
  182. package/dist/component/validators/body.js.map +1 -1
  183. package/dist/component/validators/daily.d.ts +6 -0
  184. package/dist/component/validators/daily.d.ts.map +1 -1
  185. package/dist/component/validators/daily.js.map +1 -1
  186. package/dist/component/validators/enums.d.ts +1 -1
  187. package/dist/component/validators/menstruation.d.ts +5 -0
  188. package/dist/component/validators/menstruation.d.ts.map +1 -1
  189. package/dist/component/validators/menstruation.js.map +1 -1
  190. package/dist/garmin/client.js.map +1 -1
  191. package/dist/garmin/index.d.ts +0 -2
  192. package/dist/garmin/index.d.ts.map +1 -1
  193. package/dist/garmin/index.js +0 -1
  194. package/dist/garmin/index.js.map +1 -1
  195. package/dist/garmin/sync.d.ts.map +1 -1
  196. package/dist/garmin/sync.js +3 -2
  197. package/dist/garmin/sync.js.map +1 -1
  198. package/dist/garmin/types.d.ts +1 -1
  199. package/dist/garmin/types.d.ts.map +1 -1
  200. package/dist/validators.d.ts +31 -28
  201. package/dist/validators.d.ts.map +1 -1
  202. package/dist/validators.js +2 -2
  203. package/dist/validators.js.map +1 -1
  204. package/package.json +4 -7
  205. package/src/client/index.ts +41 -172
  206. package/src/component/_generated/api.ts +96 -4
  207. package/src/component/_generated/component.ts +252 -284
  208. package/src/{garmin → component/garmin}/auth.ts +8 -1
  209. package/src/component/garmin/client.ts +39 -0
  210. package/src/component/garmin/private.ts +1798 -0
  211. package/src/component/garmin/public.ts +938 -0
  212. package/src/component/garmin/schemas/activity.ts +40 -0
  213. package/src/component/garmin/schemas/activityDetails.ts +45 -0
  214. package/src/component/garmin/schemas/bloodPressure.ts +38 -0
  215. package/src/component/garmin/schemas/bodyCompositions.ts +38 -0
  216. package/src/component/garmin/schemas/dailies.ts +38 -0
  217. package/src/component/garmin/schemas/epochs.ts +38 -0
  218. package/src/component/garmin/schemas/healthSnapshot.ts +38 -0
  219. package/src/component/garmin/schemas/hrvSummary.ts +38 -0
  220. package/src/component/garmin/schemas/manuallyUpdatedActivities.ts +49 -0
  221. package/src/component/garmin/schemas/menstrualCycleTracking.ts +39 -0
  222. package/src/component/garmin/schemas/moveIQ.ts +38 -0
  223. package/src/component/garmin/schemas/pulseOx.ts +39 -0
  224. package/src/component/garmin/schemas/respiration.ts +39 -0
  225. package/src/component/garmin/schemas/skinTemperature.ts +39 -0
  226. package/src/component/garmin/schemas/sleeps.ts +38 -0
  227. package/src/component/garmin/schemas/stress.ts +43 -0
  228. package/src/component/garmin/schemas/userMetrics.ts +39 -0
  229. package/src/component/garmin/transform/activity.ts +143 -0
  230. package/src/component/garmin/transform/activityDetails.ts +236 -0
  231. package/src/{garmin → component/garmin/transform}/bloodPressure.ts +39 -41
  232. package/src/component/garmin/transform/bodyCompositions.ts +51 -0
  233. package/src/component/garmin/transform/dailies.ts +179 -0
  234. package/src/component/garmin/transform/epochs.ts +94 -0
  235. package/src/component/garmin/transform/healthSnapshot.ts +152 -0
  236. package/src/component/garmin/transform/hrvSummary.ts +56 -0
  237. package/src/component/garmin/transform/manuallyUpdatedActivities.ts +27 -0
  238. package/src/{garmin/maps/activity-type.ts → component/garmin/transform/maps/activityType.ts} +116 -116
  239. package/src/{garmin/maps/sleep-level.ts → component/garmin/transform/maps/sleepLevel.ts} +22 -22
  240. package/src/component/garmin/transform/menstrualCycleTracking.ts +48 -0
  241. package/src/component/garmin/transform/moveIQ.ts +48 -0
  242. package/src/{garmin → component/garmin/transform}/plannedWorkout.ts +328 -333
  243. package/src/component/garmin/transform/pulseOx.ts +64 -0
  244. package/src/component/garmin/transform/respiration.ts +73 -0
  245. package/src/component/garmin/transform/skinTemperature.ts +44 -0
  246. package/src/component/garmin/transform/sleeps.ts +159 -0
  247. package/src/component/garmin/transform/stress.ts +78 -0
  248. package/src/component/garmin/transform/userMetrics.ts +56 -0
  249. package/src/component/garmin/types/specs/training-api-workouts.json +699 -0
  250. package/src/component/garmin/types/trainingApiWorkouts/client/client.gen.ts +290 -0
  251. package/src/component/garmin/types/trainingApiWorkouts/client/index.ts +25 -0
  252. package/src/component/garmin/types/trainingApiWorkouts/client/types.gen.ts +214 -0
  253. package/src/component/garmin/types/trainingApiWorkouts/client/utils.gen.ts +316 -0
  254. package/src/component/garmin/types/trainingApiWorkouts/client.gen.ts +16 -0
  255. package/src/component/garmin/types/trainingApiWorkouts/core/auth.gen.ts +41 -0
  256. package/src/component/garmin/types/trainingApiWorkouts/core/bodySerializer.gen.ts +82 -0
  257. package/src/component/garmin/types/trainingApiWorkouts/core/params.gen.ts +169 -0
  258. package/src/component/garmin/types/trainingApiWorkouts/core/pathSerializer.gen.ts +171 -0
  259. package/src/component/garmin/types/trainingApiWorkouts/core/queryKeySerializer.gen.ts +117 -0
  260. package/src/component/garmin/types/trainingApiWorkouts/core/serverSentEvents.gen.ts +243 -0
  261. package/src/component/garmin/types/trainingApiWorkouts/core/types.gen.ts +104 -0
  262. package/src/component/garmin/types/trainingApiWorkouts/core/utils.gen.ts +140 -0
  263. package/src/component/garmin/types/trainingApiWorkouts/index.ts +4 -0
  264. package/src/component/garmin/types/trainingApiWorkouts/sdk.gen.ts +126 -0
  265. package/src/component/garmin/types/trainingApiWorkouts/types.gen.ts +387 -0
  266. package/src/component/garmin/types/trainingApiWorkouts/zod.gen.ts +423 -0
  267. package/src/component/garmin/types/wellnessApi/client/client.gen.ts +290 -0
  268. package/src/component/garmin/types/wellnessApi/client/index.ts +25 -0
  269. package/src/component/garmin/types/wellnessApi/client/types.gen.ts +214 -0
  270. package/src/component/garmin/types/wellnessApi/client/utils.gen.ts +316 -0
  271. package/src/component/garmin/types/wellnessApi/client.gen.ts +16 -0
  272. package/src/component/garmin/types/wellnessApi/core/auth.gen.ts +41 -0
  273. package/src/component/garmin/types/wellnessApi/core/bodySerializer.gen.ts +82 -0
  274. package/src/component/garmin/types/wellnessApi/core/params.gen.ts +169 -0
  275. package/src/component/garmin/types/wellnessApi/core/pathSerializer.gen.ts +171 -0
  276. package/src/component/garmin/types/wellnessApi/core/queryKeySerializer.gen.ts +117 -0
  277. package/src/component/garmin/types/wellnessApi/core/serverSentEvents.gen.ts +243 -0
  278. package/src/component/garmin/types/wellnessApi/core/types.gen.ts +104 -0
  279. package/src/component/garmin/types/wellnessApi/core/utils.gen.ts +140 -0
  280. package/src/component/garmin/types/wellnessApi/index.ts +4 -0
  281. package/src/component/garmin/types/wellnessApi/sdk.gen.ts +207 -0
  282. package/src/component/garmin/types/wellnessApi/types.gen.ts +2942 -0
  283. package/src/component/garmin/types/wellnessApi/zod.gen.ts +878 -0
  284. package/src/component/garmin/utils.ts +25 -0
  285. package/src/component/garmin/webhooks.ts +852 -0
  286. package/src/component/strava/private.ts +89 -0
  287. package/src/component/{strava.ts → strava/public.ts} +341 -404
  288. package/src/component/validators/activity.ts +5 -0
  289. package/src/component/validators/body.ts +5 -0
  290. package/src/component/validators/daily.ts +5 -0
  291. package/src/component/validators/menstruation.ts +5 -1
  292. package/src/component/validators/plannedWorkout.ts +5 -0
  293. package/src/validators.ts +12 -2
  294. package/dist/component/garmin.d.ts +0 -366
  295. package/dist/component/garmin.d.ts.map +0 -1
  296. package/dist/component/garmin.js +0 -1481
  297. package/dist/component/garmin.js.map +0 -1
  298. package/dist/component/strava.d.ts.map +0 -1
  299. package/dist/component/strava.js.map +0 -1
  300. package/dist/garmin/activity.d.ts +0 -92
  301. package/dist/garmin/activity.d.ts.map +0 -1
  302. package/dist/garmin/activity.js +0 -201
  303. package/dist/garmin/activity.js.map +0 -1
  304. package/src/component/garmin.ts +0 -1722
  305. package/src/garmin/activity.test.ts +0 -170
  306. package/src/garmin/activity.ts +0 -265
  307. package/src/garmin/auth.test.ts +0 -103
  308. package/src/garmin/body.ts +0 -59
  309. package/src/garmin/client.ts +0 -886
  310. package/src/garmin/daily.ts +0 -215
  311. package/src/garmin/hrv.ts +0 -57
  312. package/src/garmin/index.ts +0 -145
  313. package/src/garmin/maps/activity-type.test.ts +0 -78
  314. package/src/garmin/menstruation.ts +0 -44
  315. package/src/garmin/pulseOx.ts +0 -45
  316. package/src/garmin/respiration.ts +0 -55
  317. package/src/garmin/skinTemp.ts +0 -42
  318. package/src/garmin/sleep.test.ts +0 -109
  319. package/src/garmin/sleep.ts +0 -176
  320. package/src/garmin/stressDetails.ts +0 -71
  321. package/src/garmin/sync.ts +0 -566
  322. package/src/garmin/types.ts +0 -268
  323. package/src/garmin/userMetrics.ts +0 -50
  324. package/src/garmin/wellness-api.d.ts +0 -5637
  325. /package/src/{garmin/spec → component/garmin/types/specs}/wellness-api.json +0 -0
@@ -0,0 +1,38 @@
1
+ // ─── Skin Temperature Transformer ────────────────────────────────────────────
2
+ // Transforms a Garmin Skin Temperature push item into the Soma Body schema shape.
3
+ //
4
+ // Skin temperature summaries contain the average deviation of the user's
5
+ // skin temperature during their sleep window. We map this into the Body
6
+ // model's temperature_data.skin_temperature_samples field.
7
+ /**
8
+ * Transform a Garmin Skin Temperature push item into a Soma Body document shape.
9
+ *
10
+ * Skin temperature records are ingested into the `body` table via `ingestBody`,
11
+ * keyed by `metadata.start_time + metadata.end_time`.
12
+ *
13
+ * Returns `null` when no meaningful temperature data is present.
14
+ */
15
+ export function transformSkinTemperature(skinTemp) {
16
+ const startMs = (skinTemp.startTimeInSeconds ?? 0) * 1000;
17
+ const endMs = startMs + (skinTemp.durationInSeconds ?? 0) * 1000;
18
+ const startTime = new Date(startMs).toISOString();
19
+ const endTime = new Date(endMs).toISOString();
20
+ if (skinTemp.avgDeviationCelsius == null) {
21
+ return null;
22
+ }
23
+ return {
24
+ metadata: {
25
+ start_time: startTime,
26
+ end_time: endTime,
27
+ },
28
+ temperature_data: {
29
+ skin_temperature_samples: [
30
+ {
31
+ timestamp: startTime,
32
+ temperature_celsius: skinTemp.avgDeviationCelsius,
33
+ },
34
+ ],
35
+ },
36
+ };
37
+ }
38
+ //# sourceMappingURL=skinTemperature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skinTemperature.js","sourceRoot":"","sources":["../../../../src/component/garmin/transform/skinTemperature.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,kFAAkF;AAClF,EAAE;AACF,yEAAyE;AACzE,wEAAwE;AACxE,2DAA2D;AAK3D;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CAAC,QAA+B;IACtE,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,kBAAkB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC1D,MAAM,KAAK,GAAG,OAAO,GAAG,CAAC,QAAQ,CAAC,iBAAiB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACjE,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAE9C,IAAI,QAAQ,CAAC,mBAAmB,IAAI,IAAI,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,QAAQ,EAAE;YACR,UAAU,EAAE,SAAS;YACrB,QAAQ,EAAE,OAAO;SAClB;QAED,gBAAgB,EAAE;YAChB,wBAAwB,EAAE;gBACxB;oBACE,SAAS,EAAE,SAAS;oBACpB,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB;iBAClD;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,55 @@
1
+ import type { GarminSleep } from "../types/garmin.js";
2
+ /**
3
+ * Transform a Garmin sleep summary push item into a Soma Sleep document shape.
4
+ *
5
+ * Sleep summaries are ingested into the `sleep` table via `ingestSleep`,
6
+ * keyed by `metadata.summary_id`.
7
+ *
8
+ * The returned object is ready to be spread into an `ingestSleep` call
9
+ * alongside `connectionId` and `userId`.
10
+ */
11
+ export declare function transformSleeps(sleep: GarminSleep): {
12
+ metadata: {
13
+ summary_id: string | undefined;
14
+ start_time: string;
15
+ end_time: string;
16
+ upload_type: number;
17
+ };
18
+ sleep_durations_data: {
19
+ asleep: {
20
+ duration_asleep_state_seconds: number | undefined;
21
+ duration_deep_sleep_state_seconds: number | undefined;
22
+ duration_light_sleep_state_seconds: number | undefined;
23
+ duration_REM_sleep_state_seconds: number | undefined;
24
+ };
25
+ awake: {
26
+ duration_awake_state_seconds: number | undefined;
27
+ };
28
+ other: {
29
+ duration_in_bed_seconds: number | undefined;
30
+ duration_unmeasurable_sleep_seconds: number | undefined;
31
+ };
32
+ hypnogram_samples: {
33
+ timestamp: string;
34
+ level: number;
35
+ }[] | undefined;
36
+ };
37
+ respiration_data: {
38
+ breaths_data: {
39
+ samples: {
40
+ timestamp: string;
41
+ breaths_per_min: number;
42
+ }[];
43
+ } | undefined;
44
+ oxygen_saturation_data: {
45
+ samples: {
46
+ timestamp: string;
47
+ percentage: number;
48
+ }[];
49
+ } | undefined;
50
+ } | undefined;
51
+ scores: {
52
+ sleep: number;
53
+ } | undefined;
54
+ };
55
+ //# sourceMappingURL=sleeps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sleeps.d.ts","sourceRoot":"","sources":["../../../../src/component/garmin/transform/sleeps.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAOtD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW;;;;;;;;;;;;;;;;;;;;;;uBA+Dd,MAAM;mBAAS,MAAM;;;;;;;;;;;;;;;;;;;;EA/BxD"}
@@ -0,0 +1,120 @@
1
+ // ─── Sleeps Transformer ──────────────────────────────────────────────────────
2
+ // Transforms a Garmin sleep summary push item into the Soma Sleep schema shape.
3
+ import { mapSleepLevel } from "../../../garmin/maps/sleep-level.js";
4
+ /**
5
+ * Transform a Garmin sleep summary push item into a Soma Sleep document shape.
6
+ *
7
+ * Sleep summaries are ingested into the `sleep` table via `ingestSleep`,
8
+ * keyed by `metadata.summary_id`.
9
+ *
10
+ * The returned object is ready to be spread into an `ingestSleep` call
11
+ * alongside `connectionId` and `userId`.
12
+ */
13
+ export function transformSleeps(sleep) {
14
+ const startMs = (sleep.startTimeInSeconds ?? 0) * 1000;
15
+ const endMs = startMs +
16
+ ((sleep.durationInSeconds ?? 0) + (sleep.awakeDurationInSeconds ?? 0)) *
17
+ 1000;
18
+ const uploadTypeMap = {
19
+ ENHANCED_FINAL: 2,
20
+ ENHANCED_TENTATIVE: 4,
21
+ AUTO_FINAL: 2,
22
+ AUTO_TENTATIVE: 4,
23
+ AUTO_MANUAL: 2,
24
+ MANUAL: 1,
25
+ DEVICE: 2,
26
+ OFF_WRIST: 0,
27
+ };
28
+ return {
29
+ metadata: {
30
+ summary_id: sleep.summaryId,
31
+ start_time: new Date(startMs).toISOString(),
32
+ end_time: new Date(endMs).toISOString(),
33
+ upload_type: uploadTypeMap[sleep.validation ?? ""] ?? 0,
34
+ },
35
+ sleep_durations_data: buildSleepDurationsData(sleep),
36
+ respiration_data: buildRespirationData(sleep),
37
+ scores: buildScoresData(sleep),
38
+ };
39
+ }
40
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
41
+ function buildSleepDurationsData(sleep) {
42
+ const totalAsleep = (sleep.deepSleepDurationInSeconds ?? 0) +
43
+ (sleep.lightSleepDurationInSeconds ?? 0) +
44
+ (sleep.remSleepInSeconds ?? 0);
45
+ return {
46
+ asleep: {
47
+ duration_asleep_state_seconds: totalAsleep || undefined,
48
+ duration_deep_sleep_state_seconds: sleep.deepSleepDurationInSeconds,
49
+ duration_light_sleep_state_seconds: sleep.lightSleepDurationInSeconds,
50
+ duration_REM_sleep_state_seconds: sleep.remSleepInSeconds,
51
+ },
52
+ awake: {
53
+ duration_awake_state_seconds: sleep.awakeDurationInSeconds,
54
+ },
55
+ other: {
56
+ duration_in_bed_seconds: sleep.durationInSeconds,
57
+ duration_unmeasurable_sleep_seconds: sleep.unmeasurableSleepInSeconds,
58
+ },
59
+ hypnogram_samples: buildHypnogramSamples(sleep),
60
+ };
61
+ }
62
+ function buildHypnogramSamples(sleep) {
63
+ if (!sleep.sleepLevelsMap)
64
+ return undefined;
65
+ const samples = [];
66
+ for (const [stage, levels] of Object.entries(sleep.sleepLevelsMap)) {
67
+ if (!levels)
68
+ continue;
69
+ const terraLevel = mapSleepLevel(stage);
70
+ for (const level of levels) {
71
+ if (level.startTimeInSeconds == null)
72
+ continue;
73
+ samples.push({
74
+ timestamp: new Date(level.startTimeInSeconds * 1000).toISOString(),
75
+ level: terraLevel,
76
+ });
77
+ }
78
+ }
79
+ samples.sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime());
80
+ return samples.length > 0 ? samples : undefined;
81
+ }
82
+ function buildRespirationData(sleep) {
83
+ const hasBreathSamples = sleep.timeOffsetSleepRespiration != null &&
84
+ Object.keys(sleep.timeOffsetSleepRespiration).length > 0;
85
+ const hasSpO2Samples = sleep.timeOffsetSleepSpo2 != null &&
86
+ Object.keys(sleep.timeOffsetSleepSpo2).length > 0;
87
+ if (!hasBreathSamples && !hasSpO2Samples) {
88
+ return undefined;
89
+ }
90
+ const startTime = sleep.startTimeInSeconds ?? 0;
91
+ const breathSamples = hasBreathSamples
92
+ ? Object.entries(sleep.timeOffsetSleepRespiration).map(([offset, rate]) => ({
93
+ timestamp: new Date((startTime + parseInt(offset, 10)) * 1000).toISOString(),
94
+ breaths_per_min: rate,
95
+ }))
96
+ : undefined;
97
+ const spo2Samples = hasSpO2Samples
98
+ ? Object.entries(sleep.timeOffsetSleepSpo2).map(([offset, pct]) => ({
99
+ timestamp: new Date((startTime + parseInt(offset, 10)) * 1000).toISOString(),
100
+ percentage: pct,
101
+ }))
102
+ : undefined;
103
+ return {
104
+ breaths_data: breathSamples && breathSamples.length > 0
105
+ ? { samples: breathSamples }
106
+ : undefined,
107
+ oxygen_saturation_data: spo2Samples && spo2Samples.length > 0
108
+ ? { samples: spo2Samples }
109
+ : undefined,
110
+ };
111
+ }
112
+ function buildScoresData(sleep) {
113
+ const overallScore = sleep.overallSleepScore?.value;
114
+ if (overallScore == null)
115
+ return undefined;
116
+ return {
117
+ sleep: overallScore,
118
+ };
119
+ }
120
+ //# sourceMappingURL=sleeps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sleeps.js","sourceRoot":"","sources":["../../../../src/component/garmin/transform/sleeps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { SomaDaily } from "../../validators/daily.js";
2
+ import type { GarminStress } from "../types/garmin.js";
3
+ /**
4
+ * Transform a Garmin Stress Details push item into a Soma Daily document shape.
5
+ *
6
+ * Stress records are ingested into the `daily` table via `ingestDaily`,
7
+ * keyed by `metadata.start_time + metadata.end_time`.
8
+ *
9
+ * Returns `null` when no meaningful stress data is present.
10
+ */
11
+ export declare function transformStress(stress: GarminStress): SomaDaily | null;
12
+ //# sourceMappingURL=stress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stress.d.ts","sourceRoot":"","sources":["../../../../src/component/garmin/transform/stress.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,CA2DtE"}
@@ -0,0 +1,56 @@
1
+ // ─── Stress Details Transformer ──────────────────────────────────────────────
2
+ // Transforms a Garmin Stress Details push item into the Soma Daily schema shape.
3
+ //
4
+ // Stress details summaries contain 3-minute stress level averages and body
5
+ // battery values throughout the day. We map these into the Daily model's
6
+ // stress_data field.
7
+ /**
8
+ * Transform a Garmin Stress Details push item into a Soma Daily document shape.
9
+ *
10
+ * Stress records are ingested into the `daily` table via `ingestDaily`,
11
+ * keyed by `metadata.start_time + metadata.end_time`.
12
+ *
13
+ * Returns `null` when no meaningful stress data is present.
14
+ */
15
+ export function transformStress(stress) {
16
+ const hasSummary = stress.averageStressLevel != null || stress.maxStressLevel != null;
17
+ const hasStressSamples = stress.timeOffsetStressLevelValues != null &&
18
+ Object.keys(stress.timeOffsetStressLevelValues).length > 0;
19
+ const hasBodyBatterySamples = stress.timeOffsetBodyBatteryValues != null &&
20
+ Object.keys(stress.timeOffsetBodyBatteryValues).length > 0;
21
+ if (!hasSummary && !hasStressSamples && !hasBodyBatterySamples) {
22
+ return null;
23
+ }
24
+ const startSeconds = stress.startTimeInSeconds ?? 0;
25
+ const durationSeconds = stress.durationInSeconds ?? 86400;
26
+ const startTime = new Date(startSeconds * 1000).toISOString();
27
+ const endTime = new Date((startSeconds + durationSeconds) * 1000).toISOString();
28
+ const stressSamples = hasStressSamples
29
+ ? Object.entries(stress.timeOffsetStressLevelValues).map(([offset, level]) => ({
30
+ timestamp: new Date((startSeconds + parseInt(offset, 10)) * 1000).toISOString(),
31
+ level,
32
+ }))
33
+ : undefined;
34
+ const bodyBatterySamples = hasBodyBatterySamples
35
+ ? Object.entries(stress.timeOffsetBodyBatteryValues).map(([offset, level]) => ({
36
+ timestamp: new Date((startSeconds + parseInt(offset, 10)) * 1000).toISOString(),
37
+ level,
38
+ }))
39
+ : undefined;
40
+ return {
41
+ metadata: {
42
+ start_time: startTime,
43
+ end_time: endTime,
44
+ upload_type: 1,
45
+ },
46
+ stress_data: {
47
+ avg_stress_level: stress.averageStressLevel,
48
+ max_stress_level: stress.maxStressLevel,
49
+ samples: stressSamples && stressSamples.length > 0 ? stressSamples : undefined,
50
+ body_battery_samples: bodyBatterySamples && bodyBatterySamples.length > 0
51
+ ? bodyBatterySamples
52
+ : undefined,
53
+ },
54
+ };
55
+ }
56
+ //# sourceMappingURL=stress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stress.js","sourceRoot":"","sources":["../../../../src/component/garmin/transform/stress.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,iFAAiF;AACjF,EAAE;AACF,2EAA2E;AAC3E,yEAAyE;AACzE,qBAAqB;AAKrB;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,MAAM,UAAU,GACd,MAAM,CAAC,kBAAkB,IAAI,IAAI,IAAI,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC;IACrE,MAAM,gBAAgB,GACpB,MAAM,CAAC,2BAA2B,IAAI,IAAI;QAC1C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7D,MAAM,qBAAqB,GACzB,MAAM,CAAC,2BAA2B,IAAI,IAAI;QAC1C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAE7D,IAAI,CAAC,UAAU,IAAI,CAAC,gBAAgB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,kBAAkB,IAAI,CAAC,CAAC;IACpD,MAAM,eAAe,GAAG,MAAM,CAAC,iBAAiB,IAAI,KAAK,CAAC;IAC1D,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9D,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,YAAY,GAAG,eAAe,CAAC,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IAEhF,MAAM,aAAa,GAAG,gBAAgB;QACpC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,2BAA4B,CAAC,CAAC,GAAG,CACrD,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YACpB,SAAS,EAAE,IAAI,IAAI,CACjB,CAAC,YAAY,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAC7C,CAAC,WAAW,EAAE;YACf,KAAK;SACN,CAAC,CACH;QACH,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,kBAAkB,GAAG,qBAAqB;QAC9C,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,2BAA4B,CAAC,CAAC,GAAG,CACrD,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YACpB,SAAS,EAAE,IAAI,IAAI,CACjB,CAAC,YAAY,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAC7C,CAAC,WAAW,EAAE;YACf,KAAK;SACN,CAAC,CACH;QACH,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO;QACL,QAAQ,EAAE;YACR,UAAU,EAAE,SAAS;YACrB,QAAQ,EAAE,OAAO;YACjB,WAAW,EAAE,CAAC;SACf;QAED,WAAW,EAAE;YACX,gBAAgB,EAAE,MAAM,CAAC,kBAAkB;YAC3C,gBAAgB,EAAE,MAAM,CAAC,cAAc;YACvC,OAAO,EACL,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;YACvE,oBAAoB,EAClB,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC;gBACjD,CAAC,CAAC,kBAAkB;gBACpB,CAAC,CAAC,SAAS;SAChB;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { SomaBody } from "../../validators/body.js";
2
+ import type { GarminUserMetrics } from "../types/garmin.js";
3
+ /**
4
+ * Transform a Garmin User Metrics push item into a Soma Body document shape.
5
+ *
6
+ * User metrics records are ingested into the `body` table via `ingestBody`,
7
+ * keyed by `metadata.start_time + metadata.end_time`.
8
+ *
9
+ * Returns `null` when no meaningful metrics data is present.
10
+ */
11
+ export declare function transformUserMetrics(metrics: GarminUserMetrics): SomaBody | null;
12
+ //# sourceMappingURL=userMetrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userMetrics.d.ts","sourceRoot":"","sources":["../../../../src/component/garmin/transform/userMetrics.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,QAAQ,GAAG,IAAI,CAqChF"}
@@ -0,0 +1,48 @@
1
+ // ─── User Metrics Transformer ────────────────────────────────────────────────
2
+ // Transforms a Garmin User Metrics push item into the Soma Body schema shape.
3
+ //
4
+ // User Metrics summaries contain VO2 Max, VO2 Max Cycling, fitness age, and
5
+ // an enhanced flag. We map these into the Body model's oxygen_data and
6
+ // measurements_data fields.
7
+ /**
8
+ * Transform a Garmin User Metrics push item into a Soma Body document shape.
9
+ *
10
+ * User metrics records are ingested into the `body` table via `ingestBody`,
11
+ * keyed by `metadata.start_time + metadata.end_time`.
12
+ *
13
+ * Returns `null` when no meaningful metrics data is present.
14
+ */
15
+ export function transformUserMetrics(metrics) {
16
+ const dateStr = metrics.calendarDate;
17
+ const startTime = dateStr
18
+ ? `${dateStr}T00:00:00.000Z`
19
+ : new Date(0).toISOString();
20
+ const endTime = dateStr
21
+ ? `${dateStr}T23:59:59.999Z`
22
+ : new Date(0).toISOString();
23
+ const hasVo2 = metrics.vo2Max != null || metrics.vo2MaxCycling != null;
24
+ const hasFitnessAge = metrics.fitnessAge != null;
25
+ if (!hasVo2 && !hasFitnessAge) {
26
+ return null;
27
+ }
28
+ return {
29
+ metadata: {
30
+ start_time: startTime,
31
+ end_time: endTime,
32
+ },
33
+ oxygen_data: hasVo2
34
+ ? { vo2max_ml_per_min_per_kg: metrics.vo2Max ?? metrics.vo2MaxCycling }
35
+ : undefined,
36
+ measurements_data: hasFitnessAge
37
+ ? {
38
+ measurements: [
39
+ {
40
+ measurement_time: startTime,
41
+ estimated_fitness_age: String(metrics.fitnessAge),
42
+ },
43
+ ],
44
+ }
45
+ : undefined,
46
+ };
47
+ }
48
+ //# sourceMappingURL=userMetrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userMetrics.js","sourceRoot":"","sources":["../../../../src/component/garmin/transform/userMetrics.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,8EAA8E;AAC9E,EAAE;AACF,4EAA4E;AAC5E,uEAAuE;AACvE,4BAA4B;AAK5B;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAA0B;IAC7D,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;IACrC,MAAM,SAAS,GAAG,OAAO;QACvB,CAAC,CAAC,GAAG,OAAO,gBAAgB;QAC5B,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,OAAO;QACrB,CAAC,CAAC,GAAG,OAAO,gBAAgB;QAC5B,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAE9B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,IAAI,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC;IACvE,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;IAEjD,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,QAAQ,EAAE;YACR,UAAU,EAAE,SAAS;YACrB,QAAQ,EAAE,OAAO;SAClB;QAED,WAAW,EAAE,MAAM;YACjB,CAAC,CAAC,EAAE,wBAAwB,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,aAAa,EAAE;YACvE,CAAC,CAAC,SAAS;QAEb,iBAAiB,EAAE,aAAa;YAC9B,CAAC,CAAC;gBACE,YAAY,EAAE;oBACZ;wBACE,gBAAgB,EAAE,SAAS;wBAC3B,qBAAqB,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;qBAClD;iBACF;aACF;YACH,CAAC,CAAC,SAAS;KACd,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { z } from "zod";
2
+ import type { zClientActivity, zClientActivityDetail, zClientAutoActivityMoveIq, zClientBloodPressure, zClientBodyComp, zClientDaily, zClientDailySpo2Acclimation, zClientEpoch, zClientHealthSnapshot, zClientHrvSummary, zClientLap, zClientRespiration, zClientSkinTemp, zClientSleep, zClientStress, zClientSummarizedMenstrualCycle, zClientUserMetrics, zSample } from "./zod/zod.gen.js";
3
+ export type GarminActivity = z.infer<typeof zClientActivity>;
4
+ export type GarminActivityDetail = z.infer<typeof zClientActivityDetail>;
5
+ export type GarminDaily = z.infer<typeof zClientDaily>;
6
+ export type GarminEpoch = z.infer<typeof zClientEpoch>;
7
+ export type GarminHealthSnapshot = z.infer<typeof zClientHealthSnapshot>;
8
+ export type GarminHRVSummary = z.infer<typeof zClientHrvSummary>;
9
+ export type GarminPulseOx = z.infer<typeof zClientDailySpo2Acclimation>;
10
+ export type GarminSample = z.infer<typeof zSample>;
11
+ export type GarminLap = z.infer<typeof zClientLap>;
12
+ export type GarminBloodPressure = z.infer<typeof zClientBloodPressure>;
13
+ export type GarminBodyComposition = z.infer<typeof zClientBodyComp>;
14
+ export type GarminMoveIQEvent = z.infer<typeof zClientAutoActivityMoveIq>;
15
+ export type GarminRespiration = z.infer<typeof zClientRespiration>;
16
+ export type GarminSkinTemperature = z.infer<typeof zClientSkinTemp>;
17
+ export type GarminSleep = z.infer<typeof zClientSleep>;
18
+ export type GarminStress = z.infer<typeof zClientStress>;
19
+ export type GarminUserMetrics = z.infer<typeof zClientUserMetrics>;
20
+ export type GarminMenstrualCycleTracking = z.infer<typeof zClientSummarizedMenstrualCycle>;
21
+ //# sourceMappingURL=garmin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"garmin.d.ts","sourceRoot":"","sources":["../../../../src/component/garmin/types/garmin.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,2BAA2B,EAC3B,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,EACjB,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,aAAa,EACb,+BAA+B,EAC/B,kBAAkB,EAClB,OAAO,EACR,MAAM,kBAAkB,CAAC;AAE1B,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAC7D,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACzE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AACvD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AACvD,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACzE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACjE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AACxE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;AACnD,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AACnD,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACvE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACpE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC1E,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AACnE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACpE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AACvD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AACzD,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AACnE,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ // ─── Garmin Types ────────────────────────────────────────────────────────────
2
+ // Friendly type aliases for the auto-generated Zod schemas from the Garmin
3
+ // Wellness API OpenAPI spec. Import these instead of writing inline z.infer<>
4
+ // in every file.
5
+ export {};
6
+ //# sourceMappingURL=garmin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"garmin.js","sourceRoot":"","sources":["../../../../src/component/garmin/types/garmin.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,2EAA2E;AAC3E,8EAA8E;AAC9E,iBAAiB"}