@glassly/engine 0.1.0-dev.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 +96 -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 +336 -0
- package/build/engine.d.ts.map +1 -0
- package/build/engine.js +198 -0
- package/build/engine.js.map +1 -0
- package/build/facades/dev.d.ts +69 -0
- package/build/facades/dev.d.ts.map +1 -0
- package/build/facades/dev.js +204 -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 +142 -0
- package/build/facades/glasses.d.ts.map +1 -0
- package/build/facades/glasses.js +214 -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 +55 -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/maps.d.ts +18 -0
- package/build/facades/maps.d.ts.map +1 -0
- package/build/facades/maps.js +13 -0
- package/build/facades/maps.js.map +1 -0
- package/build/facades/memory.d.ts +38 -0
- package/build/facades/memory.d.ts.map +1 -0
- package/build/facades/memory.js +33 -0
- package/build/facades/memory.js.map +1 -0
- package/build/facades/miniapps.d.ts +47 -0
- package/build/facades/miniapps.d.ts.map +1 -0
- package/build/facades/miniapps.js +54 -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 +106 -0
- package/build/facades/ota.d.ts.map +1 -0
- package/build/facades/ota.js +159 -0
- package/build/facades/ota.js.map +1 -0
- package/build/facades/pairing.d.ts +115 -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 +17 -0
- package/build/facades/phoneNotifications.d.ts.map +1 -0
- package/build/facades/phoneNotifications.js +41 -0
- package/build/facades/phoneNotifications.js.map +1 -0
- package/build/facades/providerKeys.d.ts +26 -0
- package/build/facades/providerKeys.d.ts.map +1 -0
- package/build/facades/providerKeys.js +26 -0
- package/build/facades/providerKeys.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/speakers.d.ts +41 -0
- package/build/facades/speakers.d.ts.map +1 -0
- package/build/facades/speakers.js +139 -0
- package/build/facades/speakers.js.map +1 -0
- package/build/facades/speech.d.ts +44 -0
- package/build/facades/speech.d.ts.map +1 -0
- package/build/facades/speech.js +46 -0
- package/build/facades/speech.js.map +1 -0
- package/build/index.d.ts +48 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +49 -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 +115 -0
- package/build/runtime/bootstrap.d.ts.map +1 -0
- package/build/runtime/bootstrap.js +73 -0
- package/build/runtime/bootstrap.js.map +1 -0
- package/build/runtime/config.d.ts +152 -0
- package/build/runtime/config.d.ts.map +1 -0
- package/build/runtime/config.js +19 -0
- package/build/runtime/config.js.map +1 -0
- package/build/runtime/scanQrSeam.d.ts +7 -0
- package/build/runtime/scanQrSeam.d.ts.map +1 -0
- package/build/runtime/scanQrSeam.js +16 -0
- package/build/runtime/scanQrSeam.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/AiTierResolution.d.ts +61 -0
- package/build/services/AiTierResolution.d.ts.map +1 -0
- package/build/services/AiTierResolution.js +83 -0
- package/build/services/AiTierResolution.js.map +1 -0
- package/build/services/AppRegistry.d.ts +303 -0
- package/build/services/AppRegistry.d.ts.map +1 -0
- package/build/services/AppRegistry.js +1108 -0
- package/build/services/AppRegistry.js.map +1 -0
- package/build/services/AudioCloudUplink.d.ts +15 -0
- package/build/services/AudioCloudUplink.d.ts.map +1 -0
- package/build/services/AudioCloudUplink.js +54 -0
- package/build/services/AudioCloudUplink.js.map +1 -0
- package/build/services/AudioPlaybackService.d.ts +183 -0
- package/build/services/AudioPlaybackService.d.ts.map +1 -0
- package/build/services/AudioPlaybackService.js +750 -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 +106 -0
- package/build/services/BlobStore.d.ts.map +1 -0
- package/build/services/BlobStore.js +741 -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 +51 -0
- package/build/services/CloudAudioSubscriptionSync.js.map +1 -0
- package/build/services/CloudClientService.d.ts +293 -0
- package/build/services/CloudClientService.d.ts.map +1 -0
- package/build/services/CloudClientService.js +965 -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 +296 -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 +214 -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/ForegroundLocationPermission.d.ts +13 -0
- package/build/services/ForegroundLocationPermission.d.ts.map +1 -0
- package/build/services/ForegroundLocationPermission.js +12 -0
- package/build/services/ForegroundLocationPermission.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 +127 -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 +33 -0
- package/build/services/HeadingService.d.ts.map +1 -0
- package/build/services/HeadingService.js +123 -0
- package/build/services/HeadingService.js.map +1 -0
- package/build/services/HotspotOtaTransport.d.ts +29 -0
- package/build/services/HotspotOtaTransport.d.ts.map +1 -0
- package/build/services/HotspotOtaTransport.js +146 -0
- package/build/services/HotspotOtaTransport.js.map +1 -0
- package/build/services/HotspotShutdown.d.ts +17 -0
- package/build/services/HotspotShutdown.d.ts.map +1 -0
- package/build/services/HotspotShutdown.js +29 -0
- package/build/services/HotspotShutdown.js.map +1 -0
- package/build/services/JSCrashController.d.ts +97 -0
- package/build/services/JSCrashController.d.ts.map +1 -0
- package/build/services/JSCrashController.js +138 -0
- package/build/services/JSCrashController.js.map +1 -0
- package/build/services/JSCrashloopReportService.d.ts +9 -0
- package/build/services/JSCrashloopReportService.d.ts.map +1 -0
- package/build/services/JSCrashloopReportService.js +54 -0
- package/build/services/JSCrashloopReportService.js.map +1 -0
- package/build/services/JSLogPipeline.d.ts +87 -0
- package/build/services/JSLogPipeline.d.ts.map +1 -0
- package/build/services/JSLogPipeline.js +137 -0
- package/build/services/JSLogPipeline.js.map +1 -0
- package/build/services/JSRouter.d.ts +203 -0
- package/build/services/JSRouter.d.ts.map +1 -0
- package/build/services/JSRouter.js +482 -0
- package/build/services/JSRouter.js.map +1 -0
- package/build/services/LocalDisplayManager.d.ts +162 -0
- package/build/services/LocalDisplayManager.d.ts.map +1 -0
- package/build/services/LocalDisplayManager.js +687 -0
- package/build/services/LocalDisplayManager.js.map +1 -0
- package/build/services/LocalMiniappDataMigration.d.ts +46 -0
- package/build/services/LocalMiniappDataMigration.d.ts.map +1 -0
- package/build/services/LocalMiniappDataMigration.js +78 -0
- package/build/services/LocalMiniappDataMigration.js.map +1 -0
- package/build/services/LocalMiniappRuntime.d.ts +677 -0
- package/build/services/LocalMiniappRuntime.d.ts.map +1 -0
- package/build/services/LocalMiniappRuntime.js +5068 -0
- package/build/services/LocalMiniappRuntime.js.map +1 -0
- package/build/services/LocalMiniappStorage.d.ts +32 -0
- package/build/services/LocalMiniappStorage.d.ts.map +1 -0
- package/build/services/LocalMiniappStorage.js +66 -0
- package/build/services/LocalMiniappStorage.js.map +1 -0
- package/build/services/LocalMiniappUserIdentity.d.ts +41 -0
- package/build/services/LocalMiniappUserIdentity.d.ts.map +1 -0
- package/build/services/LocalMiniappUserIdentity.js +73 -0
- package/build/services/LocalMiniappUserIdentity.js.map +1 -0
- package/build/services/LocalSttFallbackCoordinator.d.ts +101 -0
- package/build/services/LocalSttFallbackCoordinator.d.ts.map +1 -0
- package/build/services/LocalSttFallbackCoordinator.js +210 -0
- package/build/services/LocalSttFallbackCoordinator.js.map +1 -0
- package/build/services/MapboxTokenService.d.ts +33 -0
- package/build/services/MapboxTokenService.d.ts.map +1 -0
- package/build/services/MapboxTokenService.js +115 -0
- package/build/services/MapboxTokenService.js.map +1 -0
- package/build/services/MemoryCapture.d.ts +40 -0
- package/build/services/MemoryCapture.d.ts.map +1 -0
- package/build/services/MemoryCapture.js +42 -0
- package/build/services/MemoryCapture.js.map +1 -0
- package/build/services/MemoryStore.d.ts +184 -0
- package/build/services/MemoryStore.d.ts.map +1 -0
- package/build/services/MemoryStore.js +541 -0
- package/build/services/MemoryStore.js.map +1 -0
- package/build/services/MicStateCoordinator.d.ts +78 -0
- package/build/services/MicStateCoordinator.d.ts.map +1 -0
- package/build/services/MicStateCoordinator.js +219 -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 +127 -0
- package/build/services/MiniappLauncher.d.ts.map +1 -0
- package/build/services/MiniappLauncher.js +309 -0
- package/build/services/MiniappLauncher.js.map +1 -0
- package/build/services/MiniappLiveness.d.ts +12 -0
- package/build/services/MiniappLiveness.d.ts.map +1 -0
- package/build/services/MiniappLiveness.js +16 -0
- package/build/services/MiniappLiveness.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/NativeNavigationService.d.ts +51 -0
- package/build/services/NativeNavigationService.d.ts.map +1 -0
- package/build/services/NativeNavigationService.js +154 -0
- package/build/services/NativeNavigationService.js.map +1 -0
- package/build/services/NavigationHandlers.d.ts +107 -0
- package/build/services/NavigationHandlers.d.ts.map +1 -0
- package/build/services/NavigationHandlers.js +479 -0
- package/build/services/NavigationHandlers.js.map +1 -0
- package/build/services/NavigationService.d.ts +283 -0
- package/build/services/NavigationService.d.ts.map +1 -0
- package/build/services/NavigationService.js +696 -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/OtaArtifactDownloader.d.ts +65 -0
- package/build/services/OtaArtifactDownloader.d.ts.map +1 -0
- package/build/services/OtaArtifactDownloader.js +226 -0
- package/build/services/OtaArtifactDownloader.js.map +1 -0
- package/build/services/OtaInstallCoordinator.d.ts +275 -0
- package/build/services/OtaInstallCoordinator.d.ts.map +1 -0
- package/build/services/OtaInstallCoordinator.js +1491 -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 +72 -0
- package/build/services/OtaService.js.map +1 -0
- package/build/services/OtaUpdateCheckService.d.ts +100 -0
- package/build/services/OtaUpdateCheckService.d.ts.map +1 -0
- package/build/services/OtaUpdateCheckService.js +380 -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 +45 -0
- package/build/services/PhoneCalendarService.js.map +1 -0
- package/build/services/PhoneCameraFovCoordinator.d.ts +30 -0
- package/build/services/PhoneCameraFovCoordinator.d.ts.map +1 -0
- package/build/services/PhoneCameraFovCoordinator.js +194 -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 +37 -0
- package/build/services/PhoneNotificationsSync.js.map +1 -0
- package/build/services/PhonePhotoCoordinator.d.ts +110 -0
- package/build/services/PhonePhotoCoordinator.d.ts.map +1 -0
- package/build/services/PhonePhotoCoordinator.js +344 -0
- package/build/services/PhonePhotoCoordinator.js.map +1 -0
- package/build/services/PhoneStreamCoordinator.d.ts +175 -0
- package/build/services/PhoneStreamCoordinator.d.ts.map +1 -0
- package/build/services/PhoneStreamCoordinator.js +740 -0
- package/build/services/PhoneStreamCoordinator.js.map +1 -0
- package/build/services/PhoneVideoCoordinator.d.ts +52 -0
- package/build/services/PhoneVideoCoordinator.d.ts.map +1 -0
- package/build/services/PhoneVideoCoordinator.js +157 -0
- package/build/services/PhoneVideoCoordinator.js.map +1 -0
- package/build/services/ProviderKeyValidation.d.ts +27 -0
- package/build/services/ProviderKeyValidation.d.ts.map +1 -0
- package/build/services/ProviderKeyValidation.js +42 -0
- package/build/services/ProviderKeyValidation.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 +366 -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 +274 -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/SpeakerIdModelManager.d.ts +36 -0
- package/build/services/SpeakerIdModelManager.d.ts.map +1 -0
- package/build/services/SpeakerIdModelManager.js +132 -0
- package/build/services/SpeakerIdModelManager.js.map +1 -0
- package/build/services/SpeakerIdSync.d.ts +14 -0
- package/build/services/SpeakerIdSync.d.ts.map +1 -0
- package/build/services/SpeakerIdSync.js +62 -0
- package/build/services/SpeakerIdSync.js.map +1 -0
- package/build/services/SpeakerLabelResolver.d.ts +80 -0
- package/build/services/SpeakerLabelResolver.d.ts.map +1 -0
- package/build/services/SpeakerLabelResolver.js +108 -0
- package/build/services/SpeakerLabelResolver.js.map +1 -0
- package/build/services/SpeakerProfileStore.d.ts +90 -0
- package/build/services/SpeakerProfileStore.d.ts.map +1 -0
- package/build/services/SpeakerProfileStore.js +213 -0
- package/build/services/SpeakerProfileStore.js.map +1 -0
- package/build/services/SpeakerSegmentResolver.d.ts +87 -0
- package/build/services/SpeakerSegmentResolver.d.ts.map +1 -0
- package/build/services/SpeakerSegmentResolver.js +137 -0
- package/build/services/SpeakerSegmentResolver.js.map +1 -0
- package/build/services/StreamLifecycleController.d.ts +63 -0
- package/build/services/StreamLifecycleController.d.ts.map +1 -0
- package/build/services/StreamLifecycleController.js +148 -0
- package/build/services/StreamLifecycleController.js.map +1 -0
- package/build/services/SupportProfileSync.d.ts +22 -0
- package/build/services/SupportProfileSync.d.ts.map +1 -0
- package/build/services/SupportProfileSync.js +213 -0
- package/build/services/SupportProfileSync.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 +22 -0
- package/build/services/TranscriptionRouting.d.ts.map +1 -0
- package/build/services/TranscriptionRouting.js +34 -0
- package/build/services/TranscriptionRouting.js.map +1 -0
- package/build/services/TtsTextSanitizer.d.ts +5 -0
- package/build/services/TtsTextSanitizer.d.ts.map +1 -0
- package/build/services/TtsTextSanitizer.js +61 -0
- package/build/services/TtsTextSanitizer.js.map +1 -0
- package/build/services/UIRouter.d.ts +137 -0
- package/build/services/UIRouter.d.ts.map +1 -0
- package/build/services/UIRouter.js +210 -0
- package/build/services/UIRouter.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/WifiAdbRequest.d.ts +17 -0
- package/build/services/WifiAdbRequest.d.ts.map +1 -0
- package/build/services/WifiAdbRequest.js +35 -0
- package/build/services/WifiAdbRequest.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 +208 -0
- package/build/services/asg/asgCameraApi.d.ts.map +1 -0
- package/build/services/asg/asgCameraApi.js +1480 -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 +1945 -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/audioPlaybackAssets.d.ts +8 -0
- package/build/services/audioPlaybackAssets.d.ts.map +1 -0
- package/build/services/audioPlaybackAssets.js +7 -0
- package/build/services/audioPlaybackAssets.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/effectiveCapabilities.d.ts +8 -0
- package/build/services/effectiveCapabilities.d.ts.map +1 -0
- package/build/services/effectiveCapabilities.js +23 -0
- package/build/services/effectiveCapabilities.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/manifestActions.d.ts +31 -0
- package/build/services/manifestActions.d.ts.map +1 -0
- package/build/services/manifestActions.js +54 -0
- package/build/services/manifestActions.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/memoryStoreInstance.d.ts +19 -0
- package/build/services/memoryStoreInstance.d.ts.map +1 -0
- package/build/services/memoryStoreInstance.js +65 -0
- package/build/services/memoryStoreInstance.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 +87 -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 +53 -0
- package/build/services/otaDisplayState.d.ts.map +1 -0
- package/build/services/otaDisplayState.js +114 -0
- package/build/services/otaDisplayState.js.map +1 -0
- package/build/services/otaInstallPolicy.d.ts +93 -0
- package/build/services/otaInstallPolicy.d.ts.map +1 -0
- package/build/services/otaInstallPolicy.js +117 -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/otaManifestUrl.d.ts +2 -0
- package/build/services/otaManifestUrl.d.ts.map +1 -0
- package/build/services/otaManifestUrl.js +46 -0
- package/build/services/otaManifestUrl.js.map +1 -0
- package/build/services/slimStreamStatus.d.ts +18 -0
- package/build/services/slimStreamStatus.d.ts.map +1 -0
- package/build/services/slimStreamStatus.js +36 -0
- package/build/services/slimStreamStatus.js.map +1 -0
- package/build/services/soniox/SonioxDirectService.d.ts +109 -0
- package/build/services/soniox/SonioxDirectService.d.ts.map +1 -0
- package/build/services/soniox/SonioxDirectService.js +449 -0
- package/build/services/soniox/SonioxDirectService.js.map +1 -0
- package/build/services/soniox/SonioxRealtimeClient.d.ts +121 -0
- package/build/services/soniox/SonioxRealtimeClient.d.ts.map +1 -0
- package/build/services/soniox/SonioxRealtimeClient.js +301 -0
- package/build/services/soniox/SonioxRealtimeClient.js.map +1 -0
- package/build/services/soniox/SonioxTokenAssembler.d.ts +98 -0
- package/build/services/soniox/SonioxTokenAssembler.d.ts.map +1 -0
- package/build/services/soniox/SonioxTokenAssembler.js +394 -0
- package/build/services/soniox/SonioxTokenAssembler.js.map +1 -0
- package/build/services/speakerProfileStoreInstance.d.ts +8 -0
- package/build/services/speakerProfileStoreInstance.d.ts.map +1 -0
- package/build/services/speakerProfileStoreInstance.js +24 -0
- package/build/services/speakerProfileStoreInstance.js.map +1 -0
- package/build/services/uiShim.d.ts +38 -0
- package/build/services/uiShim.d.ts.map +1 -0
- package/build/services/uiShim.js +369 -0
- package/build/services/uiShim.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 +503 -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 +33 -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 +103 -0
- package/build/stores/gallerySync.d.ts.map +1 -0
- package/build/stores/gallerySync.js +219 -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 +208 -0
- package/build/stores/glasses.js.map +1 -0
- package/build/stores/settings.d.ts +54 -0
- package/build/stores/settings.d.ts.map +1 -0
- package/build/stores/settings.js +1200 -0
- package/build/stores/settings.js.map +1 -0
- package/build/stores/transcriptionDebug.d.ts +25 -0
- package/build/stores/transcriptionDebug.d.ts.map +1 -0
- package/build/stores/transcriptionDebug.js +0 -0
- package/build/stores/transcriptionDebug.js.map +1 -0
- package/build/types/applet.d.ts +101 -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 +57 -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 +83 -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 +65 -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 +94 -0
- package/build/types/capabilities/mentra-live.js.map +1 -0
- package/build/types/capabilities/nimo.d.ts +13 -0
- package/build/types/capabilities/nimo.d.ts.map +1 -0
- package/build/types/capabilities/nimo.js +72 -0
- package/build/types/capabilities/nimo.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 +67 -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 +82 -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 +54 -0
- package/build/types/capabilities/vuzix-z100.js.map +1 -0
- package/build/types/enums.d.ts +22 -0
- package/build/types/enums.d.ts.map +1 -0
- package/build/types/enums.js +27 -0
- package/build/types/enums.js.map +1 -0
- package/build/types/hardware.d.ts +155 -0
- package/build/types/hardware.d.ts.map +1 -0
- package/build/types/hardware.js +52 -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 +11 -0
- package/build/utils/GlobalEventEmitter.d.ts.map +1 -0
- package/build/utils/GlobalEventEmitter.js +14 -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/configuredDevHost.d.ts +6 -0
- package/build/utils/configuredDevHost.d.ts.map +1 -0
- package/build/utils/configuredDevHost.js +19 -0
- package/build/utils/configuredDevHost.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 +55 -0
- package/build/utils/devMiniappLaunch.d.ts.map +1 -0
- package/build/utils/devMiniappLaunch.js +175 -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 +122 -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 +188 -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/anchor.d.ts +17 -0
- package/build/utils/display/scene/anchor.d.ts.map +1 -0
- package/build/utils/display/scene/anchor.js +33 -0
- package/build/utils/display/scene/anchor.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 +11 -0
- package/build/utils/display/scene/index.d.ts.map +1 -0
- package/build/utils/display/scene/index.js +7 -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 +201 -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 +139 -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 +131 -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/memory/search.d.ts +72 -0
- package/build/utils/memory/search.d.ts.map +1 -0
- package/build/utils/memory/search.js +178 -0
- package/build/utils/memory/search.js.map +1 -0
- package/build/utils/miniappDiagnostics.d.ts +64 -0
- package/build/utils/miniappDiagnostics.d.ts.map +1 -0
- package/build/utils/miniappDiagnostics.js +173 -0
- package/build/utils/miniappDiagnostics.js.map +1 -0
- package/build/utils/miniappGlobals.d.ts +59 -0
- package/build/utils/miniappGlobals.d.ts.map +1 -0
- package/build/utils/miniappGlobals.js +223 -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/speakerEmbedding.d.ts +8 -0
- package/build/utils/speakerEmbedding.d.ts.map +1 -0
- package/build/utils/speakerEmbedding.js +63 -0
- package/build/utils/speakerEmbedding.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 +142 -0
- package/build/utils/timers/timers.js.map +1 -0
- package/package.json +122 -0
- package/src/assets/silence.wav +0 -0
- package/src/devtools.ts +13 -0
- package/src/engine.ts +198 -0
- package/src/facades/dev.ts +213 -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 +219 -0
- package/src/facades/glassesSettings.ts +57 -0
- package/src/facades/glassesWifi.ts +68 -0
- package/src/facades/maps.ts +13 -0
- package/src/facades/memory.ts +46 -0
- package/src/facades/miniapps.ts +62 -0
- package/src/facades/notifications.ts +14 -0
- package/src/facades/ota.ts +177 -0
- package/src/facades/pairing.ts +329 -0
- package/src/facades/permissions.ts +165 -0
- package/src/facades/phoneNotifications.ts +41 -0
- package/src/facades/providerKeys.ts +31 -0
- package/src/facades/reports.ts +180 -0
- package/src/facades/session.ts +54 -0
- package/src/facades/settings.ts +57 -0
- package/src/facades/speakers.ts +152 -0
- package/src/facades/speech.ts +49 -0
- package/src/index.ts +214 -0
- package/src/internal.ts +155 -0
- package/src/runtime/bootstrap.ts +159 -0
- package/src/runtime/config.ts +155 -0
- package/src/runtime/scanQrSeam.ts +20 -0
- package/src/runtime/streamConfig.ts +34 -0
- package/src/services/AiTierResolution.ts +106 -0
- package/src/services/AppRegistry.ts +1245 -0
- package/src/services/AudioCloudUplink.ts +56 -0
- package/src/services/AudioPlaybackService.ts +873 -0
- package/src/services/AutomaticReportResult.ts +50 -0
- package/src/services/BlobStore.ts +823 -0
- package/src/services/CaptionsTesterReportService.ts +107 -0
- package/src/services/CloudAudioSubscriptionSync.ts +53 -0
- package/src/services/CloudClientService.ts +1031 -0
- package/src/services/CloudTranscriptE2EMetrics.ts +27 -0
- package/src/services/ConnectionCoordinator.ts +65 -0
- package/src/services/DevServerBridge.ts +334 -0
- package/src/services/DeviceEventRouter.ts +266 -0
- package/src/services/DeviceStoreHydration.ts +130 -0
- package/src/services/DisplayProcessor.ts +775 -0
- package/src/services/ForegroundLocationPermission.ts +24 -0
- package/src/services/GlassesReadiness.ts +103 -0
- package/src/services/GlassesSettingsSync.ts +140 -0
- package/src/services/GlassesStatusProjection.ts +73 -0
- package/src/services/HeadingService.ts +122 -0
- package/src/services/HotspotOtaTransport.ts +184 -0
- package/src/services/HotspotShutdown.ts +41 -0
- package/src/services/JSCrashController.ts +189 -0
- package/src/services/JSCrashloopReportService.ts +66 -0
- package/src/services/JSLogPipeline.ts +166 -0
- package/src/services/JSRouter.ts +555 -0
- package/src/services/LocalDisplayManager.ts +815 -0
- package/src/services/LocalMiniappDataMigration.ts +102 -0
- package/src/services/LocalMiniappRuntime.ts +5747 -0
- package/src/services/LocalMiniappStorage.ts +82 -0
- package/src/services/LocalMiniappUserIdentity.ts +79 -0
- package/src/services/LocalSttFallbackCoordinator.ts +247 -0
- package/src/services/MapboxTokenService.ts +118 -0
- package/src/services/MemoryCapture.ts +61 -0
- package/src/services/MemoryStore.ts +633 -0
- package/src/services/MicStateCoordinator.ts +259 -0
- package/src/services/MiniappEngine.ts +143 -0
- package/src/services/MiniappLauncher.ts +365 -0
- package/src/services/MiniappLiveness.ts +24 -0
- package/src/services/MiniappRunningRegistry.ts +57 -0
- package/src/services/NativeHttpResponse.ts +6 -0
- package/src/services/NativeNavigationService.ts +176 -0
- package/src/services/NavigationHandlers.ts +527 -0
- package/src/services/NavigationService.ts +926 -0
- package/src/services/NotificationsEmitter.ts +49 -0
- package/src/services/OfflineSpeechModelService.ts +168 -0
- package/src/services/OtaArtifactDownloader.ts +312 -0
- package/src/services/OtaInstallCoordinator.ts +1707 -0
- package/src/services/OtaService.ts +89 -0
- package/src/services/OtaUpdateCheckService.ts +550 -0
- package/src/services/PairingIdentity.ts +154 -0
- package/src/services/PhoneCalendarHelpers.ts +212 -0
- package/src/services/PhoneCalendarService.ts +61 -0
- package/src/services/PhoneCameraFovCoordinator.ts +210 -0
- package/src/services/PhoneLocationService.ts +120 -0
- package/src/services/PhoneNotificationsSync.ts +46 -0
- package/src/services/PhonePhotoCoordinator.ts +435 -0
- package/src/services/PhoneStreamCoordinator.ts +874 -0
- package/src/services/PhoneVideoCoordinator.ts +203 -0
- package/src/services/ProviderKeyValidation.ts +57 -0
- package/src/services/STTModelManager.ts +434 -0
- package/src/services/SceneRenderer.ts +320 -0
- package/src/services/SentenceTtsPipeline.ts +106 -0
- package/src/services/SpeakerIdModelManager.ts +151 -0
- package/src/services/SpeakerIdSync.ts +79 -0
- package/src/services/SpeakerLabelResolver.ts +140 -0
- package/src/services/SpeakerProfileStore.ts +265 -0
- package/src/services/SpeakerSegmentResolver.ts +194 -0
- package/src/services/StreamLifecycleController.ts +203 -0
- package/src/services/SupportProfileSync.ts +218 -0
- package/src/services/TTSModelManager.ts +466 -0
- package/src/services/TranscriptionRouting.ts +47 -0
- package/src/services/TtsTextSanitizer.ts +66 -0
- package/src/services/UIRouter.ts +250 -0
- package/src/services/WebviewBridge.ts +50 -0
- package/src/services/WifiAdbRequest.ts +53 -0
- package/src/services/asg/GalleryMediaIntegrityReportService.ts +72 -0
- package/src/services/asg/asgCameraApi.ts +1786 -0
- package/src/services/asg/cameraRollExportCoordinator.ts +627 -0
- package/src/services/asg/cameraRollExportLedger.ts +122 -0
- package/src/services/asg/galleryMediaValidation.ts +185 -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 +235 -0
- package/src/services/asg/gallerySyncService.ts +2278 -0
- package/src/services/asg/galleryTransferLedger.ts +312 -0
- package/src/services/asg/localNetworkTransport.ts +169 -0
- package/src/services/asg/localStorageService.ts +652 -0
- package/src/services/asg/mediaProcessingQueue.ts +518 -0
- package/src/services/audioPlaybackAssets.ts +8 -0
- package/src/services/blobPaths.ts +86 -0
- package/src/services/cloudStreamApi.ts +142 -0
- package/src/services/effectiveCapabilities.ts +27 -0
- package/src/services/gallerySyncClock.ts +39 -0
- package/src/services/glassesClockSync.ts +115 -0
- package/src/services/manifestActions.ts +80 -0
- package/src/services/manifestVersionGate.ts +43 -0
- package/src/services/memoryStoreInstance.ts +70 -0
- package/src/services/navigation/roadNameResolver.ts +103 -0
- package/src/services/navigation/routesApiCodec.ts +69 -0
- package/src/services/otaDisplayState.ts +156 -0
- package/src/services/otaInstallPolicy.ts +132 -0
- package/src/services/otaLegacyMapping.ts +71 -0
- package/src/services/otaManifestUrl.ts +53 -0
- package/src/services/slimStreamStatus.ts +39 -0
- package/src/services/soniox/SonioxDirectService.ts +517 -0
- package/src/services/soniox/SonioxRealtimeClient.ts +349 -0
- package/src/services/soniox/SonioxTokenAssembler.ts +451 -0
- package/src/services/speakerProfileStoreInstance.ts +25 -0
- package/src/services/uiShim.ts +375 -0
- package/src/stores/apps.ts +626 -0
- package/src/stores/bluetoothSettingKeys.ts +35 -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 +384 -0
- package/src/stores/glasses.ts +314 -0
- package/src/stores/settings.ts +1299 -0
- package/src/stores/transcriptionDebug.ts +0 -0
- package/src/types/applet.ts +121 -0
- package/src/types/asg.ts +58 -0
- package/src/types/capabilities/even-realities-g1.ts +70 -0
- package/src/types/capabilities/even-realities-g2.ts +98 -0
- package/src/types/capabilities/mentra-display.ts +78 -0
- package/src/types/capabilities/mentra-live.ts +106 -0
- package/src/types/capabilities/nimo.ts +84 -0
- package/src/types/capabilities/none.ts +79 -0
- package/src/types/capabilities/simulated-glasses.ts +95 -0
- package/src/types/capabilities/vuzix-z100.ts +67 -0
- package/src/types/enums.ts +27 -0
- package/src/types/hardware.ts +220 -0
- package/src/types/index.ts +38 -0
- package/src/utils/GlobalEventEmitter.ts +15 -0
- package/src/utils/cloudClient/RnUdpAdapter.ts +47 -0
- package/src/utils/cloudClient/cloudSecureStore.ts +28 -0
- package/src/utils/configuredDevHost.ts +17 -0
- package/src/utils/debouncedPatch.ts +28 -0
- package/src/utils/devLogging.ts +140 -0
- package/src/utils/devMiniappLaunch.ts +196 -0
- package/src/utils/diagnosticContext.ts +159 -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 +409 -0
- package/src/utils/display/helpers/ScrollView.ts +326 -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/anchor.ts +39 -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 +24 -0
- package/src/utils/display/scene/process.ts +228 -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 +171 -0
- package/src/utils/hardware/index.ts +1 -0
- package/src/utils/memory/search.ts +204 -0
- package/src/utils/miniappDiagnostics.ts +226 -0
- package/src/utils/miniappGlobals.ts +259 -0
- package/src/utils/permissions/MediaLibraryPermissions.ts +161 -0
- package/src/utils/permissions/galleryDisplayName.ts +28 -0
- package/src/utils/speakerEmbedding.ts +58 -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 +175 -0
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PairingIdentity — the pairing-identity lifecycle, reified. The two-phase
|
|
3
|
+
* identity rules (see the pending/default group in stores/settings.ts) exist
|
|
4
|
+
* as a three-state machine over the identity settings keys:
|
|
5
|
+
*
|
|
6
|
+
* none ──markPendingSelection()──▶ pending ──native promotion──▶ paired
|
|
7
|
+
* ▲ │
|
|
8
|
+
* └───────boot demotion────────┘
|
|
9
|
+
*
|
|
10
|
+
* - `none` — no model ever selected: hosts route to model selection.
|
|
11
|
+
* - `pending` — a model was CHOSEN (the one JS-owned identity write, made at
|
|
12
|
+
* scan entry) but pairing never completed: hosts render
|
|
13
|
+
* finish-pairing affordances.
|
|
14
|
+
* - `paired` — the native layer promoted the identity at pairing success
|
|
15
|
+
* (handleDeviceReady) and echoed it down via save_setting:
|
|
16
|
+
* hosts render the device card / connect surfaces.
|
|
17
|
+
*
|
|
18
|
+
* Projection law, mirroring native currentDefaultDevice() on both platforms:
|
|
19
|
+
* `paired` requires default_wearable AND device_name; device_address is
|
|
20
|
+
* optional. Two read-time alignments with the demotion's own write rules:
|
|
21
|
+
* - The simulated device is its own identity (its name mirrors the model at
|
|
22
|
+
* connectSimulated, and the boot demotion never touches it), so a simulated
|
|
23
|
+
* default_wearable projects as `paired` even without a device_name echo.
|
|
24
|
+
* - A non-simulated default_wearable WITHOUT a device_name is the orphan
|
|
25
|
+
* population `demoteOrphanedDefaultWearable` repairs into pending_wearable
|
|
26
|
+
* at boot; the projection already reads it as `pending` (a fresher
|
|
27
|
+
* pending_wearable wins, matching the demotion's latest-selection-wins
|
|
28
|
+
* backfill).
|
|
29
|
+
*
|
|
30
|
+
* JS-initiated identity writes live here and only here — the scan screen
|
|
31
|
+
* (markPendingSelection), the device-event router (promotion retires the
|
|
32
|
+
* pending marker), and the boot demotion (demoteDefaultToPending) invoke
|
|
33
|
+
* these methods instead of writing the raw keys. The router's generic
|
|
34
|
+
* save_setting persistence is the inbound native→JS echo leg, not a
|
|
35
|
+
* JS-initiated write, and stays with the router.
|
|
36
|
+
*/
|
|
37
|
+
import {result as Res, type AsyncResult} from "typesafe-ts"
|
|
38
|
+
|
|
39
|
+
import {useSettingsStore, SETTINGS} from "../stores/settings"
|
|
40
|
+
import {DeviceTypes} from "../types"
|
|
41
|
+
|
|
42
|
+
export type IdentitySnapshot =
|
|
43
|
+
| {kind: "none"}
|
|
44
|
+
| {kind: "pending"; model: string}
|
|
45
|
+
| {kind: "paired"; model: string; name: string; address?: string}
|
|
46
|
+
|
|
47
|
+
// Identity keys hold model/name strings; anything else (legacy null, a stray
|
|
48
|
+
// non-string) reads as absent, matching native currentDefaultDevice()'s
|
|
49
|
+
// blank checks.
|
|
50
|
+
function readIdentityString(key: string): string {
|
|
51
|
+
const value = useSettingsStore.getState().getSetting(key)
|
|
52
|
+
return typeof value === "string" ? value : ""
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** Project the identity settings keys into the lifecycle snapshot. */
|
|
56
|
+
export function projectPairingIdentity(): IdentitySnapshot {
|
|
57
|
+
const model = readIdentityString(SETTINGS.default_wearable.key)
|
|
58
|
+
const name = readIdentityString(SETTINGS.device_name.key)
|
|
59
|
+
|
|
60
|
+
if (model && name) {
|
|
61
|
+
const address = readIdentityString(SETTINGS.device_address.key)
|
|
62
|
+
return address ? {kind: "paired", model, name, address} : {kind: "paired", model, name}
|
|
63
|
+
}
|
|
64
|
+
if (model && model.includes(DeviceTypes.SIMULATED)) {
|
|
65
|
+
return {kind: "paired", model, name: model}
|
|
66
|
+
}
|
|
67
|
+
const pending = readIdentityString(SETTINGS.pending_wearable.key)
|
|
68
|
+
if (pending) return {kind: "pending", model: pending}
|
|
69
|
+
if (model) return {kind: "pending", model}
|
|
70
|
+
return {kind: "none"}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Subscribe to identity changes, deduped on the projected snapshot (same
|
|
75
|
+
* style as glasses.onStatus): the settings store updates on many keys; the
|
|
76
|
+
* callback fires only when the identity snapshot actually changes.
|
|
77
|
+
*/
|
|
78
|
+
export function subscribePairingIdentity(cb: (identity: IdentitySnapshot) => void): () => void {
|
|
79
|
+
let last = JSON.stringify(projectPairingIdentity())
|
|
80
|
+
return useSettingsStore.subscribe(() => {
|
|
81
|
+
const snap = projectPairingIdentity()
|
|
82
|
+
const key = JSON.stringify(snap)
|
|
83
|
+
if (key === last) return
|
|
84
|
+
last = key
|
|
85
|
+
cb(snap)
|
|
86
|
+
})
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Selection: mark the model the user chose as the PENDING wearable (written
|
|
91
|
+
* at scan entry). Promotion to `paired` only ever happens natively at pairing
|
|
92
|
+
* success. The marker persists so an abandoned selection still renders its
|
|
93
|
+
* finish-pairing card after an app restart.
|
|
94
|
+
*/
|
|
95
|
+
export function markPendingSelection(model: string): AsyncResult<void, Error> {
|
|
96
|
+
// Guard the public write-path: an empty/whitespace model would persist a
|
|
97
|
+
// pending identity that renders a blank finish-pairing card.
|
|
98
|
+
const trimmed = typeof model === "string" ? model.trim() : ""
|
|
99
|
+
if (!trimmed) {
|
|
100
|
+
console.warn(`PairingIdentity: ignoring pending selection with empty model (got ${JSON.stringify(model)})`)
|
|
101
|
+
return Res.try_async(async () => {})
|
|
102
|
+
}
|
|
103
|
+
console.log(`PairingIdentity: pending selection -> "${trimmed}"`)
|
|
104
|
+
const result = useSettingsStore.getState().setSetting(SETTINGS.pending_wearable.key, trimmed)
|
|
105
|
+
// setSetting resolves to a Result (never rejects); a persist failure would
|
|
106
|
+
// silently drop the finish-pairing affordance on restart — surface it.
|
|
107
|
+
void Promise.resolve(result).then((r) => {
|
|
108
|
+
if (r.is_error()) console.warn("PairingIdentity: pending selection failed to persist:", r.error)
|
|
109
|
+
})
|
|
110
|
+
return result
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Promotion retires the selection: when the native layer promotes the default
|
|
115
|
+
* wearable at pairing success and its save_setting echo lands, the pending
|
|
116
|
+
* marker has served its purpose. Invoked by DeviceEventRouter for every echo;
|
|
117
|
+
* a no-op for other keys, empty promotions, and an already-clear marker.
|
|
118
|
+
*/
|
|
119
|
+
export async function retirePendingSelectionOnPromotion(echoedKey: string, echoedValue: unknown): Promise<void> {
|
|
120
|
+
if (echoedKey !== SETTINGS.default_wearable.key || !echoedValue) return
|
|
121
|
+
const settings = useSettingsStore.getState()
|
|
122
|
+
const pending = settings.getSetting(SETTINGS.pending_wearable.key)
|
|
123
|
+
if (pending) {
|
|
124
|
+
console.log(`PairingIdentity: promotion "${String(echoedValue)}" retires pending "${pending}"`)
|
|
125
|
+
await settings.setSetting(SETTINGS.pending_wearable.key, "")
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Demotion: turn an orphaned default identity back into a pending selection.
|
|
131
|
+
* The guards (hydration, the native default-device read, link-layer state)
|
|
132
|
+
* live with the boot repair in demoteOrphanedDefaultWearable — this is only
|
|
133
|
+
* the identity write set: backfill the pending marker unless a fresher
|
|
134
|
+
* selection already holds it (the user's LATEST selection wins), then clear
|
|
135
|
+
* the promoted identity triplet.
|
|
136
|
+
*/
|
|
137
|
+
export async function demoteDefaultToPending(model: string): Promise<void> {
|
|
138
|
+
const settings = useSettingsStore.getState()
|
|
139
|
+
// readIdentityString, not raw getSetting: a truthy non-string legacy value
|
|
140
|
+
// must read as absent here too, or the orphaned model is never backfilled
|
|
141
|
+
// while the projection reads the same junk as no pending at all.
|
|
142
|
+
const fresher = readIdentityString(SETTINGS.pending_wearable.key)
|
|
143
|
+
console.log(
|
|
144
|
+
fresher
|
|
145
|
+
? `PairingIdentity: demote "${model}" — fresher pending "${fresher}" kept`
|
|
146
|
+
: `PairingIdentity: demote "${model}" -> pending`,
|
|
147
|
+
)
|
|
148
|
+
if (!fresher) {
|
|
149
|
+
await settings.setSetting(SETTINGS.pending_wearable.key, model)
|
|
150
|
+
}
|
|
151
|
+
await settings.setSetting(SETTINGS.default_wearable.key, "")
|
|
152
|
+
await settings.setSetting(SETTINGS.device_name.key, "")
|
|
153
|
+
await settings.setSetting(SETTINGS.device_address.key, "")
|
|
154
|
+
}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import {MiniappErrorCode, type CalendarEvent} from "@glassly/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,61 @@
|
|
|
1
|
+
import * as Calendar from "expo-calendar"
|
|
2
|
+
import {Platform} from "react-native"
|
|
3
|
+
import {check, PERMISSIONS, RESULTS} from "react-native-permissions"
|
|
4
|
+
|
|
5
|
+
import {MiniappErrorCode, type CalendarListResult} from "@glassly/miniapp"
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
calendarEventOverlapsWindow,
|
|
9
|
+
type CalendarListRequest,
|
|
10
|
+
normalizeCalendarEvent,
|
|
11
|
+
PhoneCalendarError,
|
|
12
|
+
validateCalendarListRequest,
|
|
13
|
+
} from "./PhoneCalendarHelpers"
|
|
14
|
+
|
|
15
|
+
export {PhoneCalendarError} from "./PhoneCalendarHelpers"
|
|
16
|
+
|
|
17
|
+
type CalendarPermissionStatus = Awaited<
|
|
18
|
+
ReturnType<typeof Calendar.getCalendarPermissionsAsync>
|
|
19
|
+
>["status"]
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* expo-calendar reports anything below EventKit full access as not granted,
|
|
23
|
+
* so distinguish the states the user can actually fix. "Reopen the miniapp"
|
|
24
|
+
* is only true while the permission is undetermined — once iOS has resolved
|
|
25
|
+
* it (denied or write-only/limited), only Settings can change it.
|
|
26
|
+
*/
|
|
27
|
+
async function calendarPermissionMessage(status: CalendarPermissionStatus): Promise<string> {
|
|
28
|
+
if (status === "undetermined") {
|
|
29
|
+
return "Calendar permission has not been granted yet. Reopen the miniapp and allow calendar access."
|
|
30
|
+
}
|
|
31
|
+
if (Platform.OS === "ios") {
|
|
32
|
+
const writeOnly = await check(PERMISSIONS.IOS.CALENDARS_WRITE_ONLY).catch(() => null)
|
|
33
|
+
if (writeOnly === RESULTS.GRANTED || writeOnly === RESULTS.LIMITED) {
|
|
34
|
+
return 'Calendar access is limited to write-only. Enable "Full Access" for Glassly in Settings › Privacy & Security › Calendars.'
|
|
35
|
+
}
|
|
36
|
+
return "Calendar access is denied. Enable it for Glassly in Settings › Privacy & Security › Calendars."
|
|
37
|
+
}
|
|
38
|
+
return "Calendar access is denied. Enable the Calendar permission for Glassly in your phone's app settings."
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export async function listPhoneCalendarEvents(request: CalendarListRequest): Promise<CalendarListResult> {
|
|
42
|
+
const {startsAt, endsAt, limit} = validateCalendarListRequest(request)
|
|
43
|
+
const permission = await Calendar.getCalendarPermissions()
|
|
44
|
+
if (permission.status !== "granted") {
|
|
45
|
+
throw new PhoneCalendarError(MiniappErrorCode.PERMISSION_DENIED, await calendarPermissionMessage(permission.status))
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const calendars = await Calendar.getCalendars(Calendar.EntityTypes.EVENT)
|
|
49
|
+
if (calendars.length === 0) return {events: [], truncated: false}
|
|
50
|
+
|
|
51
|
+
const rawEvents = await Calendar.listEvents(calendars, startsAt, endsAt)
|
|
52
|
+
const events = rawEvents
|
|
53
|
+
.map(normalizeCalendarEvent)
|
|
54
|
+
.filter((event) => calendarEventOverlapsWindow(event, startsAt, endsAt))
|
|
55
|
+
.sort((a, b) => Date.parse(a.startsAt) - Date.parse(b.startsAt) || Date.parse(a.endsAt) - Date.parse(b.endsAt))
|
|
56
|
+
|
|
57
|
+
return {
|
|
58
|
+
events: events.slice(0, limit),
|
|
59
|
+
truncated: events.length > limit,
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import BluetoothSdk, {type CameraFovRequest, type CameraFovResult} from "@glassly/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
|
+
/** Report-safe FOV ownership snapshot for incident diagnostics. */
|
|
45
|
+
getDiagnosticSnapshot(): Record<string, unknown> {
|
|
46
|
+
return {
|
|
47
|
+
owners: [...this.overrides.entries()]
|
|
48
|
+
.sort(([, a], [, b]) => b.order - a.order)
|
|
49
|
+
.map(([packageName, entry]) => ({
|
|
50
|
+
packageName,
|
|
51
|
+
effective: entry.leaseId === this.effectiveLeaseId,
|
|
52
|
+
fov: entry.fov,
|
|
53
|
+
roiPosition: entry.roiPosition,
|
|
54
|
+
})),
|
|
55
|
+
legacyMode: this.legacyMode,
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
setOverride(packageName: string, request: CameraFovRequest): Promise<CameraFovResult> {
|
|
60
|
+
return this.enqueue(async () => {
|
|
61
|
+
const previous = this.overrides.get(packageName)
|
|
62
|
+
const leaseId = previous?.leaseId ?? mintLeaseId()
|
|
63
|
+
const order = ++this.sequence
|
|
64
|
+
try {
|
|
65
|
+
if (this.legacyMode) return this.setLegacyOverride(packageName, request, leaseId, order)
|
|
66
|
+
const result = await BluetoothSdk.setCameraFovOverride({
|
|
67
|
+
...request,
|
|
68
|
+
leaseId,
|
|
69
|
+
ttlMs: CAMERA_FOV_OVERRIDE_TTL_MS,
|
|
70
|
+
})
|
|
71
|
+
this.overrides.set(packageName, {
|
|
72
|
+
leaseId,
|
|
73
|
+
fov: result.fov,
|
|
74
|
+
roiPosition: result.roiPosition,
|
|
75
|
+
order,
|
|
76
|
+
})
|
|
77
|
+
this.effectiveLeaseId = leaseId
|
|
78
|
+
this.scheduleRefresh()
|
|
79
|
+
return result
|
|
80
|
+
} catch (error) {
|
|
81
|
+
if (!isLegacyFovCompatibilityError(error)) throw error
|
|
82
|
+
console.warn("[PhoneCameraFovCoordinator] override unavailable; using legacy FOV command", error)
|
|
83
|
+
const result = await this.setLegacyOverride(packageName, request, leaseId, order)
|
|
84
|
+
// Only cache compatibility mode after the fallback itself succeeds. A
|
|
85
|
+
// disconnect or missing native bridge must not permanently downgrade
|
|
86
|
+
// future requests on a healthy/newer glasses connection.
|
|
87
|
+
this.legacyMode = true
|
|
88
|
+
return result
|
|
89
|
+
}
|
|
90
|
+
})
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
releaseForApp(packageName: string): Promise<void> {
|
|
94
|
+
return this.enqueue(async () => {
|
|
95
|
+
const removed = this.overrides.get(packageName)
|
|
96
|
+
if (!removed) return
|
|
97
|
+
if (removed.leaseId !== this.effectiveLeaseId) {
|
|
98
|
+
this.overrides.delete(packageName)
|
|
99
|
+
return
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const next = [...this.overrides.entries()]
|
|
103
|
+
.filter(([candidatePackage]) => candidatePackage !== packageName)
|
|
104
|
+
.map(([, entry]) => entry)
|
|
105
|
+
.sort((a, b) => b.order - a.order)[0]
|
|
106
|
+
if (this.legacyMode) {
|
|
107
|
+
if (next) {
|
|
108
|
+
await this.applyLegacyFov({fov: next.fov, roiPosition: next.roiPosition})
|
|
109
|
+
this.overrides.delete(packageName)
|
|
110
|
+
this.effectiveLeaseId = next.leaseId
|
|
111
|
+
} else {
|
|
112
|
+
// Legacy commands are one-way and have no lease-release protocol.
|
|
113
|
+
// Ask native to replay its unchanged persistent base setting, then
|
|
114
|
+
// probe the modern override path again for the next ownership cycle.
|
|
115
|
+
await BluetoothSdk.restoreLegacyCameraFov()
|
|
116
|
+
await this.waitForLegacyCameraRestart()
|
|
117
|
+
this.overrides.delete(packageName)
|
|
118
|
+
this.clearRefresh()
|
|
119
|
+
this.effectiveLeaseId = undefined
|
|
120
|
+
this.legacyMode = false
|
|
121
|
+
}
|
|
122
|
+
return
|
|
123
|
+
}
|
|
124
|
+
if (next) {
|
|
125
|
+
await BluetoothSdk.setCameraFovOverride({
|
|
126
|
+
leaseId: next.leaseId,
|
|
127
|
+
fov: next.fov,
|
|
128
|
+
roiPosition: next.roiPosition,
|
|
129
|
+
ttlMs: CAMERA_FOV_OVERRIDE_TTL_MS,
|
|
130
|
+
})
|
|
131
|
+
// Commit phone-side ownership only after ASG accepted the replacement. On failure the
|
|
132
|
+
// closing app remains effective here, allowing unregister/reconnect cleanup to retry.
|
|
133
|
+
this.overrides.delete(packageName)
|
|
134
|
+
this.effectiveLeaseId = next.leaseId
|
|
135
|
+
this.scheduleRefresh()
|
|
136
|
+
} else {
|
|
137
|
+
await BluetoothSdk.releaseCameraFovOverride(removed.leaseId)
|
|
138
|
+
this.overrides.delete(packageName)
|
|
139
|
+
this.clearRefresh()
|
|
140
|
+
this.effectiveLeaseId = undefined
|
|
141
|
+
}
|
|
142
|
+
})
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
private scheduleRefresh(): void {
|
|
146
|
+
if (this.legacyMode) return
|
|
147
|
+
this.clearRefresh()
|
|
148
|
+
const leaseId = this.effectiveLeaseId
|
|
149
|
+
if (!leaseId) return
|
|
150
|
+
this.refreshTimer = setTimeout(() => {
|
|
151
|
+
void this.enqueue(async () => {
|
|
152
|
+
if (this.effectiveLeaseId !== leaseId) return
|
|
153
|
+
const entry = [...this.overrides.values()].find((candidate) => candidate.leaseId === leaseId)
|
|
154
|
+
if (!entry) return
|
|
155
|
+
await BluetoothSdk.setCameraFovOverride({
|
|
156
|
+
leaseId,
|
|
157
|
+
fov: entry.fov,
|
|
158
|
+
roiPosition: entry.roiPosition,
|
|
159
|
+
ttlMs: CAMERA_FOV_OVERRIDE_TTL_MS,
|
|
160
|
+
})
|
|
161
|
+
this.scheduleRefresh()
|
|
162
|
+
}).catch((error) => console.warn("[PhoneCameraFovCoordinator] failed to refresh override", error))
|
|
163
|
+
}, CAMERA_FOV_OVERRIDE_REFRESH_MS)
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
private clearRefresh(): void {
|
|
167
|
+
if (this.refreshTimer) clearTimeout(this.refreshTimer)
|
|
168
|
+
this.refreshTimer = undefined
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
private async setLegacyOverride(
|
|
172
|
+
packageName: string,
|
|
173
|
+
request: CameraFovRequest,
|
|
174
|
+
leaseId: string,
|
|
175
|
+
order: number,
|
|
176
|
+
): Promise<CameraFovResult> {
|
|
177
|
+
const result = await this.applyLegacyFov(request)
|
|
178
|
+
this.overrides.set(packageName, {
|
|
179
|
+
leaseId,
|
|
180
|
+
fov: result.fov,
|
|
181
|
+
roiPosition: result.roiPosition,
|
|
182
|
+
order,
|
|
183
|
+
})
|
|
184
|
+
this.effectiveLeaseId = leaseId
|
|
185
|
+
this.clearRefresh()
|
|
186
|
+
return result
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
private async applyLegacyFov(request: CameraFovRequest): Promise<CameraFovResult> {
|
|
190
|
+
const result = await BluetoothSdk.setLegacyCameraFov(request)
|
|
191
|
+
await this.waitForLegacyCameraRestart()
|
|
192
|
+
return result
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
private waitForLegacyCameraRestart(): Promise<void> {
|
|
196
|
+
if (this.legacyRestartSettleMs <= 0) return Promise.resolve()
|
|
197
|
+
return new Promise<void>((resolve) => setTimeout(resolve, this.legacyRestartSettleMs))
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
private enqueue<T>(operation: () => Promise<T>): Promise<T> {
|
|
201
|
+
const result = this.queue.then(operation, operation)
|
|
202
|
+
this.queue = result.then(
|
|
203
|
+
() => undefined,
|
|
204
|
+
() => undefined,
|
|
205
|
+
)
|
|
206
|
+
return result
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
export const phoneCameraFovCoordinator = new PhoneCameraFovCoordinator()
|