@glassly/engine 0.1.0-dev.1 → 0.1.0-dev.100
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/README.md +57 -19
- package/build/bluetooth-sdk/debug.d.ts +2 -0
- package/build/bluetooth-sdk/debug.d.ts.map +1 -0
- package/build/bluetooth-sdk/debug.js +2 -0
- package/build/bluetooth-sdk/debug.js.map +1 -0
- package/build/bluetooth-sdk/index.d.ts +3 -0
- package/build/bluetooth-sdk/index.d.ts.map +1 -0
- package/build/bluetooth-sdk/index.js +3 -0
- package/build/bluetooth-sdk/index.js.map +1 -0
- package/build/bluetooth-sdk/ota-transport.d.ts +2 -0
- package/build/bluetooth-sdk/ota-transport.d.ts.map +1 -0
- package/build/bluetooth-sdk/ota-transport.js +2 -0
- package/build/bluetooth-sdk/ota-transport.js.map +1 -0
- package/build/bluetooth-sdk/photo-receiver.d.ts +3 -0
- package/build/bluetooth-sdk/photo-receiver.d.ts.map +1 -0
- package/build/bluetooth-sdk/photo-receiver.js +3 -0
- package/build/bluetooth-sdk/photo-receiver.js.map +1 -0
- package/build/bluetooth-sdk/react.d.ts +2 -0
- package/build/bluetooth-sdk/react.d.ts.map +1 -0
- package/build/bluetooth-sdk/react.js +2 -0
- package/build/bluetooth-sdk/react.js.map +1 -0
- package/build/bluetooth-sdk/types.d.ts +2 -0
- package/build/bluetooth-sdk/types.d.ts.map +1 -0
- package/build/bluetooth-sdk/types.js +2 -0
- package/build/bluetooth-sdk/types.js.map +1 -0
- package/build/engine.d.ts +30 -18
- package/build/engine.d.ts.map +1 -1
- package/build/engine.js +12 -3
- package/build/engine.js.map +1 -1
- package/build/facades/dev.d.ts +1 -1
- package/build/facades/display.d.ts +11 -4
- package/build/facades/display.d.ts.map +1 -1
- package/build/facades/display.js +12 -2
- package/build/facades/display.js.map +1 -1
- package/build/facades/displayMirror.d.ts +2 -6
- package/build/facades/displayMirror.d.ts.map +1 -1
- package/build/facades/displayMirror.js +7 -14
- package/build/facades/displayMirror.js.map +1 -1
- package/build/facades/glasses.d.ts +6 -13
- package/build/facades/glasses.d.ts.map +1 -1
- package/build/facades/glasses.js +7 -3
- package/build/facades/glasses.js.map +1 -1
- package/build/facades/ota.d.ts +21 -21
- package/build/facades/ota.d.ts.map +1 -1
- package/build/facades/ota.js +26 -10
- package/build/facades/ota.js.map +1 -1
- package/build/facades/pairing.d.ts +11 -5
- package/build/facades/pairing.d.ts.map +1 -1
- package/build/facades/pairing.js +93 -17
- package/build/facades/pairing.js.map +1 -1
- package/build/facades/phoneNotifications.d.ts +12 -2
- package/build/facades/phoneNotifications.d.ts.map +1 -1
- package/build/facades/phoneNotifications.js +30 -10
- package/build/facades/phoneNotifications.js.map +1 -1
- package/build/facades/speakers.d.ts +1 -1
- package/build/facades/speakers.d.ts.map +1 -1
- package/build/facades/speakers.js.map +1 -1
- package/build/facades/speech.d.ts +7 -6
- package/build/facades/speech.d.ts.map +1 -1
- package/build/facades/speech.js +1 -1
- package/build/facades/speech.js.map +1 -1
- package/build/generated/releaseMetadata.d.ts +12 -0
- package/build/generated/releaseMetadata.d.ts.map +1 -0
- package/build/generated/releaseMetadata.js +10 -0
- package/build/generated/releaseMetadata.js.map +1 -0
- package/build/index.d.ts +9 -6
- package/build/index.d.ts.map +1 -1
- package/build/index.js +7 -5
- package/build/index.js.map +1 -1
- package/build/react/MentraLiveOtaFlow.d.ts +44 -0
- package/build/react/MentraLiveOtaFlow.d.ts.map +1 -0
- package/build/react/MentraLiveOtaFlow.js +322 -0
- package/build/react/MentraLiveOtaFlow.js.map +1 -0
- package/build/react/index.d.ts +3 -0
- package/build/react/index.d.ts.map +1 -0
- package/build/react/index.js +3 -0
- package/build/react/index.js.map +1 -0
- package/build/react/useEngineSnapshot.d.ts +2 -0
- package/build/react/useEngineSnapshot.d.ts.map +1 -0
- package/build/react/useEngineSnapshot.js +14 -0
- package/build/react/useEngineSnapshot.js.map +1 -0
- package/build/react/useMentraLiveOta.d.ts +84 -0
- package/build/react/useMentraLiveOta.d.ts.map +1 -0
- package/build/react/useMentraLiveOta.js +627 -0
- package/build/react/useMentraLiveOta.js.map +1 -0
- package/build/services/AppRegistry.d.ts +8 -0
- package/build/services/AppRegistry.d.ts.map +1 -1
- package/build/services/AppRegistry.js +15 -0
- package/build/services/AppRegistry.js.map +1 -1
- package/build/services/BlobStore.d.ts +2 -0
- package/build/services/BlobStore.d.ts.map +1 -1
- package/build/services/BlobStore.js +63 -10
- package/build/services/BlobStore.js.map +1 -1
- package/build/services/CustomDashboardModel.d.ts +48 -0
- package/build/services/CustomDashboardModel.d.ts.map +1 -0
- package/build/services/CustomDashboardModel.js +73 -0
- package/build/services/CustomDashboardModel.js.map +1 -0
- package/build/services/CustomDashboardService.d.ts +55 -0
- package/build/services/CustomDashboardService.d.ts.map +1 -0
- package/build/services/CustomDashboardService.js +492 -0
- package/build/services/CustomDashboardService.js.map +1 -0
- package/build/services/DashboardCoordinator.d.ts +26 -0
- package/build/services/DashboardCoordinator.d.ts.map +1 -0
- package/build/services/DashboardCoordinator.js +125 -0
- package/build/services/DashboardCoordinator.js.map +1 -0
- package/build/services/DeviceEventRouter.d.ts.map +1 -1
- package/build/services/DeviceEventRouter.js +45 -6
- package/build/services/DeviceEventRouter.js.map +1 -1
- package/build/services/DisplayProcessor.d.ts +3 -3
- package/build/services/DisplayProcessor.js +3 -3
- package/build/services/DisplayProcessor.js.map +1 -1
- package/build/services/GestureDotsService.d.ts +40 -0
- package/build/services/GestureDotsService.d.ts.map +1 -0
- package/build/services/GestureDotsService.js +167 -0
- package/build/services/GestureDotsService.js.map +1 -0
- package/build/services/GlassesStatusProjection.d.ts +15 -1
- package/build/services/GlassesStatusProjection.d.ts.map +1 -1
- package/build/services/GlassesStatusProjection.js +18 -11
- package/build/services/GlassesStatusProjection.js.map +1 -1
- package/build/services/HotspotOtaTransport.d.ts.map +1 -1
- package/build/services/HotspotOtaTransport.js +8 -7
- package/build/services/HotspotOtaTransport.js.map +1 -1
- package/build/services/LocalDisplayManager.d.ts +55 -3
- package/build/services/LocalDisplayManager.d.ts.map +1 -1
- package/build/services/LocalDisplayManager.js +196 -16
- package/build/services/LocalDisplayManager.js.map +1 -1
- package/build/services/LocalMiniappRuntime.d.ts +13 -0
- package/build/services/LocalMiniappRuntime.d.ts.map +1 -1
- package/build/services/LocalMiniappRuntime.js +32 -0
- package/build/services/LocalMiniappRuntime.js.map +1 -1
- package/build/services/MiniappExitGesture.d.ts +33 -0
- package/build/services/MiniappExitGesture.d.ts.map +1 -0
- package/build/services/MiniappExitGesture.js +54 -0
- package/build/services/MiniappExitGesture.js.map +1 -0
- package/build/services/OtaAutoChain.d.ts +41 -0
- package/build/services/OtaAutoChain.d.ts.map +1 -0
- package/build/services/OtaAutoChain.js +91 -0
- package/build/services/OtaAutoChain.js.map +1 -0
- package/build/services/OtaErrorMapping.d.ts +18 -0
- package/build/services/OtaErrorMapping.d.ts.map +1 -0
- package/build/services/OtaErrorMapping.js +63 -0
- package/build/services/OtaErrorMapping.js.map +1 -0
- package/build/services/OtaInstallCoordinator.d.ts +26 -3
- package/build/services/OtaInstallCoordinator.d.ts.map +1 -1
- package/build/services/OtaInstallCoordinator.js +38 -13
- package/build/services/OtaInstallCoordinator.js.map +1 -1
- package/build/services/OtaService.d.ts.map +1 -1
- package/build/services/OtaService.js +1 -1
- package/build/services/OtaService.js.map +1 -1
- package/build/services/OtaUpdateCheckService.d.ts +4 -1
- package/build/services/OtaUpdateCheckService.d.ts.map +1 -1
- package/build/services/OtaUpdateCheckService.js +28 -16
- package/build/services/OtaUpdateCheckService.js.map +1 -1
- package/build/services/PhoneNotificationsSync.d.ts +13 -0
- package/build/services/PhoneNotificationsSync.d.ts.map +1 -1
- package/build/services/PhoneNotificationsSync.js +101 -9
- package/build/services/PhoneNotificationsSync.js.map +1 -1
- package/build/services/PhonePhotoCoordinator.js +1 -1
- package/build/services/PhonePhotoCoordinator.js.map +1 -1
- package/build/services/PhoneStreamCoordinator.d.ts.map +1 -1
- package/build/services/PhoneStreamCoordinator.js +9 -6
- package/build/services/PhoneStreamCoordinator.js.map +1 -1
- package/build/services/SceneRenderer.d.ts.map +1 -1
- package/build/services/SceneRenderer.js +5 -0
- package/build/services/SceneRenderer.js.map +1 -1
- package/build/services/StreamLifecycleController.d.ts +4 -0
- package/build/services/StreamLifecycleController.d.ts.map +1 -1
- package/build/services/StreamLifecycleController.js +4 -0
- package/build/services/StreamLifecycleController.js.map +1 -1
- package/build/services/asg/localNetworkTransport.d.ts.map +1 -1
- package/build/services/asg/localNetworkTransport.js +13 -12
- package/build/services/asg/localNetworkTransport.js.map +1 -1
- package/build/services/effectiveCapabilities.d.ts +1 -1
- package/build/services/effectiveCapabilities.d.ts.map +1 -1
- package/build/services/effectiveCapabilities.js +26 -7
- package/build/services/effectiveCapabilities.js.map +1 -1
- package/build/services/gestureClaims.d.ts +18 -0
- package/build/services/gestureClaims.d.ts.map +1 -0
- package/build/services/gestureClaims.js +24 -0
- package/build/services/gestureClaims.js.map +1 -0
- package/build/services/gestureDotGlyphs.d.ts +8 -0
- package/build/services/gestureDotGlyphs.d.ts.map +1 -0
- package/build/services/gestureDotGlyphs.js +13 -0
- package/build/services/gestureDotGlyphs.js.map +1 -0
- package/build/services/glassesClockSync.d.ts.map +1 -1
- package/build/services/glassesClockSync.js +5 -1
- package/build/services/glassesClockSync.js.map +1 -1
- package/build/services/iosNotificationAppCatalog.d.ts +13 -0
- package/build/services/iosNotificationAppCatalog.d.ts.map +1 -0
- package/build/services/iosNotificationAppCatalog.js +28 -0
- package/build/services/iosNotificationAppCatalog.js.map +1 -0
- package/build/services/otaDisplayState.d.ts +1 -1
- package/build/services/otaDisplayState.d.ts.map +1 -1
- package/build/services/otaDisplayState.js.map +1 -1
- package/build/services/otaInstallPolicy.d.ts +5 -1
- package/build/services/otaInstallPolicy.d.ts.map +1 -1
- package/build/services/otaInstallPolicy.js +4 -0
- package/build/services/otaInstallPolicy.js.map +1 -1
- package/build/services/otaLegacyMapping.d.ts +1 -1
- package/build/services/otaLegacyMapping.d.ts.map +1 -1
- package/build/services/otaLegacyMapping.js.map +1 -1
- package/build/services/otaManifestPolicy.d.ts +14 -0
- package/build/services/otaManifestPolicy.d.ts.map +1 -0
- package/build/services/otaManifestPolicy.js +20 -0
- package/build/services/otaManifestPolicy.js.map +1 -0
- package/build/services/otaManifestUrl.d.ts +2 -1
- package/build/services/otaManifestUrl.d.ts.map +1 -1
- package/build/services/otaManifestUrl.js +24 -32
- package/build/services/otaManifestUrl.js.map +1 -1
- package/build/services/otaReleaseVersion.d.ts +10 -0
- package/build/services/otaReleaseVersion.d.ts.map +1 -0
- package/build/services/otaReleaseVersion.js +14 -0
- package/build/services/otaReleaseVersion.js.map +1 -0
- package/build/stores/appVisibility.d.ts +3 -0
- package/build/stores/appVisibility.d.ts.map +1 -0
- package/build/stores/appVisibility.js +3 -0
- package/build/stores/appVisibility.js.map +1 -0
- package/build/stores/apps.d.ts.map +1 -1
- package/build/stores/apps.js +7 -1
- package/build/stores/apps.js.map +1 -1
- package/build/stores/core.d.ts +3 -3
- package/build/stores/core.d.ts.map +1 -1
- package/build/stores/core.js.map +1 -1
- package/build/stores/display.d.ts +4 -4
- package/build/stores/display.d.ts.map +1 -1
- package/build/stores/display.js +12 -36
- package/build/stores/display.js.map +1 -1
- package/build/stores/glasses.d.ts +10 -4
- package/build/stores/glasses.d.ts.map +1 -1
- package/build/stores/glasses.js +2 -0
- package/build/stores/glasses.js.map +1 -1
- package/build/stores/settings.d.ts.map +1 -1
- package/build/stores/settings.js +140 -5
- package/build/stores/settings.js.map +1 -1
- package/build/types/applet.d.ts +3 -1
- package/build/types/applet.d.ts.map +1 -1
- package/build/types/applet.js +0 -3
- package/build/types/applet.js.map +1 -1
- package/build/types/capabilities/even-realities-g2.d.ts.map +1 -1
- package/build/types/capabilities/even-realities-g2.js +2 -2
- package/build/types/capabilities/even-realities-g2.js.map +1 -1
- package/build/types/enums.d.ts +1 -5
- package/build/types/enums.d.ts.map +1 -1
- package/build/types/enums.js +1 -8
- package/build/types/enums.js.map +1 -1
- package/build/types/hardware.d.ts +1 -1
- package/build/types/hardware.d.ts.map +1 -1
- package/build/types/hardware.js +1 -0
- package/build/types/hardware.js.map +1 -1
- package/build/types/index.d.ts +3 -7
- package/build/types/index.d.ts.map +1 -1
- package/build/types/index.js +3 -7
- package/build/types/index.js.map +1 -1
- package/build/utils/display/composer/ColumnComposer.d.ts +1 -1
- package/build/utils/display/composer/ColumnComposer.js +1 -1
- package/build/utils/display/composer/ColumnComposer.js.map +1 -1
- package/build/utils/display/scene/process.d.ts.map +1 -1
- package/build/utils/display/scene/process.js +4 -3
- package/build/utils/display/scene/process.js.map +1 -1
- package/build/utils/display/scene/types.d.ts +6 -2
- package/build/utils/display/scene/types.d.ts.map +1 -1
- package/build/utils/display/scene/types.js.map +1 -1
- package/package.json +69 -35
- package/src/bluetooth-sdk/debug.ts +1 -0
- package/src/bluetooth-sdk/index.ts +2 -0
- package/src/bluetooth-sdk/ota-transport.ts +1 -0
- package/src/bluetooth-sdk/photo-receiver.ts +2 -0
- package/src/bluetooth-sdk/react.ts +1 -0
- package/src/bluetooth-sdk/types.ts +1 -0
- package/src/engine.ts +12 -3
- package/src/facades/display.ts +12 -2
- package/src/facades/displayMirror.ts +7 -15
- package/src/facades/glasses.ts +8 -4
- package/src/facades/ota.ts +36 -11
- package/src/facades/pairing.ts +103 -23
- package/src/facades/phoneNotifications.ts +32 -10
- package/src/facades/speakers.ts +1 -1
- package/src/facades/speech.ts +21 -7
- package/src/generated/releaseMetadata.ts +20 -0
- package/src/index.ts +31 -5
- package/src/react/MentraLiveOtaFlow.tsx +754 -0
- package/src/react/index.ts +21 -0
- package/src/react/useEngineSnapshot.ts +16 -0
- package/src/react/useMentraLiveOta.ts +793 -0
- package/src/services/AppRegistry.ts +16 -0
- package/src/services/BlobStore.ts +57 -10
- package/src/services/CustomDashboardModel.ts +83 -0
- package/src/services/CustomDashboardService.ts +516 -0
- package/src/services/DashboardCoordinator.ts +121 -0
- package/src/services/DeviceEventRouter.ts +48 -8
- package/src/services/DisplayProcessor.ts +3 -3
- package/src/services/GestureDotsService.ts +164 -0
- package/src/services/GlassesStatusProjection.ts +20 -11
- package/src/services/HotspotOtaTransport.ts +8 -7
- package/src/services/LocalDisplayManager.ts +198 -18
- package/src/services/LocalMiniappRuntime.ts +37 -0
- package/src/services/MiniappExitGesture.ts +76 -0
- package/src/services/OtaAutoChain.ts +130 -0
- package/src/services/OtaErrorMapping.ts +80 -0
- package/src/services/OtaInstallCoordinator.ts +40 -13
- package/src/services/OtaService.ts +1 -2
- package/src/services/OtaUpdateCheckService.ts +33 -19
- package/src/services/PhoneNotificationsSync.ts +125 -9
- package/src/services/PhonePhotoCoordinator.ts +1 -1
- package/src/services/PhoneStreamCoordinator.ts +10 -6
- package/src/services/SceneRenderer.ts +4 -0
- package/src/services/StreamLifecycleController.ts +4 -0
- package/src/services/asg/localNetworkTransport.ts +20 -19
- package/src/services/effectiveCapabilities.ts +27 -7
- package/src/services/gestureClaims.ts +28 -0
- package/src/services/gestureDotGlyphs.ts +15 -0
- package/src/services/glassesClockSync.ts +5 -1
- package/src/services/iosNotificationAppCatalog.ts +39 -0
- package/src/services/otaDisplayState.ts +1 -1
- package/src/services/otaInstallPolicy.ts +5 -1
- package/src/services/otaLegacyMapping.ts +1 -1
- package/src/services/otaManifestPolicy.ts +43 -0
- package/src/services/otaManifestUrl.ts +27 -36
- package/src/services/otaReleaseVersion.ts +22 -0
- package/src/stores/appVisibility.ts +3 -0
- package/src/stores/apps.ts +7 -1
- package/src/stores/core.ts +4 -4
- package/src/stores/display.ts +16 -48
- package/src/stores/glasses.ts +15 -6
- package/src/stores/settings.ts +140 -5
- package/src/types/applet.ts +3 -1
- package/src/types/capabilities/even-realities-g2.ts +3 -2
- package/src/types/enums.ts +1 -9
- package/src/types/hardware.ts +2 -1
- package/src/types/index.ts +3 -7
- package/src/utils/display/composer/ColumnComposer.ts +1 -1
- package/src/utils/display/scene/process.ts +4 -3
- package/src/utils/display/scene/types.ts +0 -0
- package/build/devtools.d.ts +0 -11
- package/build/devtools.d.ts.map +0 -1
- package/build/devtools.js +0 -13
- package/build/devtools.js.map +0 -1
- package/build/internal.d.ts +0 -67
- package/build/internal.d.ts.map +0 -1
- package/build/internal.js +0 -90
- package/build/internal.js.map +0 -1
- package/src/devtools.ts +0 -13
- package/src/internal.ts +0 -155
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@glassly/engine",
|
|
3
|
-
"version": "0.1.0-dev.
|
|
3
|
+
"version": "0.1.0-dev.100",
|
|
4
4
|
"description": "Glassly Engine — miniapp registry, WebView bridge, and miniapp store",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"react-native": "src/index.ts",
|
|
@@ -11,15 +11,40 @@
|
|
|
11
11
|
"react-native": "./src/index.ts",
|
|
12
12
|
"default": "./build/index.js"
|
|
13
13
|
},
|
|
14
|
-
"./
|
|
15
|
-
"types": "./build/
|
|
16
|
-
"react-native": "./src/
|
|
17
|
-
"default": "./build/
|
|
14
|
+
"./ota": {
|
|
15
|
+
"types": "./build/react/index.d.ts",
|
|
16
|
+
"react-native": "./src/react/index.ts",
|
|
17
|
+
"default": "./build/react/index.js"
|
|
18
18
|
},
|
|
19
|
-
"./
|
|
20
|
-
"types": "./build/
|
|
21
|
-
"react-native": "./src/
|
|
22
|
-
"default": "./build/
|
|
19
|
+
"./bluetooth-sdk": {
|
|
20
|
+
"types": "./build/bluetooth-sdk/index.d.ts",
|
|
21
|
+
"react-native": "./src/bluetooth-sdk/index.ts",
|
|
22
|
+
"default": "./build/bluetooth-sdk/index.js"
|
|
23
|
+
},
|
|
24
|
+
"./bluetooth-sdk/react": {
|
|
25
|
+
"types": "./build/bluetooth-sdk/react.d.ts",
|
|
26
|
+
"react-native": "./src/bluetooth-sdk/react.ts",
|
|
27
|
+
"default": "./build/bluetooth-sdk/react.js"
|
|
28
|
+
},
|
|
29
|
+
"./bluetooth-sdk/types": {
|
|
30
|
+
"types": "./build/bluetooth-sdk/types.d.ts",
|
|
31
|
+
"react-native": "./src/bluetooth-sdk/types.ts",
|
|
32
|
+
"default": "./build/bluetooth-sdk/types.js"
|
|
33
|
+
},
|
|
34
|
+
"./bluetooth-sdk/photo-receiver": {
|
|
35
|
+
"types": "./build/bluetooth-sdk/photo-receiver.d.ts",
|
|
36
|
+
"react-native": "./src/bluetooth-sdk/photo-receiver.ts",
|
|
37
|
+
"default": "./build/bluetooth-sdk/photo-receiver.js"
|
|
38
|
+
},
|
|
39
|
+
"./bluetooth-sdk/ota-transport": {
|
|
40
|
+
"types": "./build/bluetooth-sdk/ota-transport.d.ts",
|
|
41
|
+
"react-native": "./src/bluetooth-sdk/ota-transport.ts",
|
|
42
|
+
"default": "./build/bluetooth-sdk/ota-transport.js"
|
|
43
|
+
},
|
|
44
|
+
"./bluetooth-sdk/debug": {
|
|
45
|
+
"types": "./build/bluetooth-sdk/debug.d.ts",
|
|
46
|
+
"react-native": "./src/bluetooth-sdk/debug.ts",
|
|
47
|
+
"default": "./build/bluetooth-sdk/debug.js"
|
|
23
48
|
},
|
|
24
49
|
"./build/*": null,
|
|
25
50
|
"./src/*": null,
|
|
@@ -29,6 +54,10 @@
|
|
|
29
54
|
"build",
|
|
30
55
|
"README.md",
|
|
31
56
|
"src",
|
|
57
|
+
"!build/devtools.*",
|
|
58
|
+
"!build/internal.*",
|
|
59
|
+
"!src/devtools.ts",
|
|
60
|
+
"!src/internal.ts",
|
|
32
61
|
"!src/**/__tests__",
|
|
33
62
|
"!src/**/*.test.ts"
|
|
34
63
|
],
|
|
@@ -36,7 +65,11 @@
|
|
|
36
65
|
"build": "expo-module build",
|
|
37
66
|
"clean": "expo-module clean",
|
|
38
67
|
"lint": "expo-module lint",
|
|
39
|
-
"test": "./scripts/test.sh",
|
|
68
|
+
"test": "./scripts/test.sh && node --test scripts/*.test.mjs",
|
|
69
|
+
"write:release-metadata": "node scripts/write-release-metadata.mjs",
|
|
70
|
+
"verify:release-package": "node scripts/verify-release-package.mjs",
|
|
71
|
+
"test:public-api": "bun test src/bluetooth-sdk/__tests__/publicApi.test.ts",
|
|
72
|
+
"test:public-ota-consumer": "tsc --noEmit --strict --skipLibCheck --jsx react-jsx --moduleResolution bundler --module esnext --target es2022 scripts/fixtures/public-ota-consumer.tsx",
|
|
40
73
|
"build:module": "expo-module build",
|
|
41
74
|
"prepublishOnly": "expo-module prepublishOnly",
|
|
42
75
|
"expo-module": "expo-module"
|
|
@@ -64,16 +97,19 @@
|
|
|
64
97
|
"registry": "https://registry.npmjs.org/"
|
|
65
98
|
},
|
|
66
99
|
"dependencies": {
|
|
67
|
-
"@glassly/
|
|
100
|
+
"@glassly/bluetooth-sdk": "0.1.0-dev.100",
|
|
101
|
+
"@glassly/cloud-client": "0.1.0-dev.100",
|
|
102
|
+
"@glassly/cloud-protocol": "0.1.0-dev.100",
|
|
103
|
+
"@glassly/crust": "0.1.0-dev.100",
|
|
104
|
+
"@glassly/miniapp": "0.1.0-dev.100",
|
|
68
105
|
"buffer": "^6.0.3",
|
|
69
106
|
"events": "^3.3.0",
|
|
107
|
+
"react-native-marked": "8.1.1",
|
|
70
108
|
"semver": "^7.7.4",
|
|
71
|
-
"typesafe-ts": "^1.7.1"
|
|
109
|
+
"typesafe-ts": "^1.7.1",
|
|
110
|
+
"@glassly/llm-providers": "0.1.0-dev.100"
|
|
72
111
|
},
|
|
73
112
|
"devDependencies": {
|
|
74
|
-
"@glassly/bluetooth-sdk": "workspace:*",
|
|
75
|
-
"@glassly/cloud-client": "workspace:*",
|
|
76
|
-
"@glassly/cloud-protocol": "workspace:*",
|
|
77
113
|
"@glassly/llm-providers": "workspace:*",
|
|
78
114
|
"@types/semver": "^7.7.1",
|
|
79
115
|
"expo-module-scripts": "^56.0.3",
|
|
@@ -82,28 +118,31 @@
|
|
|
82
118
|
"typescript": "~5.9.2"
|
|
83
119
|
},
|
|
84
120
|
"peerDependencies": {
|
|
85
|
-
"expo": "
|
|
86
|
-
"expo-modules-core": "
|
|
121
|
+
"expo": ">=55.0.0",
|
|
122
|
+
"expo-modules-core": ">=55.0.0",
|
|
87
123
|
"react": "*",
|
|
88
124
|
"react-native": "*",
|
|
125
|
+
"react-native-safe-area-context": "*",
|
|
126
|
+
"react-native-svg": "*",
|
|
89
127
|
"react-native-udp": "*",
|
|
90
128
|
"@types/react": "*",
|
|
91
129
|
"react-native-mmkv": "*",
|
|
92
130
|
"react-native-nitro-bg-timer": "*",
|
|
93
131
|
"react-native-nitro-modules": "*",
|
|
94
|
-
"react-native-reanimated": "
|
|
95
|
-
"
|
|
96
|
-
"
|
|
132
|
+
"react-native-reanimated": ">=4.2.1 <5",
|
|
133
|
+
"react-native-worklets": ">=0.7.4 <1",
|
|
134
|
+
"expo-file-system": ">=55.0.0",
|
|
135
|
+
"react-native-zip-archive": "7.1.1",
|
|
97
136
|
"zustand": "*",
|
|
98
|
-
"expo-battery": "
|
|
99
|
-
"expo-audio": "
|
|
100
|
-
"expo-clipboard": "
|
|
101
|
-
"expo-calendar": "
|
|
102
|
-
"expo-constants": "
|
|
103
|
-
"expo-device": "
|
|
104
|
-
"expo-location": "
|
|
105
|
-
"expo-task-manager": "
|
|
106
|
-
"expo-notifications": "
|
|
137
|
+
"expo-battery": ">=55.0.0",
|
|
138
|
+
"expo-audio": ">=55.0.0",
|
|
139
|
+
"expo-clipboard": ">=55.0.0",
|
|
140
|
+
"expo-calendar": ">=55.0.0",
|
|
141
|
+
"expo-constants": ">=55.0.0",
|
|
142
|
+
"expo-device": ">=55.0.0",
|
|
143
|
+
"expo-location": ">=55.0.0",
|
|
144
|
+
"expo-task-manager": ">=55.0.0",
|
|
145
|
+
"expo-notifications": ">=55.0.0",
|
|
107
146
|
"react-native-share": "*",
|
|
108
147
|
"react-native-localize": "*",
|
|
109
148
|
"react-native-ble-manager": "*",
|
|
@@ -112,11 +151,6 @@
|
|
|
112
151
|
"@react-native-community/netinfo": "*",
|
|
113
152
|
"@dr.pogodin/react-native-fs": "*",
|
|
114
153
|
"@craftzdog/react-native-buffer": "*",
|
|
115
|
-
"axios": "*"
|
|
116
|
-
"@glassly/bluetooth-sdk": "*",
|
|
117
|
-
"@glassly/crust": "^0.1.0-dev.1",
|
|
118
|
-
"@glassly/cloud-client": "^0.1.0-dev.0",
|
|
119
|
-
"@glassly/miniapp": "^0.3.0-dev.2",
|
|
120
|
-
"@glassly/cloud-protocol": "^0.1.0-dev.0"
|
|
154
|
+
"axios": "*"
|
|
121
155
|
}
|
|
122
156
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "@glassly/bluetooth-sdk/debug"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "@glassly/bluetooth-sdk/ota-transport"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "@glassly/bluetooth-sdk/react"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "@glassly/bluetooth-sdk/types"
|
package/src/engine.ts
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* name stays `engine` in code; the public API surface is `engine`.)
|
|
6
6
|
*
|
|
7
7
|
* It grows one facade at a time. The migration-era flat store/service exports
|
|
8
|
-
*
|
|
9
|
-
*
|
|
8
|
+
* remain in a private GlasslyOS host package; they shrink as screens move onto
|
|
9
|
+
* `engine.*`.
|
|
10
10
|
*/
|
|
11
11
|
import {configure, start as bootstrapStart, stop as bootstrapStop, updateUiSeams} from "./runtime/bootstrap"
|
|
12
12
|
import {cloudClientService} from "./services/CloudClientService"
|
|
@@ -45,6 +45,9 @@ import {memory} from "./facades/memory"
|
|
|
45
45
|
import {speakers} from "./facades/speakers"
|
|
46
46
|
import {providerKeys} from "./facades/providerKeys"
|
|
47
47
|
import {logBuffer} from "./utils/devLogging"
|
|
48
|
+
import customDashboardService from "./services/CustomDashboardService"
|
|
49
|
+
import dashboardCoordinator from "./services/DashboardCoordinator"
|
|
50
|
+
import gestureDotsService from "./services/GestureDotsService"
|
|
48
51
|
|
|
49
52
|
export const engine = {
|
|
50
53
|
/** Front door — hand engine auth + config, then start/stop the runtime. */
|
|
@@ -65,7 +68,10 @@ export const engine = {
|
|
|
65
68
|
// Project native device status -> the engine stores (the inbound feed the rest
|
|
66
69
|
// of the runtime reads). Established first so the stores are live before the
|
|
67
70
|
// syncs below react to them.
|
|
68
|
-
startGlassesStatusProjection()
|
|
71
|
+
startGlassesStatusProjection((changed) => localMiniappRuntime.forwardEvent("glasses_connection_state", changed))
|
|
72
|
+
customDashboardService.start()
|
|
73
|
+
dashboardCoordinator.start()
|
|
74
|
+
gestureDotsService.start()
|
|
69
75
|
// Route the rest of the inbound device events (wifi/hotspot/gallery -> stores+bus,
|
|
70
76
|
// photo/stream -> coordinators, button/touch/accel/head -> miniapps, save_setting ->
|
|
71
77
|
// store, miniapp_selected -> launcher) so a bare OEM gets device data, not just the
|
|
@@ -147,6 +153,9 @@ export const engine = {
|
|
|
147
153
|
await safely("glasses settings sync", stopGlassesSettingsSync)
|
|
148
154
|
await safely("glasses status projection", stopGlassesStatusProjection)
|
|
149
155
|
await safely("device event router", stopDeviceEventRouter)
|
|
156
|
+
await safely("dashboard coordinator", () => dashboardCoordinator.stop())
|
|
157
|
+
await safely("custom dashboard service", () => customDashboardService.stop())
|
|
158
|
+
await safely("gesture dots service", () => gestureDotsService.stop())
|
|
150
159
|
await safely("ota service", stopOtaService)
|
|
151
160
|
await safely("audio cloud uplink", stopAudioCloudUplink)
|
|
152
161
|
await safely("soniox direct service", () => sonioxDirectService.stop())
|
package/src/facades/display.ts
CHANGED
|
@@ -4,12 +4,22 @@
|
|
|
4
4
|
* glasses display for dev tools and escape-hatch use (normal rendering goes through
|
|
5
5
|
* the engine DisplayProcessor / layout system, not these).
|
|
6
6
|
*/
|
|
7
|
-
import BluetoothSdk from "@glassly/bluetooth-sdk
|
|
7
|
+
import BluetoothSdk from "@glassly/bluetooth-sdk"
|
|
8
|
+
import dashboardCoordinator from "../services/DashboardCoordinator"
|
|
8
9
|
import {displayMirror} from "./displayMirror"
|
|
9
10
|
|
|
10
11
|
export const display = {
|
|
11
|
-
/** Mirrored-view read-model (current/onMirror
|
|
12
|
+
/** Mirrored-view read-model (current/onMirror). */
|
|
12
13
|
mirror: displayMirror,
|
|
14
|
+
/** Phone-composed dashboard controls (simulated head-up, dev tools). */
|
|
15
|
+
dashboard: {
|
|
16
|
+
isOpen: (): boolean => dashboardCoordinator.isOpen,
|
|
17
|
+
/** Open/close as if the head was raised/lowered (respects contextual_dashboard). */
|
|
18
|
+
setHeadUp: (up: boolean): void => dashboardCoordinator.setHeadUp(up),
|
|
19
|
+
/** Force open/close, ignoring contextual_dashboard (simulator button). */
|
|
20
|
+
open: (): void => dashboardCoordinator.open(),
|
|
21
|
+
close: (): void => dashboardCoordinator.close(),
|
|
22
|
+
},
|
|
13
23
|
/** Write raw text to the glasses display at (x, y) with a font size. */
|
|
14
24
|
text: (...args: Parameters<typeof BluetoothSdk.displayText>) => BluetoothSdk.displayText(...args),
|
|
15
25
|
/** Clear the glasses display. */
|
|
@@ -1,33 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* glasses display mirror — the typed read facade over the (now engine-owned)
|
|
3
3
|
* display store, for a phone-side preview of the glasses screen
|
|
4
|
-
* (`engine.display.mirror`). The store
|
|
5
|
-
* (
|
|
6
|
-
* read side: `current()` (snapshot) + `onMirror(cb)` (subscribe).
|
|
7
|
-
* also exposed as `engine.displayStore` (the Glassly-app
|
|
4
|
+
* (`engine.display.mirror`). The store holds the single frame currently on the
|
|
5
|
+
* glasses (dashboard switching happens upstream in DashboardCoordinator); this
|
|
6
|
+
* facade is the read side: `current()` (snapshot) + `onMirror(cb)` (subscribe).
|
|
7
|
+
* The raw store is also exposed as `engine.displayStore` (the Glassly-app
|
|
8
|
+
* escape hatch).
|
|
8
9
|
*/
|
|
9
10
|
import {useDisplayStore} from "../stores/display"
|
|
10
11
|
|
|
11
12
|
export type DisplayMirrorEvent = Record<string, unknown> & {view?: string; layout?: any}
|
|
12
13
|
|
|
13
14
|
export const displayMirror = {
|
|
14
|
-
/** The display event currently
|
|
15
|
+
/** The display event currently on the glasses (snapshot). */
|
|
15
16
|
current(): DisplayMirrorEvent {
|
|
16
17
|
// Copy: the snapshot must not hand callers a mutable reference into the store.
|
|
17
18
|
return {...useDisplayStore.getState().currentEvent}
|
|
18
19
|
},
|
|
19
20
|
|
|
20
|
-
/** Subscribe to changes of the
|
|
21
|
+
/** Subscribe to changes of the mirrored display event; returns an unsubscribe. */
|
|
21
22
|
onMirror(cb: (event: DisplayMirrorEvent) => void): () => void {
|
|
22
23
|
return useDisplayStore.subscribe((s) => s.currentEvent, cb)
|
|
23
24
|
},
|
|
24
|
-
|
|
25
|
-
/** Which view is previewed — the main screen or the dashboard. */
|
|
26
|
-
view(): string {
|
|
27
|
-
return useDisplayStore.getState().view
|
|
28
|
-
},
|
|
29
|
-
/** Switch the previewed view between `"main"` and `"dashboard"`. */
|
|
30
|
-
setView(view: "main" | "dashboard"): void {
|
|
31
|
-
useDisplayStore.getState().setView(view)
|
|
32
|
-
},
|
|
33
25
|
}
|
package/src/facades/glasses.ts
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// surface, not the public entry. Relative path (the alias doesn't resolve in engine's
|
|
12
12
|
// standalone build); jest moduleNameMapper + tsconfig both resolve it.
|
|
13
13
|
import BluetoothSdk from "@glassly/bluetooth-sdk/internal"
|
|
14
|
-
import type {ButtonPressEvent, TouchEvent} from "@glassly/bluetooth-sdk
|
|
14
|
+
import type {ButtonPressEvent, ConnectOptions, Device, TouchEvent} from "@glassly/bluetooth-sdk"
|
|
15
15
|
import {useGlassesStore} from "../stores/glasses"
|
|
16
16
|
import {useSettingsStore, SETTINGS} from "../stores/settings"
|
|
17
17
|
import {hasDefaultDevice} from "../services/DeviceStoreHydration"
|
|
@@ -35,6 +35,8 @@ function projectStatus() {
|
|
|
35
35
|
micEnabled: s.micEnabled,
|
|
36
36
|
vadEnabled: s.voiceActivityDetectionEnabled,
|
|
37
37
|
btClassic: s.bluetoothClassicConnected,
|
|
38
|
+
// iOS: glasses may read the phone's ANCS stream ("Share System Notifications").
|
|
39
|
+
ancsAuthorized: Boolean(s.ancsAuthorized),
|
|
38
40
|
}
|
|
39
41
|
}
|
|
40
42
|
|
|
@@ -66,6 +68,8 @@ function projectInfo() {
|
|
|
66
68
|
wifiMac: s.wifiMacAddress,
|
|
67
69
|
leftMac: s.leftMacAddress,
|
|
68
70
|
rightMac: s.rightMacAddress,
|
|
71
|
+
sceneCanvasWidth: s.sceneCanvasWidth,
|
|
72
|
+
sceneCanvasHeight: s.sceneCanvasHeight,
|
|
69
73
|
// Copy: the snapshot must not hand callers a mutable reference into the store.
|
|
70
74
|
wifi: {...s.wifi},
|
|
71
75
|
}
|
|
@@ -94,10 +98,10 @@ export const glasses = {
|
|
|
94
98
|
disconnect: (): Promise<void> => BluetoothSdk.disconnect(),
|
|
95
99
|
forget: (): Promise<void> => BluetoothSdk.forget(),
|
|
96
100
|
/** Connect to a specific (discovered) device. */
|
|
97
|
-
connect: async (
|
|
101
|
+
connect: async (device: Device, options?: ConnectOptions): Promise<void> => {
|
|
98
102
|
try {
|
|
99
103
|
await pushAllBluetoothSettings()
|
|
100
|
-
await BluetoothSdk.connect(
|
|
104
|
+
await BluetoothSdk.connect(device, options)
|
|
101
105
|
} catch (error) {
|
|
102
106
|
recordSupportProfileConnectionFailure(error, "connect")
|
|
103
107
|
throw error
|
|
@@ -106,7 +110,7 @@ export const glasses = {
|
|
|
106
110
|
/** Connect the built-in simulated glasses (dev/testing). */
|
|
107
111
|
connectSimulated: (): Promise<void> => BluetoothSdk.connectSimulated(),
|
|
108
112
|
/** Set a device as the `connectDefault()` target. */
|
|
109
|
-
setDefault: (
|
|
113
|
+
setDefault: (device: Device | null): Promise<void> => BluetoothSdk.setDefaultDevice(device),
|
|
110
114
|
/**
|
|
111
115
|
* Reconnect to the saved default glasses. Resolves `false` when there's nothing to
|
|
112
116
|
* reconnect to (no default paired) or the connect attempt fails (e.g. BLE powered
|
package/src/facades/ota.ts
CHANGED
|
@@ -1,18 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* ota facade — `engine.ota`: the OEM-facing OTA read/observe surface. Engine's
|
|
3
3
|
* OtaService projects the glasses' OTA BLE events into the engine store; this facade
|
|
4
|
-
* exposes the snapshot + change subscriptions the
|
|
5
|
-
*
|
|
4
|
+
* exposes the snapshot + change subscriptions behind the shared OTA flow exported by
|
|
5
|
+
* `@glassly/engine/ota`. Hosts retain only their surrounding navigation and theme/i18n adapters.
|
|
6
6
|
*
|
|
7
7
|
* Availability checks live in engine. Install orchestration lives in engine too:
|
|
8
8
|
* `installSession` fronts the OtaInstallCoordinator state machine (WP 8B) — the host
|
|
9
9
|
* progress screen is a pure renderer over its snapshot + attach/detach/retry/finish.
|
|
10
10
|
*/
|
|
11
|
-
import BluetoothSdk from "@glassly/bluetooth-sdk
|
|
12
|
-
import type {
|
|
13
|
-
|
|
11
|
+
import BluetoothSdk from "@glassly/bluetooth-sdk"
|
|
12
|
+
import type {
|
|
13
|
+
OtaProgress,
|
|
14
|
+
OtaProgressStatus,
|
|
15
|
+
OtaStartAckEvent,
|
|
16
|
+
OtaStatus,
|
|
17
|
+
OtaUpdateInfo,
|
|
18
|
+
ReleaseChangelog,
|
|
19
|
+
} from "@glassly/bluetooth-sdk"
|
|
20
|
+
import {isGlassesConnected, isGlassesReady, useGlassesStore} from "../stores/glasses"
|
|
14
21
|
import {resolveOtaManifestUrl} from "../services/otaManifestUrl"
|
|
15
22
|
import {otaInstallCoordinator, type OtaInstallSnapshot} from "../services/OtaInstallCoordinator"
|
|
23
|
+
import {startGlassesStatusProjection} from "../services/GlassesStatusProjection"
|
|
24
|
+
import {startOtaService} from "../services/OtaService"
|
|
16
25
|
import {
|
|
17
26
|
checkCurrentGlassesForUpdate,
|
|
18
27
|
type OtaCheckCurrentGlassesOptions,
|
|
@@ -23,9 +32,12 @@ function projectSnapshot() {
|
|
|
23
32
|
const s = useGlassesStore.getState()
|
|
24
33
|
return {
|
|
25
34
|
connected: isGlassesConnected(s.connection),
|
|
35
|
+
ready: isGlassesReady(s.connection),
|
|
26
36
|
buildNumber: s.buildNumber || null,
|
|
37
|
+
appVersion: s.appVersion || null,
|
|
27
38
|
mtkFirmwareVersion: s.mtkFirmwareVersion || null,
|
|
28
39
|
besFirmwareVersion: s.besFirmwareVersion || null,
|
|
40
|
+
batteryLevel: s.batteryLevel >= 0 ? s.batteryLevel : null,
|
|
29
41
|
hotspotOtaVersion: s.hotspotOtaVersion ?? 0,
|
|
30
42
|
wifiConnected: s.wifi.state === "connected",
|
|
31
43
|
wifiStatusKnown: s.wifiStatusKnown,
|
|
@@ -44,6 +56,7 @@ export type {
|
|
|
44
56
|
OtaProgressStatus,
|
|
45
57
|
OtaStatus,
|
|
46
58
|
OtaUpdateInfo,
|
|
59
|
+
ReleaseChangelog,
|
|
47
60
|
OtaInstallSnapshot,
|
|
48
61
|
OtaCheckCurrentGlassesOptions,
|
|
49
62
|
OtaCheckCurrentGlassesResult,
|
|
@@ -51,13 +64,23 @@ export type {
|
|
|
51
64
|
|
|
52
65
|
export const ota = {
|
|
53
66
|
// --- actions ---
|
|
67
|
+
/**
|
|
68
|
+
* Start the device-status and OTA projections without starting the authenticated
|
|
69
|
+
* cloud connection or miniapp runtime. This is the explicit entry point for Bluetooth-only hosts.
|
|
70
|
+
* Idempotent and safe when the full engine runtime is already running.
|
|
71
|
+
*/
|
|
72
|
+
initialize: async () => {
|
|
73
|
+
const hydrated = startGlassesStatusProjection()
|
|
74
|
+
startOtaService()
|
|
75
|
+
await hydrated
|
|
76
|
+
},
|
|
54
77
|
/**
|
|
55
78
|
* Start the firmware install with the resolved OTA manifest URL. Progress lands on
|
|
56
|
-
* `status()`/`onStatus()`. (The host resolves the manifest URL —
|
|
57
|
-
* resolution stays with the OTA config; the
|
|
79
|
+
* `status()`/`onStatus()`. (The host resolves the manifest URL — developer override,
|
|
80
|
+
* host pin, or Engine release pin resolution stays with the OTA config; the stuck/retry watchdog is its own
|
|
58
81
|
* resilience layer on top of this command.)
|
|
59
82
|
*/
|
|
60
|
-
install: (
|
|
83
|
+
install: (otaVersionUrl?: string | null): Promise<OtaStartAckEvent> => BluetoothSdk.startOtaUpdate(otaVersionUrl),
|
|
61
84
|
// Deferred: this facade entry was intended to become the engine-owned retry/check
|
|
62
85
|
// action, but BluetoothSdk.checkForOtaUpdate() only returns a boolean. Exposing it
|
|
63
86
|
// here would make callers think the rich otaUpdateAvailable read model is refreshed,
|
|
@@ -72,6 +95,9 @@ export const ota = {
|
|
|
72
95
|
ping: () => BluetoothSdk.ping(),
|
|
73
96
|
/** Resolve and compare the current glasses against the OTA manifest, then update the OTA snapshot. */
|
|
74
97
|
checkForUpdates: (options?: OtaCheckCurrentGlassesOptions) => checkCurrentGlassesForUpdate(options),
|
|
98
|
+
/** Return bundled release changelogs crossed between two coordinated product versions, newest first. */
|
|
99
|
+
getReleaseChangelogs: (fromVersion?: string | null, toVersion?: string | null): ReleaseChangelog[] =>
|
|
100
|
+
BluetoothSdk.getReleaseChangelogs(fromVersion, toVersion),
|
|
75
101
|
/** Clear the available-update prompt state. */
|
|
76
102
|
clearUpdateAvailable: () => useGlassesStore.getState().setOtaUpdateAvailable(null),
|
|
77
103
|
/** Clear active progress/status before entering a fresh install flow. */
|
|
@@ -101,7 +127,6 @@ export const ota = {
|
|
|
101
127
|
* @deprecated Legacy progress route (build < 37) only — removed with WP 8D.
|
|
102
128
|
*/
|
|
103
129
|
clearBuildNumberForNextCheck: () => {
|
|
104
|
-
BluetoothSdk.updateGlasses({buildNumber: ""})
|
|
105
130
|
useGlassesStore.getState().setGlassesInfo({buildNumber: ""})
|
|
106
131
|
},
|
|
107
132
|
/**
|
|
@@ -124,9 +149,9 @@ export const ota = {
|
|
|
124
149
|
detach: () => otaInstallCoordinator.detach(),
|
|
125
150
|
/** Retry after a failure: clear state and re-send ota_start (if connected). */
|
|
126
151
|
retry: () => otaInstallCoordinator.retry(),
|
|
127
|
-
/** Terminal cleanup for Continue/Done
|
|
152
|
+
/** Terminal cleanup for Continue/Done, including hotspot route teardown. */
|
|
128
153
|
finish: () => otaInstallCoordinator.finish(),
|
|
129
|
-
/** Abandon an interrupted session
|
|
154
|
+
/** Abandon an interrupted session: await finish() then drop the session's status/progress. */
|
|
130
155
|
discard: () => otaInstallCoordinator.discard(),
|
|
131
156
|
/** Current install read model (displayState/errorMsg/lockout + glasses OTA data). */
|
|
132
157
|
snapshot: (): OtaInstallSnapshot => otaInstallCoordinator.snapshot(),
|