@ovok/native 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/modules/bt-management/components/bt-provider-child-wrapper.js +67 -7
- package/lib/commonjs/modules/bt-management/components/bt-provider-child-wrapper.js.map +1 -1
- package/lib/commonjs/modules/bt-management/index.js +22 -0
- package/lib/commonjs/modules/bt-management/index.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/background-sync/background-ble-manager.js +27 -0
- package/lib/commonjs/modules/bt-management/services/background-sync/background-ble-manager.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/background-sync/background-service-uuids.js +31 -0
- package/lib/commonjs/modules/bt-management/services/background-sync/background-service-uuids.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/background-sync/background-sync-coordinator.js +98 -0
- package/lib/commonjs/modules/bt-management/services/background-sync/background-sync-coordinator.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/bt-manager.js +19 -4
- package/lib/commonjs/modules/bt-management/services/bt-manager.js.map +1 -1
- package/lib/commonjs/modules/bt-management/types/background-sync.js +6 -0
- package/lib/commonjs/modules/bt-management/types/background-sync.js.map +1 -0
- package/lib/module/modules/bt-management/components/bt-provider-child-wrapper.js +67 -7
- package/lib/module/modules/bt-management/components/bt-provider-child-wrapper.js.map +1 -1
- package/lib/module/modules/bt-management/index.js +2 -0
- package/lib/module/modules/bt-management/index.js.map +1 -1
- package/lib/module/modules/bt-management/services/background-sync/background-ble-manager.js +22 -0
- package/lib/module/modules/bt-management/services/background-sync/background-ble-manager.js.map +1 -0
- package/lib/module/modules/bt-management/services/background-sync/background-service-uuids.js +26 -0
- package/lib/module/modules/bt-management/services/background-sync/background-service-uuids.js.map +1 -0
- package/lib/module/modules/bt-management/services/background-sync/background-sync-coordinator.js +94 -0
- package/lib/module/modules/bt-management/services/background-sync/background-sync-coordinator.js.map +1 -0
- package/lib/module/modules/bt-management/services/bt-manager.js +19 -4
- package/lib/module/modules/bt-management/services/bt-manager.js.map +1 -1
- package/lib/module/modules/bt-management/types/background-sync.js +4 -0
- package/lib/module/modules/bt-management/types/background-sync.js.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/components/bt-provider-child-wrapper.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/index.d.ts +2 -0
- package/lib/typescript/commonjs/src/modules/bt-management/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/background-sync/background-ble-manager.d.ts +13 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/background-sync/background-ble-manager.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/background-sync/background-service-uuids.d.ts +3 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/background-sync/background-service-uuids.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/background-sync/background-sync-coordinator.d.ts +25 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/background-sync/background-sync-coordinator.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/bt-manager.d.ts +8 -2
- package/lib/typescript/commonjs/src/modules/bt-management/services/bt-manager.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/types/background-sync.d.ts +32 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/background-sync.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/btprovider-children-props.d.ts +2 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/btprovider-children-props.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/components/bt-provider-child-wrapper.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/index.d.ts +2 -0
- package/lib/typescript/module/src/modules/bt-management/index.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/background-sync/background-ble-manager.d.ts +13 -0
- package/lib/typescript/module/src/modules/bt-management/services/background-sync/background-ble-manager.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/background-sync/background-service-uuids.d.ts +3 -0
- package/lib/typescript/module/src/modules/bt-management/services/background-sync/background-service-uuids.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/background-sync/background-sync-coordinator.d.ts +25 -0
- package/lib/typescript/module/src/modules/bt-management/services/background-sync/background-sync-coordinator.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/bt-manager.d.ts +8 -2
- package/lib/typescript/module/src/modules/bt-management/services/bt-manager.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/types/background-sync.d.ts +32 -0
- package/lib/typescript/module/src/modules/bt-management/types/background-sync.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/types/btprovider-children-props.d.ts +2 -0
- package/lib/typescript/module/src/modules/bt-management/types/btprovider-children-props.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -4,6 +4,9 @@ import * as React from "react";
|
|
|
4
4
|
import { AppState } from "react-native";
|
|
5
5
|
import { useDeviceList } from "../../bt-device/components/hooks/use-device-list.js";
|
|
6
6
|
import { sentryLogger } from "../../helpers/utils/sentry-logger.js";
|
|
7
|
+
import { getRestoredBleState } from "../services/background-sync/background-ble-manager.js";
|
|
8
|
+
import { getBackgroundServiceUUIDs } from "../services/background-sync/background-service-uuids.js";
|
|
9
|
+
import { BackgroundSyncCoordinator } from "../services/background-sync/background-sync-coordinator.js";
|
|
7
10
|
import { BTManager } from "../services/bt-manager.js";
|
|
8
11
|
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
9
12
|
export const BTProviderChildWrapper = /*#__PURE__*/React.memo(({
|
|
@@ -13,25 +16,49 @@ export const BTProviderChildWrapper = /*#__PURE__*/React.memo(({
|
|
|
13
16
|
onDeviceFound,
|
|
14
17
|
onError,
|
|
15
18
|
onDeviceStatusChanged,
|
|
16
|
-
onResult
|
|
19
|
+
onResult,
|
|
20
|
+
backgroundSync
|
|
17
21
|
}) => {
|
|
18
22
|
const btManagerRef = React.useRef(null);
|
|
23
|
+
const backgroundSyncRef = React.useRef(backgroundSync);
|
|
24
|
+
const backgroundSyncCoordinatorRef = React.useRef(null);
|
|
19
25
|
const {
|
|
20
26
|
setDeviceListItems
|
|
21
27
|
} = useDeviceList();
|
|
28
|
+
backgroundSyncRef.current = backgroundSync;
|
|
22
29
|
React.useEffect(() => {
|
|
23
30
|
if (!acceptedDevices.length) {
|
|
24
31
|
return;
|
|
25
32
|
}
|
|
26
33
|
sentryLogger("info", "Creating BTManager");
|
|
27
|
-
const
|
|
34
|
+
const currentBackgroundSync = backgroundSyncRef.current;
|
|
35
|
+
const isBackgroundEnabled = currentBackgroundSync?.enabled === true;
|
|
36
|
+
const backgroundOptions = isBackgroundEnabled ? {
|
|
37
|
+
backgroundEnabled: true,
|
|
38
|
+
serviceUUIDs: getBackgroundServiceUUIDs(acceptedDevices, currentBackgroundSync.serviceUUIDs)
|
|
39
|
+
} : undefined;
|
|
40
|
+
const btManager = backgroundOptions ? new BTManager(bleManager, acceptedDevices, backgroundOptions) : new BTManager(bleManager, acceptedDevices);
|
|
41
|
+
const coordinator = isBackgroundEnabled && currentBackgroundSync ? new BackgroundSyncCoordinator({
|
|
42
|
+
...currentBackgroundSync,
|
|
43
|
+
enabled: true,
|
|
44
|
+
onResult: async result => {
|
|
45
|
+
const latest = backgroundSyncRef.current;
|
|
46
|
+
if (!latest?.enabled) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
await latest.onResult(result);
|
|
50
|
+
}
|
|
51
|
+
}) : null;
|
|
28
52
|
btManagerRef.current = btManager;
|
|
53
|
+
backgroundSyncCoordinatorRef.current = coordinator;
|
|
29
54
|
btManager.startScan();
|
|
30
55
|
return () => {
|
|
31
56
|
sentryLogger("info", "Destroying scan service");
|
|
57
|
+
backgroundSyncCoordinatorRef.current = null;
|
|
58
|
+
btManagerRef.current = null;
|
|
32
59
|
btManager.destroy();
|
|
33
60
|
};
|
|
34
|
-
}, [acceptedDevices, bleManager]);
|
|
61
|
+
}, [acceptedDevices, backgroundSync?.enabled, backgroundSync?.maxRetries, backgroundSync?.retryBackoffMs, backgroundSync?.serviceUUIDs, backgroundSync?.storage, backgroundSync?.storageKey, bleManager]);
|
|
35
62
|
React.useEffect(() => {
|
|
36
63
|
if (!onDeviceFound || !acceptedDevices.length) {
|
|
37
64
|
return;
|
|
@@ -51,14 +78,28 @@ export const BTProviderChildWrapper = /*#__PURE__*/React.memo(({
|
|
|
51
78
|
};
|
|
52
79
|
}, [onError, acceptedDevices]);
|
|
53
80
|
React.useEffect(() => {
|
|
54
|
-
if (!
|
|
81
|
+
if (!acceptedDevices.length) {
|
|
55
82
|
return;
|
|
56
83
|
}
|
|
57
|
-
|
|
84
|
+
const callback = backgroundSync?.enabled === true ? data => {
|
|
85
|
+
onResult?.(data);
|
|
86
|
+
const coordinator = backgroundSyncCoordinatorRef.current;
|
|
87
|
+
if (coordinator) {
|
|
88
|
+
void coordinator.enqueue(data).catch(error => {
|
|
89
|
+
onError?.({
|
|
90
|
+
error: error instanceof Error ? error : String(error)
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
} : onResult;
|
|
95
|
+
if (!callback) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
btManagerRef.current?.onResult(callback);
|
|
58
99
|
return () => {
|
|
59
100
|
btManagerRef.current?.onResult(undefined);
|
|
60
101
|
};
|
|
61
|
-
}, [onResult, acceptedDevices]);
|
|
102
|
+
}, [backgroundSync?.enabled, onError, onResult, acceptedDevices]);
|
|
62
103
|
React.useEffect(() => {
|
|
63
104
|
if (!onDeviceStatusChanged || !acceptedDevices.length) {
|
|
64
105
|
return;
|
|
@@ -90,17 +131,36 @@ export const BTProviderChildWrapper = /*#__PURE__*/React.memo(({
|
|
|
90
131
|
btManagerRef.current?.onDeviceStatusChanged(undefined);
|
|
91
132
|
};
|
|
92
133
|
}, [onDeviceStatusChanged, acceptedDevices, setDeviceListItems]);
|
|
134
|
+
React.useEffect(() => {
|
|
135
|
+
if (!acceptedDevices.length || backgroundSync?.enabled !== true) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const restoredState = getRestoredBleState(backgroundSync.restoreStateIdentifier);
|
|
139
|
+
if (restoredState?.connectedPeripherals.length) {
|
|
140
|
+
btManagerRef.current?.restoreDevices(restoredState.connectedPeripherals);
|
|
141
|
+
}
|
|
142
|
+
void backgroundSyncCoordinatorRef.current?.flush().catch(error => {
|
|
143
|
+
onError?.({
|
|
144
|
+
error: error instanceof Error ? error : String(error)
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
}, [acceptedDevices, backgroundSync?.enabled, backgroundSync?.restoreStateIdentifier, onError]);
|
|
93
148
|
React.useEffect(() => {
|
|
94
149
|
const listener = AppState.addEventListener("change", state => {
|
|
95
150
|
if (state !== "active") {
|
|
96
151
|
return;
|
|
97
152
|
}
|
|
98
153
|
btManagerRef.current?.startScan();
|
|
154
|
+
void backgroundSyncCoordinatorRef.current?.flush().catch(error => {
|
|
155
|
+
onError?.({
|
|
156
|
+
error: error instanceof Error ? error : String(error)
|
|
157
|
+
});
|
|
158
|
+
});
|
|
99
159
|
});
|
|
100
160
|
return () => {
|
|
101
161
|
listener.remove();
|
|
102
162
|
};
|
|
103
|
-
}, []);
|
|
163
|
+
}, [onError]);
|
|
104
164
|
return /*#__PURE__*/_jsx(_Fragment, {
|
|
105
165
|
children: children
|
|
106
166
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","AppState","useDeviceList","sentryLogger","BTManager","Fragment","_Fragment","jsx","_jsx","BTProviderChildWrapper","memo","bleManager","acceptedDevices","children","onDeviceFound","onError","onDeviceStatusChanged","onResult","btManagerRef","useRef","setDeviceListItems","useEffect","length","btManager","
|
|
1
|
+
{"version":3,"names":["React","AppState","useDeviceList","sentryLogger","getRestoredBleState","getBackgroundServiceUUIDs","BackgroundSyncCoordinator","BTManager","Fragment","_Fragment","jsx","_jsx","BTProviderChildWrapper","memo","bleManager","acceptedDevices","children","onDeviceFound","onError","onDeviceStatusChanged","onResult","backgroundSync","btManagerRef","useRef","backgroundSyncRef","backgroundSyncCoordinatorRef","setDeviceListItems","current","useEffect","length","currentBackgroundSync","isBackgroundEnabled","enabled","backgroundOptions","backgroundEnabled","serviceUUIDs","undefined","btManager","coordinator","result","latest","startScan","destroy","maxRetries","retryBackoffMs","storage","storageKey","callback","data","enqueue","catch","error","Error","String","status","deviceData","measurementTypeKey","prev","newList","index","findIndex","item","deviceType","name","restoredState","restoreStateIdentifier","connectedPeripherals","restoreDevices","flush","listener","addEventListener","state","remove"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/components/bt-provider-child-wrapper.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -28,12 +28,14 @@ export * from "./types/service.type.js";
|
|
|
28
28
|
export * from "./types/device-status.js";
|
|
29
29
|
export * from "./types/btprovider-props.js";
|
|
30
30
|
export * from "./types/btprovider-children-props.js";
|
|
31
|
+
export * from "./types/background-sync.js";
|
|
31
32
|
export * from "./types/result-callback.js";
|
|
32
33
|
export * from "./types/error-callback.js";
|
|
33
34
|
export * from "./types/device-status-change-callback.js";
|
|
34
35
|
export * from "./services/devices/bt-managed-device.js";
|
|
35
36
|
export * from "./services/devices/custom/custom.device.js";
|
|
36
37
|
export * from "./services/bt-manager.js";
|
|
38
|
+
export * from "./services/background-sync/background-ble-manager.js";
|
|
37
39
|
export * from "./services/custom/define-custom-device.js";
|
|
38
40
|
export * from "./services/devices/standard-gatt/standard-gatt.devices.js";
|
|
39
41
|
export * from "./services/devices/boso/boso.medicus.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"../../../../src","sources":["modules/bt-management/index.ts"],"mappings":";;AAAA,cAAc,gCAA6B;AAC3C,cAAc,4BAAyB;AACvC,cAAc,kCAA+B;AAC7C,cAAc,8BAA2B;AACzC,cAAc,6BAA0B;AACxC,cAAc,6BAA0B;AACxC,cAAc,qCAAkC;AAChD,cAAc,6BAA0B;AACxC,cAAc,+BAA4B;AAC1C,cAAc,kCAA+B;AAC7C,cAAc,8BAA2B;AACzC,cAAc,8BAA2B;AACzC,cAAc,6BAA0B;AACxC,cAAc,+BAA4B;AAC1C,cAAc,gCAA6B;AAC3C,cAAc,gCAA6B;AAC3C,cAAc,8BAA2B;AACzC,cAAc,2BAAwB;AACtC,cAAc,uBAAoB;AAClC,cAAc,0BAAuB;AACrC,cAAc,wBAAqB;AACnC,cAAc,0BAAuB;AACrC,cAAc,+BAA4B;AAC1C,cAAc,6BAA0B;AACxC,cAAc,yBAAsB;AACpC,cAAc,0BAAuB;AACrC,cAAc,6BAA0B;AACxC,cAAc,sCAAmC;AACjD,cAAc,4BAAyB;AACvC,cAAc,2BAAwB;AACtC,cAAc,0CAAuC;AAErD,cAAc,yCAAsC;AACpD,cAAc,4CAAyC;AACvD,cAAc,0BAAuB;AACrC,cAAc,2CAAwC;AACtD,cAAc,2DAAwD;AACtE,cAAc,yCAAsC;AACpD,cAAc,oDAAiD;AAC/D,cAAc,mDAAgD;AAC9D,cAAc,0DAAuD;AACrE,cAAc,kDAA+C;AAC7D,cAAc,mDAAgD;AAC9D,cAAc,4CAAyC;AACvD,cAAc,4CAAyC;AACvD,cAAc,iDAA8C;AAC5D,cAAc,+CAA4C;AAC1D,cAAc,mDAAgD;AAC9D,cAAc,2CAAwC;AACtD,cAAc,8CAA2C;AACzD,cAAc,4CAAyC;AACvD,cAAc,0CAAuC;AACrD,cAAc,6CAA0C;AACxD,cAAc,+CAA4C;AAC1D,cAAc,+CAA4C;AAE1D,cAAc,0CAAuC;AAErD,cAAc,6BAA0B;AACxC,cAAc,6CAA0C;AACxD,cAAc,oCAAiC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../../src","sources":["modules/bt-management/index.ts"],"mappings":";;AAAA,cAAc,gCAA6B;AAC3C,cAAc,4BAAyB;AACvC,cAAc,kCAA+B;AAC7C,cAAc,8BAA2B;AACzC,cAAc,6BAA0B;AACxC,cAAc,6BAA0B;AACxC,cAAc,qCAAkC;AAChD,cAAc,6BAA0B;AACxC,cAAc,+BAA4B;AAC1C,cAAc,kCAA+B;AAC7C,cAAc,8BAA2B;AACzC,cAAc,8BAA2B;AACzC,cAAc,6BAA0B;AACxC,cAAc,+BAA4B;AAC1C,cAAc,gCAA6B;AAC3C,cAAc,gCAA6B;AAC3C,cAAc,8BAA2B;AACzC,cAAc,2BAAwB;AACtC,cAAc,uBAAoB;AAClC,cAAc,0BAAuB;AACrC,cAAc,wBAAqB;AACnC,cAAc,0BAAuB;AACrC,cAAc,+BAA4B;AAC1C,cAAc,6BAA0B;AACxC,cAAc,yBAAsB;AACpC,cAAc,0BAAuB;AACrC,cAAc,6BAA0B;AACxC,cAAc,sCAAmC;AACjD,cAAc,4BAAyB;AACvC,cAAc,4BAAyB;AACvC,cAAc,2BAAwB;AACtC,cAAc,0CAAuC;AAErD,cAAc,yCAAsC;AACpD,cAAc,4CAAyC;AACvD,cAAc,0BAAuB;AACrC,cAAc,sDAAmD;AACjE,cAAc,2CAAwC;AACtD,cAAc,2DAAwD;AACtE,cAAc,yCAAsC;AACpD,cAAc,oDAAiD;AAC/D,cAAc,mDAAgD;AAC9D,cAAc,0DAAuD;AACrE,cAAc,kDAA+C;AAC7D,cAAc,mDAAgD;AAC9D,cAAc,4CAAyC;AACvD,cAAc,4CAAyC;AACvD,cAAc,iDAA8C;AAC5D,cAAc,+CAA4C;AAC1D,cAAc,mDAAgD;AAC9D,cAAc,2CAAwC;AACtD,cAAc,8CAA2C;AACzD,cAAc,4CAAyC;AACvD,cAAc,0CAAuC;AACrD,cAAc,6CAA0C;AACxD,cAAc,+CAA4C;AAC1D,cAAc,+CAA4C;AAE1D,cAAc,0CAAuC;AAErD,cAAc,6BAA0B;AACxC,cAAc,6CAA0C;AACxD,cAAc,oCAAiC","ignoreList":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { BleManager } from "react-native-ble-plx";
|
|
4
|
+
const DEFAULT_RESTORE_STATE_IDENTIFIER = "com.ovok.native.background-sync";
|
|
5
|
+
const restoredStates = new Map();
|
|
6
|
+
/**
|
|
7
|
+
* Creates a BLE manager configured for iOS CoreBluetooth state restoration. The returned
|
|
8
|
+
* manager must be created once at module scope, not inside a React render.
|
|
9
|
+
*/
|
|
10
|
+
const createBackgroundBleManager = ({
|
|
11
|
+
restoreStateIdentifier = DEFAULT_RESTORE_STATE_IDENTIFIER,
|
|
12
|
+
onRestoreState
|
|
13
|
+
} = {}) => new BleManager({
|
|
14
|
+
restoreStateIdentifier,
|
|
15
|
+
restoreStateFunction: state => {
|
|
16
|
+
restoredStates.set(restoreStateIdentifier, state);
|
|
17
|
+
onRestoreState?.(state);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
const getRestoredBleState = (restoreStateIdentifier = DEFAULT_RESTORE_STATE_IDENTIFIER) => restoredStates.get(restoreStateIdentifier);
|
|
21
|
+
export { DEFAULT_RESTORE_STATE_IDENTIFIER, createBackgroundBleManager, getRestoredBleState };
|
|
22
|
+
//# sourceMappingURL=background-ble-manager.js.map
|
package/lib/module/modules/bt-management/services/background-sync/background-ble-manager.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["BleManager","DEFAULT_RESTORE_STATE_IDENTIFIER","restoredStates","Map","createBackgroundBleManager","restoreStateIdentifier","onRestoreState","restoreStateFunction","state","set","getRestoredBleState","get"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/background-sync/background-ble-manager.ts"],"mappings":";;AAAA,SACEA,UAAU,QAGL,sBAAsB;AAE7B,MAAMC,gCAAgC,GACpC,iCAAiC;AAEnC,MAAMC,cAAc,GAAG,IAAIC,GAAG,CAAkC,CAAC;AAOjE;AACA;AACA;AACA;AACA,MAAMC,0BAA0B,GAAGA,CAAC;EAClCC,sBAAsB,GAAGJ,gCAAgC;EACzDK;AAC2B,CAAC,GAAG,CAAC,CAAC,KACjC,IAAIN,UAAU,CAAC;EACbK,sBAAsB;EACtBE,oBAAoB,EAAGC,KAAK,IAAK;IAC/BN,cAAc,CAACO,GAAG,CAACJ,sBAAsB,EAAEG,KAAK,CAAC;IACjDF,cAAc,GAAGE,KAAK,CAAC;EACzB;AACF,CAAC,CAAC;AAEJ,MAAME,mBAAmB,GAAGA,CAC1BL,sBAAsB,GAAGJ,gCAAgC,KAEzDC,cAAc,CAACS,GAAG,CAACN,sBAAsB,CAAC;AAE5C,SAEEJ,gCAAgC,EAChCG,0BAA0B,EAC1BM,mBAAmB","ignoreList":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { IntegratedDevices } from "../../types/integrated-devices.js";
|
|
4
|
+
import { bc01MainServices } from "../devices/bc01/bc01.main-services.js";
|
|
5
|
+
import { bp2MainServices } from "../devices/bp2/bp2.main-services.js";
|
|
6
|
+
import { f4MainServices } from "../devices/f4/f4.main-services.js";
|
|
7
|
+
import { spo2MainServices } from "../devices/spo/spo2.main-services.js";
|
|
8
|
+
const normalize = uuid => uuid.toLowerCase();
|
|
9
|
+
const serviceUUIDs = services => services.map(service => normalize(service.uuid));
|
|
10
|
+
const BUILT_IN_SERVICE_UUIDS = {
|
|
11
|
+
[IntegratedDevices.BP2]: serviceUUIDs(bp2MainServices),
|
|
12
|
+
[IntegratedDevices.F4]: serviceUUIDs(f4MainServices),
|
|
13
|
+
[IntegratedDevices.PC60WF]: serviceUUIDs(spo2MainServices),
|
|
14
|
+
[IntegratedDevices.BC01]: serviceUUIDs(bc01MainServices),
|
|
15
|
+
[IntegratedDevices.VEROVAL_DUO_CONTROL]: ["5d4b8aa6-a26a-4a1b-99f5-cd4473c786e3"],
|
|
16
|
+
[IntegratedDevices.VEROVAL_ECG]: ["0000a000-0000-1000-8000-00805f9b34fb"]
|
|
17
|
+
};
|
|
18
|
+
export const getBackgroundServiceUUIDs = (acceptedDevices, additionalServiceUUIDs = []) => {
|
|
19
|
+
const uuids = new Set(additionalServiceUUIDs.map(normalize));
|
|
20
|
+
acceptedDevices.forEach(acceptedDevice => {
|
|
21
|
+
const deviceUUIDs = typeof acceptedDevice === "string" ? BUILT_IN_SERVICE_UUIDS[acceptedDevice] : serviceUUIDs(acceptedDevice.mainServices);
|
|
22
|
+
deviceUUIDs?.forEach(uuid => uuids.add(normalize(uuid)));
|
|
23
|
+
});
|
|
24
|
+
return [...uuids];
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=background-service-uuids.js.map
|
package/lib/module/modules/bt-management/services/background-sync/background-service-uuids.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["IntegratedDevices","bc01MainServices","bp2MainServices","f4MainServices","spo2MainServices","normalize","uuid","toLowerCase","serviceUUIDs","services","map","service","BUILT_IN_SERVICE_UUIDS","BP2","F4","PC60WF","BC01","VEROVAL_DUO_CONTROL","VEROVAL_ECG","getBackgroundServiceUUIDs","acceptedDevices","additionalServiceUUIDs","uuids","Set","forEach","acceptedDevice","deviceUUIDs","mainServices","add"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/background-sync/background-service-uuids.ts"],"mappings":";;AAEA,SAASA,iBAAiB,QAAQ,mCAAgC;AAElE,SAASC,gBAAgB,QAAQ,uCAAoC;AACrE,SAASC,eAAe,QAAQ,qCAAkC;AAClE,SAASC,cAAc,QAAQ,mCAAgC;AAC/D,SAASC,gBAAgB,QAAQ,sCAAmC;AAEpE,MAAMC,SAAS,GAAIC,IAAY,IAAaA,IAAI,CAACC,WAAW,CAAC,CAAC;AAE9D,MAAMC,YAAY,GAAIC,QAA6B,IACjDA,QAAQ,CAACC,GAAG,CAAEC,OAAO,IAAKN,SAAS,CAACM,OAAO,CAACL,IAAI,CAAC,CAAC;AAEpD,MAAMM,sBAAoE,GAAG;EAC3E,CAACZ,iBAAiB,CAACa,GAAG,GAAGL,YAAY,CAACN,eAAe,CAAC;EACtD,CAACF,iBAAiB,CAACc,EAAE,GAAGN,YAAY,CAACL,cAAc,CAAC;EACpD,CAACH,iBAAiB,CAACe,MAAM,GAAGP,YAAY,CAACJ,gBAAgB,CAAC;EAC1D,CAACJ,iBAAiB,CAACgB,IAAI,GAAGR,YAAY,CAACP,gBAAgB,CAAC;EACxD,CAACD,iBAAiB,CAACiB,mBAAmB,GAAG,CACvC,sCAAsC,CACvC;EACD,CAACjB,iBAAiB,CAACkB,WAAW,GAAG,CAC/B,sCAAsC;AAE1C,CAAC;AAED,OAAO,MAAMC,yBAAyB,GAAGA,CACvCC,eAA0C,EAC1CC,sBAAyC,GAAG,EAAE,KACjC;EACb,MAAMC,KAAK,GAAG,IAAIC,GAAG,CAACF,sBAAsB,CAACX,GAAG,CAACL,SAAS,CAAC,CAAC;EAE5De,eAAe,CAACI,OAAO,CAAEC,cAAc,IAAK;IAC1C,MAAMC,WAAW,GACf,OAAOD,cAAc,KAAK,QAAQ,GAC9Bb,sBAAsB,CAACa,cAAc,CAAC,GACtCjB,YAAY,CAAEiB,cAAc,CAA4BE,YAAY,CAAC;IAE3ED,WAAW,EAAEF,OAAO,CAAElB,IAAI,IAAKgB,KAAK,CAACM,GAAG,CAACvB,SAAS,CAACC,IAAI,CAAC,CAAC,CAAC;EAC5D,CAAC,CAAC;EAEF,OAAO,CAAC,GAAGgB,KAAK,CAAC;AACnB,CAAC","ignoreList":[]}
|
package/lib/module/modules/bt-management/services/background-sync/background-sync-coordinator.js
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const DEFAULT_QUEUE_KEY = "@ovok/native/background-sync/results";
|
|
4
|
+
const DEFAULT_MAX_RETRIES = 3;
|
|
5
|
+
const DEFAULT_RETRY_BACKOFF_MS = 30_000;
|
|
6
|
+
let resultSequence = 0;
|
|
7
|
+
const createResultId = () => {
|
|
8
|
+
resultSequence += 1;
|
|
9
|
+
return `${Date.now()}-${resultSequence}-${Math.random().toString(36).slice(2, 10)}`;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* A small durable, at-least-once queue. The result is written before delivery and removed only
|
|
14
|
+
* after the consumer resolves. A process death between those two operations can deliver a
|
|
15
|
+
* result twice, so consumers should de-duplicate by `id`.
|
|
16
|
+
*/
|
|
17
|
+
class BackgroundSyncCoordinator {
|
|
18
|
+
operation = Promise.resolve();
|
|
19
|
+
constructor(options) {
|
|
20
|
+
this.options = options;
|
|
21
|
+
this.storageKey = options.storageKey ?? DEFAULT_QUEUE_KEY;
|
|
22
|
+
this.maxRetries = Math.max(1, options.maxRetries ?? DEFAULT_MAX_RETRIES);
|
|
23
|
+
this.retryBackoffMs = Math.max(1, options.retryBackoffMs ?? DEFAULT_RETRY_BACKOFF_MS);
|
|
24
|
+
}
|
|
25
|
+
enqueue = result => this.runExclusive(async () => {
|
|
26
|
+
const queue = await this.readQueue();
|
|
27
|
+
queue.push({
|
|
28
|
+
id: createResultId(),
|
|
29
|
+
queuedAt: new Date().toISOString(),
|
|
30
|
+
attempt: 0,
|
|
31
|
+
nextAttemptAt: 0,
|
|
32
|
+
result
|
|
33
|
+
});
|
|
34
|
+
await this.writeQueue(queue);
|
|
35
|
+
await this.flushQueue(queue);
|
|
36
|
+
});
|
|
37
|
+
flush = () => this.runExclusive(async () => {
|
|
38
|
+
await this.flushQueue(await this.readQueue());
|
|
39
|
+
});
|
|
40
|
+
runExclusive = operation => {
|
|
41
|
+
const next = this.operation.then(operation, operation);
|
|
42
|
+
this.operation = next.catch(() => undefined);
|
|
43
|
+
return next;
|
|
44
|
+
};
|
|
45
|
+
readQueue = async () => {
|
|
46
|
+
const serialized = await this.options.storage.getItem(this.storageKey);
|
|
47
|
+
if (!serialized) {
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
const parsed = JSON.parse(serialized);
|
|
52
|
+
if (!Array.isArray(parsed)) {
|
|
53
|
+
throw new Error("Background sync queue is not an array");
|
|
54
|
+
}
|
|
55
|
+
return parsed;
|
|
56
|
+
} catch (error) {
|
|
57
|
+
await this.options.storage.setItem(this.storageKey, "[]");
|
|
58
|
+
throw new Error(`Background sync queue could not be read: ${error instanceof Error ? error.message : String(error)}`);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
writeQueue = async queue => {
|
|
62
|
+
await this.options.storage.setItem(this.storageKey, JSON.stringify(queue));
|
|
63
|
+
};
|
|
64
|
+
flushQueue = async queue => {
|
|
65
|
+
let changed = false;
|
|
66
|
+
const now = Date.now();
|
|
67
|
+
for (const item of [...queue]) {
|
|
68
|
+
if (item.exhausted || item.nextAttemptAt > now) {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const attempt = item.attempt + 1;
|
|
72
|
+
try {
|
|
73
|
+
await this.options.onResult({
|
|
74
|
+
...item.result,
|
|
75
|
+
id: item.id,
|
|
76
|
+
queuedAt: item.queuedAt,
|
|
77
|
+
attempt
|
|
78
|
+
});
|
|
79
|
+
queue.splice(queue.indexOf(item), 1);
|
|
80
|
+
changed = true;
|
|
81
|
+
} catch {
|
|
82
|
+
item.attempt = attempt;
|
|
83
|
+
item.exhausted = attempt >= this.maxRetries;
|
|
84
|
+
item.nextAttemptAt = item.exhausted ? Number.MAX_SAFE_INTEGER : Date.now() + this.retryBackoffMs * 2 ** (attempt - 1);
|
|
85
|
+
changed = true;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (changed) {
|
|
89
|
+
await this.writeQueue(queue);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
export { BackgroundSyncCoordinator, DEFAULT_QUEUE_KEY };
|
|
94
|
+
//# sourceMappingURL=background-sync-coordinator.js.map
|
package/lib/module/modules/bt-management/services/background-sync/background-sync-coordinator.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DEFAULT_QUEUE_KEY","DEFAULT_MAX_RETRIES","DEFAULT_RETRY_BACKOFF_MS","resultSequence","createResultId","Date","now","Math","random","toString","slice","BackgroundSyncCoordinator","operation","Promise","resolve","constructor","options","storageKey","maxRetries","max","retryBackoffMs","enqueue","result","runExclusive","queue","readQueue","push","id","queuedAt","toISOString","attempt","nextAttemptAt","writeQueue","flushQueue","flush","next","then","catch","undefined","serialized","storage","getItem","parsed","JSON","parse","Array","isArray","Error","error","setItem","message","String","stringify","changed","item","exhausted","onResult","splice","indexOf","Number","MAX_SAFE_INTEGER"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/background-sync/background-sync-coordinator.ts"],"mappings":";;AAaA,MAAMA,iBAAiB,GAAG,sCAAsC;AAChE,MAAMC,mBAAmB,GAAG,CAAC;AAC7B,MAAMC,wBAAwB,GAAG,MAAM;AAEvC,IAAIC,cAAc,GAAG,CAAC;AAEtB,MAAMC,cAAc,GAAGA,CAAA,KAAc;EACnCD,cAAc,IAAI,CAAC;EAEnB,OAAO,GAAGE,IAAI,CAACC,GAAG,CAAC,CAAC,IAAIH,cAAc,IAAII,IAAI,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC,CAACC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;AACrF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,MAAMC,yBAAyB,CAAsB;EAI3CC,SAAS,GAAkBC,OAAO,CAACC,OAAO,CAAC,CAAC;EAE7CC,WAAWA,CAAkBC,OAAiC,EAAE;IAAA,KAAnCA,OAAiC,GAAjCA,OAAiC;IACnE,IAAI,CAACC,UAAU,GAAGD,OAAO,CAACC,UAAU,IAAIjB,iBAAiB;IACzD,IAAI,CAACkB,UAAU,GAAGX,IAAI,CAACY,GAAG,CAAC,CAAC,EAAEH,OAAO,CAACE,UAAU,IAAIjB,mBAAmB,CAAC;IACxE,IAAI,CAACmB,cAAc,GAAGb,IAAI,CAACY,GAAG,CAC5B,CAAC,EACDH,OAAO,CAACI,cAAc,IAAIlB,wBAC5B,CAAC;EACH;EAEOmB,OAAO,GAAIC,MAAyB,IACzC,IAAI,CAACC,YAAY,CAAC,YAAY;IAC5B,MAAMC,KAAK,GAAG,MAAM,IAAI,CAACC,SAAS,CAAC,CAAC;IAEpCD,KAAK,CAACE,IAAI,CAAC;MACTC,EAAE,EAAEvB,cAAc,CAAC,CAAC;MACpBwB,QAAQ,EAAE,IAAIvB,IAAI,CAAC,CAAC,CAACwB,WAAW,CAAC,CAAC;MAClCC,OAAO,EAAE,CAAC;MACVC,aAAa,EAAE,CAAC;MAChBT;IACF,CAAC,CAAC;IAEF,MAAM,IAAI,CAACU,UAAU,CAACR,KAAK,CAAC;IAC5B,MAAM,IAAI,CAACS,UAAU,CAACT,KAAK,CAAC;EAC9B,CAAC,CAAC;EAEGU,KAAK,GAAGA,CAAA,KACb,IAAI,CAACX,YAAY,CAAC,YAAY;IAC5B,MAAM,IAAI,CAACU,UAAU,CAAC,MAAM,IAAI,CAACR,SAAS,CAAC,CAAC,CAAC;EAC/C,CAAC,CAAC;EAEIF,YAAY,GAAIX,SAA8B,IAAoB;IACxE,MAAMuB,IAAI,GAAG,IAAI,CAACvB,SAAS,CAACwB,IAAI,CAACxB,SAAS,EAAEA,SAAS,CAAC;IAEtD,IAAI,CAACA,SAAS,GAAGuB,IAAI,CAACE,KAAK,CAAC,MAAMC,SAAS,CAAC;IAE5C,OAAOH,IAAI;EACb,CAAC;EAEOV,SAAS,GAAG,MAAAA,CAAA,KAAoD;IACtE,MAAMc,UAAU,GAAG,MAAM,IAAI,CAACvB,OAAO,CAACwB,OAAO,CAACC,OAAO,CAAC,IAAI,CAACxB,UAAU,CAAC;IAEtE,IAAI,CAACsB,UAAU,EAAE;MACf,OAAO,EAAE;IACX;IAEA,IAAI;MACF,MAAMG,MAAe,GAAGC,IAAI,CAACC,KAAK,CAACL,UAAU,CAAC;MAE9C,IAAI,CAACM,KAAK,CAACC,OAAO,CAACJ,MAAM,CAAC,EAAE;QAC1B,MAAM,IAAIK,KAAK,CAAC,uCAAuC,CAAC;MAC1D;MAEA,OAAOL,MAAM;IACf,CAAC,CAAC,OAAOM,KAAK,EAAE;MACd,MAAM,IAAI,CAAChC,OAAO,CAACwB,OAAO,CAACS,OAAO,CAAC,IAAI,CAAChC,UAAU,EAAE,IAAI,CAAC;MACzD,MAAM,IAAI8B,KAAK,CACb,4CACEC,KAAK,YAAYD,KAAK,GAAGC,KAAK,CAACE,OAAO,GAAGC,MAAM,CAACH,KAAK,CAAC,EAE1D,CAAC;IACH;EACF,CAAC;EAEOhB,UAAU,GAAG,MACnBR,KAAoC,IAClB;IAClB,MAAM,IAAI,CAACR,OAAO,CAACwB,OAAO,CAACS,OAAO,CAAC,IAAI,CAAChC,UAAU,EAAE0B,IAAI,CAACS,SAAS,CAAC5B,KAAK,CAAC,CAAC;EAC5E,CAAC;EAEOS,UAAU,GAAG,MACnBT,KAAoC,IAClB;IAClB,IAAI6B,OAAO,GAAG,KAAK;IACnB,MAAM/C,GAAG,GAAGD,IAAI,CAACC,GAAG,CAAC,CAAC;IAEtB,KAAK,MAAMgD,IAAI,IAAI,CAAC,GAAG9B,KAAK,CAAC,EAAE;MAC7B,IAAI8B,IAAI,CAACC,SAAS,IAAID,IAAI,CAACvB,aAAa,GAAGzB,GAAG,EAAE;QAC9C;MACF;MAEA,MAAMwB,OAAO,GAAGwB,IAAI,CAACxB,OAAO,GAAG,CAAC;MAEhC,IAAI;QACF,MAAM,IAAI,CAACd,OAAO,CAACwC,QAAQ,CAAC;UAC1B,GAAGF,IAAI,CAAChC,MAAM;UACdK,EAAE,EAAE2B,IAAI,CAAC3B,EAAE;UACXC,QAAQ,EAAE0B,IAAI,CAAC1B,QAAQ;UACvBE;QACF,CAA4B,CAAC;QAE7BN,KAAK,CAACiC,MAAM,CAACjC,KAAK,CAACkC,OAAO,CAACJ,IAAI,CAAC,EAAE,CAAC,CAAC;QACpCD,OAAO,GAAG,IAAI;MAChB,CAAC,CAAC,MAAM;QACNC,IAAI,CAACxB,OAAO,GAAGA,OAAO;QACtBwB,IAAI,CAACC,SAAS,GAAGzB,OAAO,IAAI,IAAI,CAACZ,UAAU;QAC3CoC,IAAI,CAACvB,aAAa,GAAGuB,IAAI,CAACC,SAAS,GAC/BI,MAAM,CAACC,gBAAgB,GACvBvD,IAAI,CAACC,GAAG,CAAC,CAAC,GAAG,IAAI,CAACc,cAAc,GAAG,CAAC,KAAKU,OAAO,GAAG,CAAC,CAAC;QACzDuB,OAAO,GAAG,IAAI;MAChB;IACF;IAEA,IAAIA,OAAO,EAAE;MACX,MAAM,IAAI,CAACrB,UAAU,CAACR,KAAK,CAAC;IAC9B;EACF,CAAC;AACH;AAEA,SAASb,yBAAyB,EAAEX,iBAAiB","ignoreList":[]}
|
|
@@ -10,9 +10,10 @@ export class BTManager {
|
|
|
10
10
|
static MAX_DEVICES = 15; // Safety limit to prevent unbounded growth
|
|
11
11
|
devices = new Map();
|
|
12
12
|
eventSubscriptions = [];
|
|
13
|
-
constructor(bleManager, acceptedDevices) {
|
|
13
|
+
constructor(bleManager, acceptedDevices, options = {}) {
|
|
14
14
|
this.bleManager = bleManager;
|
|
15
15
|
this.acceptedDevices = acceptedDevices;
|
|
16
|
+
this.options = options;
|
|
16
17
|
this.deviceCreator = new DeviceCreator(this.acceptedDevices);
|
|
17
18
|
}
|
|
18
19
|
destroy = () => {
|
|
@@ -51,9 +52,20 @@ export class BTManager {
|
|
|
51
52
|
}
|
|
52
53
|
this.stateChangeListener?.remove();
|
|
53
54
|
this.stateChangeListener = undefined;
|
|
54
|
-
this.
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
const serviceUUIDs = this.options.serviceUUIDs ?? [];
|
|
56
|
+
if (Platform.OS === "ios" && this.options.backgroundEnabled && !serviceUUIDs.length) {
|
|
57
|
+
this.onErrorCallback?.({
|
|
58
|
+
error: "Background Bluetooth sync on iOS requires at least one service UUID. Add serviceUUIDs for custom devices."
|
|
59
|
+
});
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
void Promise.resolve(this.bleManager.startDeviceScan(this.options.backgroundEnabled ? [...serviceUUIDs] : null, {
|
|
63
|
+
scanMode: this.options.backgroundEnabled ? ScanMode.LowPower : ScanMode.Balanced
|
|
64
|
+
}, this.onScanResult)).catch(error => {
|
|
65
|
+
this.onErrorCallback?.({
|
|
66
|
+
error: error instanceof Error ? error : String(error)
|
|
67
|
+
});
|
|
68
|
+
});
|
|
57
69
|
sentryLogger("info", "BT_MANAGER: Scan started (continuous mode)");
|
|
58
70
|
return;
|
|
59
71
|
}
|
|
@@ -92,6 +104,9 @@ export class BTManager {
|
|
|
92
104
|
});
|
|
93
105
|
this.devices.clear();
|
|
94
106
|
};
|
|
107
|
+
restoreDevices = devices => {
|
|
108
|
+
devices.forEach(device => this.onScanResult(null, device));
|
|
109
|
+
};
|
|
95
110
|
onDeviceFound = callback => {
|
|
96
111
|
sentryLogger("info", "BT_MANAGER: Setting onDeviceFound callback");
|
|
97
112
|
this.onDeviceFoundCallback = callback;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Linking","Platform","ScanMode","State","slog","sentryLogger","DeviceCreator","BTManager","MAX_DEVICES","devices","Map","eventSubscriptions","constructor","bleManager","acceptedDevices","deviceCreator","destroy","stopScan","stateChangeListener","remove","undefined","onErrorCallback","onDeviceFoundCallback","onResultCallback","onDeviceStatusChangedCallback","forEach","device","clear","startScan","onStateChange","state","PoweredOn","index","indexOf","splice","startDeviceScan","scanMode","Balanced","onScanResult","
|
|
1
|
+
{"version":3,"names":["Linking","Platform","ScanMode","State","slog","sentryLogger","DeviceCreator","BTManager","MAX_DEVICES","devices","Map","eventSubscriptions","constructor","bleManager","acceptedDevices","options","deviceCreator","destroy","stopScan","stateChangeListener","remove","undefined","onErrorCallback","onDeviceFoundCallback","onResultCallback","onDeviceStatusChangedCallback","forEach","device","clear","startScan","onStateChange","state","PoweredOn","index","indexOf","splice","serviceUUIDs","OS","backgroundEnabled","length","error","Promise","resolve","startDeviceScan","scanMode","LowPower","Balanced","onScanResult","catch","Error","String","sendIntent","push","stopDeviceScan","sub","restoreDevices","onDeviceFound","callback","onError","onDeviceStatusChanged","onResult","message","advertisedName","name","trim","localName","has","id","deviceName","getDeviceName","size","deviceId","currentSize","deviceClass","createDevice","bind","onDeviceDisconnected","removeDeviceFromFoundedDevices","set","get","delete"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/services/bt-manager.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../../../src","sources":["modules/bt-management/types/background-sync.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bt-provider-child-wrapper.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/bt-management/components/bt-provider-child-wrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"bt-provider-child-wrapper.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/bt-management/components/bt-provider-child-wrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AAGjF,eAAO,MAAM,sBAAsB,EAsN9B,CAAC,CAAC,SAAS,SAAS,cAAc,EAAE,EACvC,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,KAC3D,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC"}
|
|
@@ -26,12 +26,14 @@ export * from "./types/service.type";
|
|
|
26
26
|
export * from "./types/device-status";
|
|
27
27
|
export * from "./types/btprovider-props";
|
|
28
28
|
export * from "./types/btprovider-children-props";
|
|
29
|
+
export * from "./types/background-sync";
|
|
29
30
|
export * from "./types/result-callback";
|
|
30
31
|
export * from "./types/error-callback";
|
|
31
32
|
export * from "./types/device-status-change-callback";
|
|
32
33
|
export * from "./services/devices/bt-managed-device";
|
|
33
34
|
export * from "./services/devices/custom/custom.device";
|
|
34
35
|
export * from "./services/bt-manager";
|
|
36
|
+
export * from "./services/background-sync/background-ble-manager";
|
|
35
37
|
export * from "./services/custom/define-custom-device";
|
|
36
38
|
export * from "./services/devices/standard-gatt/standard-gatt.devices";
|
|
37
39
|
export * from "./services/devices/boso/boso.medicus";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/modules/bt-management/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mCAAmC,CAAC;AAClD,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uCAAuC,CAAC;AAEtD,cAAc,sCAAsC,CAAC;AACrD,cAAc,yCAAyC,CAAC;AACxD,cAAc,uBAAuB,CAAC;AACtC,cAAc,wCAAwC,CAAC;AACvD,cAAc,wDAAwD,CAAC;AACvE,cAAc,sCAAsC,CAAC;AACrD,cAAc,iDAAiD,CAAC;AAChE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,uDAAuD,CAAC;AACtE,cAAc,+CAA+C,CAAC;AAC9D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AACxD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,wCAAwC,CAAC;AACvD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,yCAAyC,CAAC;AACxD,cAAc,uCAAuC,CAAC;AACtD,cAAc,0CAA0C,CAAC;AACzD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,4CAA4C,CAAC;AAE3D,cAAc,uCAAuC,CAAC;AAEtD,cAAc,0BAA0B,CAAC;AACzC,cAAc,0CAA0C,CAAC;AACzD,cAAc,iCAAiC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/modules/bt-management/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mCAAmC,CAAC;AAClD,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uCAAuC,CAAC;AAEtD,cAAc,sCAAsC,CAAC;AACrD,cAAc,yCAAyC,CAAC;AACxD,cAAc,uBAAuB,CAAC;AACtC,cAAc,mDAAmD,CAAC;AAClE,cAAc,wCAAwC,CAAC;AACvD,cAAc,wDAAwD,CAAC;AACvE,cAAc,sCAAsC,CAAC;AACrD,cAAc,iDAAiD,CAAC;AAChE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,uDAAuD,CAAC;AACtE,cAAc,+CAA+C,CAAC;AAC9D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AACxD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,wCAAwC,CAAC;AACvD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,yCAAyC,CAAC;AACxD,cAAc,uCAAuC,CAAC;AACtD,cAAc,0CAA0C,CAAC;AACzD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,4CAA4C,CAAC;AAE3D,cAAc,uCAAuC,CAAC;AAEtD,cAAc,0BAA0B,CAAC;AACzC,cAAc,0CAA0C,CAAC;AACzD,cAAc,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BleManager, BleManagerOptions, BleRestoredState } from "react-native-ble-plx";
|
|
2
|
+
declare const DEFAULT_RESTORE_STATE_IDENTIFIER = "com.ovok.native.background-sync";
|
|
3
|
+
interface BackgroundBleManagerOptions extends Pick<BleManagerOptions, "restoreStateIdentifier"> {
|
|
4
|
+
onRestoreState?: (state: BleRestoredState | null) => void;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Creates a BLE manager configured for iOS CoreBluetooth state restoration. The returned
|
|
8
|
+
* manager must be created once at module scope, not inside a React render.
|
|
9
|
+
*/
|
|
10
|
+
declare const createBackgroundBleManager: ({ restoreStateIdentifier, onRestoreState, }?: BackgroundBleManagerOptions) => BleManager;
|
|
11
|
+
declare const getRestoredBleState: (restoreStateIdentifier?: string) => BleRestoredState | null | undefined;
|
|
12
|
+
export { BackgroundBleManagerOptions, DEFAULT_RESTORE_STATE_IDENTIFIER, createBackgroundBleManager, getRestoredBleState, };
|
|
13
|
+
//# sourceMappingURL=background-ble-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background-ble-manager.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/bt-management/services/background-sync/background-ble-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAE9B,QAAA,MAAM,gCAAgC,oCACH,CAAC;AAIpC,UAAU,2BACR,SAAQ,IAAI,CAAC,iBAAiB,EAAE,wBAAwB,CAAC;IACzD,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,KAAK,IAAI,CAAC;CAC3D;AAED;;;GAGG;AACH,QAAA,MAAM,0BAA0B,GAAI,8CAGjC,2BAAgC,KAAG,UAOlC,CAAC;AAEL,QAAA,MAAM,mBAAmB,GACvB,+BAAyD,KACxD,gBAAgB,GAAG,IAAI,GAAG,SACe,CAAC;AAE7C,OAAO,EACL,2BAA2B,EAC3B,gCAAgC,EAChC,0BAA0B,EAC1B,mBAAmB,GACpB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background-service-uuids.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/bt-management/services/background-sync/background-service-uuids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AA2B7D,eAAO,MAAM,yBAAyB,GACpC,iBAAiB,SAAS,cAAc,EAAE,EAC1C,yBAAwB,SAAS,MAAM,EAAO,KAC7C,MAAM,EAaR,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { BackgroundSyncOptions } from "../../types/background-sync";
|
|
2
|
+
import { DeviceKey } from "../../types/device-key";
|
|
3
|
+
import { ResultCallback } from "../../types/result-callback";
|
|
4
|
+
declare const DEFAULT_QUEUE_KEY = "@ovok/native/background-sync/results";
|
|
5
|
+
/**
|
|
6
|
+
* A small durable, at-least-once queue. The result is written before delivery and removed only
|
|
7
|
+
* after the consumer resolves. A process death between those two operations can deliver a
|
|
8
|
+
* result twice, so consumers should de-duplicate by `id`.
|
|
9
|
+
*/
|
|
10
|
+
declare class BackgroundSyncCoordinator<T extends DeviceKey> {
|
|
11
|
+
private readonly options;
|
|
12
|
+
private readonly storageKey;
|
|
13
|
+
private readonly maxRetries;
|
|
14
|
+
private readonly retryBackoffMs;
|
|
15
|
+
private operation;
|
|
16
|
+
constructor(options: BackgroundSyncOptions<T>);
|
|
17
|
+
enqueue: (result: ResultCallback<T>) => Promise<void>;
|
|
18
|
+
flush: () => Promise<void>;
|
|
19
|
+
private runExclusive;
|
|
20
|
+
private readQueue;
|
|
21
|
+
private writeQueue;
|
|
22
|
+
private flushQueue;
|
|
23
|
+
}
|
|
24
|
+
export { BackgroundSyncCoordinator, DEFAULT_QUEUE_KEY };
|
|
25
|
+
//# sourceMappingURL=background-sync-coordinator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background-sync-coordinator.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/bt-management/services/background-sync/background-sync-coordinator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAwB,MAAM,6BAA6B,CAAC;AAC1F,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAW7D,QAAA,MAAM,iBAAiB,yCAAyC,CAAC;AAYjE;;;;GAIG;AACH,cAAM,yBAAyB,CAAC,CAAC,SAAS,SAAS;IAM9B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAL3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,SAAS,CAAoC;gBAEjB,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAS9D,OAAO,GAAI,QAAQ,cAAc,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,IAAI,CAAC,CActD;IAEE,KAAK,QAAO,OAAO,CAAC,IAAI,CAAC,CAG3B;IAEL,OAAO,CAAC,YAAY,CAMlB;IAEF,OAAO,CAAC,SAAS,CAuBf;IAEF,OAAO,CAAC,UAAU,CAIhB;IAEF,OAAO,CAAC,UAAU,CAoChB;CACH;AAED,OAAO,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -1,22 +1,28 @@
|
|
|
1
|
-
import { BleManager } from "react-native-ble-plx";
|
|
1
|
+
import { BleManager, Device } from "react-native-ble-plx";
|
|
2
2
|
import { AcceptedDevice } from "../types/accepted-device";
|
|
3
3
|
import { DeviceKeyOf } from "../types/device-key-of";
|
|
4
4
|
import { DeviceStatusChangeCallback } from "../types/device-status-change-callback";
|
|
5
5
|
import { ErrorCallback } from "../types/error-callback";
|
|
6
6
|
import { ResultCallback } from "../types/result-callback";
|
|
7
7
|
import { BTManagedDevice } from "./devices/bt-managed-device";
|
|
8
|
+
export interface BTManagerOptions {
|
|
9
|
+
backgroundEnabled?: boolean;
|
|
10
|
+
serviceUUIDs?: readonly string[];
|
|
11
|
+
}
|
|
8
12
|
export declare class BTManager<T extends readonly AcceptedDevice[]> {
|
|
9
13
|
private readonly bleManager;
|
|
10
14
|
private readonly acceptedDevices;
|
|
15
|
+
private readonly options;
|
|
11
16
|
private static readonly MAX_DEVICES;
|
|
12
17
|
private devices;
|
|
13
18
|
private stateChangeListener;
|
|
14
19
|
private eventSubscriptions;
|
|
15
20
|
private deviceCreator;
|
|
16
|
-
constructor(bleManager: BleManager, acceptedDevices: T);
|
|
21
|
+
constructor(bleManager: BleManager, acceptedDevices: T, options?: BTManagerOptions);
|
|
17
22
|
destroy: () => void;
|
|
18
23
|
startScan: () => void;
|
|
19
24
|
stopScan: () => void;
|
|
25
|
+
restoreDevices: (devices: readonly Device[]) => void;
|
|
20
26
|
onDeviceFound: (callback?: (device: BTManagedDevice<DeviceKeyOf<T>>, manager: BTManager<T>) => Promise<void>) => void;
|
|
21
27
|
onError: (callback?: (data: ErrorCallback) => void) => void;
|
|
22
28
|
onDeviceStatusChanged: (callback?: (data: DeviceStatusChangeCallback) => void) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bt-manager.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/bt-management/services/bt-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,UAAU,
|
|
1
|
+
{"version":3,"file":"bt-manager.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/bt-management/services/bt-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,UAAU,EACV,MAAM,EAIP,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED,qBAAa,SAAS,CAAC,CAAC,SAAS,SAAS,cAAc,EAAE;IAUtD,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAX1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAM;IACzC,OAAO,CAAC,OAAO,CAAsD;IAErE,OAAO,CAAC,mBAAmB,CAA2B;IACtD,OAAO,CAAC,kBAAkB,CAAsB;IAEhD,OAAO,CAAC,aAAa,CAAmB;gBAGrB,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,CAAC,EAClB,OAAO,GAAE,gBAAqB;IAK1C,OAAO,aAuBZ;IAEK,SAAS,aA8Ed;IAEK,QAAQ,aAmBb;IAEK,cAAc,GAAI,SAAS,SAAS,MAAM,EAAE,UAEjD;IAEK,aAAa,GAClB,WAAW,CACT,MAAM,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EACvC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,KAClB,OAAO,CAAC,IAAI,CAAC,UAIlB;IAEK,OAAO,GAAI,WAAW,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,UAGxD;IAEK,qBAAqB,GAC1B,WAAW,CAAC,IAAI,EAAE,0BAA0B,KAAK,IAAI,UAIrD;IAEK,QAAQ,GACb,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,UAIzD;IAGF,OAAO,CAAC,gBAAgB,CAAC,CAAiD;IAC1E,OAAO,CAAC,eAAe,CAAC,CAAgC;IACxD,OAAO,CAAC,qBAAqB,CAAC,CAGX;IACnB,OAAO,CAAC,6BAA6B,CAAC,CAE5B;IAEV,OAAO,CAAC,YAAY,CA+ElB;IAEF,OAAO,CAAC,8BAA8B,CAUpC;CACH"}
|