@mentra/engine 3.2.0-dev.137 → 3.2.0-dev.154

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.
Files changed (92) hide show
  1. package/build/engine.d.ts.map +1 -1
  2. package/build/engine.js +15 -9
  3. package/build/engine.js.map +1 -1
  4. package/build/facades/ota.d.ts +1 -0
  5. package/build/facades/ota.d.ts.map +1 -1
  6. package/build/facades/ota.js +1 -0
  7. package/build/facades/ota.js.map +1 -1
  8. package/build/facades/reports.d.ts.map +1 -1
  9. package/build/facades/reports.js +3 -0
  10. package/build/facades/reports.js.map +1 -1
  11. package/build/generated/releaseMetadata.js +5 -5
  12. package/build/generated/releaseMetadata.js.map +1 -1
  13. package/build/index.d.ts +1 -1
  14. package/build/index.d.ts.map +1 -1
  15. package/build/index.js.map +1 -1
  16. package/build/react/MentraLiveOtaFlow.d.ts.map +1 -1
  17. package/build/react/MentraLiveOtaFlow.js +12 -0
  18. package/build/react/MentraLiveOtaFlow.js.map +1 -1
  19. package/build/react/useMentraLiveOta.d.ts +3 -1
  20. package/build/react/useMentraLiveOta.d.ts.map +1 -1
  21. package/build/react/useMentraLiveOta.js +19 -1
  22. package/build/react/useMentraLiveOta.js.map +1 -1
  23. package/build/runtime/bootstrap.d.ts +46 -3
  24. package/build/runtime/bootstrap.d.ts.map +1 -1
  25. package/build/runtime/bootstrap.js +60 -1
  26. package/build/runtime/bootstrap.js.map +1 -1
  27. package/build/runtime/config.d.ts +4 -0
  28. package/build/runtime/config.d.ts.map +1 -1
  29. package/build/runtime/config.js.map +1 -1
  30. package/build/runtime/streamConfig.d.ts.map +1 -1
  31. package/build/runtime/streamConfig.js +6 -0
  32. package/build/runtime/streamConfig.js.map +1 -1
  33. package/build/services/AppRegistry.d.ts +15 -1
  34. package/build/services/AppRegistry.d.ts.map +1 -1
  35. package/build/services/AppRegistry.js +48 -12
  36. package/build/services/AppRegistry.js.map +1 -1
  37. package/build/services/CloudClientService.d.ts +3 -1
  38. package/build/services/CloudClientService.d.ts.map +1 -1
  39. package/build/services/CloudClientService.js +75 -18
  40. package/build/services/CloudClientService.js.map +1 -1
  41. package/build/services/LocalMiniappRuntime.d.ts.map +1 -1
  42. package/build/services/LocalMiniappRuntime.js +54 -12
  43. package/build/services/LocalMiniappRuntime.js.map +1 -1
  44. package/build/services/MiniappLauncher.d.ts.map +1 -1
  45. package/build/services/MiniappLauncher.js +9 -1
  46. package/build/services/MiniappLauncher.js.map +1 -1
  47. package/build/services/NavigationHandlers.d.ts.map +1 -1
  48. package/build/services/NavigationHandlers.js +8 -0
  49. package/build/services/NavigationHandlers.js.map +1 -1
  50. package/build/services/OtaUpdateCheckService.d.ts +10 -1
  51. package/build/services/OtaUpdateCheckService.d.ts.map +1 -1
  52. package/build/services/OtaUpdateCheckService.js +24 -5
  53. package/build/services/OtaUpdateCheckService.js.map +1 -1
  54. package/build/services/miniappInstallIdentity.d.ts +10 -0
  55. package/build/services/miniappInstallIdentity.d.ts.map +1 -0
  56. package/build/services/miniappInstallIdentity.js +10 -0
  57. package/build/services/miniappInstallIdentity.js.map +1 -0
  58. package/build/services/otaManifestPolicy.d.ts +3 -0
  59. package/build/services/otaManifestPolicy.d.ts.map +1 -1
  60. package/build/services/otaManifestPolicy.js +8 -0
  61. package/build/services/otaManifestPolicy.js.map +1 -1
  62. package/build/services/otaManifestUrl.d.ts.map +1 -1
  63. package/build/services/otaManifestUrl.js +10 -2
  64. package/build/services/otaManifestUrl.js.map +1 -1
  65. package/build/stores/glasses.d.ts.map +1 -1
  66. package/build/stores/glasses.js +6 -0
  67. package/build/stores/glasses.js.map +1 -1
  68. package/build/stores/settings.d.ts.map +1 -1
  69. package/build/stores/settings.js +20 -3
  70. package/build/stores/settings.js.map +1 -1
  71. package/package.json +7 -7
  72. package/src/engine.ts +22 -12
  73. package/src/facades/ota.ts +1 -0
  74. package/src/facades/reports.ts +4 -6
  75. package/src/generated/releaseMetadata.ts +5 -5
  76. package/src/index.ts +2 -0
  77. package/src/react/MentraLiveOtaFlow.tsx +21 -0
  78. package/src/react/useMentraLiveOta.ts +23 -2
  79. package/src/runtime/bootstrap.ts +117 -4
  80. package/src/runtime/config.ts +4 -0
  81. package/src/runtime/streamConfig.ts +4 -0
  82. package/src/services/AppRegistry.ts +94 -25
  83. package/src/services/CloudClientService.ts +70 -24
  84. package/src/services/LocalMiniappRuntime.ts +85 -26
  85. package/src/services/MiniappLauncher.ts +15 -1
  86. package/src/services/NavigationHandlers.ts +8 -0
  87. package/src/services/OtaUpdateCheckService.ts +32 -6
  88. package/src/services/miniappInstallIdentity.ts +18 -0
  89. package/src/services/otaManifestPolicy.ts +11 -0
  90. package/src/services/otaManifestUrl.ts +10 -2
  91. package/src/stores/glasses.ts +6 -0
  92. package/src/stores/settings.ts +20 -3
