@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,27 @@
|
|
|
1
|
+
import type {TranscriptionData} from "@mentra/cloud-protocol"
|
|
2
|
+
|
|
3
|
+
import {buildE2EMetric, logE2EMetricPayload} from "../utils/e2eMetrics"
|
|
4
|
+
|
|
5
|
+
export function buildCloudV2TranscriptMetric(data: TranscriptionData): Record<string, unknown> {
|
|
6
|
+
return buildE2EMetric("cloud_v2_transcript", {
|
|
7
|
+
text: data.text,
|
|
8
|
+
state: data.isFinal ? "final" : "interim",
|
|
9
|
+
is_final: data.isFinal,
|
|
10
|
+
resolved_language: data.resolvedLanguage,
|
|
11
|
+
language_detected: data.languageDetected,
|
|
12
|
+
utterance_id: data.utteranceId,
|
|
13
|
+
speaker_id: data.speakerId,
|
|
14
|
+
start_ms: data.startMs,
|
|
15
|
+
end_ms: data.endMs,
|
|
16
|
+
duration_ms: data.durationMs,
|
|
17
|
+
provider: data.provider,
|
|
18
|
+
confidence: data.confidence,
|
|
19
|
+
timestamp_ms: data.timestamp,
|
|
20
|
+
token_count: data.tokens.length,
|
|
21
|
+
subscription: data.subscription,
|
|
22
|
+
})
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function logCloudV2TranscriptMetric(data: TranscriptionData): void {
|
|
26
|
+
logE2EMetricPayload(buildCloudV2TranscriptMetric(data), "cloud_v2_transcript")
|
|
27
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ConnectionCoordinator — the connection *decisions* that were duplicated across
|
|
3
|
+
* the reconnect effect and the connect/disconnect buttons.
|
|
4
|
+
*
|
|
5
|
+
* Pure logic: callers gather the inputs from their stores and perform the IO
|
|
6
|
+
* (permission prompts, bluetooth calls, navigation) themselves. Centralizing the
|
|
7
|
+
* decisions keeps the "when do we (re)connect / cancel / go to pairing" rules in
|
|
8
|
+
* one tested place instead of re-deriving them in home.tsx, DeviceStatus, the
|
|
9
|
+
* reconnect effect, and the connect buttons.
|
|
10
|
+
*
|
|
11
|
+
*/
|
|
12
|
+
export interface ReconnectDecisionInput {
|
|
13
|
+
/** The reconnect_on_app_foreground setting. */
|
|
14
|
+
reconnectOnForeground: boolean
|
|
15
|
+
/** The default_wearable setting (model id), if any. */
|
|
16
|
+
defaultWearable: string | null | undefined
|
|
17
|
+
/** True when defaultWearable is the simulated device. */
|
|
18
|
+
isSimulated: boolean
|
|
19
|
+
/** True when the glasses BLE link is already connected. */
|
|
20
|
+
connected: boolean
|
|
21
|
+
/** True while the native link layer is mid scan / connect / bond. */
|
|
22
|
+
nativeLinkBusy: boolean
|
|
23
|
+
/** True when the SDK holds an actual default device (connectDefault target). */
|
|
24
|
+
hasDefaultDevice: boolean
|
|
25
|
+
/** True when a scan is already in progress. */
|
|
26
|
+
searching: boolean
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* "skip" means do not connect — the caller returns `result` (preserving the
|
|
31
|
+
* original true/false contract of attemptReconnect). "connect" means proceed to
|
|
32
|
+
* the permission check + connectDefault().
|
|
33
|
+
*/
|
|
34
|
+
export type ReconnectDecision = {kind: "skip"; result: boolean} | {kind: "connect"}
|
|
35
|
+
|
|
36
|
+
export function decideReconnect(input: ReconnectDecisionInput): ReconnectDecision {
|
|
37
|
+
// Reconnect-on-foreground disabled: treat as a no-op success.
|
|
38
|
+
if (!input.reconnectOnForeground) return {kind: "skip", result: true}
|
|
39
|
+
// No real wearable paired (or the simulated device): nothing to reconnect to.
|
|
40
|
+
if (!input.defaultWearable || input.isSimulated) return {kind: "skip", result: false}
|
|
41
|
+
// Model chosen but never actually paired (or the native default was cleared):
|
|
42
|
+
// connectDefault() would throw — skip quietly; pairing is a user-driven flow.
|
|
43
|
+
// (Safe to trust at cold start now: hasDefaultDevice reads are gated on the
|
|
44
|
+
// device-store hydration completing, and callers fail open on rejection.)
|
|
45
|
+
if (!input.hasDefaultDevice) return {kind: "skip", result: false}
|
|
46
|
+
// Already connected, or a scan/connect/bond is already in flight: starting a
|
|
47
|
+
// second connectDefault() on top of the busy link layer would collide with it
|
|
48
|
+
// (same busy rule as decideConnectButtonAction).
|
|
49
|
+
if (input.connected || input.searching || input.nativeLinkBusy) return {kind: "skip", result: true}
|
|
50
|
+
return {kind: "connect"}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export type ConnectButtonAction = "cancel" | "pair" | "connect"
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* What a connect/disconnect button should do when tapped:
|
|
57
|
+
* - "cancel" — a scan/connect is in flight; the tap cancels it (disconnect)
|
|
58
|
+
* - "pair" — no device is paired yet; the tap goes to the pairing flow
|
|
59
|
+
* - "connect" — a device is paired and idle; the tap connects to it
|
|
60
|
+
*/
|
|
61
|
+
export function decideConnectButtonAction(input: {hasDefaultWearable: boolean; busy: boolean}): ConnectButtonAction {
|
|
62
|
+
if (input.busy) return "cancel"
|
|
63
|
+
if (!input.hasDefaultWearable) return "pair"
|
|
64
|
+
return "connect"
|
|
65
|
+
}
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DevServerBridge — phone-side WebSocket connection to a `mentra-miniapp dev`
|
|
3
|
+
* sidecar running on a developer's laptop.
|
|
4
|
+
*
|
|
5
|
+
* Multiplexed over a single WebSocket per dev miniapp:
|
|
6
|
+
* laptop → phone : {type: "reload"} → trigger WebView.reload()
|
|
7
|
+
* phone → laptop: {type: "log", level, args, ...} → forwarded console calls
|
|
8
|
+
*
|
|
9
|
+
* Lifecycle: `connect(packageName, devUrl, devPort)` is called from
|
|
10
|
+
* MiniappHost.mountDev once the dev applet is mounted. `disconnect(packageName)`
|
|
11
|
+
* is called from MiniappHost.unmount. Reconnect with exponential backoff on
|
|
12
|
+
* unexpected close — the dev server is the developer's laptop and may bounce.
|
|
13
|
+
*
|
|
14
|
+
* Outgoing logs are buffered in a small ring while disconnected; flushed on
|
|
15
|
+
* reconnect. This catches early-startup logs the developer would otherwise
|
|
16
|
+
* miss when re-launching the dev server.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
const LOG_TAG = "DEV_SERVER_BRIDGE"
|
|
20
|
+
const PROTOCOL_VERSION = "mentra-dev/1"
|
|
21
|
+
const HELLO_TIMEOUT_MS = 1_000
|
|
22
|
+
const BACKOFF_MIN_MS = 1_000
|
|
23
|
+
const BACKOFF_MAX_MS = 30_000
|
|
24
|
+
const RING_BUFFER_MAX_ENTRIES = 100
|
|
25
|
+
const RING_BUFFER_MAX_BYTES = 32 * 1024
|
|
26
|
+
|
|
27
|
+
type State = "idle" | "connecting" | "connected" | "disconnected" | "closed"
|
|
28
|
+
|
|
29
|
+
interface BufferedLog {
|
|
30
|
+
packageName: string
|
|
31
|
+
level: string
|
|
32
|
+
args: unknown[]
|
|
33
|
+
timestamp: number
|
|
34
|
+
/** "ui" = WebView, "background" = JSContext. Stamped at capture time. */
|
|
35
|
+
source: "ui" | "background"
|
|
36
|
+
size: number
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
interface BridgeEntry {
|
|
40
|
+
state: State
|
|
41
|
+
ws: WebSocket | null
|
|
42
|
+
url: string
|
|
43
|
+
attempts: number
|
|
44
|
+
ringBuffer: BufferedLog[]
|
|
45
|
+
ringBytes: number
|
|
46
|
+
reloadHandler: ((packageName: string) => void) | null
|
|
47
|
+
reconnectTimer: ReturnType<typeof setTimeout> | null
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
class DevServerBridge {
|
|
51
|
+
private entries = new Map<string, BridgeEntry>()
|
|
52
|
+
private globalReloadHandler: ((packageName: string) => void) | null = null
|
|
53
|
+
private globalRespawnBackgroundHandler: ((packageName: string) => void) | null = null
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Register a global reload handler. MiniappHost calls this once at boot. The
|
|
57
|
+
* bridge invokes the handler with the offending packageName whenever a
|
|
58
|
+
* reload signal is received.
|
|
59
|
+
*/
|
|
60
|
+
public onReload(handler: (packageName: string) => void): void {
|
|
61
|
+
this.globalReloadHandler = handler
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Register a global background-respawn handler. Fires when the dev
|
|
66
|
+
* server sends `{type: "respawn-bg"}` — emitted on filesystem changes
|
|
67
|
+
* under `src/background/`. The host (MentraJSRouter via the
|
|
68
|
+
* bootstrap) should kill + respawn the JSContext to pick up the
|
|
69
|
+
* change. WebView reload is separate (see `onReload`).
|
|
70
|
+
*/
|
|
71
|
+
public onRespawnBackground(handler: ((packageName: string) => void) | null): void {
|
|
72
|
+
this.globalRespawnBackgroundHandler = handler
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** Clear the background-respawn handler when the miniapp engine is stopped. */
|
|
76
|
+
public clearRespawnBackgroundHandler(): void {
|
|
77
|
+
this.globalRespawnBackgroundHandler = null
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** Open (or re-open) a bridge to the given dev server. */
|
|
81
|
+
public connect(packageName: string, devHostUrl: string, devPort: number): void {
|
|
82
|
+
const url = this.buildWsUrl(devHostUrl, devPort)
|
|
83
|
+
let entry = this.entries.get(packageName)
|
|
84
|
+
if (entry) {
|
|
85
|
+
// Already have an entry; if the URL changed (e.g. LAN IP shifted), close
|
|
86
|
+
// and rebuild.
|
|
87
|
+
if (entry.url === url && (entry.state === "connecting" || entry.state === "connected")) return
|
|
88
|
+
this.teardownEntry(entry)
|
|
89
|
+
}
|
|
90
|
+
entry = {
|
|
91
|
+
state: "idle",
|
|
92
|
+
ws: null,
|
|
93
|
+
url,
|
|
94
|
+
attempts: 0,
|
|
95
|
+
ringBuffer: [],
|
|
96
|
+
ringBytes: 0,
|
|
97
|
+
reloadHandler: null,
|
|
98
|
+
reconnectTimer: null,
|
|
99
|
+
}
|
|
100
|
+
this.entries.set(packageName, entry)
|
|
101
|
+
this.openSocket(packageName, entry)
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/** Close a bridge for good. Called from MiniappHost.unmount. */
|
|
105
|
+
public disconnect(packageName: string): void {
|
|
106
|
+
const entry = this.entries.get(packageName)
|
|
107
|
+
if (!entry) return
|
|
108
|
+
entry.state = "closed"
|
|
109
|
+
this.teardownEntry(entry)
|
|
110
|
+
this.entries.delete(packageName)
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Forward a `log` envelope to the connected dev sidecar. Called from
|
|
115
|
+
* the JSContext side (`MentraJSRouter.__log` handler) AND the WebView
|
|
116
|
+
* side (`MentraUIRouter.routeFromWebView` for `type:"log"` frames).
|
|
117
|
+
*
|
|
118
|
+
* `source` distinguishes the two halves so the CLI can prefix lines
|
|
119
|
+
* `[UI]` vs `[MentraJS]`. Logs are silently dropped when no bridge
|
|
120
|
+
* exists for the package (no `mentra-miniapp dev` running) and
|
|
121
|
+
* buffered in the per-bridge ring while disconnected.
|
|
122
|
+
*/
|
|
123
|
+
public forwardLog(
|
|
124
|
+
packageName: string,
|
|
125
|
+
level: string,
|
|
126
|
+
args: unknown[],
|
|
127
|
+
timestamp: number,
|
|
128
|
+
source: "ui" | "background",
|
|
129
|
+
): void {
|
|
130
|
+
const entry = this.entries.get(packageName)
|
|
131
|
+
if (!entry) return
|
|
132
|
+
const message = JSON.stringify({type: "log", level, args, packageName, timestamp, source})
|
|
133
|
+
if (entry.state === "connected" && entry.ws) {
|
|
134
|
+
try {
|
|
135
|
+
entry.ws.send(message)
|
|
136
|
+
return
|
|
137
|
+
} catch {
|
|
138
|
+
// Fall through to buffer.
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
this.bufferLog(entry, {packageName, level, args, timestamp, source, size: message.length})
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// -----------------------------------------------------------------------
|
|
145
|
+
|
|
146
|
+
private buildWsUrl(devHostUrl: string, devPort: number): string {
|
|
147
|
+
let host: string
|
|
148
|
+
try {
|
|
149
|
+
const parsed = new URL(devHostUrl)
|
|
150
|
+
host = parsed.hostname
|
|
151
|
+
} catch {
|
|
152
|
+
// devHostUrl might already be just an IP; best-effort.
|
|
153
|
+
host = devHostUrl.replace(/^https?:\/\//, "").split(":")[0].split("/")[0]
|
|
154
|
+
}
|
|
155
|
+
return `ws://${host}:${devPort}/__mentra_dev`
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
private openSocket(packageName: string, entry: BridgeEntry): void {
|
|
159
|
+
if (entry.state === "closed") return
|
|
160
|
+
entry.state = "connecting"
|
|
161
|
+
const ws = new WebSocket(entry.url)
|
|
162
|
+
entry.ws = ws
|
|
163
|
+
|
|
164
|
+
let helloTimer: ReturnType<typeof setTimeout> | null = null
|
|
165
|
+
let helloAcked = false
|
|
166
|
+
|
|
167
|
+
const teardown = (reason: string): void => {
|
|
168
|
+
if (helloTimer) {
|
|
169
|
+
clearTimeout(helloTimer)
|
|
170
|
+
helloTimer = null
|
|
171
|
+
}
|
|
172
|
+
try {
|
|
173
|
+
ws.close()
|
|
174
|
+
} catch {
|
|
175
|
+
/* ignore */
|
|
176
|
+
}
|
|
177
|
+
if (entry.state === "closed") return
|
|
178
|
+
entry.state = "disconnected"
|
|
179
|
+
entry.ws = null
|
|
180
|
+
entry.attempts++
|
|
181
|
+
console.log(`${LOG_TAG}: ${packageName} disconnected (${reason}); reconnect in ${this.backoffMs(entry.attempts)}ms`)
|
|
182
|
+
this.scheduleReconnect(packageName, entry)
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
ws.onopen = () => {
|
|
186
|
+
// Send hello; wait for hello-ack to confirm we hit the right server.
|
|
187
|
+
try {
|
|
188
|
+
ws.send(JSON.stringify({type: "hello", protocol: PROTOCOL_VERSION}))
|
|
189
|
+
} catch {
|
|
190
|
+
teardown("hello send failed")
|
|
191
|
+
return
|
|
192
|
+
}
|
|
193
|
+
helloTimer = setTimeout(() => {
|
|
194
|
+
if (!helloAcked) {
|
|
195
|
+
teardown("hello-ack timeout")
|
|
196
|
+
}
|
|
197
|
+
}, HELLO_TIMEOUT_MS)
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
ws.onmessage = (ev) => {
|
|
201
|
+
const data = typeof ev.data === "string" ? ev.data : null
|
|
202
|
+
if (!data) return
|
|
203
|
+
let parsed: {type?: string; protocol?: string} | null = null
|
|
204
|
+
try {
|
|
205
|
+
parsed = JSON.parse(data)
|
|
206
|
+
} catch {
|
|
207
|
+
return
|
|
208
|
+
}
|
|
209
|
+
if (!parsed) return
|
|
210
|
+
|
|
211
|
+
if (parsed.type === "hello-ack") {
|
|
212
|
+
if (parsed.protocol !== PROTOCOL_VERSION) {
|
|
213
|
+
teardown(`protocol mismatch: server sent ${parsed.protocol}, expected ${PROTOCOL_VERSION}`)
|
|
214
|
+
return
|
|
215
|
+
}
|
|
216
|
+
helloAcked = true
|
|
217
|
+
if (helloTimer) {
|
|
218
|
+
clearTimeout(helloTimer)
|
|
219
|
+
helloTimer = null
|
|
220
|
+
}
|
|
221
|
+
entry.state = "connected"
|
|
222
|
+
entry.attempts = 0
|
|
223
|
+
console.log(`${LOG_TAG}: ${packageName} connected to ${entry.url}`)
|
|
224
|
+
this.flushRingBuffer(packageName, entry)
|
|
225
|
+
return
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
if (parsed.type === "reload") {
|
|
229
|
+
console.log(`${LOG_TAG}: ${packageName} received reload signal`)
|
|
230
|
+
this.globalReloadHandler?.(packageName)
|
|
231
|
+
return
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// Two-layer dev signal: filesystem changes under src/background/
|
|
235
|
+
// trigger a full JSContext kill + respawn (not just a WebView
|
|
236
|
+
// reload). The host's MentraJSRouter listens here.
|
|
237
|
+
if (parsed.type === "respawn-bg") {
|
|
238
|
+
console.log(`${LOG_TAG}: ${packageName} received respawn-bg signal`)
|
|
239
|
+
this.globalRespawnBackgroundHandler?.(packageName)
|
|
240
|
+
return
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
ws.onerror = () => {
|
|
245
|
+
// onclose follows; defer all teardown to that path so we don't double-fire.
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
ws.onclose = () => {
|
|
249
|
+
teardown(helloAcked ? "ws closed" : "ws closed before hello-ack")
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
private scheduleReconnect(packageName: string, entry: BridgeEntry): void {
|
|
254
|
+
if (entry.state === "closed") return
|
|
255
|
+
if (entry.reconnectTimer) clearTimeout(entry.reconnectTimer)
|
|
256
|
+
const delay = this.backoffMs(entry.attempts)
|
|
257
|
+
entry.reconnectTimer = setTimeout(() => {
|
|
258
|
+
entry.reconnectTimer = null
|
|
259
|
+
// Verify still alive and still in the bridge map.
|
|
260
|
+
const current = this.entries.get(packageName)
|
|
261
|
+
if (!current || current !== entry || entry.state === "closed") return
|
|
262
|
+
this.openSocket(packageName, entry)
|
|
263
|
+
}, delay)
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
private backoffMs(attempts: number): number {
|
|
267
|
+
const exp = Math.min(BACKOFF_MAX_MS, BACKOFF_MIN_MS * Math.pow(2, Math.max(0, attempts - 1)))
|
|
268
|
+
const jitter = exp * (0.8 + Math.random() * 0.4)
|
|
269
|
+
return Math.round(jitter)
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
private bufferLog(entry: BridgeEntry, log: BufferedLog): void {
|
|
273
|
+
entry.ringBuffer.push(log)
|
|
274
|
+
entry.ringBytes += log.size
|
|
275
|
+
while (
|
|
276
|
+
entry.ringBuffer.length > RING_BUFFER_MAX_ENTRIES ||
|
|
277
|
+
entry.ringBytes > RING_BUFFER_MAX_BYTES
|
|
278
|
+
) {
|
|
279
|
+
const dropped = entry.ringBuffer.shift()
|
|
280
|
+
if (dropped) entry.ringBytes -= dropped.size
|
|
281
|
+
if (entry.ringBuffer.length === 0) {
|
|
282
|
+
entry.ringBytes = 0
|
|
283
|
+
break
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
private flushRingBuffer(packageName: string, entry: BridgeEntry): void {
|
|
289
|
+
if (entry.ringBuffer.length === 0) return
|
|
290
|
+
const buffered = entry.ringBuffer
|
|
291
|
+
entry.ringBuffer = []
|
|
292
|
+
entry.ringBytes = 0
|
|
293
|
+
if (!entry.ws) return
|
|
294
|
+
for (const log of buffered) {
|
|
295
|
+
try {
|
|
296
|
+
entry.ws.send(
|
|
297
|
+
JSON.stringify({
|
|
298
|
+
type: "log",
|
|
299
|
+
level: log.level,
|
|
300
|
+
args: log.args,
|
|
301
|
+
packageName: log.packageName,
|
|
302
|
+
timestamp: log.timestamp,
|
|
303
|
+
source: log.source,
|
|
304
|
+
}),
|
|
305
|
+
)
|
|
306
|
+
} catch {
|
|
307
|
+
// Re-buffer on failure and bail.
|
|
308
|
+
entry.ringBuffer.unshift(log)
|
|
309
|
+
entry.ringBytes += log.size
|
|
310
|
+
return
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
private teardownEntry(entry: BridgeEntry): void {
|
|
316
|
+
if (entry.reconnectTimer) {
|
|
317
|
+
clearTimeout(entry.reconnectTimer)
|
|
318
|
+
entry.reconnectTimer = null
|
|
319
|
+
}
|
|
320
|
+
if (entry.ws) {
|
|
321
|
+
try {
|
|
322
|
+
entry.ws.close()
|
|
323
|
+
} catch {
|
|
324
|
+
/* ignore */
|
|
325
|
+
}
|
|
326
|
+
entry.ws = null
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
const devServerBridge = new DevServerBridge()
|
|
332
|
+
export default devServerBridge
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Device-event router — engine-owned. Subscribes to the inbound native BLE/device
|
|
3
|
+
* events and routes them into the engine runtime: device stores, the process event
|
|
4
|
+
* bus, the photo/stream coordinators, and local miniapps (via forwardEvent).
|
|
5
|
+
*
|
|
6
|
+
* Why this exists: engine owns the stores, coordinators, miniapp runtime, and facades,
|
|
7
|
+
* but it never *subscribed to the device* for most events — the host MantleManager was
|
|
8
|
+
* still the event router the whole runtime secretly depended on. So a bare OEM that
|
|
9
|
+
* imported engine + called engine.start() got a connected runtime with almost no device
|
|
10
|
+
* data flowing in (no miniapp input, dead gallery sync, starved coordinators). This
|
|
11
|
+
* service moves those inbound bridges into engine so ANY host gets them.
|
|
12
|
+
*
|
|
13
|
+
* Scope: the engine legs only. The Cloud V1 relays that used to live beside them in
|
|
14
|
+
* MantleManager (touch→cloud, the cloud-SDK stream/photo legs, etc.) were deleted with
|
|
15
|
+
* Cloud V1 app end-of-life.
|
|
16
|
+
*
|
|
17
|
+
* Started by `engine.start()`. Idempotent.
|
|
18
|
+
*/
|
|
19
|
+
import BluetoothSdk from "@mentra/bluetooth-sdk/internal"
|
|
20
|
+
import {shallow} from "zustand/shallow"
|
|
21
|
+
|
|
22
|
+
import localMiniappRuntime from "./LocalMiniappRuntime"
|
|
23
|
+
import localSttFallbackCoordinator from "./LocalSttFallbackCoordinator"
|
|
24
|
+
import {phonePhotoCoordinator} from "./PhonePhotoCoordinator"
|
|
25
|
+
import {phoneStreamCoordinator} from "./PhoneStreamCoordinator"
|
|
26
|
+
import {isGlassesConnected} from "./GlassesReadiness"
|
|
27
|
+
import {useGlassesStore} from "../stores/glasses"
|
|
28
|
+
import {useSettingsStore} from "../stores/settings"
|
|
29
|
+
import {useAppStatusStore} from "../stores/apps"
|
|
30
|
+
import {retirePendingSelectionOnPromotion} from "./PairingIdentity"
|
|
31
|
+
import GlobalEventEmitter from "../utils/GlobalEventEmitter"
|
|
32
|
+
import {asgCameraApi} from "./asg/asgCameraApi"
|
|
33
|
+
|
|
34
|
+
let subs: Array<{remove: () => void}> = []
|
|
35
|
+
|
|
36
|
+
export function startDeviceEventRouter(): void {
|
|
37
|
+
if (subs.length) return
|
|
38
|
+
|
|
39
|
+
// --- device state → engine stores ---
|
|
40
|
+
|
|
41
|
+
// Standalone WiFi status → glasses store.
|
|
42
|
+
subs.push(
|
|
43
|
+
BluetoothSdk.addListener("wifi_status_change", (event) => {
|
|
44
|
+
const {type: _type, ...wifi} = event
|
|
45
|
+
useGlassesStore.getState().setGlassesInfo({wifi})
|
|
46
|
+
}),
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
// Forward glasses Wi-Fi to miniapps (session.glasses.onWifi) from the STORE — the
|
|
50
|
+
// single source of truth — so every path converges here: wifi_status_change,
|
|
51
|
+
// onGlassesStatus, and BLE disconnect. Effective connectivity requires the glasses
|
|
52
|
+
// to be connected AND on Wi-Fi, so a disconnect correctly flips `connected` false.
|
|
53
|
+
subs.push({
|
|
54
|
+
remove: useGlassesStore.subscribe(
|
|
55
|
+
(s) => {
|
|
56
|
+
const connected = isGlassesConnected(s.connection) && s.wifi.state === "connected"
|
|
57
|
+
return {
|
|
58
|
+
connected,
|
|
59
|
+
ssid: s.wifi.state === "connected" ? s.wifi.ssid : undefined,
|
|
60
|
+
localIp: s.wifi.state === "connected" ? s.wifi.localIp : undefined,
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
(wifi) => localMiniappRuntime.forwardEvent("glasses_wifi", wifi),
|
|
64
|
+
{equalityFn: shallow},
|
|
65
|
+
),
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
// Incremental battery status → glasses store + local miniapps.
|
|
69
|
+
subs.push(
|
|
70
|
+
BluetoothSdk.addListener("battery_status", (event) => {
|
|
71
|
+
const state = useGlassesStore.getState()
|
|
72
|
+
state.setBatteryInfo(event.level, event.charging, state.caseBatteryLevel, state.caseCharging)
|
|
73
|
+
localMiniappRuntime.forwardEvent("glasses_battery_update", {
|
|
74
|
+
type: "glasses_battery_update",
|
|
75
|
+
level: event.level,
|
|
76
|
+
charging: event.charging,
|
|
77
|
+
timestamp: event.timestamp ?? Date.now(),
|
|
78
|
+
})
|
|
79
|
+
}),
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
// Hotspot status → glasses store + event bus. engine's own gallerySyncService listens
|
|
83
|
+
// on the bus for these, so without this bridge engine's gallery sync is dead.
|
|
84
|
+
subs.push(
|
|
85
|
+
BluetoothSdk.addListener("hotspot_status_change", (event) => {
|
|
86
|
+
const enabled = event.state === "enabled"
|
|
87
|
+
const ssid = enabled ? event.ssid : ""
|
|
88
|
+
const password = enabled ? event.password : ""
|
|
89
|
+
const localIp = enabled ? event.localIp : ""
|
|
90
|
+
useGlassesStore.getState().setHotspotInfo(enabled, ssid, password, localIp)
|
|
91
|
+
// Always retarget the ASG camera client: on disable (or an event with no
|
|
92
|
+
// IP) fall back to the localhost default so later calls fail fast instead
|
|
93
|
+
// of hitting the previous network's stale glasses IP.
|
|
94
|
+
asgCameraApi.setServer(localIp || "localhost", 8089)
|
|
95
|
+
GlobalEventEmitter.emit("hotspot_status_change", {enabled, ssid, password, local_ip: localIp})
|
|
96
|
+
}),
|
|
97
|
+
)
|
|
98
|
+
subs.push(
|
|
99
|
+
BluetoothSdk.addListener("hotspot_error", (event) => {
|
|
100
|
+
GlobalEventEmitter.emit("hotspot_error", {error_message: event.errorMessage, timestamp: event.timestamp})
|
|
101
|
+
}),
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
// Glasses gallery content counts → event bus (consumed by gallerySyncService).
|
|
105
|
+
subs.push(
|
|
106
|
+
BluetoothSdk.addListener("gallery_status", (event) => {
|
|
107
|
+
GlobalEventEmitter.emit("gallery_status", {
|
|
108
|
+
photos: event.photos,
|
|
109
|
+
videos: event.videos,
|
|
110
|
+
total: event.total,
|
|
111
|
+
has_content: event.hasContent,
|
|
112
|
+
camera_busy: event.cameraBusy,
|
|
113
|
+
})
|
|
114
|
+
}),
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
// Hardware-originated setting changes (user changes a setting ON the glasses) → store.
|
|
118
|
+
// The inbound complement to GlassesSettingsSync (which only pushes store→device).
|
|
119
|
+
subs.push(
|
|
120
|
+
BluetoothSdk.addListener("save_setting", async (event) => {
|
|
121
|
+
const settings = useSettingsStore.getState()
|
|
122
|
+
// Damp the relay: native re-echoes some settings unconditionally (e.g.
|
|
123
|
+
// the identity block at every handleDeviceReady) — a same-value echo
|
|
124
|
+
// must not become a store write (persistence churn + change-push noise).
|
|
125
|
+
if (settings.getSetting(event.key) !== event.value) {
|
|
126
|
+
await settings.setSetting(event.key, event.value)
|
|
127
|
+
}
|
|
128
|
+
// Two-phase identity: a promoted default retires the pending selection
|
|
129
|
+
// marker. The rule lives with PairingIdentity (a no-op for other keys).
|
|
130
|
+
await retirePendingSelectionOnPromotion(event.key, event.value)
|
|
131
|
+
}),
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
// --- coordinators (owns()-gated) ---
|
|
135
|
+
|
|
136
|
+
// Phone-owned photo errors settle the in-flight long-poll fast (vs. timeout).
|
|
137
|
+
// Non-owned photo responses used to forward to the Cloud V1 photo pipeline via
|
|
138
|
+
// restComms; that relay was removed with Cloud V1 app end-of-life, so they drop.
|
|
139
|
+
// Wire v2 sends a short 4-hex BLE requestId; the coordinator maps it back to
|
|
140
|
+
// the cloud requestId (resolveCloudRequestId) before ownership checks.
|
|
141
|
+
subs.push(
|
|
142
|
+
BluetoothSdk.addListener("photo_response", (event) => {
|
|
143
|
+
const cloudRequestId = event.requestId ? phonePhotoCoordinator.resolveCloudRequestId(event.requestId) : ""
|
|
144
|
+
if (cloudRequestId && phonePhotoCoordinator.owns(cloudRequestId)) {
|
|
145
|
+
if (event.state === "error") {
|
|
146
|
+
phonePhotoCoordinator.handlePhotoError(
|
|
147
|
+
event.requestId ?? cloudRequestId,
|
|
148
|
+
event.errorCode ?? "GLASSES_ERROR",
|
|
149
|
+
event.errorMessage ?? "Glasses reported an error",
|
|
150
|
+
)
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}),
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
// Phone-owned stream status / keep-alive → the stream coordinator. The Cloud V1 relay
|
|
157
|
+
// for non-owned streams was removed with Cloud V1 app end-of-life.
|
|
158
|
+
subs.push(
|
|
159
|
+
BluetoothSdk.addListener("stream_status", (event) => {
|
|
160
|
+
if (event.streamId && phoneStreamCoordinator.owns(event.streamId)) {
|
|
161
|
+
phoneStreamCoordinator.handleGlassesStatus(event)
|
|
162
|
+
}
|
|
163
|
+
}),
|
|
164
|
+
)
|
|
165
|
+
subs.push(
|
|
166
|
+
BluetoothSdk.addListener("keep_alive_ack", (event) => {
|
|
167
|
+
if (event.streamId && phoneStreamCoordinator.owns(event.streamId)) {
|
|
168
|
+
phoneStreamCoordinator.handleKeepAliveAck(event)
|
|
169
|
+
}
|
|
170
|
+
}),
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
// --- device input → local miniapps (forwardEvent is subscriber-gated; a no-op when
|
|
174
|
+
// no miniapp listens). The v1 SocketComms cloud legs for these were removed with
|
|
175
|
+
// the Cloud V1 ripout. ---
|
|
176
|
+
|
|
177
|
+
subs.push(
|
|
178
|
+
BluetoothSdk.addListener("button_press", (event) => {
|
|
179
|
+
localMiniappRuntime.forwardEvent("button_press", event)
|
|
180
|
+
}),
|
|
181
|
+
)
|
|
182
|
+
subs.push(
|
|
183
|
+
BluetoothSdk.addListener("touch_event", (event) => {
|
|
184
|
+
localMiniappRuntime.forwardEvent("touch_event", event)
|
|
185
|
+
}),
|
|
186
|
+
)
|
|
187
|
+
// G2 IMU accelerometer — payload already matches the miniapp AccelData shape.
|
|
188
|
+
subs.push(
|
|
189
|
+
BluetoothSdk.addListener("accel_event", (event) => {
|
|
190
|
+
localMiniappRuntime.forwardEvent("accel_event", {
|
|
191
|
+
x: event.x,
|
|
192
|
+
y: event.y,
|
|
193
|
+
z: event.z,
|
|
194
|
+
timestamp: typeof event.timestamp === "number" ? event.timestamp : Date.now(),
|
|
195
|
+
})
|
|
196
|
+
}),
|
|
197
|
+
)
|
|
198
|
+
// Head position — translate native {up:boolean} → SDK {position:"up"|"down"}.
|
|
199
|
+
subs.push(
|
|
200
|
+
BluetoothSdk.addListener("head_up", (event) => {
|
|
201
|
+
localMiniappRuntime.forwardEvent("head_up", {position: event.up ? "up" : "down", timestamp: Date.now()})
|
|
202
|
+
}),
|
|
203
|
+
)
|
|
204
|
+
// On-device STT transcripts → local miniapps only while the local engine is
|
|
205
|
+
// active (cloud fallback or an explicit forceLocal subscription). The runtime
|
|
206
|
+
// filters mixed local/cloud delivery per miniapp to avoid double-delivery.
|
|
207
|
+
// forwardEvent is subscriber-gated — a no-op when no miniapp listens.
|
|
208
|
+
// (Was MantleManager.handle_local_transcription; its offline-captions display branch
|
|
209
|
+
// went away with the pseudo captions renderer.)
|
|
210
|
+
subs.push(
|
|
211
|
+
BluetoothSdk.addListener("local_transcription", (event) => {
|
|
212
|
+
if (!localSttFallbackCoordinator.isActive()) return
|
|
213
|
+
const lang = event.transcribeLanguage ?? localSttFallbackCoordinator.getActiveLanguage() ?? "en-US"
|
|
214
|
+
localMiniappRuntime.forwardEvent(`transcription:${lang}`, event, "local")
|
|
215
|
+
}),
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
// --- glasses swipe-menu app launcher (G2) ---
|
|
219
|
+
subs.push(
|
|
220
|
+
BluetoothSdk.addListener("miniapp_selected", (event) => {
|
|
221
|
+
const packageName = event.packageName as string
|
|
222
|
+
if (!packageName) return
|
|
223
|
+
const app = useAppStatusStore.getState().apps.find((a) => a.packageName === packageName)
|
|
224
|
+
if (!app) return
|
|
225
|
+
// Toggle: stop if running, else start.
|
|
226
|
+
if (app.running) {
|
|
227
|
+
useAppStatusStore.getState().stop(packageName)
|
|
228
|
+
} else {
|
|
229
|
+
useAppStatusStore.getState().start(app, {skipNavigation: true})
|
|
230
|
+
}
|
|
231
|
+
}),
|
|
232
|
+
)
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
export function stopDeviceEventRouter(): void {
|
|
236
|
+
for (const sub of subs) sub.remove()
|
|
237
|
+
subs = []
|
|
238
|
+
}
|