@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,212 @@
|
|
|
1
|
+
import {MiniappErrorCode, type CalendarEvent} from "@mentra/miniapp"
|
|
2
|
+
|
|
3
|
+
const DEFAULT_LIMIT = 50
|
|
4
|
+
const MAX_LIMIT = 100
|
|
5
|
+
const MAX_RANGE_MS = 31 * 24 * 60 * 60 * 1000
|
|
6
|
+
|
|
7
|
+
export interface CalendarListRequest {
|
|
8
|
+
startsAt?: unknown
|
|
9
|
+
endsAt?: unknown
|
|
10
|
+
limit?: unknown
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export class PhoneCalendarError extends Error {
|
|
14
|
+
constructor(
|
|
15
|
+
public readonly code: MiniappErrorCode,
|
|
16
|
+
message: string,
|
|
17
|
+
) {
|
|
18
|
+
super(message)
|
|
19
|
+
this.name = "PhoneCalendarError"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface ValidatedCalendarListRequest {
|
|
24
|
+
startsAt: Date
|
|
25
|
+
endsAt: Date
|
|
26
|
+
limit: number
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface RawCalendarEvent {
|
|
30
|
+
id?: string
|
|
31
|
+
calendarId?: string
|
|
32
|
+
title?: string | null
|
|
33
|
+
startDate: string | Date
|
|
34
|
+
endDate: string | Date
|
|
35
|
+
timeZone?: string | null
|
|
36
|
+
allDay?: boolean
|
|
37
|
+
location?: string | null
|
|
38
|
+
notes?: string | null
|
|
39
|
+
url?: string | null
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function validateCalendarListRequest(request: CalendarListRequest): ValidatedCalendarListRequest {
|
|
43
|
+
const startsAt = parseDate(request.startsAt, "startsAt")
|
|
44
|
+
const endsAt = parseDate(request.endsAt, "endsAt")
|
|
45
|
+
if (endsAt.getTime() <= startsAt.getTime()) {
|
|
46
|
+
throw new PhoneCalendarError(MiniappErrorCode.INVALID_ARGUMENT, "endsAt must be after startsAt")
|
|
47
|
+
}
|
|
48
|
+
if (endsAt.getTime() - startsAt.getTime() > MAX_RANGE_MS) {
|
|
49
|
+
throw new PhoneCalendarError(MiniappErrorCode.INVALID_ARGUMENT, "Calendar query range may not exceed 31 days")
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const limit = request.limit === undefined ? DEFAULT_LIMIT : request.limit
|
|
53
|
+
if (typeof limit !== "number" || !Number.isInteger(limit) || limit < 1 || limit > MAX_LIMIT) {
|
|
54
|
+
throw new PhoneCalendarError(
|
|
55
|
+
MiniappErrorCode.INVALID_ARGUMENT,
|
|
56
|
+
`limit must be an integer between 1 and ${MAX_LIMIT}`,
|
|
57
|
+
)
|
|
58
|
+
}
|
|
59
|
+
return {startsAt, endsAt, limit}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function parseDate(value: unknown, field: string): Date {
|
|
63
|
+
if (typeof value !== "string") {
|
|
64
|
+
throw new PhoneCalendarError(MiniappErrorCode.INVALID_ARGUMENT, `${field} must be an ISO 8601 string`)
|
|
65
|
+
}
|
|
66
|
+
const date = new Date(value)
|
|
67
|
+
if (Number.isNaN(date.getTime())) {
|
|
68
|
+
throw new PhoneCalendarError(MiniappErrorCode.INVALID_ARGUMENT, `${field} must be a valid ISO 8601 string`)
|
|
69
|
+
}
|
|
70
|
+
return date
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export function extractHttpsLinks(...values: Array<string | null | undefined>): string[] {
|
|
74
|
+
const links = new Set<string>()
|
|
75
|
+
for (const value of values) {
|
|
76
|
+
for (const match of value?.match(/https:\/\/[^\s<>"']+/gi) ?? []) {
|
|
77
|
+
let link = match
|
|
78
|
+
while (".,;:!?)]}".includes(link[link.length - 1] ?? "")) link = link.slice(0, -1)
|
|
79
|
+
if (link) links.add(link)
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return [...links]
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
interface CalendarDateParts {
|
|
86
|
+
year: number
|
|
87
|
+
month: number
|
|
88
|
+
day: number
|
|
89
|
+
hour: number
|
|
90
|
+
minute: number
|
|
91
|
+
second: number
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function localDateParts(date: Date): CalendarDateParts {
|
|
95
|
+
return {
|
|
96
|
+
year: date.getFullYear(),
|
|
97
|
+
month: date.getMonth() + 1,
|
|
98
|
+
day: date.getDate(),
|
|
99
|
+
hour: date.getHours(),
|
|
100
|
+
minute: date.getMinutes(),
|
|
101
|
+
second: date.getSeconds(),
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function datePartsInTimeZone(date: Date, timeZone: string): CalendarDateParts | undefined {
|
|
106
|
+
try {
|
|
107
|
+
const parts = new Intl.DateTimeFormat("en-US", {
|
|
108
|
+
timeZone,
|
|
109
|
+
year: "numeric",
|
|
110
|
+
month: "2-digit",
|
|
111
|
+
day: "2-digit",
|
|
112
|
+
hour: "2-digit",
|
|
113
|
+
minute: "2-digit",
|
|
114
|
+
second: "2-digit",
|
|
115
|
+
hourCycle: "h23",
|
|
116
|
+
}).formatToParts(date)
|
|
117
|
+
const value = (type: Intl.DateTimeFormatPartTypes) => Number(parts.find((part) => part.type === type)?.value)
|
|
118
|
+
return {
|
|
119
|
+
year: value("year"),
|
|
120
|
+
month: value("month"),
|
|
121
|
+
day: value("day"),
|
|
122
|
+
hour: value("hour"),
|
|
123
|
+
minute: value("minute"),
|
|
124
|
+
second: value("second"),
|
|
125
|
+
}
|
|
126
|
+
} catch {
|
|
127
|
+
return undefined
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function timeZoneOffsetMinutes(date: Date, timeZone: string): number | undefined {
|
|
132
|
+
const parts = datePartsInTimeZone(date, timeZone)
|
|
133
|
+
if (!parts) return undefined
|
|
134
|
+
const representedAsUtc = Date.UTC(
|
|
135
|
+
parts.year,
|
|
136
|
+
parts.month - 1,
|
|
137
|
+
parts.day,
|
|
138
|
+
parts.hour,
|
|
139
|
+
parts.minute,
|
|
140
|
+
parts.second,
|
|
141
|
+
date.getUTCMilliseconds(),
|
|
142
|
+
)
|
|
143
|
+
return Math.round((representedAsUtc - date.getTime()) / 60_000)
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function pad(value: number, length = 2): string {
|
|
147
|
+
return String(value).padStart(length, "0")
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
function formatOffset(offsetMinutes: number): string {
|
|
151
|
+
if (offsetMinutes === 0) return "Z"
|
|
152
|
+
const sign = offsetMinutes < 0 ? "-" : "+"
|
|
153
|
+
const absolute = Math.abs(offsetMinutes)
|
|
154
|
+
return `${sign}${pad(Math.floor(absolute / 60))}:${pad(absolute % 60)}`
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
function formatAllDayDate(value: string | Date, timeZone?: string | null): string {
|
|
158
|
+
const dateOnly = typeof value === "string" ? /^(\d{4})-(\d{2})-(\d{2})$/.exec(value) : null
|
|
159
|
+
if (dateOnly) {
|
|
160
|
+
const [, year, month, day] = dateOnly
|
|
161
|
+
const localMidnight = new Date(Number(year), Number(month) - 1, Number(day))
|
|
162
|
+
let offsetMinutes = -localMidnight.getTimezoneOffset()
|
|
163
|
+
if (timeZone) {
|
|
164
|
+
// Resolve the offset at midnight in the event timezone. Repeating once
|
|
165
|
+
// accounts for the initial UTC guess landing across a DST boundary.
|
|
166
|
+
const wallTime = Date.UTC(Number(year), Number(month) - 1, Number(day))
|
|
167
|
+
let instant = new Date(wallTime)
|
|
168
|
+
for (let attempt = 0; attempt < 2; attempt += 1) {
|
|
169
|
+
const offset = timeZoneOffsetMinutes(instant, timeZone)
|
|
170
|
+
if (offset === undefined) break
|
|
171
|
+
offsetMinutes = offset
|
|
172
|
+
instant = new Date(wallTime - offset * 60_000)
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return `${year}-${month}-${day}T00:00:00.000${formatOffset(offsetMinutes)}`
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
const date = new Date(value)
|
|
179
|
+
const zonedParts = timeZone ? datePartsInTimeZone(date, timeZone) : undefined
|
|
180
|
+
const parts = zonedParts ?? localDateParts(date)
|
|
181
|
+
const offsetMinutes =
|
|
182
|
+
timeZone && zonedParts
|
|
183
|
+
? (timeZoneOffsetMinutes(date, timeZone) ?? -date.getTimezoneOffset())
|
|
184
|
+
: -date.getTimezoneOffset()
|
|
185
|
+
return `${pad(parts.year, 4)}-${pad(parts.month)}-${pad(parts.day)}T${pad(parts.hour)}:${pad(parts.minute)}:${pad(parts.second)}.${pad(date.getUTCMilliseconds(), 3)}${formatOffset(offsetMinutes)}`
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export function normalizeCalendarEvent(event: RawCalendarEvent): CalendarEvent {
|
|
189
|
+
const startsAt = event.allDay
|
|
190
|
+
? formatAllDayDate(event.startDate, event.timeZone)
|
|
191
|
+
: new Date(event.startDate).toISOString()
|
|
192
|
+
const endsAt = event.allDay ? formatAllDayDate(event.endDate, event.timeZone) : new Date(event.endDate).toISOString()
|
|
193
|
+
const calendarId = event.calendarId ?? ""
|
|
194
|
+
const eventId = event.id ?? ""
|
|
195
|
+
return {
|
|
196
|
+
id: `${calendarId}:${eventId}:${startsAt}`,
|
|
197
|
+
calendarId,
|
|
198
|
+
title: event.title ?? "",
|
|
199
|
+
startsAt,
|
|
200
|
+
endsAt,
|
|
201
|
+
...(event.timeZone ? {timezone: event.timeZone} : {}),
|
|
202
|
+
allDay: !!event.allDay,
|
|
203
|
+
...(event.location ? {location: event.location} : {}),
|
|
204
|
+
...(event.notes ? {notes: event.notes} : {}),
|
|
205
|
+
...(event.url ? {url: event.url} : {}),
|
|
206
|
+
links: extractHttpsLinks(event.url, event.location, event.notes),
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
export function calendarEventOverlapsWindow(event: CalendarEvent, startsAt: Date, endsAt: Date): boolean {
|
|
211
|
+
return Date.parse(event.endsAt) > startsAt.getTime() && Date.parse(event.startsAt) < endsAt.getTime()
|
|
212
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import * as Calendar from "expo-calendar"
|
|
2
|
+
|
|
3
|
+
import {MiniappErrorCode, type CalendarListResult} from "@mentra/miniapp"
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
calendarEventOverlapsWindow,
|
|
7
|
+
type CalendarListRequest,
|
|
8
|
+
normalizeCalendarEvent,
|
|
9
|
+
PhoneCalendarError,
|
|
10
|
+
validateCalendarListRequest,
|
|
11
|
+
} from "./PhoneCalendarHelpers"
|
|
12
|
+
|
|
13
|
+
export {PhoneCalendarError} from "./PhoneCalendarHelpers"
|
|
14
|
+
|
|
15
|
+
export async function listPhoneCalendarEvents(request: CalendarListRequest): Promise<CalendarListResult> {
|
|
16
|
+
const {startsAt, endsAt, limit} = validateCalendarListRequest(request)
|
|
17
|
+
const permission = await Calendar.getCalendarPermissionsAsync()
|
|
18
|
+
if (permission.status !== "granted") {
|
|
19
|
+
throw new PhoneCalendarError(
|
|
20
|
+
MiniappErrorCode.PERMISSION_DENIED,
|
|
21
|
+
"Calendar permission is not granted. Reopen the miniapp and grant calendar access.",
|
|
22
|
+
)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const calendars = await Calendar.getCalendarsAsync(Calendar.EntityTypes.EVENT)
|
|
26
|
+
if (calendars.length === 0) return {events: [], truncated: false}
|
|
27
|
+
|
|
28
|
+
const rawEvents = await Calendar.getEventsAsync(
|
|
29
|
+
calendars.map((calendar) => calendar.id),
|
|
30
|
+
startsAt,
|
|
31
|
+
endsAt,
|
|
32
|
+
)
|
|
33
|
+
const events = rawEvents
|
|
34
|
+
.map(normalizeCalendarEvent)
|
|
35
|
+
.filter((event) => calendarEventOverlapsWindow(event, startsAt, endsAt))
|
|
36
|
+
.sort((a, b) => Date.parse(a.startsAt) - Date.parse(b.startsAt) || Date.parse(a.endsAt) - Date.parse(b.endsAt))
|
|
37
|
+
|
|
38
|
+
return {
|
|
39
|
+
events: events.slice(0, limit),
|
|
40
|
+
truncated: events.length > limit,
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import BluetoothSdk, {type CameraFovRequest, type CameraFovResult} from "@mentra/bluetooth-sdk/internal"
|
|
2
|
+
|
|
3
|
+
export const CAMERA_FOV_OVERRIDE_TTL_MS = 300_000
|
|
4
|
+
export const CAMERA_FOV_OVERRIDE_REFRESH_MS = 120_000
|
|
5
|
+
// Legacy ASG clients restart the camera HAL for an FOV update but cannot acknowledge
|
|
6
|
+
// when it is usable again. The ASG cooldown is 5s; retain a small settling margin so
|
|
7
|
+
// miniapps cannot submit a photo against the stale camera service.
|
|
8
|
+
const LEGACY_CAMERA_RESTART_SETTLE_MS = 7_000
|
|
9
|
+
|
|
10
|
+
interface OverrideEntry {
|
|
11
|
+
leaseId: string
|
|
12
|
+
fov: number
|
|
13
|
+
roiPosition: "center" | "bottom" | "top"
|
|
14
|
+
order: number
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
let leaseCounter = 0
|
|
18
|
+
|
|
19
|
+
function mintLeaseId(): string {
|
|
20
|
+
leaseCounter = (leaseCounter + 1) & 0xffff
|
|
21
|
+
return `fov-${leaseCounter.toString(16).padStart(4, "0")}`
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function isLegacyFovCompatibilityError(error: unknown): boolean {
|
|
25
|
+
const message = error instanceof Error ? error.message : String(error)
|
|
26
|
+
return /timed out waiting for glasses response|not available|unknown method/i.test(message)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Serializes miniapp-owned FOV/ROI overrides. The last live owner wins; releasing it applies the
|
|
31
|
+
* previous owner or asks ASG to restore its persistent base. ASG refreshes are no-restart TTL
|
|
32
|
+
* extensions for crash safety.
|
|
33
|
+
*/
|
|
34
|
+
export class PhoneCameraFovCoordinator {
|
|
35
|
+
private readonly overrides = new Map<string, OverrideEntry>()
|
|
36
|
+
private effectiveLeaseId: string | undefined
|
|
37
|
+
private sequence = 0
|
|
38
|
+
private queue: Promise<unknown> = Promise.resolve()
|
|
39
|
+
private refreshTimer: ReturnType<typeof setTimeout> | undefined
|
|
40
|
+
private legacyMode = false
|
|
41
|
+
|
|
42
|
+
constructor(private readonly legacyRestartSettleMs = LEGACY_CAMERA_RESTART_SETTLE_MS) {}
|
|
43
|
+
|
|
44
|
+
setOverride(packageName: string, request: CameraFovRequest): Promise<CameraFovResult> {
|
|
45
|
+
return this.enqueue(async () => {
|
|
46
|
+
const previous = this.overrides.get(packageName)
|
|
47
|
+
const leaseId = previous?.leaseId ?? mintLeaseId()
|
|
48
|
+
const order = ++this.sequence
|
|
49
|
+
try {
|
|
50
|
+
if (this.legacyMode) return this.setLegacyOverride(packageName, request, leaseId, order)
|
|
51
|
+
const result = await BluetoothSdk.setCameraFovOverride({
|
|
52
|
+
...request,
|
|
53
|
+
leaseId,
|
|
54
|
+
ttlMs: CAMERA_FOV_OVERRIDE_TTL_MS,
|
|
55
|
+
})
|
|
56
|
+
this.overrides.set(packageName, {
|
|
57
|
+
leaseId,
|
|
58
|
+
fov: result.fov,
|
|
59
|
+
roiPosition: result.roiPosition,
|
|
60
|
+
order,
|
|
61
|
+
})
|
|
62
|
+
this.effectiveLeaseId = leaseId
|
|
63
|
+
this.scheduleRefresh()
|
|
64
|
+
return result
|
|
65
|
+
} catch (error) {
|
|
66
|
+
if (!isLegacyFovCompatibilityError(error)) throw error
|
|
67
|
+
console.warn("[PhoneCameraFovCoordinator] override unavailable; using legacy FOV command", error)
|
|
68
|
+
const result = await this.setLegacyOverride(packageName, request, leaseId, order)
|
|
69
|
+
// Only cache compatibility mode after the fallback itself succeeds. A
|
|
70
|
+
// disconnect or missing native bridge must not permanently downgrade
|
|
71
|
+
// future requests on a healthy/newer glasses connection.
|
|
72
|
+
this.legacyMode = true
|
|
73
|
+
return result
|
|
74
|
+
}
|
|
75
|
+
})
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
releaseForApp(packageName: string): Promise<void> {
|
|
79
|
+
return this.enqueue(async () => {
|
|
80
|
+
const removed = this.overrides.get(packageName)
|
|
81
|
+
if (!removed) return
|
|
82
|
+
if (removed.leaseId !== this.effectiveLeaseId) {
|
|
83
|
+
this.overrides.delete(packageName)
|
|
84
|
+
return
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const next = [...this.overrides.entries()]
|
|
88
|
+
.filter(([candidatePackage]) => candidatePackage !== packageName)
|
|
89
|
+
.map(([, entry]) => entry)
|
|
90
|
+
.sort((a, b) => b.order - a.order)[0]
|
|
91
|
+
if (this.legacyMode) {
|
|
92
|
+
if (next) {
|
|
93
|
+
await this.applyLegacyFov({fov: next.fov, roiPosition: next.roiPosition})
|
|
94
|
+
this.overrides.delete(packageName)
|
|
95
|
+
this.effectiveLeaseId = next.leaseId
|
|
96
|
+
} else {
|
|
97
|
+
// Legacy commands are one-way and have no lease-release protocol.
|
|
98
|
+
// Ask native to replay its unchanged persistent base setting, then
|
|
99
|
+
// probe the modern override path again for the next ownership cycle.
|
|
100
|
+
await BluetoothSdk.restoreLegacyCameraFov()
|
|
101
|
+
await this.waitForLegacyCameraRestart()
|
|
102
|
+
this.overrides.delete(packageName)
|
|
103
|
+
this.clearRefresh()
|
|
104
|
+
this.effectiveLeaseId = undefined
|
|
105
|
+
this.legacyMode = false
|
|
106
|
+
}
|
|
107
|
+
return
|
|
108
|
+
}
|
|
109
|
+
if (next) {
|
|
110
|
+
await BluetoothSdk.setCameraFovOverride({
|
|
111
|
+
leaseId: next.leaseId,
|
|
112
|
+
fov: next.fov,
|
|
113
|
+
roiPosition: next.roiPosition,
|
|
114
|
+
ttlMs: CAMERA_FOV_OVERRIDE_TTL_MS,
|
|
115
|
+
})
|
|
116
|
+
// Commit phone-side ownership only after ASG accepted the replacement. On failure the
|
|
117
|
+
// closing app remains effective here, allowing unregister/reconnect cleanup to retry.
|
|
118
|
+
this.overrides.delete(packageName)
|
|
119
|
+
this.effectiveLeaseId = next.leaseId
|
|
120
|
+
this.scheduleRefresh()
|
|
121
|
+
} else {
|
|
122
|
+
await BluetoothSdk.releaseCameraFovOverride(removed.leaseId)
|
|
123
|
+
this.overrides.delete(packageName)
|
|
124
|
+
this.clearRefresh()
|
|
125
|
+
this.effectiveLeaseId = undefined
|
|
126
|
+
}
|
|
127
|
+
})
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
private scheduleRefresh(): void {
|
|
131
|
+
if (this.legacyMode) return
|
|
132
|
+
this.clearRefresh()
|
|
133
|
+
const leaseId = this.effectiveLeaseId
|
|
134
|
+
if (!leaseId) return
|
|
135
|
+
this.refreshTimer = setTimeout(() => {
|
|
136
|
+
void this.enqueue(async () => {
|
|
137
|
+
if (this.effectiveLeaseId !== leaseId) return
|
|
138
|
+
const entry = [...this.overrides.values()].find((candidate) => candidate.leaseId === leaseId)
|
|
139
|
+
if (!entry) return
|
|
140
|
+
await BluetoothSdk.setCameraFovOverride({
|
|
141
|
+
leaseId,
|
|
142
|
+
fov: entry.fov,
|
|
143
|
+
roiPosition: entry.roiPosition,
|
|
144
|
+
ttlMs: CAMERA_FOV_OVERRIDE_TTL_MS,
|
|
145
|
+
})
|
|
146
|
+
this.scheduleRefresh()
|
|
147
|
+
}).catch((error) => console.warn("[PhoneCameraFovCoordinator] failed to refresh override", error))
|
|
148
|
+
}, CAMERA_FOV_OVERRIDE_REFRESH_MS)
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
private clearRefresh(): void {
|
|
152
|
+
if (this.refreshTimer) clearTimeout(this.refreshTimer)
|
|
153
|
+
this.refreshTimer = undefined
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
private async setLegacyOverride(
|
|
157
|
+
packageName: string,
|
|
158
|
+
request: CameraFovRequest,
|
|
159
|
+
leaseId: string,
|
|
160
|
+
order: number,
|
|
161
|
+
): Promise<CameraFovResult> {
|
|
162
|
+
const result = await this.applyLegacyFov(request)
|
|
163
|
+
this.overrides.set(packageName, {
|
|
164
|
+
leaseId,
|
|
165
|
+
fov: result.fov,
|
|
166
|
+
roiPosition: result.roiPosition,
|
|
167
|
+
order,
|
|
168
|
+
})
|
|
169
|
+
this.effectiveLeaseId = leaseId
|
|
170
|
+
this.clearRefresh()
|
|
171
|
+
return result
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
private async applyLegacyFov(request: CameraFovRequest): Promise<CameraFovResult> {
|
|
175
|
+
const result = await BluetoothSdk.setLegacyCameraFov(request)
|
|
176
|
+
await this.waitForLegacyCameraRestart()
|
|
177
|
+
return result
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
private waitForLegacyCameraRestart(): Promise<void> {
|
|
181
|
+
if (this.legacyRestartSettleMs <= 0) return Promise.resolve()
|
|
182
|
+
return new Promise<void>((resolve) => setTimeout(resolve, this.legacyRestartSettleMs))
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
private enqueue<T>(operation: () => Promise<T>): Promise<T> {
|
|
186
|
+
const result = this.queue.then(operation, operation)
|
|
187
|
+
this.queue = result.then(
|
|
188
|
+
() => undefined,
|
|
189
|
+
() => undefined,
|
|
190
|
+
)
|
|
191
|
+
return result
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
export const phoneCameraFovCoordinator = new PhoneCameraFovCoordinator()
|
|
@@ -0,0 +1,122 @@
|
|
|
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
|
+
|
|
20
|
+
import localMiniappRuntime from "./LocalMiniappRuntime"
|
|
21
|
+
|
|
22
|
+
export const LOCATION_TASK_NAME = "handleLocationUpdates"
|
|
23
|
+
|
|
24
|
+
// Background location task — sends each fix to the v2 cloud (RestComms) + local
|
|
25
|
+
// miniapps. (The v1 SocketComms leg was already removed/commented before the move.)
|
|
26
|
+
TaskManager.defineTask<{locations?: Location.LocationObject[]}>(LOCATION_TASK_NAME, async ({data, error}) => {
|
|
27
|
+
if (error) {
|
|
28
|
+
// OS-level failure (permission revoked, GPS unavailable, …) — log it so
|
|
29
|
+
// background location dropouts are diagnosable.
|
|
30
|
+
console.warn("ISLAND: LOCATION: background task error:", error)
|
|
31
|
+
return
|
|
32
|
+
}
|
|
33
|
+
const locs = data?.locations ?? []
|
|
34
|
+
if (locs.length === 0) {
|
|
35
|
+
console.log("ISLAND: LOCATION: No locations received")
|
|
36
|
+
return
|
|
37
|
+
}
|
|
38
|
+
const first = locs[0]!
|
|
39
|
+
// Cloud path (relayMessageToApps) never reaches __phone__, so local miniapps rely
|
|
40
|
+
// on this direct push.
|
|
41
|
+
// Local miniapps get the update directly (the cloud relay never reaches
|
|
42
|
+
// __phone__). The Cloud V1 upload that used to run here was removed with the
|
|
43
|
+
// V1 ripout (issue #3392); a V2 location channel is separate product work.
|
|
44
|
+
localMiniappRuntime.forwardEvent("location_update", {
|
|
45
|
+
lat: first.coords.latitude,
|
|
46
|
+
lng: first.coords.longitude,
|
|
47
|
+
accuracy: first.coords.accuracy ?? undefined,
|
|
48
|
+
timestamp: first.timestamp,
|
|
49
|
+
})
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
/** Map a MentraOS location tier/accuracy string to an expo-location accuracy. */
|
|
53
|
+
export function getLocationAccuracy(accuracy: string | undefined): Location.LocationAccuracy {
|
|
54
|
+
switch (accuracy) {
|
|
55
|
+
// Aggregate miniapp tiers (LocalMiniappRuntime.recomputeLocation → "passive" |
|
|
56
|
+
// "low" | "high" | "realtime"). Previously only "realtime" mapped; "passive"/"low"/
|
|
57
|
+
// "high" fell through to Lowest, so a miniapp asking for high-rate GPS got the
|
|
58
|
+
// coarsest accuracy.
|
|
59
|
+
case "realtime":
|
|
60
|
+
return Location.LocationAccuracy.BestForNavigation
|
|
61
|
+
case "high":
|
|
62
|
+
return Location.LocationAccuracy.High
|
|
63
|
+
case "low":
|
|
64
|
+
return Location.LocationAccuracy.Low
|
|
65
|
+
case "passive":
|
|
66
|
+
return Location.LocationAccuracy.Lowest
|
|
67
|
+
// Accuracy-string vocabulary (persisted location_tier setting / boot path).
|
|
68
|
+
case "tenMeters":
|
|
69
|
+
return Location.LocationAccuracy.High
|
|
70
|
+
case "hundredMeters":
|
|
71
|
+
return Location.LocationAccuracy.Balanced
|
|
72
|
+
case "kilometer":
|
|
73
|
+
return Location.LocationAccuracy.Low
|
|
74
|
+
case "threeKilometers":
|
|
75
|
+
return Location.LocationAccuracy.Lowest
|
|
76
|
+
case "reduced":
|
|
77
|
+
return Location.LocationAccuracy.Lowest
|
|
78
|
+
default:
|
|
79
|
+
return Location.LocationAccuracy.Lowest
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Apply a location tier (the aggregate of what miniapps request). "off" means no app
|
|
85
|
+
* is asking — stop the task so the OS can power GPS down; anything else (re)starts the
|
|
86
|
+
* background task at the matching accuracy. Callers gate this on the OS location
|
|
87
|
+
* permission (host UI concern).
|
|
88
|
+
*/
|
|
89
|
+
export async function setLocationTier(
|
|
90
|
+
tier: "off" | "passive" | "low" | "high" | "realtime" | string,
|
|
91
|
+
): Promise<void> {
|
|
92
|
+
console.log("ISLAND: setLocationTier()", tier)
|
|
93
|
+
try {
|
|
94
|
+
const isRegistered = await Location.hasStartedLocationUpdatesAsync(LOCATION_TASK_NAME).catch(() => false)
|
|
95
|
+
if (isRegistered) {
|
|
96
|
+
await Location.stopLocationUpdatesAsync(LOCATION_TASK_NAME)
|
|
97
|
+
}
|
|
98
|
+
if (tier === "off") {
|
|
99
|
+
console.log("ISLAND: setLocationTier() stopped — no active subscribers")
|
|
100
|
+
return
|
|
101
|
+
}
|
|
102
|
+
await Location.startLocationUpdatesAsync(LOCATION_TASK_NAME, {
|
|
103
|
+
accuracy: getLocationAccuracy(tier),
|
|
104
|
+
pausesUpdatesAutomatically: false,
|
|
105
|
+
})
|
|
106
|
+
console.log("ISLAND: setLocationTier() success —", tier)
|
|
107
|
+
} catch (error) {
|
|
108
|
+
console.log("ISLAND: Error setting location tier", error)
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** Stop the background location task (host cleanup). */
|
|
113
|
+
export function stopPhoneLocation(): void {
|
|
114
|
+
Location.stopLocationUpdatesAsync(LOCATION_TASK_NAME).catch(() => {})
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export const phoneLocationService = {
|
|
118
|
+
LOCATION_TASK_NAME,
|
|
119
|
+
getLocationAccuracy,
|
|
120
|
+
setLocationTier,
|
|
121
|
+
stopPhoneLocation,
|
|
122
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
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
|
+
|
|
12
|
+
import {useSettingsStore, SETTINGS} from "../stores/settings"
|
|
13
|
+
|
|
14
|
+
let unsubscribe: (() => void) | null = null
|
|
15
|
+
|
|
16
|
+
function pushConfig(): void {
|
|
17
|
+
const s = useSettingsStore.getState()
|
|
18
|
+
const enabled = Boolean(s.getSetting(SETTINGS.notifications_enabled.key))
|
|
19
|
+
const blocklist = s.getSetting(SETTINGS.notifications_blocklist.key)
|
|
20
|
+
// Unconditional (matches the prior MantleManager sync) — the listener is
|
|
21
|
+
// Android-only, but CrustModule.setNotificationConfig is a safe no-op elsewhere;
|
|
22
|
+
// the Android-only gating lives on the facade's setEnabled/setBlocklist.
|
|
23
|
+
CrustModule.setNotificationConfig(enabled, Array.isArray(blocklist) ? blocklist : []).catch((err: unknown) =>
|
|
24
|
+
console.warn(`PhoneNotificationsSync: setNotificationConfig failed: ${(err as Error)?.message ?? err}`),
|
|
25
|
+
)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function startPhoneNotificationsSync(): void {
|
|
29
|
+
if (unsubscribe) return
|
|
30
|
+
pushConfig() // initial sync so the listener has the current config
|
|
31
|
+
unsubscribe = useSettingsStore.subscribe(
|
|
32
|
+
(state) => ({
|
|
33
|
+
enabled: state.getSetting(SETTINGS.notifications_enabled.key),
|
|
34
|
+
blocklist: state.getSetting(SETTINGS.notifications_blocklist.key),
|
|
35
|
+
}),
|
|
36
|
+
() => pushConfig(),
|
|
37
|
+
{equalityFn: shallow},
|
|
38
|
+
)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function stopPhoneNotificationsSync(): void {
|
|
42
|
+
unsubscribe?.()
|
|
43
|
+
unsubscribe = null
|
|
44
|
+
}
|