@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,579 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LocalDisplayManager
|
|
3
|
+
*
|
|
4
|
+
* Phone-side arbiter for display requests originating from LOCAL miniapps
|
|
5
|
+
* (the @mentra/miniapp SDK). Mirrors the user-facing behavior of the cloud
|
|
6
|
+
* DisplayManager (cloud/packages/cloud/src/services/layout/DisplayManager6.1.ts)
|
|
7
|
+
* for the features that matter on the phone:
|
|
8
|
+
*
|
|
9
|
+
* - boot message ("Starting <AppName>…") with a bounded window
|
|
10
|
+
* - durationMs auto-clear
|
|
11
|
+
* - core-app vs background-app arbitration with a background lock
|
|
12
|
+
*
|
|
13
|
+
* Scope is deliberately local-only. Cloud-originated displays are untouched
|
|
14
|
+
* and may race with local displays during dev; that's acceptable per plan
|
|
15
|
+
* (agents/local-display-manager-plan.md).
|
|
16
|
+
*
|
|
17
|
+
* Display pacing is NOT done here. A JS-side ~300ms throttle used to live in
|
|
18
|
+
* this class, but JS timers (and therefore the throttle's trailing flush) do
|
|
19
|
+
* not fire on schedule while the iOS app is suspended in the background — so
|
|
20
|
+
* under streaming captions, updates accumulated and then flushed in a burst on
|
|
21
|
+
* the next wake. Pacing + last-wins coalescing now live in the native per-device
|
|
22
|
+
* queue (e.g. G2's event-driven EvenHub queue), which drains off the same BLE
|
|
23
|
+
* events that wake the process. This class forwards every request straight
|
|
24
|
+
* through; the native layer collapses redundant frames per display target.
|
|
25
|
+
*
|
|
26
|
+
* The remaining BgTimer use (boot window, durationMs expiry) is timing that
|
|
27
|
+
* does not need sub-second background fidelity.
|
|
28
|
+
*/
|
|
29
|
+
import BluetoothSdk from "@mentra/bluetooth-sdk/internal";
|
|
30
|
+
import displayProcessor from "./DisplayProcessor";
|
|
31
|
+
import { useDisplayStore } from "../stores/display";
|
|
32
|
+
import sceneRenderer from "./SceneRenderer";
|
|
33
|
+
import { isGlassesConnected } from "./GlassesReadiness";
|
|
34
|
+
import { useGlassesStore } from "../stores/glasses";
|
|
35
|
+
import { BgTimer } from "../utils/timers";
|
|
36
|
+
// =============================================================================
|
|
37
|
+
// Constants
|
|
38
|
+
// =============================================================================
|
|
39
|
+
const LOG_TAG = "LOCAL_DISPLAY";
|
|
40
|
+
const BOOT_DURATION_MS = 1500;
|
|
41
|
+
// Mirrors cloud lease for a bg app holding the display. The bg app has to
|
|
42
|
+
// keep driving the display to hold the lock; if it goes quiet and the core
|
|
43
|
+
// app wants the screen, we release.
|
|
44
|
+
const BACKGROUND_LOCK_TIMEOUT_MS = 10_000;
|
|
45
|
+
// Sentinel package name used as the "source" of the system boot message.
|
|
46
|
+
const SYSTEM_BOOT_PKG = "system.boot";
|
|
47
|
+
// =============================================================================
|
|
48
|
+
// LocalDisplayManager
|
|
49
|
+
// =============================================================================
|
|
50
|
+
class LocalDisplayManager {
|
|
51
|
+
static instance = null;
|
|
52
|
+
coreApp = null;
|
|
53
|
+
coreAppDisplay = null;
|
|
54
|
+
currentDisplay = null;
|
|
55
|
+
backgroundLock = null;
|
|
56
|
+
bootingApp = null;
|
|
57
|
+
bootQueue = new Map();
|
|
58
|
+
expiryTimerId = null;
|
|
59
|
+
/** Reconnect-replay subscription state (attachToRuntime). */
|
|
60
|
+
runtimeAttached = false;
|
|
61
|
+
glassesWasConnected = false;
|
|
62
|
+
unsubscribeGlassesStatus = null;
|
|
63
|
+
/** Injectable for tests. */
|
|
64
|
+
now = () => Date.now();
|
|
65
|
+
constructor() { }
|
|
66
|
+
static getInstance() {
|
|
67
|
+
if (!LocalDisplayManager.instance) {
|
|
68
|
+
LocalDisplayManager.instance = new LocalDisplayManager();
|
|
69
|
+
}
|
|
70
|
+
return LocalDisplayManager.instance;
|
|
71
|
+
}
|
|
72
|
+
// ===========================================================================
|
|
73
|
+
// Lifecycle API (called from MiniappHost)
|
|
74
|
+
// ===========================================================================
|
|
75
|
+
/**
|
|
76
|
+
* A new local miniapp just mounted. Start the boot window.
|
|
77
|
+
* Calling this for a different pkg while another is booting cancels the
|
|
78
|
+
* previous boot.
|
|
79
|
+
*/
|
|
80
|
+
onMount(packageName, displayName) {
|
|
81
|
+
console.log(`${LOG_TAG}: onMount(${packageName}, "${displayName}")`);
|
|
82
|
+
// Cancel any in-flight boot for a prior app.
|
|
83
|
+
this.cancelBoot();
|
|
84
|
+
// Snapshot whatever's on the glasses BEFORE the boot text overwrites it.
|
|
85
|
+
// registerApp fires onMount for every spawn — including a background app or
|
|
86
|
+
// a crash-respawn while another app is foreground — so a boot that times out
|
|
87
|
+
// without rendering must put the prior frame back rather than blank it.
|
|
88
|
+
const preBoot = this.currentDisplay;
|
|
89
|
+
// Send the boot message directly (bypass arbitration — this is a system
|
|
90
|
+
// display). Goes through sendNow so scene devices render it as a scene:
|
|
91
|
+
// otherwise every app start would be a legacy→scene transition on the
|
|
92
|
+
// glasses (which costs a blanking clear).
|
|
93
|
+
this.sendNow(SYSTEM_BOOT_PKG, {
|
|
94
|
+
view: "main",
|
|
95
|
+
layout: { layoutType: "text_wall", text: `Starting ${displayName}…` },
|
|
96
|
+
});
|
|
97
|
+
const timerId = BgTimer.setTimeout(() => {
|
|
98
|
+
this.endBoot(/* triggeredByFirstDisplay */ false);
|
|
99
|
+
}, BOOT_DURATION_MS);
|
|
100
|
+
this.bootingApp = {
|
|
101
|
+
packageName,
|
|
102
|
+
displayName,
|
|
103
|
+
startedAt: this.now(),
|
|
104
|
+
timerId,
|
|
105
|
+
preBoot,
|
|
106
|
+
};
|
|
107
|
+
this.bootQueue.clear();
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Mark which miniapp is the "core" (foreground) app. Pass null when no local
|
|
111
|
+
* miniapp is foreground.
|
|
112
|
+
*/
|
|
113
|
+
onCoreAppChange(packageName) {
|
|
114
|
+
if (this.coreApp === packageName)
|
|
115
|
+
return;
|
|
116
|
+
console.log(`${LOG_TAG}: onCoreAppChange(${packageName ?? "null"})`);
|
|
117
|
+
this.coreApp = packageName;
|
|
118
|
+
// No core app means no saved frame to restore on the next unmount.
|
|
119
|
+
// Without this, the previous core's last frame can flicker back onto
|
|
120
|
+
// the glasses when the user-initiated clear is followed by an
|
|
121
|
+
// onUnmount that still finds a populated coreAppDisplay.
|
|
122
|
+
if (packageName === null) {
|
|
123
|
+
this.coreAppDisplay = null;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* A local miniapp is going away. Clean up all state associated with it.
|
|
128
|
+
*/
|
|
129
|
+
onUnmount(packageName) {
|
|
130
|
+
console.log(`${LOG_TAG}: onUnmount(${packageName})`);
|
|
131
|
+
// If this was the booting app, cancel boot.
|
|
132
|
+
if (this.bootingApp?.packageName === packageName) {
|
|
133
|
+
this.cancelBoot();
|
|
134
|
+
}
|
|
135
|
+
this.bootQueue.get(packageName)?.resolve?.({ status: "blocked", reason: "app stopped" });
|
|
136
|
+
this.bootQueue.delete(packageName);
|
|
137
|
+
// Forget the app's retained scenes — nothing left to replay for it.
|
|
138
|
+
sceneRenderer.clearApp(packageName);
|
|
139
|
+
// Release bg lock if this app held it.
|
|
140
|
+
if (this.backgroundLock?.packageName === packageName) {
|
|
141
|
+
this.backgroundLock = null;
|
|
142
|
+
}
|
|
143
|
+
// Clear saved core app display if the core is going away.
|
|
144
|
+
if (this.coreApp === packageName) {
|
|
145
|
+
this.coreAppDisplay = null;
|
|
146
|
+
this.coreApp = null;
|
|
147
|
+
}
|
|
148
|
+
// If this app owned the current on-glasses display, clear it (and maybe
|
|
149
|
+
// restore the core app's display if it still has time left).
|
|
150
|
+
if (this.currentDisplay?.packageName === packageName) {
|
|
151
|
+
this.clearExpiryTimer();
|
|
152
|
+
this.currentDisplay = null;
|
|
153
|
+
this.tryRestoreCoreDisplay();
|
|
154
|
+
if (!this.currentDisplay) {
|
|
155
|
+
// Nothing to restore → clear the glasses.
|
|
156
|
+
this.sendClear();
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// ===========================================================================
|
|
161
|
+
// Display request API (called from LocalMiniappRuntime.handleDisplay)
|
|
162
|
+
// ===========================================================================
|
|
163
|
+
/**
|
|
164
|
+
* A miniapp requested a display. Routes through boot queue, arbitration,
|
|
165
|
+
* and throttle. This is the only public entry point for miniapp display
|
|
166
|
+
* traffic on the local path.
|
|
167
|
+
*
|
|
168
|
+
* `resolve`, when provided (render() requests), is guaranteed to be called
|
|
169
|
+
* exactly once with the request's outcome — including for requests parked in
|
|
170
|
+
* the boot queue (resolved when drained or superseded).
|
|
171
|
+
*/
|
|
172
|
+
request(packageName, payload, resolve) {
|
|
173
|
+
// Dashboard view: pass straight through (no throttle/arbitration). Local
|
|
174
|
+
// dashboard rendering is currently a stub on the phone anyway.
|
|
175
|
+
if (payload.view === "dashboard") {
|
|
176
|
+
this.sendNow(packageName, payload, resolve);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
// During boot, any app's requests go into the queue. If the booting app
|
|
180
|
+
// itself makes its first display call, end boot early and drain.
|
|
181
|
+
if (this.bootingApp) {
|
|
182
|
+
const superseded = this.bootQueue.get(packageName);
|
|
183
|
+
superseded?.resolve?.({ status: "blocked", reason: "superseded by a newer frame" });
|
|
184
|
+
this.bootQueue.set(packageName, { payload, resolve });
|
|
185
|
+
if (this.bootingApp.packageName === packageName) {
|
|
186
|
+
this.endBoot(/* triggeredByFirstDisplay */ true);
|
|
187
|
+
}
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
this.arbitrateAndSend(packageName, payload, resolve);
|
|
191
|
+
}
|
|
192
|
+
// ===========================================================================
|
|
193
|
+
// Internals — arbitration
|
|
194
|
+
// ===========================================================================
|
|
195
|
+
arbitrateAndSend(packageName, payload, resolve) {
|
|
196
|
+
const now = this.now();
|
|
197
|
+
// Expire a stale bg lock before arbitrating.
|
|
198
|
+
if (this.backgroundLock && now > this.backgroundLock.expiresAt) {
|
|
199
|
+
this.backgroundLock = null;
|
|
200
|
+
}
|
|
201
|
+
const isCore = packageName === this.coreApp;
|
|
202
|
+
if (isCore) {
|
|
203
|
+
// Save so we can restore later.
|
|
204
|
+
this.coreAppDisplay = {
|
|
205
|
+
packageName,
|
|
206
|
+
processedEvent: {}, // filled by sendNow
|
|
207
|
+
scene: payload.scene,
|
|
208
|
+
expiresAt: payload.durationMs ? now + payload.durationMs : null,
|
|
209
|
+
};
|
|
210
|
+
// If a bg app holds the lock AND is currently on the glasses, core is
|
|
211
|
+
// blocked. The saved coreAppDisplay surfaces when the bg app expires
|
|
212
|
+
// or unmounts.
|
|
213
|
+
const bgHoldsAndDisplays = this.backgroundLock &&
|
|
214
|
+
this.currentDisplay &&
|
|
215
|
+
this.currentDisplay.packageName === this.backgroundLock.packageName;
|
|
216
|
+
if (bgHoldsAndDisplays) {
|
|
217
|
+
resolve?.({ status: "blocked", reason: "a background app holds the display" });
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
// Core can display. If a bg lock exists but holder isn't actively on
|
|
221
|
+
// the glasses, release it.
|
|
222
|
+
if (this.backgroundLock && !bgHoldsAndDisplays) {
|
|
223
|
+
this.backgroundLock = null;
|
|
224
|
+
}
|
|
225
|
+
this.sendNow(packageName, payload, resolve);
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
// Non-core: this is a background app.
|
|
229
|
+
if (this.backgroundLock && this.backgroundLock.packageName !== packageName) {
|
|
230
|
+
// Another bg app already holds the lock — drop.
|
|
231
|
+
resolve?.({ status: "blocked", reason: "another background app holds the display" });
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
// Acquire or bump the lock.
|
|
235
|
+
if (!this.backgroundLock) {
|
|
236
|
+
this.backgroundLock = {
|
|
237
|
+
packageName,
|
|
238
|
+
acquiredAt: now,
|
|
239
|
+
expiresAt: now + BACKGROUND_LOCK_TIMEOUT_MS,
|
|
240
|
+
lastActiveTime: now,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
this.backgroundLock.lastActiveTime = now;
|
|
245
|
+
this.backgroundLock.expiresAt = now + BACKGROUND_LOCK_TIMEOUT_MS;
|
|
246
|
+
}
|
|
247
|
+
this.sendNow(packageName, payload, resolve);
|
|
248
|
+
}
|
|
249
|
+
// ===========================================================================
|
|
250
|
+
// Internals — send
|
|
251
|
+
// ===========================================================================
|
|
252
|
+
sendNow(packageName, payload, resolve) {
|
|
253
|
+
const expiresAt = payload.durationMs ? this.now() + payload.durationMs : null;
|
|
254
|
+
const view = (payload.view === "dashboard" ? "dashboard" : "main");
|
|
255
|
+
// Scene requests — and legacy layouts a positioning device can render as a
|
|
256
|
+
// scene (sugar, old bundles) — go through the scene pipeline. Everything
|
|
257
|
+
// else stays on the legacy path.
|
|
258
|
+
let sceneElements = payload.scene ?? null;
|
|
259
|
+
if (!sceneElements && payload.layout) {
|
|
260
|
+
const caps = sceneRenderer.currentCapabilities();
|
|
261
|
+
if (caps?.canPosition) {
|
|
262
|
+
sceneElements = sceneRenderer.convertLegacyLayout(payload.layout, caps);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
if (sceneElements) {
|
|
266
|
+
this.sendScene(packageName, view, sceneElements, expiresAt, resolve);
|
|
267
|
+
}
|
|
268
|
+
else if (payload.layout) {
|
|
269
|
+
// This layout bypasses the scene pipeline (clear_view, dashboard_card,
|
|
270
|
+
// unknown types, or a non-positioning device). If this (app, view) had a
|
|
271
|
+
// retained scene, the glasses no longer match it — reset the diff
|
|
272
|
+
// baseline so the next render() repaints from empty instead of skipping
|
|
273
|
+
// "unchanged" elements.
|
|
274
|
+
sceneRenderer.resetBaseline(packageName, view);
|
|
275
|
+
const rawEvent = {
|
|
276
|
+
view: payload.view ?? "main",
|
|
277
|
+
layout: payload.layout,
|
|
278
|
+
};
|
|
279
|
+
if (payload.durationMs !== undefined) {
|
|
280
|
+
rawEvent.durationMs = payload.durationMs;
|
|
281
|
+
}
|
|
282
|
+
this.sendToNative(packageName, rawEvent, expiresAt);
|
|
283
|
+
resolve?.({ status: "displayed" });
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
// A scene payload on a device with no display block at all.
|
|
287
|
+
resolve?.({ status: "blocked", reason: "no display connected" });
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
// If core app fired, refresh the saved snapshot with the actual processed
|
|
291
|
+
// event so restore uses the wrapped text (legacy) / the retained scene.
|
|
292
|
+
if (packageName === this.coreApp && this.currentDisplay) {
|
|
293
|
+
this.coreAppDisplay = {
|
|
294
|
+
packageName,
|
|
295
|
+
processedEvent: this.currentDisplay.processedEvent,
|
|
296
|
+
scene: this.currentDisplay.scene,
|
|
297
|
+
expiresAt: this.currentDisplay.expiresAt,
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Send a scene through SceneRenderer. On positioning devices this emits a
|
|
303
|
+
* SceneFrame; on degrade devices SceneRenderer hands back a legacy layout
|
|
304
|
+
* that rides the existing (unchanged) DisplayProcessor path.
|
|
305
|
+
*/
|
|
306
|
+
sendScene(packageName, view, elements, expiresAt, resolve) {
|
|
307
|
+
const result = sceneRenderer.emitScene(packageName, view, elements);
|
|
308
|
+
if (result.kind === "no-display") {
|
|
309
|
+
resolve?.({ status: "blocked", reason: "no display connected" });
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
if (result.kind === "legacy") {
|
|
313
|
+
if (result.layout) {
|
|
314
|
+
this.sendToNative(packageName, { view, layout: result.layout }, expiresAt);
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
// Scene degraded to nothing (e.g. all-image scene on a text-only
|
|
318
|
+
// device). render() replaces the frame, so nothing means clear.
|
|
319
|
+
this.sendClear();
|
|
320
|
+
}
|
|
321
|
+
resolve?.({ status: "displayed", degraded: result.degraded, dropped: result.dropped });
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
this.currentDisplay = { packageName, processedEvent: {}, scene: elements, expiresAt };
|
|
325
|
+
this.clearExpiryTimer();
|
|
326
|
+
if (expiresAt !== null) {
|
|
327
|
+
const delay = Math.max(0, expiresAt - this.now());
|
|
328
|
+
this.expiryTimerId = BgTimer.setTimeout(() => {
|
|
329
|
+
this.expiryTimerId = null;
|
|
330
|
+
this.handleExpiry(packageName);
|
|
331
|
+
}, delay);
|
|
332
|
+
}
|
|
333
|
+
resolve?.({ status: "displayed", degraded: result.degraded, dropped: result.dropped });
|
|
334
|
+
}
|
|
335
|
+
sendToNative(packageName, rawEvent, expiresAt) {
|
|
336
|
+
let processedEvent;
|
|
337
|
+
try {
|
|
338
|
+
processedEvent = displayProcessor.processDisplayEvent(rawEvent);
|
|
339
|
+
}
|
|
340
|
+
catch (err) {
|
|
341
|
+
console.error(`${LOG_TAG}: DisplayProcessor error, using raw event:`, err);
|
|
342
|
+
processedEvent = rawEvent;
|
|
343
|
+
}
|
|
344
|
+
try {
|
|
345
|
+
// The display output path is a direct btsdk call now (was a host sendDisplayEvent
|
|
346
|
+
// hook) so a bare OEM renders to the glasses without wiring it.
|
|
347
|
+
void Promise.resolve(BluetoothSdk.displayEvent(processedEvent)).catch((err) => {
|
|
348
|
+
console.error(`${LOG_TAG}: native display failed:`, err);
|
|
349
|
+
});
|
|
350
|
+
// The mirror store also lives in engine, so display requests update the
|
|
351
|
+
// phone-side preview without any host hook.
|
|
352
|
+
useDisplayStore.getState().setDisplayEvent(JSON.stringify(processedEvent));
|
|
353
|
+
}
|
|
354
|
+
catch (err) {
|
|
355
|
+
console.error(`${LOG_TAG}: native display failed:`, err);
|
|
356
|
+
}
|
|
357
|
+
this.currentDisplay = { packageName, processedEvent, expiresAt };
|
|
358
|
+
this.clearExpiryTimer();
|
|
359
|
+
if (expiresAt !== null) {
|
|
360
|
+
const delay = Math.max(0, expiresAt - this.now());
|
|
361
|
+
this.expiryTimerId = BgTimer.setTimeout(() => {
|
|
362
|
+
this.expiryTimerId = null;
|
|
363
|
+
this.handleExpiry(packageName);
|
|
364
|
+
}, delay);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
handleExpiry(packageName) {
|
|
368
|
+
// Someone else is on the glasses now — ignore.
|
|
369
|
+
if (!this.currentDisplay || this.currentDisplay.packageName !== packageName) {
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
// Release the lock if it belonged to this (bg) app.
|
|
373
|
+
if (this.backgroundLock?.packageName === packageName) {
|
|
374
|
+
this.backgroundLock = null;
|
|
375
|
+
}
|
|
376
|
+
this.currentDisplay = null;
|
|
377
|
+
this.tryRestoreCoreDisplay();
|
|
378
|
+
if (!this.currentDisplay) {
|
|
379
|
+
this.sendClear();
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
tryRestoreCoreDisplay() {
|
|
383
|
+
if (!this.coreAppDisplay)
|
|
384
|
+
return;
|
|
385
|
+
// If the core snapshot has a duration and it's already elapsed, skip.
|
|
386
|
+
if (this.coreAppDisplay.expiresAt !== null && this.now() >= this.coreAppDisplay.expiresAt) {
|
|
387
|
+
this.coreAppDisplay = null;
|
|
388
|
+
return;
|
|
389
|
+
}
|
|
390
|
+
// Re-send the core's saved display.
|
|
391
|
+
this.restoreDisplay(this.coreAppDisplay);
|
|
392
|
+
}
|
|
393
|
+
sendClear() {
|
|
394
|
+
const clearEvent = {
|
|
395
|
+
view: "main",
|
|
396
|
+
layout: { layoutType: "clear_view" },
|
|
397
|
+
};
|
|
398
|
+
this.sendToNative("system.clear", clearEvent, null);
|
|
399
|
+
this.currentDisplay = null;
|
|
400
|
+
// The glasses main view is now blank: every app's retained scene is
|
|
401
|
+
// replay-only until it re-renders — diffing against it would skip
|
|
402
|
+
// "unchanged" elements onto the blank screen.
|
|
403
|
+
sceneRenderer.markViewStale("main");
|
|
404
|
+
}
|
|
405
|
+
// ===========================================================================
|
|
406
|
+
// Internals — boot
|
|
407
|
+
// ===========================================================================
|
|
408
|
+
cancelBoot() {
|
|
409
|
+
if (!this.bootingApp)
|
|
410
|
+
return;
|
|
411
|
+
BgTimer.clearTimeout(this.bootingApp.timerId);
|
|
412
|
+
this.bootingApp = null;
|
|
413
|
+
}
|
|
414
|
+
endBoot(triggeredByFirstDisplay) {
|
|
415
|
+
if (!this.bootingApp)
|
|
416
|
+
return;
|
|
417
|
+
const preBoot = this.bootingApp.preBoot;
|
|
418
|
+
BgTimer.clearTimeout(this.bootingApp.timerId);
|
|
419
|
+
this.bootingApp = null;
|
|
420
|
+
// Drain the queue: core first, then everyone else. Per-app last wins
|
|
421
|
+
// because the map holds one payload per packageName.
|
|
422
|
+
const queued = Array.from(this.bootQueue.entries());
|
|
423
|
+
this.bootQueue.clear();
|
|
424
|
+
const corePayload = this.coreApp ? queued.find(([pkg]) => pkg === this.coreApp) : undefined;
|
|
425
|
+
if (corePayload) {
|
|
426
|
+
this.arbitrateAndSend(corePayload[0], corePayload[1].payload, corePayload[1].resolve);
|
|
427
|
+
}
|
|
428
|
+
for (const [pkg, entry] of queued) {
|
|
429
|
+
if (pkg === this.coreApp)
|
|
430
|
+
continue;
|
|
431
|
+
this.arbitrateAndSend(pkg, entry.payload, entry.resolve);
|
|
432
|
+
}
|
|
433
|
+
// Boot ended on the timeout with nothing queued and no first display — the
|
|
434
|
+
// app just never rendered. Restore whatever was on the glasses before the
|
|
435
|
+
// boot text so a background app or crash-respawn can't blank a foreground
|
|
436
|
+
// app's frame (registerApp fires onMount for every spawn, and the core app
|
|
437
|
+
// isn't wired on the local path yet). If the glasses were empty before,
|
|
438
|
+
// clear the lingering "Starting …" instead — otherwise a miniapp that never
|
|
439
|
+
// renders (e.g. audio-only) would strand it.
|
|
440
|
+
if (!triggeredByFirstDisplay && queued.length === 0) {
|
|
441
|
+
// Only restore a frame that's still valid — one whose duration elapsed
|
|
442
|
+
// during the boot window should clear, not come back.
|
|
443
|
+
if (preBoot && (preBoot.expiresAt === null || preBoot.expiresAt > this.now())) {
|
|
444
|
+
this.restoreDisplay(preBoot);
|
|
445
|
+
}
|
|
446
|
+
else {
|
|
447
|
+
this.sendClear();
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Re-push a previously-captured on-glasses frame (e.g. the display a boot
|
|
453
|
+
* window overwrote). Mirrors tryRestoreCoreDisplay: the saved event is already
|
|
454
|
+
* processed, and any remaining duration is recomputed from its expiry.
|
|
455
|
+
*/
|
|
456
|
+
restoreDisplay(saved) {
|
|
457
|
+
const remaining = saved.expiresAt !== null ? Math.max(0, saved.expiresAt - this.now()) : undefined;
|
|
458
|
+
// Scene restores must REPLAY (create-based, epoch-bumped): re-emitting the
|
|
459
|
+
// scene through the normal diff would come back all-"unchanged" and the
|
|
460
|
+
// device would skip every element (spec §4 — replay is always create-based).
|
|
461
|
+
if (saved.scene) {
|
|
462
|
+
const expiresAt = remaining !== undefined ? this.now() + remaining : null;
|
|
463
|
+
if (sceneRenderer.replayApp(saved.packageName, "main")) {
|
|
464
|
+
this.currentDisplay = { packageName: saved.packageName, processedEvent: {}, scene: saved.scene, expiresAt };
|
|
465
|
+
this.clearExpiryTimer();
|
|
466
|
+
if (expiresAt !== null) {
|
|
467
|
+
const delay = Math.max(0, expiresAt - this.now());
|
|
468
|
+
this.expiryTimerId = BgTimer.setTimeout(() => {
|
|
469
|
+
this.expiryTimerId = null;
|
|
470
|
+
this.handleExpiry(saved.packageName);
|
|
471
|
+
}, delay);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
else {
|
|
475
|
+
// Retained state gone (app stopped since) — re-render the saved
|
|
476
|
+
// elements as a fresh scene instead.
|
|
477
|
+
this.sendNow(saved.packageName, { view: "main", scene: saved.scene, durationMs: remaining });
|
|
478
|
+
}
|
|
479
|
+
return;
|
|
480
|
+
}
|
|
481
|
+
this.sendNow(saved.packageName, {
|
|
482
|
+
view: "main",
|
|
483
|
+
layout: saved.processedEvent.layout,
|
|
484
|
+
durationMs: remaining,
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
// ===========================================================================
|
|
488
|
+
// Reconnect replay (design doc §3.4.7 — recovery = replay, host-driven)
|
|
489
|
+
// ===========================================================================
|
|
490
|
+
/**
|
|
491
|
+
* Subscribe to glasses connection state so the current owner's frame is
|
|
492
|
+
* replayed after a reconnect. Safe to call repeatedly; attaches once. Wired
|
|
493
|
+
* from MantleManager next to displayProcessor.attachToRuntime().
|
|
494
|
+
*/
|
|
495
|
+
attachToRuntime() {
|
|
496
|
+
if (this.runtimeAttached)
|
|
497
|
+
return;
|
|
498
|
+
// dev wired this through the (since-removed) glassesStatus runtime hooks;
|
|
499
|
+
// engine reads its own glasses store directly.
|
|
500
|
+
this.glassesWasConnected = isGlassesConnected(useGlassesStore.getState().connection);
|
|
501
|
+
this.unsubscribeGlassesStatus = useGlassesStore.subscribe(() => {
|
|
502
|
+
const connected = isGlassesConnected(useGlassesStore.getState().connection);
|
|
503
|
+
if (connected === this.glassesWasConnected)
|
|
504
|
+
return;
|
|
505
|
+
this.glassesWasConnected = connected;
|
|
506
|
+
if (connected) {
|
|
507
|
+
this.replayCurrent();
|
|
508
|
+
}
|
|
509
|
+
});
|
|
510
|
+
this.runtimeAttached = true;
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* Re-push the current on-glasses frame after a device recovery. Scenes replay
|
|
514
|
+
* from SceneRenderer's retained state (create-based, epoch-bumped); legacy
|
|
515
|
+
* frames re-send their processed event. Expired frames don't come back.
|
|
516
|
+
*/
|
|
517
|
+
replayCurrent() {
|
|
518
|
+
const current = this.currentDisplay;
|
|
519
|
+
if (!current)
|
|
520
|
+
return;
|
|
521
|
+
if (current.expiresAt !== null && this.now() >= current.expiresAt)
|
|
522
|
+
return;
|
|
523
|
+
console.log(`${LOG_TAG}: replayCurrent(${current.packageName})`);
|
|
524
|
+
if (current.scene) {
|
|
525
|
+
if (!sceneRenderer.replayApp(current.packageName, "main")) {
|
|
526
|
+
// Retained state gone (app stopped between disconnect and reconnect).
|
|
527
|
+
this.sendClear();
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
else if (current.processedEvent.layout) {
|
|
531
|
+
this.sendToNative(current.packageName, current.processedEvent, current.expiresAt);
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
// ===========================================================================
|
|
535
|
+
// Internals — timer helpers
|
|
536
|
+
// ===========================================================================
|
|
537
|
+
clearExpiryTimer() {
|
|
538
|
+
if (this.expiryTimerId !== null) {
|
|
539
|
+
BgTimer.clearTimeout(this.expiryTimerId);
|
|
540
|
+
this.expiryTimerId = null;
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
// ===========================================================================
|
|
544
|
+
// Test hooks
|
|
545
|
+
// ===========================================================================
|
|
546
|
+
/** Injected clock — tests only. */
|
|
547
|
+
_setNowForTest(fn) {
|
|
548
|
+
this.now = fn;
|
|
549
|
+
}
|
|
550
|
+
/** Wipe state — tests only. */
|
|
551
|
+
_resetForTest() {
|
|
552
|
+
this.cancelBoot();
|
|
553
|
+
this.clearExpiryTimer();
|
|
554
|
+
this.coreApp = null;
|
|
555
|
+
this.coreAppDisplay = null;
|
|
556
|
+
this.currentDisplay = null;
|
|
557
|
+
this.backgroundLock = null;
|
|
558
|
+
this.bootQueue.clear();
|
|
559
|
+
this.now = () => Date.now();
|
|
560
|
+
this.unsubscribeGlassesStatus?.();
|
|
561
|
+
this.unsubscribeGlassesStatus = null;
|
|
562
|
+
this.runtimeAttached = false;
|
|
563
|
+
this.glassesWasConnected = false;
|
|
564
|
+
sceneRenderer._resetForTest();
|
|
565
|
+
}
|
|
566
|
+
/** Read-only state snapshot — tests only. */
|
|
567
|
+
_peekForTest() {
|
|
568
|
+
return {
|
|
569
|
+
coreApp: this.coreApp,
|
|
570
|
+
currentDisplayPkg: this.currentDisplay?.packageName ?? null,
|
|
571
|
+
bgLockPkg: this.backgroundLock?.packageName ?? null,
|
|
572
|
+
isBooting: this.bootingApp !== null,
|
|
573
|
+
};
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
const localDisplayManager = LocalDisplayManager.getInstance();
|
|
577
|
+
export default localDisplayManager;
|
|
578
|
+
export { LocalDisplayManager };
|
|
579
|
+
//# sourceMappingURL=LocalDisplayManager.js.map
|