@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,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* permissions facade — `engine.permissions`: the raw OS-permission ops the runtime
|
|
3
|
+
* needs, mapped from feature keys to react-native-permissions. This is the LEAN
|
|
4
|
+
* surface (check/request/openSettings/requirementsForMiniapp) — the host keeps its
|
|
5
|
+
* own UI helpers (rationale dialogs, denied-warnings) on top; engine stays free of
|
|
6
|
+
* i18n/theme/AlertUtils.
|
|
7
|
+
*/
|
|
8
|
+
import {Platform, Linking, PermissionsAndroid, type Permission as AndroidPermission} from "react-native"
|
|
9
|
+
import {check, request, PERMISSIONS, RESULTS, type Permission} from "react-native-permissions"
|
|
10
|
+
|
|
11
|
+
import appRegistry from "../services/AppRegistry"
|
|
12
|
+
import type {AppletPermission} from "../types"
|
|
13
|
+
|
|
14
|
+
/** OEM-facing feature keys (mapped to OS permissions per platform). */
|
|
15
|
+
export const PermissionFeatures = {
|
|
16
|
+
MICROPHONE: "microphone",
|
|
17
|
+
CAMERA: "camera",
|
|
18
|
+
CALENDAR: "calendar",
|
|
19
|
+
LOCATION: "location",
|
|
20
|
+
LOCAL_WIFI: "local_wifi",
|
|
21
|
+
BACKGROUND_LOCATION: "background_location",
|
|
22
|
+
BLUETOOTH: "bluetooth",
|
|
23
|
+
PHONE_STATE: "phone_state",
|
|
24
|
+
POST_NOTIFICATIONS: "post_notifications",
|
|
25
|
+
} as const
|
|
26
|
+
|
|
27
|
+
const ANDROID = PermissionsAndroid.PERMISSIONS
|
|
28
|
+
const apiLevel = typeof Platform.Version === "number" ? Platform.Version : parseInt(String(Platform.Version), 10)
|
|
29
|
+
const requiresSeparateAndroidBackgroundLocation = apiLevel >= 29
|
|
30
|
+
|
|
31
|
+
export function localWifiPermissionForAndroid(
|
|
32
|
+
androidApiLevel: number,
|
|
33
|
+
androidPermissions: typeof PermissionsAndroid.PERMISSIONS = ANDROID,
|
|
34
|
+
): AndroidPermission {
|
|
35
|
+
return androidApiLevel >= 33 ? androidPermissions.NEARBY_WIFI_DEVICES : androidPermissions.ACCESS_FINE_LOCATION
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
async function areAndroidPermissionsGranted(perms: AndroidPermission[]): Promise<boolean> {
|
|
39
|
+
for (const p of perms) {
|
|
40
|
+
if (!(await PermissionsAndroid.check(p))) return false
|
|
41
|
+
}
|
|
42
|
+
return true
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
async function requestAndroidPermissions(perms: AndroidPermission[]): Promise<boolean> {
|
|
46
|
+
const results = await PermissionsAndroid.requestMultiple(perms)
|
|
47
|
+
return perms.every((p) => results[p] === PermissionsAndroid.RESULTS.GRANTED)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async function checkAndroidBackgroundLocation(): Promise<boolean> {
|
|
51
|
+
const hasForegroundLocation = await areAndroidPermissionsGranted([ANDROID.ACCESS_FINE_LOCATION])
|
|
52
|
+
if (!hasForegroundLocation || !requiresSeparateAndroidBackgroundLocation) return hasForegroundLocation
|
|
53
|
+
|
|
54
|
+
return PermissionsAndroid.check(ANDROID.ACCESS_BACKGROUND_LOCATION)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
async function requestAndroidBackgroundLocation(): Promise<boolean> {
|
|
58
|
+
const hasForegroundLocation = await requestAndroidPermissions([ANDROID.ACCESS_FINE_LOCATION])
|
|
59
|
+
if (!hasForegroundLocation || !requiresSeparateAndroidBackgroundLocation) return hasForegroundLocation
|
|
60
|
+
|
|
61
|
+
if (await PermissionsAndroid.check(ANDROID.ACCESS_BACKGROUND_LOCATION)) return true
|
|
62
|
+
|
|
63
|
+
const result = await PermissionsAndroid.request(ANDROID.ACCESS_BACKGROUND_LOCATION)
|
|
64
|
+
return result === PermissionsAndroid.RESULTS.GRANTED
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function iosPerms(feature: string): Permission[] {
|
|
68
|
+
switch (feature) {
|
|
69
|
+
case PermissionFeatures.MICROPHONE:
|
|
70
|
+
return [PERMISSIONS.IOS.MICROPHONE]
|
|
71
|
+
case PermissionFeatures.CAMERA:
|
|
72
|
+
return [PERMISSIONS.IOS.CAMERA]
|
|
73
|
+
case PermissionFeatures.CALENDAR:
|
|
74
|
+
return [PERMISSIONS.IOS.CALENDARS]
|
|
75
|
+
case PermissionFeatures.LOCATION:
|
|
76
|
+
return [PERMISSIONS.IOS.LOCATION_WHEN_IN_USE]
|
|
77
|
+
case PermissionFeatures.LOCAL_WIFI:
|
|
78
|
+
return []
|
|
79
|
+
case PermissionFeatures.BACKGROUND_LOCATION:
|
|
80
|
+
// iOS won't grant ALWAYS without WHEN_IN_USE first — request both (matches
|
|
81
|
+
// the host PermissionsUtils mapping), else a cold request can't escalate.
|
|
82
|
+
return [PERMISSIONS.IOS.LOCATION_WHEN_IN_USE, PERMISSIONS.IOS.LOCATION_ALWAYS]
|
|
83
|
+
case PermissionFeatures.BLUETOOTH:
|
|
84
|
+
return [PERMISSIONS.IOS.BLUETOOTH]
|
|
85
|
+
default:
|
|
86
|
+
return []
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function androidPerms(feature: string): AndroidPermission[] {
|
|
91
|
+
switch (feature) {
|
|
92
|
+
case PermissionFeatures.MICROPHONE:
|
|
93
|
+
return [ANDROID.RECORD_AUDIO]
|
|
94
|
+
case PermissionFeatures.CAMERA:
|
|
95
|
+
return [ANDROID.CAMERA]
|
|
96
|
+
case PermissionFeatures.CALENDAR:
|
|
97
|
+
// Expo Calendar requires both grants on Android, including for read APIs.
|
|
98
|
+
// The miniapp-facing calendar API remains read-only.
|
|
99
|
+
return [ANDROID.READ_CALENDAR, ANDROID.WRITE_CALENDAR]
|
|
100
|
+
case PermissionFeatures.LOCATION:
|
|
101
|
+
case PermissionFeatures.BACKGROUND_LOCATION:
|
|
102
|
+
return [ANDROID.ACCESS_FINE_LOCATION]
|
|
103
|
+
case PermissionFeatures.LOCAL_WIFI:
|
|
104
|
+
return [localWifiPermissionForAndroid(apiLevel)]
|
|
105
|
+
case PermissionFeatures.PHONE_STATE:
|
|
106
|
+
return [ANDROID.READ_PHONE_STATE]
|
|
107
|
+
case PermissionFeatures.BLUETOOTH:
|
|
108
|
+
return apiLevel >= 31 ? [ANDROID.BLUETOOTH_SCAN, ANDROID.BLUETOOTH_CONNECT, ANDROID.BLUETOOTH_ADVERTISE] : []
|
|
109
|
+
case PermissionFeatures.POST_NOTIFICATIONS:
|
|
110
|
+
return apiLevel >= 33 ? [ANDROID.POST_NOTIFICATIONS] : []
|
|
111
|
+
default:
|
|
112
|
+
return []
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export const permissions = {
|
|
117
|
+
/** Is the given feature's OS permission currently granted? */
|
|
118
|
+
async check(feature: string): Promise<boolean> {
|
|
119
|
+
if (Platform.OS === "android") {
|
|
120
|
+
if (feature === PermissionFeatures.BACKGROUND_LOCATION) return checkAndroidBackgroundLocation()
|
|
121
|
+
|
|
122
|
+
const perms = androidPerms(feature)
|
|
123
|
+
if (perms.length === 0) return true // nothing to ask on this OS/version
|
|
124
|
+
// Every permission in the group must be granted (e.g. bluetooth =
|
|
125
|
+
// scan+connect+advertise, calendar = read+write) — matches the iOS branch.
|
|
126
|
+
return areAndroidPermissionsGranted(perms)
|
|
127
|
+
}
|
|
128
|
+
const perms = iosPerms(feature)
|
|
129
|
+
if (perms.length === 0) return true
|
|
130
|
+
for (const p of perms) {
|
|
131
|
+
const status = await check(p)
|
|
132
|
+
if (status !== RESULTS.GRANTED && status !== RESULTS.LIMITED) return false
|
|
133
|
+
}
|
|
134
|
+
return true
|
|
135
|
+
},
|
|
136
|
+
|
|
137
|
+
/** Request the given feature's OS permission. Resolves to whether it's granted. */
|
|
138
|
+
async request(feature: string): Promise<boolean> {
|
|
139
|
+
if (Platform.OS === "android") {
|
|
140
|
+
if (feature === PermissionFeatures.BACKGROUND_LOCATION) return requestAndroidBackgroundLocation()
|
|
141
|
+
|
|
142
|
+
const perms = androidPerms(feature)
|
|
143
|
+
if (perms.length === 0) return true
|
|
144
|
+
// Granted only when EVERY permission in the group was granted.
|
|
145
|
+
return requestAndroidPermissions(perms)
|
|
146
|
+
}
|
|
147
|
+
const perms = iosPerms(feature)
|
|
148
|
+
if (perms.length === 0) return true
|
|
149
|
+
let granted = true
|
|
150
|
+
for (const p of perms) {
|
|
151
|
+
const result = await request(p)
|
|
152
|
+
if (result !== RESULTS.GRANTED && result !== RESULTS.LIMITED) granted = false
|
|
153
|
+
}
|
|
154
|
+
return granted
|
|
155
|
+
},
|
|
156
|
+
|
|
157
|
+
/** Open the OS settings app (so the user can grant a blocked permission). */
|
|
158
|
+
openSettings: (): Promise<void> => Linking.openSettings(),
|
|
159
|
+
|
|
160
|
+
/** The permissions a given installed miniapp declares it needs. */
|
|
161
|
+
async requirementsForMiniapp(packageName: string): Promise<AppletPermission[]> {
|
|
162
|
+
const apps = await appRegistry.getInstalledMiniapps()
|
|
163
|
+
return apps.find((a) => a.packageName === packageName)?.permissions ?? []
|
|
164
|
+
},
|
|
165
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* phoneNotifications facade — `engine.phoneNotifications`: forward phone
|
|
3
|
+
* notifications to the glasses, with a per-app blocklist. Android-only (the
|
|
4
|
+
* NotificationListenerService); the getters return sensible defaults on iOS.
|
|
5
|
+
*
|
|
6
|
+
* The per-app blocklist is an engine setting (auto-synced to the native
|
|
7
|
+
* listener); the installed-apps list + listener permission are CrustModule.
|
|
8
|
+
* Capture itself is controlled only by Android notification access and the
|
|
9
|
+
* hidden operational kill switch.
|
|
10
|
+
*/
|
|
11
|
+
import {Platform} from "react-native"
|
|
12
|
+
import CrustModule from "@glassly/crust"
|
|
13
|
+
import {useSettingsStore, SETTINGS} from "../stores/settings"
|
|
14
|
+
|
|
15
|
+
export const phoneNotifications = {
|
|
16
|
+
/** The phone's installed apps (package, name, icon). (empty on iOS) */
|
|
17
|
+
installedApps: (): Promise<Array<{packageName: string; appName: string; icon: string | null}>> => {
|
|
18
|
+
if (Platform.OS !== "android") return Promise.resolve([])
|
|
19
|
+
return CrustModule.getInstalledApps()
|
|
20
|
+
},
|
|
21
|
+
|
|
22
|
+
/** The per-app blocklist (package names whose notifications are NOT forwarded). */
|
|
23
|
+
blocklist: (): string[] => {
|
|
24
|
+
const b = useSettingsStore.getState().getSetting(SETTINGS.notifications_blocklist.key)
|
|
25
|
+
return Array.isArray(b) ? b : []
|
|
26
|
+
},
|
|
27
|
+
/** Replace the per-app blocklist. */
|
|
28
|
+
setBlocklist: (packageNames: string[]) =>
|
|
29
|
+
useSettingsStore.getState().setSetting(SETTINGS.notifications_blocklist.key, packageNames),
|
|
30
|
+
|
|
31
|
+
/** Does the app have the Android notification-listener permission? (false on iOS) */
|
|
32
|
+
hasListenerPermission: (): Promise<boolean> => {
|
|
33
|
+
if (Platform.OS !== "android") return Promise.resolve(false)
|
|
34
|
+
return CrustModule.hasNotificationListenerPermission()
|
|
35
|
+
},
|
|
36
|
+
/** Open the OS settings to grant the notification-listener permission. (no-op on iOS) */
|
|
37
|
+
requestListenerPermission: () => {
|
|
38
|
+
if (Platform.OS !== "android") return
|
|
39
|
+
return CrustModule.openNotificationListenerSettings()
|
|
40
|
+
},
|
|
41
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* providerKeys facade — `engine.providerKeys.{anthropic,gemini,elevenlabs}`:
|
|
3
|
+
* validate-before-save probes for the user-supplied AI/voice provider keys
|
|
4
|
+
* (Settings > API Keys). Same per-provider shape as `engine.maps.mapbox` /
|
|
5
|
+
* `engine.speech.sonioxDirect` so the Keys screen treats providers uniformly.
|
|
6
|
+
*/
|
|
7
|
+
import {
|
|
8
|
+
validateAnthropicApiKey,
|
|
9
|
+
validateElevenLabsApiKey,
|
|
10
|
+
validateGeminiApiKey,
|
|
11
|
+
validateOpenAiApiKey,
|
|
12
|
+
} from "../services/ProviderKeyValidation"
|
|
13
|
+
|
|
14
|
+
export const providerKeys = {
|
|
15
|
+
anthropic: {
|
|
16
|
+
/** Probe a key against the Anthropic API without saving it. */
|
|
17
|
+
validateKey: (...args: Parameters<typeof validateAnthropicApiKey>) => validateAnthropicApiKey(...args),
|
|
18
|
+
},
|
|
19
|
+
gemini: {
|
|
20
|
+
/** Probe a key against the Gemini API without saving it. */
|
|
21
|
+
validateKey: (...args: Parameters<typeof validateGeminiApiKey>) => validateGeminiApiKey(...args),
|
|
22
|
+
},
|
|
23
|
+
openai: {
|
|
24
|
+
/** Probe a key against the OpenAI API without saving it. */
|
|
25
|
+
validateKey: (...args: Parameters<typeof validateOpenAiApiKey>) => validateOpenAiApiKey(...args),
|
|
26
|
+
},
|
|
27
|
+
elevenlabs: {
|
|
28
|
+
/** Probe a key against the ElevenLabs API without saving it. */
|
|
29
|
+
validateKey: (...args: Parameters<typeof validateElevenLabsApiKey>) => validateElevenLabsApiKey(...args),
|
|
30
|
+
},
|
|
31
|
+
}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* reports facade — `engine.reports`: user/system report submission over the
|
|
3
|
+
* Cloud V2 core client.
|
|
4
|
+
*
|
|
5
|
+
* Host/OEM code owns UI and wording. Engine owns Glassly mechanics: context
|
|
6
|
+
* collection, recent phone logs, Cloud V2 calls, local automatic throttling,
|
|
7
|
+
* screenshots, and notifying connected glasses.
|
|
8
|
+
*/
|
|
9
|
+
import BluetoothSdk from "@glassly/bluetooth-sdk/internal"
|
|
10
|
+
import type {ReportAttachmentInput, ReportContext, ReportStatus, SubmitReportInput} from "@glassly/cloud-client"
|
|
11
|
+
import {useGlassesStore} from "../stores/glasses"
|
|
12
|
+
import {isGlassesConnected} from "../services/GlassesReadiness"
|
|
13
|
+
import {cloudClientService} from "../services/CloudClientService"
|
|
14
|
+
import {collectDiagnosticContext} from "../utils/diagnosticContext"
|
|
15
|
+
import {logBuffer} from "../utils/devLogging"
|
|
16
|
+
|
|
17
|
+
export type {
|
|
18
|
+
ReportAttachmentInput,
|
|
19
|
+
ReportContext,
|
|
20
|
+
ReportDetails,
|
|
21
|
+
ReportStatus,
|
|
22
|
+
ReportTrigger,
|
|
23
|
+
} from "@glassly/cloud-client"
|
|
24
|
+
|
|
25
|
+
export type EngineSubmitReportInput =
|
|
26
|
+
| (Omit<Extract<SubmitReportInput, {kind: "bug"}>, "context"> & {
|
|
27
|
+
context?: Partial<ReportContext>
|
|
28
|
+
screenshots?: ReportAttachmentInput[]
|
|
29
|
+
})
|
|
30
|
+
| (Omit<Extract<SubmitReportInput, {kind: "feedback"}>, "context"> & {
|
|
31
|
+
context?: Partial<ReportContext>
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
export type EngineSubmitAutomaticReportInput = Omit<Extract<SubmitReportInput, {kind: "automatic"}>, "context"> & {
|
|
35
|
+
context?: Partial<ReportContext>
|
|
36
|
+
screenshots?: ReportAttachmentInput[]
|
|
37
|
+
throttleKey?: string
|
|
38
|
+
throttleWindowMs?: number
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
type InternalSubmitReportInput = EngineSubmitReportInput | EngineSubmitAutomaticReportInput
|
|
42
|
+
|
|
43
|
+
export type ReportSubmitResult =
|
|
44
|
+
| {status: "submitted"; reportId: string; reportStatus: ReportStatus}
|
|
45
|
+
| {status: "skipped"; reason: "throttled_within_window"}
|
|
46
|
+
| {status: "failed"; error: string}
|
|
47
|
+
|
|
48
|
+
const DEFAULT_AUTOMATIC_REPORT_THROTTLE_MS = 90_000
|
|
49
|
+
const automaticReportThrottleRegistry = new Map<string, number>()
|
|
50
|
+
|
|
51
|
+
function automaticThrottleShouldSkip(key: string, nowMs: number, windowMs: number): boolean {
|
|
52
|
+
const previous = automaticReportThrottleRegistry.get(key)
|
|
53
|
+
if (previous !== undefined && nowMs - previous < windowMs) {
|
|
54
|
+
return true
|
|
55
|
+
}
|
|
56
|
+
pruneAutomaticThrottleRegistry(nowMs, windowMs)
|
|
57
|
+
return false
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function markAutomaticThrottleSuccess(key: string, nowMs: number, windowMs: number): void {
|
|
61
|
+
automaticReportThrottleRegistry.set(key, nowMs)
|
|
62
|
+
pruneAutomaticThrottleRegistry(nowMs, windowMs)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function pruneAutomaticThrottleRegistry(nowMs: number, windowMs: number): void {
|
|
66
|
+
for (const [entryKey, entryTime] of automaticReportThrottleRegistry) {
|
|
67
|
+
if (nowMs - entryTime > windowMs * 3) {
|
|
68
|
+
automaticReportThrottleRegistry.delete(entryKey)
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function notifyGlasses(reportId: string, apiBaseUrl?: string | null): void {
|
|
74
|
+
if (!isGlassesConnected(useGlassesStore.getState().connection)) return
|
|
75
|
+
void (async () => {
|
|
76
|
+
try {
|
|
77
|
+
await cloudClientService.syncCoreTokenToBluetooth()
|
|
78
|
+
await BluetoothSdk.sendIncidentId(reportId, apiBaseUrl ?? cloudClientService.getCoreUrl())
|
|
79
|
+
} catch (error) {
|
|
80
|
+
console.warn("reports.submit: notify glasses failed:", error instanceof Error ? error.message : error)
|
|
81
|
+
}
|
|
82
|
+
})()
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
async function submitReportInternal(input: InternalSubmitReportInput): Promise<ReportSubmitResult> {
|
|
86
|
+
const throttle =
|
|
87
|
+
input.kind === "automatic" && input.throttleKey
|
|
88
|
+
? {
|
|
89
|
+
key: input.throttleKey,
|
|
90
|
+
windowMs: input.throttleWindowMs ?? DEFAULT_AUTOMATIC_REPORT_THROTTLE_MS,
|
|
91
|
+
}
|
|
92
|
+
: null
|
|
93
|
+
|
|
94
|
+
if (input.kind === "automatic" && input.throttleKey) {
|
|
95
|
+
const shouldSkip = automaticThrottleShouldSkip(
|
|
96
|
+
input.throttleKey,
|
|
97
|
+
Date.now(),
|
|
98
|
+
throttle?.windowMs ?? DEFAULT_AUTOMATIC_REPORT_THROTTLE_MS,
|
|
99
|
+
)
|
|
100
|
+
if (shouldSkip) return {status: "skipped", reason: "throttled_within_window"}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const context = await collectDiagnosticContext(input.context)
|
|
104
|
+
let reportId: string
|
|
105
|
+
let reportStatus: ReportStatus
|
|
106
|
+
let artifactsComplete = true
|
|
107
|
+
try {
|
|
108
|
+
const res =
|
|
109
|
+
input.kind === "feedback"
|
|
110
|
+
? await cloudClientService.core.reports.submit({
|
|
111
|
+
kind: "feedback",
|
|
112
|
+
feedback: input.feedback,
|
|
113
|
+
context,
|
|
114
|
+
})
|
|
115
|
+
: input.kind === "bug"
|
|
116
|
+
? await cloudClientService.core.reports.submit({
|
|
117
|
+
kind: "bug",
|
|
118
|
+
trigger: input.trigger,
|
|
119
|
+
report: input.report,
|
|
120
|
+
context,
|
|
121
|
+
})
|
|
122
|
+
: await cloudClientService.core.reports.submit({
|
|
123
|
+
kind: "automatic",
|
|
124
|
+
trigger: input.trigger,
|
|
125
|
+
report: input.report,
|
|
126
|
+
context,
|
|
127
|
+
})
|
|
128
|
+
reportId = res.reportId
|
|
129
|
+
reportStatus = res.status
|
|
130
|
+
} catch (error) {
|
|
131
|
+
return {status: "failed", error: error instanceof Error ? error.message : String(error)}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (input.kind !== "feedback") {
|
|
135
|
+
const logs = logBuffer.getRecentLogs()
|
|
136
|
+
if (logs.length > 0) {
|
|
137
|
+
try {
|
|
138
|
+
await cloudClientService.core.reports.addLogs(reportId, "phone", logs)
|
|
139
|
+
} catch (error) {
|
|
140
|
+
artifactsComplete = false
|
|
141
|
+
console.warn("reports.submit: add phone logs failed:", error instanceof Error ? error.message : error)
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
notifyGlasses(reportId, cloudClientService.getCoreUrl())
|
|
146
|
+
|
|
147
|
+
if (input.screenshots && input.screenshots.length > 0) {
|
|
148
|
+
try {
|
|
149
|
+
await cloudClientService.core.reports.addScreenshots(reportId, input.screenshots)
|
|
150
|
+
} catch (error) {
|
|
151
|
+
artifactsComplete = false
|
|
152
|
+
console.warn("reports.submit: add screenshots failed:", error instanceof Error ? error.message : error)
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
try {
|
|
157
|
+
const completed = await cloudClientService.core.reports.complete(reportId)
|
|
158
|
+
reportStatus = completed.status
|
|
159
|
+
} catch (error) {
|
|
160
|
+
artifactsComplete = false
|
|
161
|
+
console.warn("reports.submit: complete report failed:", error instanceof Error ? error.message : error)
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
if (throttle && artifactsComplete) {
|
|
166
|
+
markAutomaticThrottleSuccess(throttle.key, Date.now(), throttle.windowMs)
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
return {status: "submitted", reportId, reportStatus}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export const reports = {
|
|
173
|
+
submit(input: EngineSubmitReportInput): Promise<ReportSubmitResult> {
|
|
174
|
+
return submitReportInternal(input)
|
|
175
|
+
},
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
export function submitAutomaticReport(input: EngineSubmitAutomaticReportInput): Promise<ReportSubmitResult> {
|
|
179
|
+
return submitReportInternal(input)
|
|
180
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* session facade — `engine.session`: the cloud-v2 live-session surface engine
|
|
3
|
+
* now owns (keystone #5). Exposes the connection status read-model (status +
|
|
4
|
+
* audio transport, projected from the engine-owned cloud-status store) and the
|
|
5
|
+
* liveness flag.
|
|
6
|
+
*
|
|
7
|
+
*/
|
|
8
|
+
import {cloudClientService} from "../services/CloudClientService"
|
|
9
|
+
import {useCloudClientStatusStore} from "../stores/cloudClientStatus"
|
|
10
|
+
import {useConnectionStore} from "../stores/connection"
|
|
11
|
+
import type {WebSocketStatus} from "../stores/connection"
|
|
12
|
+
import type {CloudClientStatusSnapshot} from "../runtime/config"
|
|
13
|
+
|
|
14
|
+
function project(): CloudClientStatusSnapshot {
|
|
15
|
+
const s = useCloudClientStatusStore.getState()
|
|
16
|
+
return {status: s.status, audioTransport: s.audioTransport}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export const session = {
|
|
20
|
+
/** Current cloud live-session status (connection state + audio transport). */
|
|
21
|
+
status: (): CloudClientStatusSnapshot => project(),
|
|
22
|
+
/** Subscribe to cloud session-status changes; returns an unsubscribe. */
|
|
23
|
+
onStatus: (cb: (status: CloudClientStatusSnapshot) => void): (() => void) => {
|
|
24
|
+
// Dedupe: fire only when the projected {status, audioTransport} changes.
|
|
25
|
+
let last = JSON.stringify(project())
|
|
26
|
+
return useCloudClientStatusStore.subscribe(() => {
|
|
27
|
+
const snap = project()
|
|
28
|
+
const key = JSON.stringify(snap)
|
|
29
|
+
if (key === last) return
|
|
30
|
+
last = key
|
|
31
|
+
cb(snap)
|
|
32
|
+
})
|
|
33
|
+
},
|
|
34
|
+
/** Whether the live-session handshake has completed. */
|
|
35
|
+
isConnected: (): boolean => cloudClientService.isConnected(),
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Legacy Cloud-V1 websocket status. The socket's writer (the host
|
|
39
|
+
* WebSocketManager) was deleted in the Cloud V1 ripout, so this now always
|
|
40
|
+
* reports the store's initial DISCONNECTED; the host connection banners
|
|
41
|
+
* render `status()` (the cloud-v2 runtime) instead. Kept, with the backing
|
|
42
|
+
* connection store, for the engine-side legacy-surface removal (issue #3392).
|
|
43
|
+
*/
|
|
44
|
+
legacyWebsocketStatus: (): WebSocketStatus => useConnectionStore.getState().status,
|
|
45
|
+
/** Subscribe to legacy websocket status changes; fires only when it changes. Returns an unsubscribe. */
|
|
46
|
+
onLegacyWebsocketStatus: (cb: (status: WebSocketStatus) => void): (() => void) => {
|
|
47
|
+
let last = useConnectionStore.getState().status
|
|
48
|
+
return useConnectionStore.subscribe((state) => {
|
|
49
|
+
if (state.status === last) return
|
|
50
|
+
last = state.status
|
|
51
|
+
cb(state.status)
|
|
52
|
+
})
|
|
53
|
+
},
|
|
54
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* settings facade — `engine.settings`: the typed keyed user-settings surface over
|
|
3
|
+
* the engine-owned settings store. This is the (A) OEM contract; the raw store at
|
|
4
|
+
* `engine.stores.settings` is the Glassly-app escape hatch.
|
|
5
|
+
*
|
|
6
|
+
* Keys + their schema live in `SETTINGS` (theme, devMode, metric/twelveHourTime,
|
|
7
|
+
* notifications, onboarding flags, …); `descriptor(key)`/`keys()` expose them.
|
|
8
|
+
*/
|
|
9
|
+
import {useSettingsStore, SETTINGS} from "../stores/settings"
|
|
10
|
+
|
|
11
|
+
// Copy: object/array-valued settings must not hand callers a mutable reference
|
|
12
|
+
// into the store (mutations would silently corrupt store state, bypassing set()).
|
|
13
|
+
function copySettingValue<T>(value: T): T {
|
|
14
|
+
if (Array.isArray(value)) return [...value] as T
|
|
15
|
+
if (value && typeof value === "object") return {...(value as object)} as T
|
|
16
|
+
return value
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export const settings = {
|
|
20
|
+
/** Read a setting by key (the current value, or its default; object/array values
|
|
21
|
+
* are shallow copies). */
|
|
22
|
+
get: <T = unknown>(key: string): T | undefined =>
|
|
23
|
+
copySettingValue(useSettingsStore.getState().getSetting(key) as T | undefined),
|
|
24
|
+
/**
|
|
25
|
+
* Write a setting. `syncToServer` (default true) also pushes the change to the
|
|
26
|
+
* backend; pass false for device-local-only writes.
|
|
27
|
+
*/
|
|
28
|
+
set: <T = unknown>(key: string, value: T, syncToServer = true) =>
|
|
29
|
+
useSettingsStore.getState().setSetting(key, value, syncToServer),
|
|
30
|
+
/** Subscribe to changes for one key; returns an unsubscribe. */
|
|
31
|
+
onChanged: <T = unknown>(key: string, cb: (value: T | undefined) => void): (() => void) =>
|
|
32
|
+
useSettingsStore.subscribe((s) => s.getSetting(key) as T | undefined, cb),
|
|
33
|
+
/** The schema descriptor for a key (type, default, options…), or undefined. */
|
|
34
|
+
descriptor: (key: string) => SETTINGS[key],
|
|
35
|
+
/** All known setting keys. */
|
|
36
|
+
keys: (): string[] => Object.keys(SETTINGS),
|
|
37
|
+
/**
|
|
38
|
+
* Reset every setting to its default on THIS device only (no server sync) —
|
|
39
|
+
* the logout path. Server-side settings are untouched.
|
|
40
|
+
*/
|
|
41
|
+
resetAllLocal: (): void => useSettingsStore.getState().resetAllSettingsLocally(),
|
|
42
|
+
/**
|
|
43
|
+
* Hydrate the settings store from device storage — the host-boot step (fire
|
|
44
|
+
* once at app start, before UI reads settings). Single-flighted internally.
|
|
45
|
+
*/
|
|
46
|
+
loadAll: () => useSettingsStore.getState().loadAllSettings(),
|
|
47
|
+
/**
|
|
48
|
+
* Every EXPLICITLY-SET setting (shallow copy; keys never written are absent —
|
|
49
|
+
* use get() for default-resolved reads). The data-export surface.
|
|
50
|
+
*/
|
|
51
|
+
getAll: (): Record<string, unknown> => ({...useSettingsStore.getState().settings}),
|
|
52
|
+
/**
|
|
53
|
+
* Bulk device-local write without server sync — seeding the store from a
|
|
54
|
+
* backend settings payload.
|
|
55
|
+
*/
|
|
56
|
+
setManyLocal: (values: Record<string, unknown>) => useSettingsStore.getState().setManyLocally(values),
|
|
57
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* speakers facade — `engine.speakers`: the device owner's voice profile for
|
|
3
|
+
* on-device voice recognition (Settings > Voice Recognition).
|
|
4
|
+
*
|
|
5
|
+
* Owner-only surface: the user enrolls their OWN voice once (`enrollSelf`);
|
|
6
|
+
* transcripts are then labeled user / other / unknown. The profile store
|
|
7
|
+
* keeps its generic multi-profile shape underneath, but this facade only
|
|
8
|
+
* exposes the self profile.
|
|
9
|
+
*
|
|
10
|
+
* Enrollment is a guided recording through whichever mic is currently active
|
|
11
|
+
* (native holds the mic open for the session). Raw audio never reaches JS —
|
|
12
|
+
* native returns chunk embeddings, which land in the profile store here; the
|
|
13
|
+
* store push back to native happens via SpeakerIdSync.
|
|
14
|
+
*/
|
|
15
|
+
import BluetoothSdk from "@glassly/bluetooth-sdk/internal"
|
|
16
|
+
import type {SpeakerEnrollProgressEvent, SpeakerEnrollResultEvent} from "@glassly/bluetooth-sdk/internal"
|
|
17
|
+
|
|
18
|
+
import speakerIdModelManager, {type SpeakerIdModelProgress} from "../services/SpeakerIdModelManager"
|
|
19
|
+
import type {SpeakerProfile} from "../services/SpeakerProfileStore"
|
|
20
|
+
import {speakerProfileStore} from "../services/speakerProfileStoreInstance"
|
|
21
|
+
|
|
22
|
+
const DEFAULT_TARGET_SPEECH_SECONDS = 20
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Display name of the self profile. Shown on the memory timeline (which
|
|
26
|
+
* renders `resolvedSpeakerName`); miniapps never see it (PII strip).
|
|
27
|
+
*/
|
|
28
|
+
const SELF_PROFILE_NAME = "You"
|
|
29
|
+
|
|
30
|
+
export type EnrollOutcome =
|
|
31
|
+
| {ok: true; profile: SpeakerProfile}
|
|
32
|
+
| {ok: false; reason: "inconsistent" | "too_short" | "model_unavailable" | "unsupported" | "cancelled" | string}
|
|
33
|
+
|
|
34
|
+
let activeEnrollment: {cancel: () => void} | null = null
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Run one enrollment session to completion. Resolves when native reports the
|
|
38
|
+
* result; on success the embeddings are stored (new profile, or appended to
|
|
39
|
+
* `improveProfileId` for "Improve recognition").
|
|
40
|
+
*/
|
|
41
|
+
async function runEnrollment(input: {
|
|
42
|
+
name?: string
|
|
43
|
+
improveProfileId?: string
|
|
44
|
+
targetSpeechSeconds?: number
|
|
45
|
+
}): Promise<EnrollOutcome> {
|
|
46
|
+
if (activeEnrollment) return {ok: false, reason: "already_enrolling"}
|
|
47
|
+
|
|
48
|
+
return new Promise<EnrollOutcome>((resolve) => {
|
|
49
|
+
let settled = false
|
|
50
|
+
const settle = (outcome: EnrollOutcome) => {
|
|
51
|
+
if (settled) return
|
|
52
|
+
settled = true
|
|
53
|
+
sub.remove()
|
|
54
|
+
activeEnrollment = null
|
|
55
|
+
console.log(
|
|
56
|
+
outcome.ok
|
|
57
|
+
? `SpeakerID: enrollment stored — profile "${outcome.profile.name}" (${outcome.profile.samples.length} samples)`
|
|
58
|
+
: `SpeakerID: enrollment not stored — ${outcome.reason}`,
|
|
59
|
+
)
|
|
60
|
+
resolve(outcome)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const sub = BluetoothSdk.addListener("speaker_enroll_result", (event: SpeakerEnrollResultEvent) => {
|
|
64
|
+
void (async () => {
|
|
65
|
+
if (!event.ok) {
|
|
66
|
+
settle({ok: false, reason: event.reason ?? "failed"})
|
|
67
|
+
return
|
|
68
|
+
}
|
|
69
|
+
const embeddings = event.embeddings ?? []
|
|
70
|
+
const source = event.source === "glasses" ? "glasses" : "phone"
|
|
71
|
+
try {
|
|
72
|
+
if (input.improveProfileId) {
|
|
73
|
+
const profile = await speakerProfileStore.addSamples(input.improveProfileId, embeddings, source)
|
|
74
|
+
if (profile) settle({ok: true, profile})
|
|
75
|
+
else settle({ok: false, reason: "profile_not_found"})
|
|
76
|
+
} else {
|
|
77
|
+
const profile = await speakerProfileStore.add(input.name ?? "", embeddings, source)
|
|
78
|
+
settle({ok: true, profile})
|
|
79
|
+
}
|
|
80
|
+
} catch (err) {
|
|
81
|
+
settle({ok: false, reason: err instanceof Error ? err.message : "store_failed"})
|
|
82
|
+
}
|
|
83
|
+
})()
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
activeEnrollment = {
|
|
87
|
+
cancel: () => {
|
|
88
|
+
void BluetoothSdk.cancelSpeakerEnrollment().catch(() => {})
|
|
89
|
+
settle({ok: false, reason: "cancelled"})
|
|
90
|
+
},
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
void BluetoothSdk.startSpeakerEnrollment({
|
|
94
|
+
targetSpeechSeconds: input.targetSpeechSeconds ?? DEFAULT_TARGET_SPEECH_SECONDS,
|
|
95
|
+
}).catch((err) => {
|
|
96
|
+
settle({ok: false, reason: err instanceof Error ? err.message : "start_failed"})
|
|
97
|
+
})
|
|
98
|
+
})
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export const speakers = {
|
|
102
|
+
/** The owner's enrolled voice profile, or null before enrollment. */
|
|
103
|
+
getSelf: async (): Promise<SpeakerProfile | null> => {
|
|
104
|
+
const profiles = await speakerProfileStore.list()
|
|
105
|
+
return profiles[0] ?? null
|
|
106
|
+
},
|
|
107
|
+
/** Subscribe to profile-store mutations. */
|
|
108
|
+
onChanged: (listener: () => void): (() => void) => speakerProfileStore.onChanged(listener),
|
|
109
|
+
/**
|
|
110
|
+
* Enroll (or re-enroll) the owner's voice via guided recording on the
|
|
111
|
+
* active mic. Replaces any existing self profile on success.
|
|
112
|
+
*/
|
|
113
|
+
enrollSelf: async (opts?: {targetSpeechSeconds?: number}): Promise<EnrollOutcome> => {
|
|
114
|
+
const outcome = await runEnrollment({name: SELF_PROFILE_NAME, targetSpeechSeconds: opts?.targetSpeechSeconds})
|
|
115
|
+
if (outcome.ok) {
|
|
116
|
+
// Drop any previous self profile — one owner voice at a time. Done
|
|
117
|
+
// after the new profile is stored so a failed session can't delete.
|
|
118
|
+
const stale = (await speakerProfileStore.list()).filter((p) => p.id !== outcome.profile.id)
|
|
119
|
+
for (const profile of stale) await speakerProfileStore.remove(profile.id)
|
|
120
|
+
}
|
|
121
|
+
return outcome
|
|
122
|
+
},
|
|
123
|
+
/** "Improve recognition": record more samples onto the self profile. */
|
|
124
|
+
improveSelf: async (opts?: {targetSpeechSeconds?: number}): Promise<EnrollOutcome> => {
|
|
125
|
+
const self = await speakers.getSelf()
|
|
126
|
+
if (!self) return {ok: false, reason: "not_enrolled"}
|
|
127
|
+
return runEnrollment({improveProfileId: self.id, targetSpeechSeconds: opts?.targetSpeechSeconds})
|
|
128
|
+
},
|
|
129
|
+
/** Delete the self profile (also drops it from native via store-change push). */
|
|
130
|
+
removeSelf: async (): Promise<boolean> => {
|
|
131
|
+
const self = await speakers.getSelf()
|
|
132
|
+
if (!self) return false
|
|
133
|
+
return speakerProfileStore.remove(self.id)
|
|
134
|
+
},
|
|
135
|
+
/** Cancel the in-flight enrollment session, if any. */
|
|
136
|
+
cancelEnrollment: (): void => {
|
|
137
|
+
activeEnrollment?.cancel()
|
|
138
|
+
},
|
|
139
|
+
/** Live recording meter + progress ring during enrollment. */
|
|
140
|
+
onEnrollProgress: (listener: (progress: SpeakerEnrollProgressEvent) => void): (() => void) => {
|
|
141
|
+
const sub = BluetoothSdk.addListener("speaker_enroll_progress", listener)
|
|
142
|
+
return () => sub.remove()
|
|
143
|
+
},
|
|
144
|
+
/** Embedding-model delivery (one-time ~28 MB download). */
|
|
145
|
+
model: {
|
|
146
|
+
isAvailable: (): Promise<boolean> => speakerIdModelManager.isModelAvailable(),
|
|
147
|
+
sizeBytes: (): number => speakerIdModelManager.sizeBytes,
|
|
148
|
+
download: (onProgress?: (p: SpeakerIdModelProgress) => void): Promise<void> =>
|
|
149
|
+
speakerIdModelManager.downloadModel(onProgress),
|
|
150
|
+
cancelDownload: (): Promise<void> => speakerIdModelManager.cancelDownload(),
|
|
151
|
+
},
|
|
152
|
+
}
|