@@ -132,6 +132,7 @@ const initialState: GlassesStore = {
132
132
  systemTimeMs: 0,
133
133
  otaVersionUrl: "",
134
134
  appVersion: "",
135
+ packageName: "",
135
136
  bluetoothName: "",
136
137
  serialNumber: "",
137
138
  style: "",
@@ -203,6 +204,11 @@ export const useGlassesStore = create<GlassesState>()(
203
204
  if (!isGlassesConnected(next.connection)) {
204
205
  next.wifiStatusKnown = false
205
206
  next.hotspotOtaVersion = 0
207
+ // packageName is deliberately NOT cleared here. It is only ever safe to clear together
208
+ // with buildNumber, which the native session boundary does atomically (both arrive in
209
+ // version_info_1). Clearing identity alone would leave a stale sideloaded buildNumber
210
+ // paired with a blank package, and the OTA guard reads a blank package as stock — the
211
+ // exact update loop this guard exists to prevent. Stale-together is fail-closed.
206
212
  }
207
213
  return next
208
214
  }),
@@ -1,4 +1,5 @@
1
1
  import {getTimeZone} from "react-native-localize"
2
+ import {useCallback} from "react"
2
3
  import {AsyncResult, result as Res, Result} from "typesafe-ts"
3
4
  import {create} from "zustand"
4
5
  import {subscribeWithSelector} from "zustand/middleware"
@@ -410,10 +411,10 @@ export const SETTINGS: Record<string, Setting> = {
410
411
  saveOnServer: true,
411
412
  persist: true,
412
413
  },
413
- // Mentra Live center-mic loudness / "Barrier" gate (cs_swit type 10). Default on.
414
+ // Mentra Live center-mic loudness / "Barrier" gate (cs_swit type 10). Opt-in.
414
415
  loudness_gate_enabled: {
415
416
  key: "loudness_gate_enabled",
416
- defaultValue: () => true,
417
+ defaultValue: () => false,
417
418
  writable: true,
418
419
  saveOnServer: true,
419
420
  persist: true,
@@ -1048,6 +1049,21 @@ export const useSettingsStore = create<SettingsState>()(
1048
1049
  }
1049
1050
  }
1050
1051
 
1052
+ // Reset existing installs once; later user/app opt-ins remain available.
1053
+ const LOUDNESS_GATE_MIGRATION_KEY = "migration:loudness_gate_default_off_v1"
1054
+ const loudnessGateMigrationDone = storage.load<boolean>(LOUDNESS_GATE_MIGRATION_KEY)
1055
+ if (loudnessGateMigrationDone.is_error() || !loudnessGateMigrationDone.value) {
1056
+ // updateServer: true, matching the android_blur / camera_fov migrations. The flag is
1057
+ // inert until the Cloud V2 settings sync lands, but this setting is saveOnServer, so
1058
+ // the intent recorded here is the one that should carry over.
1059
+ const result = await get().setSetting(SETTINGS.loudness_gate_enabled.key, false, true)
1060
+ if (result.is_error()) {
1061
+ console.log("SETTINGS: loudness gate migration failed:", result.error)
1062
+ } else {
1063
+ storage.save(LOUDNESS_GATE_MIGRATION_KEY, true)
1064
+ }
1065
+ }
1066
+
1051
1067
  const NOTIFICATION_LISTENER_MIGRATION_KEY = "migration:android_notification_listener_default_on_v1"
1052
1068
  const notificationListenerMigrationDone = storage.load<boolean>(NOTIFICATION_LISTENER_MIGRATION_KEY)
1053
1069
  if (notificationListenerMigrationDone.is_error() || !notificationListenerMigrationDone.value) {
@@ -1150,5 +1166,6 @@ export const useSettingsStore = create<SettingsState>()(
1150
1166
  export const useSetting = <T = any>(key: string): [T, (value: T) => AsyncResult<void, Error>] => {
1151
1167
  const value = useSettingsStore((state) => state.getSetting(key))
1152
1168
  const setSetting = useSettingsStore((state) => state.setSetting)
1153
- return [value, (newValue: T) => setSetting(key, newValue)]
1169
+ const setValue = useCallback((newValue: T) => setSetting(key, newValue), [key, setSetting])
1170
+ return [value, setValue]
1154
1171
  }