@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,366 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* window.mentra — WebView-side bridge to the per-miniapp background JSContext.
|
|
3
|
+
*
|
|
4
|
+
* Injected into every UI WebView via `injectedJavaScriptBeforeContentLoaded`
|
|
5
|
+
* (iOS) or `injectedJavaScriptObject` + a bundler-emitted inline `<script>`
|
|
6
|
+
* (Android, where the `BeforeContentLoaded` prop is documented unreliable
|
|
7
|
+
* per react-native-webview issues #1099 / #1609).
|
|
8
|
+
*
|
|
9
|
+
* The shim:
|
|
10
|
+
* - Buffers `mentra.send(channel, payload)` calls until `mentra.ready()`
|
|
11
|
+
* fires + the host acks the channel is open. WebView-side BUFFERS (the
|
|
12
|
+
* WebView is the short-lived side and shouldn't drop user input).
|
|
13
|
+
* - Installs `window.__mentra.recv(envelope)` for the host to push
|
|
14
|
+
* background → WebView messages via `webview.injectJavaScript(...)`.
|
|
15
|
+
* - Sends `__heartbeat__` every 5s; host considers the WebView gone
|
|
16
|
+
* after 15s of silence.
|
|
17
|
+
* - Maintains monotonic seq numbers; the host's per-WebView dedup window
|
|
18
|
+
* drops replays during reconnect.
|
|
19
|
+
*
|
|
20
|
+
* This file exports a `buildMentraUiShim()` function returning the JS
|
|
21
|
+
* source as a string. The host's MentraUIRouter wraps it inside the
|
|
22
|
+
* existing WebView setup so a single bundler-time string emission covers
|
|
23
|
+
* both platforms.
|
|
24
|
+
*
|
|
25
|
+
* IMPORTANT: the shim runs in the WebView's bare ECMAScript scope before
|
|
26
|
+
* the miniapp's bundle. It must not import anything; the source is one
|
|
27
|
+
* IIFE. The only injected dependencies are
|
|
28
|
+
* `window.ReactNativeWebView.postMessage` (provided by react-native-webview)
|
|
29
|
+
* and (on Android) `window.ReactNativeWebView.injectedObjectJson()`
|
|
30
|
+
* (provided when the host sets `injectedJavaScriptObject`).
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
export interface MentraUiShimOptions {
|
|
34
|
+
packageName: string
|
|
35
|
+
/** @deprecated No longer used — heartbeat removed since WebViews are foreground-only. */
|
|
36
|
+
heartbeatIntervalMs?: number
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function buildMentraUiShim(options: MentraUiShimOptions): string {
|
|
40
|
+
const packageNameJson = JSON.stringify(options.packageName)
|
|
41
|
+
// The IIFE assembles a typed `mentra` global plus an internal
|
|
42
|
+
// `__mentra` for host inbound calls. Quoted strings are JSON-safe so
|
|
43
|
+
// direct injection inside another JS literal also works.
|
|
44
|
+
return `
|
|
45
|
+
(function () {
|
|
46
|
+
if (typeof window === 'undefined') return;
|
|
47
|
+
if (window.mentra && window.__mentra) return;
|
|
48
|
+
var packageName = ${packageNameJson};
|
|
49
|
+
// Resolve window.ReactNativeWebView.postMessage LAZILY, not once at shim-eval.
|
|
50
|
+
// On Android the shim is injected as a WebViewCompat document-start script
|
|
51
|
+
// (so it beats the page bundle and the ready handshake can't be raced — see
|
|
52
|
+
// the react-native-webview patch). But the order in which that document-start
|
|
53
|
+
// script runs vs. the WebMessageListener that installs
|
|
54
|
+
// window.ReactNativeWebView is not contractually fixed on Android the way it
|
|
55
|
+
// is on iOS (postMessageScript is registered before atStartScript there). If
|
|
56
|
+
// we captured rnPost once and the bridge object wasn't installed yet, every
|
|
57
|
+
// postMessage — including {type:'ready'} — would be silently dropped and the
|
|
58
|
+
// splash would hang forever. Resolving per-call means we always pick up the
|
|
59
|
+
// bridge once it exists, which it reliably does by the time the bundle mounts
|
|
60
|
+
// and calls mentra.ready().
|
|
61
|
+
function getRnPost() {
|
|
62
|
+
try {
|
|
63
|
+
return window.ReactNativeWebView && typeof window.ReactNativeWebView.postMessage === 'function'
|
|
64
|
+
? window.ReactNativeWebView.postMessage.bind(window.ReactNativeWebView)
|
|
65
|
+
: null;
|
|
66
|
+
} catch (e) { return null; }
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Outbound seq number — purely a log-correlation aid (the host's
|
|
70
|
+
// router doesn't dedup anymore since reconnect can't happen: one
|
|
71
|
+
// WebView, foreground-only, destroyed on close → fresh shim on
|
|
72
|
+
// next open).
|
|
73
|
+
var outboundSeq = 1;
|
|
74
|
+
var ready = false;
|
|
75
|
+
var channelHandlers = Object.create(null);
|
|
76
|
+
var openHandlers = [];
|
|
77
|
+
var closeHandlers = [];
|
|
78
|
+
// Queued mentra.send calls before mentra.ready() acks. FIFO drained
|
|
79
|
+
// on ack. Buffered so user input (button taps, etc.) isn't dropped
|
|
80
|
+
// when the WebView mounts faster than the host expects.
|
|
81
|
+
var outboundQueue = [];
|
|
82
|
+
// Inbound payloads that arrived before any mentra.on subscriber was
|
|
83
|
+
// registered for the channel. The background side fires
|
|
84
|
+
// session.ui.onOpen handlers as soon as the WebView posts {type:'ready'},
|
|
85
|
+
// and on a fast bridge the resulting ui.send round-trips back before
|
|
86
|
+
// React useEffects have had a chance to attach listeners. Without
|
|
87
|
+
// buffering, the very first snapshot (the one a controller pushes from
|
|
88
|
+
// its ui.onOpen handler to hydrate the fresh UI) is silently dropped.
|
|
89
|
+
//
|
|
90
|
+
// Drain policy: the queue for a channel is flushed into the FIRST
|
|
91
|
+
// mentra.on(channel, ...) subscriber, then discarded. Subsequent
|
|
92
|
+
// sends with no listener fall back to the old drop-on-floor behaviour
|
|
93
|
+
// — we don't want a re-subscribe to replay stale state.
|
|
94
|
+
//
|
|
95
|
+
// Cap: 32 entries per channel, oldest dropped on overflow. Bounds the
|
|
96
|
+
// memory cost when a controller pushes to a channel that no UI page
|
|
97
|
+
// ever subscribes to.
|
|
98
|
+
var pendingByChannel = Object.create(null);
|
|
99
|
+
var PENDING_CAP_PER_CHANNEL = 32;
|
|
100
|
+
|
|
101
|
+
function postEnvelope(envelope) {
|
|
102
|
+
var rnPost = getRnPost();
|
|
103
|
+
if (!rnPost) return;
|
|
104
|
+
try { rnPost(JSON.stringify(envelope)); } catch (_) {}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function send(channel, payload) {
|
|
108
|
+
var seq = outboundSeq++;
|
|
109
|
+
var envelope = { type: 'msg', seq: seq, channel: String(channel), payload: payload };
|
|
110
|
+
if (!ready) {
|
|
111
|
+
outboundQueue.push(envelope);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
postEnvelope(envelope);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function flushQueue() {
|
|
118
|
+
while (outboundQueue.length > 0) {
|
|
119
|
+
postEnvelope(outboundQueue.shift());
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// NOTE: console.* tap lives in miniappGlobals.ts (injected alongside
|
|
124
|
+
// this shim for every UI WebView, two-layer or single-bundle). That
|
|
125
|
+
// shim posts {payload:{type:"dev_log", ...}} envelopes which
|
|
126
|
+
// LocalMiniappRuntime forwards to the dev sidecar tagged source:"ui".
|
|
127
|
+
// We don't re-wrap here to avoid double-delivery.
|
|
128
|
+
|
|
129
|
+
function on(channel, cb) {
|
|
130
|
+
if (typeof cb !== 'function') return function () {};
|
|
131
|
+
var list = channelHandlers[channel];
|
|
132
|
+
var firstSubscriber = !list || list.length === 0;
|
|
133
|
+
if (!list) { list = []; channelHandlers[channel] = list; }
|
|
134
|
+
list.push(cb);
|
|
135
|
+
// Drain any payloads buffered before this channel had a listener.
|
|
136
|
+
// Only fired on the first subscriber for the channel — a later
|
|
137
|
+
// re-subscribe (after an unsubscribe) does NOT replay history.
|
|
138
|
+
if (firstSubscriber) {
|
|
139
|
+
var pending = pendingByChannel[channel];
|
|
140
|
+
if (pending) {
|
|
141
|
+
delete pendingByChannel[channel];
|
|
142
|
+
for (var i = 0; i < pending.length; i++) {
|
|
143
|
+
try { cb(pending[i]); } catch (e) {}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return function () {
|
|
148
|
+
var idx = list.indexOf(cb);
|
|
149
|
+
if (idx >= 0) list.splice(idx, 1);
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// ── RPC ─────────────────────────────────────────────────────────────
|
|
154
|
+
// Outbound RPC: every mentra.request() generates a request id, sends a
|
|
155
|
+
// 'msg' envelope tagged with requestId, and stashes a one-shot resolver
|
|
156
|
+
// keyed on the id. The background-side reply is a recv('msg') with the
|
|
157
|
+
// same channel + requestId; we route it directly to the resolver.
|
|
158
|
+
//
|
|
159
|
+
// Cancellation: caller's AbortSignal triggers a 'cancel' envelope to
|
|
160
|
+
// background and rejects the local promise with a DOM-standard
|
|
161
|
+
// AbortError. The background side's UI_CANCEL handler aborts the
|
|
162
|
+
// handler's ctx.signal and drops the reply.
|
|
163
|
+
var rpcCounter = 0;
|
|
164
|
+
var rpcInflight = Object.create(null);
|
|
165
|
+
|
|
166
|
+
function makeRequestId() {
|
|
167
|
+
rpcCounter += 1;
|
|
168
|
+
return 'r' + rpcCounter + '-' + Date.now().toString(36) + '-' + Math.random().toString(36).slice(2, 8);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
function MentraRpcError(message, code, stage, transport) {
|
|
172
|
+
var e = new Error(message);
|
|
173
|
+
e.name = 'MentraRpcError';
|
|
174
|
+
if (code) {
|
|
175
|
+
try { e.cause = {code: code}; } catch (_) { /* old runtimes */ }
|
|
176
|
+
e.code = code;
|
|
177
|
+
}
|
|
178
|
+
// Diagnostic fields ride as own props so a miniapp can show exactly which
|
|
179
|
+
// pipeline stage and transport failed, not just a message string.
|
|
180
|
+
if (stage) e.stage = stage;
|
|
181
|
+
if (transport) e.transport = transport;
|
|
182
|
+
return e;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
function MentraRpcTimeoutError(message) {
|
|
186
|
+
var e = new Error(message || 'RPC timed out');
|
|
187
|
+
e.name = 'MentraRpcTimeoutError';
|
|
188
|
+
return e;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
function MentraAbortError() {
|
|
192
|
+
var e;
|
|
193
|
+
try { e = new DOMException('aborted', 'AbortError'); } catch (_) {
|
|
194
|
+
e = new Error('aborted');
|
|
195
|
+
e.name = 'AbortError';
|
|
196
|
+
}
|
|
197
|
+
return e;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
function request(channel, payload, options) {
|
|
201
|
+
var opts = options || {};
|
|
202
|
+
var signal = opts.signal;
|
|
203
|
+
var timeoutMs = typeof opts.timeout === 'number' ? opts.timeout : null;
|
|
204
|
+
var id = makeRequestId();
|
|
205
|
+
|
|
206
|
+
return new Promise(function (resolve, reject) {
|
|
207
|
+
var done = false;
|
|
208
|
+
var timeoutHandle = null;
|
|
209
|
+
var abortListener = null;
|
|
210
|
+
|
|
211
|
+
function cleanup() {
|
|
212
|
+
if (done) return;
|
|
213
|
+
done = true;
|
|
214
|
+
delete rpcInflight[id];
|
|
215
|
+
if (timeoutHandle != null) { clearTimeout(timeoutHandle); timeoutHandle = null; }
|
|
216
|
+
if (signal && abortListener) {
|
|
217
|
+
try { signal.removeEventListener('abort', abortListener); } catch (_) {}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
function settle(envelope) {
|
|
222
|
+
if (done) return;
|
|
223
|
+
cleanup();
|
|
224
|
+
if (envelope && envelope.ok === true) {
|
|
225
|
+
resolve(envelope.result);
|
|
226
|
+
} else if (envelope && envelope.ok === false) {
|
|
227
|
+
reject(MentraRpcError(envelope.error && envelope.error.message || 'RPC failed', envelope.error && envelope.error.code, envelope.error && envelope.error.stage, envelope.error && envelope.error.transport));
|
|
228
|
+
} else {
|
|
229
|
+
reject(MentraRpcError('malformed RPC reply'));
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
rpcInflight[id] = settle;
|
|
234
|
+
|
|
235
|
+
if (signal) {
|
|
236
|
+
if (signal.aborted) {
|
|
237
|
+
cleanup();
|
|
238
|
+
reject(MentraAbortError());
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
abortListener = function () {
|
|
242
|
+
if (done) return;
|
|
243
|
+
cleanup();
|
|
244
|
+
postEnvelope({type: 'cancel', requestId: id});
|
|
245
|
+
reject(MentraAbortError());
|
|
246
|
+
};
|
|
247
|
+
try { signal.addEventListener('abort', abortListener); } catch (_) {}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
if (timeoutMs != null) {
|
|
251
|
+
timeoutHandle = setTimeout(function () {
|
|
252
|
+
if (done) return;
|
|
253
|
+
cleanup();
|
|
254
|
+
postEnvelope({type: 'cancel', requestId: id});
|
|
255
|
+
reject(MentraRpcTimeoutError());
|
|
256
|
+
}, timeoutMs);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
var envelope = {type: 'msg', seq: outboundSeq++, channel: String(channel), payload: payload, requestId: id};
|
|
260
|
+
if (!ready) {
|
|
261
|
+
outboundQueue.push(envelope);
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
postEnvelope(envelope);
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
function onOpen(cb) {
|
|
269
|
+
if (typeof cb !== 'function') return function () {};
|
|
270
|
+
openHandlers.push(cb);
|
|
271
|
+
if (ready) {
|
|
272
|
+
try { cb(); } catch (e) {}
|
|
273
|
+
}
|
|
274
|
+
return function () {
|
|
275
|
+
var idx = openHandlers.indexOf(cb);
|
|
276
|
+
if (idx >= 0) openHandlers.splice(idx, 1);
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
function onClose(cb) {
|
|
281
|
+
if (typeof cb !== 'function') return function () {};
|
|
282
|
+
closeHandlers.push(cb);
|
|
283
|
+
return function () {
|
|
284
|
+
var idx = closeHandlers.indexOf(cb);
|
|
285
|
+
if (idx >= 0) closeHandlers.splice(idx, 1);
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
function readyFn() {
|
|
290
|
+
if (ready) return;
|
|
291
|
+
ready = true;
|
|
292
|
+
postEnvelope({ type: 'ready' });
|
|
293
|
+
flushQueue();
|
|
294
|
+
for (var i = 0; i < openHandlers.length; i++) {
|
|
295
|
+
try { openHandlers[i](); } catch (e) {}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
function fireChannel(channel, payload) {
|
|
300
|
+
var list = channelHandlers[channel];
|
|
301
|
+
if (!list || list.length === 0) {
|
|
302
|
+
// No subscriber yet — stash for the first mentra.on(channel, ...).
|
|
303
|
+
// Bounded FIFO: drop the oldest when capped so a stuck channel
|
|
304
|
+
// can't grow unbounded.
|
|
305
|
+
var q = pendingByChannel[channel];
|
|
306
|
+
if (!q) { q = []; pendingByChannel[channel] = q; }
|
|
307
|
+
q.push(payload);
|
|
308
|
+
if (q.length > PENDING_CAP_PER_CHANNEL) q.shift();
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
for (var i = 0; i < list.length; i++) {
|
|
312
|
+
try { list[i](payload); } catch (e) {}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
function recv(envelope) {
|
|
317
|
+
if (!envelope || typeof envelope !== 'object') return;
|
|
318
|
+
var type = envelope.type;
|
|
319
|
+
if (type === 'msg' && typeof envelope.channel === 'string') {
|
|
320
|
+
// RPC frames carry a requestId; broadcast frames don't. Treat them
|
|
321
|
+
// as disjoint — never fall through from RPC to broadcast. An orphan
|
|
322
|
+
// RPC reply (caller already aborted/timed out) is silently dropped.
|
|
323
|
+
if (typeof envelope.requestId === 'string') {
|
|
324
|
+
var settle = rpcInflight[envelope.requestId];
|
|
325
|
+
if (settle) settle(envelope.payload);
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
fireChannel(envelope.channel, envelope.payload);
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
if (type === 'open') {
|
|
332
|
+
for (var j = 0; j < openHandlers.length; j++) {
|
|
333
|
+
try { openHandlers[j](); } catch (e) {}
|
|
334
|
+
}
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
if (type === 'close') {
|
|
338
|
+
for (var k = 0; k < closeHandlers.length; k++) {
|
|
339
|
+
try { closeHandlers[k](); } catch (e) {}
|
|
340
|
+
}
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
if (type === 'cancel' && typeof envelope.requestId === 'string') {
|
|
344
|
+
// Background-side cancel (reserved; currently unused). If we had a
|
|
345
|
+
// future bidirectional RPC this would abort an in-flight UI handler.
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
if (type === 'ack') {
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
window.mentra = {
|
|
354
|
+
send: send,
|
|
355
|
+
on: on,
|
|
356
|
+
request: request,
|
|
357
|
+
onOpen: onOpen,
|
|
358
|
+
onClose: onClose,
|
|
359
|
+
ready: readyFn,
|
|
360
|
+
/** @internal — packageName for diagnostic logs only. */
|
|
361
|
+
_packageName: packageName,
|
|
362
|
+
};
|
|
363
|
+
window.__mentra = { recv: recv };
|
|
364
|
+
})();
|
|
365
|
+
`.trim()
|
|
366
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hybrid road-name resolver for Routes-API steps. Used to fill
|
|
3
|
+
* `ComputedRouteStep.road` so miniapps don't have to parse instruction
|
|
4
|
+
* prose or geocode themselves — every miniapp talking to the SDK sees
|
|
5
|
+
* the same accurate names for preview AND live trip.
|
|
6
|
+
*
|
|
7
|
+
* Strategy per step:
|
|
8
|
+
* 1. Parse "onto X" from the Routes-API instruction when present
|
|
9
|
+
* (the API literally tells us the road; no second-guessing).
|
|
10
|
+
* 2. Fall back to reverse-geocoding the step MIDPOINT when the
|
|
11
|
+
* instruction has no road name ("Slight right", "Turn left toward
|
|
12
|
+
* …", "Destination will be on the right", bare depart steps).
|
|
13
|
+
*
|
|
14
|
+
* Endpoints get rejected as fallback probe points: they sit on
|
|
15
|
+
* junctions and snap to whichever cross-street has higher weight;
|
|
16
|
+
* the midpoint sits on the step's own road.
|
|
17
|
+
*
|
|
18
|
+
* This is a direct port of the resolver that used to live in the Nav
|
|
19
|
+
* miniapp's NavigationPage.tsx. Lives on the host so all miniapps
|
|
20
|
+
* benefit and so preview + live can share a single implementation.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
type StepLike = {
|
|
24
|
+
lat: number
|
|
25
|
+
lng: number
|
|
26
|
+
endLat: number
|
|
27
|
+
endLng: number
|
|
28
|
+
instruction?: string
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
type ReverseGeocode = (coord: {lat: number; lng: number}) => Promise<{
|
|
32
|
+
ok: boolean
|
|
33
|
+
road?: string | null
|
|
34
|
+
error?: string
|
|
35
|
+
}>
|
|
36
|
+
|
|
37
|
+
const DIRECTION_WORDS = new Set([
|
|
38
|
+
"right",
|
|
39
|
+
"left",
|
|
40
|
+
"the right",
|
|
41
|
+
"the left",
|
|
42
|
+
"north",
|
|
43
|
+
"south",
|
|
44
|
+
"east",
|
|
45
|
+
"west",
|
|
46
|
+
])
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Pull a short road name out of a Routes-API instruction. Instructions
|
|
50
|
+
* look like:
|
|
51
|
+
* "Turn left onto Octavia Blvd"
|
|
52
|
+
* "Head northeast on Market St toward Octavia St"
|
|
53
|
+
* "Turn right onto Haight St\nDestination will be on the right"
|
|
54
|
+
*
|
|
55
|
+
* Pitfalls this guards against (seen in real data):
|
|
56
|
+
* - Multi-line: API appends "Destination will be on the right" etc.
|
|
57
|
+
* Only the first line is parsed, otherwise the greedy "on" match
|
|
58
|
+
* grabs "on the right" → "the right".
|
|
59
|
+
* - Trailing clauses ("… toward Octavia St", "… and continue"):
|
|
60
|
+
* cut at the first such keyword.
|
|
61
|
+
* - Unit suffixes: "Hayes St #116" → "Hayes St".
|
|
62
|
+
* - Bare direction words slipping through: rejected so the resolver
|
|
63
|
+
* falls back to geocoding instead of labeling a step "left".
|
|
64
|
+
*/
|
|
65
|
+
export function roadNameFromInstruction(instruction?: string): string | null {
|
|
66
|
+
if (!instruction) return null
|
|
67
|
+
const firstLine = instruction.split("\n")[0] ?? ""
|
|
68
|
+
// Prefer "onto" (always immediately precedes the road); fall back to
|
|
69
|
+
// "on" for depart steps ("Head north on Market St").
|
|
70
|
+
const m = firstLine.match(/\bonto\s+(.+)$/i) ?? firstLine.match(/\bon\s+(.+)$/i)
|
|
71
|
+
let raw = (m ? m[1] : "").trim()
|
|
72
|
+
if (!raw) return null
|
|
73
|
+
// Cut trailing direction/continuation clauses the API appends.
|
|
74
|
+
raw = raw.split(/\s+(?:toward|towards|to|and|then|for)\b/i)[0]?.trim() ?? ""
|
|
75
|
+
// Strip a unit/suite suffix.
|
|
76
|
+
raw = raw.replace(/\s+#.*$/, "").trim()
|
|
77
|
+
if (!raw) return null
|
|
78
|
+
if (DIRECTION_WORDS.has(raw.toLowerCase())) return null
|
|
79
|
+
return raw
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Resolve `road` for every step in a Routes-API step list. The
|
|
84
|
+
* `reverseGeocode` callback is injected so this module stays free of
|
|
85
|
+
* the host's network plumbing (and is unit-testable).
|
|
86
|
+
*
|
|
87
|
+
* Steps are resolved in parallel: parsed names land synchronously,
|
|
88
|
+
* geocoded fallbacks fire concurrently. Order is preserved.
|
|
89
|
+
*/
|
|
90
|
+
export async function resolveStepRoads<S extends StepLike>(
|
|
91
|
+
steps: S[],
|
|
92
|
+
reverseGeocode: ReverseGeocode,
|
|
93
|
+
): Promise<Array<S & {road: string | null}>> {
|
|
94
|
+
const probes = steps.map<Promise<string | null>>((s) => {
|
|
95
|
+
const parsed = roadNameFromInstruction(s.instruction)
|
|
96
|
+
if (parsed) return Promise.resolve(parsed)
|
|
97
|
+
if (
|
|
98
|
+
!Number.isFinite(s.lat) ||
|
|
99
|
+
!Number.isFinite(s.lng) ||
|
|
100
|
+
!Number.isFinite(s.endLat) ||
|
|
101
|
+
!Number.isFinite(s.endLng)
|
|
102
|
+
) {
|
|
103
|
+
return Promise.resolve(null)
|
|
104
|
+
}
|
|
105
|
+
const mid = {lat: (s.lat + s.endLat) / 2, lng: (s.lng + s.endLng) / 2}
|
|
106
|
+
return reverseGeocode(mid)
|
|
107
|
+
.then((r) => (r.ok ? r.road ?? null : null))
|
|
108
|
+
.catch(() => null)
|
|
109
|
+
})
|
|
110
|
+
const roads = await Promise.all(probes)
|
|
111
|
+
return steps.map((s, i) => ({...s, road: roads[i]}))
|
|
112
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure decoders used by `NavigationService.computeRoute` when talking to
|
|
3
|
+
* Mapbox's Directions API directly (no native dependency).
|
|
4
|
+
*
|
|
5
|
+
* Kept in their own module so unit tests don't have to bring up the
|
|
6
|
+
* `crust` native module to exercise them. The algorithms are unit
|
|
7
|
+
* testable; the surrounding service is not.
|
|
8
|
+
*
|
|
9
|
+
* Migrated from Google Routes API: Mapbox returns numeric `distance`
|
|
10
|
+
* (meters) / `duration` (seconds) rather than Google's `"123s"` protobuf
|
|
11
|
+
* strings, and `polyline6` (precision-6) geometry rather than Google's
|
|
12
|
+
* precision-5 encoded polyline. `parseDurationSeconds` is retained for
|
|
13
|
+
* back-compat but Mapbox callers pass the numeric value through directly.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
export type LatLng = {lat: number; lng: number}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Back-compat: Google Routes API encoded durations as protobuf strings
|
|
20
|
+
* ("123s"). Mapbox returns a number, so new callers should not need this.
|
|
21
|
+
* Accepts a number (passed through) or a "123s" string.
|
|
22
|
+
*/
|
|
23
|
+
export function parseDurationSeconds(s: string | number): number {
|
|
24
|
+
if (typeof s === "number") return Number.isFinite(s) ? Math.round(s) : 0
|
|
25
|
+
const match = s.match(/^(\d+)/)
|
|
26
|
+
return match ? Number(match[1]) : 0
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Decode an encoded polyline. The standard Google/Mapbox polyline
|
|
31
|
+
* algorithm, parameterized by coordinate precision:
|
|
32
|
+
* - precision 5 (Google Routes, Mapbox `polyline`): factor 1e5
|
|
33
|
+
* - precision 6 (Mapbox `polyline6`): factor 1e6
|
|
34
|
+
*
|
|
35
|
+
* We request `geometries=polyline6` from Mapbox Directions for the extra
|
|
36
|
+
* precision (tighter road-centerline tracing keeps the turn-pivot dots on
|
|
37
|
+
* the visible road), so the default precision here is 6.
|
|
38
|
+
*
|
|
39
|
+
* Reference: https://docs.mapbox.com/api/navigation/directions/#route-object
|
|
40
|
+
*/
|
|
41
|
+
export function decodePolyline(encoded: string, precision: number = 6): LatLng[] {
|
|
42
|
+
if (!encoded) return []
|
|
43
|
+
const factor = Math.pow(10, precision)
|
|
44
|
+
const points: LatLng[] = []
|
|
45
|
+
let index = 0
|
|
46
|
+
let lat = 0
|
|
47
|
+
let lng = 0
|
|
48
|
+
while (index < encoded.length) {
|
|
49
|
+
let result = 0
|
|
50
|
+
let shift = 0
|
|
51
|
+
let b: number
|
|
52
|
+
do {
|
|
53
|
+
b = encoded.charCodeAt(index++) - 63
|
|
54
|
+
result |= (b & 0x1f) << shift
|
|
55
|
+
shift += 5
|
|
56
|
+
} while (b >= 0x20)
|
|
57
|
+
lat += result & 1 ? ~(result >> 1) : result >> 1
|
|
58
|
+
result = 0
|
|
59
|
+
shift = 0
|
|
60
|
+
do {
|
|
61
|
+
b = encoded.charCodeAt(index++) - 63
|
|
62
|
+
result |= (b & 0x1f) << shift
|
|
63
|
+
shift += 5
|
|
64
|
+
} while (b >= 0x20)
|
|
65
|
+
lng += result & 1 ? ~(result >> 1) : result >> 1
|
|
66
|
+
points.push({lat: lat / factor, lng: lng / factor})
|
|
67
|
+
}
|
|
68
|
+
return points
|
|
69
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import type {OtaProgress, OtaStatus} from "@mentra/bluetooth-sdk/internal"
|
|
2
|
+
|
|
3
|
+
import {isLegacyShapedOtaStatus} from "./otaInstallPolicy"
|
|
4
|
+
|
|
5
|
+
export type DisplayState = "starting" | "updating" | "complete" | "failed" | "disconnected" | "restarting"
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Pure derivation of the OTA progress UI state from the glasses data in the
|
|
9
|
+
* Zustand store plus a couple of genuinely-local inputs. See
|
|
10
|
+
* OtaInstallCoordinator.ts for the state machine that consumes this (the host
|
|
11
|
+
* progress screen renders its snapshot).
|
|
12
|
+
*
|
|
13
|
+
* Legacy shape (WP 8C): old (< 37) ASG builds send `ota_progress`, which the SDK
|
|
14
|
+
* maps to ota_status with sessionId "" and FINISHED→"complete" at ANY phase. For
|
|
15
|
+
* those statuses a download-phase "complete" only means the download finished
|
|
16
|
+
* (the install is still ahead), and an apk install "complete" may be held by the
|
|
17
|
+
* coordinator's settle window — both stay "updating" instead of terminal.
|
|
18
|
+
*
|
|
19
|
+
* Priority-ordered rules (first match wins):
|
|
20
|
+
* 1. errorMsg !== "" -> "failed"
|
|
21
|
+
* 2. BES terminal + connected + sawReconnectEdge -> "complete"
|
|
22
|
+
* 3. BES terminal (any connection state) -> "restarting"
|
|
23
|
+
* (legacy-shaped BES "complete" counts only in install phase)
|
|
24
|
+
* 4. apkCompletedViaBuildIncrease (legacy build-number port) -> "complete"
|
|
25
|
+
* 5. otaStatus.status === "failed" -> "failed"
|
|
26
|
+
* 6. otaStatus.status === "complete" (non-BES) -> "complete"
|
|
27
|
+
* (unless legacy-shaped download-complete or held apk settle -> in flight)
|
|
28
|
+
* 7. !connected + legacy in-flight complete (held apk) -> "updating"
|
|
29
|
+
* 8. !connected + APK step_complete with totalSteps > 1 -> "starting" (expected reboot)
|
|
30
|
+
* 9. !connected + BES in flight -> "restarting" (defensive)
|
|
31
|
+
* 10. !connected -> "disconnected"
|
|
32
|
+
* 11. connected + in_progress | step_complete | legacy in-flight complete -> "updating"
|
|
33
|
+
* 12. fallback -> "starting"
|
|
34
|
+
*/
|
|
35
|
+
export function deriveDisplayState(args: {
|
|
36
|
+
otaStatus: OtaStatus | null
|
|
37
|
+
otaProgress: OtaProgress | null
|
|
38
|
+
connected: boolean
|
|
39
|
+
errorMsg: string
|
|
40
|
+
sawReconnectEdge: boolean
|
|
41
|
+
/** Coordinator is holding a legacy apk install "complete" for the settle window (WP 8C). */
|
|
42
|
+
legacyApkSettleHold?: boolean
|
|
43
|
+
/** Legacy APK completion detected by build-number increase (WP 8C). */
|
|
44
|
+
apkCompletedViaBuildIncrease?: boolean
|
|
45
|
+
}): DisplayState {
|
|
46
|
+
const {otaStatus, otaProgress, connected, errorMsg, sawReconnectEdge, legacyApkSettleHold, apkCompletedViaBuildIncrease} =
|
|
47
|
+
args
|
|
48
|
+
|
|
49
|
+
if (errorMsg) return "failed"
|
|
50
|
+
|
|
51
|
+
const besTerminal = isBesTerminal(otaStatus, otaProgress)
|
|
52
|
+
if (besTerminal && connected && sawReconnectEdge) return "complete"
|
|
53
|
+
if (besTerminal) return "restarting"
|
|
54
|
+
|
|
55
|
+
// Legacy build-number APK completion: the coordinator clears errorMsg when it fires,
|
|
56
|
+
// and the flag outranks whatever stale legacy status is still in the store (the old
|
|
57
|
+
// screen's last-write-wins completion from starting/failed/installing).
|
|
58
|
+
if (apkCompletedViaBuildIncrease) return "complete"
|
|
59
|
+
|
|
60
|
+
if (otaStatus?.status === "failed") return "failed"
|
|
61
|
+
|
|
62
|
+
// Legacy-shaped "complete" that is still in flight: a download-phase FINISHED (the
|
|
63
|
+
// install is still ahead), or an apk install FINISHED held by the settle window.
|
|
64
|
+
const legacyInFlightComplete =
|
|
65
|
+
isLegacyShapedOtaStatus(otaStatus) &&
|
|
66
|
+
otaStatus?.status === "complete" &&
|
|
67
|
+
(otaStatus.phase === "download" ||
|
|
68
|
+
(!!legacyApkSettleHold && otaStatus.stepType === "apk" && otaStatus.phase === "install"))
|
|
69
|
+
|
|
70
|
+
if (otaStatus?.status === "complete" && !legacyInFlightComplete) return "complete"
|
|
71
|
+
|
|
72
|
+
if (!connected) {
|
|
73
|
+
// The held apk install complete means the glasses are restarting into the new
|
|
74
|
+
// build — the legacy screen kept showing "installing" through that restart.
|
|
75
|
+
if (legacyInFlightComplete && otaStatus?.phase === "install") return "updating"
|
|
76
|
+
|
|
77
|
+
// By here, the failed/complete rules already returned for terminal statuses.
|
|
78
|
+
// For APK multi-step, "step_complete" means the current step ended and the
|
|
79
|
+
// glasses are rebooting to start the next one.
|
|
80
|
+
const apkRebootExpected =
|
|
81
|
+
otaStatus?.stepType === "apk" && (otaStatus?.totalSteps ?? 0) > 1 && otaStatus.status === "step_complete"
|
|
82
|
+
if (apkRebootExpected) return "starting"
|
|
83
|
+
|
|
84
|
+
// Legacy-shaped BES download events do not mean a reboot is coming (the flash
|
|
85
|
+
// has not started); the legacy screen treated that drop as a plain disconnect.
|
|
86
|
+
const besStatusInFlight =
|
|
87
|
+
otaStatus?.stepType === "bes" && !(isLegacyShapedOtaStatus(otaStatus) && otaStatus.phase === "download")
|
|
88
|
+
const besInFlight =
|
|
89
|
+
besStatusInFlight || (otaProgress?.currentUpdate === "bes" && otaProgress?.stage === "install")
|
|
90
|
+
if (besInFlight) return "restarting"
|
|
91
|
+
|
|
92
|
+
return "disconnected"
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (otaStatus?.status === "in_progress" || otaStatus?.status === "step_complete" || legacyInFlightComplete) {
|
|
96
|
+
return "updating"
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return "starting"
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function isBesTerminal(otaStatus: OtaStatus | null, otaProgress: OtaProgress | null): boolean {
|
|
103
|
+
if (otaStatus?.stepType === "bes" && (otaStatus.status === "step_complete" || otaStatus.status === "complete")) {
|
|
104
|
+
// Legacy-shaped statuses map download FINISHED to "complete" too; only an
|
|
105
|
+
// install-phase terminal means the BES flash actually ran (WP 8C).
|
|
106
|
+
if (isLegacyShapedOtaStatus(otaStatus) && otaStatus.phase !== "install") {
|
|
107
|
+
return false
|
|
108
|
+
}
|
|
109
|
+
return true
|
|
110
|
+
}
|
|
111
|
+
if (otaProgress?.currentUpdate === "bes" && otaProgress.stage === "install" && otaProgress.status === "FINISHED") {
|
|
112
|
+
return true
|
|
113
|
+
}
|
|
114
|
+
return false
|
|
115
|
+
}
|