@ovok/native 1.16.1-dev.2173 → 1.16.1-dev.2175
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/lib/commonjs/modules/data-sync/components/apple/apple-health-authorization-provider.js +15 -8
- package/lib/commonjs/modules/data-sync/components/apple/apple-health-authorization-provider.js.map +1 -1
- package/lib/commonjs/modules/data-sync/components/apple/apple-health-authorization-utils.js +1 -1
- package/lib/commonjs/modules/data-sync/components/apple/apple-health-authorization-utils.js.map +1 -1
- package/lib/commonjs/modules/data-sync/constants.js +4 -1
- package/lib/commonjs/modules/data-sync/constants.js.map +1 -1
- package/lib/commonjs/modules/data-sync/hooks/use-listen-changes.js +6 -9
- package/lib/commonjs/modules/data-sync/hooks/use-listen-changes.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/convert-ecg-samples-to-observation.js +47 -0
- package/lib/commonjs/modules/data-sync/utils/convert-ecg-samples-to-observation.js.map +1 -0
- package/lib/commonjs/modules/data-sync/utils/convert-samples-to-observation.js +7 -15
- package/lib/commonjs/modules/data-sync/utils/convert-samples-to-observation.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/default-health-coding.js +1 -0
- package/lib/commonjs/modules/data-sync/utils/default-health-coding.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/get-samples-from-health.js +43 -86
- package/lib/commonjs/modules/data-sync/utils/get-samples-from-health.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/get-total-samples-count.js +6 -5
- package/lib/commonjs/modules/data-sync/utils/get-total-samples-count.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/health-data-catalog.js +15 -15
- package/lib/commonjs/modules/data-sync/utils/health-data-catalog.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/healthkit-daily-statistics.js +64 -0
- package/lib/commonjs/modules/data-sync/utils/healthkit-daily-statistics.js.map +1 -0
- package/lib/commonjs/modules/data-sync/utils/healthkit-data-types.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/healthkit-query-options.js +20 -0
- package/lib/commonjs/modules/data-sync/utils/healthkit-query-options.js.map +1 -0
- package/lib/commonjs/modules/data-sync/utils/healthkit-sample-source.js +21 -0
- package/lib/commonjs/modules/data-sync/utils/healthkit-sample-source.js.map +1 -0
- package/lib/commonjs/modules/data-sync/utils/healthkit-samples.js +59 -0
- package/lib/commonjs/modules/data-sync/utils/healthkit-samples.js.map +1 -0
- package/lib/commonjs/modules/data-sync/utils/healthkit-series.js +20 -11
- package/lib/commonjs/modules/data-sync/utils/healthkit-series.js.map +1 -1
- package/lib/module/modules/data-sync/components/apple/apple-health-authorization-provider.js +16 -9
- package/lib/module/modules/data-sync/components/apple/apple-health-authorization-provider.js.map +1 -1
- package/lib/module/modules/data-sync/components/apple/apple-health-authorization-utils.js +2 -2
- package/lib/module/modules/data-sync/components/apple/apple-health-authorization-utils.js.map +1 -1
- package/lib/module/modules/data-sync/constants.js +4 -1
- package/lib/module/modules/data-sync/constants.js.map +1 -1
- package/lib/module/modules/data-sync/hooks/use-listen-changes.js +7 -10
- package/lib/module/modules/data-sync/hooks/use-listen-changes.js.map +1 -1
- package/lib/module/modules/data-sync/utils/convert-ecg-samples-to-observation.js +43 -0
- package/lib/module/modules/data-sync/utils/convert-ecg-samples-to-observation.js.map +1 -0
- package/lib/module/modules/data-sync/utils/convert-samples-to-observation.js +7 -15
- package/lib/module/modules/data-sync/utils/convert-samples-to-observation.js.map +1 -1
- package/lib/module/modules/data-sync/utils/default-health-coding.js +1 -0
- package/lib/module/modules/data-sync/utils/default-health-coding.js.map +1 -1
- package/lib/module/modules/data-sync/utils/get-samples-from-health.js +44 -87
- package/lib/module/modules/data-sync/utils/get-samples-from-health.js.map +1 -1
- package/lib/module/modules/data-sync/utils/get-total-samples-count.js +5 -4
- package/lib/module/modules/data-sync/utils/get-total-samples-count.js.map +1 -1
- package/lib/module/modules/data-sync/utils/health-data-catalog.js +15 -15
- package/lib/module/modules/data-sync/utils/health-data-catalog.js.map +1 -1
- package/lib/module/modules/data-sync/utils/healthkit-daily-statistics.js +59 -0
- package/lib/module/modules/data-sync/utils/healthkit-daily-statistics.js.map +1 -0
- package/lib/module/modules/data-sync/utils/healthkit-data-types.js.map +1 -1
- package/lib/module/modules/data-sync/utils/healthkit-query-options.js +16 -0
- package/lib/module/modules/data-sync/utils/healthkit-query-options.js.map +1 -0
- package/lib/module/modules/data-sync/utils/healthkit-sample-source.js +17 -0
- package/lib/module/modules/data-sync/utils/healthkit-sample-source.js.map +1 -0
- package/lib/module/modules/data-sync/utils/healthkit-samples.js +52 -0
- package/lib/module/modules/data-sync/utils/healthkit-samples.js.map +1 -0
- package/lib/module/modules/data-sync/utils/healthkit-series.js +19 -10
- package/lib/module/modules/data-sync/utils/healthkit-series.js.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/components/apple/apple-health-authorization-provider.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/components/apple/apple-health-authorization-utils.d.ts +2 -2
- package/lib/typescript/commonjs/src/modules/data-sync/components/apple/apple-health-authorization-utils.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/constants.d.ts +3 -1
- package/lib/typescript/commonjs/src/modules/data-sync/constants.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/hooks/use-listen-changes.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/types/apple-health-authorization-provider-props.d.ts +2 -2
- package/lib/typescript/commonjs/src/modules/data-sync/types/apple-health-authorization-provider-props.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/types/apple-health-sync-props.d.ts +4 -7
- package/lib/typescript/commonjs/src/modules/data-sync/types/apple-health-sync-props.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/types/health-authorization-status.d.ts +2 -2
- package/lib/typescript/commonjs/src/modules/data-sync/types/health-authorization-status.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/convert-ecg-samples-to-observation.d.ts +6 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/convert-ecg-samples-to-observation.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/convert-samples-to-observation.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/default-health-coding.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-samples-from-health.d.ts +12 -46
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-samples-from-health.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-total-samples-count.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/health-data-catalog.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/health-units.d.ts +2 -2
- package/lib/typescript/commonjs/src/modules/data-sync/utils/health-units.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-daily-statistics.d.ts +10 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-daily-statistics.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-data-types.d.ts +5 -5
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-data-types.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-query-options.d.ts +7 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-query-options.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-sample-source.d.ts +8 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-sample-source.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-samples.d.ts +30 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-samples.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-series.d.ts +2 -2
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-series.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/to-core-health-observations.d.ts +1 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/to-core-health-observations.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/components/apple/apple-health-authorization-provider.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/components/apple/apple-health-authorization-utils.d.ts +2 -2
- package/lib/typescript/module/src/modules/data-sync/components/apple/apple-health-authorization-utils.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/constants.d.ts +3 -1
- package/lib/typescript/module/src/modules/data-sync/constants.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/hooks/use-listen-changes.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/types/apple-health-authorization-provider-props.d.ts +2 -2
- package/lib/typescript/module/src/modules/data-sync/types/apple-health-authorization-provider-props.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/types/apple-health-sync-props.d.ts +4 -7
- package/lib/typescript/module/src/modules/data-sync/types/apple-health-sync-props.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/types/health-authorization-status.d.ts +2 -2
- package/lib/typescript/module/src/modules/data-sync/types/health-authorization-status.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/convert-ecg-samples-to-observation.d.ts +6 -0
- package/lib/typescript/module/src/modules/data-sync/utils/convert-ecg-samples-to-observation.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/data-sync/utils/convert-samples-to-observation.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/default-health-coding.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/get-samples-from-health.d.ts +12 -46
- package/lib/typescript/module/src/modules/data-sync/utils/get-samples-from-health.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/get-total-samples-count.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/health-data-catalog.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/health-units.d.ts +2 -2
- package/lib/typescript/module/src/modules/data-sync/utils/health-units.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-daily-statistics.d.ts +10 -0
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-daily-statistics.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-data-types.d.ts +5 -5
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-data-types.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-query-options.d.ts +7 -0
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-query-options.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-sample-source.d.ts +8 -0
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-sample-source.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-samples.d.ts +30 -0
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-samples.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-series.d.ts +2 -2
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-series.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/to-core-health-observations.d.ts +1 -0
- package/lib/typescript/module/src/modules/data-sync/utils/to-core-health-observations.d.ts.map +1 -1
- package/package.json +8 -3
package/lib/module/modules/data-sync/components/apple/apple-health-authorization-provider.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { AuthorizationRequestStatus, getRequestStatusForAuthorization, useHealthkitAuthorization } from "@kingstinct/react-native-healthkit";
|
|
4
4
|
import * as React from "react";
|
|
5
5
|
import { toError } from "../../../helpers/utils/to-error.js";
|
|
6
6
|
import { HealthAuthorizationContext } from "../../contexts/health-authorization-context.js";
|
|
@@ -17,7 +17,10 @@ export const AppleHealthAuthorizationProvider = /*#__PURE__*/React.memo(({
|
|
|
17
17
|
renderManualRequestUI,
|
|
18
18
|
onAuthorizationStatusChange
|
|
19
19
|
}) => {
|
|
20
|
-
const [authorizationStatus, requestAuthorization] = useHealthkitAuthorization(
|
|
20
|
+
const [authorizationStatus, requestAuthorization] = useHealthkitAuthorization({
|
|
21
|
+
toRead: readIdentifiers,
|
|
22
|
+
toWrite: writeIdentifiers
|
|
23
|
+
});
|
|
21
24
|
const [requestState, setRequestState] = React.useState("unknown");
|
|
22
25
|
const [notRequestedReadIdentifiers, setNotRequestedReadIdentifiers] = React.useState(readIdentifiers);
|
|
23
26
|
const [notRequestedWriteIdentifiers, setNotRequestedWriteIdentifiers] = React.useState(writeIdentifiers || []);
|
|
@@ -49,7 +52,11 @@ export const AppleHealthAuthorizationProvider = /*#__PURE__*/React.memo(({
|
|
|
49
52
|
readIdentifiers: currentRead,
|
|
50
53
|
writeIdentifiers: currentWrite
|
|
51
54
|
} = identifiersRef.current;
|
|
52
|
-
const [notRequestedRead, notRequestedWrite] = await Promise.all([getNotRequestedIdentifiers(currentRead, identifier => getRequestStatusForAuthorization(
|
|
55
|
+
const [notRequestedRead, notRequestedWrite] = await Promise.all([getNotRequestedIdentifiers(currentRead, identifier => getRequestStatusForAuthorization({
|
|
56
|
+
toRead: [identifier]
|
|
57
|
+
})), getNotRequestedIdentifiers(currentWrite || [], identifier => getRequestStatusForAuthorization({
|
|
58
|
+
toShare: [identifier]
|
|
59
|
+
}))]);
|
|
53
60
|
setNotRequestedReadIdentifiers(notRequestedRead);
|
|
54
61
|
setNotRequestedWriteIdentifiers(notRequestedWrite);
|
|
55
62
|
}, []);
|
|
@@ -72,7 +79,7 @@ export const AppleHealthAuthorizationProvider = /*#__PURE__*/React.memo(({
|
|
|
72
79
|
}
|
|
73
80
|
previousRequestKey.current = requestKey;
|
|
74
81
|
setRequestError(undefined);
|
|
75
|
-
setRequestState(authorizationStatus === null ? "unknown" : authorizationStatus ===
|
|
82
|
+
setRequestState(authorizationStatus === null ? "unknown" : authorizationStatus === AuthorizationRequestStatus.shouldRequest ? "shouldRequest" : "unknown");
|
|
76
83
|
setNotRequestedReadIdentifiers(readIdentifiers);
|
|
77
84
|
setNotRequestedWriteIdentifiers(writeIdentifiers || []);
|
|
78
85
|
}, [authorizationStatus, readIdentifiers, requestKey, writeIdentifiers]);
|
|
@@ -80,11 +87,11 @@ export const AppleHealthAuthorizationProvider = /*#__PURE__*/React.memo(({
|
|
|
80
87
|
if (authorizationStatus === null) {
|
|
81
88
|
return;
|
|
82
89
|
}
|
|
83
|
-
if (authorizationStatus ===
|
|
90
|
+
if (authorizationStatus === AuthorizationRequestStatus.shouldRequest) {
|
|
84
91
|
setRequestState(currentState => currentState === "unknown" ? "shouldRequest" : currentState);
|
|
85
92
|
}
|
|
86
93
|
void inspectAuthorization().then(() => {
|
|
87
|
-
setRequestState(currentState => currentState === "unknown" && authorizationStatus ===
|
|
94
|
+
setRequestState(currentState => currentState === "unknown" && authorizationStatus === AuthorizationRequestStatus.shouldRequest ? "shouldRequest" : currentState === "unknown" ? "ready" : currentState);
|
|
88
95
|
}).catch(error => {
|
|
89
96
|
const normalizedError = toError(error);
|
|
90
97
|
setRequestError(normalizedError);
|
|
@@ -92,12 +99,12 @@ export const AppleHealthAuthorizationProvider = /*#__PURE__*/React.memo(({
|
|
|
92
99
|
});
|
|
93
100
|
}, [authorizationStatus, inspectAuthorization]);
|
|
94
101
|
React.useEffect(() => {
|
|
95
|
-
if (renderManualRequestUI || skipRequest || authorizationStatus !==
|
|
102
|
+
if (renderManualRequestUI || skipRequest || authorizationStatus !== AuthorizationRequestStatus.shouldRequest || requestState !== "shouldRequest") {
|
|
96
103
|
return;
|
|
97
104
|
}
|
|
98
105
|
void requestAccess();
|
|
99
106
|
}, [authorizationStatus, requestAccess, renderManualRequestUI, requestState, skipRequest]);
|
|
100
|
-
const needsAuthorization = requestState === "shouldRequest" || requestState === "requesting" || requestState === "unknown" && authorizationStatus ===
|
|
107
|
+
const needsAuthorization = requestState === "shouldRequest" || requestState === "requesting" || requestState === "unknown" && authorizationStatus === AuthorizationRequestStatus.shouldRequest;
|
|
101
108
|
const shouldRenderManualRequestUI = renderManualRequestUI && needsAuthorization && requestState !== "requesting" && !skipRequest;
|
|
102
109
|
const shouldRenderFallback = fallback && needsAuthorization && !skipRequest;
|
|
103
110
|
const exposedStatus = React.useMemo(() => skipRequest && status.state === "unknown" ? {
|
|
@@ -111,7 +118,7 @@ export const AppleHealthAuthorizationProvider = /*#__PURE__*/React.memo(({
|
|
|
111
118
|
request: requestAccess
|
|
112
119
|
}), [exposedStatus, requestAccess]);
|
|
113
120
|
let content = null;
|
|
114
|
-
if (skipRequest || requestState === "ready" || requestState === "unknown" && (authorizationStatus ===
|
|
121
|
+
if (skipRequest || requestState === "ready" || requestState === "unknown" && (authorizationStatus === AuthorizationRequestStatus.unknown || authorizationStatus === AuthorizationRequestStatus.unnecessary)) {
|
|
115
122
|
content = /*#__PURE__*/_jsx(_Fragment, {
|
|
116
123
|
children: children
|
|
117
124
|
});
|
package/lib/module/modules/data-sync/components/apple/apple-health-authorization-provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["AuthorizationRequestStatus","getRequestStatusForAuthorization","useHealthkitAuthorization","React","toError","HealthAuthorizationContext","AppleHealthAuthorizationContext","getNotRequestedIdentifiers","Fragment","_Fragment","jsx","_jsx","AppleHealthAuthorizationProvider","memo","readIdentifiers","writeIdentifiers","dataToSync","fallback","children","skipRequest","renderManualRequestUI","onAuthorizationStatusChange","authorizationStatus","requestAuthorization","toRead","toWrite","requestState","setRequestState","useState","notRequestedReadIdentifiers","setNotRequestedReadIdentifiers","notRequestedWriteIdentifiers","setNotRequestedWriteIdentifiers","requestError","setRequestError","requestKey","join","identifiersRef","useRef","current","previousRequestKey","status","useMemo","error","state","notRequestedMeasurementTypes","Object","entries","filter","data","typeIdentifiers","some","typeIdentifier","includes","map","key","useEffect","inspectAuthorization","useCallback","currentRead","currentWrite","notRequestedRead","notRequestedWrite","Promise","all","identifier","toShare","requestAccess","undefined","normalizedError","shouldRequest","currentState","then","catch","needsAuthorization","shouldRenderManualRequestUI","shouldRenderFallback","exposedStatus","authorizationValue","platform","missingTypes","request","content","unknown","unnecessary","Provider","value"],"sourceRoot":"../../../../../../src","sources":["modules/data-sync/components/apple/apple-health-authorization-provider.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { AuthorizationRequestStatus } from "@kingstinct/react-native-healthkit";
|
|
4
4
|
const getNotRequestedIdentifiers = async (identifiers, getStatus) => {
|
|
5
5
|
const statuses = await Promise.all(identifiers.map(async identifier => ({
|
|
6
6
|
identifier,
|
|
@@ -8,7 +8,7 @@ const getNotRequestedIdentifiers = async (identifiers, getStatus) => {
|
|
|
8
8
|
})));
|
|
9
9
|
return statuses.filter(({
|
|
10
10
|
status
|
|
11
|
-
}) => status ===
|
|
11
|
+
}) => status === AuthorizationRequestStatus.shouldRequest).map(({
|
|
12
12
|
identifier
|
|
13
13
|
}) => identifier);
|
|
14
14
|
};
|
package/lib/module/modules/data-sync/components/apple/apple-health-authorization-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["AuthorizationRequestStatus","getNotRequestedIdentifiers","identifiers","getStatus","statuses","Promise","all","map","identifier","status","filter","shouldRequest"],"sourceRoot":"../../../../../../src","sources":["modules/data-sync/components/apple/apple-health-authorization-utils.ts"],"mappings":";;AAAA,SAASA,0BAA0B,QAAQ,oCAAoC;AAE/E,MAAMC,0BAA0B,GAAG,MAAAA,CACjCC,WAAgB,EAChBC,SAAiE,KAChD;EACjB,MAAMC,QAAQ,GAAG,MAAMC,OAAO,CAACC,GAAG,CAChCJ,WAAW,CAACK,GAAG,CAAC,MAAOC,UAAU,KAAM;IACrCA,UAAU;IACVC,MAAM,EAAE,MAAMN,SAAS,CAACK,UAAU;EACpC,CAAC,CAAC,CACJ,CAAC;EAED,OAAOJ,QAAQ,CACZM,MAAM,CAAC,CAAC;IAAED;EAAO,CAAC,KAAKA,MAAM,KAAKT,0BAA0B,CAACW,aAAa,CAAC,CAC3EJ,GAAG,CAAC,CAAC;IAAEC;EAAW,CAAC,KAAKA,UAAU,CAAC;AACxC,CAAC;AAED,SAASP,0BAA0B","ignoreList":[]}
|
|
@@ -7,6 +7,9 @@
|
|
|
7
7
|
*/
|
|
8
8
|
const DEFAULT_HEALTH_SYNC_CHUNK_SIZE = 250;
|
|
9
9
|
|
|
10
|
+
/** Each ECG recording holds about 15,000 voltages, so a page of them stays small whatever the chunk size. */
|
|
11
|
+
const ECG_PAGE_SIZE = 10;
|
|
12
|
+
|
|
10
13
|
/** How far back the first import of a type reaches when no watermark exists yet. */
|
|
11
14
|
const DEFAULT_SYNC_LOOKBACK_DAYS = 30;
|
|
12
15
|
|
|
@@ -22,5 +25,5 @@ const SERIES_SLOT_MS = 60_000;
|
|
|
22
25
|
|
|
23
26
|
/** How many already-imported hours a `series` type reads again, for a watch that syncs a little late. */
|
|
24
27
|
const SERIES_REREAD_HOURS = 3;
|
|
25
|
-
export { DAILY_REREAD_DAYS, SERIES_REREAD_HOURS, SERIES_SLOT_MS, DEFAULT_HEALTH_SYNC_CHUNK_SIZE, DEFAULT_SYNC_LOOKBACK_DAYS };
|
|
28
|
+
export { DAILY_REREAD_DAYS, ECG_PAGE_SIZE, SERIES_REREAD_HOURS, SERIES_SLOT_MS, DEFAULT_HEALTH_SYNC_CHUNK_SIZE, DEFAULT_SYNC_LOOKBACK_DAYS };
|
|
26
29
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DEFAULT_HEALTH_SYNC_CHUNK_SIZE","DEFAULT_SYNC_LOOKBACK_DAYS","DAILY_REREAD_DAYS","SERIES_SLOT_MS","SERIES_REREAD_HOURS"],"sourceRoot":"../../../../src","sources":["modules/data-sync/constants.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA,MAAMA,8BAA8B,GAAG,GAAG;;AAE1C;AACA,MAAMC,0BAA0B,GAAG,EAAE;;AAErC;AACA;AACA;AACA;AACA;AACA,MAAMC,iBAAiB,GAAG,CAAC;;AAE3B;AACA,MAAMC,cAAc,GAAG,MAAM;;AAE7B;AACA,MAAMC,mBAAmB,GAAG,CAAC;AAE7B,SACEF,iBAAiB,
|
|
1
|
+
{"version":3,"names":["DEFAULT_HEALTH_SYNC_CHUNK_SIZE","ECG_PAGE_SIZE","DEFAULT_SYNC_LOOKBACK_DAYS","DAILY_REREAD_DAYS","SERIES_SLOT_MS","SERIES_REREAD_HOURS"],"sourceRoot":"../../../../src","sources":["modules/data-sync/constants.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA,MAAMA,8BAA8B,GAAG,GAAG;;AAE1C;AACA,MAAMC,aAAa,GAAG,EAAE;;AAExB;AACA,MAAMC,0BAA0B,GAAG,EAAE;;AAErC;AACA;AACA;AACA;AACA;AACA,MAAMC,iBAAiB,GAAG,CAAC;;AAE3B;AACA,MAAMC,cAAc,GAAG,MAAM;;AAE7B;AACA,MAAMC,mBAAmB,GAAG,CAAC;AAE7B,SACEF,iBAAiB,EACjBF,aAAa,EACbI,mBAAmB,EACnBD,cAAc,EACdJ,8BAA8B,EAC9BE,0BAA0B","ignoreList":[]}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import Healthkit, {
|
|
3
|
+
import Healthkit, { UpdateFrequency } from "@kingstinct/react-native-healthkit";
|
|
4
4
|
import * as React from "react";
|
|
5
5
|
export const useListenChanges = (dataToSync, onChange, backgroundDelivery, onError) => {
|
|
6
6
|
const timeoutRef = React.useRef(undefined);
|
|
7
7
|
const onChangeRef = React.useRef(onChange);
|
|
8
8
|
const onErrorRef = React.useRef(onError);
|
|
9
9
|
const identifiers = React.useMemo(() => {
|
|
10
|
-
return Object.values(dataToSync).flatMap(data => data?.typeIdentifiers.map(identifier => identifier.typeIdentifier));
|
|
10
|
+
return Object.values(dataToSync).flatMap(data => data?.typeIdentifiers.map(identifier => identifier.typeIdentifier) ?? []);
|
|
11
11
|
}, [dataToSync]);
|
|
12
12
|
const backgroundDeliveryEnabled = backgroundDelivery !== undefined;
|
|
13
|
-
const backgroundDeliveryFrequency = backgroundDelivery?.frequency ??
|
|
13
|
+
const backgroundDeliveryFrequency = backgroundDelivery?.frequency ?? UpdateFrequency.hourly;
|
|
14
14
|
const debouncedOnChange = React.useCallback(identifier => {
|
|
15
15
|
if (timeoutRef.current) {
|
|
16
16
|
clearTimeout(timeoutRef.current);
|
|
@@ -37,25 +37,22 @@ export const useListenChanges = (dataToSync, onChange, backgroundDelivery, onErr
|
|
|
37
37
|
const subscriptions = [];
|
|
38
38
|
const initSubscriptions = async () => {
|
|
39
39
|
try {
|
|
40
|
-
|
|
40
|
+
await Promise.all(identifiers.map(async identifier => {
|
|
41
41
|
if (backgroundDeliveryEnabled) {
|
|
42
42
|
await Healthkit.enableBackgroundDelivery(identifier, backgroundDeliveryFrequency);
|
|
43
43
|
}
|
|
44
|
-
|
|
44
|
+
subscriptions.push(Healthkit.subscribeToChanges(identifier, () => {
|
|
45
45
|
debouncedOnChange(identifier);
|
|
46
|
-
});
|
|
47
|
-
subscriptions.push(subscription);
|
|
48
|
-
return subscription;
|
|
46
|
+
}));
|
|
49
47
|
}));
|
|
50
48
|
} catch (error) {
|
|
51
49
|
onErrorRef.current?.(error);
|
|
52
|
-
return undefined;
|
|
53
50
|
}
|
|
54
51
|
};
|
|
55
52
|
initSubscriptions();
|
|
56
53
|
return () => {
|
|
57
54
|
subscriptions.forEach(subscription => {
|
|
58
|
-
subscription
|
|
55
|
+
subscription.remove();
|
|
59
56
|
});
|
|
60
57
|
if (backgroundDeliveryEnabled) {
|
|
61
58
|
void Promise.all(identifiers.map(identifier => Healthkit.disableBackgroundDelivery(identifier))).catch(error => onErrorRef.current?.(error));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Healthkit","
|
|
1
|
+
{"version":3,"names":["Healthkit","UpdateFrequency","React","useListenChanges","dataToSync","onChange","backgroundDelivery","onError","timeoutRef","useRef","undefined","onChangeRef","onErrorRef","identifiers","useMemo","Object","values","flatMap","data","typeIdentifiers","map","identifier","typeIdentifier","backgroundDeliveryEnabled","backgroundDeliveryFrequency","frequency","hourly","debouncedOnChange","useCallback","current","clearTimeout","setTimeout","useEffect","subscriptions","initSubscriptions","Promise","all","enableBackgroundDelivery","push","subscribeToChanges","error","forEach","subscription","remove","disableBackgroundDelivery","catch"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/hooks/use-listen-changes.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { MeasurementTypeKey } from "@ovok/core/next";
|
|
4
|
+
import { getHealthKitSampleSource } from "./healthkit-sample-source.js";
|
|
5
|
+
import { toCoreHealthObservations } from "./to-core-health-observations.js";
|
|
6
|
+
const MILLIVOLTS_PER_VOLT = 1000;
|
|
7
|
+
const MILLISECONDS_PER_SECOND = 1000;
|
|
8
|
+
/** The waveform in millivolts with its heart rate; Apple's classification is never part of it. */
|
|
9
|
+
const toEcgMeasurement = record => {
|
|
10
|
+
const diagramPoints = (record.voltages ?? []).map(({
|
|
11
|
+
voltage
|
|
12
|
+
}) => voltage * MILLIVOLTS_PER_VOLT);
|
|
13
|
+
if (diagramPoints.length === 0) {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
measurementTypeKey: MeasurementTypeKey.ecg,
|
|
18
|
+
diagramPoints,
|
|
19
|
+
duration: (record.endDate.getTime() - record.startDate.getTime()) / MILLISECONDS_PER_SECOND,
|
|
20
|
+
heartRate: record.averageHeartRateBpm,
|
|
21
|
+
recordedAt: record.startDate
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/** Core's own ECG service cannot convert a sample, so the recording is built into a measurement here. */
|
|
26
|
+
const convertEcgSamplesToObservation = async props => {
|
|
27
|
+
const observations = await Promise.all(props.data.map(async record => {
|
|
28
|
+
const measurement = toEcgMeasurement(record);
|
|
29
|
+
if (!measurement) {
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
const observationBody = await props.client.measurements.build({
|
|
33
|
+
measurement
|
|
34
|
+
});
|
|
35
|
+
return toCoreHealthObservations(observationBody, {
|
|
36
|
+
...props,
|
|
37
|
+
data: [record]
|
|
38
|
+
}, () => getHealthKitSampleSource(record));
|
|
39
|
+
}));
|
|
40
|
+
return observations.flat();
|
|
41
|
+
};
|
|
42
|
+
export { convertEcgSamplesToObservation };
|
|
43
|
+
//# sourceMappingURL=convert-ecg-samples-to-observation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["MeasurementTypeKey","getHealthKitSampleSource","toCoreHealthObservations","MILLIVOLTS_PER_VOLT","MILLISECONDS_PER_SECOND","toEcgMeasurement","record","diagramPoints","voltages","map","voltage","length","undefined","measurementTypeKey","ecg","duration","endDate","getTime","startDate","heartRate","averageHeartRateBpm","recordedAt","convertEcgSamplesToObservation","props","observations","Promise","all","data","measurement","observationBody","client","measurements","build","flat"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/convert-ecg-samples-to-observation.ts"],"mappings":";;AACA,SAAyBA,kBAAkB,QAAQ,iBAAiB;AAIpE,SACEC,wBAAwB,QAEnB,8BAA2B;AAClC,SAASC,wBAAwB,QAAQ,kCAA+B;AAExE,MAAMC,mBAAmB,GAAG,IAAI;AAChC,MAAMC,uBAAuB,GAAG,IAAI;AAOpC;AACA,MAAMC,gBAAgB,GAAIC,MAAiB,IAAiC;EAC1E,MAAMC,aAAa,GAAG,CAACD,MAAM,CAACE,QAAQ,IAAI,EAAE,EAAEC,GAAG,CAC/C,CAAC;IAAEC;EAAQ,CAAC,KAAKA,OAAO,GAAGP,mBAC7B,CAAC;EAED,IAAII,aAAa,CAACI,MAAM,KAAK,CAAC,EAAE;IAC9B,OAAOC,SAAS;EAClB;EAEA,OAAO;IACLC,kBAAkB,EAAEb,kBAAkB,CAACc,GAAG;IAC1CP,aAAa;IACbQ,QAAQ,EACN,CAACT,MAAM,CAACU,OAAO,CAACC,OAAO,CAAC,CAAC,GAAGX,MAAM,CAACY,SAAS,CAACD,OAAO,CAAC,CAAC,IACtDb,uBAAuB;IACzBe,SAAS,EAAEb,MAAM,CAACc,mBAAmB;IACrCC,UAAU,EAAEf,MAAM,CAACY;EACrB,CAAC;AACH,CAAC;;AAED;AACA,MAAMI,8BAA8B,GAAG,MACrCC,KAAgC,IACL;EAC3B,MAAMC,YAAY,GAAG,MAAMC,OAAO,CAACC,GAAG,CACnCH,KAAK,CAACI,IAAI,CAAiBlB,GAAG,CAAC,MAAOH,MAAM,IAAK;IAChD,MAAMsB,WAAW,GAAGvB,gBAAgB,CAACC,MAAM,CAAC;IAE5C,IAAI,CAACsB,WAAW,EAAE;MAChB,OAAO,EAAE;IACX;IAEA,MAAMC,eAAe,GAAG,MAAMN,KAAK,CAACO,MAAM,CAACC,YAAY,CAACC,KAAK,CAAC;MAC5DJ;IACF,CAAC,CAAC;IAEF,OAAO1B,wBAAwB,CAC7B2B,eAAe,EACf;MAAE,GAAGN,KAAK;MAAEI,IAAI,EAAE,CAACrB,MAAM;IAAE,CAAC,EAC5B,MAAML,wBAAwB,CAACK,MAAM,CACvC,CAAC;EACH,CAAC,CACH,CAAC;EAED,OAAOkB,YAAY,CAACS,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,SAASX,8BAA8B","ignoreList":[]}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { ObservationServiceCreator } from "@ovok/core/dist/client/observation/services/creator";
|
|
4
|
+
import { MeasurementTypeKey } from "@ovok/core/next";
|
|
5
|
+
import { convertEcgSamplesToObservation } from "./convert-ecg-samples-to-observation.js";
|
|
4
6
|
import { convertGenericHealthDataToObservation } from "./convert-generic-health-data.js";
|
|
5
|
-
import {
|
|
7
|
+
import { getHealthKitSampleSource } from "./healthkit-sample-source.js";
|
|
6
8
|
import { hasConfiguredNonLoincCoding } from "./normalize-core-health-observation.js";
|
|
7
9
|
import { isCoreMeasurementTypeKey, toCoreHealthObservations } from "./to-core-health-observations.js";
|
|
8
10
|
export const convertSamplesToObservation = async props => {
|
|
@@ -33,6 +35,9 @@ export const convertSamplesToObservation = async props => {
|
|
|
33
35
|
mode
|
|
34
36
|
});
|
|
35
37
|
}
|
|
38
|
+
if (measurementTypeKey === MeasurementTypeKey.ecg) {
|
|
39
|
+
return convertEcgSamplesToObservation(props);
|
|
40
|
+
}
|
|
36
41
|
const service = ObservationServiceCreator.getInstance().getService(measurementTypeKey);
|
|
37
42
|
const measurement = service.convertSamplesToMeasurement(data);
|
|
38
43
|
if (!measurement) {
|
|
@@ -41,19 +46,6 @@ export const convertSamplesToObservation = async props => {
|
|
|
41
46
|
const observationBody = await client.measurements.build({
|
|
42
47
|
measurement
|
|
43
48
|
});
|
|
44
|
-
return toCoreHealthObservations(observationBody, props, index =>
|
|
45
|
-
const sample = data?.[index];
|
|
46
|
-
return {
|
|
47
|
-
device: sample ? getHealthObservationDevice({
|
|
48
|
-
manufacturer: sample.device?.manufacturer,
|
|
49
|
-
model: sample.device?.model,
|
|
50
|
-
sourceApp: sample.sourceRevision?.source?.name
|
|
51
|
-
}) : undefined,
|
|
52
|
-
timing: {
|
|
53
|
-
start: sample?.startDate,
|
|
54
|
-
end: sample?.endDate
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
});
|
|
49
|
+
return toCoreHealthObservations(observationBody, props, index => getHealthKitSampleSource(data[index]));
|
|
58
50
|
};
|
|
59
51
|
//# sourceMappingURL=convert-samples-to-observation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ObservationServiceCreator","convertGenericHealthDataToObservation","
|
|
1
|
+
{"version":3,"names":["ObservationServiceCreator","MeasurementTypeKey","convertEcgSamplesToObservation","convertGenericHealthDataToObservation","getHealthKitSampleSource","hasConfiguredNonLoincCoding","isCoreMeasurementTypeKey","toCoreHealthObservations","convertSamplesToObservation","props","data","client","measurementTypeKey","mode","length","ecg","service","getInstance","getService","measurement","convertSamplesToMeasurement","observationBody","measurements","build","index"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/convert-samples-to-observation.ts"],"mappings":";;AACA,SAASA,yBAAyB,QAAQ,qDAAqD;AAC/F,SAASC,kBAAkB,QAAQ,iBAAiB;AAMpD,SAASC,8BAA8B,QAAQ,yCAAsC;AACrF,SAASC,qCAAqC,QAAQ,kCAA+B;AACrF,SACEC,wBAAwB,QAEnB,8BAA2B;AAClC,SAASC,2BAA2B,QAAQ,wCAAqC;AACjF,SACEC,wBAAwB,EACxBC,wBAAwB,QACnB,kCAA+B;AAEtC,OAAO,MAAMC,2BAA2B,GAAG,MACzCC,KAAgC,IACL;EAC3B,MAAM;IAAEC,IAAI;IAAEC,MAAM;IAAEC,kBAAkB;IAAEC,IAAI,GAAG;EAAQ,CAAC,GAAGJ,KAAK;EAElE,IAAII,IAAI,KAAK,OAAO,EAAE;IACpB,OAAOV,qCAAqC,CAAC;MAAE,GAAGM,KAAK;MAAEI;IAAK,CAAC,CAAC;EAClE;EAEA,IAAIH,IAAI,CAACI,MAAM,KAAK,CAAC,EAAE;IACrB,OAAO,EAAE;EACX;EAEA,IAAIT,2BAA2B,CAACI,KAAK,CAAC,EAAE;IACtC,OAAON,qCAAqC,CAAC;MAAE,GAAGM,KAAK;MAAEI;IAAK,CAAC,CAAC;EAClE;EAEA,IAAI,CAACP,wBAAwB,CAACM,kBAAkB,CAAC,EAAE;IACjD,OAAOT,qCAAqC,CAAC;MAAE,GAAGM,KAAK;MAAEI;IAAK,CAAC,CAAC;EAClE;EAEA,IAAID,kBAAkB,KAAKX,kBAAkB,CAACc,GAAG,EAAE;IACjD,OAAOb,8BAA8B,CAACO,KAAK,CAAC;EAC9C;EAEA,MAAMO,OAAO,GAAGhB,yBAAyB,CAACiB,WAAW,CAAC,CAAC,CAACC,UAAU,CAChEN,kBACF,CAAC;EAED,MAAMO,WAAW,GAAGH,OAAO,CAACI,2BAA2B,CACrDV,IACF,CAAC;EAED,IAAI,CAACS,WAAW,EAAE;IAChB,OAAO,EAAE;EACX;EAEA,MAAME,eAAe,GAAG,MAAMV,MAAM,CAACW,YAAY,CAACC,KAAK,CAAC;IACtDJ;EACF,CAAC,CAAC;EAEF,OAAOZ,wBAAwB,CAACc,eAAe,EAAEZ,KAAK,EAAGe,KAAK,IAC5DpB,wBAAwB,CAACM,IAAI,CAACc,KAAK,CAAsC,CAC3E,CAAC;AACH,CAAC","ignoreList":[]}
|
|
@@ -21,6 +21,7 @@ const CORE_MEASUREMENT_CODES = {
|
|
|
21
21
|
HKQuantityTypeIdentifierRestingHeartRate: ObservationCode.RESTING_HEART_RATE,
|
|
22
22
|
HKQuantityTypeIdentifierWalkingHeartRateAverage: ObservationCode.WALKING_HEART_RATE_AVERAGE,
|
|
23
23
|
HKQuantityTypeIdentifierVO2Max: ObservationCode.VO2_MAX,
|
|
24
|
+
HKElectrocardiogramType: ObservationCode.ECG,
|
|
24
25
|
BloodPressure: ObservationCode.SYSTOLIC_BLOOD_PRESSURE,
|
|
25
26
|
HeartRate: ObservationCode.HEART_RATE,
|
|
26
27
|
BloodGlucose: ObservationCode.BLOOD_GLUCOSE,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ObservationCode","HealthDataType","LOINC_SYSTEM","getHealthDataCoding","isCoreMeasurementTypeKey","CORE_MEASUREMENT_CODES","HKQuantityTypeIdentifierBloodPressureSystolic","SYSTOLIC_BLOOD_PRESSURE","HKQuantityTypeIdentifierBloodPressureDiastolic","DIASTOLIC_BLOOD_PRESSURE","HKQuantityTypeIdentifierHeartRate","HEART_RATE","HKQuantityTypeIdentifierBloodGlucose","BLOOD_GLUCOSE","HKQuantityTypeIdentifierBodyMass","BODY_WEIGHT","HKQuantityTypeIdentifierOxygenSaturation","OXYGEN_SATURATION","HKQuantityTypeIdentifierRespiratoryRate","RESPIRATORY_RATE","HKQuantityTypeIdentifierBodyTemperature","BODY_TEMPERATURE","HKQuantityTypeIdentifierStepCount","STEPS","HKQuantityTypeIdentifierHeartRateVariabilitySDNN","HEART_RATE_VARIABILITY","HKQuantityTypeIdentifierRestingHeartRate","RESTING_HEART_RATE","HKQuantityTypeIdentifierWalkingHeartRateAverage","WALKING_HEART_RATE_AVERAGE","HKQuantityTypeIdentifierVO2Max","VO2_MAX","BloodPressure","HeartRate","BloodGlucose","Weight","OxygenSaturation","RespiratoryRate","BodyTemperature","Steps","RestingHeartRate","Vo2Max","SHARED_RECORD_FIELDS","Nutrition","carbohydrates","caloriesEaten","ExerciseSession","exerciseMinutes","getDefaultHealthCoding","provider","key","identifier","mode","coreCode","undefined","code","system","coding","field"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/default-health-coding.ts"],"mappings":";;AAAA,SAASA,eAAe,QAAQ,iBAAiB;AAGjD,SAAyBC,cAAc,QAAuB,8BAA2B;AAEzF,SAASC,YAAY,QAAQ,mBAAgB;AAC7C,SAASC,mBAAmB,QAAQ,0BAAuB;AAC3D,SAASC,wBAAwB,QAAQ,kCAA+B;;AAExE;AACA,MAAMC,sBAA0E,GAAG;EACjFC,6CAA6C,EAAEN,eAAe,CAACO,uBAAuB;EACtFC,8CAA8C,EAAER,eAAe,CAACS,wBAAwB;EACxFC,iCAAiC,EAAEV,eAAe,CAACW,UAAU;EAC7DC,oCAAoC,EAAEZ,eAAe,CAACa,aAAa;EACnEC,gCAAgC,EAAEd,eAAe,CAACe,WAAW;EAC7DC,wCAAwC,EAAEhB,eAAe,CAACiB,iBAAiB;EAC3EC,uCAAuC,EAAElB,eAAe,CAACmB,gBAAgB;EACzEC,uCAAuC,EAAEpB,eAAe,CAACqB,gBAAgB;EACzEC,iCAAiC,EAAEtB,eAAe,CAACuB,KAAK;EACxDC,gDAAgD,EAAExB,eAAe,CAACyB,sBAAsB;EACxFC,wCAAwC,EAAE1B,eAAe,CAAC2B,kBAAkB;EAC5EC,+CAA+C,EAAE5B,eAAe,CAAC6B,0BAA0B;EAC3FC,8BAA8B,EAAE9B,eAAe,CAAC+B,OAAO;EACvDC,
|
|
1
|
+
{"version":3,"names":["ObservationCode","HealthDataType","LOINC_SYSTEM","getHealthDataCoding","isCoreMeasurementTypeKey","CORE_MEASUREMENT_CODES","HKQuantityTypeIdentifierBloodPressureSystolic","SYSTOLIC_BLOOD_PRESSURE","HKQuantityTypeIdentifierBloodPressureDiastolic","DIASTOLIC_BLOOD_PRESSURE","HKQuantityTypeIdentifierHeartRate","HEART_RATE","HKQuantityTypeIdentifierBloodGlucose","BLOOD_GLUCOSE","HKQuantityTypeIdentifierBodyMass","BODY_WEIGHT","HKQuantityTypeIdentifierOxygenSaturation","OXYGEN_SATURATION","HKQuantityTypeIdentifierRespiratoryRate","RESPIRATORY_RATE","HKQuantityTypeIdentifierBodyTemperature","BODY_TEMPERATURE","HKQuantityTypeIdentifierStepCount","STEPS","HKQuantityTypeIdentifierHeartRateVariabilitySDNN","HEART_RATE_VARIABILITY","HKQuantityTypeIdentifierRestingHeartRate","RESTING_HEART_RATE","HKQuantityTypeIdentifierWalkingHeartRateAverage","WALKING_HEART_RATE_AVERAGE","HKQuantityTypeIdentifierVO2Max","VO2_MAX","HKElectrocardiogramType","ECG","BloodPressure","HeartRate","BloodGlucose","Weight","OxygenSaturation","RespiratoryRate","BodyTemperature","Steps","RestingHeartRate","Vo2Max","SHARED_RECORD_FIELDS","Nutrition","carbohydrates","caloriesEaten","ExerciseSession","exerciseMinutes","getDefaultHealthCoding","provider","key","identifier","mode","coreCode","undefined","code","system","coding","field"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/default-health-coding.ts"],"mappings":";;AAAA,SAASA,eAAe,QAAQ,iBAAiB;AAGjD,SAAyBC,cAAc,QAAuB,8BAA2B;AAEzF,SAASC,YAAY,QAAQ,mBAAgB;AAC7C,SAASC,mBAAmB,QAAQ,0BAAuB;AAC3D,SAASC,wBAAwB,QAAQ,kCAA+B;;AAExE;AACA,MAAMC,sBAA0E,GAAG;EACjFC,6CAA6C,EAAEN,eAAe,CAACO,uBAAuB;EACtFC,8CAA8C,EAAER,eAAe,CAACS,wBAAwB;EACxFC,iCAAiC,EAAEV,eAAe,CAACW,UAAU;EAC7DC,oCAAoC,EAAEZ,eAAe,CAACa,aAAa;EACnEC,gCAAgC,EAAEd,eAAe,CAACe,WAAW;EAC7DC,wCAAwC,EAAEhB,eAAe,CAACiB,iBAAiB;EAC3EC,uCAAuC,EAAElB,eAAe,CAACmB,gBAAgB;EACzEC,uCAAuC,EAAEpB,eAAe,CAACqB,gBAAgB;EACzEC,iCAAiC,EAAEtB,eAAe,CAACuB,KAAK;EACxDC,gDAAgD,EAAExB,eAAe,CAACyB,sBAAsB;EACxFC,wCAAwC,EAAE1B,eAAe,CAAC2B,kBAAkB;EAC5EC,+CAA+C,EAAE5B,eAAe,CAAC6B,0BAA0B;EAC3FC,8BAA8B,EAAE9B,eAAe,CAAC+B,OAAO;EACvDC,uBAAuB,EAAEhC,eAAe,CAACiC,GAAG;EAC5CC,aAAa,EAAElC,eAAe,CAACO,uBAAuB;EACtD4B,SAAS,EAAEnC,eAAe,CAACW,UAAU;EACrCyB,YAAY,EAAEpC,eAAe,CAACa,aAAa;EAC3CwB,MAAM,EAAErC,eAAe,CAACe,WAAW;EACnCuB,gBAAgB,EAAEtC,eAAe,CAACiB,iBAAiB;EACnDsB,eAAe,EAAEvC,eAAe,CAACmB,gBAAgB;EACjDqB,eAAe,EAAExC,eAAe,CAACqB,gBAAgB;EACjDoB,KAAK,EAAEzC,eAAe,CAACuB,KAAK;EAC5BmB,gBAAgB,EAAE1C,eAAe,CAAC2B,kBAAkB;EACpDgB,MAAM,EAAE3C,eAAe,CAAC+B;AAC1B,CAAC;;AAED;AACA,MAAMa,oBAA+F,GAAG;EACtGC,SAAS,EAAE;IACT,CAAC5C,cAAc,CAAC6C,aAAa,GAAG,mBAAmB;IACnD,CAAC7C,cAAc,CAAC8C,aAAa,GAAG;EAClC,CAAC;EACDC,eAAe,EAAE;IAAE,CAAC/C,cAAc,CAACgD,eAAe,GAAG;EAAW;AAClE,CAAC;;AAED;AACA,MAAMC,sBAAsB,GAAGA,CAC7BC,QAAwB,EACxBC,GAAkB,EAClBC,UAAkB,EAClBC,IAAoB,KACmC;EACvD,MAAMC,QAAQ,GAAGnD,wBAAwB,CAACgD,GAAG,CAAC,GAAG/C,sBAAsB,CAACgD,UAAU,CAAC,GAAGG,SAAS;EAE/F,IAAID,QAAQ,EAAE;IACZ,OAAO;MAAEE,IAAI,EAAEF,QAAQ;MAAEG,MAAM,EAAExD;IAAa,CAAC;EACjD;EAEA,MAAMyD,MAAM,GAAGxD,mBAAmB,CAACgD,QAAQ,EAAEE,UAAU,EAAEC,IAAI,CAAC;EAC9D,MAAMM,KAAK,GAAGhB,oBAAoB,CAACS,UAAU,CAAC,GAAGD,GAAG,CAAC;EAErD,OAAOQ,KAAK,GAAG;IAAEH,IAAI,EAAE,GAAGE,MAAM,CAACF,IAAI,IAAIG,KAAK,EAAE;IAAEF,MAAM,EAAEC,MAAM,CAACD;EAAO,CAAC,GAAGC,MAAM;AACpF,CAAC;AAED,SAAST,sBAAsB","ignoreList":[]}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import Healthkit, {
|
|
4
|
-
import {
|
|
5
|
-
import { DEFAULT_HEALTH_SYNC_CHUNK_SIZE } from "../constants.js";
|
|
3
|
+
import Healthkit, { ElectrocardiogramTypeIdentifier, WorkoutTypeIdentifier } from "@kingstinct/react-native-healthkit";
|
|
4
|
+
import { DEFAULT_HEALTH_SYNC_CHUNK_SIZE, ECG_PAGE_SIZE } from "../constants.js";
|
|
6
5
|
import { healthUnitFor } from "./health-units.js";
|
|
6
|
+
import { getDailyStatistics } from "./healthkit-daily-statistics.js";
|
|
7
7
|
import { isCategoryIdentifier, isCorrelationIdentifier, isQuantityIdentifier, UnsupportedHealthKitDataError, unsupportedHealthKitTypeReason } from "./healthkit-data-types.js";
|
|
8
|
+
import { ALL_SAMPLES, strictDateWindow } from "./healthkit-query-options.js";
|
|
9
|
+
import { toEcgRecord, toPlainCorrelation, toPlainSample, toWorkoutRecord } from "./healthkit-samples.js";
|
|
8
10
|
import { getHealthKitSeries } from "./healthkit-series.js";
|
|
9
11
|
import { isDailyAggregateMode } from "./is-daily-aggregate-mode.js";
|
|
10
12
|
import { syncWindowStart } from "./sync-window-start.js";
|
|
@@ -23,61 +25,56 @@ const getSamplesFromHealth = async ({
|
|
|
23
25
|
}
|
|
24
26
|
return mode === "series" ? getHealthKitSeries(typeIdentifier, startDate) : getDailyStatistics(typeIdentifier, mode, startDate, endDate);
|
|
25
27
|
}
|
|
28
|
+
const filter = strictDateWindow(startDate, endDate);
|
|
26
29
|
const options = {
|
|
27
|
-
from: startDate,
|
|
28
|
-
to: endDate,
|
|
29
30
|
limit: chunkSize,
|
|
30
|
-
anchor
|
|
31
|
+
anchor,
|
|
32
|
+
filter
|
|
31
33
|
};
|
|
32
|
-
if (typeIdentifier ===
|
|
33
|
-
const result = await Healthkit.queryWorkoutSamplesWithAnchor(
|
|
34
|
+
if (typeIdentifier === WorkoutTypeIdentifier) {
|
|
35
|
+
const result = await Healthkit.queryWorkoutSamplesWithAnchor(options);
|
|
36
|
+
return toAnchoredResult(typeIdentifier, result.workouts.map(toWorkoutRecord), result);
|
|
37
|
+
}
|
|
38
|
+
if (typeIdentifier === ElectrocardiogramTypeIdentifier) {
|
|
39
|
+
const limit = Math.min(chunkSize, ECG_PAGE_SIZE);
|
|
40
|
+
const result = await Healthkit.queryElectrocardiogramSamplesWithAnchor({
|
|
34
41
|
...options,
|
|
35
|
-
|
|
36
|
-
|
|
42
|
+
limit,
|
|
43
|
+
includeVoltages: true
|
|
37
44
|
});
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
return toAnchoredResult(typeIdentifier, result);
|
|
45
|
+
return {
|
|
46
|
+
...toAnchoredResult(typeIdentifier, result.samples.map(toEcgRecord), result),
|
|
47
|
+
hasMore: result.samples.length >= limit
|
|
48
|
+
};
|
|
45
49
|
}
|
|
46
|
-
if (typeIdentifier === "HKDataTypeIdentifierHeartbeatSeries"
|
|
50
|
+
if (typeIdentifier === "HKDataTypeIdentifierHeartbeatSeries") {
|
|
47
51
|
const result = await Healthkit.queryHeartbeatSeriesSamplesWithAnchor(options);
|
|
48
|
-
return toAnchoredResult(typeIdentifier, result);
|
|
52
|
+
return toAnchoredResult(typeIdentifier, result.samples.map(toPlainSample), result);
|
|
49
53
|
}
|
|
50
|
-
if (isCategoryIdentifier(typeIdentifier)
|
|
54
|
+
if (isCategoryIdentifier(typeIdentifier)) {
|
|
51
55
|
const result = await Healthkit.queryCategorySamplesWithAnchor(typeIdentifier, options);
|
|
52
|
-
|
|
53
|
-
return {
|
|
54
|
-
data: [],
|
|
55
|
-
anchor: undefined
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
return toAnchoredResult(typeIdentifier, result);
|
|
56
|
+
return toAnchoredResult(typeIdentifier, result.samples.map(toPlainSample), result);
|
|
59
57
|
}
|
|
60
58
|
if (isCorrelationIdentifier(typeIdentifier)) {
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
59
|
+
const correlations = await Healthkit.queryCorrelationSamples(typeIdentifier, {
|
|
60
|
+
limit: ALL_SAMPLES,
|
|
61
|
+
ascending: true,
|
|
62
|
+
filter
|
|
64
63
|
});
|
|
65
64
|
return {
|
|
66
|
-
data:
|
|
65
|
+
data: correlations.map(toPlainCorrelation),
|
|
67
66
|
anchor: undefined
|
|
68
67
|
};
|
|
69
68
|
}
|
|
70
69
|
if (typeIdentifier === "HKStateOfMindTypeIdentifier") {
|
|
70
|
+
// State of mind is read by window, not by anchor, so an unlimited page keeps the window from being cut short.
|
|
71
71
|
const samples = await Healthkit.queryStateOfMindSamples({
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
// HealthKit's unbounded query and avoids silently truncating the window.
|
|
76
|
-
limit: 0,
|
|
77
|
-
ascending: false
|
|
72
|
+
limit: ALL_SAMPLES,
|
|
73
|
+
ascending: false,
|
|
74
|
+
filter
|
|
78
75
|
});
|
|
79
76
|
return {
|
|
80
|
-
data:
|
|
77
|
+
data: samples.map(toPlainSample),
|
|
81
78
|
anchor: undefined
|
|
82
79
|
};
|
|
83
80
|
}
|
|
@@ -86,13 +83,7 @@ const getSamplesFromHealth = async ({
|
|
|
86
83
|
...options,
|
|
87
84
|
unit: healthUnitFor(typeIdentifier)
|
|
88
85
|
});
|
|
89
|
-
|
|
90
|
-
return {
|
|
91
|
-
data: [],
|
|
92
|
-
anchor: undefined
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
return toAnchoredResult(typeIdentifier, result);
|
|
86
|
+
return toAnchoredResult(typeIdentifier, result.samples.map(toPlainSample), result);
|
|
96
87
|
}
|
|
97
88
|
throw new UnsupportedHealthKitDataError(typeIdentifier, unsupportedHealthKitTypeReason(typeIdentifier));
|
|
98
89
|
};
|
|
@@ -106,50 +97,16 @@ const deletedRecordIds = samples => {
|
|
|
106
97
|
};
|
|
107
98
|
|
|
108
99
|
/** Maps one page of an anchored HealthKit query to the provider result shape. */
|
|
109
|
-
const toAnchoredResult = (typeIdentifier,
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
100
|
+
const toAnchoredResult = (typeIdentifier, data, {
|
|
101
|
+
deletedSamples,
|
|
102
|
+
newAnchor
|
|
103
|
+
}) => ({
|
|
104
|
+
data,
|
|
105
|
+
...deletedRecordIds(deletedSamples),
|
|
106
|
+
anchor: newAnchor ? {
|
|
113
107
|
typeIdentifier,
|
|
114
|
-
anchor:
|
|
108
|
+
anchor: newAnchor
|
|
115
109
|
} : undefined
|
|
116
110
|
});
|
|
117
|
-
const getDailyStatistics = async (typeIdentifier, mode, startDate, endDate) => {
|
|
118
|
-
const firstDay = startOfDay(startDate);
|
|
119
|
-
const today = startOfDay(endDate);
|
|
120
|
-
const options = mode === "daily-total" ? [HKStatisticsOptions.cumulativeSum] : [HKStatisticsOptions.discreteAverage, HKStatisticsOptions.discreteMin, HKStatisticsOptions.discreteMax];
|
|
121
|
-
const statistics = await Healthkit.queryStatisticsCollectionForQuantity(typeIdentifier, options, startOfDay(new Date(2001, 0, 1)), {
|
|
122
|
-
day: 1
|
|
123
|
-
}, firstDay, today, healthUnitFor(typeIdentifier));
|
|
124
|
-
const data = statistics.flatMap((statistic, index) => {
|
|
125
|
-
const dayStart = addDays(firstDay, index);
|
|
126
|
-
const dayEnd = addDays(dayStart, 1);
|
|
127
|
-
const total = statistic.sumQuantity?.quantity;
|
|
128
|
-
const average = statistic.averageQuantity?.quantity;
|
|
129
|
-
const minimum = statistic.minimumQuantity?.quantity;
|
|
130
|
-
const maximum = statistic.maximumQuantity?.quantity;
|
|
131
|
-
if (dayEnd > today || (mode === "daily-total" ? total === undefined : average === undefined)) {
|
|
132
|
-
return [];
|
|
133
|
-
}
|
|
134
|
-
return [{
|
|
135
|
-
kind: mode,
|
|
136
|
-
typeIdentifier,
|
|
137
|
-
startDate: dayStart,
|
|
138
|
-
endDate: dayEnd,
|
|
139
|
-
unit: statistic.sumQuantity?.unit ?? statistic.averageQuantity?.unit ?? healthUnitFor(typeIdentifier) ?? "1",
|
|
140
|
-
...(mode === "daily-total" ? {
|
|
141
|
-
value: total
|
|
142
|
-
} : {
|
|
143
|
-
average,
|
|
144
|
-
minimum,
|
|
145
|
-
maximum
|
|
146
|
-
})
|
|
147
|
-
}];
|
|
148
|
-
});
|
|
149
|
-
return {
|
|
150
|
-
data,
|
|
151
|
-
anchor: undefined
|
|
152
|
-
};
|
|
153
|
-
};
|
|
154
111
|
export { getSamplesFromHealth };
|
|
155
112
|
//# sourceMappingURL=get-samples-from-health.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Healthkit","
|
|
1
|
+
{"version":3,"names":["Healthkit","ElectrocardiogramTypeIdentifier","WorkoutTypeIdentifier","DEFAULT_HEALTH_SYNC_CHUNK_SIZE","ECG_PAGE_SIZE","healthUnitFor","getDailyStatistics","isCategoryIdentifier","isCorrelationIdentifier","isQuantityIdentifier","UnsupportedHealthKitDataError","unsupportedHealthKitTypeReason","ALL_SAMPLES","strictDateWindow","toEcgRecord","toPlainCorrelation","toPlainSample","toWorkoutRecord","getHealthKitSeries","isDailyAggregateMode","syncWindowStart","getSamplesFromHealth","startDate","_startDate","typeIdentifier","anchor","chunkSize","mode","endDate","Date","filter","options","limit","result","queryWorkoutSamplesWithAnchor","toAnchoredResult","workouts","map","Math","min","queryElectrocardiogramSamplesWithAnchor","includeVoltages","samples","hasMore","length","queryHeartbeatSeriesSamplesWithAnchor","queryCategorySamplesWithAnchor","correlations","queryCorrelationSamples","ascending","data","undefined","queryStateOfMindSamples","queryQuantitySamplesWithAnchor","unit","deletedRecordIds","recordIds","uuid","deletedSamples","newAnchor"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/get-samples-from-health.ts"],"mappings":"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","ignoreList":[]}
|