@mentra/engine 0.1.0-dev.1 → 3.1.0-beta.103
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 +43 -29
- 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 +18 -15
- package/build/engine.d.ts.map +1 -1
- package/build/engine.js +2 -2
- package/build/engine.js.map +1 -1
- package/build/facades/display.d.ts +1 -1
- package/build/facades/display.d.ts.map +1 -1
- package/build/facades/display.js +1 -1
- package/build/facades/display.js.map +1 -1
- package/build/facades/glasses.d.ts +3 -13
- package/build/facades/glasses.d.ts.map +1 -1
- package/build/facades/glasses.js +3 -3
- package/build/facades/glasses.js.map +1 -1
- package/build/facades/ota.d.ts +16 -22
- package/build/facades/ota.d.ts.map +1 -1
- package/build/facades/ota.js +13 -9
- package/build/facades/ota.js.map +1 -1
- package/build/facades/pairing.d.ts +8 -5
- package/build/facades/pairing.d.ts.map +1 -1
- package/build/facades/pairing.js +83 -9
- package/build/facades/pairing.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 +7 -8
- package/build/index.d.ts.map +1 -1
- package/build/index.js +4 -5
- package/build/index.js.map +1 -1
- package/build/react/MentraLiveOtaFlow.d.ts +8 -2
- package/build/react/MentraLiveOtaFlow.d.ts.map +1 -1
- package/build/react/MentraLiveOtaFlow.js +256 -354
- package/build/react/MentraLiveOtaFlow.js.map +1 -1
- package/build/react/index.d.ts +1 -0
- package/build/react/index.d.ts.map +1 -1
- package/build/react/index.js +1 -0
- package/build/react/index.js.map +1 -1
- 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/DisplayProcessor.d.ts +3 -3
- package/build/services/DisplayProcessor.js +3 -3
- package/build/services/DisplayProcessor.js.map +1 -1
- package/build/services/GlassesStatusProjection.d.ts +15 -2
- package/build/services/GlassesStatusProjection.d.ts.map +1 -1
- package/build/services/GlassesStatusProjection.js +3 -3
- 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 +2 -3
- package/build/services/LocalDisplayManager.d.ts.map +1 -1
- package/build/services/LocalDisplayManager.js +2 -3
- package/build/services/LocalDisplayManager.js.map +1 -1
- package/build/services/OtaAutoChain.d.ts +9 -2
- package/build/services/OtaAutoChain.d.ts.map +1 -1
- package/build/services/OtaAutoChain.js +10 -2
- package/build/services/OtaAutoChain.js.map +1 -1
- 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 +33 -21
- package/build/services/OtaUpdateCheckService.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/StreamLifecycleController.d.ts +3 -3
- package/build/services/StreamLifecycleController.js +3 -3
- 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/glassesClockSync.d.ts.map +1 -1
- package/build/services/glassesClockSync.js +5 -1
- package/build/services/glassesClockSync.js.map +1 -1
- 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 +19 -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/glasses.d.ts +10 -4
- package/build/stores/glasses.d.ts.map +1 -1
- package/build/stores/glasses.js.map +1 -1
- package/build/stores/settings.js +3 -3
- package/build/stores/settings.js.map +1 -1
- package/build/types/applet.d.ts +1 -1
- package/build/types/applet.js +1 -1
- package/build/types/applet.js.map +1 -1
- package/build/types/capabilities/even-realities-g1.d.ts.map +1 -1
- package/build/types/capabilities/even-realities-g1.js +2 -0
- package/build/types/capabilities/even-realities-g1.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 -0
- package/build/types/capabilities/even-realities-g2.js.map +1 -1
- package/build/types/capabilities/mentra-display.d.ts.map +1 -1
- package/build/types/capabilities/mentra-display.js +2 -0
- package/build/types/capabilities/mentra-display.js.map +1 -1
- package/build/types/capabilities/mentra-live.d.ts.map +1 -1
- package/build/types/capabilities/mentra-live.js +2 -0
- package/build/types/capabilities/mentra-live.js.map +1 -1
- package/build/types/capabilities/nimo.d.ts +9 -0
- package/build/types/capabilities/nimo.d.ts.map +1 -0
- package/build/types/capabilities/nimo.js +57 -0
- package/build/types/capabilities/nimo.js.map +1 -0
- package/build/types/capabilities/none.d.ts.map +1 -1
- package/build/types/capabilities/none.js +2 -0
- package/build/types/capabilities/none.js.map +1 -1
- package/build/types/capabilities/simulated-glasses.d.ts.map +1 -1
- package/build/types/capabilities/simulated-glasses.js +2 -0
- package/build/types/capabilities/simulated-glasses.js.map +1 -1
- package/build/types/capabilities/vuzix-z100.d.ts.map +1 -1
- package/build/types/capabilities/vuzix-z100.js +2 -0
- package/build/types/capabilities/vuzix-z100.js.map +1 -1
- package/build/types/enums.d.ts +3 -26
- package/build/types/enums.d.ts.map +1 -1
- package/build/types/enums.js +2 -27
- package/build/types/enums.js.map +1 -1
- package/build/types/hardware.d.ts +6 -15
- package/build/types/hardware.d.ts.map +1 -1
- package/build/types/hardware.js +4 -4
- 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/package.json +47 -22
- 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 +2 -2
- package/src/facades/display.ts +1 -1
- package/src/facades/glasses.ts +4 -4
- package/src/facades/ota.ts +23 -10
- package/src/facades/pairing.ts +92 -16
- package/src/facades/speech.ts +21 -7
- package/src/generated/releaseMetadata.ts +20 -0
- package/src/index.ts +16 -11
- package/src/react/MentraLiveOtaFlow.tsx +378 -480
- package/src/react/index.ts +14 -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/DisplayProcessor.ts +3 -3
- package/src/services/GlassesStatusProjection.ts +7 -6
- package/src/services/HotspotOtaTransport.ts +8 -7
- package/src/services/LocalDisplayManager.ts +2 -3
- package/src/services/OtaAutoChain.ts +26 -2
- package/src/services/OtaInstallCoordinator.ts +40 -13
- package/src/services/OtaService.ts +1 -2
- package/src/services/OtaUpdateCheckService.ts +45 -27
- package/src/services/PhonePhotoCoordinator.ts +1 -1
- package/src/services/PhoneStreamCoordinator.ts +10 -6
- package/src/services/StreamLifecycleController.ts +3 -3
- package/src/services/asg/localNetworkTransport.ts +20 -19
- package/src/services/glassesClockSync.ts +5 -1
- 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 +42 -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/glasses.ts +13 -6
- package/src/stores/settings.ts +3 -3
- package/src/types/applet.ts +1 -1
- package/src/types/capabilities/even-realities-g1.ts +3 -0
- package/src/types/capabilities/even-realities-g2.ts +3 -0
- package/src/types/capabilities/mentra-display.ts +3 -0
- package/src/types/capabilities/mentra-live.ts +3 -0
- package/src/types/capabilities/nimo.ts +59 -0
- package/src/types/capabilities/none.ts +3 -0
- package/src/types/capabilities/simulated-glasses.ts +3 -0
- package/src/types/capabilities/vuzix-z100.ts +3 -0
- package/src/types/enums.ts +2 -27
- package/src/types/hardware.ts +7 -15
- package/src/types/index.ts +3 -6
- package/src/utils/display/composer/ColumnComposer.ts +1 -1
- 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 -160
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mentra/engine",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.1.0-beta.103",
|
|
4
4
|
"description": "Mentra Engine — miniapp registry, WebView bridge, and miniapp store",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"react-native": "src/index.ts",
|
|
@@ -11,21 +11,41 @@
|
|
|
11
11
|
"react-native": "./src/index.ts",
|
|
12
12
|
"default": "./build/index.js"
|
|
13
13
|
},
|
|
14
|
-
"./internal": {
|
|
15
|
-
"types": "./build/internal.d.ts",
|
|
16
|
-
"react-native": "./src/internal.ts",
|
|
17
|
-
"default": "./build/internal.js"
|
|
18
|
-
},
|
|
19
|
-
"./devtools": {
|
|
20
|
-
"types": "./build/devtools.d.ts",
|
|
21
|
-
"react-native": "./src/devtools.ts",
|
|
22
|
-
"default": "./build/devtools.js"
|
|
23
|
-
},
|
|
24
14
|
"./ota": {
|
|
25
15
|
"types": "./build/react/index.d.ts",
|
|
26
16
|
"react-native": "./src/react/index.ts",
|
|
27
17
|
"default": "./build/react/index.js"
|
|
28
18
|
},
|
|
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"
|
|
48
|
+
},
|
|
29
49
|
"./build/*": null,
|
|
30
50
|
"./src/*": null,
|
|
31
51
|
"./package.json": "./package.json"
|
|
@@ -34,6 +54,10 @@
|
|
|
34
54
|
"build",
|
|
35
55
|
"README.md",
|
|
36
56
|
"src",
|
|
57
|
+
"!build/devtools.*",
|
|
58
|
+
"!build/internal.*",
|
|
59
|
+
"!src/devtools.ts",
|
|
60
|
+
"!src/internal.ts",
|
|
37
61
|
"!src/**/__tests__",
|
|
38
62
|
"!src/**/*.test.ts"
|
|
39
63
|
],
|
|
@@ -41,7 +65,11 @@
|
|
|
41
65
|
"build": "expo-module build",
|
|
42
66
|
"clean": "expo-module clean",
|
|
43
67
|
"lint": "expo-module lint",
|
|
44
|
-
"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",
|
|
45
73
|
"build:module": "expo-module prepare",
|
|
46
74
|
"prepublishOnly": "expo-module prepublishOnly",
|
|
47
75
|
"expo-module": "expo-module"
|
|
@@ -69,16 +97,18 @@
|
|
|
69
97
|
"registry": "https://registry.npmjs.org/"
|
|
70
98
|
},
|
|
71
99
|
"dependencies": {
|
|
100
|
+
"@mentra/bluetooth-sdk": "3.1.0-beta.103",
|
|
101
|
+
"@mentra/cloud-client": "3.1.0-beta.103",
|
|
102
|
+
"@mentra/cloud-protocol": "3.1.0-beta.103",
|
|
103
|
+
"@mentra/crust": "3.1.0-beta.103",
|
|
104
|
+
"@mentra/miniapp": "3.1.0-beta.103",
|
|
72
105
|
"buffer": "^6.0.3",
|
|
73
106
|
"events": "^3.3.0",
|
|
107
|
+
"react-native-marked": "8.1.1",
|
|
74
108
|
"semver": "^7.7.4",
|
|
75
109
|
"typesafe-ts": "^1.7.1"
|
|
76
110
|
},
|
|
77
111
|
"devDependencies": {
|
|
78
|
-
"@mentra/bluetooth-sdk": "workspace:*",
|
|
79
|
-
"@mentra/cloud-client": "workspace:*",
|
|
80
|
-
"@mentra/cloud-protocol": "workspace:*",
|
|
81
|
-
"@mentra/miniapp": "workspace:*",
|
|
82
112
|
"@types/semver": "^7.7.1",
|
|
83
113
|
"expo-module-scripts": "^55.0.2",
|
|
84
114
|
"expo-modules-core": "55.0.25",
|
|
@@ -119,11 +149,6 @@
|
|
|
119
149
|
"@react-native-community/netinfo": "*",
|
|
120
150
|
"@dr.pogodin/react-native-fs": "*",
|
|
121
151
|
"@craftzdog/react-native-buffer": "*",
|
|
122
|
-
"axios": "*"
|
|
123
|
-
"@mentra/bluetooth-sdk": "*",
|
|
124
|
-
"@mentra/crust": "^0.1.0-dev.1",
|
|
125
|
-
"@mentra/cloud-client": "^0.1.0-dev.0",
|
|
126
|
-
"@mentra/miniapp": "^0.3.0-dev.1",
|
|
127
|
-
"@mentra/cloud-protocol": "^0.1.0-dev.0"
|
|
152
|
+
"axios": "*"
|
|
128
153
|
}
|
|
129
154
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "@mentra/bluetooth-sdk/debug"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "@mentra/bluetooth-sdk/ota-transport"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "@mentra/bluetooth-sdk/react"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "@mentra/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 MentraOS 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"
|
package/src/facades/display.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
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 "@mentra/bluetooth-sdk
|
|
7
|
+
import BluetoothSdk from "@mentra/bluetooth-sdk"
|
|
8
8
|
import {displayMirror} from "./displayMirror"
|
|
9
9
|
|
|
10
10
|
export const display = {
|
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 "@mentra/bluetooth-sdk/internal"
|
|
14
|
-
import type {ButtonPressEvent, TouchEvent} from "@mentra/bluetooth-sdk
|
|
14
|
+
import type {ButtonPressEvent, ConnectOptions, Device, TouchEvent} from "@mentra/bluetooth-sdk"
|
|
15
15
|
import {useGlassesStore} from "../stores/glasses"
|
|
16
16
|
import {useSettingsStore, SETTINGS} from "../stores/settings"
|
|
17
17
|
import {hasDefaultDevice} from "../services/DeviceStoreHydration"
|
|
@@ -94,10 +94,10 @@ export const glasses = {
|
|
|
94
94
|
disconnect: (): Promise<void> => BluetoothSdk.disconnect(),
|
|
95
95
|
forget: (): Promise<void> => BluetoothSdk.forget(),
|
|
96
96
|
/** Connect to a specific (discovered) device. */
|
|
97
|
-
connect: async (
|
|
97
|
+
connect: async (device: Device, options?: ConnectOptions): Promise<void> => {
|
|
98
98
|
try {
|
|
99
99
|
await pushAllBluetoothSettings()
|
|
100
|
-
await BluetoothSdk.connect(
|
|
100
|
+
await BluetoothSdk.connect(device, options)
|
|
101
101
|
} catch (error) {
|
|
102
102
|
recordSupportProfileConnectionFailure(error, "connect")
|
|
103
103
|
throw error
|
|
@@ -106,7 +106,7 @@ export const glasses = {
|
|
|
106
106
|
/** Connect the built-in simulated glasses (dev/testing). */
|
|
107
107
|
connectSimulated: (): Promise<void> => BluetoothSdk.connectSimulated(),
|
|
108
108
|
/** Set a device as the `connectDefault()` target. */
|
|
109
|
-
setDefault: (
|
|
109
|
+
setDefault: (device: Device | null): Promise<void> => BluetoothSdk.setDefaultDevice(device),
|
|
110
110
|
/**
|
|
111
111
|
* Reconnect to the saved default glasses. Resolves `false` when there's nothing to
|
|
112
112
|
* reconnect to (no default paired) or the connect attempt fails (e.g. BLE powered
|
package/src/facades/ota.ts
CHANGED
|
@@ -8,9 +8,16 @@
|
|
|
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 "@mentra/bluetooth-sdk
|
|
12
|
-
import type {
|
|
13
|
-
|
|
11
|
+
import BluetoothSdk from "@mentra/bluetooth-sdk"
|
|
12
|
+
import type {
|
|
13
|
+
OtaProgress,
|
|
14
|
+
OtaProgressStatus,
|
|
15
|
+
OtaStartAckEvent,
|
|
16
|
+
OtaStatus,
|
|
17
|
+
OtaUpdateInfo,
|
|
18
|
+
ReleaseChangelog,
|
|
19
|
+
} from "@mentra/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"
|
|
16
23
|
import {startGlassesStatusProjection} from "../services/GlassesStatusProjection"
|
|
@@ -25,9 +32,12 @@ function projectSnapshot() {
|
|
|
25
32
|
const s = useGlassesStore.getState()
|
|
26
33
|
return {
|
|
27
34
|
connected: isGlassesConnected(s.connection),
|
|
35
|
+
ready: isGlassesReady(s.connection),
|
|
28
36
|
buildNumber: s.buildNumber || null,
|
|
37
|
+
appVersion: s.appVersion || null,
|
|
29
38
|
mtkFirmwareVersion: s.mtkFirmwareVersion || null,
|
|
30
39
|
besFirmwareVersion: s.besFirmwareVersion || null,
|
|
40
|
+
batteryLevel: s.batteryLevel >= 0 ? s.batteryLevel : null,
|
|
31
41
|
hotspotOtaVersion: s.hotspotOtaVersion ?? 0,
|
|
32
42
|
wifiConnected: s.wifi.state === "connected",
|
|
33
43
|
wifiStatusKnown: s.wifiStatusKnown,
|
|
@@ -46,6 +56,7 @@ export type {
|
|
|
46
56
|
OtaProgressStatus,
|
|
47
57
|
OtaStatus,
|
|
48
58
|
OtaUpdateInfo,
|
|
59
|
+
ReleaseChangelog,
|
|
49
60
|
OtaInstallSnapshot,
|
|
50
61
|
OtaCheckCurrentGlassesOptions,
|
|
51
62
|
OtaCheckCurrentGlassesResult,
|
|
@@ -55,7 +66,7 @@ export const ota = {
|
|
|
55
66
|
// --- actions ---
|
|
56
67
|
/**
|
|
57
68
|
* Start the device-status and OTA projections without starting the authenticated
|
|
58
|
-
* cloud
|
|
69
|
+
* cloud connection or miniapp runtime. This is the explicit entry point for Bluetooth-only hosts.
|
|
59
70
|
* Idempotent and safe when the full engine runtime is already running.
|
|
60
71
|
*/
|
|
61
72
|
initialize: async () => {
|
|
@@ -65,11 +76,11 @@ export const ota = {
|
|
|
65
76
|
},
|
|
66
77
|
/**
|
|
67
78
|
* Start the firmware install with the resolved OTA manifest URL. Progress lands on
|
|
68
|
-
* `status()`/`onStatus()`. (The host resolves the manifest URL —
|
|
69
|
-
* 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
|
|
70
81
|
* resilience layer on top of this command.)
|
|
71
82
|
*/
|
|
72
|
-
install: (
|
|
83
|
+
install: (otaVersionUrl?: string | null): Promise<OtaStartAckEvent> => BluetoothSdk.startOtaUpdate(otaVersionUrl),
|
|
73
84
|
// Deferred: this facade entry was intended to become the engine-owned retry/check
|
|
74
85
|
// action, but BluetoothSdk.checkForOtaUpdate() only returns a boolean. Exposing it
|
|
75
86
|
// here would make callers think the rich otaUpdateAvailable read model is refreshed,
|
|
@@ -84,6 +95,9 @@ export const ota = {
|
|
|
84
95
|
ping: () => BluetoothSdk.ping(),
|
|
85
96
|
/** Resolve and compare the current glasses against the OTA manifest, then update the OTA snapshot. */
|
|
86
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),
|
|
87
101
|
/** Clear the available-update prompt state. */
|
|
88
102
|
clearUpdateAvailable: () => useGlassesStore.getState().setOtaUpdateAvailable(null),
|
|
89
103
|
/** Clear active progress/status before entering a fresh install flow. */
|
|
@@ -113,7 +127,6 @@ export const ota = {
|
|
|
113
127
|
* @deprecated Legacy progress route (build < 37) only — removed with WP 8D.
|
|
114
128
|
*/
|
|
115
129
|
clearBuildNumberForNextCheck: () => {
|
|
116
|
-
BluetoothSdk.updateGlasses({buildNumber: ""})
|
|
117
130
|
useGlassesStore.getState().setGlassesInfo({buildNumber: ""})
|
|
118
131
|
},
|
|
119
132
|
/**
|
|
@@ -136,9 +149,9 @@ export const ota = {
|
|
|
136
149
|
detach: () => otaInstallCoordinator.detach(),
|
|
137
150
|
/** Retry after a failure: clear state and re-send ota_start (if connected). */
|
|
138
151
|
retry: () => otaInstallCoordinator.retry(),
|
|
139
|
-
/** Terminal cleanup for Continue/Done
|
|
152
|
+
/** Terminal cleanup for Continue/Done, including hotspot route teardown. */
|
|
140
153
|
finish: () => otaInstallCoordinator.finish(),
|
|
141
|
-
/** Abandon an interrupted session
|
|
154
|
+
/** Abandon an interrupted session: await finish() then drop the session's status/progress. */
|
|
142
155
|
discard: () => otaInstallCoordinator.discard(),
|
|
143
156
|
/** Current install read model (displayState/errorMsg/lockout + glasses OTA data). */
|
|
144
157
|
snapshot: (): OtaInstallSnapshot => otaInstallCoordinator.snapshot(),
|
package/src/facades/pairing.ts
CHANGED
|
@@ -10,9 +10,10 @@
|
|
|
10
10
|
// target hint) lives on the full surface, not the public entry (same reason
|
|
11
11
|
// the glasses facade imports internal).
|
|
12
12
|
import BluetoothSdk from "@mentra/bluetooth-sdk/internal"
|
|
13
|
-
import type {ConnectOptions, Device, PairFailureEvent, GlassesNotReadyEvent} from "@mentra/bluetooth-sdk"
|
|
13
|
+
import type {ConnectOptions, Device, DeviceModel, PairFailureEvent, GlassesNotReadyEvent} from "@mentra/bluetooth-sdk"
|
|
14
14
|
import {useCoreStore} from "../stores/core"
|
|
15
15
|
import {useGlassesStore} from "../stores/glasses"
|
|
16
|
+
import {SETTINGS, useSettingsStore} from "../stores/settings"
|
|
16
17
|
import {hasDefaultDevice} from "../services/DeviceStoreHydration"
|
|
17
18
|
import {
|
|
18
19
|
markPendingSelection,
|
|
@@ -20,18 +21,14 @@ import {
|
|
|
20
21
|
subscribePairingIdentity,
|
|
21
22
|
type IdentitySnapshot,
|
|
22
23
|
} from "../services/PairingIdentity"
|
|
23
|
-
import {
|
|
24
|
-
isGlassesConnected,
|
|
25
|
-
isGlassesLinkLayerBusy,
|
|
26
|
-
isGlassesReady,
|
|
27
|
-
waitForGlassesReady,
|
|
28
|
-
} from "../services/GlassesReadiness"
|
|
24
|
+
import {isGlassesConnected, isGlassesLinkLayerBusy, isGlassesReady} from "../services/GlassesReadiness"
|
|
29
25
|
import {
|
|
30
26
|
logAutomaticReportSubmissionStatus,
|
|
31
27
|
toAutomaticReportSubmissionStatus,
|
|
32
28
|
type AutomaticReportSubmissionStatus,
|
|
33
29
|
} from "../services/AutomaticReportResult"
|
|
34
30
|
import {pushAllBluetoothSettings} from "../services/GlassesSettingsSync"
|
|
31
|
+
import {ControllerTypes} from "../types"
|
|
35
32
|
import {submitAutomaticReport} from "./reports"
|
|
36
33
|
|
|
37
34
|
export type {IdentitySnapshot} from "../services/PairingIdentity"
|
|
@@ -60,6 +57,82 @@ function projectReadiness() {
|
|
|
60
57
|
}
|
|
61
58
|
}
|
|
62
59
|
|
|
60
|
+
function projectTargetReady(options: Pick<PairingReadyWaitOptions, "deviceModel" | "deviceName">): boolean {
|
|
61
|
+
const {deviceModel, deviceName} = options
|
|
62
|
+
const glasses = useGlassesStore.getState()
|
|
63
|
+
|
|
64
|
+
if (deviceModel === ControllerTypes.R1) {
|
|
65
|
+
if (!glasses.controllerConnected || !glasses.controllerFullyBooted) return false
|
|
66
|
+
const settings = useSettingsStore.getState()
|
|
67
|
+
const pairedModel = settings.getSetting(SETTINGS.default_controller.key)
|
|
68
|
+
const pairedName = settings.getSetting(SETTINGS.controller_device_name.key)
|
|
69
|
+
return (!deviceModel || pairedModel === deviceModel) && (!deviceName || pairedName === deviceName)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (!isGlassesReady(glasses.connection)) return false
|
|
73
|
+
const identity = projectPairingIdentity()
|
|
74
|
+
if (!deviceModel && !deviceName) return true
|
|
75
|
+
return (
|
|
76
|
+
identity.kind === "paired" &&
|
|
77
|
+
(!deviceModel || identity.model === deviceModel) &&
|
|
78
|
+
(!deviceName || identity.name === deviceName)
|
|
79
|
+
)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function subscribeTargetReady(
|
|
83
|
+
options: Pick<PairingReadyWaitOptions, "deviceModel" | "deviceName">,
|
|
84
|
+
cb: (ready: boolean) => void,
|
|
85
|
+
): () => void {
|
|
86
|
+
let last = projectTargetReady(options)
|
|
87
|
+
const notify = () => {
|
|
88
|
+
const ready = projectTargetReady(options)
|
|
89
|
+
if (ready === last) return
|
|
90
|
+
last = ready
|
|
91
|
+
cb(ready)
|
|
92
|
+
}
|
|
93
|
+
const unsubscribeGlasses = useGlassesStore.subscribe(notify)
|
|
94
|
+
const unsubscribeSettings = useSettingsStore.subscribe(notify)
|
|
95
|
+
return () => {
|
|
96
|
+
unsubscribeGlasses()
|
|
97
|
+
unsubscribeSettings()
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
async function waitForTargetReady(options: PairingReadyWaitOptions, timeoutMs: number): Promise<boolean> {
|
|
102
|
+
return new Promise((resolve) => {
|
|
103
|
+
if (options.signal?.aborted) {
|
|
104
|
+
resolve(false)
|
|
105
|
+
return
|
|
106
|
+
}
|
|
107
|
+
if (projectTargetReady(options)) {
|
|
108
|
+
resolve(true)
|
|
109
|
+
return
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
let settled = false
|
|
113
|
+
let timeout: ReturnType<typeof setTimeout> | null = null
|
|
114
|
+
let unsubscribe: (() => void) | null = null
|
|
115
|
+
let onAbort: (() => void) | null = null
|
|
116
|
+
const finish = (ready: boolean) => {
|
|
117
|
+
if (settled) return
|
|
118
|
+
settled = true
|
|
119
|
+
if (timeout) clearTimeout(timeout)
|
|
120
|
+
if (unsubscribe) unsubscribe()
|
|
121
|
+
if (onAbort && options.signal) options.signal.removeEventListener("abort", onAbort)
|
|
122
|
+
resolve(ready)
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
unsubscribe = subscribeTargetReady(options, (ready) => {
|
|
126
|
+
if (ready) finish(true)
|
|
127
|
+
})
|
|
128
|
+
if (options.signal) {
|
|
129
|
+
onAbort = () => finish(false)
|
|
130
|
+
options.signal.addEventListener("abort", onAbort)
|
|
131
|
+
}
|
|
132
|
+
timeout = setTimeout(() => finish(projectTargetReady(options)), timeoutMs)
|
|
133
|
+
})
|
|
134
|
+
}
|
|
135
|
+
|
|
63
136
|
export type PairingReadinessSnapshot = ReturnType<typeof projectReadiness>
|
|
64
137
|
|
|
65
138
|
export async function submitPairingBootTimeoutReport(params: {
|
|
@@ -108,12 +181,7 @@ async function waitForReadyDuringPairing(options: PairingReadyWaitOptions = {}):
|
|
|
108
181
|
})
|
|
109
182
|
|
|
110
183
|
try {
|
|
111
|
-
const ready = await
|
|
112
|
-
getConnection: () => useGlassesStore.getState().connection,
|
|
113
|
-
subscribe: (listener) => useGlassesStore.subscribe((state) => state.connection, listener),
|
|
114
|
-
timeoutMs,
|
|
115
|
-
signal: options.signal,
|
|
116
|
-
})
|
|
184
|
+
const ready = await waitForTargetReady(options, timeoutMs)
|
|
117
185
|
|
|
118
186
|
if (!ready && !options.signal?.aborted) {
|
|
119
187
|
void submitPairingBootTimeoutReport({
|
|
@@ -193,6 +261,14 @@ export const pairing = {
|
|
|
193
261
|
cb(snap)
|
|
194
262
|
})
|
|
195
263
|
},
|
|
264
|
+
/** Whether the exact wearable or controller selected on the scan screen is ready. */
|
|
265
|
+
targetReady: (options: Pick<PairingReadyWaitOptions, "deviceModel" | "deviceName">): boolean =>
|
|
266
|
+
projectTargetReady(options),
|
|
267
|
+
/** Subscribe to readiness for the exact selected target, excluding stale devices. */
|
|
268
|
+
onTargetReady: (
|
|
269
|
+
options: Pick<PairingReadyWaitOptions, "deviceModel" | "deviceName">,
|
|
270
|
+
cb: (ready: boolean) => void,
|
|
271
|
+
): (() => void) => subscribeTargetReady(options, cb),
|
|
196
272
|
|
|
197
273
|
// --- pairing-identity lifecycle (the PairingIdentity read-model + the JS-owned
|
|
198
274
|
// identity writes; promotion to `paired` only ever happens natively) ---
|
|
@@ -206,7 +282,7 @@ export const pairing = {
|
|
|
206
282
|
markPendingSelection: (model: string) => markPendingSelection(model),
|
|
207
283
|
|
|
208
284
|
/** Start scanning for nearby glasses. Results land on `searchResults()`/`onFound()`. */
|
|
209
|
-
scan: (
|
|
285
|
+
scan: (model: DeviceModel): Promise<void> => BluetoothSdk.startScan(model),
|
|
210
286
|
/** Whether a scan is currently in progress. */
|
|
211
287
|
scanning: (): boolean => useCoreStore.getState().searching,
|
|
212
288
|
/** Subscribe to scan-in-progress changes; fires only when it changes. Returns an unsubscribe. */
|
|
@@ -226,7 +302,7 @@ export const pairing = {
|
|
|
226
302
|
// leak as mutable references into the store.
|
|
227
303
|
searchResults: () => useCoreStore.getState().searchResults.map((result) => ({...result})),
|
|
228
304
|
/** Subscribe to scan-result changes; fires only when they change. Returns an unsubscribe. */
|
|
229
|
-
onFound: (cb: (results:
|
|
305
|
+
onFound: (cb: (results: Device[]) => void): (() => void) => {
|
|
230
306
|
let last = JSON.stringify(useCoreStore.getState().searchResults)
|
|
231
307
|
return useCoreStore.subscribe(() => {
|
|
232
308
|
const results = useCoreStore.getState().searchResults
|
|
@@ -250,7 +326,7 @@ export const pairing = {
|
|
|
250
326
|
return BluetoothSdk.connect(device, {...options, saveAsDefault: false})
|
|
251
327
|
},
|
|
252
328
|
/** Set a device as the default for subsequent `glasses.connectDefault()`. */
|
|
253
|
-
setDefault: (
|
|
329
|
+
setDefault: (device: Device | null): Promise<void> => BluetoothSdk.setDefaultDevice(device),
|
|
254
330
|
/**
|
|
255
331
|
* Prime the native Bluetooth Classic audio watcher with the picked device.
|
|
256
332
|
* The iOS Mentra Live flow pairs Classic audio BEFORE any BLE connect
|
package/src/facades/speech.ts
CHANGED
|
@@ -7,24 +7,38 @@
|
|
|
7
7
|
import BluetoothSdk from "@mentra/bluetooth-sdk/internal"
|
|
8
8
|
import sttModelManager from "../services/STTModelManager"
|
|
9
9
|
import ttsModelManager from "../services/TTSModelManager"
|
|
10
|
-
import offlineSpeechModelService
|
|
10
|
+
import offlineSpeechModelService, {
|
|
11
|
+
type DownloadStatus as OfflineModelDownloadStatus,
|
|
12
|
+
} from "../services/OfflineSpeechModelService"
|
|
13
|
+
import type {
|
|
14
|
+
DownloadProgress as SttDownloadProgress,
|
|
15
|
+
ExtractionProgress as SttExtractionProgress,
|
|
16
|
+
LanguageConfig as SttLanguageConfig,
|
|
17
|
+
LanguageInfo as SttLanguageInfo,
|
|
18
|
+
} from "../services/STTModelManager"
|
|
11
19
|
|
|
12
20
|
export const speech = {
|
|
13
21
|
/** Restart the glasses' on-device transcriber (e.g. after switching STT language). */
|
|
14
22
|
restartTranscriber: (): Promise<void> => BluetoothSdk.restartTranscriber(),
|
|
15
23
|
stt: {
|
|
16
24
|
currentLanguage: () => sttModelManager.getCurrentLanguage(),
|
|
17
|
-
languages: () => sttModelManager.getAvailableLanguages(),
|
|
18
|
-
languageInfo: () => sttModelManager.getAllLanguageInfo(),
|
|
19
|
-
download: (
|
|
25
|
+
languages: (): SttLanguageConfig[] => sttModelManager.getAvailableLanguages(),
|
|
26
|
+
languageInfo: (): Promise<SttLanguageInfo[]> => sttModelManager.getAllLanguageInfo(),
|
|
27
|
+
download: (
|
|
28
|
+
...args: [
|
|
29
|
+
code?: string,
|
|
30
|
+
onProgress?: (progress: SttDownloadProgress) => void,
|
|
31
|
+
onExtractionProgress?: (progress: SttExtractionProgress) => void,
|
|
32
|
+
]
|
|
33
|
+
): Promise<void> => sttModelManager.downloadModel(...args),
|
|
20
34
|
activate: (code: string) => sttModelManager.setCurrentLanguage(code),
|
|
21
35
|
cancelDownload: () => sttModelManager.cancelDownload(),
|
|
22
36
|
deleteModel: (...args: Parameters<typeof sttModelManager.deleteModel>) => sttModelManager.deleteModel(...args),
|
|
23
37
|
/** Current auto-download status of the offline STT model. */
|
|
24
|
-
status: () => offlineSpeechModelService.getStatus(),
|
|
38
|
+
status: (): OfflineModelDownloadStatus | null => offlineSpeechModelService.getStatus(),
|
|
25
39
|
/** Subscribe to auto-download status changes; returns an unsubscribe. */
|
|
26
|
-
onStatusChanged: (
|
|
27
|
-
offlineSpeechModelService.subscribe(
|
|
40
|
+
onStatusChanged: (listener: (status: OfflineModelDownloadStatus | null) => void): (() => void) =>
|
|
41
|
+
offlineSpeechModelService.subscribe(listener),
|
|
28
42
|
},
|
|
29
43
|
tts: {
|
|
30
44
|
currentLanguage: () => ttsModelManager.getCurrentLanguage(),
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Generated by release CI. Do not edit in a release checkout. */
|
|
2
|
+
export interface EngineReleaseMetadata {
|
|
3
|
+
schemaVersion: 1
|
|
4
|
+
familyBaseVersion: string | null
|
|
5
|
+
releaseIdentity: string | null
|
|
6
|
+
releaseSetId: string | null
|
|
7
|
+
sourceCommit: string | null
|
|
8
|
+
otaManifestUrl: string | null
|
|
9
|
+
otaManifestSha256: string | null
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const ENGINE_RELEASE_METADATA: Readonly<EngineReleaseMetadata> = Object.freeze({
|
|
13
|
+
"schemaVersion": 1,
|
|
14
|
+
"familyBaseVersion": "3.1.0",
|
|
15
|
+
"releaseIdentity": "3.1.0-beta.103",
|
|
16
|
+
"releaseSetId": "mentra-3.1.0-beta.103",
|
|
17
|
+
"sourceCommit": "bcd47a0b9885de1faf36c0bae2bbee97a10d0991",
|
|
18
|
+
"otaManifestUrl": "https://github.com/Mentra-Community/MentraOS/releases/download/mentra-builds-v3.1.0/mentra-live-ota-3.1.0-beta.103.json",
|
|
19
|
+
"otaManifestSha256": "ba0a4926e0b4414809b7aac8029037faefedd80db2e44faa057af6fac2c983e2"
|
|
20
|
+
})
|
package/src/index.ts
CHANGED
|
@@ -6,8 +6,7 @@
|
|
|
6
6
|
* renders with (decision functions, sort/order helpers, policy constants,
|
|
7
7
|
* capability tables, timers). Judgment rule: read models, commands, pure
|
|
8
8
|
* functions and types belong here; anything that mutates runtime state or
|
|
9
|
-
* exposes a raw store/service
|
|
10
|
-
* (migration-era surface) or `@mentra/engine/devtools` (debug-only) instead.
|
|
9
|
+
* exposes a raw store/service remains private to the MentraOS host.
|
|
11
10
|
* See cloud-v2/docs/issues/020-glasses-status-boundary/integration-review.md §D.
|
|
12
11
|
*/
|
|
13
12
|
|
|
@@ -47,12 +46,7 @@ export {MENTRA_LIVE_SETTING_KEYS, getBluetoothSettingKeysForDevice} from "./stor
|
|
|
47
46
|
|
|
48
47
|
// Runtime-shared constants and contract DTOs.
|
|
49
48
|
export {ISLAND_SETTINGS_KEYS} from "./runtime/config"
|
|
50
|
-
export type {
|
|
51
|
-
CloudClientStatusSnapshot,
|
|
52
|
-
MiniappAuthToken,
|
|
53
|
-
InteropAuditEvent,
|
|
54
|
-
TtsSynthesisResult,
|
|
55
|
-
} from "./runtime/config"
|
|
49
|
+
export type {CloudClientStatusSnapshot, MiniappAuthToken, InteropAuditEvent, TtsSynthesisResult} from "./runtime/config"
|
|
56
50
|
|
|
57
51
|
// Pure readiness predicates over glasses connection state.
|
|
58
52
|
export {
|
|
@@ -95,6 +89,7 @@ export {
|
|
|
95
89
|
GLOBAL_OTA_TIMEOUT_MS,
|
|
96
90
|
PING_INTERVAL_MS,
|
|
97
91
|
QUERY_REPLY_TIMEOUT_MS,
|
|
92
|
+
BES_RESTART_TIMEOUT_MS,
|
|
98
93
|
OtaProgressMessages,
|
|
99
94
|
} from "./services/otaInstallPolicy"
|
|
100
95
|
export {deriveDisplayState} from "./services/otaDisplayState"
|
|
@@ -104,6 +99,7 @@ export type {
|
|
|
104
99
|
OtaProgressStatus,
|
|
105
100
|
OtaStatus,
|
|
106
101
|
OtaUpdateInfo,
|
|
102
|
+
ReleaseChangelog,
|
|
107
103
|
OtaSnapshot,
|
|
108
104
|
OtaInstallSnapshot,
|
|
109
105
|
} from "./facades/ota"
|
|
@@ -132,11 +128,19 @@ export {
|
|
|
132
128
|
export type {GalleryNotice, GalleryNoticeCode} from "./services/asg/galleryNotices"
|
|
133
129
|
export {MediaLibraryPermissions} from "./utils/permissions/MediaLibraryPermissions"
|
|
134
130
|
export {deriveGalleryDisplayName} from "./utils/permissions/galleryDisplayName"
|
|
135
|
-
export type {
|
|
131
|
+
export type {
|
|
132
|
+
PhotoInfo,
|
|
133
|
+
CaptureFile,
|
|
134
|
+
CaptureGroup,
|
|
135
|
+
GalleryResponse,
|
|
136
|
+
ServerStatus,
|
|
137
|
+
HealthResponse,
|
|
138
|
+
GalleryEvent,
|
|
139
|
+
} from "./types/asg"
|
|
136
140
|
|
|
137
141
|
// Bluetooth SDK event types host UI subscribes to via engine facades (the
|
|
138
142
|
// BluetoothSdk singleton passthrough itself is internal).
|
|
139
|
-
export type {PairFailureEvent, GlassesNotReadyEvent} from "@mentra/bluetooth-sdk
|
|
143
|
+
export type {PairFailureEvent, GlassesNotReadyEvent} from "@mentra/bluetooth-sdk"
|
|
140
144
|
|
|
141
145
|
// Cloud connection status enum (read model; the connection store is internal).
|
|
142
146
|
export {WebSocketStatus} from "./stores/connection"
|
|
@@ -181,7 +185,7 @@ export {
|
|
|
181
185
|
export {HardwareCompatibility, type CompatibilityResult} from "./utils/hardware"
|
|
182
186
|
export {BgTimer, throttle, debounce} from "./utils/timers"
|
|
183
187
|
|
|
184
|
-
//
|
|
188
|
+
// Hardware types and capability profiles.
|
|
185
189
|
export {
|
|
186
190
|
HardwareType,
|
|
187
191
|
HardwareRequirementLevel,
|
|
@@ -193,6 +197,7 @@ export {
|
|
|
193
197
|
evenRealitiesG1,
|
|
194
198
|
evenRealitiesG2,
|
|
195
199
|
mentraLive,
|
|
200
|
+
nimo,
|
|
196
201
|
vuzixZ100,
|
|
197
202
|
mentraDisplay,
|
|
198
203
|
} from "./types"
|