@mentra/engine 0.1.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +79 -0
- package/build/devtools.d.ts +11 -0
- package/build/devtools.d.ts.map +1 -0
- package/build/devtools.js +13 -0
- package/build/devtools.js.map +1 -0
- package/build/engine.d.ts +261 -0
- package/build/engine.d.ts.map +1 -0
- package/build/engine.js +170 -0
- package/build/engine.js.map +1 -0
- package/build/facades/dev.d.ts +58 -0
- package/build/facades/dev.d.ts.map +1 -0
- package/build/facades/dev.js +189 -0
- package/build/facades/dev.js.map +1 -0
- package/build/facades/display.d.ts +21 -0
- package/build/facades/display.d.ts.map +1 -0
- package/build/facades/display.js +17 -0
- package/build/facades/display.js.map +1 -0
- package/build/facades/displayMirror.d.ts +15 -0
- package/build/facades/displayMirror.d.ts.map +1 -0
- package/build/facades/displayMirror.js +29 -0
- package/build/facades/displayMirror.js.map +1 -0
- package/build/facades/gallery.d.ts +62 -0
- package/build/facades/gallery.d.ts.map +1 -0
- package/build/facades/gallery.js +61 -0
- package/build/facades/gallery.js.map +1 -0
- package/build/facades/glasses.d.ts +141 -0
- package/build/facades/glasses.d.ts.map +1 -0
- package/build/facades/glasses.js +199 -0
- package/build/facades/glasses.js.map +1 -0
- package/build/facades/glassesSettings.d.ts +13 -0
- package/build/facades/glassesSettings.d.ts.map +1 -0
- package/build/facades/glassesSettings.js +54 -0
- package/build/facades/glassesSettings.js.map +1 -0
- package/build/facades/glassesWifi.d.ts +25 -0
- package/build/facades/glassesWifi.d.ts.map +1 -0
- package/build/facades/glassesWifi.js +57 -0
- package/build/facades/glassesWifi.js.map +1 -0
- package/build/facades/miniapps.d.ts +43 -0
- package/build/facades/miniapps.d.ts.map +1 -0
- package/build/facades/miniapps.js +49 -0
- package/build/facades/miniapps.js.map +1 -0
- package/build/facades/notifications.d.ts +13 -0
- package/build/facades/notifications.d.ts.map +1 -0
- package/build/facades/notifications.js +12 -0
- package/build/facades/notifications.js.map +1 -0
- package/build/facades/ota.d.ts +103 -0
- package/build/facades/ota.d.ts.map +1 -0
- package/build/facades/ota.js +156 -0
- package/build/facades/ota.js.map +1 -0
- package/build/facades/pairing.d.ts +114 -0
- package/build/facades/pairing.d.ts.map +1 -0
- package/build/facades/pairing.js +275 -0
- package/build/facades/pairing.js.map +1 -0
- package/build/facades/permissions.d.ts +33 -0
- package/build/facades/permissions.d.ts.map +1 -0
- package/build/facades/permissions.js +155 -0
- package/build/facades/permissions.js.map +1 -0
- package/build/facades/phoneNotifications.d.ts +21 -0
- package/build/facades/phoneNotifications.d.ts.map +1 -0
- package/build/facades/phoneNotifications.js +51 -0
- package/build/facades/phoneNotifications.js.map +1 -0
- package/build/facades/reports.d.ts +36 -0
- package/build/facades/reports.d.ts.map +1 -0
- package/build/facades/reports.js +134 -0
- package/build/facades/reports.js.map +1 -0
- package/build/facades/session.d.ts +21 -0
- package/build/facades/session.d.ts.map +1 -0
- package/build/facades/session.js +52 -0
- package/build/facades/session.js.map +1 -0
- package/build/facades/settings.d.ts +37 -0
- package/build/facades/settings.d.ts.map +1 -0
- package/build/facades/settings.js +55 -0
- package/build/facades/settings.js.map +1 -0
- package/build/facades/speech.d.ts +30 -0
- package/build/facades/speech.d.ts.map +1 -0
- package/build/facades/speech.js +37 -0
- package/build/facades/speech.js.map +1 -0
- package/build/index.d.ts +43 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +45 -0
- package/build/index.js.map +1 -0
- package/build/internal.d.ts +67 -0
- package/build/internal.d.ts.map +1 -0
- package/build/internal.js +90 -0
- package/build/internal.js.map +1 -0
- package/build/runtime/bootstrap.d.ts +83 -0
- package/build/runtime/bootstrap.d.ts.map +1 -0
- package/build/runtime/bootstrap.js +56 -0
- package/build/runtime/bootstrap.js.map +1 -0
- package/build/runtime/config.d.ts +146 -0
- package/build/runtime/config.d.ts.map +1 -0
- package/build/runtime/config.js +18 -0
- package/build/runtime/config.js.map +1 -0
- package/build/runtime/streamConfig.d.ts +4 -0
- package/build/runtime/streamConfig.d.ts.map +1 -0
- package/build/runtime/streamConfig.js +38 -0
- package/build/runtime/streamConfig.js.map +1 -0
- package/build/services/AppRegistry.d.ts +269 -0
- package/build/services/AppRegistry.d.ts.map +1 -0
- package/build/services/AppRegistry.js +1079 -0
- package/build/services/AppRegistry.js.map +1 -0
- package/build/services/AudioCloudUplink.d.ts +9 -0
- package/build/services/AudioCloudUplink.d.ts.map +1 -0
- package/build/services/AudioCloudUplink.js +48 -0
- package/build/services/AudioCloudUplink.js.map +1 -0
- package/build/services/AudioPlaybackService.d.ts +175 -0
- package/build/services/AudioPlaybackService.d.ts.map +1 -0
- package/build/services/AudioPlaybackService.js +705 -0
- package/build/services/AudioPlaybackService.js.map +1 -0
- package/build/services/AutomaticReportResult.d.ts +20 -0
- package/build/services/AutomaticReportResult.d.ts.map +1 -0
- package/build/services/AutomaticReportResult.js +29 -0
- package/build/services/AutomaticReportResult.js.map +1 -0
- package/build/services/BlobStore.d.ts +91 -0
- package/build/services/BlobStore.d.ts.map +1 -0
- package/build/services/BlobStore.js +668 -0
- package/build/services/BlobStore.js.map +1 -0
- package/build/services/CaptionsTesterReportService.d.ts +4 -0
- package/build/services/CaptionsTesterReportService.d.ts.map +1 -0
- package/build/services/CaptionsTesterReportService.js +80 -0
- package/build/services/CaptionsTesterReportService.js.map +1 -0
- package/build/services/CloudAudioSubscriptionSync.d.ts +24 -0
- package/build/services/CloudAudioSubscriptionSync.d.ts.map +1 -0
- package/build/services/CloudAudioSubscriptionSync.js +39 -0
- package/build/services/CloudAudioSubscriptionSync.js.map +1 -0
- package/build/services/CloudClientService.d.ts +143 -0
- package/build/services/CloudClientService.d.ts.map +1 -0
- package/build/services/CloudClientService.js +644 -0
- package/build/services/CloudClientService.js.map +1 -0
- package/build/services/CloudTranscriptE2EMetrics.d.ts +4 -0
- package/build/services/CloudTranscriptE2EMetrics.d.ts.map +1 -0
- package/build/services/CloudTranscriptE2EMetrics.js +24 -0
- package/build/services/CloudTranscriptE2EMetrics.js.map +1 -0
- package/build/services/ConnectionCoordinator.d.ts +51 -0
- package/build/services/ConnectionCoordinator.d.ts.map +1 -0
- package/build/services/ConnectionCoordinator.js +34 -0
- package/build/services/ConnectionCoordinator.js.map +1 -0
- package/build/services/DevServerBridge.d.ts +63 -0
- package/build/services/DevServerBridge.d.ts.map +1 -0
- package/build/services/DevServerBridge.js +294 -0
- package/build/services/DevServerBridge.js.map +1 -0
- package/build/services/DeviceEventRouter.d.ts +3 -0
- package/build/services/DeviceEventRouter.d.ts.map +1 -0
- package/build/services/DeviceEventRouter.js +190 -0
- package/build/services/DeviceEventRouter.js.map +1 -0
- package/build/services/DeviceStoreHydration.d.ts +38 -0
- package/build/services/DeviceStoreHydration.d.ts.map +1 -0
- package/build/services/DeviceStoreHydration.js +124 -0
- package/build/services/DeviceStoreHydration.js.map +1 -0
- package/build/services/DisplayProcessor.d.ts +223 -0
- package/build/services/DisplayProcessor.d.ts.map +1 -0
- package/build/services/DisplayProcessor.js +552 -0
- package/build/services/DisplayProcessor.js.map +1 -0
- package/build/services/GlassesReadiness.d.ts +41 -0
- package/build/services/GlassesReadiness.d.ts.map +1 -0
- package/build/services/GlassesReadiness.js +82 -0
- package/build/services/GlassesReadiness.js.map +1 -0
- package/build/services/GlassesSettingsSync.d.ts +33 -0
- package/build/services/GlassesSettingsSync.d.ts.map +1 -0
- package/build/services/GlassesSettingsSync.js +121 -0
- package/build/services/GlassesSettingsSync.js.map +1 -0
- package/build/services/GlassesStatusProjection.d.ts +3 -0
- package/build/services/GlassesStatusProjection.d.ts.map +1 -0
- package/build/services/GlassesStatusProjection.js +65 -0
- package/build/services/GlassesStatusProjection.js.map +1 -0
- package/build/services/HeadingService.d.ts +27 -0
- package/build/services/HeadingService.d.ts.map +1 -0
- package/build/services/HeadingService.js +96 -0
- package/build/services/HeadingService.js.map +1 -0
- package/build/services/LocalDisplayManager.d.ts +139 -0
- package/build/services/LocalDisplayManager.d.ts.map +1 -0
- package/build/services/LocalDisplayManager.js +579 -0
- package/build/services/LocalDisplayManager.js.map +1 -0
- package/build/services/LocalMiniappRuntime.d.ts +439 -0
- package/build/services/LocalMiniappRuntime.d.ts.map +1 -0
- package/build/services/LocalMiniappRuntime.js +3695 -0
- package/build/services/LocalMiniappRuntime.js.map +1 -0
- package/build/services/LocalSttFallbackCoordinator.d.ts +57 -0
- package/build/services/LocalSttFallbackCoordinator.d.ts.map +1 -0
- package/build/services/LocalSttFallbackCoordinator.js +137 -0
- package/build/services/LocalSttFallbackCoordinator.js.map +1 -0
- package/build/services/MentraJSCrashController.d.ts +97 -0
- package/build/services/MentraJSCrashController.d.ts.map +1 -0
- package/build/services/MentraJSCrashController.js +138 -0
- package/build/services/MentraJSCrashController.js.map +1 -0
- package/build/services/MentraJSCrashloopReportService.d.ts +9 -0
- package/build/services/MentraJSCrashloopReportService.d.ts.map +1 -0
- package/build/services/MentraJSCrashloopReportService.js +54 -0
- package/build/services/MentraJSCrashloopReportService.js.map +1 -0
- package/build/services/MentraJSLogPipeline.d.ts +87 -0
- package/build/services/MentraJSLogPipeline.d.ts.map +1 -0
- package/build/services/MentraJSLogPipeline.js +137 -0
- package/build/services/MentraJSLogPipeline.js.map +1 -0
- package/build/services/MentraJSRouter.d.ts +203 -0
- package/build/services/MentraJSRouter.d.ts.map +1 -0
- package/build/services/MentraJSRouter.js +480 -0
- package/build/services/MentraJSRouter.js.map +1 -0
- package/build/services/MentraUIRouter.d.ts +137 -0
- package/build/services/MentraUIRouter.d.ts.map +1 -0
- package/build/services/MentraUIRouter.js +210 -0
- package/build/services/MentraUIRouter.js.map +1 -0
- package/build/services/MicStateCoordinator.d.ts +37 -0
- package/build/services/MicStateCoordinator.d.ts.map +1 -0
- package/build/services/MicStateCoordinator.js +81 -0
- package/build/services/MicStateCoordinator.js.map +1 -0
- package/build/services/MiniappEngine.d.ts +31 -0
- package/build/services/MiniappEngine.d.ts.map +1 -0
- package/build/services/MiniappEngine.js +119 -0
- package/build/services/MiniappEngine.js.map +1 -0
- package/build/services/MiniappLauncher.d.ts +129 -0
- package/build/services/MiniappLauncher.d.ts.map +1 -0
- package/build/services/MiniappLauncher.js +291 -0
- package/build/services/MiniappLauncher.js.map +1 -0
- package/build/services/MiniappRunningRegistry.d.ts +24 -0
- package/build/services/MiniappRunningRegistry.d.ts.map +1 -0
- package/build/services/MiniappRunningRegistry.js +52 -0
- package/build/services/MiniappRunningRegistry.js.map +1 -0
- package/build/services/NativeHttpResponse.d.ts +3 -0
- package/build/services/NativeHttpResponse.d.ts.map +1 -0
- package/build/services/NativeHttpResponse.js +6 -0
- package/build/services/NativeHttpResponse.js.map +1 -0
- package/build/services/NavigationHandlers.d.ts +90 -0
- package/build/services/NavigationHandlers.d.ts.map +1 -0
- package/build/services/NavigationHandlers.js +379 -0
- package/build/services/NavigationHandlers.js.map +1 -0
- package/build/services/NavigationService.d.ts +254 -0
- package/build/services/NavigationService.d.ts.map +1 -0
- package/build/services/NavigationService.js +553 -0
- package/build/services/NavigationService.js.map +1 -0
- package/build/services/NotificationsEmitter.d.ts +28 -0
- package/build/services/NotificationsEmitter.d.ts.map +1 -0
- package/build/services/NotificationsEmitter.js +22 -0
- package/build/services/NotificationsEmitter.js.map +1 -0
- package/build/services/OfflineSpeechModelService.d.ts +33 -0
- package/build/services/OfflineSpeechModelService.d.ts.map +1 -0
- package/build/services/OfflineSpeechModelService.js +136 -0
- package/build/services/OfflineSpeechModelService.js.map +1 -0
- package/build/services/OtaInstallCoordinator.d.ts +195 -0
- package/build/services/OtaInstallCoordinator.d.ts.map +1 -0
- package/build/services/OtaInstallCoordinator.js +1047 -0
- package/build/services/OtaInstallCoordinator.js.map +1 -0
- package/build/services/OtaService.d.ts +3 -0
- package/build/services/OtaService.d.ts.map +1 -0
- package/build/services/OtaService.js +65 -0
- package/build/services/OtaService.js.map +1 -0
- package/build/services/OtaUpdateCheckService.d.ts +65 -0
- package/build/services/OtaUpdateCheckService.d.ts.map +1 -0
- package/build/services/OtaUpdateCheckService.js +260 -0
- package/build/services/OtaUpdateCheckService.js.map +1 -0
- package/build/services/PairingIdentity.d.ts +80 -0
- package/build/services/PairingIdentity.d.ts.map +1 -0
- package/build/services/PairingIdentity.js +145 -0
- package/build/services/PairingIdentity.js.map +1 -0
- package/build/services/PhoneCalendarHelpers.d.ts +32 -0
- package/build/services/PhoneCalendarHelpers.d.ts.map +1 -0
- package/build/services/PhoneCalendarHelpers.js +157 -0
- package/build/services/PhoneCalendarHelpers.js.map +1 -0
- package/build/services/PhoneCalendarService.d.ts +5 -0
- package/build/services/PhoneCalendarService.d.ts.map +1 -0
- package/build/services/PhoneCalendarService.js +24 -0
- package/build/services/PhoneCalendarService.js.map +1 -0
- package/build/services/PhoneCameraFovCoordinator.d.ts +28 -0
- package/build/services/PhoneCameraFovCoordinator.d.ts.map +1 -0
- package/build/services/PhoneCameraFovCoordinator.js +180 -0
- package/build/services/PhoneCameraFovCoordinator.js.map +1 -0
- package/build/services/PhoneLocationService.d.ts +36 -0
- package/build/services/PhoneLocationService.d.ts.map +1 -0
- package/build/services/PhoneLocationService.js +115 -0
- package/build/services/PhoneLocationService.js.map +1 -0
- package/build/services/PhoneNotificationsSync.d.ts +3 -0
- package/build/services/PhoneNotificationsSync.d.ts.map +1 -0
- package/build/services/PhoneNotificationsSync.js +35 -0
- package/build/services/PhoneNotificationsSync.js.map +1 -0
- package/build/services/PhonePhotoCoordinator.d.ts +103 -0
- package/build/services/PhonePhotoCoordinator.d.ts.map +1 -0
- package/build/services/PhonePhotoCoordinator.js +326 -0
- package/build/services/PhonePhotoCoordinator.js.map +1 -0
- package/build/services/PhoneStreamCoordinator.d.ts +168 -0
- package/build/services/PhoneStreamCoordinator.d.ts.map +1 -0
- package/build/services/PhoneStreamCoordinator.js +632 -0
- package/build/services/PhoneStreamCoordinator.js.map +1 -0
- package/build/services/PhoneVideoCoordinator.d.ts +50 -0
- package/build/services/PhoneVideoCoordinator.d.ts.map +1 -0
- package/build/services/PhoneVideoCoordinator.js +147 -0
- package/build/services/PhoneVideoCoordinator.js.map +1 -0
- package/build/services/STTModelManager.d.ts +65 -0
- package/build/services/STTModelManager.d.ts.map +1 -0
- package/build/services/STTModelManager.js +292 -0
- package/build/services/STTModelManager.js.map +1 -0
- package/build/services/SceneRenderer.d.ts +90 -0
- package/build/services/SceneRenderer.d.ts.map +1 -0
- package/build/services/SceneRenderer.js +248 -0
- package/build/services/SceneRenderer.js.map +1 -0
- package/build/services/SentenceTtsPipeline.d.ts +31 -0
- package/build/services/SentenceTtsPipeline.d.ts.map +1 -0
- package/build/services/SentenceTtsPipeline.js +67 -0
- package/build/services/SentenceTtsPipeline.js.map +1 -0
- package/build/services/StreamLifecycleController.d.ts +67 -0
- package/build/services/StreamLifecycleController.d.ts.map +1 -0
- package/build/services/StreamLifecycleController.js +152 -0
- package/build/services/StreamLifecycleController.js.map +1 -0
- package/build/services/TTSModelManager.d.ts +90 -0
- package/build/services/TTSModelManager.d.ts.map +1 -0
- package/build/services/TTSModelManager.js +366 -0
- package/build/services/TTSModelManager.js.map +1 -0
- package/build/services/TranscriptionRouting.d.ts +12 -0
- package/build/services/TranscriptionRouting.d.ts.map +1 -0
- package/build/services/TranscriptionRouting.js +24 -0
- package/build/services/TranscriptionRouting.js.map +1 -0
- package/build/services/WebviewBridge.d.ts +22 -0
- package/build/services/WebviewBridge.d.ts.map +1 -0
- package/build/services/WebviewBridge.js +47 -0
- package/build/services/WebviewBridge.js.map +1 -0
- package/build/services/asg/GalleryMediaIntegrityReportService.d.ts +17 -0
- package/build/services/asg/GalleryMediaIntegrityReportService.d.ts.map +1 -0
- package/build/services/asg/GalleryMediaIntegrityReportService.js +43 -0
- package/build/services/asg/GalleryMediaIntegrityReportService.js.map +1 -0
- package/build/services/asg/asgCameraApi.d.ts +205 -0
- package/build/services/asg/asgCameraApi.d.ts.map +1 -0
- package/build/services/asg/asgCameraApi.js +1410 -0
- package/build/services/asg/asgCameraApi.js.map +1 -0
- package/build/services/asg/cameraRollExportCoordinator.d.ts +60 -0
- package/build/services/asg/cameraRollExportCoordinator.d.ts.map +1 -0
- package/build/services/asg/cameraRollExportCoordinator.js +618 -0
- package/build/services/asg/cameraRollExportCoordinator.js.map +1 -0
- package/build/services/asg/cameraRollExportLedger.d.ts +44 -0
- package/build/services/asg/cameraRollExportLedger.d.ts.map +1 -0
- package/build/services/asg/cameraRollExportLedger.js +78 -0
- package/build/services/asg/cameraRollExportLedger.js.map +1 -0
- package/build/services/asg/galleryMediaValidation.d.ts +29 -0
- package/build/services/asg/galleryMediaValidation.d.ts.map +1 -0
- package/build/services/asg/galleryMediaValidation.js +149 -0
- package/build/services/asg/galleryMediaValidation.js.map +1 -0
- package/build/services/asg/galleryNotices.d.ts +33 -0
- package/build/services/asg/galleryNotices.d.ts.map +1 -0
- package/build/services/asg/galleryNotices.js +29 -0
- package/build/services/asg/galleryNotices.js.map +1 -0
- package/build/services/asg/galleryPathMigration.d.ts +3 -0
- package/build/services/asg/galleryPathMigration.d.ts.map +1 -0
- package/build/services/asg/galleryPathMigration.js +26 -0
- package/build/services/asg/galleryPathMigration.js.map +1 -0
- package/build/services/asg/gallerySettingsService.d.ts +20 -0
- package/build/services/asg/gallerySettingsService.d.ts.map +1 -0
- package/build/services/asg/gallerySettingsService.js +53 -0
- package/build/services/asg/gallerySettingsService.js.map +1 -0
- package/build/services/asg/gallerySyncNotifications.d.ts +56 -0
- package/build/services/asg/gallerySyncNotifications.d.ts.map +1 -0
- package/build/services/asg/gallerySyncNotifications.js +198 -0
- package/build/services/asg/gallerySyncNotifications.js.map +1 -0
- package/build/services/asg/gallerySyncService.d.ts +137 -0
- package/build/services/asg/gallerySyncService.d.ts.map +1 -0
- package/build/services/asg/gallerySyncService.js +1933 -0
- package/build/services/asg/gallerySyncService.js.map +1 -0
- package/build/services/asg/galleryTransferLedger.d.ts +58 -0
- package/build/services/asg/galleryTransferLedger.d.ts.map +1 -0
- package/build/services/asg/galleryTransferLedger.js +225 -0
- package/build/services/asg/galleryTransferLedger.js.map +1 -0
- package/build/services/asg/localNetworkTransport.d.ts +15 -0
- package/build/services/asg/localNetworkTransport.d.ts.map +1 -0
- package/build/services/asg/localNetworkTransport.js +144 -0
- package/build/services/asg/localNetworkTransport.js.map +1 -0
- package/build/services/asg/localStorageService.d.ts +146 -0
- package/build/services/asg/localStorageService.d.ts.map +1 -0
- package/build/services/asg/localStorageService.js +572 -0
- package/build/services/asg/localStorageService.js.map +1 -0
- package/build/services/asg/mediaProcessingQueue.d.ts +70 -0
- package/build/services/asg/mediaProcessingQueue.d.ts.map +1 -0
- package/build/services/asg/mediaProcessingQueue.js +451 -0
- package/build/services/asg/mediaProcessingQueue.js.map +1 -0
- package/build/services/asgOtaVersionUrl.d.ts +2 -0
- package/build/services/asgOtaVersionUrl.d.ts.map +1 -0
- package/build/services/asgOtaVersionUrl.js +36 -0
- package/build/services/asgOtaVersionUrl.js.map +1 -0
- package/build/services/blobPaths.d.ts +31 -0
- package/build/services/blobPaths.d.ts.map +1 -0
- package/build/services/blobPaths.js +86 -0
- package/build/services/blobPaths.js.map +1 -0
- package/build/services/cloudStreamApi.d.ts +59 -0
- package/build/services/cloudStreamApi.d.ts.map +1 -0
- package/build/services/cloudStreamApi.js +81 -0
- package/build/services/cloudStreamApi.js.map +1 -0
- package/build/services/gallerySyncClock.d.ts +17 -0
- package/build/services/gallerySyncClock.d.ts.map +1 -0
- package/build/services/gallerySyncClock.js +21 -0
- package/build/services/gallerySyncClock.js.map +1 -0
- package/build/services/glassesClockSync.d.ts +20 -0
- package/build/services/glassesClockSync.d.ts.map +1 -0
- package/build/services/glassesClockSync.js +97 -0
- package/build/services/glassesClockSync.js.map +1 -0
- package/build/services/manifestVersionGate.d.ts +28 -0
- package/build/services/manifestVersionGate.d.ts.map +1 -0
- package/build/services/manifestVersionGate.js +41 -0
- package/build/services/manifestVersionGate.js.map +1 -0
- package/build/services/mentraUiShim.d.ts +38 -0
- package/build/services/mentraUiShim.d.ts.map +1 -0
- package/build/services/mentraUiShim.js +360 -0
- package/build/services/mentraUiShim.js.map +1 -0
- package/build/services/navigation/roadNameResolver.d.ts +67 -0
- package/build/services/navigation/roadNameResolver.d.ts.map +1 -0
- package/build/services/navigation/roadNameResolver.js +96 -0
- package/build/services/navigation/roadNameResolver.js.map +1 -0
- package/build/services/navigation/routesApiCodec.d.ts +38 -0
- package/build/services/navigation/routesApiCodec.d.ts.map +1 -0
- package/build/services/navigation/routesApiCodec.js +68 -0
- package/build/services/navigation/routesApiCodec.js.map +1 -0
- package/build/services/otaDisplayState.d.ts +42 -0
- package/build/services/otaDisplayState.d.ts.map +1 -0
- package/build/services/otaDisplayState.js +92 -0
- package/build/services/otaDisplayState.js.map +1 -0
- package/build/services/otaInstallPolicy.d.ts +81 -0
- package/build/services/otaInstallPolicy.d.ts.map +1 -0
- package/build/services/otaInstallPolicy.js +96 -0
- package/build/services/otaInstallPolicy.js.map +1 -0
- package/build/services/otaLegacyMapping.d.ts +22 -0
- package/build/services/otaLegacyMapping.d.ts.map +1 -0
- package/build/services/otaLegacyMapping.js +56 -0
- package/build/services/otaLegacyMapping.js.map +1 -0
- package/build/services/slimStreamStatus.d.ts +7 -0
- package/build/services/slimStreamStatus.d.ts.map +1 -0
- package/build/services/slimStreamStatus.js +26 -0
- package/build/services/slimStreamStatus.js.map +1 -0
- package/build/stores/apps.d.ts +104 -0
- package/build/stores/apps.d.ts.map +1 -0
- package/build/stores/apps.js +492 -0
- package/build/stores/apps.js.map +1 -0
- package/build/stores/bluetoothSettingKeys.d.ts +4 -0
- package/build/stores/bluetoothSettingKeys.d.ts.map +1 -0
- package/build/stores/bluetoothSettingKeys.js +31 -0
- package/build/stores/bluetoothSettingKeys.js.map +1 -0
- package/build/stores/cloudClientStatus.d.ts +9 -0
- package/build/stores/cloudClientStatus.d.ts.map +1 -0
- package/build/stores/cloudClientStatus.js +24 -0
- package/build/stores/cloudClientStatus.js.map +1 -0
- package/build/stores/connection.d.ts +22 -0
- package/build/stores/connection.d.ts.map +1 -0
- package/build/stores/connection.js +43 -0
- package/build/stores/connection.js.map +1 -0
- package/build/stores/core.d.ts +15 -0
- package/build/stores/core.d.ts.map +1 -0
- package/build/stores/core.js +21 -0
- package/build/stores/core.js.map +1 -0
- package/build/stores/display.d.ts +24 -0
- package/build/stores/display.d.ts.map +1 -0
- package/build/stores/display.js +96 -0
- package/build/stores/display.js.map +1 -0
- package/build/stores/gallerySync.d.ts +101 -0
- package/build/stores/gallerySync.d.ts.map +1 -0
- package/build/stores/gallerySync.js +217 -0
- package/build/stores/gallerySync.js.map +1 -0
- package/build/stores/glasses.d.ts +62 -0
- package/build/stores/glasses.d.ts.map +1 -0
- package/build/stores/glasses.js +203 -0
- package/build/stores/glasses.js.map +1 -0
- package/build/stores/settings.d.ts +37 -0
- package/build/stores/settings.d.ts.map +1 -0
- package/build/stores/settings.js +922 -0
- package/build/stores/settings.js.map +1 -0
- package/build/types/applet.d.ts +96 -0
- package/build/types/applet.d.ts.map +1 -0
- package/build/types/applet.js +5 -0
- package/build/types/applet.js.map +1 -0
- package/build/types/asg.d.ts +53 -0
- package/build/types/asg.d.ts.map +1 -0
- package/build/types/asg.js +2 -0
- package/build/types/asg.js.map +1 -0
- package/build/types/capabilities/even-realities-g1.d.ts +12 -0
- package/build/types/capabilities/even-realities-g1.d.ts.map +1 -0
- package/build/types/capabilities/even-realities-g1.js +55 -0
- package/build/types/capabilities/even-realities-g1.js.map +1 -0
- package/build/types/capabilities/even-realities-g2.d.ts +12 -0
- package/build/types/capabilities/even-realities-g2.d.ts.map +1 -0
- package/build/types/capabilities/even-realities-g2.js +75 -0
- package/build/types/capabilities/even-realities-g2.js.map +1 -0
- package/build/types/capabilities/mentra-display.d.ts +12 -0
- package/build/types/capabilities/mentra-display.d.ts.map +1 -0
- package/build/types/capabilities/mentra-display.js +63 -0
- package/build/types/capabilities/mentra-display.js.map +1 -0
- package/build/types/capabilities/mentra-live.d.ts +12 -0
- package/build/types/capabilities/mentra-live.d.ts.map +1 -0
- package/build/types/capabilities/mentra-live.js +92 -0
- package/build/types/capabilities/mentra-live.js.map +1 -0
- package/build/types/capabilities/none.d.ts +13 -0
- package/build/types/capabilities/none.d.ts.map +1 -0
- package/build/types/capabilities/none.js +65 -0
- package/build/types/capabilities/none.js.map +1 -0
- package/build/types/capabilities/simulated-glasses.d.ts +13 -0
- package/build/types/capabilities/simulated-glasses.d.ts.map +1 -0
- package/build/types/capabilities/simulated-glasses.js +65 -0
- package/build/types/capabilities/simulated-glasses.js.map +1 -0
- package/build/types/capabilities/vuzix-z100.d.ts +12 -0
- package/build/types/capabilities/vuzix-z100.d.ts.map +1 -0
- package/build/types/capabilities/vuzix-z100.js +52 -0
- package/build/types/capabilities/vuzix-z100.js.map +1 -0
- package/build/types/enums.d.ts +40 -0
- package/build/types/enums.d.ts.map +1 -0
- package/build/types/enums.js +44 -0
- package/build/types/enums.js.map +1 -0
- package/build/types/hardware.d.ts +160 -0
- package/build/types/hardware.d.ts.map +1 -0
- package/build/types/hardware.js +36 -0
- package/build/types/hardware.js.map +1 -0
- package/build/types/index.d.ts +11 -0
- package/build/types/index.d.ts.map +1 -0
- package/build/types/index.js +10 -0
- package/build/types/index.js.map +1 -0
- package/build/utils/GlobalEventEmitter.d.ts +10 -0
- package/build/utils/GlobalEventEmitter.d.ts.map +1 -0
- package/build/utils/GlobalEventEmitter.js +13 -0
- package/build/utils/GlobalEventEmitter.js.map +1 -0
- package/build/utils/cloudClient/RnUdpAdapter.d.ts +3 -0
- package/build/utils/cloudClient/RnUdpAdapter.d.ts.map +1 -0
- package/build/utils/cloudClient/RnUdpAdapter.js +41 -0
- package/build/utils/cloudClient/RnUdpAdapter.js.map +1 -0
- package/build/utils/cloudClient/cloudSecureStore.d.ts +3 -0
- package/build/utils/cloudClient/cloudSecureStore.d.ts.map +1 -0
- package/build/utils/cloudClient/cloudSecureStore.js +26 -0
- package/build/utils/cloudClient/cloudSecureStore.js.map +1 -0
- package/build/utils/debouncedPatch.d.ts +6 -0
- package/build/utils/debouncedPatch.d.ts.map +1 -0
- package/build/utils/debouncedPatch.js +25 -0
- package/build/utils/debouncedPatch.js.map +1 -0
- package/build/utils/devLogging.d.ts +26 -0
- package/build/utils/devLogging.d.ts.map +1 -0
- package/build/utils/devLogging.js +116 -0
- package/build/utils/devLogging.js.map +1 -0
- package/build/utils/devMiniappLaunch.d.ts +44 -0
- package/build/utils/devMiniappLaunch.d.ts.map +1 -0
- package/build/utils/devMiniappLaunch.js +52 -0
- package/build/utils/devMiniappLaunch.js.map +1 -0
- package/build/utils/diagnosticContext.d.ts +3 -0
- package/build/utils/diagnosticContext.d.ts.map +1 -0
- package/build/utils/diagnosticContext.js +119 -0
- package/build/utils/diagnosticContext.js.map +1 -0
- package/build/utils/display/composer/ColumnComposer.d.ts +131 -0
- package/build/utils/display/composer/ColumnComposer.d.ts.map +1 -0
- package/build/utils/display/composer/ColumnComposer.js +204 -0
- package/build/utils/display/composer/ColumnComposer.js.map +1 -0
- package/build/utils/display/composer/index.d.ts +9 -0
- package/build/utils/display/composer/index.d.ts.map +1 -0
- package/build/utils/display/composer/index.js +9 -0
- package/build/utils/display/composer/index.js.map +1 -0
- package/build/utils/display/helpers/DisplayHelpers.d.ts +165 -0
- package/build/utils/display/helpers/DisplayHelpers.d.ts.map +1 -0
- package/build/utils/display/helpers/DisplayHelpers.js +312 -0
- package/build/utils/display/helpers/DisplayHelpers.js.map +1 -0
- package/build/utils/display/helpers/ScrollView.d.ts +183 -0
- package/build/utils/display/helpers/ScrollView.d.ts.map +1 -0
- package/build/utils/display/helpers/ScrollView.js +257 -0
- package/build/utils/display/helpers/ScrollView.js.map +1 -0
- package/build/utils/display/helpers/index.d.ts +11 -0
- package/build/utils/display/helpers/index.d.ts.map +1 -0
- package/build/utils/display/helpers/index.js +10 -0
- package/build/utils/display/helpers/index.js.map +1 -0
- package/build/utils/display/index.d.ts +174 -0
- package/build/utils/display/index.d.ts.map +1 -0
- package/build/utils/display/index.js +185 -0
- package/build/utils/display/index.js.map +1 -0
- package/build/utils/display/measurer/TextMeasurer.d.ts +160 -0
- package/build/utils/display/measurer/TextMeasurer.d.ts.map +1 -0
- package/build/utils/display/measurer/TextMeasurer.js +273 -0
- package/build/utils/display/measurer/TextMeasurer.js.map +1 -0
- package/build/utils/display/measurer/index.d.ts +10 -0
- package/build/utils/display/measurer/index.d.ts.map +1 -0
- package/build/utils/display/measurer/index.js +11 -0
- package/build/utils/display/measurer/index.js.map +1 -0
- package/build/utils/display/measurer/script-detection.d.ts +53 -0
- package/build/utils/display/measurer/script-detection.d.ts.map +1 -0
- package/build/utils/display/measurer/script-detection.js +184 -0
- package/build/utils/display/measurer/script-detection.js.map +1 -0
- package/build/utils/display/profiles/g1.d.ts +33 -0
- package/build/utils/display/profiles/g1.d.ts.map +1 -0
- package/build/utils/display/profiles/g1.js +213 -0
- package/build/utils/display/profiles/g1.js.map +1 -0
- package/build/utils/display/profiles/g2.d.ts +13 -0
- package/build/utils/display/profiles/g2.d.ts.map +1 -0
- package/build/utils/display/profiles/g2.js +34 -0
- package/build/utils/display/profiles/g2.js.map +1 -0
- package/build/utils/display/profiles/index.d.ts +12 -0
- package/build/utils/display/profiles/index.d.ts.map +1 -0
- package/build/utils/display/profiles/index.js +15 -0
- package/build/utils/display/profiles/index.js.map +1 -0
- package/build/utils/display/profiles/nex.d.ts +10 -0
- package/build/utils/display/profiles/nex.d.ts.map +1 -0
- package/build/utils/display/profiles/nex.js +150 -0
- package/build/utils/display/profiles/nex.js.map +1 -0
- package/build/utils/display/profiles/types.d.ts +103 -0
- package/build/utils/display/profiles/types.d.ts.map +1 -0
- package/build/utils/display/profiles/types.js +2 -0
- package/build/utils/display/profiles/types.js.map +1 -0
- package/build/utils/display/profiles/z100.d.ts +33 -0
- package/build/utils/display/profiles/z100.d.ts.map +1 -0
- package/build/utils/display/profiles/z100.js +182 -0
- package/build/utils/display/profiles/z100.js.map +1 -0
- package/build/utils/display/scene/degrade.d.ts +25 -0
- package/build/utils/display/scene/degrade.d.ts.map +1 -0
- package/build/utils/display/scene/degrade.js +64 -0
- package/build/utils/display/scene/degrade.js.map +1 -0
- package/build/utils/display/scene/differ.d.ts +38 -0
- package/build/utils/display/scene/differ.d.ts.map +1 -0
- package/build/utils/display/scene/differ.js +107 -0
- package/build/utils/display/scene/differ.js.map +1 -0
- package/build/utils/display/scene/index.d.ts +10 -0
- package/build/utils/display/scene/index.d.ts.map +1 -0
- package/build/utils/display/scene/index.js +6 -0
- package/build/utils/display/scene/index.js.map +1 -0
- package/build/utils/display/scene/process.d.ts +35 -0
- package/build/utils/display/scene/process.d.ts.map +1 -0
- package/build/utils/display/scene/process.js +187 -0
- package/build/utils/display/scene/process.js.map +1 -0
- package/build/utils/display/scene/store.d.ts +48 -0
- package/build/utils/display/scene/store.d.ts.map +1 -0
- package/build/utils/display/scene/store.js +0 -0
- package/build/utils/display/scene/store.js.map +1 -0
- package/build/utils/display/scene/types.d.ts +120 -0
- package/build/utils/display/scene/types.d.ts.map +1 -0
- package/build/utils/display/scene/types.js +0 -0
- package/build/utils/display/scene/types.js.map +1 -0
- package/build/utils/display/wrapper/TextWrapper.d.ts +102 -0
- package/build/utils/display/wrapper/TextWrapper.d.ts.map +1 -0
- package/build/utils/display/wrapper/TextWrapper.js +471 -0
- package/build/utils/display/wrapper/TextWrapper.js.map +1 -0
- package/build/utils/display/wrapper/index.d.ts +12 -0
- package/build/utils/display/wrapper/index.d.ts.map +1 -0
- package/build/utils/display/wrapper/index.js +12 -0
- package/build/utils/display/wrapper/index.js.map +1 -0
- package/build/utils/display/wrapper/types.d.ts +75 -0
- package/build/utils/display/wrapper/types.d.ts.map +1 -0
- package/build/utils/display/wrapper/types.js +11 -0
- package/build/utils/display/wrapper/types.js.map +1 -0
- package/build/utils/e2eMetrics.d.ts +6 -0
- package/build/utils/e2eMetrics.d.ts.map +1 -0
- package/build/utils/e2eMetrics.js +27 -0
- package/build/utils/e2eMetrics.js.map +1 -0
- package/build/utils/hardware/hardware.d.ts +42 -0
- package/build/utils/hardware/hardware.d.ts.map +1 -0
- package/build/utils/hardware/hardware.js +127 -0
- package/build/utils/hardware/hardware.js.map +1 -0
- package/build/utils/hardware/index.d.ts +2 -0
- package/build/utils/hardware/index.d.ts.map +1 -0
- package/build/utils/hardware/index.js +2 -0
- package/build/utils/hardware/index.js.map +1 -0
- package/build/utils/miniappGlobals.d.ts +60 -0
- package/build/utils/miniappGlobals.d.ts.map +1 -0
- package/build/utils/miniappGlobals.js +224 -0
- package/build/utils/miniappGlobals.js.map +1 -0
- package/build/utils/permissions/MediaLibraryPermissions.d.ts +45 -0
- package/build/utils/permissions/MediaLibraryPermissions.d.ts.map +1 -0
- package/build/utils/permissions/MediaLibraryPermissions.js +145 -0
- package/build/utils/permissions/MediaLibraryPermissions.js.map +1 -0
- package/build/utils/permissions/galleryDisplayName.d.ts +8 -0
- package/build/utils/permissions/galleryDisplayName.d.ts.map +1 -0
- package/build/utils/permissions/galleryDisplayName.js +25 -0
- package/build/utils/permissions/galleryDisplayName.js.map +1 -0
- package/build/utils/storage/index.d.ts +3 -0
- package/build/utils/storage/index.d.ts.map +1 -0
- package/build/utils/storage/index.js +3 -0
- package/build/utils/storage/index.js.map +1 -0
- package/build/utils/storage/storage.d.ts +24 -0
- package/build/utils/storage/storage.d.ts.map +1 -0
- package/build/utils/storage/storage.js +85 -0
- package/build/utils/storage/storage.js.map +1 -0
- package/build/utils/storage/zip.d.ts +3 -0
- package/build/utils/storage/zip.d.ts.map +1 -0
- package/build/utils/storage/zip.js +14 -0
- package/build/utils/storage/zip.js.map +1 -0
- package/build/utils/timers/index.d.ts +3 -0
- package/build/utils/timers/index.d.ts.map +1 -0
- package/build/utils/timers/index.js +3 -0
- package/build/utils/timers/index.js.map +1 -0
- package/build/utils/timers/timers.d.ts +9 -0
- package/build/utils/timers/timers.d.ts.map +1 -0
- package/build/utils/timers/timers.js +105 -0
- package/build/utils/timers/timers.js.map +1 -0
- package/package.json +120 -0
- package/src/devtools.ts +13 -0
- package/src/engine.ts +173 -0
- package/src/facades/dev.ts +198 -0
- package/src/facades/display.ts +17 -0
- package/src/facades/displayMirror.ts +33 -0
- package/src/facades/gallery.ts +69 -0
- package/src/facades/glasses.ts +206 -0
- package/src/facades/glassesSettings.ts +56 -0
- package/src/facades/glassesWifi.ts +68 -0
- package/src/facades/miniapps.ts +55 -0
- package/src/facades/notifications.ts +15 -0
- package/src/facades/ota.ts +174 -0
- package/src/facades/pairing.ts +329 -0
- package/src/facades/permissions.ts +165 -0
- package/src/facades/phoneNotifications.ts +50 -0
- package/src/facades/reports.ts +185 -0
- package/src/facades/session.ts +55 -0
- package/src/facades/settings.ts +57 -0
- package/src/facades/speech.ts +38 -0
- package/src/index.ts +191 -0
- package/src/internal.ts +159 -0
- package/src/runtime/bootstrap.ts +118 -0
- package/src/runtime/config.ts +147 -0
- package/src/runtime/streamConfig.ts +34 -0
- package/src/services/AppRegistry.ts +1190 -0
- package/src/services/AudioCloudUplink.ts +50 -0
- package/src/services/AudioPlaybackService.ts +813 -0
- package/src/services/AutomaticReportResult.ts +48 -0
- package/src/services/BlobStore.ts +746 -0
- package/src/services/CaptionsTesterReportService.ts +107 -0
- package/src/services/CloudAudioSubscriptionSync.ts +41 -0
- package/src/services/CloudClientService.ts +689 -0
- package/src/services/CloudTranscriptE2EMetrics.ts +27 -0
- package/src/services/ConnectionCoordinator.ts +65 -0
- package/src/services/DevServerBridge.ts +332 -0
- package/src/services/DeviceEventRouter.ts +238 -0
- package/src/services/DeviceStoreHydration.ts +130 -0
- package/src/services/DisplayProcessor.ts +775 -0
- package/src/services/GlassesReadiness.ts +103 -0
- package/src/services/GlassesSettingsSync.ts +134 -0
- package/src/services/GlassesStatusProjection.ts +73 -0
- package/src/services/HeadingService.ts +98 -0
- package/src/services/LocalDisplayManager.ts +703 -0
- package/src/services/LocalMiniappRuntime.ts +4213 -0
- package/src/services/LocalSttFallbackCoordinator.ts +147 -0
- package/src/services/MentraJSCrashController.ts +189 -0
- package/src/services/MentraJSCrashloopReportService.ts +66 -0
- package/src/services/MentraJSLogPipeline.ts +166 -0
- package/src/services/MentraJSRouter.ts +557 -0
- package/src/services/MentraUIRouter.ts +244 -0
- package/src/services/MicStateCoordinator.ts +94 -0
- package/src/services/MiniappEngine.ts +143 -0
- package/src/services/MiniappLauncher.ts +340 -0
- package/src/services/MiniappRunningRegistry.ts +57 -0
- package/src/services/NativeHttpResponse.ts +6 -0
- package/src/services/NavigationHandlers.ts +423 -0
- package/src/services/NavigationService.ts +731 -0
- package/src/services/NotificationsEmitter.ts +48 -0
- package/src/services/OfflineSpeechModelService.ts +168 -0
- package/src/services/OtaInstallCoordinator.ts +1205 -0
- package/src/services/OtaService.ts +83 -0
- package/src/services/OtaUpdateCheckService.ts +386 -0
- package/src/services/PairingIdentity.ts +154 -0
- package/src/services/PhoneCalendarHelpers.ts +212 -0
- package/src/services/PhoneCalendarService.ts +42 -0
- package/src/services/PhoneCameraFovCoordinator.ts +195 -0
- package/src/services/PhoneLocationService.ts +122 -0
- package/src/services/PhoneNotificationsSync.ts +44 -0
- package/src/services/PhonePhotoCoordinator.ts +409 -0
- package/src/services/PhoneStreamCoordinator.ts +777 -0
- package/src/services/PhoneVideoCoordinator.ts +189 -0
- package/src/services/STTModelManager.ts +360 -0
- package/src/services/SceneRenderer.ts +292 -0
- package/src/services/SentenceTtsPipeline.ts +106 -0
- package/src/services/StreamLifecycleController.ts +213 -0
- package/src/services/TTSModelManager.ts +466 -0
- package/src/services/TranscriptionRouting.ts +37 -0
- package/src/services/WebviewBridge.ts +50 -0
- package/src/services/asg/GalleryMediaIntegrityReportService.ts +70 -0
- package/src/services/asg/asgCameraApi.ts +1695 -0
- package/src/services/asg/cameraRollExportCoordinator.ts +627 -0
- package/src/services/asg/cameraRollExportLedger.ts +122 -0
- package/src/services/asg/galleryMediaValidation.ts +183 -0
- package/src/services/asg/galleryNotices.ts +61 -0
- package/src/services/asg/galleryPathMigration.ts +22 -0
- package/src/services/asg/gallerySettingsService.ts +68 -0
- package/src/services/asg/gallerySyncNotifications.ts +236 -0
- package/src/services/asg/gallerySyncService.ts +2269 -0
- package/src/services/asg/galleryTransferLedger.ts +312 -0
- package/src/services/asg/localNetworkTransport.ts +173 -0
- package/src/services/asg/localStorageService.ts +652 -0
- package/src/services/asg/mediaProcessingQueue.ts +518 -0
- package/src/services/asgOtaVersionUrl.ts +41 -0
- package/src/services/blobPaths.ts +86 -0
- package/src/services/cloudStreamApi.ts +154 -0
- package/src/services/gallerySyncClock.ts +39 -0
- package/src/services/glassesClockSync.ts +115 -0
- package/src/services/manifestVersionGate.ts +43 -0
- package/src/services/mentraUiShim.ts +366 -0
- package/src/services/navigation/roadNameResolver.ts +112 -0
- package/src/services/navigation/routesApiCodec.ts +69 -0
- package/src/services/otaDisplayState.ts +115 -0
- package/src/services/otaInstallPolicy.ts +106 -0
- package/src/services/otaLegacyMapping.ts +71 -0
- package/src/services/slimStreamStatus.ts +28 -0
- package/src/stores/apps.ts +614 -0
- package/src/stores/bluetoothSettingKeys.ts +36 -0
- package/src/stores/cloudClientStatus.ts +37 -0
- package/src/stores/connection.ts +69 -0
- package/src/stores/core.ts +32 -0
- package/src/stores/display.ts +121 -0
- package/src/stores/gallerySync.ts +380 -0
- package/src/stores/glasses.ts +309 -0
- package/src/stores/settings.ts +1001 -0
- package/src/types/applet.ts +112 -0
- package/src/types/asg.ts +58 -0
- package/src/types/capabilities/even-realities-g1.ts +67 -0
- package/src/types/capabilities/even-realities-g2.ts +88 -0
- package/src/types/capabilities/mentra-display.ts +75 -0
- package/src/types/capabilities/mentra-live.ts +103 -0
- package/src/types/capabilities/none.ts +76 -0
- package/src/types/capabilities/simulated-glasses.ts +76 -0
- package/src/types/capabilities/vuzix-z100.ts +64 -0
- package/src/types/enums.ts +43 -0
- package/src/types/hardware.ts +203 -0
- package/src/types/index.ts +37 -0
- package/src/utils/GlobalEventEmitter.ts +14 -0
- package/src/utils/cloudClient/RnUdpAdapter.ts +47 -0
- package/src/utils/cloudClient/cloudSecureStore.ts +28 -0
- package/src/utils/debouncedPatch.ts +28 -0
- package/src/utils/devLogging.ts +140 -0
- package/src/utils/devMiniappLaunch.ts +68 -0
- package/src/utils/diagnosticContext.ts +155 -0
- package/src/utils/display/composer/ColumnComposer.ts +285 -0
- package/src/utils/display/composer/index.ts +15 -0
- package/src/utils/display/helpers/DisplayHelpers.ts +413 -0
- package/src/utils/display/helpers/ScrollView.ts +337 -0
- package/src/utils/display/helpers/index.ts +14 -0
- package/src/utils/display/index.ts +273 -0
- package/src/utils/display/measurer/TextMeasurer.ts +346 -0
- package/src/utils/display/measurer/index.ts +21 -0
- package/src/utils/display/measurer/script-detection.ts +218 -0
- package/src/utils/display/profiles/g1.ts +236 -0
- package/src/utils/display/profiles/g2.ts +39 -0
- package/src/utils/display/profiles/index.ts +28 -0
- package/src/utils/display/profiles/nex.ts +166 -0
- package/src/utils/display/profiles/types.ts +132 -0
- package/src/utils/display/profiles/z100.ts +198 -0
- package/src/utils/display/scene/degrade.ts +80 -0
- package/src/utils/display/scene/differ.ts +128 -0
- package/src/utils/display/scene/index.ts +21 -0
- package/src/utils/display/scene/process.ts +214 -0
- package/src/utils/display/scene/store.ts +0 -0
- package/src/utils/display/scene/types.ts +0 -0
- package/src/utils/display/wrapper/TextWrapper.ts +546 -0
- package/src/utils/display/wrapper/index.ts +15 -0
- package/src/utils/display/wrapper/types.ts +102 -0
- package/src/utils/e2eMetrics.ts +30 -0
- package/src/utils/hardware/hardware.ts +166 -0
- package/src/utils/hardware/index.ts +1 -0
- package/src/utils/miniappGlobals.ts +260 -0
- package/src/utils/permissions/MediaLibraryPermissions.ts +161 -0
- package/src/utils/permissions/galleryDisplayName.ts +28 -0
- package/src/utils/storage/index.ts +2 -0
- package/src/utils/storage/storage.ts +101 -0
- package/src/utils/storage/zip.ts +13 -0
- package/src/utils/timers/index.ts +2 -0
- package/src/utils/timers/timers.ts +139 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OTA service — engine-owned. Subscribes to the glasses' OTA BLE events and projects
|
|
3
|
+
* them into the engine glasses store (otaStatus / otaProgress), so
|
|
4
|
+
* the OTA read surface works for ANY host — not just the first-party Mentra app, where
|
|
5
|
+
* these handlers used to live in MantleManager.
|
|
6
|
+
*
|
|
7
|
+
* This is the inbound projection half of `engine.ota` (read/observe). The install
|
|
8
|
+
* ORCHESTRATION (startOtaUpdate/poll/ping) is host-side for now — Phase 2 moves it here
|
|
9
|
+
* behind `engine.ota.{check,install,retry}` (bootloop-risk; needs on-device verification).
|
|
10
|
+
*
|
|
11
|
+
* Started by `engine.start()`. Idempotent.
|
|
12
|
+
*/
|
|
13
|
+
import BluetoothSdk from "@mentra/bluetooth-sdk/internal"
|
|
14
|
+
import type {OtaStatus} from "@mentra/bluetooth-sdk/internal"
|
|
15
|
+
import GlobalEventEmitter from "../utils/GlobalEventEmitter"
|
|
16
|
+
import {useGlassesStore} from "../stores/glasses"
|
|
17
|
+
import {handleOtaClockSkewFromGlasses} from "./glassesClockSync"
|
|
18
|
+
import {
|
|
19
|
+
legacyOtaProgressFromOtaStatusEvent,
|
|
20
|
+
normalizeOtaStatusEvent,
|
|
21
|
+
otaStatusFromNormalized,
|
|
22
|
+
} from "./otaLegacyMapping"
|
|
23
|
+
|
|
24
|
+
let subs: Array<{remove: () => void}> = []
|
|
25
|
+
|
|
26
|
+
export function startOtaService(): void {
|
|
27
|
+
if (subs.length) return
|
|
28
|
+
|
|
29
|
+
// MTK firmware update finished (self power-cycle path).
|
|
30
|
+
subs.push(
|
|
31
|
+
BluetoothSdk.addListener("mtk_update_complete", (event) => {
|
|
32
|
+
GlobalEventEmitter.emit("mtk_update_complete", {message: event.message, timestamp: event.timestamp})
|
|
33
|
+
}),
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
// Glasses acknowledged the install start.
|
|
37
|
+
subs.push(
|
|
38
|
+
BluetoothSdk.addListener("ota_start_ack", (event) => {
|
|
39
|
+
GlobalEventEmitter.emit("ota_start_ack", {timestamp: event.timestamp})
|
|
40
|
+
}),
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
// Install progress / lifecycle. Updates both the new (otaStatus) and the legacy
|
|
44
|
+
// (otaProgress) store shapes; auto-fixes clock skew on the relevant failures.
|
|
45
|
+
subs.push(
|
|
46
|
+
BluetoothSdk.addListener("ota_status", (event) => {
|
|
47
|
+
const normalized = normalizeOtaStatusEvent(event as Record<string, unknown>)
|
|
48
|
+
const status: OtaStatus = otaStatusFromNormalized(normalized)
|
|
49
|
+
useGlassesStore.getState().setOtaStatus(status)
|
|
50
|
+
// Emit before legacy progress: setOtaProgress can throw (e.g. JSON.stringify in store);
|
|
51
|
+
// native logs would still show while RN UI would stay on "Starting update…".
|
|
52
|
+
GlobalEventEmitter.emit("ota_status", status)
|
|
53
|
+
try {
|
|
54
|
+
useGlassesStore.getState().setOtaProgress(legacyOtaProgressFromOtaStatusEvent(normalized))
|
|
55
|
+
} catch (err) {
|
|
56
|
+
console.warn("OTA: ota_status legacy otaProgress mapping failed", err)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (status.status === "failed") {
|
|
60
|
+
const raw = event as Record<string, unknown>
|
|
61
|
+
const glassesTimeMs = Number(raw.glasses_time_ms ?? raw.glassesTimeMs ?? 0) || undefined
|
|
62
|
+
const errorCode = normalized.error_message
|
|
63
|
+
if (
|
|
64
|
+
errorCode === "clock_skew" ||
|
|
65
|
+
(errorCode === "ssl_error" && typeof glassesTimeMs === "number" && Number.isFinite(glassesTimeMs))
|
|
66
|
+
) {
|
|
67
|
+
handleOtaClockSkewFromGlasses(errorCode, glassesTimeMs).catch((err: unknown) => {
|
|
68
|
+
console.warn("OTA: clock skew auto-fix failed", err)
|
|
69
|
+
})
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (status.status === "complete" || status.status === "failed") {
|
|
74
|
+
useGlassesStore.getState().setOtaUpdateAvailable(null)
|
|
75
|
+
}
|
|
76
|
+
}),
|
|
77
|
+
)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export function stopOtaService(): void {
|
|
81
|
+
subs.forEach((s) => s.remove())
|
|
82
|
+
subs = []
|
|
83
|
+
}
|
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
import BluetoothSdk from "@mentra/bluetooth-sdk/internal"
|
|
2
|
+
import type {OtaUpdateInfo} from "@mentra/bluetooth-sdk/internal"
|
|
3
|
+
import {getGlassesSystemTimeMs, isGlassesConnected, useGlassesStore, waitForGlassesState} from "../stores/glasses"
|
|
4
|
+
import {maybeFixGlassesClockFromVersionInfo} from "./glassesClockSync"
|
|
5
|
+
import {getAsgOtaVersionUrl} from "./asgOtaVersionUrl"
|
|
6
|
+
|
|
7
|
+
export interface VersionInfo {
|
|
8
|
+
versionCode: number
|
|
9
|
+
versionName: string
|
|
10
|
+
downloadUrl: string
|
|
11
|
+
apkSize: number
|
|
12
|
+
sha256: string
|
|
13
|
+
releaseNotes: string
|
|
14
|
+
isRequired?: boolean
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface MtkPatch {
|
|
18
|
+
start_firmware: string
|
|
19
|
+
end_firmware: string
|
|
20
|
+
url: string
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface BesFirmware {
|
|
24
|
+
version: string
|
|
25
|
+
url: string
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface VersionJson {
|
|
29
|
+
apps?: {
|
|
30
|
+
[packageName: string]: VersionInfo
|
|
31
|
+
}
|
|
32
|
+
mtk_patches?: MtkPatch[]
|
|
33
|
+
bes_firmware?: BesFirmware
|
|
34
|
+
versionCode?: number
|
|
35
|
+
versionName?: string
|
|
36
|
+
downloadUrl?: string
|
|
37
|
+
apkSize?: number
|
|
38
|
+
sha256?: string
|
|
39
|
+
releaseNotes?: string
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface OtaCheckResult {
|
|
43
|
+
hasCheckCompleted: boolean
|
|
44
|
+
updateAvailable: boolean
|
|
45
|
+
latestVersionInfo: VersionInfo | null
|
|
46
|
+
updates: string[]
|
|
47
|
+
mtkPatch: MtkPatch | null
|
|
48
|
+
besVersion: string | null
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export type OtaCheckSkippedReason = "disconnected" | "missing_build"
|
|
52
|
+
|
|
53
|
+
export interface OtaCheckCurrentGlassesResult extends OtaCheckResult {
|
|
54
|
+
updateInfo: OtaUpdateInfo | null
|
|
55
|
+
isRequired: boolean
|
|
56
|
+
skippedReason?: OtaCheckSkippedReason
|
|
57
|
+
manifestUrl?: string
|
|
58
|
+
buildNumber?: string
|
|
59
|
+
mtkFirmwareVersion?: string
|
|
60
|
+
besFirmwareVersion?: string
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export interface OtaCheckCurrentGlassesOptions {
|
|
64
|
+
waitForBuildNumberMs?: number
|
|
65
|
+
waitForBesVersionMs?: number
|
|
66
|
+
waitForMtkVersionMs?: number
|
|
67
|
+
refreshVersionInfo?: boolean
|
|
68
|
+
fixClockBeforeCheck?: boolean
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function emptyCheckResult(skippedReason?: OtaCheckSkippedReason): OtaCheckCurrentGlassesResult {
|
|
72
|
+
return {
|
|
73
|
+
hasCheckCompleted: false,
|
|
74
|
+
updateAvailable: false,
|
|
75
|
+
latestVersionInfo: null,
|
|
76
|
+
updates: [],
|
|
77
|
+
mtkPatch: null,
|
|
78
|
+
besVersion: null,
|
|
79
|
+
updateInfo: null,
|
|
80
|
+
isRequired: true,
|
|
81
|
+
skippedReason,
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function glassesConnectedNow(): boolean {
|
|
86
|
+
return isGlassesConnected(useGlassesStore.getState().connection)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export async function fetchVersionInfo(url: string): Promise<VersionJson | null> {
|
|
90
|
+
try {
|
|
91
|
+
const response = await fetch(url)
|
|
92
|
+
if (!response.ok) {
|
|
93
|
+
console.error("Failed to fetch version info:", response.status)
|
|
94
|
+
return null
|
|
95
|
+
}
|
|
96
|
+
return await response.json()
|
|
97
|
+
} catch (error) {
|
|
98
|
+
console.error("OTA: Error fetching version info:", error)
|
|
99
|
+
return null
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export function checkVersionUpdateAvailable(
|
|
104
|
+
currentBuildNumber: string | undefined,
|
|
105
|
+
versionJson: VersionJson | null,
|
|
106
|
+
): boolean {
|
|
107
|
+
if (!currentBuildNumber || !versionJson) {
|
|
108
|
+
return false
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const currentVersion = parseInt(currentBuildNumber, 10)
|
|
112
|
+
if (isNaN(currentVersion)) {
|
|
113
|
+
return false
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
let serverVersion: number | undefined
|
|
117
|
+
|
|
118
|
+
if (versionJson.apps?.["com.mentra.asg_client"]) {
|
|
119
|
+
serverVersion = versionJson.apps["com.mentra.asg_client"].versionCode
|
|
120
|
+
} else if (versionJson.versionCode) {
|
|
121
|
+
serverVersion = versionJson.versionCode
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if (!serverVersion || isNaN(serverVersion)) {
|
|
125
|
+
return false
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return serverVersion > currentVersion
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export function getLatestVersionInfo(versionJson: VersionJson | null): VersionInfo | null {
|
|
132
|
+
if (!versionJson) {
|
|
133
|
+
return null
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (versionJson.apps?.["com.mentra.asg_client"]) {
|
|
137
|
+
return versionJson.apps["com.mentra.asg_client"]
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (versionJson.versionCode) {
|
|
141
|
+
return {
|
|
142
|
+
versionCode: versionJson.versionCode,
|
|
143
|
+
versionName: versionJson.versionName || "",
|
|
144
|
+
downloadUrl: versionJson.downloadUrl || "",
|
|
145
|
+
apkSize: versionJson.apkSize || 0,
|
|
146
|
+
sha256: versionJson.sha256 || "",
|
|
147
|
+
releaseNotes: versionJson.releaseNotes || "",
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return null
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
export function findMatchingMtkPatch(
|
|
155
|
+
patches: MtkPatch[] | undefined,
|
|
156
|
+
currentVersion: string | undefined,
|
|
157
|
+
): MtkPatch | null {
|
|
158
|
+
if (!patches || !currentVersion) {
|
|
159
|
+
return null
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
return (
|
|
163
|
+
patches.find((patch) => {
|
|
164
|
+
if (patch.start_firmware === currentVersion) {
|
|
165
|
+
return true
|
|
166
|
+
}
|
|
167
|
+
const serverDate = patch.start_firmware.includes("_")
|
|
168
|
+
? patch.start_firmware.split("_").pop()
|
|
169
|
+
: patch.start_firmware
|
|
170
|
+
return serverDate === currentVersion
|
|
171
|
+
}) || null
|
|
172
|
+
)
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export function checkBesUpdate(besFirmware: BesFirmware | undefined, currentVersion: string | undefined): boolean {
|
|
176
|
+
if (!besFirmware) {
|
|
177
|
+
return false
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
if (!currentVersion) {
|
|
181
|
+
console.log(`📱 BES current version unknown - assuming update needed (server: ${besFirmware.version})`)
|
|
182
|
+
return true
|
|
183
|
+
}
|
|
184
|
+
return compareVersions(besFirmware.version, currentVersion) > 0
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
function compareVersions(version1: string, version2: string): number {
|
|
188
|
+
if (version1.includes(".") && version2.includes(".")) {
|
|
189
|
+
const parts1 = version1.split(".")
|
|
190
|
+
const parts2 = version2.split(".")
|
|
191
|
+
const maxLen = Math.max(parts1.length, parts2.length)
|
|
192
|
+
|
|
193
|
+
for (let i = 0; i < maxLen; i++) {
|
|
194
|
+
const v1 = i < parts1.length ? parseInt(parts1[i], 10) : 0
|
|
195
|
+
const v2 = i < parts2.length ? parseInt(parts2[i], 10) : 0
|
|
196
|
+
if (v1 !== v2) {
|
|
197
|
+
return v1 - v2
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return 0
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
return version1.localeCompare(version2)
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export async function checkForOtaUpdate(
|
|
207
|
+
otaVersionUrl: string,
|
|
208
|
+
currentBuildNumber: string,
|
|
209
|
+
currentMtkVersion?: string,
|
|
210
|
+
currentBesVersion?: string,
|
|
211
|
+
): Promise<OtaCheckResult> {
|
|
212
|
+
try {
|
|
213
|
+
console.log("OTA: Checking for OTA update - URL: " + otaVersionUrl + ", current build: " + currentBuildNumber)
|
|
214
|
+
const versionJson = await fetchVersionInfo(otaVersionUrl)
|
|
215
|
+
const latestVersionInfo = getLatestVersionInfo(versionJson)
|
|
216
|
+
|
|
217
|
+
const apkUpdateAvailable = checkVersionUpdateAvailable(currentBuildNumber, versionJson)
|
|
218
|
+
console.log(`OTA: APK update available: ${apkUpdateAvailable} (current: ${currentBuildNumber})`)
|
|
219
|
+
|
|
220
|
+
const mtkPatch = findMatchingMtkPatch(versionJson?.mtk_patches, currentMtkVersion)
|
|
221
|
+
const mtkUpdateAvailable = mtkPatch !== null
|
|
222
|
+
if (!currentMtkVersion && versionJson?.mtk_patches?.length) {
|
|
223
|
+
console.log(`OTA: MTK current version unknown - skipping MTK patch check`)
|
|
224
|
+
}
|
|
225
|
+
console.log(
|
|
226
|
+
`OTA: MTK patch available: ${mtkUpdateAvailable ? "yes" : "no"} (current MTK: ${currentMtkVersion || "unknown"})`,
|
|
227
|
+
)
|
|
228
|
+
|
|
229
|
+
const besUpdateAvailable = checkBesUpdate(versionJson?.bes_firmware, currentBesVersion)
|
|
230
|
+
console.log(`OTA: BES update available: ${besUpdateAvailable} (current BES: ${currentBesVersion || "unknown"})`)
|
|
231
|
+
|
|
232
|
+
const updates: string[] = []
|
|
233
|
+
if (apkUpdateAvailable) updates.push("apk")
|
|
234
|
+
if (mtkUpdateAvailable) updates.push("mtk")
|
|
235
|
+
if (besUpdateAvailable) updates.push("bes")
|
|
236
|
+
|
|
237
|
+
console.log(`OTA: OTA check result - updates available: ${updates.length > 0}, updates: [${updates.join(", ")}]`)
|
|
238
|
+
|
|
239
|
+
return {
|
|
240
|
+
hasCheckCompleted: true,
|
|
241
|
+
updateAvailable: updates.length > 0,
|
|
242
|
+
latestVersionInfo,
|
|
243
|
+
updates,
|
|
244
|
+
mtkPatch,
|
|
245
|
+
besVersion: versionJson?.bes_firmware?.version || null,
|
|
246
|
+
}
|
|
247
|
+
} catch (error) {
|
|
248
|
+
console.error("Error checking for OTA update:", error)
|
|
249
|
+
return {
|
|
250
|
+
hasCheckCompleted: false,
|
|
251
|
+
updateAvailable: false,
|
|
252
|
+
latestVersionInfo: null,
|
|
253
|
+
updates: [],
|
|
254
|
+
mtkPatch: null,
|
|
255
|
+
besVersion: null,
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
export async function checkCurrentGlassesForUpdate(
|
|
261
|
+
options: OtaCheckCurrentGlassesOptions = {},
|
|
262
|
+
): Promise<OtaCheckCurrentGlassesResult> {
|
|
263
|
+
const {
|
|
264
|
+
waitForBuildNumberMs = 0,
|
|
265
|
+
waitForBesVersionMs = 5000,
|
|
266
|
+
waitForMtkVersionMs = 2000,
|
|
267
|
+
refreshVersionInfo = true,
|
|
268
|
+
fixClockBeforeCheck = true,
|
|
269
|
+
} = options
|
|
270
|
+
|
|
271
|
+
if (!glassesConnectedNow()) {
|
|
272
|
+
return emptyCheckResult("disconnected")
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
if (refreshVersionInfo) {
|
|
276
|
+
void BluetoothSdk.requestVersionInfo().catch((error) => {
|
|
277
|
+
console.warn("OTA: Failed to request version_info from glasses:", error)
|
|
278
|
+
})
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
let buildNumber = useGlassesStore.getState().buildNumber
|
|
282
|
+
if (!buildNumber && waitForBuildNumberMs > 0) {
|
|
283
|
+
await waitForGlassesState("buildNumber", (value) => !!value, waitForBuildNumberMs)
|
|
284
|
+
buildNumber = useGlassesStore.getState().buildNumber
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
if (!buildNumber) {
|
|
288
|
+
return emptyCheckResult("missing_build")
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
if (!glassesConnectedNow()) {
|
|
292
|
+
return emptyCheckResult("disconnected")
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
let besFirmwareVersion = useGlassesStore.getState().besFirmwareVersion
|
|
296
|
+
if (!besFirmwareVersion && waitForBesVersionMs > 0) {
|
|
297
|
+
console.log("OTA: BES version still unknown - waiting up to 5s for it to arrive...")
|
|
298
|
+
await waitForGlassesState("besFirmwareVersion", (value) => !!value, waitForBesVersionMs)
|
|
299
|
+
besFirmwareVersion = useGlassesStore.getState().besFirmwareVersion
|
|
300
|
+
if (besFirmwareVersion) {
|
|
301
|
+
console.log(`OTA: BES version arrived: ${besFirmwareVersion}`)
|
|
302
|
+
} else {
|
|
303
|
+
console.log("OTA: BES version still unknown after extended wait - will assume BES update if published")
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
if (!glassesConnectedNow()) {
|
|
308
|
+
return emptyCheckResult("disconnected")
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
let mtkFirmwareVersion = useGlassesStore.getState().mtkFirmwareVersion
|
|
312
|
+
if (!mtkFirmwareVersion && waitForMtkVersionMs > 0) {
|
|
313
|
+
await waitForGlassesState("mtkFirmwareVersion", (value) => !!value, waitForMtkVersionMs)
|
|
314
|
+
mtkFirmwareVersion = useGlassesStore.getState().mtkFirmwareVersion
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
if (!glassesConnectedNow()) {
|
|
318
|
+
return emptyCheckResult("disconnected")
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
if (fixClockBeforeCheck) {
|
|
322
|
+
const systemTimeMs = getGlassesSystemTimeMs()
|
|
323
|
+
await maybeFixGlassesClockFromVersionInfo(systemTimeMs > 0 ? systemTimeMs : undefined).catch((error) => {
|
|
324
|
+
console.warn("OTA: clock fix attempt failed; continuing OTA check", error)
|
|
325
|
+
})
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
const manifestUrl = getAsgOtaVersionUrl(useGlassesStore.getState().otaVersionUrl, buildNumber)
|
|
329
|
+
const result = await checkForOtaUpdate(manifestUrl, buildNumber, mtkFirmwareVersion, besFirmwareVersion)
|
|
330
|
+
|
|
331
|
+
if (!result.hasCheckCompleted) {
|
|
332
|
+
return {
|
|
333
|
+
...result,
|
|
334
|
+
updateInfo: null,
|
|
335
|
+
isRequired: true,
|
|
336
|
+
manifestUrl,
|
|
337
|
+
buildNumber,
|
|
338
|
+
mtkFirmwareVersion,
|
|
339
|
+
besFirmwareVersion,
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
const mtkUpdatedThisSession = useGlassesStore.getState().mtkUpdatedThisSession
|
|
344
|
+
let filteredUpdates = result.updates
|
|
345
|
+
if (mtkUpdatedThisSession && filteredUpdates.includes("mtk")) {
|
|
346
|
+
console.log("OTA: Filtering out MTK - already updated this session (pending reboot)")
|
|
347
|
+
filteredUpdates = filteredUpdates.filter((update) => update !== "mtk")
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
// Pre-migration parity: an update is only surfaced when the manifest also
|
|
351
|
+
// carries APK version metadata. A firmware-only manifest (mtk_patches /
|
|
352
|
+
// bes_firmware with no APK entry) is therefore dropped here — same as the
|
|
353
|
+
// legacy host check. Loud-log it so the case is visible in the field;
|
|
354
|
+
// surfacing firmware-only updates is a deliberate behavior change to make
|
|
355
|
+
// separately, not silently inside the boundary migration.
|
|
356
|
+
if (filteredUpdates.length > 0 && !result.latestVersionInfo) {
|
|
357
|
+
console.warn(
|
|
358
|
+
`OTA: manifest lists updates [${filteredUpdates.join(", ")}] but has no APK version metadata - ` +
|
|
359
|
+
"reporting no update (legacy behavior)",
|
|
360
|
+
)
|
|
361
|
+
}
|
|
362
|
+
const updateAvailable = filteredUpdates.length > 0 && !!result.latestVersionInfo
|
|
363
|
+
const updateInfo = updateAvailable
|
|
364
|
+
? {
|
|
365
|
+
available: true,
|
|
366
|
+
versionCode: result.latestVersionInfo?.versionCode || 0,
|
|
367
|
+
versionName: result.latestVersionInfo?.versionName || "",
|
|
368
|
+
updates: filteredUpdates,
|
|
369
|
+
totalSize: 0,
|
|
370
|
+
}
|
|
371
|
+
: null
|
|
372
|
+
|
|
373
|
+
useGlassesStore.getState().setOtaUpdateAvailable(updateInfo)
|
|
374
|
+
|
|
375
|
+
return {
|
|
376
|
+
...result,
|
|
377
|
+
updateAvailable,
|
|
378
|
+
updates: filteredUpdates,
|
|
379
|
+
updateInfo,
|
|
380
|
+
isRequired: result.latestVersionInfo?.isRequired !== false,
|
|
381
|
+
manifestUrl,
|
|
382
|
+
buildNumber,
|
|
383
|
+
mtkFirmwareVersion,
|
|
384
|
+
besFirmwareVersion,
|
|
385
|
+
}
|
|
386
|
+
}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PairingIdentity — the pairing-identity lifecycle, reified. The two-phase
|
|
3
|
+
* identity rules (see the pending/default group in stores/settings.ts) exist
|
|
4
|
+
* as a three-state machine over the identity settings keys:
|
|
5
|
+
*
|
|
6
|
+
* none ──markPendingSelection()──▶ pending ──native promotion──▶ paired
|
|
7
|
+
* ▲ │
|
|
8
|
+
* └───────boot demotion────────┘
|
|
9
|
+
*
|
|
10
|
+
* - `none` — no model ever selected: hosts route to model selection.
|
|
11
|
+
* - `pending` — a model was CHOSEN (the one JS-owned identity write, made at
|
|
12
|
+
* scan entry) but pairing never completed: hosts render
|
|
13
|
+
* finish-pairing affordances.
|
|
14
|
+
* - `paired` — the native layer promoted the identity at pairing success
|
|
15
|
+
* (handleDeviceReady) and echoed it down via save_setting:
|
|
16
|
+
* hosts render the device card / connect surfaces.
|
|
17
|
+
*
|
|
18
|
+
* Projection law, mirroring native currentDefaultDevice() on both platforms:
|
|
19
|
+
* `paired` requires default_wearable AND device_name; device_address is
|
|
20
|
+
* optional. Two read-time alignments with the demotion's own write rules:
|
|
21
|
+
* - The simulated device is its own identity (its name mirrors the model at
|
|
22
|
+
* connectSimulated, and the boot demotion never touches it), so a simulated
|
|
23
|
+
* default_wearable projects as `paired` even without a device_name echo.
|
|
24
|
+
* - A non-simulated default_wearable WITHOUT a device_name is the orphan
|
|
25
|
+
* population `demoteOrphanedDefaultWearable` repairs into pending_wearable
|
|
26
|
+
* at boot; the projection already reads it as `pending` (a fresher
|
|
27
|
+
* pending_wearable wins, matching the demotion's latest-selection-wins
|
|
28
|
+
* backfill).
|
|
29
|
+
*
|
|
30
|
+
* JS-initiated identity writes live here and only here — the scan screen
|
|
31
|
+
* (markPendingSelection), the device-event router (promotion retires the
|
|
32
|
+
* pending marker), and the boot demotion (demoteDefaultToPending) invoke
|
|
33
|
+
* these methods instead of writing the raw keys. The router's generic
|
|
34
|
+
* save_setting persistence is the inbound native→JS echo leg, not a
|
|
35
|
+
* JS-initiated write, and stays with the router.
|
|
36
|
+
*/
|
|
37
|
+
import {result as Res, type AsyncResult} from "typesafe-ts"
|
|
38
|
+
|
|
39
|
+
import {useSettingsStore, SETTINGS} from "../stores/settings"
|
|
40
|
+
import {DeviceTypes} from "../types"
|
|
41
|
+
|
|
42
|
+
export type IdentitySnapshot =
|
|
43
|
+
| {kind: "none"}
|
|
44
|
+
| {kind: "pending"; model: string}
|
|
45
|
+
| {kind: "paired"; model: string; name: string; address?: string}
|
|
46
|
+
|
|
47
|
+
// Identity keys hold model/name strings; anything else (legacy null, a stray
|
|
48
|
+
// non-string) reads as absent, matching native currentDefaultDevice()'s
|
|
49
|
+
// blank checks.
|
|
50
|
+
function readIdentityString(key: string): string {
|
|
51
|
+
const value = useSettingsStore.getState().getSetting(key)
|
|
52
|
+
return typeof value === "string" ? value : ""
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** Project the identity settings keys into the lifecycle snapshot. */
|
|
56
|
+
export function projectPairingIdentity(): IdentitySnapshot {
|
|
57
|
+
const model = readIdentityString(SETTINGS.default_wearable.key)
|
|
58
|
+
const name = readIdentityString(SETTINGS.device_name.key)
|
|
59
|
+
|
|
60
|
+
if (model && name) {
|
|
61
|
+
const address = readIdentityString(SETTINGS.device_address.key)
|
|
62
|
+
return address ? {kind: "paired", model, name, address} : {kind: "paired", model, name}
|
|
63
|
+
}
|
|
64
|
+
if (model && model.includes(DeviceTypes.SIMULATED)) {
|
|
65
|
+
return {kind: "paired", model, name: model}
|
|
66
|
+
}
|
|
67
|
+
const pending = readIdentityString(SETTINGS.pending_wearable.key)
|
|
68
|
+
if (pending) return {kind: "pending", model: pending}
|
|
69
|
+
if (model) return {kind: "pending", model}
|
|
70
|
+
return {kind: "none"}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Subscribe to identity changes, deduped on the projected snapshot (same
|
|
75
|
+
* style as glasses.onStatus): the settings store updates on many keys; the
|
|
76
|
+
* callback fires only when the identity snapshot actually changes.
|
|
77
|
+
*/
|
|
78
|
+
export function subscribePairingIdentity(cb: (identity: IdentitySnapshot) => void): () => void {
|
|
79
|
+
let last = JSON.stringify(projectPairingIdentity())
|
|
80
|
+
return useSettingsStore.subscribe(() => {
|
|
81
|
+
const snap = projectPairingIdentity()
|
|
82
|
+
const key = JSON.stringify(snap)
|
|
83
|
+
if (key === last) return
|
|
84
|
+
last = key
|
|
85
|
+
cb(snap)
|
|
86
|
+
})
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Selection: mark the model the user chose as the PENDING wearable (written
|
|
91
|
+
* at scan entry). Promotion to `paired` only ever happens natively at pairing
|
|
92
|
+
* success. The marker persists so an abandoned selection still renders its
|
|
93
|
+
* finish-pairing card after an app restart.
|
|
94
|
+
*/
|
|
95
|
+
export function markPendingSelection(model: string): AsyncResult<void, Error> {
|
|
96
|
+
// Guard the public write-path: an empty/whitespace model would persist a
|
|
97
|
+
// pending identity that renders a blank finish-pairing card.
|
|
98
|
+
const trimmed = typeof model === "string" ? model.trim() : ""
|
|
99
|
+
if (!trimmed) {
|
|
100
|
+
console.warn(`PairingIdentity: ignoring pending selection with empty model (got ${JSON.stringify(model)})`)
|
|
101
|
+
return Res.try_async(async () => {})
|
|
102
|
+
}
|
|
103
|
+
console.log(`PairingIdentity: pending selection -> "${trimmed}"`)
|
|
104
|
+
const result = useSettingsStore.getState().setSetting(SETTINGS.pending_wearable.key, trimmed)
|
|
105
|
+
// setSetting resolves to a Result (never rejects); a persist failure would
|
|
106
|
+
// silently drop the finish-pairing affordance on restart — surface it.
|
|
107
|
+
void Promise.resolve(result).then((r) => {
|
|
108
|
+
if (r.is_error()) console.warn("PairingIdentity: pending selection failed to persist:", r.error)
|
|
109
|
+
})
|
|
110
|
+
return result
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Promotion retires the selection: when the native layer promotes the default
|
|
115
|
+
* wearable at pairing success and its save_setting echo lands, the pending
|
|
116
|
+
* marker has served its purpose. Invoked by DeviceEventRouter for every echo;
|
|
117
|
+
* a no-op for other keys, empty promotions, and an already-clear marker.
|
|
118
|
+
*/
|
|
119
|
+
export async function retirePendingSelectionOnPromotion(echoedKey: string, echoedValue: unknown): Promise<void> {
|
|
120
|
+
if (echoedKey !== SETTINGS.default_wearable.key || !echoedValue) return
|
|
121
|
+
const settings = useSettingsStore.getState()
|
|
122
|
+
const pending = settings.getSetting(SETTINGS.pending_wearable.key)
|
|
123
|
+
if (pending) {
|
|
124
|
+
console.log(`PairingIdentity: promotion "${String(echoedValue)}" retires pending "${pending}"`)
|
|
125
|
+
await settings.setSetting(SETTINGS.pending_wearable.key, "")
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Demotion: turn an orphaned default identity back into a pending selection.
|
|
131
|
+
* The guards (hydration, the native default-device read, link-layer state)
|
|
132
|
+
* live with the boot repair in demoteOrphanedDefaultWearable — this is only
|
|
133
|
+
* the identity write set: backfill the pending marker unless a fresher
|
|
134
|
+
* selection already holds it (the user's LATEST selection wins), then clear
|
|
135
|
+
* the promoted identity triplet.
|
|
136
|
+
*/
|
|
137
|
+
export async function demoteDefaultToPending(model: string): Promise<void> {
|
|
138
|
+
const settings = useSettingsStore.getState()
|
|
139
|
+
// readIdentityString, not raw getSetting: a truthy non-string legacy value
|
|
140
|
+
// must read as absent here too, or the orphaned model is never backfilled
|
|
141
|
+
// while the projection reads the same junk as no pending at all.
|
|
142
|
+
const fresher = readIdentityString(SETTINGS.pending_wearable.key)
|
|
143
|
+
console.log(
|
|
144
|
+
fresher
|
|
145
|
+
? `PairingIdentity: demote "${model}" — fresher pending "${fresher}" kept`
|
|
146
|
+
: `PairingIdentity: demote "${model}" -> pending`,
|
|
147
|
+
)
|
|
148
|
+
if (!fresher) {
|
|
149
|
+
await settings.setSetting(SETTINGS.pending_wearable.key, model)
|
|
150
|
+
}
|
|
151
|
+
await settings.setSetting(SETTINGS.default_wearable.key, "")
|
|
152
|
+
await settings.setSetting(SETTINGS.device_name.key, "")
|
|
153
|
+
await settings.setSetting(SETTINGS.device_address.key, "")
|
|
154
|
+
}
|