@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,180 @@
|
|
|
1
|
+
import BluetoothSdk from "@mentra/bluetooth-sdk/internal";
|
|
2
|
+
export const CAMERA_FOV_OVERRIDE_TTL_MS = 300_000;
|
|
3
|
+
export const CAMERA_FOV_OVERRIDE_REFRESH_MS = 120_000;
|
|
4
|
+
// Legacy ASG clients restart the camera HAL for an FOV update but cannot acknowledge
|
|
5
|
+
// when it is usable again. The ASG cooldown is 5s; retain a small settling margin so
|
|
6
|
+
// miniapps cannot submit a photo against the stale camera service.
|
|
7
|
+
const LEGACY_CAMERA_RESTART_SETTLE_MS = 7_000;
|
|
8
|
+
let leaseCounter = 0;
|
|
9
|
+
function mintLeaseId() {
|
|
10
|
+
leaseCounter = (leaseCounter + 1) & 0xffff;
|
|
11
|
+
return `fov-${leaseCounter.toString(16).padStart(4, "0")}`;
|
|
12
|
+
}
|
|
13
|
+
function isLegacyFovCompatibilityError(error) {
|
|
14
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
15
|
+
return /timed out waiting for glasses response|not available|unknown method/i.test(message);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Serializes miniapp-owned FOV/ROI overrides. The last live owner wins; releasing it applies the
|
|
19
|
+
* previous owner or asks ASG to restore its persistent base. ASG refreshes are no-restart TTL
|
|
20
|
+
* extensions for crash safety.
|
|
21
|
+
*/
|
|
22
|
+
export class PhoneCameraFovCoordinator {
|
|
23
|
+
legacyRestartSettleMs;
|
|
24
|
+
overrides = new Map();
|
|
25
|
+
effectiveLeaseId;
|
|
26
|
+
sequence = 0;
|
|
27
|
+
queue = Promise.resolve();
|
|
28
|
+
refreshTimer;
|
|
29
|
+
legacyMode = false;
|
|
30
|
+
constructor(legacyRestartSettleMs = LEGACY_CAMERA_RESTART_SETTLE_MS) {
|
|
31
|
+
this.legacyRestartSettleMs = legacyRestartSettleMs;
|
|
32
|
+
}
|
|
33
|
+
setOverride(packageName, request) {
|
|
34
|
+
return this.enqueue(async () => {
|
|
35
|
+
const previous = this.overrides.get(packageName);
|
|
36
|
+
const leaseId = previous?.leaseId ?? mintLeaseId();
|
|
37
|
+
const order = ++this.sequence;
|
|
38
|
+
try {
|
|
39
|
+
if (this.legacyMode)
|
|
40
|
+
return this.setLegacyOverride(packageName, request, leaseId, order);
|
|
41
|
+
const result = await BluetoothSdk.setCameraFovOverride({
|
|
42
|
+
...request,
|
|
43
|
+
leaseId,
|
|
44
|
+
ttlMs: CAMERA_FOV_OVERRIDE_TTL_MS,
|
|
45
|
+
});
|
|
46
|
+
this.overrides.set(packageName, {
|
|
47
|
+
leaseId,
|
|
48
|
+
fov: result.fov,
|
|
49
|
+
roiPosition: result.roiPosition,
|
|
50
|
+
order,
|
|
51
|
+
});
|
|
52
|
+
this.effectiveLeaseId = leaseId;
|
|
53
|
+
this.scheduleRefresh();
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
if (!isLegacyFovCompatibilityError(error))
|
|
58
|
+
throw error;
|
|
59
|
+
console.warn("[PhoneCameraFovCoordinator] override unavailable; using legacy FOV command", error);
|
|
60
|
+
const result = await this.setLegacyOverride(packageName, request, leaseId, order);
|
|
61
|
+
// Only cache compatibility mode after the fallback itself succeeds. A
|
|
62
|
+
// disconnect or missing native bridge must not permanently downgrade
|
|
63
|
+
// future requests on a healthy/newer glasses connection.
|
|
64
|
+
this.legacyMode = true;
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
releaseForApp(packageName) {
|
|
70
|
+
return this.enqueue(async () => {
|
|
71
|
+
const removed = this.overrides.get(packageName);
|
|
72
|
+
if (!removed)
|
|
73
|
+
return;
|
|
74
|
+
if (removed.leaseId !== this.effectiveLeaseId) {
|
|
75
|
+
this.overrides.delete(packageName);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const next = [...this.overrides.entries()]
|
|
79
|
+
.filter(([candidatePackage]) => candidatePackage !== packageName)
|
|
80
|
+
.map(([, entry]) => entry)
|
|
81
|
+
.sort((a, b) => b.order - a.order)[0];
|
|
82
|
+
if (this.legacyMode) {
|
|
83
|
+
if (next) {
|
|
84
|
+
await this.applyLegacyFov({ fov: next.fov, roiPosition: next.roiPosition });
|
|
85
|
+
this.overrides.delete(packageName);
|
|
86
|
+
this.effectiveLeaseId = next.leaseId;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
// Legacy commands are one-way and have no lease-release protocol.
|
|
90
|
+
// Ask native to replay its unchanged persistent base setting, then
|
|
91
|
+
// probe the modern override path again for the next ownership cycle.
|
|
92
|
+
await BluetoothSdk.restoreLegacyCameraFov();
|
|
93
|
+
await this.waitForLegacyCameraRestart();
|
|
94
|
+
this.overrides.delete(packageName);
|
|
95
|
+
this.clearRefresh();
|
|
96
|
+
this.effectiveLeaseId = undefined;
|
|
97
|
+
this.legacyMode = false;
|
|
98
|
+
}
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
if (next) {
|
|
102
|
+
await BluetoothSdk.setCameraFovOverride({
|
|
103
|
+
leaseId: next.leaseId,
|
|
104
|
+
fov: next.fov,
|
|
105
|
+
roiPosition: next.roiPosition,
|
|
106
|
+
ttlMs: CAMERA_FOV_OVERRIDE_TTL_MS,
|
|
107
|
+
});
|
|
108
|
+
// Commit phone-side ownership only after ASG accepted the replacement. On failure the
|
|
109
|
+
// closing app remains effective here, allowing unregister/reconnect cleanup to retry.
|
|
110
|
+
this.overrides.delete(packageName);
|
|
111
|
+
this.effectiveLeaseId = next.leaseId;
|
|
112
|
+
this.scheduleRefresh();
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
await BluetoothSdk.releaseCameraFovOverride(removed.leaseId);
|
|
116
|
+
this.overrides.delete(packageName);
|
|
117
|
+
this.clearRefresh();
|
|
118
|
+
this.effectiveLeaseId = undefined;
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
scheduleRefresh() {
|
|
123
|
+
if (this.legacyMode)
|
|
124
|
+
return;
|
|
125
|
+
this.clearRefresh();
|
|
126
|
+
const leaseId = this.effectiveLeaseId;
|
|
127
|
+
if (!leaseId)
|
|
128
|
+
return;
|
|
129
|
+
this.refreshTimer = setTimeout(() => {
|
|
130
|
+
void this.enqueue(async () => {
|
|
131
|
+
if (this.effectiveLeaseId !== leaseId)
|
|
132
|
+
return;
|
|
133
|
+
const entry = [...this.overrides.values()].find((candidate) => candidate.leaseId === leaseId);
|
|
134
|
+
if (!entry)
|
|
135
|
+
return;
|
|
136
|
+
await BluetoothSdk.setCameraFovOverride({
|
|
137
|
+
leaseId,
|
|
138
|
+
fov: entry.fov,
|
|
139
|
+
roiPosition: entry.roiPosition,
|
|
140
|
+
ttlMs: CAMERA_FOV_OVERRIDE_TTL_MS,
|
|
141
|
+
});
|
|
142
|
+
this.scheduleRefresh();
|
|
143
|
+
}).catch((error) => console.warn("[PhoneCameraFovCoordinator] failed to refresh override", error));
|
|
144
|
+
}, CAMERA_FOV_OVERRIDE_REFRESH_MS);
|
|
145
|
+
}
|
|
146
|
+
clearRefresh() {
|
|
147
|
+
if (this.refreshTimer)
|
|
148
|
+
clearTimeout(this.refreshTimer);
|
|
149
|
+
this.refreshTimer = undefined;
|
|
150
|
+
}
|
|
151
|
+
async setLegacyOverride(packageName, request, leaseId, order) {
|
|
152
|
+
const result = await this.applyLegacyFov(request);
|
|
153
|
+
this.overrides.set(packageName, {
|
|
154
|
+
leaseId,
|
|
155
|
+
fov: result.fov,
|
|
156
|
+
roiPosition: result.roiPosition,
|
|
157
|
+
order,
|
|
158
|
+
});
|
|
159
|
+
this.effectiveLeaseId = leaseId;
|
|
160
|
+
this.clearRefresh();
|
|
161
|
+
return result;
|
|
162
|
+
}
|
|
163
|
+
async applyLegacyFov(request) {
|
|
164
|
+
const result = await BluetoothSdk.setLegacyCameraFov(request);
|
|
165
|
+
await this.waitForLegacyCameraRestart();
|
|
166
|
+
return result;
|
|
167
|
+
}
|
|
168
|
+
waitForLegacyCameraRestart() {
|
|
169
|
+
if (this.legacyRestartSettleMs <= 0)
|
|
170
|
+
return Promise.resolve();
|
|
171
|
+
return new Promise((resolve) => setTimeout(resolve, this.legacyRestartSettleMs));
|
|
172
|
+
}
|
|
173
|
+
enqueue(operation) {
|
|
174
|
+
const result = this.queue.then(operation, operation);
|
|
175
|
+
this.queue = result.then(() => undefined, () => undefined);
|
|
176
|
+
return result;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
export const phoneCameraFovCoordinator = new PhoneCameraFovCoordinator();
|
|
180
|
+
//# sourceMappingURL=PhoneCameraFovCoordinator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PhoneCameraFovCoordinator.js","sourceRoot":"","sources":["../../src/services/PhoneCameraFovCoordinator.ts"],"names":[],"mappings":"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","sourcesContent":["import BluetoothSdk, {type CameraFovRequest, type CameraFovResult} from \"@mentra/bluetooth-sdk/internal\"\n\nexport const CAMERA_FOV_OVERRIDE_TTL_MS = 300_000\nexport const CAMERA_FOV_OVERRIDE_REFRESH_MS = 120_000\n// Legacy ASG clients restart the camera HAL for an FOV update but cannot acknowledge\n// when it is usable again. The ASG cooldown is 5s; retain a small settling margin so\n// miniapps cannot submit a photo against the stale camera service.\nconst LEGACY_CAMERA_RESTART_SETTLE_MS = 7_000\n\ninterface OverrideEntry {\n leaseId: string\n fov: number\n roiPosition: \"center\" | \"bottom\" | \"top\"\n order: number\n}\n\nlet leaseCounter = 0\n\nfunction mintLeaseId(): string {\n leaseCounter = (leaseCounter + 1) & 0xffff\n return `fov-${leaseCounter.toString(16).padStart(4, \"0\")}`\n}\n\nfunction isLegacyFovCompatibilityError(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error)\n return /timed out waiting for glasses response|not available|unknown method/i.test(message)\n}\n\n/**\n * Serializes miniapp-owned FOV/ROI overrides. The last live owner wins; releasing it applies the\n * previous owner or asks ASG to restore its persistent base. ASG refreshes are no-restart TTL\n * extensions for crash safety.\n */\nexport class PhoneCameraFovCoordinator {\n private readonly overrides = new Map<string, OverrideEntry>()\n private effectiveLeaseId: string | undefined\n private sequence = 0\n private queue: Promise<unknown> = Promise.resolve()\n private refreshTimer: ReturnType<typeof setTimeout> | undefined\n private legacyMode = false\n\n constructor(private readonly legacyRestartSettleMs = LEGACY_CAMERA_RESTART_SETTLE_MS) {}\n\n setOverride(packageName: string, request: CameraFovRequest): Promise<CameraFovResult> {\n return this.enqueue(async () => {\n const previous = this.overrides.get(packageName)\n const leaseId = previous?.leaseId ?? mintLeaseId()\n const order = ++this.sequence\n try {\n if (this.legacyMode) return this.setLegacyOverride(packageName, request, leaseId, order)\n const result = await BluetoothSdk.setCameraFovOverride({\n ...request,\n leaseId,\n ttlMs: CAMERA_FOV_OVERRIDE_TTL_MS,\n })\n this.overrides.set(packageName, {\n leaseId,\n fov: result.fov,\n roiPosition: result.roiPosition,\n order,\n })\n this.effectiveLeaseId = leaseId\n this.scheduleRefresh()\n return result\n } catch (error) {\n if (!isLegacyFovCompatibilityError(error)) throw error\n console.warn(\"[PhoneCameraFovCoordinator] override unavailable; using legacy FOV command\", error)\n const result = await this.setLegacyOverride(packageName, request, leaseId, order)\n // Only cache compatibility mode after the fallback itself succeeds. A\n // disconnect or missing native bridge must not permanently downgrade\n // future requests on a healthy/newer glasses connection.\n this.legacyMode = true\n return result\n }\n })\n }\n\n releaseForApp(packageName: string): Promise<void> {\n return this.enqueue(async () => {\n const removed = this.overrides.get(packageName)\n if (!removed) return\n if (removed.leaseId !== this.effectiveLeaseId) {\n this.overrides.delete(packageName)\n return\n }\n\n const next = [...this.overrides.entries()]\n .filter(([candidatePackage]) => candidatePackage !== packageName)\n .map(([, entry]) => entry)\n .sort((a, b) => b.order - a.order)[0]\n if (this.legacyMode) {\n if (next) {\n await this.applyLegacyFov({fov: next.fov, roiPosition: next.roiPosition})\n this.overrides.delete(packageName)\n this.effectiveLeaseId = next.leaseId\n } else {\n // Legacy commands are one-way and have no lease-release protocol.\n // Ask native to replay its unchanged persistent base setting, then\n // probe the modern override path again for the next ownership cycle.\n await BluetoothSdk.restoreLegacyCameraFov()\n await this.waitForLegacyCameraRestart()\n this.overrides.delete(packageName)\n this.clearRefresh()\n this.effectiveLeaseId = undefined\n this.legacyMode = false\n }\n return\n }\n if (next) {\n await BluetoothSdk.setCameraFovOverride({\n leaseId: next.leaseId,\n fov: next.fov,\n roiPosition: next.roiPosition,\n ttlMs: CAMERA_FOV_OVERRIDE_TTL_MS,\n })\n // Commit phone-side ownership only after ASG accepted the replacement. On failure the\n // closing app remains effective here, allowing unregister/reconnect cleanup to retry.\n this.overrides.delete(packageName)\n this.effectiveLeaseId = next.leaseId\n this.scheduleRefresh()\n } else {\n await BluetoothSdk.releaseCameraFovOverride(removed.leaseId)\n this.overrides.delete(packageName)\n this.clearRefresh()\n this.effectiveLeaseId = undefined\n }\n })\n }\n\n private scheduleRefresh(): void {\n if (this.legacyMode) return\n this.clearRefresh()\n const leaseId = this.effectiveLeaseId\n if (!leaseId) return\n this.refreshTimer = setTimeout(() => {\n void this.enqueue(async () => {\n if (this.effectiveLeaseId !== leaseId) return\n const entry = [...this.overrides.values()].find((candidate) => candidate.leaseId === leaseId)\n if (!entry) return\n await BluetoothSdk.setCameraFovOverride({\n leaseId,\n fov: entry.fov,\n roiPosition: entry.roiPosition,\n ttlMs: CAMERA_FOV_OVERRIDE_TTL_MS,\n })\n this.scheduleRefresh()\n }).catch((error) => console.warn(\"[PhoneCameraFovCoordinator] failed to refresh override\", error))\n }, CAMERA_FOV_OVERRIDE_REFRESH_MS)\n }\n\n private clearRefresh(): void {\n if (this.refreshTimer) clearTimeout(this.refreshTimer)\n this.refreshTimer = undefined\n }\n\n private async setLegacyOverride(\n packageName: string,\n request: CameraFovRequest,\n leaseId: string,\n order: number,\n ): Promise<CameraFovResult> {\n const result = await this.applyLegacyFov(request)\n this.overrides.set(packageName, {\n leaseId,\n fov: result.fov,\n roiPosition: result.roiPosition,\n order,\n })\n this.effectiveLeaseId = leaseId\n this.clearRefresh()\n return result\n }\n\n private async applyLegacyFov(request: CameraFovRequest): Promise<CameraFovResult> {\n const result = await BluetoothSdk.setLegacyCameraFov(request)\n await this.waitForLegacyCameraRestart()\n return result\n }\n\n private waitForLegacyCameraRestart(): Promise<void> {\n if (this.legacyRestartSettleMs <= 0) return Promise.resolve()\n return new Promise<void>((resolve) => setTimeout(resolve, this.legacyRestartSettleMs))\n }\n\n private enqueue<T>(operation: () => Promise<T>): Promise<T> {\n const result = this.queue.then(operation, operation)\n this.queue = result.then(\n () => undefined,\n () => undefined,\n )\n return result\n }\n}\n\nexport const phoneCameraFovCoordinator = new PhoneCameraFovCoordinator()\n"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phone location service — engine-owned. Owns the background phone-GPS task: the
|
|
3
|
+
* accuracy-tier control (`setLocationTier`), the accuracy mapping, and the
|
|
4
|
+
* `expo-task-manager` background task that fans each fix to the v2 cloud
|
|
5
|
+
* local miniapps (`location_update`). Cloud upload was V1 (removed).
|
|
6
|
+
*
|
|
7
|
+
* This used to be the host-injected `locationTier` runtime hook + a MantleManager
|
|
8
|
+
* `TaskManager.defineTask`. It's device/OS plumbing (no UI), so it moved into engine:
|
|
9
|
+
* the runtime drives `setLocationTier` directly off miniapp demand, and any host —
|
|
10
|
+
* including a bare OEM — gets phone location without wiring a hook. The host keeps the
|
|
11
|
+
* permission *UI* (it gates `setLocationTier` on the OS permission before calling).
|
|
12
|
+
*
|
|
13
|
+
* The task is registered at module load (the export from `index.ts` evaluates this
|
|
14
|
+
* file as soon as `@mentra/engine` is imported), matching the old MantleManager
|
|
15
|
+
* top-level `defineTask` timing — including on a headless background relaunch.
|
|
16
|
+
*/
|
|
17
|
+
import * as Location from "expo-location";
|
|
18
|
+
export declare const LOCATION_TASK_NAME = "handleLocationUpdates";
|
|
19
|
+
/** Map a MentraOS location tier/accuracy string to an expo-location accuracy. */
|
|
20
|
+
export declare function getLocationAccuracy(accuracy: string | undefined): Location.LocationAccuracy;
|
|
21
|
+
/**
|
|
22
|
+
* Apply a location tier (the aggregate of what miniapps request). "off" means no app
|
|
23
|
+
* is asking — stop the task so the OS can power GPS down; anything else (re)starts the
|
|
24
|
+
* background task at the matching accuracy. Callers gate this on the OS location
|
|
25
|
+
* permission (host UI concern).
|
|
26
|
+
*/
|
|
27
|
+
export declare function setLocationTier(tier: "off" | "passive" | "low" | "high" | "realtime" | string): Promise<void>;
|
|
28
|
+
/** Stop the background location task (host cleanup). */
|
|
29
|
+
export declare function stopPhoneLocation(): void;
|
|
30
|
+
export declare const phoneLocationService: {
|
|
31
|
+
LOCATION_TASK_NAME: string;
|
|
32
|
+
getLocationAccuracy: typeof getLocationAccuracy;
|
|
33
|
+
setLocationTier: typeof setLocationTier;
|
|
34
|
+
stopPhoneLocation: typeof stopPhoneLocation;
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=PhoneLocationService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PhoneLocationService.d.ts","sourceRoot":"","sources":["../../src/services/PhoneLocationService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAKzC,eAAO,MAAM,kBAAkB,0BAA0B,CAAA;AA8BzD,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC,gBAAgB,CA4B3F;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAC7D,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED,wDAAwD;AACxD,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED,eAAO,MAAM,oBAAoB;;;;;CAKhC,CAAA"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phone location service — engine-owned. Owns the background phone-GPS task: the
|
|
3
|
+
* accuracy-tier control (`setLocationTier`), the accuracy mapping, and the
|
|
4
|
+
* `expo-task-manager` background task that fans each fix to the v2 cloud
|
|
5
|
+
* local miniapps (`location_update`). Cloud upload was V1 (removed).
|
|
6
|
+
*
|
|
7
|
+
* This used to be the host-injected `locationTier` runtime hook + a MantleManager
|
|
8
|
+
* `TaskManager.defineTask`. It's device/OS plumbing (no UI), so it moved into engine:
|
|
9
|
+
* the runtime drives `setLocationTier` directly off miniapp demand, and any host —
|
|
10
|
+
* including a bare OEM — gets phone location without wiring a hook. The host keeps the
|
|
11
|
+
* permission *UI* (it gates `setLocationTier` on the OS permission before calling).
|
|
12
|
+
*
|
|
13
|
+
* The task is registered at module load (the export from `index.ts` evaluates this
|
|
14
|
+
* file as soon as `@mentra/engine` is imported), matching the old MantleManager
|
|
15
|
+
* top-level `defineTask` timing — including on a headless background relaunch.
|
|
16
|
+
*/
|
|
17
|
+
import * as Location from "expo-location";
|
|
18
|
+
import * as TaskManager from "expo-task-manager";
|
|
19
|
+
import localMiniappRuntime from "./LocalMiniappRuntime";
|
|
20
|
+
export const LOCATION_TASK_NAME = "handleLocationUpdates";
|
|
21
|
+
// Background location task — sends each fix to the v2 cloud (RestComms) + local
|
|
22
|
+
// miniapps. (The v1 SocketComms leg was already removed/commented before the move.)
|
|
23
|
+
TaskManager.defineTask(LOCATION_TASK_NAME, async ({ data, error }) => {
|
|
24
|
+
if (error) {
|
|
25
|
+
// OS-level failure (permission revoked, GPS unavailable, …) — log it so
|
|
26
|
+
// background location dropouts are diagnosable.
|
|
27
|
+
console.warn("ISLAND: LOCATION: background task error:", error);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const locs = data?.locations ?? [];
|
|
31
|
+
if (locs.length === 0) {
|
|
32
|
+
console.log("ISLAND: LOCATION: No locations received");
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const first = locs[0];
|
|
36
|
+
// Cloud path (relayMessageToApps) never reaches __phone__, so local miniapps rely
|
|
37
|
+
// on this direct push.
|
|
38
|
+
// Local miniapps get the update directly (the cloud relay never reaches
|
|
39
|
+
// __phone__). The Cloud V1 upload that used to run here was removed with the
|
|
40
|
+
// V1 ripout (issue #3392); a V2 location channel is separate product work.
|
|
41
|
+
localMiniappRuntime.forwardEvent("location_update", {
|
|
42
|
+
lat: first.coords.latitude,
|
|
43
|
+
lng: first.coords.longitude,
|
|
44
|
+
accuracy: first.coords.accuracy ?? undefined,
|
|
45
|
+
timestamp: first.timestamp,
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
/** Map a MentraOS location tier/accuracy string to an expo-location accuracy. */
|
|
49
|
+
export function getLocationAccuracy(accuracy) {
|
|
50
|
+
switch (accuracy) {
|
|
51
|
+
// Aggregate miniapp tiers (LocalMiniappRuntime.recomputeLocation → "passive" |
|
|
52
|
+
// "low" | "high" | "realtime"). Previously only "realtime" mapped; "passive"/"low"/
|
|
53
|
+
// "high" fell through to Lowest, so a miniapp asking for high-rate GPS got the
|
|
54
|
+
// coarsest accuracy.
|
|
55
|
+
case "realtime":
|
|
56
|
+
return Location.LocationAccuracy.BestForNavigation;
|
|
57
|
+
case "high":
|
|
58
|
+
return Location.LocationAccuracy.High;
|
|
59
|
+
case "low":
|
|
60
|
+
return Location.LocationAccuracy.Low;
|
|
61
|
+
case "passive":
|
|
62
|
+
return Location.LocationAccuracy.Lowest;
|
|
63
|
+
// Accuracy-string vocabulary (persisted location_tier setting / boot path).
|
|
64
|
+
case "tenMeters":
|
|
65
|
+
return Location.LocationAccuracy.High;
|
|
66
|
+
case "hundredMeters":
|
|
67
|
+
return Location.LocationAccuracy.Balanced;
|
|
68
|
+
case "kilometer":
|
|
69
|
+
return Location.LocationAccuracy.Low;
|
|
70
|
+
case "threeKilometers":
|
|
71
|
+
return Location.LocationAccuracy.Lowest;
|
|
72
|
+
case "reduced":
|
|
73
|
+
return Location.LocationAccuracy.Lowest;
|
|
74
|
+
default:
|
|
75
|
+
return Location.LocationAccuracy.Lowest;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Apply a location tier (the aggregate of what miniapps request). "off" means no app
|
|
80
|
+
* is asking — stop the task so the OS can power GPS down; anything else (re)starts the
|
|
81
|
+
* background task at the matching accuracy. Callers gate this on the OS location
|
|
82
|
+
* permission (host UI concern).
|
|
83
|
+
*/
|
|
84
|
+
export async function setLocationTier(tier) {
|
|
85
|
+
console.log("ISLAND: setLocationTier()", tier);
|
|
86
|
+
try {
|
|
87
|
+
const isRegistered = await Location.hasStartedLocationUpdatesAsync(LOCATION_TASK_NAME).catch(() => false);
|
|
88
|
+
if (isRegistered) {
|
|
89
|
+
await Location.stopLocationUpdatesAsync(LOCATION_TASK_NAME);
|
|
90
|
+
}
|
|
91
|
+
if (tier === "off") {
|
|
92
|
+
console.log("ISLAND: setLocationTier() stopped — no active subscribers");
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
await Location.startLocationUpdatesAsync(LOCATION_TASK_NAME, {
|
|
96
|
+
accuracy: getLocationAccuracy(tier),
|
|
97
|
+
pausesUpdatesAutomatically: false,
|
|
98
|
+
});
|
|
99
|
+
console.log("ISLAND: setLocationTier() success —", tier);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
console.log("ISLAND: Error setting location tier", error);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/** Stop the background location task (host cleanup). */
|
|
106
|
+
export function stopPhoneLocation() {
|
|
107
|
+
Location.stopLocationUpdatesAsync(LOCATION_TASK_NAME).catch(() => { });
|
|
108
|
+
}
|
|
109
|
+
export const phoneLocationService = {
|
|
110
|
+
LOCATION_TASK_NAME,
|
|
111
|
+
getLocationAccuracy,
|
|
112
|
+
setLocationTier,
|
|
113
|
+
stopPhoneLocation,
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=PhoneLocationService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PhoneLocationService.js","sourceRoot":"","sources":["../../src/services/PhoneLocationService.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Phone location service — engine-owned. Owns the background phone-GPS task: the\n * accuracy-tier control (`setLocationTier`), the accuracy mapping, and the\n * `expo-task-manager` background task that fans each fix to the v2 cloud\n * local miniapps (`location_update`). Cloud upload was V1 (removed).\n *\n * This used to be the host-injected `locationTier` runtime hook + a MantleManager\n * `TaskManager.defineTask`. It's device/OS plumbing (no UI), so it moved into engine:\n * the runtime drives `setLocationTier` directly off miniapp demand, and any host —\n * including a bare OEM — gets phone location without wiring a hook. The host keeps the\n * permission *UI* (it gates `setLocationTier` on the OS permission before calling).\n *\n * The task is registered at module load (the export from `index.ts` evaluates this\n * file as soon as `@mentra/engine` is imported), matching the old MantleManager\n * top-level `defineTask` timing — including on a headless background relaunch.\n */\nimport * as Location from \"expo-location\"\nimport * as TaskManager from \"expo-task-manager\"\n\nimport localMiniappRuntime from \"./LocalMiniappRuntime\"\n\nexport const LOCATION_TASK_NAME = \"handleLocationUpdates\"\n\n// Background location task — sends each fix to the v2 cloud (RestComms) + local\n// miniapps. (The v1 SocketComms leg was already removed/commented before the move.)\nTaskManager.defineTask<{locations?: Location.LocationObject[]}>(LOCATION_TASK_NAME, async ({data, error}) => {\n if (error) {\n // OS-level failure (permission revoked, GPS unavailable, …) — log it so\n // background location dropouts are diagnosable.\n console.warn(\"ISLAND: LOCATION: background task error:\", error)\n return\n }\n const locs = data?.locations ?? []\n if (locs.length === 0) {\n console.log(\"ISLAND: LOCATION: No locations received\")\n return\n }\n const first = locs[0]!\n // Cloud path (relayMessageToApps) never reaches __phone__, so local miniapps rely\n // on this direct push.\n // Local miniapps get the update directly (the cloud relay never reaches\n // __phone__). The Cloud V1 upload that used to run here was removed with the\n // V1 ripout (issue #3392); a V2 location channel is separate product work.\n localMiniappRuntime.forwardEvent(\"location_update\", {\n lat: first.coords.latitude,\n lng: first.coords.longitude,\n accuracy: first.coords.accuracy ?? undefined,\n timestamp: first.timestamp,\n })\n})\n\n/** Map a MentraOS location tier/accuracy string to an expo-location accuracy. */\nexport function getLocationAccuracy(accuracy: string | undefined): Location.LocationAccuracy {\n switch (accuracy) {\n // Aggregate miniapp tiers (LocalMiniappRuntime.recomputeLocation → \"passive\" |\n // \"low\" | \"high\" | \"realtime\"). Previously only \"realtime\" mapped; \"passive\"/\"low\"/\n // \"high\" fell through to Lowest, so a miniapp asking for high-rate GPS got the\n // coarsest accuracy.\n case \"realtime\":\n return Location.LocationAccuracy.BestForNavigation\n case \"high\":\n return Location.LocationAccuracy.High\n case \"low\":\n return Location.LocationAccuracy.Low\n case \"passive\":\n return Location.LocationAccuracy.Lowest\n // Accuracy-string vocabulary (persisted location_tier setting / boot path).\n case \"tenMeters\":\n return Location.LocationAccuracy.High\n case \"hundredMeters\":\n return Location.LocationAccuracy.Balanced\n case \"kilometer\":\n return Location.LocationAccuracy.Low\n case \"threeKilometers\":\n return Location.LocationAccuracy.Lowest\n case \"reduced\":\n return Location.LocationAccuracy.Lowest\n default:\n return Location.LocationAccuracy.Lowest\n }\n}\n\n/**\n * Apply a location tier (the aggregate of what miniapps request). \"off\" means no app\n * is asking — stop the task so the OS can power GPS down; anything else (re)starts the\n * background task at the matching accuracy. Callers gate this on the OS location\n * permission (host UI concern).\n */\nexport async function setLocationTier(\n tier: \"off\" | \"passive\" | \"low\" | \"high\" | \"realtime\" | string,\n): Promise<void> {\n console.log(\"ISLAND: setLocationTier()\", tier)\n try {\n const isRegistered = await Location.hasStartedLocationUpdatesAsync(LOCATION_TASK_NAME).catch(() => false)\n if (isRegistered) {\n await Location.stopLocationUpdatesAsync(LOCATION_TASK_NAME)\n }\n if (tier === \"off\") {\n console.log(\"ISLAND: setLocationTier() stopped — no active subscribers\")\n return\n }\n await Location.startLocationUpdatesAsync(LOCATION_TASK_NAME, {\n accuracy: getLocationAccuracy(tier),\n pausesUpdatesAutomatically: false,\n })\n console.log(\"ISLAND: setLocationTier() success —\", tier)\n } catch (error) {\n console.log(\"ISLAND: Error setting location tier\", error)\n }\n}\n\n/** Stop the background location task (host cleanup). */\nexport function stopPhoneLocation(): void {\n Location.stopLocationUpdatesAsync(LOCATION_TASK_NAME).catch(() => {})\n}\n\nexport const phoneLocationService = {\n LOCATION_TASK_NAME,\n getLocationAccuracy,\n setLocationTier,\n stopPhoneLocation,\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PhoneNotificationsSync.d.ts","sourceRoot":"","sources":["../../src/services/PhoneNotificationsSync.ts"],"names":[],"mappings":"AA2BA,wBAAgB,2BAA2B,IAAI,IAAI,CAWlD;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAGjD"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phone-notifications sync — engine-owned. Pushes the notification-forwarding
|
|
3
|
+
* config (`notifications_enabled` + `notifications_blocklist`) to the native
|
|
4
|
+
* NotificationListener via `CrustModule.setNotificationConfig`, so
|
|
5
|
+
* `engine.phoneNotifications.setEnabled()/setBlocklist()` actually reach the
|
|
6
|
+
* listener for ANY host — not just the Mentra app, where this used to live in
|
|
7
|
+
* MantleManager. Android-only; a no-op elsewhere. Started by `engine.start()`.
|
|
8
|
+
*/
|
|
9
|
+
import { shallow } from "zustand/shallow";
|
|
10
|
+
import CrustModule from "@mentra/crust";
|
|
11
|
+
import { useSettingsStore, SETTINGS } from "../stores/settings";
|
|
12
|
+
let unsubscribe = null;
|
|
13
|
+
function pushConfig() {
|
|
14
|
+
const s = useSettingsStore.getState();
|
|
15
|
+
const enabled = Boolean(s.getSetting(SETTINGS.notifications_enabled.key));
|
|
16
|
+
const blocklist = s.getSetting(SETTINGS.notifications_blocklist.key);
|
|
17
|
+
// Unconditional (matches the prior MantleManager sync) — the listener is
|
|
18
|
+
// Android-only, but CrustModule.setNotificationConfig is a safe no-op elsewhere;
|
|
19
|
+
// the Android-only gating lives on the facade's setEnabled/setBlocklist.
|
|
20
|
+
CrustModule.setNotificationConfig(enabled, Array.isArray(blocklist) ? blocklist : []).catch((err) => console.warn(`PhoneNotificationsSync: setNotificationConfig failed: ${err?.message ?? err}`));
|
|
21
|
+
}
|
|
22
|
+
export function startPhoneNotificationsSync() {
|
|
23
|
+
if (unsubscribe)
|
|
24
|
+
return;
|
|
25
|
+
pushConfig(); // initial sync so the listener has the current config
|
|
26
|
+
unsubscribe = useSettingsStore.subscribe((state) => ({
|
|
27
|
+
enabled: state.getSetting(SETTINGS.notifications_enabled.key),
|
|
28
|
+
blocklist: state.getSetting(SETTINGS.notifications_blocklist.key),
|
|
29
|
+
}), () => pushConfig(), { equalityFn: shallow });
|
|
30
|
+
}
|
|
31
|
+
export function stopPhoneNotificationsSync() {
|
|
32
|
+
unsubscribe?.();
|
|
33
|
+
unsubscribe = null;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=PhoneNotificationsSync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PhoneNotificationsSync.js","sourceRoot":"","sources":["../../src/services/PhoneNotificationsSync.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAC,OAAO,EAAC,MAAM,iBAAiB,CAAA;AACvC,OAAO,WAAW,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAC,gBAAgB,EAAE,QAAQ,EAAC,MAAM,oBAAoB,CAAA;AAE7D,IAAI,WAAW,GAAwB,IAAI,CAAA;AAE3C,SAAS,UAAU;IACjB,MAAM,CAAC,GAAG,gBAAgB,CAAC,QAAQ,EAAE,CAAA;IACrC,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAA;IACzE,MAAM,SAAS,GAAG,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAA;IACpE,yEAAyE;IACzE,iFAAiF;IACjF,yEAAyE;IACzE,WAAW,CAAC,qBAAqB,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE,CAC3G,OAAO,CAAC,IAAI,CAAC,yDAA0D,GAAa,EAAE,OAAO,IAAI,GAAG,EAAE,CAAC,CACxG,CAAA;AACH,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,IAAI,WAAW;QAAE,OAAM;IACvB,UAAU,EAAE,CAAA,CAAC,sDAAsD;IACnE,WAAW,GAAG,gBAAgB,CAAC,SAAS,CACtC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACV,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,qBAAqB,CAAC,GAAG,CAAC;QAC7D,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,uBAAuB,CAAC,GAAG,CAAC;KAClE,CAAC,EACF,GAAG,EAAE,CAAC,UAAU,EAAE,EAClB,EAAC,UAAU,EAAE,OAAO,EAAC,CACtB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,WAAW,EAAE,EAAE,CAAA;IACf,WAAW,GAAG,IAAI,CAAA;AACpB,CAAC","sourcesContent":["/**\n * Phone-notifications sync — engine-owned. Pushes the notification-forwarding\n * config (`notifications_enabled` + `notifications_blocklist`) to the native\n * NotificationListener via `CrustModule.setNotificationConfig`, so\n * `engine.phoneNotifications.setEnabled()/setBlocklist()` actually reach the\n * listener for ANY host — not just the Mentra app, where this used to live in\n * MantleManager. Android-only; a no-op elsewhere. Started by `engine.start()`.\n */\nimport {shallow} from \"zustand/shallow\"\nimport CrustModule from \"@mentra/crust\"\n\nimport {useSettingsStore, SETTINGS} from \"../stores/settings\"\n\nlet unsubscribe: (() => void) | null = null\n\nfunction pushConfig(): void {\n const s = useSettingsStore.getState()\n const enabled = Boolean(s.getSetting(SETTINGS.notifications_enabled.key))\n const blocklist = s.getSetting(SETTINGS.notifications_blocklist.key)\n // Unconditional (matches the prior MantleManager sync) — the listener is\n // Android-only, but CrustModule.setNotificationConfig is a safe no-op elsewhere;\n // the Android-only gating lives on the facade's setEnabled/setBlocklist.\n CrustModule.setNotificationConfig(enabled, Array.isArray(blocklist) ? blocklist : []).catch((err: unknown) =>\n console.warn(`PhoneNotificationsSync: setNotificationConfig failed: ${(err as Error)?.message ?? err}`),\n )\n}\n\nexport function startPhoneNotificationsSync(): void {\n if (unsubscribe) return\n pushConfig() // initial sync so the listener has the current config\n unsubscribe = useSettingsStore.subscribe(\n (state) => ({\n enabled: state.getSetting(SETTINGS.notifications_enabled.key),\n blocklist: state.getSetting(SETTINGS.notifications_blocklist.key),\n }),\n () => pushConfig(),\n {equalityFn: shallow},\n )\n}\n\nexport function stopPhoneNotificationsSync(): void {\n unsubscribe?.()\n unsubscribe = null\n}\n"]}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PhonePhotoCoordinator — owns local-miniapp takePhoto() end-to-end.
|
|
3
|
+
*
|
|
4
|
+
* Architecture:
|
|
5
|
+
* miniapp → SDK → LocalMiniappRuntime → photo runtime hook
|
|
6
|
+
* → coordinator.takePhoto(packageName, opts)
|
|
7
|
+
* ├── (precheck) glasses connected + hasCamera
|
|
8
|
+
* ├── cloudClientService.startManagedPhoto → {requestId, uploadUrl, readUrl} (cloud-v2 runtime presign)
|
|
9
|
+
* ├── BluetoothSdk.requestPhoto(requestId, size, uploadUrl, compress, sound)
|
|
10
|
+
* └── race:
|
|
11
|
+
* - cloudClientService.awaitManagedPhotoReady(requestId) resolves on photo.ready push
|
|
12
|
+
* - BluetoothSdk.requestPhoto rejects if terminal photo_response is an error
|
|
13
|
+
* - handlePhotoError(requestId, code, message) rejects if MantleManager observes
|
|
14
|
+
* the same BLE photo_response error before the native promise crosses the bridge
|
|
15
|
+
*
|
|
16
|
+
* `activeRequests` lets MantleManager's gated `photo_response` listener
|
|
17
|
+
* short-circuit our long-poll with a typed error (CAMERA_BUSY, BATTERY_LOW,
|
|
18
|
+
* etc.) instead of waiting 30s for cloud's timeout.
|
|
19
|
+
*/
|
|
20
|
+
export interface PhotoOpts {
|
|
21
|
+
/** Legacy cloud size names are normalized before the native take_photo command. */
|
|
22
|
+
size?: "low" | "medium" | "high" | "max" | "small" | "large" | "full";
|
|
23
|
+
mode?: "photo" | "text";
|
|
24
|
+
/** Force phone-relayed BLE delivery, or leave native on its auto Wi-Fi/BLE policy. */
|
|
25
|
+
transferMethod?: "auto" | "ble";
|
|
26
|
+
compress?: "none" | "low" | "medium" | "high";
|
|
27
|
+
sound?: boolean;
|
|
28
|
+
saveToGallery?: boolean;
|
|
29
|
+
exposureTimeNs?: number;
|
|
30
|
+
iso?: number | null;
|
|
31
|
+
aeExposureDivisor?: number;
|
|
32
|
+
isoCap?: number;
|
|
33
|
+
noiseReduction?: boolean;
|
|
34
|
+
edgeEnhancement?: boolean;
|
|
35
|
+
mfnr?: boolean;
|
|
36
|
+
zsl?: boolean;
|
|
37
|
+
ispDigitalGain?: number;
|
|
38
|
+
ispAnalogGain?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface PhotoTaken {
|
|
41
|
+
photoUrl: string;
|
|
42
|
+
mimeType: string;
|
|
43
|
+
size: number;
|
|
44
|
+
requestId: string;
|
|
45
|
+
}
|
|
46
|
+
/** Pipeline stage a photo request failed at — surfaced to the miniapp so a dev
|
|
47
|
+
* sees exactly where it broke, not just a flattened message. */
|
|
48
|
+
export type PhotoStage = "presign" | "command" | "capture" | "upload" | "push";
|
|
49
|
+
/** Transport in play at the point of failure. */
|
|
50
|
+
export type PhotoTransport = "cloud-rest" | "ble" | "wifi" | "ws";
|
|
51
|
+
export declare class PhotoError extends Error {
|
|
52
|
+
readonly code: string;
|
|
53
|
+
readonly stage?: PhotoStage | undefined;
|
|
54
|
+
readonly transport?: PhotoTransport | undefined;
|
|
55
|
+
constructor(code: string, message: string, stage?: PhotoStage | undefined, transport?: PhotoTransport | undefined);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Last-resort ceiling for the complete capture + encode + transfer + upload
|
|
59
|
+
* pipeline. This must exceed the managed-photo service's 30s ready-push
|
|
60
|
+
* timeout so the cloud can return its more specific failure first.
|
|
61
|
+
*
|
|
62
|
+
* Text mode commonly spends several seconds detecting/cropping the region and
|
|
63
|
+
* can take another 10s+ to transfer over BLE. A 15s ceiling incorrectly
|
|
64
|
+
* rejected successful captures while their upload was still in progress.
|
|
65
|
+
*/
|
|
66
|
+
export declare const CAPTURE_PIPELINE_TIMEOUT_MS = 45000;
|
|
67
|
+
export declare const CAMERA_WARM_UP_DEFAULT_DURATION_MS = 15000;
|
|
68
|
+
export declare const CAMERA_WARM_UP_MAX_DURATION_MS = 60000;
|
|
69
|
+
export declare class PhonePhotoCoordinator {
|
|
70
|
+
private readonly activeRequests;
|
|
71
|
+
/** Short BLE correlation id (4-char hex) → full cloud requestId. */
|
|
72
|
+
private readonly bleIdToCloud;
|
|
73
|
+
private readonly activeWarmUps;
|
|
74
|
+
takePhoto(packageName: string, opts: PhotoOpts): Promise<PhotoTaken>;
|
|
75
|
+
/** Map a short BLE requestId from photo_response back to the cloud requestId. */
|
|
76
|
+
resolveCloudRequestId(bleOrCloudId: string): string;
|
|
77
|
+
/**
|
|
78
|
+
* Pre-warm the glasses camera so the next takePhoto() is near-instant.
|
|
79
|
+
*
|
|
80
|
+
* Pure BLE — NO cloud presign, NO upload, NO long-poll. The phone mints and owns
|
|
81
|
+
* the requestId, sends the warm-up command, and resolves when the camera reports
|
|
82
|
+
* ready (the native promise resolves on the ready status event).
|
|
83
|
+
*/
|
|
84
|
+
warmUpCamera(packageName: string, opts: {
|
|
85
|
+
size?: "low" | "medium" | "high" | "max";
|
|
86
|
+
mode?: "photo" | "text";
|
|
87
|
+
exposureTimeNs?: number;
|
|
88
|
+
durationMs?: number;
|
|
89
|
+
}): Promise<void>;
|
|
90
|
+
/** Release a miniapp's warm-up even if its original warmUpCamera promise is still opening. */
|
|
91
|
+
stopWarmUpForApp(packageName: string): Promise<void>;
|
|
92
|
+
/** True iff this requestId (short BLE id or cloud id) is one we're currently waiting on. */
|
|
93
|
+
owns(requestId: string): boolean;
|
|
94
|
+
/**
|
|
95
|
+
* Called by MantleManager's gated photo_response listener when glasses
|
|
96
|
+
* report an error (BATTERY_LOW, CAMERA_BUSY, etc.) for a phone-owned
|
|
97
|
+
* requestId. Rejects the in-flight takePhoto Promise immediately.
|
|
98
|
+
*/
|
|
99
|
+
handlePhotoError(requestId: string, errorCode: string, errorMessage: string): void;
|
|
100
|
+
private toPhotoError;
|
|
101
|
+
}
|
|
102
|
+
export declare const phonePhotoCoordinator: PhonePhotoCoordinator;
|
|
103
|
+
//# sourceMappingURL=PhonePhotoCoordinator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PhonePhotoCoordinator.d.ts","sourceRoot":"","sources":["../../src/services/PhonePhotoCoordinator.ts"],"names":[],"mappings":"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"}
|