@ovok/native 1.16.1-dev.2131 → 1.16.1-dev.2135
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/bt-management/services/devices/bt-managed-device.js +18 -1
- package/lib/commonjs/modules/bt-management/services/devices/bt-managed-device.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.blood-pressure-status.js +4 -7
- package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.blood-pressure-status.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.decorators.js +106 -0
- package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.decorators.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.js +38 -31
- package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.frame.js +41 -0
- package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.frame.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.js +22 -24
- package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.js.map +1 -1
- package/lib/commonjs/modules/bt-management/utils/device-user.js +22 -0
- package/lib/commonjs/modules/bt-management/utils/device-user.js.map +1 -0
- package/lib/commonjs/modules/bt-management/utils/kpa-to-mmhg.js +9 -0
- package/lib/commonjs/modules/bt-management/utils/kpa-to-mmhg.js.map +1 -0
- package/lib/commonjs/modules/bt-management/utils/result-identity.js +26 -13
- package/lib/commonjs/modules/bt-management/utils/result-identity.js.map +1 -1
- package/lib/commonjs/modules/bt-management/utils/rr-interval.js +16 -0
- package/lib/commonjs/modules/bt-management/utils/rr-interval.js.map +1 -0
- package/lib/commonjs/modules/bt-management/utils/temperature-type.js +15 -0
- package/lib/commonjs/modules/bt-management/utils/temperature-type.js.map +1 -0
- package/lib/commonjs/modules/next/bluetooth/index.js +6 -0
- package/lib/commonjs/modules/next/bluetooth/index.js.map +1 -1
- package/lib/commonjs/modules/next/bluetooth/result-policy.js +10 -2
- package/lib/commonjs/modules/next/bluetooth/result-policy.js.map +1 -1
- package/lib/commonjs/modules/next/bluetooth/sig-profiles.js +46 -13
- package/lib/commonjs/modules/next/bluetooth/sig-profiles.js.map +1 -1
- package/lib/commonjs/modules/next/bluetooth/stable-hash.js +16 -7
- package/lib/commonjs/modules/next/bluetooth/stable-hash.js.map +1 -1
- package/lib/module/modules/bt-management/services/devices/bt-managed-device.js +19 -2
- package/lib/module/modules/bt-management/services/devices/bt-managed-device.js.map +1 -1
- package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.blood-pressure-status.js +1 -4
- package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.blood-pressure-status.js.map +1 -1
- package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.decorators.js +99 -0
- package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.decorators.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.js +38 -31
- package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.js.map +1 -1
- package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.frame.js +35 -0
- package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.frame.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.js +18 -20
- package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.js.map +1 -1
- package/lib/module/modules/bt-management/utils/device-user.js +17 -0
- package/lib/module/modules/bt-management/utils/device-user.js.map +1 -0
- package/lib/module/modules/bt-management/utils/kpa-to-mmhg.js +6 -0
- package/lib/module/modules/bt-management/utils/kpa-to-mmhg.js.map +1 -0
- package/lib/module/modules/bt-management/utils/result-identity.js +24 -12
- package/lib/module/modules/bt-management/utils/result-identity.js.map +1 -1
- package/lib/module/modules/bt-management/utils/rr-interval.js +12 -0
- package/lib/module/modules/bt-management/utils/rr-interval.js.map +1 -0
- package/lib/module/modules/bt-management/utils/temperature-type.js +11 -0
- package/lib/module/modules/bt-management/utils/temperature-type.js.map +1 -0
- package/lib/module/modules/next/bluetooth/index.js +1 -1
- package/lib/module/modules/next/bluetooth/index.js.map +1 -1
- package/lib/module/modules/next/bluetooth/result-policy.js +8 -1
- package/lib/module/modules/next/bluetooth/result-policy.js.map +1 -1
- package/lib/module/modules/next/bluetooth/sig-profiles.js +44 -11
- package/lib/module/modules/next/bluetooth/sig-profiles.js.map +1 -1
- package/lib/module/modules/next/bluetooth/stable-hash.js +15 -6
- package/lib/module/modules/next/bluetooth/stable-hash.js.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-managed-device.d.ts +2 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-managed-device.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.blood-pressure-status.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.decorators.d.ts +11 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.decorators.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.d.ts +5 -2
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.frame.d.ts +10 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.frame.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.d.ts +2 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/types/result-callback.d.ts +2 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/result-callback.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/types/result-policy.d.ts +6 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/result-policy.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/utils/device-user.d.ts +6 -0
- package/lib/typescript/commonjs/src/modules/bt-management/utils/device-user.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/utils/kpa-to-mmhg.d.ts +4 -0
- package/lib/typescript/commonjs/src/modules/bt-management/utils/kpa-to-mmhg.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/utils/result-identity.d.ts +5 -4
- package/lib/typescript/commonjs/src/modules/bt-management/utils/result-identity.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/utils/rr-interval.d.ts +4 -0
- package/lib/typescript/commonjs/src/modules/bt-management/utils/rr-interval.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/utils/temperature-type.d.ts +7 -0
- package/lib/typescript/commonjs/src/modules/bt-management/utils/temperature-type.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/next/bluetooth/index.d.ts +1 -1
- package/lib/typescript/commonjs/src/modules/next/bluetooth/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/next/bluetooth/result-policy.d.ts +6 -1
- package/lib/typescript/commonjs/src/modules/next/bluetooth/result-policy.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/next/bluetooth/sig-profiles.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/next/bluetooth/stable-hash.d.ts +5 -2
- package/lib/typescript/commonjs/src/modules/next/bluetooth/stable-hash.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/devices/bt-managed-device.d.ts +2 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/bt-managed-device.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.blood-pressure-status.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.decorators.d.ts +11 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.decorators.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.d.ts +5 -2
- package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.frame.d.ts +10 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.frame.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.d.ts +2 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/types/result-callback.d.ts +2 -0
- package/lib/typescript/module/src/modules/bt-management/types/result-callback.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/types/result-policy.d.ts +6 -0
- package/lib/typescript/module/src/modules/bt-management/types/result-policy.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/utils/device-user.d.ts +6 -0
- package/lib/typescript/module/src/modules/bt-management/utils/device-user.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/utils/kpa-to-mmhg.d.ts +4 -0
- package/lib/typescript/module/src/modules/bt-management/utils/kpa-to-mmhg.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/utils/result-identity.d.ts +5 -4
- package/lib/typescript/module/src/modules/bt-management/utils/result-identity.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/utils/rr-interval.d.ts +4 -0
- package/lib/typescript/module/src/modules/bt-management/utils/rr-interval.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/utils/temperature-type.d.ts +7 -0
- package/lib/typescript/module/src/modules/bt-management/utils/temperature-type.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/next/bluetooth/index.d.ts +1 -1
- package/lib/typescript/module/src/modules/next/bluetooth/index.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/next/bluetooth/result-policy.d.ts +6 -1
- package/lib/typescript/module/src/modules/next/bluetooth/result-policy.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/next/bluetooth/sig-profiles.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/next/bluetooth/stable-hash.d.ts +5 -2
- package/lib/typescript/module/src/modules/next/bluetooth/stable-hash.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -2,20 +2,32 @@
|
|
|
2
2
|
|
|
3
3
|
/* eslint-disable import/group-exports */
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { isTimestamped } from "../../next/bluetooth/driver.js";
|
|
6
|
+
import { instantStableHash, stableHash } from "../../next/bluetooth/stable-hash.js";
|
|
7
|
+
/** Reading properties added after result ids were first issued; leaving them out keeps every earlier id. */
|
|
8
|
+
const ADDED_READING_PROPERTIES = new Set(["sequenceNumber", "specimen", "sampleLocation", "sensorStatus", "outOfRange", "meal", "reportedUnit", "temperatureType", "rrIntervals"]);
|
|
9
|
+
const identifyingData = data => Object.fromEntries(Object.entries(data).filter(([key]) => !ADDED_READING_PROPERTIES.has(key)));
|
|
10
|
+
const deviceIdentityOf = deviceData => deviceData.sn || deviceData.manufacturerData || deviceData.model || deviceData.name || deviceData.id;
|
|
11
|
+
|
|
6
12
|
/**
|
|
7
|
-
* Creates an identity that is stable when a device sends its stored history again.
|
|
8
|
-
*
|
|
9
|
-
* delivery metadata is deliberately not part of the key.
|
|
13
|
+
* Creates an identity that is stable when a device sends its stored history again, in any time zone. A reading
|
|
14
|
+
* without a time of its own is a new measurement each time, so it is told apart by when it arrived.
|
|
10
15
|
*/
|
|
11
|
-
export const createStableResultId = (deviceData, data) => {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
})
|
|
18
|
-
}
|
|
16
|
+
export const createStableResultId = (deviceData, data, receivedAt = new Date()) => `ovok:${stableHash({
|
|
17
|
+
device: deviceIdentityOf(deviceData),
|
|
18
|
+
name: deviceData.name,
|
|
19
|
+
data: identifyingData(data),
|
|
20
|
+
...(isTimestamped(data) ? {} : {
|
|
21
|
+
receivedAt: receivedAt.toISOString()
|
|
22
|
+
})
|
|
23
|
+
})}`;
|
|
24
|
+
|
|
25
|
+
/** The id SDKs before 1.16.1 gave the same reading, to find what they saved. */
|
|
26
|
+
export const createLegacyResultId = (deviceData, data) => `ovok:${instantStableHash({
|
|
27
|
+
device: deviceIdentityOf(deviceData),
|
|
28
|
+
name: deviceData.name,
|
|
29
|
+
data: identifyingData(data)
|
|
30
|
+
})}`;
|
|
19
31
|
|
|
20
32
|
/** Converts the ISO date strings of `recordedAt`, `start` and `end` fields back to `Date`s, recursively. */
|
|
21
33
|
export const reviveResultDates = value => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["stableHash","
|
|
1
|
+
{"version":3,"names":["isTimestamped","instantStableHash","stableHash","ADDED_READING_PROPERTIES","Set","identifyingData","data","Object","fromEntries","entries","filter","key","has","deviceIdentityOf","deviceData","sn","manufacturerData","model","name","id","createStableResultId","receivedAt","Date","device","toISOString","createLegacyResultId","reviveResultDates","value","revive","current","includes","date","Number","isNaN","getTime","Array","isArray","map","item","childKey","childValue"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/utils/result-identity.ts"],"mappings":";;AAAA;;AAIA,SAASA,aAAa,QAAQ,gCAA6B;AAC3D,SAASC,iBAAiB,EAAEC,UAAU,QAAQ,qCAAkC;AAGhF;AACA,MAAMC,wBAAwB,GAAG,IAAIC,GAAG,CAAC,CACvC,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,aAAa,CACd,CAAC;AAEF,MAAMC,eAAe,GAAIC,IAAiB,IACxCC,MAAM,CAACC,WAAW,CAACD,MAAM,CAACE,OAAO,CAACH,IAAI,CAAC,CAACI,MAAM,CAAC,CAAC,CAACC,GAAG,CAAC,KAAK,CAACR,wBAAwB,CAACS,GAAG,CAACD,GAAG,CAAC,CAAC,CAAC;AAEhG,MAAME,gBAAgB,GAAIC,UAAsB,IAC9CA,UAAU,CAACC,EAAE,IACbD,UAAU,CAACE,gBAAgB,IAC3BF,UAAU,CAACG,KAAK,IAChBH,UAAU,CAACI,IAAI,IACfJ,UAAU,CAACK,EAAE;;AAEf;AACA;AACA;AACA;AACA,OAAO,MAAMC,oBAAoB,GAAGA,CAClCN,UAAsB,EACtBR,IAAiB,EACjBe,UAAgB,GAAG,IAAIC,IAAI,CAAC,CAAC,KAE7B,QAAQpB,UAAU,CAAC;EACjBqB,MAAM,EAAEV,gBAAgB,CAACC,UAAU,CAAC;EACpCI,IAAI,EAAEJ,UAAU,CAACI,IAAI;EACrBZ,IAAI,EAAED,eAAe,CAACC,IAAI,CAAC;EAC3B,IAAIN,aAAa,CAACM,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG;IAAEe,UAAU,EAAEA,UAAU,CAACG,WAAW,CAAC;EAAE,CAAC;AACzE,CAAC,CAAC,EAAE;;AAEN;AACA,OAAO,MAAMC,oBAAoB,GAAGA,CAACX,UAAsB,EAAER,IAAiB,KAC5E,QAAQL,iBAAiB,CAAC;EACxBsB,MAAM,EAAEV,gBAAgB,CAACC,UAAU,CAAC;EACpCI,IAAI,EAAEJ,UAAU,CAACI,IAAI;EACrBZ,IAAI,EAAED,eAAe,CAACC,IAAI;AAC5B,CAAC,CAAC,EAAE;;AAEN;AACA,OAAO,MAAMoB,iBAAiB,GAAOC,KAAQ,IAAQ;EACnD,MAAMC,MAAM,GAAGA,CAACC,OAAgB,EAAElB,GAAY,KAAc;IAC1D,IACE,OAAOkB,OAAO,KAAK,QAAQ,IAC3B,CAAC,YAAY,EAAE,OAAO,EAAE,KAAK,CAAC,CAACC,QAAQ,CAACnB,GAAG,IAAI,EAAE,CAAC,EAClD;MACA,MAAMoB,IAAI,GAAG,IAAIT,IAAI,CAACO,OAAO,CAAC;MAE9B,OAAOG,MAAM,CAACC,KAAK,CAACF,IAAI,CAACG,OAAO,CAAC,CAAC,CAAC,GAAGL,OAAO,GAAGE,IAAI;IACtD;IAEA,IAAII,KAAK,CAACC,OAAO,CAACP,OAAO,CAAC,EAAE;MAC1B,OAAOA,OAAO,CAACQ,GAAG,CAAEC,IAAI,IAAKV,MAAM,CAACU,IAAI,CAAC,CAAC;IAC5C;IAEA,IAAIT,OAAO,IAAI,OAAOA,OAAO,KAAK,QAAQ,EAAE;MAC1C,OAAOtB,MAAM,CAACC,WAAW,CACvBD,MAAM,CAACE,OAAO,CAACoB,OAAO,CAAC,CAACQ,GAAG,CAAC,CAAC,CAACE,QAAQ,EAAEC,UAAU,CAAC,KAAK,CACtDD,QAAQ,EACRX,MAAM,CAACY,UAAU,EAAED,QAAQ,CAAC,CAC7B,CACH,CAAC;IACH;IAEA,OAAOV,OAAO;EAChB,CAAC;EAED,OAAOD,MAAM,CAACD,KAAK,CAAC;AACtB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const MILLISECONDS_PER_SECOND = 1000;
|
|
4
|
+
|
|
5
|
+
/** The Bluetooth SIG heart-rate RR-Interval resolution: counts of 1/1024 s. */
|
|
6
|
+
const RR_COUNTS_PER_SECOND = 1024;
|
|
7
|
+
const RR_DECIMALS = 2;
|
|
8
|
+
|
|
9
|
+
/** An RR-Interval count from a Heart Rate Measurement, in milliseconds. */
|
|
10
|
+
const rrIntervalMilliseconds = counts => Number((counts * MILLISECONDS_PER_SECOND / RR_COUNTS_PER_SECOND).toFixed(RR_DECIMALS));
|
|
11
|
+
export { rrIntervalMilliseconds };
|
|
12
|
+
//# sourceMappingURL=rr-interval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["MILLISECONDS_PER_SECOND","RR_COUNTS_PER_SECOND","RR_DECIMALS","rrIntervalMilliseconds","counts","Number","toFixed"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/utils/rr-interval.ts"],"mappings":";;AAAA,MAAMA,uBAAuB,GAAG,IAAI;;AAEpC;AACA,MAAMC,oBAAoB,GAAG,IAAI;AAEjC,MAAMC,WAAW,GAAG,CAAC;;AAErB;AACA,MAAMC,sBAAsB,GAAIC,MAAc,IAC5CC,MAAM,CACJ,CAAED,MAAM,GAAGJ,uBAAuB,GAAIC,oBAAoB,EAAEK,OAAO,CACjEJ,WACF,CACF,CAAC;AAEH,SAASC,sBAAsB","ignoreList":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/** Where on the body a thermometer took its reading: the Bluetooth SIG Temperature Type. */
|
|
4
|
+
|
|
5
|
+
/** Indexed by the Temperature Type code, which starts at 1; code 0 is reserved. */
|
|
6
|
+
const TEMPERATURE_TYPES = ["armpit", "body", "ear", "finger", "gastrointestinal-tract", "mouth", "rectum", "toe", "tympanum"];
|
|
7
|
+
|
|
8
|
+
/** The body site for a Temperature Type code; undefined for a reserved or unknown code. */
|
|
9
|
+
const temperatureTypeFromCode = code => TEMPERATURE_TYPES[code - 1];
|
|
10
|
+
export { temperatureTypeFromCode };
|
|
11
|
+
//# sourceMappingURL=temperature-type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["TEMPERATURE_TYPES","temperatureTypeFromCode","code"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/utils/temperature-type.ts"],"mappings":";;AAAA;;AAYA;AACA,MAAMA,iBAA6C,GAAG,CACpD,QAAQ,EACR,MAAM,EACN,KAAK,EACL,QAAQ,EACR,wBAAwB,EACxB,OAAO,EACP,QAAQ,EACR,KAAK,EACL,UAAU,CACX;;AAED;AACA,MAAMC,uBAAuB,GAAIC,IAAY,IAC3CF,iBAAiB,CAACE,IAAI,GAAG,CAAC,CAAC;AAE7B,SAASD,uBAAuB","ignoreList":[]}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
export { BluetoothRuntime } from "./runtime.js";
|
|
13
13
|
export { BluetoothError } from "./errors.js";
|
|
14
14
|
export { defineDevice } from "./devices.js";
|
|
15
|
-
export { dailyTotalsOnly, everyReading, firstReadingPerKind, keepReadings, policyByKind } from "./result-policy.js";
|
|
15
|
+
export { acceptedMemorySlots, dailyTotalsOnly, everyReading, firstReadingPerKind, keepReadings, policyByKind } from "./result-policy.js";
|
|
16
16
|
export { SIG_PROTOCOLS } from "./sig-profiles.js";
|
|
17
17
|
export { bleManagerScanner } from "./ble-plx/ble-scanner.js";
|
|
18
18
|
export { builtInDevices } from "./ble-plx/built-in-devices.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BluetoothRuntime","BluetoothError","defineDevice","dailyTotalsOnly","everyReading","firstReadingPerKind","keepReadings","policyByKind","SIG_PROTOCOLS","bleManagerScanner","builtInDevices","IntegratedDevices","osBluetoothPermissions","ovokReadingSink","createBluetoothRuntime","BluetoothProvider","useBluetooth","useBluetoothPermission","useBluetoothState","useMeasurements","useNearbyDevice","useNearbyDevices","usePairedDevices","useScanning","BluetoothDevicePicker"],"sourceRoot":"../../../../../src","sources":["modules/next/bluetooth/index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,gBAAgB,QAAQ,cAAW;AAE5C,SAASC,cAAc,QAAQ,aAAU;AAOzC,SAASC,YAAY,QAAQ,cAAW;AAIxC,
|
|
1
|
+
{"version":3,"names":["BluetoothRuntime","BluetoothError","defineDevice","acceptedMemorySlots","dailyTotalsOnly","everyReading","firstReadingPerKind","keepReadings","policyByKind","SIG_PROTOCOLS","bleManagerScanner","builtInDevices","IntegratedDevices","osBluetoothPermissions","ovokReadingSink","createBluetoothRuntime","BluetoothProvider","useBluetooth","useBluetoothPermission","useBluetoothState","useMeasurements","useNearbyDevice","useNearbyDevices","usePairedDevices","useScanning","BluetoothDevicePicker"],"sourceRoot":"../../../../../src","sources":["modules/next/bluetooth/index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,gBAAgB,QAAQ,cAAW;AAE5C,SAASC,cAAc,QAAQ,aAAU;AAOzC,SAASC,YAAY,QAAQ,cAAW;AAIxC,SACEC,mBAAmB,EACnBC,eAAe,EACfC,YAAY,EACZC,mBAAmB,EACnBC,YAAY,EACZC,YAAY,QACP,oBAAiB;AAExB,SAASC,aAAa,QAAQ,mBAAgB;AAE9C,SAASC,iBAAiB,QAAQ,0BAAuB;AACzD,SAASC,cAAc,QAAQ,+BAA4B;AAC3D,SAASC,iBAAiB,QAAQ,iDAA8C;AAEhF,SAASC,sBAAsB,QAAQ,kCAA+B;AACtE,SAASC,eAAe,QAAQ,6BAA0B;AAC1D,SAASC,sBAAsB,QAAQ,4CAAyC;AAGhF,SAASC,iBAAiB,EAAEC,YAAY,QAAQ,oBAAiB;AAEjE,SACEC,sBAAsB,EACtBC,iBAAiB,EACjBC,eAAe,EACfC,eAAe,EACfC,gBAAgB,EAChBC,gBAAgB,EAChBC,WAAW,QACN,kBAAe;AACtB,SAASC,qBAAqB,QAAQ,oCAAiC","ignoreList":[]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { isFromAcceptedMemorySlot } from "../../bt-management/utils/device-user.js";
|
|
3
4
|
import { dailyTotalDay } from "./daily-total-day.js";
|
|
4
5
|
|
|
5
6
|
/** Makes, for each connection, the test of which readings to keep. */
|
|
@@ -38,6 +39,12 @@ const dailyTotalsOnly = () => {
|
|
|
38
39
|
};
|
|
39
40
|
};
|
|
40
41
|
|
|
42
|
+
/**
|
|
43
|
+
* Keeps the readings of the device users in `slots` (a multi-user device reports its user as `memorySlot`, starting at
|
|
44
|
+
* 1), and drops the others. A reading that names no device user is kept.
|
|
45
|
+
*/
|
|
46
|
+
const acceptedMemorySlots = slots => () => reading => isFromAcceptedMemorySlot(reading, slots);
|
|
47
|
+
|
|
41
48
|
/** Applies a policy per measurement type, and `fallback` to the other types. */
|
|
42
49
|
const policyByKind = (policies, fallback = everyReading) => () => {
|
|
43
50
|
const tests = new Map();
|
|
@@ -62,5 +69,5 @@ async function* keepReadings(events, policy) {
|
|
|
62
69
|
}
|
|
63
70
|
}
|
|
64
71
|
}
|
|
65
|
-
export { dailyTotalsOnly, everyReading, firstReadingPerKind, keepReadings, policyByKind };
|
|
72
|
+
export { acceptedMemorySlots, dailyTotalsOnly, everyReading, firstReadingPerKind, keepReadings, policyByKind };
|
|
66
73
|
//# sourceMappingURL=result-policy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["dailyTotalDay","everyReading","firstReadingPerKind","reported","Set","measurementTypeKey","has","add","dailyTotalsOnly","reading","day","Date","now","undefined","key","policyByKind","policies","fallback","tests","Map","fallbackTest","policy","test","get","set","keepReadings","events","keep","event","kind"],"sourceRoot":"../../../../../src","sources":["modules/next/bluetooth/result-policy.ts"],"mappings":";;AAEA,SAASA,aAAa,QAAQ,sBAAmB;;AAGjD;;AAGA;AACA,MAAMC,YAA0B,GAAGA,CAAA,KAAM,MAAM,IAAI;;AAEnD;AACA,MAAMC,mBAAiC,GAAGA,CAAA,KAAM;EAC9C,MAAMC,QAAQ,GAAG,IAAIC,GAAG,CAAqB,CAAC;EAE9C,OAAO,CAAC;IAAEC;EAAmB,CAAC,KAAK;IACjC,IAAIF,QAAQ,CAACG,GAAG,CAACD,kBAAkB,CAAC,EAAE;MACpC,OAAO,KAAK;IACd;IAEAF,QAAQ,CAACI,GAAG,CAACF,kBAAkB,CAAC;IAEhC,OAAO,IAAI;EACb,CAAC;AACH,CAAC;;AAED;AACA,MAAMG,eAA6B,GAAGA,CAAA,KAAM;EAC1C,MAAML,QAAQ,GAAG,IAAIC,GAAG,CAAS,CAAC;EAElC,OAAQK,OAAO,IAAK;IAClB,MAAMC,GAAG,GAAGV,aAAa,CAACS,OAAO,EAAEE,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC;IAE9C,IAAIF,GAAG,KAAKG,SAAS,EAAE;MACrB,OAAO,IAAI;IACb;IAEA,MAAMC,GAAG,GAAG,GAAGL,OAAO,CAACJ,kBAAkB,IAAIK,GAAG,EAAE;IAElD,IAAIA,GAAG,KAAK,QAAQ,IAAIP,QAAQ,CAACG,GAAG,CAACQ,GAAG,CAAC,EAAE;MACzC,OAAO,KAAK;IACd;IAEAX,QAAQ,CAACI,GAAG,CAACO,GAAG,CAAC;IAEjB,OAAO,IAAI;EACb,CAAC;AACH,CAAC;;AAED;AACA,MAAMC,YAAY,GAAGA,CACnBC,QAA2D,EAC3DC,QAAsB,
|
|
1
|
+
{"version":3,"names":["isFromAcceptedMemorySlot","dailyTotalDay","everyReading","firstReadingPerKind","reported","Set","measurementTypeKey","has","add","dailyTotalsOnly","reading","day","Date","now","undefined","key","acceptedMemorySlots","slots","policyByKind","policies","fallback","tests","Map","fallbackTest","policy","test","get","set","keepReadings","events","keep","event","kind"],"sourceRoot":"../../../../../src","sources":["modules/next/bluetooth/result-policy.ts"],"mappings":";;AAEA,SAASA,wBAAwB,QAAQ,0CAAuC;AAEhF,SAASC,aAAa,QAAQ,sBAAmB;;AAGjD;;AAGA;AACA,MAAMC,YAA0B,GAAGA,CAAA,KAAM,MAAM,IAAI;;AAEnD;AACA,MAAMC,mBAAiC,GAAGA,CAAA,KAAM;EAC9C,MAAMC,QAAQ,GAAG,IAAIC,GAAG,CAAqB,CAAC;EAE9C,OAAO,CAAC;IAAEC;EAAmB,CAAC,KAAK;IACjC,IAAIF,QAAQ,CAACG,GAAG,CAACD,kBAAkB,CAAC,EAAE;MACpC,OAAO,KAAK;IACd;IAEAF,QAAQ,CAACI,GAAG,CAACF,kBAAkB,CAAC;IAEhC,OAAO,IAAI;EACb,CAAC;AACH,CAAC;;AAED;AACA,MAAMG,eAA6B,GAAGA,CAAA,KAAM;EAC1C,MAAML,QAAQ,GAAG,IAAIC,GAAG,CAAS,CAAC;EAElC,OAAQK,OAAO,IAAK;IAClB,MAAMC,GAAG,GAAGV,aAAa,CAACS,OAAO,EAAEE,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC;IAE9C,IAAIF,GAAG,KAAKG,SAAS,EAAE;MACrB,OAAO,IAAI;IACb;IAEA,MAAMC,GAAG,GAAG,GAAGL,OAAO,CAACJ,kBAAkB,IAAIK,GAAG,EAAE;IAElD,IAAIA,GAAG,KAAK,QAAQ,IAAIP,QAAQ,CAACG,GAAG,CAACQ,GAAG,CAAC,EAAE;MACzC,OAAO,KAAK;IACd;IAEAX,QAAQ,CAACI,GAAG,CAACO,GAAG,CAAC;IAEjB,OAAO,IAAI;EACb,CAAC;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMC,mBAAmB,GAAIC,KAAwB,IACnD,MAAOP,OAAO,IAAKV,wBAAwB,CAACU,OAAO,EAAEO,KAAK,CAAC;;AAE7D;AACA,MAAMC,YAAY,GAAGA,CACnBC,QAA2D,EAC3DC,QAAsB,GAAGlB,YAAY,KAErC,MAAM;EACJ,MAAMmB,KAAK,GAAG,IAAIC,GAAG,CAAwD,CAAC;EAC9E,MAAMC,YAAY,GAAGH,QAAQ,CAAC,CAAC;EAE/B,OAAQV,OAAO,IAAK;IAClB,MAAMc,MAAM,GAAGL,QAAQ,CAACT,OAAO,CAACJ,kBAAkB,CAAC;IAEnD,IAAI,CAACkB,MAAM,EAAE;MACX,OAAOD,YAAY,CAACb,OAAO,CAAC;IAC9B;IAEA,MAAMe,IAAI,GAAGJ,KAAK,CAACK,GAAG,CAAChB,OAAO,CAACJ,kBAAkB,CAAC,IAAIkB,MAAM,CAAC,CAAC;IAE9DH,KAAK,CAACM,GAAG,CAACjB,OAAO,CAACJ,kBAAkB,EAAEmB,IAAI,CAAC;IAE3C,OAAOA,IAAI,CAACf,OAAO,CAAC;EACtB,CAAC;AACH,CAAC;;AAEH;AACA,gBAAgBkB,YAAYA,CAACC,MAAkC,EAAEL,MAAoB,EAA8B;EACjH,MAAMM,IAAI,GAAGN,MAAM,CAAC,CAAC;EAErB,WAAW,MAAMO,KAAK,IAAIF,MAAM,EAAE;IAChC,IAAIE,KAAK,CAACC,IAAI,KAAK,SAAS,IAAIF,IAAI,CAACC,KAAK,CAACrB,OAAO,CAAC,EAAE;MACnD,MAAMqB,KAAK;IACb;EACF;AACF;AAEA,SAASf,mBAAmB,EAAEP,eAAe,EAAEP,YAAY,EAAEC,mBAAmB,EAAEyB,YAAY,EAAEV,YAAY","ignoreList":[]}
|
|
@@ -2,9 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
import { MeasurementTypeKey } from "@ovok/core/next";
|
|
4
4
|
import { BloodPressureStates } from "../../bt-management/types/blood-pressure-states.js";
|
|
5
|
+
import { memorySlotForDeviceUser } from "../../bt-management/utils/device-user.js";
|
|
6
|
+
import { KPA_TO_MMHG } from "../../bt-management/utils/kpa-to-mmhg.js";
|
|
7
|
+
import { rrIntervalMilliseconds } from "../../bt-management/utils/rr-interval.js";
|
|
5
8
|
import { sigUuid } from "../../bt-management/utils/sig-uuid.js";
|
|
9
|
+
import { temperatureTypeFromCode } from "../../bt-management/utils/temperature-type.js";
|
|
6
10
|
import { dateTimeAt, decodeFrame, floatAt, roundTo, sfloatAt, withDefined } from "./sig-values.js";
|
|
7
|
-
const KPA_TO_MMHG = 7.50062;
|
|
8
11
|
const KG_PER_SI_COUNT = 0.005;
|
|
9
12
|
const KG_PER_IMPERIAL_COUNT = 0.01 * 0.45359237;
|
|
10
13
|
const WEIGHT_UNSUCCESSFUL = 0xffff;
|
|
@@ -19,15 +22,29 @@ const BP_LOOSE_CUFF = 0x02;
|
|
|
19
22
|
const BP_IRREGULAR_PULSE = 0x04;
|
|
20
23
|
const TEMPERATURE_FAHRENHEIT = 0x01;
|
|
21
24
|
const TEMPERATURE_TIMESTAMP = 0x02;
|
|
25
|
+
const TEMPERATURE_TYPE = 0x04;
|
|
26
|
+
const TEMPERATURE_TIMESTAMP_OFFSET = 5;
|
|
22
27
|
const WEIGHT_IMPERIAL = 0x01;
|
|
23
28
|
const WEIGHT_TIMESTAMP = 0x02;
|
|
29
|
+
const WEIGHT_USER = 0x04;
|
|
30
|
+
const WEIGHT_TIMESTAMP_OFFSET = 3;
|
|
24
31
|
const PLX_TIMESTAMP = 0x01;
|
|
25
32
|
const HEART_RATE_UINT16 = 0x01;
|
|
26
33
|
const HEART_RATE_CONTACT_BITS = 0x06;
|
|
27
34
|
const HEART_RATE_NO_CONTACT = 0x04;
|
|
35
|
+
const HEART_RATE_ENERGY_EXPENDED = 0x08;
|
|
36
|
+
const HEART_RATE_RR_INTERVALS = 0x10;
|
|
37
|
+
const UINT8_BYTES = 1;
|
|
38
|
+
const UINT16_BYTES = 2;
|
|
28
39
|
|
|
29
40
|
/** Core does not export its status enum; this one has the same values. */
|
|
30
41
|
|
|
42
|
+
/** Core's temperature has no body site, so it rides along on the reading as `memorySlot` does on blood pressure. */
|
|
43
|
+
|
|
44
|
+
/** The device user, carried the way blood pressure carries it. */
|
|
45
|
+
|
|
46
|
+
/** Core's heart rate has no RR intervals, so they ride along on the reading, in milliseconds. */
|
|
47
|
+
|
|
31
48
|
const bloodPressureStatus = status => {
|
|
32
49
|
if (status & BP_BODY_MOVEMENT) {
|
|
33
50
|
return BloodPressureStates.DISTURB_DETECTED;
|
|
@@ -48,8 +65,7 @@ const bloodPressureExtras = (view, flags) => {
|
|
|
48
65
|
offset += 2;
|
|
49
66
|
}
|
|
50
67
|
if (flags & BP_USER) {
|
|
51
|
-
|
|
52
|
-
extras.memorySlot = user < 2 ? user + 1 : undefined;
|
|
68
|
+
extras.memorySlot = memorySlotForDeviceUser(view.getUint8(offset));
|
|
53
69
|
offset += 1;
|
|
54
70
|
}
|
|
55
71
|
if (flags & BP_STATUS) {
|
|
@@ -86,13 +102,16 @@ const temperature = view => {
|
|
|
86
102
|
if (value === undefined) {
|
|
87
103
|
return undefined;
|
|
88
104
|
}
|
|
105
|
+
const hasTimestamp = Boolean(flags & TEMPERATURE_TIMESTAMP);
|
|
106
|
+
const typeOffset = TEMPERATURE_TIMESTAMP_OFFSET + (hasTimestamp ? DATE_TIME_BYTES : 0);
|
|
89
107
|
const reading = {
|
|
90
108
|
measurementTypeKey: MeasurementTypeKey.temperature,
|
|
91
109
|
bodyTemp: flags & TEMPERATURE_FAHRENHEIT ? roundTo((value - 32) * 5 / 9, 2) : value
|
|
92
110
|
};
|
|
93
|
-
return
|
|
94
|
-
recordedAt: dateTimeAt(view,
|
|
95
|
-
|
|
111
|
+
return withDefined(reading, {
|
|
112
|
+
recordedAt: hasTimestamp ? dateTimeAt(view, TEMPERATURE_TIMESTAMP_OFFSET) : undefined,
|
|
113
|
+
temperatureType: flags & TEMPERATURE_TYPE ? temperatureTypeFromCode(view.getUint8(typeOffset)) : undefined
|
|
114
|
+
});
|
|
96
115
|
};
|
|
97
116
|
|
|
98
117
|
/** Weight Measurement 0x2A9D, in kilograms. */
|
|
@@ -102,13 +121,16 @@ const bodyWeight = view => {
|
|
|
102
121
|
if (counts === WEIGHT_UNSUCCESSFUL) {
|
|
103
122
|
return undefined;
|
|
104
123
|
}
|
|
124
|
+
const hasTimestamp = Boolean(flags & WEIGHT_TIMESTAMP);
|
|
125
|
+
const userOffset = WEIGHT_TIMESTAMP_OFFSET + (hasTimestamp ? DATE_TIME_BYTES : 0);
|
|
105
126
|
const reading = {
|
|
106
127
|
measurementTypeKey: MeasurementTypeKey.bodyWeight,
|
|
107
128
|
bodyWeight: roundTo(counts * (flags & WEIGHT_IMPERIAL ? KG_PER_IMPERIAL_COUNT : KG_PER_SI_COUNT), 3)
|
|
108
129
|
};
|
|
109
|
-
return
|
|
110
|
-
recordedAt: dateTimeAt(view,
|
|
111
|
-
|
|
130
|
+
return withDefined(reading, {
|
|
131
|
+
recordedAt: hasTimestamp ? dateTimeAt(view, WEIGHT_TIMESTAMP_OFFSET) : undefined,
|
|
132
|
+
memorySlot: flags & WEIGHT_USER ? memorySlotForDeviceUser(view.getUint8(userOffset)) : undefined
|
|
133
|
+
});
|
|
112
134
|
};
|
|
113
135
|
|
|
114
136
|
/** PLX Spot-Check Measurement 0x2A5E. */
|
|
@@ -129,17 +151,28 @@ const pulseOximetry = view => {
|
|
|
129
151
|
}) : reading;
|
|
130
152
|
};
|
|
131
153
|
|
|
154
|
+
/** The RR intervals from `offset` to the end of the frame, in milliseconds. */
|
|
155
|
+
const rrIntervalsFrom = (view, offset) => Array.from({
|
|
156
|
+
length: Math.floor((view.byteLength - offset) / UINT16_BYTES)
|
|
157
|
+
}, (_, index) => rrIntervalMilliseconds(view.getUint16(offset + index * UINT16_BYTES, true)));
|
|
158
|
+
|
|
132
159
|
/** Heart Rate Measurement 0x2A37; a strap reporting no skin contact has no reading. */
|
|
133
160
|
const heartRate = view => {
|
|
134
161
|
const flags = view.getUint8(0);
|
|
135
162
|
if ((flags & HEART_RATE_CONTACT_BITS) === HEART_RATE_NO_CONTACT) {
|
|
136
163
|
return undefined;
|
|
137
164
|
}
|
|
165
|
+
const hasUint16 = Boolean(flags & HEART_RATE_UINT16);
|
|
166
|
+
const rrOffset = 1 + (hasUint16 ? UINT16_BYTES : UINT8_BYTES) + (flags & HEART_RATE_ENERGY_EXPENDED ? UINT16_BYTES : 0);
|
|
167
|
+
const rrIntervals = flags & HEART_RATE_RR_INTERVALS ? rrIntervalsFrom(view, rrOffset) : [];
|
|
138
168
|
const reading = {
|
|
139
169
|
measurementTypeKey: MeasurementTypeKey.heartRate,
|
|
140
|
-
heartRate:
|
|
170
|
+
heartRate: hasUint16 ? view.getUint16(1, true) : view.getUint8(1)
|
|
141
171
|
};
|
|
142
|
-
return
|
|
172
|
+
return rrIntervals.length > 0 ? {
|
|
173
|
+
...reading,
|
|
174
|
+
rrIntervals
|
|
175
|
+
} : reading;
|
|
143
176
|
};
|
|
144
177
|
const subscribed = (service, characteristic, decode) => async function* (link) {
|
|
145
178
|
for await (const frame of link.subscribe(sigUuid(service), sigUuid(characteristic))) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["MeasurementTypeKey","BloodPressureStates","sigUuid","dateTimeAt","decodeFrame","floatAt","roundTo","sfloatAt","withDefined","
|
|
1
|
+
{"version":3,"names":["MeasurementTypeKey","BloodPressureStates","memorySlotForDeviceUser","KPA_TO_MMHG","rrIntervalMilliseconds","sigUuid","temperatureTypeFromCode","dateTimeAt","decodeFrame","floatAt","roundTo","sfloatAt","withDefined","KG_PER_SI_COUNT","KG_PER_IMPERIAL_COUNT","WEIGHT_UNSUCCESSFUL","DATE_TIME_BYTES","BP_KPA","BP_TIMESTAMP","BP_PULSE","BP_USER","BP_STATUS","BP_BODY_MOVEMENT","BP_LOOSE_CUFF","BP_IRREGULAR_PULSE","TEMPERATURE_FAHRENHEIT","TEMPERATURE_TIMESTAMP","TEMPERATURE_TYPE","TEMPERATURE_TIMESTAMP_OFFSET","WEIGHT_IMPERIAL","WEIGHT_TIMESTAMP","WEIGHT_USER","WEIGHT_TIMESTAMP_OFFSET","PLX_TIMESTAMP","HEART_RATE_UINT16","HEART_RATE_CONTACT_BITS","HEART_RATE_NO_CONTACT","HEART_RATE_ENERGY_EXPENDED","HEART_RATE_RR_INTERVALS","UINT8_BYTES","UINT16_BYTES","bloodPressureStatus","status","DISTURB_DETECTED","LOOSE_SLEEVE","REGULAR","bloodPressureExtras","view","flags","offset","extras","recordedAt","heartRate","memorySlot","getUint8","getUint16","irregularHeartbeat","undefined","bloodPressure","pressure","value","systolic","diastolic","mean","map","reading","measurementTypeKey","meanArterialPressure","temperature","hasTimestamp","Boolean","typeOffset","bodyTemp","temperatureType","bodyWeight","counts","userOffset","pulseOximetry","bloodOxygen","pulseRate","bloodOxygenPulseRate","rrIntervalsFrom","Array","from","length","Math","floor","byteLength","_","index","hasUint16","rrOffset","rrIntervals","subscribed","service","characteristic","decode","link","frame","subscribe","SIG_PROTOCOLS","Map"],"sourceRoot":"../../../../../src","sources":["modules/next/bluetooth/sig-profiles.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const padded = (value, digits = 2) => String(value).padStart(digits, "0");
|
|
4
|
+
|
|
5
|
+
/** The date as a clock on the wall reads it, which a device's stored record keeps in every time zone. */
|
|
6
|
+
const wallClock = date => `${date.getFullYear()}-${padded(date.getMonth() + 1)}-${padded(date.getDate())}T${padded(date.getHours())}:${padded(date.getMinutes())}:${padded(date.getSeconds())}.${padded(date.getMilliseconds(), 3)}`;
|
|
7
|
+
const instant = date => date.toISOString();
|
|
8
|
+
const canonicalize = (value, formatDate) => {
|
|
4
9
|
if (value instanceof Date) {
|
|
5
|
-
return value
|
|
10
|
+
return formatDate(value);
|
|
6
11
|
}
|
|
7
12
|
if (Array.isArray(value)) {
|
|
8
|
-
return value.map(canonicalize);
|
|
13
|
+
return value.map(item => canonicalize(item, formatDate));
|
|
9
14
|
}
|
|
10
15
|
if (value && typeof value === "object") {
|
|
11
|
-
return Object.fromEntries(Object.entries(value).sort(([left], [right]) => left.localeCompare(right)).map(([key, nested]) => [key, canonicalize(nested)]));
|
|
16
|
+
return Object.fromEntries(Object.entries(value).sort(([left], [right]) => left.localeCompare(right)).map(([key, nested]) => [key, canonicalize(nested, formatDate)]));
|
|
12
17
|
}
|
|
13
18
|
return value;
|
|
14
19
|
};
|
|
@@ -23,6 +28,10 @@ const hash = value => {
|
|
|
23
28
|
return `${(first >>> 0).toString(16).padStart(8, "0")}${(second >>> 0).toString(16).padStart(8, "0")}`;
|
|
24
29
|
};
|
|
25
30
|
|
|
26
|
-
/** A short hash of `value` that ignores key order
|
|
27
|
-
|
|
31
|
+
/** A short hash of `value` that ignores key order, is the same on every run and reads dates by their wall clock. */
|
|
32
|
+
const stableHash = value => hash(JSON.stringify(canonicalize(value, wallClock)));
|
|
33
|
+
|
|
34
|
+
/** `stableHash` as SDKs before 1.16.1 computed it, reading dates as instants; for finding what they saved. */
|
|
35
|
+
const instantStableHash = value => hash(JSON.stringify(canonicalize(value, instant)));
|
|
36
|
+
export { instantStableHash, stableHash };
|
|
28
37
|
//# sourceMappingURL=stable-hash.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["padded","value","digits","String","padStart","wallClock","date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","instant","toISOString","canonicalize","formatDate","Date","Array","isArray","map","item","Object","fromEntries","entries","sort","left","right","localeCompare","key","nested","hash","first","second","index","length","code","charCodeAt","Math","imul","toString","stableHash","JSON","stringify","instantStableHash"],"sourceRoot":"../../../../../src","sources":["modules/next/bluetooth/stable-hash.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-managed-device.d.ts
CHANGED
|
@@ -30,6 +30,8 @@ export declare abstract class BTManagedDevice<T extends DeviceKey = IntegratedDe
|
|
|
30
30
|
private dataProcessor;
|
|
31
31
|
private readonly oneReadingPerConnection;
|
|
32
32
|
private readonly resultPolicy;
|
|
33
|
+
/** A policy that picks how results are delivered replaces `oneReadingPerConnection`; a user filter does not. */
|
|
34
|
+
private readonly policyPicksDelivery;
|
|
33
35
|
private resultReportedThisConnection;
|
|
34
36
|
private historyTransferActive;
|
|
35
37
|
private bondedEventReported;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bt-managed-device.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/bt-management/services/devices/bt-managed-device.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AASxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AAC3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAEjF,OAAO,EAAsB,YAAY,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"bt-managed-device.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/bt-management/services/devices/bt-managed-device.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standard-gatt.blood-pressure-status.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/modules/bt-management/services/devices/standard-gatt/standard-gatt.blood-pressure-status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"standard-gatt.blood-pressure-status.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/modules/bt-management/services/devices/standard-gatt/standard-gatt.blood-pressure-status.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,4BAA4B,GAChC,OAAO,SAAS,MAAM,EAAE,EACxB,qBAAgB,KACf,MAAM,GAAG,SA2BX,CAAC;AAEF,OAAO,EAAE,4BAA4B,EAAE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CustomReadingDecorator } from "../../../types/custom-device-definition";
|
|
2
|
+
/** Temperature Measurement 0x2A1C: the device's own timestamp and where on the body it measured. */
|
|
3
|
+
declare const decorateThermometerReading: CustomReadingDecorator;
|
|
4
|
+
/** Weight Measurement 0x2A9D: withholds an unsuccessful weight, adds the timestamp and the device user. */
|
|
5
|
+
declare const decorateWeightReading: CustomReadingDecorator;
|
|
6
|
+
/** PLX Spot-Check Measurement 0x2A5E: the device's own timestamp. */
|
|
7
|
+
declare const decoratePulseOximeterReading: CustomReadingDecorator;
|
|
8
|
+
/** Heart Rate Measurement 0x2A37: the RR intervals, when the strap sends them. */
|
|
9
|
+
declare const decorateHeartRateReading: CustomReadingDecorator;
|
|
10
|
+
export { decorateHeartRateReading, decoratePulseOximeterReading, decorateThermometerReading, decorateWeightReading, };
|
|
11
|
+
//# sourceMappingURL=standard-gatt.decorators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standard-gatt.decorators.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/modules/bt-management/services/devices/standard-gatt/standard-gatt.decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAoDjF,oGAAoG;AACpG,QAAA,MAAM,0BAA0B,EAAE,sBA4BjC,CAAC;AAEF,2GAA2G;AAC3G,QAAA,MAAM,qBAAqB,EAAE,sBA+B5B,CAAC;AAEF,qEAAqE;AACrE,QAAA,MAAM,4BAA4B,EAAE,sBAcnC,CAAC;AA0BF,kFAAkF;AAClF,QAAA,MAAM,wBAAwB,EAAE,sBAc/B,CAAC;AAEF,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,0BAA0B,EAC1B,qBAAqB,GACtB,CAAC"}
|
|
@@ -9,20 +9,23 @@ declare const standardThermometerDevice: (params: StandardDeviceParams) => Custo
|
|
|
9
9
|
* Weight Scale Service 0x181D, Weight Measurement 0x2A9D.
|
|
10
10
|
*
|
|
11
11
|
* The reading is a scaled integer rather than a float, so the resolution is applied here.
|
|
12
|
+
* A weight of 0xFFFF means the measurement failed, so it yields no reading.
|
|
12
13
|
*/
|
|
13
14
|
declare const standardWeightScaleDevice: (params: StandardDeviceParams) => CustomDeviceDefinition;
|
|
14
15
|
/**
|
|
15
16
|
* Pulse Oximeter Service 0x1822, PLX Spot-Check Measurement 0x2A5E.
|
|
16
17
|
*
|
|
17
18
|
* Saturation and pulse rate are both required by the catalog, which matches the
|
|
18
|
-
* specification: a spot-check measurement always carries both
|
|
19
|
+
* specification: a spot-check measurement always carries both, at bytes 1-4 whatever the
|
|
20
|
+
* flags say, so every flags value selects the same fields. The optional ones follow them.
|
|
19
21
|
*/
|
|
20
22
|
declare const standardPulseOximeterDevice: (params: StandardDeviceParams) => CustomDeviceDefinition;
|
|
21
23
|
/**
|
|
22
24
|
* Heart Rate Service 0x180D, Heart Rate Measurement 0x2A37.
|
|
23
25
|
*
|
|
24
26
|
* Both heart-rate layouts are declared. A contact-not-detected frame is idle, so it cannot
|
|
25
|
-
* become a false reading while the strap is off the body.
|
|
27
|
+
* become a false reading while the strap is off the body. RR intervals, a list of any
|
|
28
|
+
* length, are read from the frame by the decorator and reported as `rrIntervals`.
|
|
26
29
|
*/
|
|
27
30
|
declare const standardHeartRateDevice: (params: StandardDeviceParams) => CustomDeviceDefinition;
|
|
28
31
|
export { standardBloodPressureDevice, standardGlucoseDevice, standardHeartRateDevice, standardPulseOximeterDevice, standardThermometerDevice, standardWeightScaleDevice, };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standard-gatt.devices.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"standard-gatt.devices.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAWjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAIL,oBAAoB,EACrB,MAAM,yBAAyB,CAAC;AA+DjC,8DAA8D;AAC9D,QAAA,MAAM,2BAA2B,GAC/B,QAAQ,oBAAoB,KAC3B,sBA6BC,CAAC;AAEL,yEAAyE;AACzE,QAAA,MAAM,yBAAyB,GAC7B,QAAQ,oBAAoB,KAC3B,sBA6CC,CAAC;AAKL;;;;;GAKG;AACH,QAAA,MAAM,yBAAyB,GAC7B,QAAQ,oBAAoB,KAC3B,sBAiCC,CAAC;AAEL;;;;;;GAMG;AACH,QAAA,MAAM,2BAA2B,GAC/B,QAAQ,oBAAoB,KAC3B,sBAYC,CAAC;AAYL;;;;;;GAMG;AACH,QAAA,MAAM,uBAAuB,GAC3B,QAAQ,oBAAoB,KAC3B,sBA+BC,CAAC;AAEL,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACrB,uBAAuB,EACvB,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,GAC1B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** The Bluetooth SIG Date Time characteristic is seven bytes long. */
|
|
2
|
+
declare const DATE_TIME_BYTES = 7;
|
|
3
|
+
/** The byte at `index` of a record that starts at `offset`; undefined when the frame ends first. */
|
|
4
|
+
declare const byteAt: (frame: readonly string[], index: number, offset: number) => number | undefined;
|
|
5
|
+
/** Reads a SIG Date Time at `index` as a phone-local date; undefined for missing or impossible fields. */
|
|
6
|
+
declare const dateTimeAt: (frame: readonly string[], index: number, offset?: number) => Date | undefined;
|
|
7
|
+
/** `reading` plus each of `metadata` that has a value. */
|
|
8
|
+
declare const withDefinedMetadata: <T extends object>(reading: T, metadata: Readonly<Record<string, unknown>>) => T;
|
|
9
|
+
export { byteAt, DATE_TIME_BYTES, dateTimeAt, withDefinedMetadata };
|
|
10
|
+
//# sourceMappingURL=standard-gatt.frame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standard-gatt.frame.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/modules/bt-management/services/devices/standard-gatt/standard-gatt.frame.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,QAAA,MAAM,eAAe,IAAI,CAAC;AAE1B,oGAAoG;AACpG,QAAA,MAAM,MAAM,GACV,OAAO,SAAS,MAAM,EAAE,EACxB,OAAO,MAAM,EACb,QAAQ,MAAM,KACb,MAAM,GAAG,SAMX,CAAC;AAEF,0GAA0G;AAC1G,QAAA,MAAM,UAAU,GACd,OAAO,SAAS,MAAM,EAAE,EACxB,OAAO,MAAM,EACb,eAAU,KACT,IAAI,GAAG,SAgCT,CAAC;AAEF,0DAA0D;AAC1D,QAAA,MAAM,mBAAmB,GAAI,CAAC,SAAS,MAAM,EAC3C,SAAS,CAAC,EACV,UAAU,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KAC1C,CAKD,CAAC;AAEH,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -20,6 +20,8 @@ interface ProfileSpec {
|
|
|
20
20
|
/** Shortest frame the profile guarantees, which bounds every field a case may read. */
|
|
21
21
|
minLengthBytes: number;
|
|
22
22
|
measurementTypeKey: MeasurementTypeKey;
|
|
23
|
+
/** Adds what the declared fields cannot carry, such as the timestamp or the device user; runs before the caller's. */
|
|
24
|
+
decorateReading?: CustomReadingDecorator;
|
|
23
25
|
/** Flags-byte values whose layout matches `fields`, in canonical units. */
|
|
24
26
|
selectors: readonly string[];
|
|
25
27
|
/** Per-flag field variants, used when the profile reports a convertible unit. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standard-gatt.profile.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrD,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACvB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"standard-gatt.profile.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrD,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACvB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAKnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAMrF,UAAU,oBAAoB;IAE5B,qFAAqF;IACrF,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE5B,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,oEAAoE;IACpE,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC,iFAAiF;IACjF,eAAe,CAAC,EAAE,sBAAsB,CAAC;CAC1C;AAED,UAAU,WAAW;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IAEvB,uFAAuF;IACvF,cAAc,EAAE,MAAM,CAAC;IAEvB,kBAAkB,EAAE,kBAAkB,CAAC;IAEvC,sHAAsH;IACtH,eAAe,CAAC,EAAE,sBAAsB,CAAC;IAEzC,2EAA2E;IAC3E,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAE7B,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC,CAAC,CAAC;IAExE,6FAA6F;IAC7F,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IAEnC;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,QAAQ,CACvB,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,eAAe,EAAE,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC,CACtE,CAAC;CACH;AAkBD;;;;;GAKG;AACH,QAAA,MAAM,cAAc,GAClB,QAAQ,oBAAoB,EAC5B,SAAS,WAAW,KACnB,sBA2CA,CAAC;AAEJ,QAAA,MAAM,YAAY,GAChB,MAAM,MAAM,EACZ,aAAa,MAAM,EAAE,EACrB,MAAM,MAAM,EACZ,UAAU,eAAe,CAAC,UAAU,CAAC,KACpC,eAMD,CAAC;AAEH,oEAAoE;AACpE,QAAA,MAAM,gCAAgC,GACpC,OAAO,SAAS,MAAM,EAAE,EACxB,eAAU,KACT,IAAI,GAAG,SAMT,CAAC;AAEF,QAAA,MAAM,4BAA4B,EAAE,sBA4DnC,CAAC;AAEF,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,EAC5B,cAAc,EACd,YAAY,EACZ,gCAAgC,GACjC,CAAC;AACF,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -11,6 +11,8 @@ type ResultCallbackData<T extends DeviceKey> = OmitCaseType<MeasurementTypeForDe
|
|
|
11
11
|
interface ResultCallback<T extends DeviceKey> {
|
|
12
12
|
/** Stable identity derived from the peripheral and recorded reading. */
|
|
13
13
|
id: string;
|
|
14
|
+
/** The id SDKs before 1.16.1 gave this reading, to recognise one they already saved. */
|
|
15
|
+
legacyId?: string;
|
|
14
16
|
/** Device that produced the result. */
|
|
15
17
|
deviceData: DeviceData;
|
|
16
18
|
/** The measurement. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result-callback.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/bt-management/types/result-callback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,GAClD,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,GACnB,KAAK,CAAC;AAEV,uEAAuE;AACvE,KAAK,kBAAkB,CAAC,CAAC,SAAS,SAAS,IAAI,YAAY,CACzD,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAC/B,CAAC;AAEF,+CAA+C;AAC/C,UAAU,cAAc,CAAC,CAAC,SAAS,SAAS;IAE1C,wEAAwE;IACxE,EAAE,EAAE,MAAM,CAAC;IAEX,uCAAuC;IACvC,UAAU,EAAE,UAAU,CAAC;IAEvB,uBAAuB;IACvB,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAE5B;;;OAGG;IACH,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAE3B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"result-callback.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/bt-management/types/result-callback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,GAClD,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,GACnB,KAAK,CAAC;AAEV,uEAAuE;AACvE,KAAK,kBAAkB,CAAC,CAAC,SAAS,SAAS,IAAI,YAAY,CACzD,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAC/B,CAAC;AAEF,+CAA+C;AAC/C,UAAU,cAAc,CAAC,CAAC,SAAS,SAAS;IAE1C,wEAAwE;IACxE,EAAE,EAAE,MAAM,CAAC;IAEX,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,uCAAuC;IACvC,UAAU,EAAE,UAAU,CAAC;IAEvB,uBAAuB;IACvB,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAE5B;;;OAGG;IACH,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAE3B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -14,5 +14,11 @@ export interface DeviceResultPolicy {
|
|
|
14
14
|
default?: ResultPolicy;
|
|
15
15
|
/** Policy overrides per measurement type. */
|
|
16
16
|
byMeasurement?: ResultPolicyByMeasurement;
|
|
17
|
+
/**
|
|
18
|
+
* The device users whose readings are reported, by memory slot (a multi-user device reports its user as
|
|
19
|
+
* `memorySlot`, starting at 1). Readings of other users are dropped; a reading that names no device user is kept.
|
|
20
|
+
* Without it every user's readings are reported.
|
|
21
|
+
*/
|
|
22
|
+
acceptedMemorySlots?: readonly number[];
|
|
17
23
|
}
|
|
18
24
|
//# sourceMappingURL=result-policy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result-policy.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/bt-management/types/result-policy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,6DAA6D;AAC7D,MAAM,MAAM,YAAY,GACpB,KAAK,GACL,mBAAmB,GACnB,uCAAuC;AAEzC;;;GAGG;GACD,QAAQ,CAAC;AAEb,0CAA0C;AAC1C,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAC7C,MAAM,CAAC,kBAAkB,EAAE,YAAY,CAAC,CACzC,CAAC;AAEF,mCAAmC;AACnC,MAAM,WAAW,kBAAkB;IAEjC,4DAA4D;IAC5D,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,6CAA6C;IAC7C,aAAa,CAAC,EAAE,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"result-policy.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/bt-management/types/result-policy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,6DAA6D;AAC7D,MAAM,MAAM,YAAY,GACpB,KAAK,GACL,mBAAmB,GACnB,uCAAuC;AAEzC;;;GAGG;GACD,QAAQ,CAAC;AAEb,0CAA0C;AAC1C,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAC7C,MAAM,CAAC,kBAAkB,EAAE,YAAY,CAAC,CACzC,CAAC;AAEF,mCAAmC;AACnC,MAAM,WAAW,kBAAkB;IAEjC,4DAA4D;IAC5D,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,6CAA6C;IAC7C,aAAa,CAAC,EAAE,yBAAyB,CAAC;IAE1C;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** The memory slot of a SIG device user: users count from 0, slots from 1; the unknown user has none. */
|
|
2
|
+
declare const memorySlotForDeviceUser: (userId: number) => number | undefined;
|
|
3
|
+
/** Whether a reading is from one of the device users `slots`; a reading that names no device user is kept. */
|
|
4
|
+
declare const isFromAcceptedMemorySlot: (reading: object, slots: readonly number[]) => boolean;
|
|
5
|
+
export { isFromAcceptedMemorySlot, memorySlotForDeviceUser };
|
|
6
|
+
//# sourceMappingURL=device-user.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-user.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/bt-management/utils/device-user.ts"],"names":[],"mappings":"AAGA,yGAAyG;AACzG,QAAA,MAAM,uBAAuB,GAAI,QAAQ,MAAM,KAAG,MAAM,GAAG,SACF,CAAC;AAE1D,8GAA8G;AAC9G,QAAA,MAAM,wBAAwB,GAC5B,SAAS,MAAM,EACf,OAAO,SAAS,MAAM,EAAE,KACvB,OAIF,CAAC;AAEF,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kpa-to-mmhg.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/bt-management/utils/kpa-to-mmhg.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,QAAA,MAAM,WAAW,UAAU,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { Measurement } from "@ovok/core/next";
|
|
2
2
|
import { DeviceData } from "../types/device-data";
|
|
3
3
|
/**
|
|
4
|
-
* Creates an identity that is stable when a device sends its stored history again.
|
|
5
|
-
*
|
|
6
|
-
* delivery metadata is deliberately not part of the key.
|
|
4
|
+
* Creates an identity that is stable when a device sends its stored history again, in any time zone. A reading
|
|
5
|
+
* without a time of its own is a new measurement each time, so it is told apart by when it arrived.
|
|
7
6
|
*/
|
|
8
|
-
export declare const createStableResultId: (deviceData: DeviceData, data: Measurement) => string;
|
|
7
|
+
export declare const createStableResultId: (deviceData: DeviceData, data: Measurement, receivedAt?: Date) => string;
|
|
8
|
+
/** The id SDKs before 1.16.1 gave the same reading, to find what they saved. */
|
|
9
|
+
export declare const createLegacyResultId: (deviceData: DeviceData, data: Measurement) => string;
|
|
9
10
|
/** Converts the ISO date strings of `recordedAt`, `start` and `end` fields back to `Date`s, recursively. */
|
|
10
11
|
export declare const reviveResultDates: <T>(value: T) => T;
|
|
11
12
|
//# sourceMappingURL=result-identity.d.ts.map
|