@nativesquare/soma 0.7.3 → 0.8.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.
- package/dist/client/index.d.ts +83 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +131 -0
- package/dist/client/index.js.map +1 -1
- package/dist/component/_generated/component.d.ts +159 -0
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/garmin.d.ts +190 -6
- package/dist/component/garmin.d.ts.map +1 -1
- package/dist/component/garmin.js +805 -25
- package/dist/component/garmin.js.map +1 -1
- package/dist/component/private.d.ts +18 -0
- package/dist/component/private.d.ts.map +1 -1
- package/dist/component/private.js +18 -0
- package/dist/component/private.js.map +1 -1
- package/dist/component/public.d.ts +88 -42
- package/dist/component/public.d.ts.map +1 -1
- package/dist/component/public.js +12 -2
- package/dist/component/public.js.map +1 -1
- package/dist/component/schema.d.ts +87 -32
- package/dist/component/schema.d.ts.map +1 -1
- package/dist/component/schema.js +2 -1
- package/dist/component/schema.js.map +1 -1
- package/dist/component/validators/connection.d.ts +1 -0
- package/dist/component/validators/connection.d.ts.map +1 -1
- package/dist/component/validators/connection.js +2 -0
- package/dist/component/validators/connection.js.map +1 -1
- package/dist/component/validators/daily.d.ts +40 -5
- package/dist/component/validators/daily.d.ts.map +1 -1
- package/dist/component/validators/daily.js +10 -1
- package/dist/component/validators/daily.js.map +1 -1
- package/dist/component/validators/enums.d.ts +1 -1
- package/dist/component/validators/plannedWorkout.d.ts +5 -1
- package/dist/component/validators/plannedWorkout.d.ts.map +1 -1
- package/dist/component/validators/plannedWorkout.js +4 -0
- package/dist/component/validators/plannedWorkout.js.map +1 -1
- package/dist/component/validators/sleep.d.ts +8 -8
- package/dist/garmin/activity.d.ts +7 -16
- package/dist/garmin/activity.d.ts.map +1 -1
- package/dist/garmin/activity.js +17 -23
- package/dist/garmin/activity.js.map +1 -1
- package/dist/garmin/bloodPressure.d.ts +28 -0
- package/dist/garmin/bloodPressure.d.ts.map +1 -0
- package/dist/garmin/bloodPressure.js +34 -0
- package/dist/garmin/bloodPressure.js.map +1 -0
- package/dist/garmin/body.js +1 -1
- package/dist/garmin/body.js.map +1 -1
- package/dist/garmin/client.d.ts +117 -17
- package/dist/garmin/client.d.ts.map +1 -1
- package/dist/garmin/client.js +337 -43
- package/dist/garmin/client.js.map +1 -1
- package/dist/garmin/daily.d.ts.map +1 -1
- package/dist/garmin/daily.js +3 -3
- package/dist/garmin/daily.js.map +1 -1
- package/dist/garmin/hrv.d.ts +30 -0
- package/dist/garmin/hrv.d.ts.map +1 -0
- package/dist/garmin/hrv.js +45 -0
- package/dist/garmin/hrv.js.map +1 -0
- package/dist/garmin/index.d.ts +16 -2
- package/dist/garmin/index.d.ts.map +1 -1
- package/dist/garmin/index.js +8 -1
- package/dist/garmin/index.js.map +1 -1
- package/dist/garmin/maps/activity-type.d.ts +1 -2
- package/dist/garmin/maps/activity-type.d.ts.map +1 -1
- package/dist/garmin/maps/activity-type.js +1 -0
- package/dist/garmin/maps/activity-type.js.map +1 -1
- package/dist/garmin/menstruation.d.ts +6 -4
- package/dist/garmin/menstruation.d.ts.map +1 -1
- package/dist/garmin/menstruation.js +12 -8
- package/dist/garmin/menstruation.js.map +1 -1
- package/dist/garmin/pulseOx.d.ts +24 -0
- package/dist/garmin/pulseOx.d.ts.map +1 -0
- package/dist/garmin/pulseOx.js +33 -0
- package/dist/garmin/pulseOx.js.map +1 -0
- package/dist/garmin/respiration.d.ts +29 -0
- package/dist/garmin/respiration.d.ts.map +1 -0
- package/dist/garmin/respiration.js +42 -0
- package/dist/garmin/respiration.js.map +1 -0
- package/dist/garmin/skinTemp.d.ts +27 -0
- package/dist/garmin/skinTemp.d.ts.map +1 -0
- package/dist/garmin/skinTemp.js +35 -0
- package/dist/garmin/skinTemp.js.map +1 -0
- package/dist/garmin/sleep.d.ts +4 -4
- package/dist/garmin/sleep.d.ts.map +1 -1
- package/dist/garmin/sleep.js +15 -9
- package/dist/garmin/sleep.js.map +1 -1
- package/dist/garmin/stressDetails.d.ts +30 -0
- package/dist/garmin/stressDetails.d.ts.map +1 -0
- package/dist/garmin/stressDetails.js +49 -0
- package/dist/garmin/stressDetails.js.map +1 -0
- package/dist/garmin/sync.d.ts +14 -0
- package/dist/garmin/sync.d.ts.map +1 -1
- package/dist/garmin/sync.js +287 -5
- package/dist/garmin/sync.js.map +1 -1
- package/dist/garmin/types.d.ts +77 -186
- package/dist/garmin/types.d.ts.map +1 -1
- package/dist/garmin/types.js +4 -2
- package/dist/garmin/types.js.map +1 -1
- package/dist/garmin/userMetrics.d.ts +23 -0
- package/dist/garmin/userMetrics.d.ts.map +1 -0
- package/dist/garmin/userMetrics.js +41 -0
- package/dist/garmin/userMetrics.js.map +1 -0
- package/dist/validators.d.ts +107 -28
- package/dist/validators.d.ts.map +1 -1
- package/package.json +133 -124
- package/src/client/index.ts +199 -0
- package/src/component/_generated/component.ts +161 -2
- package/src/component/garmin.ts +898 -26
- package/src/component/private.ts +21 -0
- package/src/component/public.ts +11 -2
- package/src/component/schema.ts +2 -1
- package/src/component/validators/connection.ts +2 -0
- package/src/component/validators/daily.ts +15 -0
- package/src/component/validators/plannedWorkout.ts +4 -0
- package/src/garmin/activity.test.ts +13 -21
- package/src/garmin/activity.ts +38 -45
- package/src/garmin/bloodPressure.ts +41 -0
- package/src/garmin/body.ts +1 -1
- package/src/garmin/client.ts +550 -71
- package/src/garmin/daily.ts +8 -4
- package/src/garmin/hrv.ts +57 -0
- package/src/garmin/index.ts +77 -7
- package/src/garmin/maps/activity-type.ts +2 -2
- package/src/garmin/menstruation.ts +14 -12
- package/src/garmin/pulseOx.ts +45 -0
- package/src/garmin/respiration.ts +55 -0
- package/src/garmin/skinTemp.ts +42 -0
- package/src/garmin/sleep.test.ts +5 -6
- package/src/garmin/sleep.ts +22 -16
- package/src/garmin/spec/wellness-api.json +1 -0
- package/src/garmin/stressDetails.ts +71 -0
- package/src/garmin/sync.ts +348 -5
- package/src/garmin/types.ts +88 -300
- package/src/garmin/userMetrics.ts +50 -0
- package/src/garmin/wellness-api.d.ts +5637 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hrv.js","sourceRoot":"","sources":["../../src/garmin/hrv.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,kFAAkF;AAMlF;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,GAAqB;IAChD,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACrD,MAAM,KAAK,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAE5D,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,IAAI,IAAI,IAAI,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC;IAC7E,MAAM,UAAU,GACd,GAAG,CAAC,SAAS,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAEjE,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/B,OAAO;YACL,aAAa,EAAE,GAAG,CAAC,YAAY;YAC/B,eAAe,EAAE,SAAS;SAC3B,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,GAAG,CAAC,kBAAkB,IAAI,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,UAAU;QAC3B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YACvD,SAAS,EAAE,IAAI,IAAI,CACjB,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAC1C,CAAC,WAAW,EAAE;YACf,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;QACL,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO;QACL,aAAa,EAAE,GAAG,CAAC,YAAY;QAC/B,eAAe,EAAE;YACf,OAAO,EAAE,UAAU;gBACjB,CAAC,CAAC;oBACE,aAAa,EAAE,GAAG,CAAC,YAAY;oBAC/B,aAAa,EAAE,GAAG,CAAC,iBAAiB;iBACrC;gBACH,CAAC,CAAC,SAAS;YACb,QAAQ,EACN,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;gBACjC,CAAC,CAAC,EAAE,iBAAiB,EAAE,UAAU,EAAE;gBACnC,CAAC,CAAC,SAAS;SAChB;KACF,CAAC;AACJ,CAAC"}
|
package/dist/garmin/index.d.ts
CHANGED
|
@@ -8,13 +8,27 @@ export { transformBody } from "./body.js";
|
|
|
8
8
|
export type { BodyData } from "./body.js";
|
|
9
9
|
export { transformMenstruation } from "./menstruation.js";
|
|
10
10
|
export type { MenstruationData } from "./menstruation.js";
|
|
11
|
+
export { transformBloodPressure } from "./bloodPressure.js";
|
|
12
|
+
export type { BloodPressureData } from "./bloodPressure.js";
|
|
13
|
+
export { transformSkinTemp } from "./skinTemp.js";
|
|
14
|
+
export type { SkinTempData } from "./skinTemp.js";
|
|
15
|
+
export { transformUserMetrics } from "./userMetrics.js";
|
|
16
|
+
export type { UserMetricsData } from "./userMetrics.js";
|
|
17
|
+
export { transformHRV } from "./hrv.js";
|
|
18
|
+
export type { HRVData } from "./hrv.js";
|
|
19
|
+
export { transformStressDetails } from "./stressDetails.js";
|
|
20
|
+
export type { StressDetailsData } from "./stressDetails.js";
|
|
21
|
+
export { transformPulseOx } from "./pulseOx.js";
|
|
22
|
+
export type { PulseOxData } from "./pulseOx.js";
|
|
23
|
+
export { transformRespiration } from "./respiration.js";
|
|
24
|
+
export type { RespirationData } from "./respiration.js";
|
|
11
25
|
export { mapActivityType } from "./maps/activity-type.js";
|
|
12
26
|
export { mapSleepLevel } from "./maps/sleep-level.js";
|
|
13
27
|
export { GarminClient, GarminApiError } from "./client.js";
|
|
14
28
|
export type { GarminClientOptions, TimeRangeParams } from "./client.js";
|
|
15
29
|
export { generateCodeVerifier, generateCodeChallenge, generateState, buildAuthUrl, exchangeCode, refreshToken, } from "./auth.js";
|
|
16
30
|
export type { BuildAuthUrlOptions, ExchangeCodeOptions, RefreshTokenOptions, } from "./auth.js";
|
|
17
|
-
export { syncAll, syncActivities, syncDailies, syncSleep, syncBody, syncMenstruation, } from "./sync.js";
|
|
31
|
+
export { syncAll, syncActivities, syncDailies, syncSleep, syncBody, syncMenstruation, syncBloodPressures, syncSkinTemp, syncUserMetrics, syncHRV, syncStressDetails, syncPulseOx, syncRespiration, } from "./sync.js";
|
|
18
32
|
export type { SyncOptions, SyncResult, SyncAllResult, } from "./sync.js";
|
|
19
|
-
export type { GarminActivity,
|
|
33
|
+
export type { GarminActivity, GarminActivityDetail, GarminDaily, GarminSleep, GarminBodyComposition, GarminMenstrualCycle, GarminUserMetrics, GarminStressDetail, GarminSkinTemperature, GarminRespiration, GarminPulseOx, GarminHRVSummary, GarminHealthSnapshot, GarminEpoch, GarminBloodPressure, GarminMoveIQEvent, GarminSolar, GarminSample, GarminLap, GarminTimeRange, GarminSleepScoreItem, GarminNap, GarminDailyExtended, GarminSleepExtended, GarminActivityExtended, GarminDailySummary, GarminMenstrualCycleData, GarminSleepLevel, GarminActivityLap, GarminActivitySample, GarminWorkout, GarminWorkoutStep, GarminWorkoutRepeatStep, GarminWorkoutSegment, GarminWorkoutSchedule, GarminWorkoutSport, GarminOAuth2TokenResponse, GarminWebhookActivityPayload, GarminWebhookDailyPayload, GarminWebhookSleepPayload, GarminWebhookBodyPayload, GarminWebhookBloodPressurePayload, GarminWebhookSkinTempPayload, GarminWebhookUserMetricsPayload, GarminWebhookHRVPayload, GarminWebhookStressDetailPayload, GarminWebhookPulseOxPayload, GarminWebhookRespirationPayload, } from "./types.js";
|
|
20
34
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/garmin/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/garmin/index.ts"],"names":[],"mappings":"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"}
|
package/dist/garmin/index.js
CHANGED
|
@@ -9,6 +9,13 @@ export { transformDaily } from "./daily.js";
|
|
|
9
9
|
export { transformSleep } from "./sleep.js";
|
|
10
10
|
export { transformBody } from "./body.js";
|
|
11
11
|
export { transformMenstruation } from "./menstruation.js";
|
|
12
|
+
export { transformBloodPressure } from "./bloodPressure.js";
|
|
13
|
+
export { transformSkinTemp } from "./skinTemp.js";
|
|
14
|
+
export { transformUserMetrics } from "./userMetrics.js";
|
|
15
|
+
export { transformHRV } from "./hrv.js";
|
|
16
|
+
export { transformStressDetails } from "./stressDetails.js";
|
|
17
|
+
export { transformPulseOx } from "./pulseOx.js";
|
|
18
|
+
export { transformRespiration } from "./respiration.js";
|
|
12
19
|
// ── Enum Maps ────────────────────────────────────────────────────────────────
|
|
13
20
|
export { mapActivityType } from "./maps/activity-type.js";
|
|
14
21
|
export { mapSleepLevel } from "./maps/sleep-level.js";
|
|
@@ -17,5 +24,5 @@ export { GarminClient, GarminApiError } from "./client.js";
|
|
|
17
24
|
// ── OAuth 2.0 PKCE Helpers ───────────────────────────────────────────────────
|
|
18
25
|
export { generateCodeVerifier, generateCodeChallenge, generateState, buildAuthUrl, exchangeCode, refreshToken, } from "./auth.js";
|
|
19
26
|
// ── Sync Helpers ─────────────────────────────────────────────────────────────
|
|
20
|
-
export { syncAll, syncActivities, syncDailies, syncSleep, syncBody, syncMenstruation, } from "./sync.js";
|
|
27
|
+
export { syncAll, syncActivities, syncDailies, syncSleep, syncBody, syncMenstruation, syncBloodPressures, syncSkinTemp, syncUserMetrics, syncHRV, syncStressDetails, syncPulseOx, syncRespiration, } from "./sync.js";
|
|
21
28
|
//# sourceMappingURL=index.js.map
|
package/dist/garmin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/garmin/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,8FAA8F;AAC9F,EAAE;AACF,8DAA8D;AAC9D,uEAAuE;AAEvE,gFAAgF;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGlD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAG1D,gFAAgF;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,gFAAgF;AAChF,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG3D,gFAAgF;AAChF,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,YAAY,GACb,MAAM,WAAW,CAAC;AAOnB,gFAAgF;AAChF,OAAO,EACL,OAAO,EACP,cAAc,EACd,WAAW,EACX,SAAS,EACT,QAAQ,EACR,gBAAgB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/garmin/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,8FAA8F;AAC9F,EAAE;AACF,8DAA8D;AAC9D,uEAAuE;AAEvE,gFAAgF;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGlD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAG1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAG5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGlD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAGxD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAG5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAGxD,gFAAgF;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,gFAAgF;AAChF,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG3D,gFAAgF;AAChF,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,YAAY,GACb,MAAM,WAAW,CAAC;AAOnB,gFAAgF;AAChF,OAAO,EACL,OAAO,EACP,cAAc,EACd,WAAW,EACX,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,OAAO,EACP,iBAAiB,EACjB,WAAW,EACX,eAAe,GAChB,MAAM,WAAW,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import type { GarminActivityType } from "../types.js";
|
|
2
1
|
/**
|
|
3
2
|
* Map a Garmin activity type string to the Terra ActivityType enum.
|
|
4
3
|
* Returns Terra "Other" (108) for unknown types.
|
|
5
4
|
*/
|
|
6
|
-
export declare function mapActivityType(activityType:
|
|
5
|
+
export declare function mapActivityType(activityType: string): number;
|
|
7
6
|
//# sourceMappingURL=activity-type.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity-type.d.ts","sourceRoot":"","sources":["../../../src/garmin/maps/activity-type.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"activity-type.d.ts","sourceRoot":"","sources":["../../../src/garmin/maps/activity-type.ts"],"names":[],"mappings":"AA6GA;;;GAGG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE5D"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
//
|
|
5
5
|
// Garmin values: Garmin Health API activity type strings
|
|
6
6
|
// Terra values: https://docs.tryterra.co/reference/health-and-fitness-api/data-models#activitytype
|
|
7
|
+
// Garmin activityType is a free-form string in the spec
|
|
7
8
|
const activityTypeMap = {
|
|
8
9
|
// ── Running ─────────────────────────────────────────────────────────────
|
|
9
10
|
// Terra Running = 8
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity-type.js","sourceRoot":"","sources":["../../../src/garmin/maps/activity-type.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,yEAAyE;AACzE,2BAA2B;AAC3B,EAAE;AACF,yDAAyD;AACzD,oGAAoG;
|
|
1
|
+
{"version":3,"file":"activity-type.js","sourceRoot":"","sources":["../../../src/garmin/maps/activity-type.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { GarminMenstrualCycle } from "./types.js";
|
|
2
2
|
export type MenstruationData = ReturnType<typeof transformMenstruation>;
|
|
3
3
|
/**
|
|
4
4
|
* Transform a Garmin menstrual cycle record into a Soma Menstruation document shape.
|
|
@@ -6,17 +6,19 @@ export type MenstruationData = ReturnType<typeof transformMenstruation>;
|
|
|
6
6
|
* @param data - The Garmin menstrual cycle data from the Health API
|
|
7
7
|
* @returns Soma Menstruation fields (without connectionId/userId)
|
|
8
8
|
*/
|
|
9
|
-
export declare function transformMenstruation(data:
|
|
9
|
+
export declare function transformMenstruation(data: GarminMenstrualCycle): {
|
|
10
10
|
metadata: {
|
|
11
|
-
start_time: string;
|
|
12
|
-
end_time: string;
|
|
11
|
+
start_time: string | undefined;
|
|
12
|
+
end_time: string | undefined;
|
|
13
13
|
};
|
|
14
14
|
menstruation_data: {
|
|
15
15
|
day_in_cycle: number | undefined;
|
|
16
16
|
current_phase: string | undefined;
|
|
17
17
|
length_of_current_phase_days: number | undefined;
|
|
18
|
+
days_until_next_phase: number | undefined;
|
|
18
19
|
period_length_days: number | undefined;
|
|
19
20
|
predicted_cycle_length_days: number | undefined;
|
|
21
|
+
cycle_length_days: number | undefined;
|
|
20
22
|
is_predicted_cycle: string | undefined;
|
|
21
23
|
};
|
|
22
24
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menstruation.d.ts","sourceRoot":"","sources":["../../src/garmin/menstruation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"menstruation.d.ts","sourceRoot":"","sources":["../../src/garmin/menstruation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAExE;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,oBAAoB;;;;;;;;;;;;;;;EA8B/D"}
|
|
@@ -7,13 +7,14 @@
|
|
|
7
7
|
* @returns Soma Menstruation fields (without connectionId/userId)
|
|
8
8
|
*/
|
|
9
9
|
export function transformMenstruation(data) {
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
// Spec uses periodStartDate (date string like "2021-01-04")
|
|
11
|
+
const dateStr = data.periodStartDate;
|
|
12
|
+
const startTime = dateStr
|
|
13
|
+
? `${dateStr}T00:00:00.000Z`
|
|
14
|
+
: undefined;
|
|
15
|
+
const endTime = dateStr
|
|
16
|
+
? `${dateStr}T23:59:59.999Z`
|
|
17
|
+
: undefined;
|
|
17
18
|
return {
|
|
18
19
|
metadata: {
|
|
19
20
|
start_time: startTime,
|
|
@@ -21,10 +22,13 @@ export function transformMenstruation(data) {
|
|
|
21
22
|
},
|
|
22
23
|
menstruation_data: {
|
|
23
24
|
day_in_cycle: data.dayInCycle,
|
|
24
|
-
|
|
25
|
+
// Spec has currentPhaseType (string) replacing deprecated currentPhase (int)
|
|
26
|
+
current_phase: data.currentPhaseType?.toLowerCase(),
|
|
25
27
|
length_of_current_phase_days: data.lengthOfCurrentPhase,
|
|
28
|
+
days_until_next_phase: data.daysUntilNextPhase,
|
|
26
29
|
period_length_days: data.periodLength,
|
|
27
30
|
predicted_cycle_length_days: data.predictedCycleLength,
|
|
31
|
+
cycle_length_days: data.cycleLength,
|
|
28
32
|
is_predicted_cycle: data.isPredictedCycle != null
|
|
29
33
|
? String(data.isPredictedCycle)
|
|
30
34
|
: undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menstruation.js","sourceRoot":"","sources":["../../src/garmin/menstruation.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,kFAAkF;AAMlF;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,
|
|
1
|
+
{"version":3,"file":"menstruation.js","sourceRoot":"","sources":["../../src/garmin/menstruation.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,kFAAkF;AAMlF;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAA0B;IAC9D,4DAA4D;IAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC;IACrC,MAAM,SAAS,GAAG,OAAO;QACvB,CAAC,CAAC,GAAG,OAAO,gBAAgB;QAC5B,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,OAAO,GAAG,OAAO;QACrB,CAAC,CAAC,GAAG,OAAO,gBAAgB;QAC5B,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO;QACL,QAAQ,EAAE;YACR,UAAU,EAAE,SAAS;YACrB,QAAQ,EAAE,OAAO;SAClB;QAED,iBAAiB,EAAE;YACjB,YAAY,EAAE,IAAI,CAAC,UAAU;YAC7B,6EAA6E;YAC7E,aAAa,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,EAAE;YACnD,4BAA4B,EAAE,IAAI,CAAC,oBAAoB;YACvD,qBAAqB,EAAE,IAAI,CAAC,kBAAkB;YAC9C,kBAAkB,EAAE,IAAI,CAAC,YAAY;YACrC,2BAA2B,EAAE,IAAI,CAAC,oBAAoB;YACtD,iBAAiB,EAAE,IAAI,CAAC,WAAW;YACnC,kBAAkB,EAAE,IAAI,CAAC,gBAAgB,IAAI,IAAI;gBAC/C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;gBAC/B,CAAC,CAAC,SAAS;SACd;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { GarminPulseOx } from "./types.js";
|
|
2
|
+
export type PulseOxData = ReturnType<typeof transformPulseOx>;
|
|
3
|
+
/**
|
|
4
|
+
* Transform a Garmin pulse ox record into oxygen data fields for a Soma Daily.
|
|
5
|
+
*
|
|
6
|
+
* This produces a partial daily shape that can be merged into a matching
|
|
7
|
+
* daily record by date.
|
|
8
|
+
*
|
|
9
|
+
* @param pulseOx - The Garmin pulse ox data from the Health API
|
|
10
|
+
* @returns Partial Soma Daily oxygen_data fields
|
|
11
|
+
*/
|
|
12
|
+
export declare function transformPulseOx(pulseOx: GarminPulseOx): {
|
|
13
|
+
calendar_date: string | undefined;
|
|
14
|
+
oxygen_data: undefined;
|
|
15
|
+
} | {
|
|
16
|
+
calendar_date: string | undefined;
|
|
17
|
+
oxygen_data: {
|
|
18
|
+
saturation_samples: {
|
|
19
|
+
timestamp: string;
|
|
20
|
+
percentage: number;
|
|
21
|
+
}[] | undefined;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=pulseOx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pulseOx.d.ts","sourceRoot":"","sources":["../../src/garmin/pulseOx.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE9D;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa;;;;;;;;;;;EA4BtD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// ─── Pulse Ox Transformer ────────────────────────────────────────────────────
|
|
2
|
+
// Transforms Garmin pulse ox data into fields that enrich a Soma Daily record.
|
|
3
|
+
/**
|
|
4
|
+
* Transform a Garmin pulse ox record into oxygen data fields for a Soma Daily.
|
|
5
|
+
*
|
|
6
|
+
* This produces a partial daily shape that can be merged into a matching
|
|
7
|
+
* daily record by date.
|
|
8
|
+
*
|
|
9
|
+
* @param pulseOx - The Garmin pulse ox data from the Health API
|
|
10
|
+
* @returns Partial Soma Daily oxygen_data fields
|
|
11
|
+
*/
|
|
12
|
+
export function transformPulseOx(pulseOx) {
|
|
13
|
+
const hasSamples = pulseOx.timeOffsetSpo2Values != null &&
|
|
14
|
+
Object.keys(pulseOx.timeOffsetSpo2Values).length > 0;
|
|
15
|
+
if (!hasSamples) {
|
|
16
|
+
return {
|
|
17
|
+
calendar_date: pulseOx.calendarDate,
|
|
18
|
+
oxygen_data: undefined,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
const startTime = pulseOx.startTimeInSeconds ?? 0;
|
|
22
|
+
const samples = Object.entries(pulseOx.timeOffsetSpo2Values).map(([offset, percentage]) => ({
|
|
23
|
+
timestamp: new Date((startTime + parseInt(offset, 10)) * 1000).toISOString(),
|
|
24
|
+
percentage,
|
|
25
|
+
}));
|
|
26
|
+
return {
|
|
27
|
+
calendar_date: pulseOx.calendarDate,
|
|
28
|
+
oxygen_data: {
|
|
29
|
+
saturation_samples: samples.length > 0 ? samples : undefined,
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=pulseOx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pulseOx.js","sourceRoot":"","sources":["../../src/garmin/pulseOx.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,+EAA+E;AAM/E;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAsB;IACrD,MAAM,UAAU,GACd,OAAO,CAAC,oBAAoB,IAAI,IAAI;QACpC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAEvD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO;YACL,aAAa,EAAE,OAAO,CAAC,YAAY;YACnC,WAAW,EAAE,SAAS;SACvB,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,kBAAkB,IAAI,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAqB,CAAC,CAAC,GAAG,CAC/D,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;QACzB,SAAS,EAAE,IAAI,IAAI,CACjB,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAC1C,CAAC,WAAW,EAAE;QACf,UAAU;KACX,CAAC,CACH,CAAC;IAEF,OAAO;QACL,aAAa,EAAE,OAAO,CAAC,YAAY;QACnC,WAAW,EAAE;YACX,kBAAkB,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;SAC7D;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { GarminRespiration } from "./types.js";
|
|
2
|
+
export type RespirationData = ReturnType<typeof transformRespiration>;
|
|
3
|
+
/**
|
|
4
|
+
* Transform a Garmin respiration record into respiration data fields for a Soma Daily.
|
|
5
|
+
*
|
|
6
|
+
* This produces a partial daily shape that can be merged into a matching
|
|
7
|
+
* daily record by date.
|
|
8
|
+
*
|
|
9
|
+
* @param resp - The Garmin respiration data from the Health API
|
|
10
|
+
* @returns Partial Soma Daily respiration_data fields
|
|
11
|
+
*/
|
|
12
|
+
export declare function transformRespiration(resp: GarminRespiration): {
|
|
13
|
+
calendar_date: undefined;
|
|
14
|
+
respiration_data: undefined;
|
|
15
|
+
} | {
|
|
16
|
+
calendar_date: string;
|
|
17
|
+
respiration_data: {
|
|
18
|
+
breaths_data: {
|
|
19
|
+
avg_breaths_per_min: number;
|
|
20
|
+
min_breaths_per_min: number;
|
|
21
|
+
max_breaths_per_min: number;
|
|
22
|
+
samples: {
|
|
23
|
+
timestamp: string;
|
|
24
|
+
breaths_per_min: number;
|
|
25
|
+
}[] | undefined;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=respiration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"respiration.d.ts","sourceRoot":"","sources":["../../src/garmin/respiration.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEtE;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,iBAAiB;;;;;;;;;;;;;;;;EAsC3D"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// ─── Respiration Transformer ─────────────────────────────────────────────────
|
|
2
|
+
// Transforms Garmin respiration data into fields that enrich a Soma Daily record.
|
|
3
|
+
/**
|
|
4
|
+
* Transform a Garmin respiration record into respiration data fields for a Soma Daily.
|
|
5
|
+
*
|
|
6
|
+
* This produces a partial daily shape that can be merged into a matching
|
|
7
|
+
* daily record by date.
|
|
8
|
+
*
|
|
9
|
+
* @param resp - The Garmin respiration data from the Health API
|
|
10
|
+
* @returns Partial Soma Daily respiration_data fields
|
|
11
|
+
*/
|
|
12
|
+
export function transformRespiration(resp) {
|
|
13
|
+
const hasSamples = resp.timeOffsetEpochToBreaths != null &&
|
|
14
|
+
Object.keys(resp.timeOffsetEpochToBreaths).length > 0;
|
|
15
|
+
if (!hasSamples) {
|
|
16
|
+
return {
|
|
17
|
+
calendar_date: undefined,
|
|
18
|
+
respiration_data: undefined,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
const startTime = resp.startTimeInSeconds ?? 0;
|
|
22
|
+
const samples = Object.entries(resp.timeOffsetEpochToBreaths).map(([offset, breaths_per_min]) => ({
|
|
23
|
+
timestamp: new Date((startTime + parseInt(offset, 10)) * 1000).toISOString(),
|
|
24
|
+
breaths_per_min,
|
|
25
|
+
}));
|
|
26
|
+
// Compute summary stats from samples
|
|
27
|
+
const values = samples.map((s) => s.breaths_per_min);
|
|
28
|
+
const avg = values.reduce((sum, v) => sum + v, 0) / values.length;
|
|
29
|
+
return {
|
|
30
|
+
// Respiration endpoint doesn't have calendarDate, derive from startTime
|
|
31
|
+
calendar_date: new Date(startTime * 1000).toISOString().split("T")[0],
|
|
32
|
+
respiration_data: {
|
|
33
|
+
breaths_data: {
|
|
34
|
+
avg_breaths_per_min: Math.round(avg * 10) / 10,
|
|
35
|
+
min_breaths_per_min: Math.min(...values),
|
|
36
|
+
max_breaths_per_min: Math.max(...values),
|
|
37
|
+
samples: samples.length > 0 ? samples : undefined,
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=respiration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"respiration.js","sourceRoot":"","sources":["../../src/garmin/respiration.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,kFAAkF;AAMlF;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAuB;IAC1D,MAAM,UAAU,GACd,IAAI,CAAC,wBAAwB,IAAI,IAAI;QACrC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAExD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO;YACL,aAAa,EAAE,SAAS;YACxB,gBAAgB,EAAE,SAAS;SAC5B,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,IAAI,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAyB,CAAC,CAAC,GAAG,CAChE,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9B,SAAS,EAAE,IAAI,IAAI,CACjB,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAC1C,CAAC,WAAW,EAAE;QACf,eAAe;KAChB,CAAC,CACH,CAAC;IAEF,qCAAqC;IACrC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IAElE,OAAO;QACL,wEAAwE;QACxE,aAAa,EAAE,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrE,gBAAgB,EAAE;YAChB,YAAY,EAAE;gBACZ,mBAAmB,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE;gBAC9C,mBAAmB,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;gBACxC,mBAAmB,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;gBACxC,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;aAClD;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { GarminSkinTemperature } from "./types.js";
|
|
2
|
+
export type SkinTempData = ReturnType<typeof transformSkinTemp>;
|
|
3
|
+
/**
|
|
4
|
+
* Transform a Garmin skin temperature record into a Soma Body document shape.
|
|
5
|
+
*
|
|
6
|
+
* @param skinTemp - The Garmin skin temperature data from the Health API
|
|
7
|
+
* @returns Soma Body fields (without connectionId/userId)
|
|
8
|
+
*/
|
|
9
|
+
export declare function transformSkinTemp(skinTemp: GarminSkinTemperature): {
|
|
10
|
+
metadata: {
|
|
11
|
+
start_time: string;
|
|
12
|
+
end_time: string;
|
|
13
|
+
};
|
|
14
|
+
temperature_data: undefined;
|
|
15
|
+
} | {
|
|
16
|
+
metadata: {
|
|
17
|
+
start_time: string;
|
|
18
|
+
end_time: string;
|
|
19
|
+
};
|
|
20
|
+
temperature_data: {
|
|
21
|
+
skin_temperature_samples: {
|
|
22
|
+
timestamp: string;
|
|
23
|
+
temperature_celsius: number;
|
|
24
|
+
}[];
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=skinTemp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skinTemp.d.ts","sourceRoot":"","sources":["../../src/garmin/skinTemp.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEhE;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,qBAAqB;;;;;;;;;;;;;;;;;EA4BhE"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// ─── Skin Temperature Transformer ────────────────────────────────────────────
|
|
2
|
+
// Transforms Garmin skin temperature data into the Soma Body schema shape.
|
|
3
|
+
/**
|
|
4
|
+
* Transform a Garmin skin temperature record into a Soma Body document shape.
|
|
5
|
+
*
|
|
6
|
+
* @param skinTemp - The Garmin skin temperature data from the Health API
|
|
7
|
+
* @returns Soma Body fields (without connectionId/userId)
|
|
8
|
+
*/
|
|
9
|
+
export function transformSkinTemp(skinTemp) {
|
|
10
|
+
const startMs = (skinTemp.startTimeInSeconds ?? 0) * 1000;
|
|
11
|
+
const endMs = startMs + (skinTemp.durationInSeconds ?? 0) * 1000;
|
|
12
|
+
const startTime = new Date(startMs).toISOString();
|
|
13
|
+
const endTime = new Date(endMs).toISOString();
|
|
14
|
+
if (skinTemp.avgDeviationCelsius == null) {
|
|
15
|
+
return {
|
|
16
|
+
metadata: { start_time: startTime, end_time: endTime },
|
|
17
|
+
temperature_data: undefined,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
metadata: {
|
|
22
|
+
start_time: startTime,
|
|
23
|
+
end_time: endTime,
|
|
24
|
+
},
|
|
25
|
+
temperature_data: {
|
|
26
|
+
skin_temperature_samples: [
|
|
27
|
+
{
|
|
28
|
+
timestamp: startTime,
|
|
29
|
+
temperature_celsius: skinTemp.avgDeviationCelsius,
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=skinTemp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skinTemp.js","sourceRoot":"","sources":["../../src/garmin/skinTemp.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,2EAA2E;AAM3E;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAA+B;IAC/D,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;YACL,QAAQ,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE;YACtD,gBAAgB,EAAE,SAAS;SAC5B,CAAC;IACJ,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"}
|
package/dist/garmin/sleep.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { GarminSleepExtended } from "./types.js";
|
|
2
2
|
export type SleepData = ReturnType<typeof transformSleep>;
|
|
3
3
|
/**
|
|
4
4
|
* Transform a Garmin sleep session into a Soma Sleep document shape.
|
|
@@ -6,9 +6,9 @@ export type SleepData = ReturnType<typeof transformSleep>;
|
|
|
6
6
|
* @param sleep - The Garmin sleep data from the Health API
|
|
7
7
|
* @returns Soma Sleep fields (without connectionId/userId)
|
|
8
8
|
*/
|
|
9
|
-
export declare function transformSleep(sleep:
|
|
9
|
+
export declare function transformSleep(sleep: GarminSleepExtended): {
|
|
10
10
|
metadata: {
|
|
11
|
-
summary_id: string;
|
|
11
|
+
summary_id: string | undefined;
|
|
12
12
|
start_time: string;
|
|
13
13
|
end_time: string;
|
|
14
14
|
upload_type: number;
|
|
@@ -24,7 +24,7 @@ export declare function transformSleep(sleep: GarminSleep): {
|
|
|
24
24
|
duration_awake_state_seconds: number | undefined;
|
|
25
25
|
};
|
|
26
26
|
other: {
|
|
27
|
-
duration_in_bed_seconds: number;
|
|
27
|
+
duration_in_bed_seconds: number | undefined;
|
|
28
28
|
duration_unmeasurable_sleep_seconds: number | undefined;
|
|
29
29
|
};
|
|
30
30
|
hypnogram_samples: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../../src/garmin/sleep.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../../src/garmin/sleep.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAmB,MAAM,YAAY,CAAC;AAGvE,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAE1D;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB;;;;;;;;;;;;;;;;;;;;;;uBA0DrB,MAAM;mBAAS,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA/BxD"}
|
package/dist/garmin/sleep.js
CHANGED
|
@@ -8,21 +8,22 @@ import { mapSleepLevel } from "./maps/sleep-level.js";
|
|
|
8
8
|
* @returns Soma Sleep fields (without connectionId/userId)
|
|
9
9
|
*/
|
|
10
10
|
export function transformSleep(sleep) {
|
|
11
|
-
const startMs = sleep.startTimeInSeconds * 1000;
|
|
12
|
-
const endMs = startMs + sleep.durationInSeconds * 1000;
|
|
11
|
+
const startMs = (sleep.startTimeInSeconds ?? 0) * 1000;
|
|
12
|
+
const endMs = startMs + (sleep.durationInSeconds ?? 0) * 1000;
|
|
13
13
|
const uploadTypeMap = {
|
|
14
14
|
ENHANCED_FINAL: 2, // Automatic
|
|
15
15
|
ENHANCED_TENTATIVE: 4, // Indeterminate
|
|
16
16
|
AUTO_FINAL: 2, // Automatic
|
|
17
17
|
AUTO_TENTATIVE: 4, // Indeterminate
|
|
18
18
|
MANUAL: 1, // Manual
|
|
19
|
+
DEVICE: 2, // From device
|
|
19
20
|
};
|
|
20
21
|
return {
|
|
21
22
|
metadata: {
|
|
22
23
|
summary_id: sleep.summaryId,
|
|
23
24
|
start_time: new Date(startMs).toISOString(),
|
|
24
25
|
end_time: new Date(endMs).toISOString(),
|
|
25
|
-
upload_type: uploadTypeMap[sleep.validation] ?? 0,
|
|
26
|
+
upload_type: uploadTypeMap[sleep.validation ?? ""] ?? 0,
|
|
26
27
|
},
|
|
27
28
|
sleep_durations_data: buildSleepDurationsData(sleep),
|
|
28
29
|
heart_rate_data: buildHeartRateData(sleep),
|
|
@@ -60,6 +61,8 @@ function buildHypnogramSamples(sleep) {
|
|
|
60
61
|
continue;
|
|
61
62
|
const terraLevel = mapSleepLevel(stage);
|
|
62
63
|
for (const level of levels) {
|
|
64
|
+
if (level.startTimeInSeconds == null)
|
|
65
|
+
continue;
|
|
63
66
|
samples.push({
|
|
64
67
|
timestamp: new Date(level.startTimeInSeconds * 1000).toISOString(),
|
|
65
68
|
level: terraLevel,
|
|
@@ -74,8 +77,9 @@ function buildHeartRateData(sleep) {
|
|
|
74
77
|
Object.keys(sleep.timeOffsetHeartRateSamples).length === 0) {
|
|
75
78
|
return undefined;
|
|
76
79
|
}
|
|
80
|
+
const startTime = sleep.startTimeInSeconds ?? 0;
|
|
77
81
|
const hrSamples = Object.entries(sleep.timeOffsetHeartRateSamples).map(([offset, bpm]) => ({
|
|
78
|
-
timestamp: new Date((
|
|
82
|
+
timestamp: new Date((startTime + parseInt(offset, 10)) * 1000).toISOString(),
|
|
79
83
|
bpm,
|
|
80
84
|
}));
|
|
81
85
|
return {
|
|
@@ -86,20 +90,22 @@ function buildRespirationData(sleep) {
|
|
|
86
90
|
const hasBreathSummary = sleep.averageRespirationInBreathsPerMinute != null;
|
|
87
91
|
const hasBreathSamples = sleep.timeOffsetSleepRespiration != null &&
|
|
88
92
|
Object.keys(sleep.timeOffsetSleepRespiration).length > 0;
|
|
89
|
-
|
|
90
|
-
|
|
93
|
+
// Check both spec field (timeOffsetSleepSpo2) and extended field
|
|
94
|
+
const spo2Map = sleep.timeOffsetSleepSpo2 ?? sleep.timeOffsetSpo2Values;
|
|
95
|
+
const hasSpO2Samples = spo2Map != null && Object.keys(spo2Map).length > 0;
|
|
91
96
|
if (!hasBreathSummary && !hasBreathSamples && !hasSpO2Samples) {
|
|
92
97
|
return undefined;
|
|
93
98
|
}
|
|
99
|
+
const startTime = sleep.startTimeInSeconds ?? 0;
|
|
94
100
|
const breathSamples = hasBreathSamples
|
|
95
101
|
? Object.entries(sleep.timeOffsetSleepRespiration).map(([offset, rate]) => ({
|
|
96
|
-
timestamp: new Date((
|
|
102
|
+
timestamp: new Date((startTime + parseInt(offset, 10)) * 1000).toISOString(),
|
|
97
103
|
breaths_per_min: rate,
|
|
98
104
|
}))
|
|
99
105
|
: undefined;
|
|
100
106
|
const spo2Samples = hasSpO2Samples
|
|
101
|
-
? Object.entries(
|
|
102
|
-
timestamp: new Date((
|
|
107
|
+
? Object.entries(spo2Map).map(([offset, pct]) => ({
|
|
108
|
+
timestamp: new Date((startTime + parseInt(offset, 10)) * 1000).toISOString(),
|
|
103
109
|
percentage: pct,
|
|
104
110
|
}))
|
|
105
111
|
: undefined;
|
package/dist/garmin/sleep.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sleep.js","sourceRoot":"","sources":["../../src/garmin/sleep.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,sEAAsE;AAGtE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAItD;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"sleep.js","sourceRoot":"","sources":["../../src/garmin/sleep.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,sEAAsE;AAGtE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAItD;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACvD,MAAM,KAAK,GAAG,OAAO,GAAG,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAE9D,MAAM,aAAa,GAA2B;QAC5C,cAAc,EAAE,CAAC,EAAO,YAAY;QACpC,kBAAkB,EAAE,CAAC,EAAG,gBAAgB;QACxC,UAAU,EAAE,CAAC,EAAW,YAAY;QACpC,cAAc,EAAE,CAAC,EAAO,gBAAgB;QACxC,MAAM,EAAE,CAAC,EAAe,SAAS;QACjC,MAAM,EAAE,CAAC,EAAe,cAAc;KACvC,CAAC;IAEF,OAAO;QACL,QAAQ,EAAE;YACR,UAAU,EAAE,KAAK,CAAC,SAAS;YAC3B,UAAU,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE;YAC3C,QAAQ,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;YACvC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,IAAI,CAAC;SACxD;QAED,oBAAoB,EAAE,uBAAuB,CAAC,KAAK,CAAC;QAEpD,eAAe,EAAE,kBAAkB,CAAC,KAAK,CAAC;QAE1C,gBAAgB,EAAE,oBAAoB,CAAC,KAAK,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,iFAAiF;AAEjF,SAAS,uBAAuB,CAAC,KAA0B;IACzD,MAAM,WAAW,GACf,CAAC,KAAK,CAAC,0BAA0B,IAAI,CAAC,CAAC;QACvC,CAAC,KAAK,CAAC,2BAA2B,IAAI,CAAC,CAAC;QACxC,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,CAAC,CAAC;IAEjC,OAAO;QACL,MAAM,EAAE;YACN,6BAA6B,EAAE,WAAW,IAAI,SAAS;YACvD,iCAAiC,EAAE,KAAK,CAAC,0BAA0B;YACnE,kCAAkC,EAAE,KAAK,CAAC,2BAA2B;YACrE,gCAAgC,EAAE,KAAK,CAAC,iBAAiB;SAC1D;QACD,KAAK,EAAE;YACL,4BAA4B,EAAE,KAAK,CAAC,sBAAsB;SAC3D;QACD,KAAK,EAAE;YACL,uBAAuB,EAAE,KAAK,CAAC,iBAAiB;YAChD,mCAAmC,EAAE,KAAK,CAAC,0BAA0B;SACtE;QACD,iBAAiB,EAAE,qBAAqB,CAAC,KAAK,CAAC;KAChD,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,KAA0B;IACvD,IAAI,CAAC,KAAK,CAAC,cAAc;QAAE,OAAO,SAAS,CAAC;IAE5C,MAAM,OAAO,GAAgD,EAAE,CAAC;IAEhE,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;QACnE,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QAExC,KAAK,MAAM,KAAK,IAAI,MAA2B,EAAE,CAAC;YAChD,IAAI,KAAK,CAAC,kBAAkB,IAAI,IAAI;gBAAE,SAAS;YAC/C,OAAO,CAAC,IAAI,CAAC;gBACX,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;gBAClE,KAAK,EAAE,UAAU;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CACV,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAC5E,CAAC;IAEF,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,SAAS,kBAAkB,CAAC,KAA0B;IACpD,IACE,CAAC,KAAK,CAAC,0BAA0B;QACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,MAAM,KAAK,CAAC,EAC1D,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,kBAAkB,IAAI,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,GAAG,CACpE,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAClB,SAAS,EAAE,IAAI,IAAI,CACjB,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAC1C,CAAC,WAAW,EAAE;QACf,GAAG;KACJ,CAAC,CACH,CAAC;IAEF,OAAO;QACL,QAAQ,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;KACpC,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,KAA0B;IACtD,MAAM,gBAAgB,GACpB,KAAK,CAAC,oCAAoC,IAAI,IAAI,CAAC;IACrD,MAAM,gBAAgB,GACpB,KAAK,CAAC,0BAA0B,IAAI,IAAI;QACxC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3D,iEAAiE;IACjE,MAAM,OAAO,GAAG,KAAK,CAAC,mBAAmB,IAAI,KAAK,CAAC,oBAAoB,CAAC;IACxE,MAAM,cAAc,GAClB,OAAO,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAErD,IAAI,CAAC,gBAAgB,IAAI,CAAC,gBAAgB,IAAI,CAAC,cAAc,EAAE,CAAC;QAC9D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,kBAAkB,IAAI,CAAC,CAAC;IAEhD,MAAM,aAAa,GAAG,gBAAgB;QACpC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,0BAA2B,CAAC,CAAC,GAAG,CACnD,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,SAAS,EAAE,IAAI,IAAI,CACjB,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAC1C,CAAC,WAAW,EAAE;YACf,eAAe,EAAE,IAAI;SACtB,CAAC,CACH;QACH,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,WAAW,GAAG,cAAc;QAChC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/C,SAAS,EAAE,IAAI,IAAI,CACjB,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAC1C,CAAC,WAAW,EAAE;YACf,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC;QACL,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO;QACL,YAAY,EACV,gBAAgB,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7D,CAAC,CAAC;gBACE,mBAAmB,EAAE,KAAK,CAAC,oCAAoC;gBAC/D,mBAAmB,EAAE,KAAK,CAAC,mCAAmC;gBAC9D,mBAAmB,EAAE,KAAK,CAAC,oCAAoC;gBAC/D,OAAO,EACL,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;oBACvC,CAAC,CAAC,aAAa;oBACf,CAAC,CAAC,SAAS;aAChB;YACH,CAAC,CAAC,SAAS;QACf,sBAAsB,EACpB,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;YACnC,CAAC,CAAC;gBACE,yBAAyB,EAAE,KAAK,CAAC,gBAAgB;gBACjD,OAAO,EAAE,WAAW;aACrB;YACH,CAAC,CAAC,SAAS;KAChB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { GarminStressDetail } from "./types.js";
|
|
2
|
+
export type StressDetailsData = ReturnType<typeof transformStressDetails>;
|
|
3
|
+
/**
|
|
4
|
+
* Transform a Garmin stress detail record into stress data fields for a Soma Daily.
|
|
5
|
+
*
|
|
6
|
+
* This produces a partial daily shape that can be merged into a matching
|
|
7
|
+
* daily record by date.
|
|
8
|
+
*
|
|
9
|
+
* @param stress - The Garmin stress detail data from the Health API
|
|
10
|
+
* @returns Partial Soma Daily stress_data fields
|
|
11
|
+
*/
|
|
12
|
+
export declare function transformStressDetails(stress: GarminStressDetail): {
|
|
13
|
+
calendar_date: string | undefined;
|
|
14
|
+
stress_data: undefined;
|
|
15
|
+
} | {
|
|
16
|
+
calendar_date: string | undefined;
|
|
17
|
+
stress_data: {
|
|
18
|
+
avg_stress_level: number | undefined;
|
|
19
|
+
max_stress_level: number | undefined;
|
|
20
|
+
samples: {
|
|
21
|
+
timestamp: string;
|
|
22
|
+
level: number;
|
|
23
|
+
}[] | undefined;
|
|
24
|
+
body_battery_samples: {
|
|
25
|
+
timestamp: string;
|
|
26
|
+
level: number;
|
|
27
|
+
}[] | undefined;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=stressDetails.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stressDetails.d.ts","sourceRoot":"","sources":["../../src/garmin/stressDetails.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE1E;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,kBAAkB;;;;;;;;;;;;;;;;;EAsDhE"}
|