@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,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SonioxRealtimeClient
|
|
3
|
+
*
|
|
4
|
+
* Minimal React Native WebSocket client for Soniox realtime STT
|
|
5
|
+
* (wss://stt-rt.soniox.com/transcribe-websocket). Used by SonioxDirectService
|
|
6
|
+
* when the user supplies their own Soniox API key: audio streams from the
|
|
7
|
+
* phone straight to Soniox, bypassing the Glassly cloud.
|
|
8
|
+
*
|
|
9
|
+
* Deliberately hand-rolled rather than depending on `@soniox/node` (node HTTP
|
|
10
|
+
* machinery) or `@soniox/web` (MediaStream capture): the wire protocol is one
|
|
11
|
+
* JSON config message, then binary PCM frames up / JSON token results down.
|
|
12
|
+
* Protocol shape mirrors the vendored SDK's buildConfigMessage /
|
|
13
|
+
* parseResultMessage (cloud-v2 runtime's provider is the reference
|
|
14
|
+
* implementation: cloud-v2/packages/runtime/src/services/audio/providers/soniox.ts).
|
|
15
|
+
*/
|
|
16
|
+
export declare const SONIOX_STT_WS_URL = "wss://stt-rt.soniox.com/transcribe-websocket";
|
|
17
|
+
export declare const SONIOX_MODEL = "stt-rt-v4";
|
|
18
|
+
/** REST endpoint used only for cheap key validation (Save & Test). */
|
|
19
|
+
export declare const SONIOX_MODELS_URL = "https://api.soniox.com/v1/models";
|
|
20
|
+
export interface SonioxToken {
|
|
21
|
+
text: string;
|
|
22
|
+
start_ms?: number;
|
|
23
|
+
end_ms?: number;
|
|
24
|
+
confidence?: number;
|
|
25
|
+
is_final: boolean;
|
|
26
|
+
speaker?: string;
|
|
27
|
+
language?: string;
|
|
28
|
+
translation_status?: "none" | "original" | "translation";
|
|
29
|
+
source_language?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface SonioxResult {
|
|
32
|
+
tokens: SonioxToken[];
|
|
33
|
+
finished?: boolean;
|
|
34
|
+
}
|
|
35
|
+
export declare class SonioxClientError extends Error {
|
|
36
|
+
readonly code: number | string | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Billing/auth failures (bad key, quota exhausted) are not healed by
|
|
39
|
+
* reconnecting — Soniox accepts the socket then rejects the session.
|
|
40
|
+
* Mirrors the cloud provider's isNonTransientProviderError: 401/402/403
|
|
41
|
+
* plus the quota codes (the raw wire uses 429 for quota).
|
|
42
|
+
*/
|
|
43
|
+
readonly nonTransient: boolean;
|
|
44
|
+
constructor(message: string, code?: number | string);
|
|
45
|
+
}
|
|
46
|
+
export interface SonioxSessionOptions {
|
|
47
|
+
apiKey: string;
|
|
48
|
+
/** Subscription language ("auto", "en-US", ...). Hints are derived from it. */
|
|
49
|
+
language?: string;
|
|
50
|
+
/** Detection hints for auto-mode subscriptions (already bare or BCP-47; normalized here). */
|
|
51
|
+
languageHints?: string[];
|
|
52
|
+
/** When set, configure Soniox one-way translation to this target (BCP-47 ok; normalized). */
|
|
53
|
+
targetLanguage?: string;
|
|
54
|
+
onOpen?: () => void;
|
|
55
|
+
onResult: (result: SonioxResult) => void;
|
|
56
|
+
onEndpoint: () => void;
|
|
57
|
+
onFinalized: () => void;
|
|
58
|
+
onError: (err: SonioxClientError) => void;
|
|
59
|
+
onClose?: () => void;
|
|
60
|
+
/** Test seam: WebSocket constructor override. */
|
|
61
|
+
webSocketFactory?: (url: string) => WebSocket;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Build Soniox `language_hints`. A specific language is its own hint (region
|
|
65
|
+
* stripped: "en-US" -> "en"). For "auto" the miniapp's detection hints are
|
|
66
|
+
* reduced to bare codes and deduped. Passing a BCP-47 tag or unknown code
|
|
67
|
+
* makes Soniox reject the session ("Invalid language hint"), so everything is
|
|
68
|
+
* normalized here. Port of the cloud provider's sonioxLanguageHints.
|
|
69
|
+
*/
|
|
70
|
+
export declare function sonioxLanguageHints(language: string | undefined, hints: string[] | undefined): string[] | undefined;
|
|
71
|
+
/**
|
|
72
|
+
* Soniox one-way translation target takes a bare ISO 639-1 code — a BCP-47
|
|
73
|
+
* tag ("es-ES") kills the session. Subscription keys keep the full tag; only
|
|
74
|
+
* the wire config is reduced. Port of the cloud provider's sonioxTranslationTarget.
|
|
75
|
+
*/
|
|
76
|
+
export declare function sonioxTranslationTarget(target: string): string;
|
|
77
|
+
/** The first (and only) config message sent after the socket opens. */
|
|
78
|
+
export declare function buildSonioxConfigMessage(opts: {
|
|
79
|
+
apiKey: string;
|
|
80
|
+
language?: string;
|
|
81
|
+
languageHints?: string[];
|
|
82
|
+
targetLanguage?: string;
|
|
83
|
+
}): Record<string, unknown>;
|
|
84
|
+
/**
|
|
85
|
+
* One realtime session: connect, stream audio, receive tokens. A dead session
|
|
86
|
+
* is not reusable — SonioxDirectService replaces it on reconnect.
|
|
87
|
+
*/
|
|
88
|
+
export declare class SonioxRealtimeClient {
|
|
89
|
+
private readonly opts;
|
|
90
|
+
private ws;
|
|
91
|
+
private opened;
|
|
92
|
+
private closed;
|
|
93
|
+
private connectTimer;
|
|
94
|
+
private keepaliveTimer;
|
|
95
|
+
private lastAudioSentAt;
|
|
96
|
+
constructor(opts: SonioxSessionOptions);
|
|
97
|
+
isOpen(): boolean;
|
|
98
|
+
connect(): void;
|
|
99
|
+
/** Binary PCM (s16le 16kHz mono) frame. Dropped when the socket isn't open. */
|
|
100
|
+
sendAudio(pcm: ArrayBuffer): void;
|
|
101
|
+
finalize(): void;
|
|
102
|
+
close(): void;
|
|
103
|
+
private handleMessage;
|
|
104
|
+
private sendControl;
|
|
105
|
+
private startKeepalive;
|
|
106
|
+
private stopKeepalive;
|
|
107
|
+
private clearConnectTimer;
|
|
108
|
+
private teardown;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Cheap key validation for the Keys screen: GET /v1/models with the key as a
|
|
112
|
+
* Bearer token. 401/403 → invalid key; network failure → indeterminate (the
|
|
113
|
+
* caller may offer "save anyway").
|
|
114
|
+
*/
|
|
115
|
+
export declare function validateSonioxApiKey(apiKey: string): Promise<{
|
|
116
|
+
ok: true;
|
|
117
|
+
} | {
|
|
118
|
+
ok: false;
|
|
119
|
+
reason: "invalid_key" | "network";
|
|
120
|
+
}>;
|
|
121
|
+
//# sourceMappingURL=SonioxRealtimeClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SonioxRealtimeClient.d.ts","sourceRoot":"","sources":["../../../src/services/soniox/SonioxRealtimeClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SonioxRealtimeClient
|
|
3
|
+
*
|
|
4
|
+
* Minimal React Native WebSocket client for Soniox realtime STT
|
|
5
|
+
* (wss://stt-rt.soniox.com/transcribe-websocket). Used by SonioxDirectService
|
|
6
|
+
* when the user supplies their own Soniox API key: audio streams from the
|
|
7
|
+
* phone straight to Soniox, bypassing the Glassly cloud.
|
|
8
|
+
*
|
|
9
|
+
* Deliberately hand-rolled rather than depending on `@soniox/node` (node HTTP
|
|
10
|
+
* machinery) or `@soniox/web` (MediaStream capture): the wire protocol is one
|
|
11
|
+
* JSON config message, then binary PCM frames up / JSON token results down.
|
|
12
|
+
* Protocol shape mirrors the vendored SDK's buildConfigMessage /
|
|
13
|
+
* parseResultMessage (cloud-v2 runtime's provider is the reference
|
|
14
|
+
* implementation: cloud-v2/packages/runtime/src/services/audio/providers/soniox.ts).
|
|
15
|
+
*/
|
|
16
|
+
import { BgTimer } from "../../utils/timers";
|
|
17
|
+
export const SONIOX_STT_WS_URL = "wss://stt-rt.soniox.com/transcribe-websocket";
|
|
18
|
+
export const SONIOX_MODEL = "stt-rt-v4";
|
|
19
|
+
/** REST endpoint used only for cheap key validation (Save & Test). */
|
|
20
|
+
export const SONIOX_MODELS_URL = "https://api.soniox.com/v1/models";
|
|
21
|
+
const CONNECT_TIMEOUT_MS = 20_000;
|
|
22
|
+
const KEEPALIVE_INTERVAL_MS = 5_000;
|
|
23
|
+
export class SonioxClientError extends Error {
|
|
24
|
+
code;
|
|
25
|
+
/**
|
|
26
|
+
* Billing/auth failures (bad key, quota exhausted) are not healed by
|
|
27
|
+
* reconnecting — Soniox accepts the socket then rejects the session.
|
|
28
|
+
* Mirrors the cloud provider's isNonTransientProviderError: 401/402/403
|
|
29
|
+
* plus the quota codes (the raw wire uses 429 for quota).
|
|
30
|
+
*/
|
|
31
|
+
nonTransient;
|
|
32
|
+
constructor(message, code) {
|
|
33
|
+
super(message);
|
|
34
|
+
this.name = "SonioxClientError";
|
|
35
|
+
this.code = code;
|
|
36
|
+
this.nonTransient = code === 401 || code === 402 || code === 403 || code === 429 || code === "quota_exceeded";
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Build Soniox `language_hints`. A specific language is its own hint (region
|
|
41
|
+
* stripped: "en-US" -> "en"). For "auto" the miniapp's detection hints are
|
|
42
|
+
* reduced to bare codes and deduped. Passing a BCP-47 tag or unknown code
|
|
43
|
+
* makes Soniox reject the session ("Invalid language hint"), so everything is
|
|
44
|
+
* normalized here. Port of the cloud provider's sonioxLanguageHints.
|
|
45
|
+
*/
|
|
46
|
+
export function sonioxLanguageHints(language, hints) {
|
|
47
|
+
const toBareCode = (code) => code.split("-")[0].toLowerCase();
|
|
48
|
+
if (language && language !== "auto") {
|
|
49
|
+
return [toBareCode(language)];
|
|
50
|
+
}
|
|
51
|
+
if (!hints || hints.length === 0)
|
|
52
|
+
return undefined;
|
|
53
|
+
const bare = [...new Set(hints.map(toBareCode).filter(Boolean))];
|
|
54
|
+
return bare.length > 0 ? bare : undefined;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Soniox one-way translation target takes a bare ISO 639-1 code — a BCP-47
|
|
58
|
+
* tag ("es-ES") kills the session. Subscription keys keep the full tag; only
|
|
59
|
+
* the wire config is reduced. Port of the cloud provider's sonioxTranslationTarget.
|
|
60
|
+
*/
|
|
61
|
+
export function sonioxTranslationTarget(target) {
|
|
62
|
+
return target.split("-")[0].toLowerCase();
|
|
63
|
+
}
|
|
64
|
+
/** The first (and only) config message sent after the socket opens. */
|
|
65
|
+
export function buildSonioxConfigMessage(opts) {
|
|
66
|
+
return {
|
|
67
|
+
api_key: opts.apiKey,
|
|
68
|
+
model: SONIOX_MODEL,
|
|
69
|
+
audio_format: "pcm_s16le",
|
|
70
|
+
sample_rate: 16_000,
|
|
71
|
+
num_channels: 1,
|
|
72
|
+
enable_language_identification: true,
|
|
73
|
+
enable_endpoint_detection: true,
|
|
74
|
+
enable_speaker_diarization: true,
|
|
75
|
+
max_endpoint_delay_ms: 2_000,
|
|
76
|
+
language_hints: sonioxLanguageHints(opts.language, opts.languageHints),
|
|
77
|
+
context: {
|
|
78
|
+
terms: ["Glassly", "Hey Glassly"],
|
|
79
|
+
text: "Glassly, Hey Glassly (an AI assistant)",
|
|
80
|
+
},
|
|
81
|
+
translation: opts.targetLanguage
|
|
82
|
+
? { type: "one_way", target_language: sonioxTranslationTarget(opts.targetLanguage) }
|
|
83
|
+
: undefined,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* One realtime session: connect, stream audio, receive tokens. A dead session
|
|
88
|
+
* is not reusable — SonioxDirectService replaces it on reconnect.
|
|
89
|
+
*/
|
|
90
|
+
export class SonioxRealtimeClient {
|
|
91
|
+
opts;
|
|
92
|
+
ws = null;
|
|
93
|
+
opened = false;
|
|
94
|
+
closed = false;
|
|
95
|
+
connectTimer = null;
|
|
96
|
+
keepaliveTimer = null;
|
|
97
|
+
lastAudioSentAt = 0;
|
|
98
|
+
constructor(opts) {
|
|
99
|
+
this.opts = opts;
|
|
100
|
+
}
|
|
101
|
+
isOpen() {
|
|
102
|
+
return this.opened && !this.closed;
|
|
103
|
+
}
|
|
104
|
+
connect() {
|
|
105
|
+
if (this.ws)
|
|
106
|
+
return;
|
|
107
|
+
const factory = this.opts.webSocketFactory ?? ((url) => new WebSocket(url));
|
|
108
|
+
let ws;
|
|
109
|
+
try {
|
|
110
|
+
ws = factory(SONIOX_STT_WS_URL);
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
this.opts.onError(new SonioxClientError(`websocket construction failed: ${err?.message ?? err}`));
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
this.ws = ws;
|
|
117
|
+
ws.binaryType = "arraybuffer";
|
|
118
|
+
this.connectTimer = BgTimer.setTimeout(() => {
|
|
119
|
+
this.connectTimer = null;
|
|
120
|
+
if (!this.opened && !this.closed) {
|
|
121
|
+
this.opts.onError(new SonioxClientError("connect timeout", 503));
|
|
122
|
+
this.close();
|
|
123
|
+
}
|
|
124
|
+
}, CONNECT_TIMEOUT_MS);
|
|
125
|
+
ws.onopen = () => {
|
|
126
|
+
if (this.closed)
|
|
127
|
+
return;
|
|
128
|
+
this.clearConnectTimer();
|
|
129
|
+
this.opened = true;
|
|
130
|
+
const config = buildSonioxConfigMessage({
|
|
131
|
+
apiKey: this.opts.apiKey,
|
|
132
|
+
language: this.opts.language,
|
|
133
|
+
languageHints: this.opts.languageHints,
|
|
134
|
+
targetLanguage: this.opts.targetLanguage,
|
|
135
|
+
});
|
|
136
|
+
try {
|
|
137
|
+
ws.send(JSON.stringify(config));
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
this.opts.onError(new SonioxClientError(`config send failed: ${err?.message ?? err}`));
|
|
141
|
+
this.close();
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
this.startKeepalive();
|
|
145
|
+
this.opts.onOpen?.();
|
|
146
|
+
};
|
|
147
|
+
ws.onmessage = (event) => {
|
|
148
|
+
if (this.closed || typeof event.data !== "string")
|
|
149
|
+
return;
|
|
150
|
+
this.handleMessage(event.data);
|
|
151
|
+
};
|
|
152
|
+
ws.onerror = () => {
|
|
153
|
+
if (this.closed)
|
|
154
|
+
return;
|
|
155
|
+
// RN's error event carries no useful detail; the close event follows.
|
|
156
|
+
this.opts.onError(new SonioxClientError("websocket error", 503));
|
|
157
|
+
};
|
|
158
|
+
ws.onclose = () => {
|
|
159
|
+
const wasClosed = this.closed;
|
|
160
|
+
this.teardown();
|
|
161
|
+
if (!wasClosed)
|
|
162
|
+
this.opts.onClose?.();
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/** Binary PCM (s16le 16kHz mono) frame. Dropped when the socket isn't open. */
|
|
166
|
+
sendAudio(pcm) {
|
|
167
|
+
if (!this.isOpen() || !this.ws)
|
|
168
|
+
return;
|
|
169
|
+
this.lastAudioSentAt = Date.now();
|
|
170
|
+
try {
|
|
171
|
+
this.ws.send(pcm);
|
|
172
|
+
}
|
|
173
|
+
catch (err) {
|
|
174
|
+
this.opts.onError(new SonioxClientError(`audio send failed: ${err?.message ?? err}`));
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
finalize() {
|
|
178
|
+
this.sendControl({ type: "finalize" });
|
|
179
|
+
}
|
|
180
|
+
close() {
|
|
181
|
+
if (this.closed) {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
this.closed = true;
|
|
185
|
+
this.clearConnectTimer();
|
|
186
|
+
this.stopKeepalive();
|
|
187
|
+
const ws = this.ws;
|
|
188
|
+
this.ws = null;
|
|
189
|
+
this.opened = false;
|
|
190
|
+
if (ws) {
|
|
191
|
+
try {
|
|
192
|
+
ws.close();
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
/* best-effort */
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
handleMessage(data) {
|
|
200
|
+
let raw;
|
|
201
|
+
try {
|
|
202
|
+
raw = JSON.parse(data);
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
if ("error_code" in raw || "error_message" in raw) {
|
|
208
|
+
const code = raw.error_code;
|
|
209
|
+
const message = typeof raw.error_message === "string" ? raw.error_message : "soniox error";
|
|
210
|
+
this.opts.onError(new SonioxClientError(message, code));
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
const allTokens = Array.isArray(raw.tokens) ? raw.tokens : [];
|
|
214
|
+
let sawEndpoint = false;
|
|
215
|
+
let sawFinalized = false;
|
|
216
|
+
const tokens = [];
|
|
217
|
+
for (const t of allTokens) {
|
|
218
|
+
if (typeof t?.text !== "string")
|
|
219
|
+
continue;
|
|
220
|
+
if (t.text === "<end>") {
|
|
221
|
+
sawEndpoint = true;
|
|
222
|
+
}
|
|
223
|
+
else if (t.text === "<fin>") {
|
|
224
|
+
sawFinalized = true;
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
tokens.push(t);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
if (tokens.length > 0) {
|
|
231
|
+
this.opts.onResult({ tokens, finished: raw.finished === true });
|
|
232
|
+
}
|
|
233
|
+
// Order matters: tokens in the same message belong to the utterance the
|
|
234
|
+
// endpoint closes, so deliver them before the boundary signal.
|
|
235
|
+
if (sawEndpoint)
|
|
236
|
+
this.opts.onEndpoint();
|
|
237
|
+
if (sawFinalized)
|
|
238
|
+
this.opts.onFinalized();
|
|
239
|
+
}
|
|
240
|
+
sendControl(msg) {
|
|
241
|
+
if (!this.isOpen() || !this.ws)
|
|
242
|
+
return;
|
|
243
|
+
try {
|
|
244
|
+
this.ws.send(JSON.stringify(msg));
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
/* best-effort */
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
startKeepalive() {
|
|
251
|
+
this.stopKeepalive();
|
|
252
|
+
this.keepaliveTimer = BgTimer.setInterval(() => {
|
|
253
|
+
// Only needed when no audio has been sent recently — Soniox times out
|
|
254
|
+
// idle sessions. Continuous audio makes this a safety net.
|
|
255
|
+
if (Date.now() - this.lastAudioSentAt >= KEEPALIVE_INTERVAL_MS) {
|
|
256
|
+
this.sendControl({ type: "keepalive" });
|
|
257
|
+
}
|
|
258
|
+
}, KEEPALIVE_INTERVAL_MS);
|
|
259
|
+
}
|
|
260
|
+
stopKeepalive() {
|
|
261
|
+
if (this.keepaliveTimer !== null) {
|
|
262
|
+
BgTimer.clearInterval(this.keepaliveTimer);
|
|
263
|
+
this.keepaliveTimer = null;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
clearConnectTimer() {
|
|
267
|
+
if (this.connectTimer !== null) {
|
|
268
|
+
BgTimer.clearTimeout(this.connectTimer);
|
|
269
|
+
this.connectTimer = null;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
teardown() {
|
|
273
|
+
this.closed = true;
|
|
274
|
+
this.opened = false;
|
|
275
|
+
this.clearConnectTimer();
|
|
276
|
+
this.stopKeepalive();
|
|
277
|
+
this.ws = null;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Cheap key validation for the Keys screen: GET /v1/models with the key as a
|
|
282
|
+
* Bearer token. 401/403 → invalid key; network failure → indeterminate (the
|
|
283
|
+
* caller may offer "save anyway").
|
|
284
|
+
*/
|
|
285
|
+
export async function validateSonioxApiKey(apiKey) {
|
|
286
|
+
try {
|
|
287
|
+
const res = await fetch(SONIOX_MODELS_URL, {
|
|
288
|
+
method: "GET",
|
|
289
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
290
|
+
});
|
|
291
|
+
if (res.ok)
|
|
292
|
+
return { ok: true };
|
|
293
|
+
if (res.status === 401 || res.status === 403)
|
|
294
|
+
return { ok: false, reason: "invalid_key" };
|
|
295
|
+
return { ok: false, reason: "network" };
|
|
296
|
+
}
|
|
297
|
+
catch {
|
|
298
|
+
return { ok: false, reason: "network" };
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=SonioxRealtimeClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SonioxRealtimeClient.js","sourceRoot":"","sources":["../../../src/services/soniox/SonioxRealtimeClient.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * SonioxRealtimeClient\n *\n * Minimal React Native WebSocket client for Soniox realtime STT\n * (wss://stt-rt.soniox.com/transcribe-websocket). Used by SonioxDirectService\n * when the user supplies their own Soniox API key: audio streams from the\n * phone straight to Soniox, bypassing the Glassly cloud.\n *\n * Deliberately hand-rolled rather than depending on `@soniox/node` (node HTTP\n * machinery) or `@soniox/web` (MediaStream capture): the wire protocol is one\n * JSON config message, then binary PCM frames up / JSON token results down.\n * Protocol shape mirrors the vendored SDK's buildConfigMessage /\n * parseResultMessage (cloud-v2 runtime's provider is the reference\n * implementation: cloud-v2/packages/runtime/src/services/audio/providers/soniox.ts).\n */\n\nimport {BgTimer} from \"../../utils/timers\"\n\nexport const SONIOX_STT_WS_URL = \"wss://stt-rt.soniox.com/transcribe-websocket\"\nexport const SONIOX_MODEL = \"stt-rt-v4\"\n/** REST endpoint used only for cheap key validation (Save & Test). */\nexport const SONIOX_MODELS_URL = \"https://api.soniox.com/v1/models\"\n\nconst CONNECT_TIMEOUT_MS = 20_000\nconst KEEPALIVE_INTERVAL_MS = 5_000\n\nexport interface SonioxToken {\n text: string\n start_ms?: number\n end_ms?: number\n confidence?: number\n is_final: boolean\n speaker?: string\n language?: string\n translation_status?: \"none\" | \"original\" | \"translation\"\n source_language?: string\n}\n\nexport interface SonioxResult {\n tokens: SonioxToken[]\n finished?: boolean\n}\n\nexport class SonioxClientError extends Error {\n readonly code: number | string | undefined\n /**\n * Billing/auth failures (bad key, quota exhausted) are not healed by\n * reconnecting — Soniox accepts the socket then rejects the session.\n * Mirrors the cloud provider's isNonTransientProviderError: 401/402/403\n * plus the quota codes (the raw wire uses 429 for quota).\n */\n readonly nonTransient: boolean\n\n constructor(message: string, code?: number | string) {\n super(message)\n this.name = \"SonioxClientError\"\n this.code = code\n this.nonTransient = code === 401 || code === 402 || code === 403 || code === 429 || code === \"quota_exceeded\"\n }\n}\n\nexport interface SonioxSessionOptions {\n apiKey: string\n /** Subscription language (\"auto\", \"en-US\", ...). Hints are derived from it. */\n language?: string\n /** Detection hints for auto-mode subscriptions (already bare or BCP-47; normalized here). */\n languageHints?: string[]\n /** When set, configure Soniox one-way translation to this target (BCP-47 ok; normalized). */\n targetLanguage?: string\n onOpen?: () => void\n onResult: (result: SonioxResult) => void\n onEndpoint: () => void\n onFinalized: () => void\n onError: (err: SonioxClientError) => void\n onClose?: () => void\n /** Test seam: WebSocket constructor override. */\n webSocketFactory?: (url: string) => WebSocket\n}\n\n/**\n * Build Soniox `language_hints`. A specific language is its own hint (region\n * stripped: \"en-US\" -> \"en\"). For \"auto\" the miniapp's detection hints are\n * reduced to bare codes and deduped. Passing a BCP-47 tag or unknown code\n * makes Soniox reject the session (\"Invalid language hint\"), so everything is\n * normalized here. Port of the cloud provider's sonioxLanguageHints.\n */\nexport function sonioxLanguageHints(language: string | undefined, hints: string[] | undefined): string[] | undefined {\n const toBareCode = (code: string) => code.split(\"-\")[0].toLowerCase()\n if (language && language !== \"auto\") {\n return [toBareCode(language)]\n }\n if (!hints || hints.length === 0) return undefined\n const bare = [...new Set(hints.map(toBareCode).filter(Boolean))]\n return bare.length > 0 ? bare : undefined\n}\n\n/**\n * Soniox one-way translation target takes a bare ISO 639-1 code — a BCP-47\n * tag (\"es-ES\") kills the session. Subscription keys keep the full tag; only\n * the wire config is reduced. Port of the cloud provider's sonioxTranslationTarget.\n */\nexport function sonioxTranslationTarget(target: string): string {\n return target.split(\"-\")[0].toLowerCase()\n}\n\n/** The first (and only) config message sent after the socket opens. */\nexport function buildSonioxConfigMessage(opts: {\n apiKey: string\n language?: string\n languageHints?: string[]\n targetLanguage?: string\n}): Record<string, unknown> {\n return {\n api_key: opts.apiKey,\n model: SONIOX_MODEL,\n audio_format: \"pcm_s16le\",\n sample_rate: 16_000,\n num_channels: 1,\n enable_language_identification: true,\n enable_endpoint_detection: true,\n enable_speaker_diarization: true,\n max_endpoint_delay_ms: 2_000,\n language_hints: sonioxLanguageHints(opts.language, opts.languageHints),\n context: {\n terms: [\"Glassly\", \"Hey Glassly\"],\n text: \"Glassly, Hey Glassly (an AI assistant)\",\n },\n translation: opts.targetLanguage\n ? {type: \"one_way\", target_language: sonioxTranslationTarget(opts.targetLanguage)}\n : undefined,\n }\n}\n\n/**\n * One realtime session: connect, stream audio, receive tokens. A dead session\n * is not reusable — SonioxDirectService replaces it on reconnect.\n */\nexport class SonioxRealtimeClient {\n private readonly opts: SonioxSessionOptions\n private ws: WebSocket | null = null\n private opened = false\n private closed = false\n private connectTimer: number | null = null\n private keepaliveTimer: number | null = null\n private lastAudioSentAt = 0\n\n constructor(opts: SonioxSessionOptions) {\n this.opts = opts\n }\n\n isOpen(): boolean {\n return this.opened && !this.closed\n }\n\n connect(): void {\n if (this.ws) return\n const factory = this.opts.webSocketFactory ?? ((url: string) => new WebSocket(url))\n let ws: WebSocket\n try {\n ws = factory(SONIOX_STT_WS_URL)\n } catch (err) {\n this.opts.onError(new SonioxClientError(`websocket construction failed: ${(err as Error)?.message ?? err}`))\n return\n }\n this.ws = ws\n ws.binaryType = \"arraybuffer\"\n\n this.connectTimer = BgTimer.setTimeout(() => {\n this.connectTimer = null\n if (!this.opened && !this.closed) {\n this.opts.onError(new SonioxClientError(\"connect timeout\", 503))\n this.close()\n }\n }, CONNECT_TIMEOUT_MS)\n\n ws.onopen = () => {\n if (this.closed) return\n this.clearConnectTimer()\n this.opened = true\n const config = buildSonioxConfigMessage({\n apiKey: this.opts.apiKey,\n language: this.opts.language,\n languageHints: this.opts.languageHints,\n targetLanguage: this.opts.targetLanguage,\n })\n try {\n ws.send(JSON.stringify(config))\n } catch (err) {\n this.opts.onError(new SonioxClientError(`config send failed: ${(err as Error)?.message ?? err}`))\n this.close()\n return\n }\n this.startKeepalive()\n this.opts.onOpen?.()\n }\n\n ws.onmessage = (event) => {\n if (this.closed || typeof event.data !== \"string\") return\n this.handleMessage(event.data)\n }\n\n ws.onerror = () => {\n if (this.closed) return\n // RN's error event carries no useful detail; the close event follows.\n this.opts.onError(new SonioxClientError(\"websocket error\", 503))\n }\n\n ws.onclose = () => {\n const wasClosed = this.closed\n this.teardown()\n if (!wasClosed) this.opts.onClose?.()\n }\n }\n\n /** Binary PCM (s16le 16kHz mono) frame. Dropped when the socket isn't open. */\n sendAudio(pcm: ArrayBuffer): void {\n if (!this.isOpen() || !this.ws) return\n this.lastAudioSentAt = Date.now()\n try {\n this.ws.send(pcm)\n } catch (err) {\n this.opts.onError(new SonioxClientError(`audio send failed: ${(err as Error)?.message ?? err}`))\n }\n }\n\n finalize(): void {\n this.sendControl({type: \"finalize\"})\n }\n\n close(): void {\n if (this.closed) {\n return\n }\n this.closed = true\n this.clearConnectTimer()\n this.stopKeepalive()\n const ws = this.ws\n this.ws = null\n this.opened = false\n if (ws) {\n try {\n ws.close()\n } catch {\n /* best-effort */\n }\n }\n }\n\n private handleMessage(data: string): void {\n let raw: Record<string, unknown>\n try {\n raw = JSON.parse(data) as Record<string, unknown>\n } catch {\n return\n }\n if (\"error_code\" in raw || \"error_message\" in raw) {\n const code = raw.error_code as number | string | undefined\n const message = typeof raw.error_message === \"string\" ? raw.error_message : \"soniox error\"\n this.opts.onError(new SonioxClientError(message, code))\n return\n }\n\n const allTokens = Array.isArray(raw.tokens) ? (raw.tokens as SonioxToken[]) : []\n let sawEndpoint = false\n let sawFinalized = false\n const tokens: SonioxToken[] = []\n for (const t of allTokens) {\n if (typeof t?.text !== \"string\") continue\n if (t.text === \"<end>\") {\n sawEndpoint = true\n } else if (t.text === \"<fin>\") {\n sawFinalized = true\n } else {\n tokens.push(t)\n }\n }\n\n if (tokens.length > 0) {\n this.opts.onResult({tokens, finished: raw.finished === true})\n }\n // Order matters: tokens in the same message belong to the utterance the\n // endpoint closes, so deliver them before the boundary signal.\n if (sawEndpoint) this.opts.onEndpoint()\n if (sawFinalized) this.opts.onFinalized()\n }\n\n private sendControl(msg: {type: string}): void {\n if (!this.isOpen() || !this.ws) return\n try {\n this.ws.send(JSON.stringify(msg))\n } catch {\n /* best-effort */\n }\n }\n\n private startKeepalive(): void {\n this.stopKeepalive()\n this.keepaliveTimer = BgTimer.setInterval(() => {\n // Only needed when no audio has been sent recently — Soniox times out\n // idle sessions. Continuous audio makes this a safety net.\n if (Date.now() - this.lastAudioSentAt >= KEEPALIVE_INTERVAL_MS) {\n this.sendControl({type: \"keepalive\"})\n }\n }, KEEPALIVE_INTERVAL_MS)\n }\n\n private stopKeepalive(): void {\n if (this.keepaliveTimer !== null) {\n BgTimer.clearInterval(this.keepaliveTimer)\n this.keepaliveTimer = null\n }\n }\n\n private clearConnectTimer(): void {\n if (this.connectTimer !== null) {\n BgTimer.clearTimeout(this.connectTimer)\n this.connectTimer = null\n }\n }\n\n private teardown(): void {\n this.closed = true\n this.opened = false\n this.clearConnectTimer()\n this.stopKeepalive()\n this.ws = null\n }\n}\n\n/**\n * Cheap key validation for the Keys screen: GET /v1/models with the key as a\n * Bearer token. 401/403 → invalid key; network failure → indeterminate (the\n * caller may offer \"save anyway\").\n */\nexport async function validateSonioxApiKey(\n apiKey: string,\n): Promise<{ok: true} | {ok: false; reason: \"invalid_key\" | \"network\"}> {\n try {\n const res = await fetch(SONIOX_MODELS_URL, {\n method: \"GET\",\n headers: {Authorization: `Bearer ${apiKey}`},\n })\n if (res.ok) return {ok: true}\n if (res.status === 401 || res.status === 403) return {ok: false, reason: \"invalid_key\"}\n return {ok: false, reason: \"network\"}\n } catch {\n return {ok: false, reason: \"network\"}\n }\n}\n"]}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SonioxTokenAssembler
|
|
3
|
+
*
|
|
4
|
+
* Pure port of the cloud Soniox provider's utterance assembly
|
|
5
|
+
* (cloud-v2/packages/runtime/src/services/audio/providers/soniox.ts). Soniox
|
|
6
|
+
* emits a rolling token window that is re-finalized/compacted across results;
|
|
7
|
+
* this class turns that stream into stable interim/final utterances:
|
|
8
|
+
*
|
|
9
|
+
* - finalized text accumulates into a stable prefix so interims never shrink
|
|
10
|
+
* - a single FINAL per utterance, committed at the endpoint boundary
|
|
11
|
+
* - the endpoint is a soft signal: the candidate final is held briefly
|
|
12
|
+
* (debounce) and merged back if the next rolling window overlaps
|
|
13
|
+
* - speaker/language are tracked per token but never split an utterance
|
|
14
|
+
* (Soniox re-diarizes its window; per-token labels flicker)
|
|
15
|
+
* - translation sessions split the window: translation-status tokens are the
|
|
16
|
+
* emitted text, original-status tokens ride along as `originalText`, and
|
|
17
|
+
* untagged tokens are Soniox's same-language passthrough
|
|
18
|
+
*
|
|
19
|
+
* Timers are injected for testability; production uses BgTimer so the debounce
|
|
20
|
+
* survives app backgrounding.
|
|
21
|
+
*/
|
|
22
|
+
import type { SonioxResult } from "./SonioxRealtimeClient";
|
|
23
|
+
export interface AssembledTranscript {
|
|
24
|
+
text: string;
|
|
25
|
+
isFinal: boolean;
|
|
26
|
+
utteranceId?: string;
|
|
27
|
+
speakerId?: string;
|
|
28
|
+
language?: string;
|
|
29
|
+
originalText?: string;
|
|
30
|
+
sourceLanguage?: string;
|
|
31
|
+
startMs?: number;
|
|
32
|
+
endMs?: number;
|
|
33
|
+
}
|
|
34
|
+
export interface SonioxTokenAssemblerOptions {
|
|
35
|
+
/** Stable id used in minted utterance ids (readable per subscription). */
|
|
36
|
+
scope: string;
|
|
37
|
+
/** True for translation sessions: split original/translation token halves. */
|
|
38
|
+
isTranslation: boolean;
|
|
39
|
+
/** Subscription language, used when a token carries no detected language. */
|
|
40
|
+
fallbackLanguage?: string;
|
|
41
|
+
onTranscript: (t: AssembledTranscript) => void;
|
|
42
|
+
endpointDebounceMs?: number;
|
|
43
|
+
/** Test seams; default to background-safe timers. */
|
|
44
|
+
setTimeoutFn?: (cb: () => void, ms: number) => number;
|
|
45
|
+
clearTimeoutFn?: (id: number) => void;
|
|
46
|
+
}
|
|
47
|
+
export declare class SonioxTokenAssembler {
|
|
48
|
+
private readonly opts;
|
|
49
|
+
private readonly endpointDebounceMs;
|
|
50
|
+
private readonly setTimeoutFn;
|
|
51
|
+
private readonly clearTimeoutFn;
|
|
52
|
+
private stablePrefix;
|
|
53
|
+
private prevFinalLen;
|
|
54
|
+
private lastSentInterim;
|
|
55
|
+
private originalStablePrefix;
|
|
56
|
+
private originalPrevFinalLen;
|
|
57
|
+
private lastOriginalText;
|
|
58
|
+
private currentSourceLanguage;
|
|
59
|
+
private currentUtteranceId;
|
|
60
|
+
private currentSpeakerId;
|
|
61
|
+
private currentLanguage;
|
|
62
|
+
private pendingFinalText;
|
|
63
|
+
private pendingFinalUtteranceId;
|
|
64
|
+
private pendingFinalSpeakerId;
|
|
65
|
+
private pendingFinalLanguage;
|
|
66
|
+
private pendingFinalOriginalText;
|
|
67
|
+
private pendingFinalSourceLanguage;
|
|
68
|
+
private pendingFinalStartMs;
|
|
69
|
+
private pendingFinalEndMs;
|
|
70
|
+
private pendingFinalTimer;
|
|
71
|
+
private utteranceSeq;
|
|
72
|
+
private readonly instanceId;
|
|
73
|
+
constructor(opts: SonioxTokenAssemblerOptions);
|
|
74
|
+
private mintUtteranceId;
|
|
75
|
+
private startNewUtterance;
|
|
76
|
+
private resetActiveUtterance;
|
|
77
|
+
private clearPendingFinal;
|
|
78
|
+
private tryMergeOverlap;
|
|
79
|
+
private isLikelyWindowRegression;
|
|
80
|
+
private emitFinalEvent;
|
|
81
|
+
private commitPendingFinal;
|
|
82
|
+
private schedulePendingFinalCommit;
|
|
83
|
+
private setPendingFinalFromActive;
|
|
84
|
+
/**
|
|
85
|
+
* Commit the current utterance as a single FINAL and reset. Called only at a
|
|
86
|
+
* real boundary: endpoint (via the debounce path), finalize ack, or close.
|
|
87
|
+
*/
|
|
88
|
+
private emitFinal;
|
|
89
|
+
handleResult(result: SonioxResult): void;
|
|
90
|
+
handleEndpoint(): void;
|
|
91
|
+
/** Finalize ack (`<fin>`): trusted "speech segment ended" signal. */
|
|
92
|
+
handleFinalized(): void;
|
|
93
|
+
/** Flush any in-flight utterance as a final (session close/teardown). */
|
|
94
|
+
flush(): void;
|
|
95
|
+
/** Drop all state without emitting (e.g. audio-gap resume). */
|
|
96
|
+
discard(): void;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=SonioxTokenAssembler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SonioxTokenAssembler.d.ts","sourceRoot":"","sources":["../../../src/services/soniox/SonioxTokenAssembler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,wBAAwB,CAAA;AAOxD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,2BAA2B;IAC1C,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAA;IACb,8EAA8E;IAC9E,aAAa,EAAE,OAAO,CAAA;IACtB,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,YAAY,EAAE,CAAC,CAAC,EAAE,mBAAmB,KAAK,IAAI,CAAA;IAC9C,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,qDAAqD;IACrD,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,CAAA;IACrD,cAAc,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CACtC;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6B;IAClD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwC;IACrE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsB;IAGrD,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,YAAY,CAAI;IACxB,OAAO,CAAC,eAAe,CAAK;IAG5B,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,oBAAoB,CAAI;IAChC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,qBAAqB,CAAgC;IAE7D,OAAO,CAAC,kBAAkB,CAAsB;IAChD,OAAO,CAAC,gBAAgB,CAAgC;IACxD,OAAO,CAAC,eAAe,CAAgC;IAGvD,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,uBAAuB,CAAsB;IACrD,OAAO,CAAC,qBAAqB,CAAgC;IAC7D,OAAO,CAAC,oBAAoB,CAAgC;IAC5D,OAAO,CAAC,wBAAwB,CAAK;IACrC,OAAO,CAAC,0BAA0B,CAAgC;IAClE,OAAO,CAAC,mBAAmB,CAAgC;IAC3D,OAAO,CAAC,iBAAiB,CAAgC;IACzD,OAAO,CAAC,iBAAiB,CAAsB;IAG/C,OAAO,CAAC,YAAY,CAAI;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA0C;gBAEzD,IAAI,EAAE,2BAA2B;IAO7C,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,wBAAwB;IAgBhC,OAAO,CAAC,cAAc;IAuBtB,OAAO,CAAC,kBAAkB;IA4B1B,OAAO,CAAC,0BAA0B;IAOlC,OAAO,CAAC,yBAAyB;IASjC;;;OAGG;IACH,OAAO,CAAC,SAAS;IAmBjB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAwIxC,cAAc,IAAI,IAAI;IA8BtB,qEAAqE;IACrE,eAAe,IAAI,IAAI;IAKvB,yEAAyE;IACzE,KAAK,IAAI,IAAI;IAKb,+DAA+D;IAC/D,OAAO,IAAI,IAAI;CAIhB"}
|