@mentra/engine 0.1.0-dev.0 → 3.1.0-dev.10
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 +55 -18
- package/build/bluetooth-sdk/debug.d.ts +2 -0
- package/build/bluetooth-sdk/debug.d.ts.map +1 -0
- package/build/bluetooth-sdk/debug.js +2 -0
- package/build/bluetooth-sdk/debug.js.map +1 -0
- package/build/bluetooth-sdk/index.d.ts +3 -0
- package/build/bluetooth-sdk/index.d.ts.map +1 -0
- package/build/bluetooth-sdk/index.js +3 -0
- package/build/bluetooth-sdk/index.js.map +1 -0
- package/build/bluetooth-sdk/photo-receiver.d.ts +3 -0
- package/build/bluetooth-sdk/photo-receiver.d.ts.map +1 -0
- package/build/bluetooth-sdk/photo-receiver.js +3 -0
- package/build/bluetooth-sdk/photo-receiver.js.map +1 -0
- package/build/bluetooth-sdk/react.d.ts +2 -0
- package/build/bluetooth-sdk/react.d.ts.map +1 -0
- package/build/bluetooth-sdk/react.js +2 -0
- package/build/bluetooth-sdk/react.js.map +1 -0
- package/build/bluetooth-sdk/types.d.ts +2 -0
- package/build/bluetooth-sdk/types.d.ts.map +1 -0
- package/build/bluetooth-sdk/types.js +2 -0
- package/build/bluetooth-sdk/types.js.map +1 -0
- package/build/engine.d.ts +24 -16
- package/build/engine.d.ts.map +1 -1
- package/build/engine.js +9 -4
- package/build/engine.js.map +1 -1
- package/build/facades/dev.d.ts +3 -2
- package/build/facades/dev.d.ts.map +1 -1
- package/build/facades/dev.js +18 -12
- package/build/facades/dev.js.map +1 -1
- package/build/facades/display.d.ts +1 -1
- package/build/facades/display.d.ts.map +1 -1
- package/build/facades/display.js +1 -1
- package/build/facades/display.js.map +1 -1
- package/build/facades/gallery.js +1 -1
- package/build/facades/gallery.js.map +1 -1
- package/build/facades/glasses.d.ts +4 -13
- package/build/facades/glasses.d.ts.map +1 -1
- package/build/facades/glasses.js +21 -6
- package/build/facades/glasses.js.map +1 -1
- package/build/facades/glassesSettings.d.ts.map +1 -1
- package/build/facades/glassesSettings.js +1 -0
- package/build/facades/glassesSettings.js.map +1 -1
- package/build/facades/miniapps.d.ts +4 -0
- package/build/facades/miniapps.d.ts.map +1 -1
- package/build/facades/miniapps.js +5 -0
- package/build/facades/miniapps.js.map +1 -1
- package/build/facades/ota.d.ts +14 -16
- package/build/facades/ota.d.ts.map +1 -1
- package/build/facades/ota.js +22 -7
- package/build/facades/ota.js.map +1 -1
- package/build/facades/pairing.d.ts +8 -5
- package/build/facades/pairing.d.ts.map +1 -1
- package/build/facades/pairing.js +12 -10
- package/build/facades/pairing.js.map +1 -1
- package/build/facades/permissions.d.ts +10 -0
- package/build/facades/permissions.d.ts.map +1 -1
- package/build/facades/permissions.js +10 -0
- package/build/facades/permissions.js.map +1 -1
- package/build/facades/phoneNotifications.d.ts +0 -4
- package/build/facades/phoneNotifications.d.ts.map +1 -1
- package/build/facades/phoneNotifications.js +4 -14
- package/build/facades/phoneNotifications.js.map +1 -1
- package/build/facades/speech.d.ts +7 -6
- package/build/facades/speech.d.ts.map +1 -1
- package/build/facades/speech.js +1 -1
- package/build/facades/speech.js.map +1 -1
- package/build/generated/releaseMetadata.d.ts +12 -0
- package/build/generated/releaseMetadata.d.ts.map +1 -0
- package/build/generated/releaseMetadata.js +10 -0
- package/build/generated/releaseMetadata.js.map +1 -0
- package/build/index.d.ts +10 -8
- package/build/index.d.ts.map +1 -1
- package/build/index.js +6 -5
- package/build/index.js.map +1 -1
- package/build/react/MentraLiveOtaFlow.d.ts +38 -0
- package/build/react/MentraLiveOtaFlow.d.ts.map +1 -0
- package/build/react/MentraLiveOtaFlow.js +528 -0
- package/build/react/MentraLiveOtaFlow.js.map +1 -0
- package/build/react/index.d.ts +2 -0
- package/build/react/index.d.ts.map +1 -0
- package/build/react/index.js +2 -0
- package/build/react/index.js.map +1 -0
- package/build/react/useEngineSnapshot.d.ts +2 -0
- package/build/react/useEngineSnapshot.d.ts.map +1 -0
- package/build/react/useEngineSnapshot.js +14 -0
- package/build/react/useEngineSnapshot.js.map +1 -0
- package/build/runtime/bootstrap.d.ts +24 -1
- package/build/runtime/bootstrap.d.ts.map +1 -1
- package/build/runtime/bootstrap.js +17 -0
- package/build/runtime/bootstrap.js.map +1 -1
- 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/services/AppRegistry.d.ts +41 -57
- package/build/services/AppRegistry.d.ts.map +1 -1
- package/build/services/AppRegistry.js +208 -144
- package/build/services/AppRegistry.js.map +1 -1
- package/build/services/AudioCloudUplink.d.ts +12 -0
- package/build/services/AudioCloudUplink.d.ts.map +1 -1
- package/build/services/AudioCloudUplink.js +22 -1
- package/build/services/AudioCloudUplink.js.map +1 -1
- package/build/services/AudioPlaybackService.d.ts +41 -2
- package/build/services/AudioPlaybackService.d.ts.map +1 -1
- package/build/services/AudioPlaybackService.js +250 -33
- package/build/services/AudioPlaybackService.js.map +1 -1
- package/build/services/BlobStore.d.ts +2 -1
- package/build/services/BlobStore.d.ts.map +1 -1
- package/build/services/BlobStore.js +17 -9
- package/build/services/BlobStore.js.map +1 -1
- package/build/services/CloudAudioSubscriptionSync.d.ts.map +1 -1
- package/build/services/CloudAudioSubscriptionSync.js +13 -1
- package/build/services/CloudAudioSubscriptionSync.js.map +1 -1
- package/build/services/CloudClientService.d.ts +15 -0
- package/build/services/CloudClientService.d.ts.map +1 -1
- package/build/services/CloudClientService.js +93 -1
- package/build/services/CloudClientService.js.map +1 -1
- package/build/services/DeviceEventRouter.js +5 -5
- package/build/services/DeviceEventRouter.js.map +1 -1
- 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/GlassesSettingsSync.d.ts.map +1 -1
- package/build/services/GlassesSettingsSync.js +9 -3
- package/build/services/GlassesSettingsSync.js.map +1 -1
- package/build/services/GlassesStatusProjection.d.ts +2 -1
- package/build/services/GlassesStatusProjection.d.ts.map +1 -1
- package/build/services/GlassesStatusProjection.js +15 -8
- package/build/services/GlassesStatusProjection.js.map +1 -1
- 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/LocalDisplayManager.d.ts +15 -0
- package/build/services/LocalDisplayManager.d.ts.map +1 -1
- package/build/services/LocalDisplayManager.js +106 -20
- package/build/services/LocalDisplayManager.js.map +1 -1
- package/build/services/LocalMiniappRuntime.d.ts +74 -2
- package/build/services/LocalMiniappRuntime.d.ts.map +1 -1
- package/build/services/LocalMiniappRuntime.js +785 -291
- package/build/services/LocalMiniappRuntime.js.map +1 -1
- 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 +20 -0
- package/build/services/LocalMiniappUserIdentity.d.ts.map +1 -0
- package/build/services/LocalMiniappUserIdentity.js +43 -0
- package/build/services/LocalMiniappUserIdentity.js.map +1 -0
- package/build/services/LocalSttFallbackCoordinator.d.ts +9 -6
- package/build/services/LocalSttFallbackCoordinator.d.ts.map +1 -1
- package/build/services/LocalSttFallbackCoordinator.js +18 -12
- package/build/services/LocalSttFallbackCoordinator.js.map +1 -1
- package/build/services/MicStateCoordinator.d.ts +42 -1
- package/build/services/MicStateCoordinator.d.ts.map +1 -1
- package/build/services/MicStateCoordinator.js +141 -3
- package/build/services/MicStateCoordinator.js.map +1 -1
- package/build/services/MiniappLauncher.d.ts.map +1 -1
- package/build/services/MiniappLauncher.js +23 -3
- package/build/services/MiniappLauncher.js.map +1 -1
- 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/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/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/OtaAutoChain.d.ts +34 -0
- package/build/services/OtaAutoChain.d.ts.map +1 -0
- package/build/services/OtaAutoChain.js +83 -0
- package/build/services/OtaAutoChain.js.map +1 -0
- package/build/services/OtaErrorMapping.d.ts +18 -0
- package/build/services/OtaErrorMapping.d.ts.map +1 -0
- package/build/services/OtaErrorMapping.js +63 -0
- package/build/services/OtaErrorMapping.js.map +1 -0
- package/build/services/OtaInstallCoordinator.d.ts +95 -15
- package/build/services/OtaInstallCoordinator.d.ts.map +1 -1
- package/build/services/OtaInstallCoordinator.js +577 -130
- package/build/services/OtaInstallCoordinator.js.map +1 -1
- package/build/services/OtaService.d.ts.map +1 -1
- package/build/services/OtaService.js +8 -1
- package/build/services/OtaService.js.map +1 -1
- package/build/services/OtaUpdateCheckService.d.ts +39 -4
- package/build/services/OtaUpdateCheckService.d.ts.map +1 -1
- package/build/services/OtaUpdateCheckService.js +138 -22
- package/build/services/OtaUpdateCheckService.js.map +1 -1
- 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/PhoneNotificationsSync.d.ts.map +1 -1
- package/build/services/PhoneNotificationsSync.js +12 -10
- package/build/services/PhoneNotificationsSync.js.map +1 -1
- package/build/services/PhonePhotoCoordinator.d.ts +26 -2
- package/build/services/PhonePhotoCoordinator.d.ts.map +1 -1
- package/build/services/PhonePhotoCoordinator.js +79 -9
- package/build/services/PhonePhotoCoordinator.js.map +1 -1
- package/build/services/PhoneStreamCoordinator.d.ts +8 -1
- package/build/services/PhoneStreamCoordinator.d.ts.map +1 -1
- package/build/services/PhoneStreamCoordinator.js +125 -13
- package/build/services/PhoneStreamCoordinator.js.map +1 -1
- package/build/services/PhoneVideoCoordinator.d.ts +2 -0
- package/build/services/PhoneVideoCoordinator.d.ts.map +1 -1
- package/build/services/PhoneVideoCoordinator.js +10 -0
- package/build/services/PhoneVideoCoordinator.js.map +1 -1
- package/build/services/SceneRenderer.d.ts.map +1 -1
- package/build/services/SceneRenderer.js +15 -0
- package/build/services/SceneRenderer.js.map +1 -1
- 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/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/TranscriptionRouting.d.ts +12 -0
- package/build/services/TranscriptionRouting.d.ts.map +1 -0
- package/build/services/TranscriptionRouting.js +24 -0
- package/build/services/TranscriptionRouting.js.map +1 -0
- package/build/services/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/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/asgCameraApi.d.ts +43 -0
- package/build/services/asg/asgCameraApi.d.ts.map +1 -1
- package/build/services/asg/asgCameraApi.js +509 -26
- package/build/services/asg/asgCameraApi.js.map +1 -1
- 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/galleryNotices.d.ts +1 -1
- package/build/services/asg/galleryNotices.d.ts.map +1 -1
- package/build/services/asg/galleryNotices.js.map +1 -1
- 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 +1 -0
- package/build/services/asg/gallerySettingsService.d.ts.map +1 -1
- package/build/services/asg/gallerySettingsService.js +2 -0
- package/build/services/asg/gallerySettingsService.js.map +1 -1
- package/build/services/asg/gallerySyncService.d.ts.map +1 -1
- package/build/services/asg/gallerySyncService.js +162 -56
- package/build/services/asg/gallerySyncService.js.map +1 -1
- 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 +18 -0
- package/build/services/asg/localStorageService.d.ts.map +1 -1
- package/build/services/asg/localStorageService.js +168 -19
- package/build/services/asg/localStorageService.js.map +1 -1
- package/build/services/asg/mediaProcessingQueue.d.ts +10 -0
- package/build/services/asg/mediaProcessingQueue.d.ts.map +1 -1
- package/build/services/asg/mediaProcessingQueue.js +193 -62
- package/build/services/asg/mediaProcessingQueue.js.map +1 -1
- 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/gallerySyncClock.js +1 -1
- package/build/services/gallerySyncClock.js.map +1 -1
- package/build/services/glassesClockSync.d.ts.map +1 -1
- package/build/services/glassesClockSync.js +6 -2
- package/build/services/glassesClockSync.js.map +1 -1
- package/build/services/manifestActions.d.ts +7 -0
- package/build/services/manifestActions.d.ts.map +1 -0
- package/build/services/manifestActions.js +25 -0
- package/build/services/manifestActions.js.map +1 -0
- package/build/services/otaDisplayState.d.ts +23 -12
- package/build/services/otaDisplayState.d.ts.map +1 -1
- package/build/services/otaDisplayState.js +36 -14
- package/build/services/otaDisplayState.js.map +1 -1
- package/build/services/otaInstallPolicy.d.ts +16 -4
- package/build/services/otaInstallPolicy.d.ts.map +1 -1
- package/build/services/otaInstallPolicy.js +24 -3
- package/build/services/otaInstallPolicy.js.map +1 -1
- package/build/services/otaLegacyMapping.d.ts +1 -1
- package/build/services/otaLegacyMapping.d.ts.map +1 -1
- package/build/services/otaLegacyMapping.js.map +1 -1
- package/build/services/otaManifestPolicy.d.ts +14 -0
- package/build/services/otaManifestPolicy.d.ts.map +1 -0
- package/build/services/otaManifestPolicy.js +19 -0
- package/build/services/otaManifestPolicy.js.map +1 -0
- package/build/services/otaManifestUrl.d.ts +3 -0
- package/build/services/otaManifestUrl.d.ts.map +1 -0
- package/build/services/otaManifestUrl.js +38 -0
- package/build/services/otaManifestUrl.js.map +1 -0
- package/build/services/slimStreamStatus.d.ts +11 -0
- package/build/services/slimStreamStatus.d.ts.map +1 -1
- package/build/services/slimStreamStatus.js +14 -4
- package/build/services/slimStreamStatus.js.map +1 -1
- package/build/stores/apps.d.ts.map +1 -1
- package/build/stores/apps.js +11 -0
- package/build/stores/apps.js.map +1 -1
- package/build/stores/bluetoothSettingKeys.d.ts.map +1 -1
- package/build/stores/bluetoothSettingKeys.js +2 -0
- package/build/stores/bluetoothSettingKeys.js.map +1 -1
- package/build/stores/gallerySync.d.ts +2 -0
- package/build/stores/gallerySync.d.ts.map +1 -1
- package/build/stores/gallerySync.js +2 -0
- package/build/stores/gallerySync.js.map +1 -1
- package/build/stores/glasses.d.ts.map +1 -1
- package/build/stores/glasses.js +3 -0
- package/build/stores/glasses.js.map +1 -1
- package/build/stores/settings.d.ts +17 -0
- package/build/stores/settings.d.ts.map +1 -1
- package/build/stores/settings.js +157 -17
- package/build/stores/settings.js.map +1 -1
- package/build/types/applet.d.ts +2 -0
- package/build/types/applet.d.ts.map +1 -1
- package/build/types/applet.js.map +1 -1
- package/build/types/asg.d.ts +7 -0
- package/build/types/asg.d.ts.map +1 -1
- package/build/types/asg.js.map +1 -1
- package/build/types/enums.d.ts +2 -25
- package/build/types/enums.d.ts.map +1 -1
- package/build/types/enums.js +2 -27
- package/build/types/enums.js.map +1 -1
- package/build/types/hardware.d.ts +4 -13
- package/build/types/hardware.d.ts.map +1 -1
- package/build/types/hardware.js +15 -3
- package/build/types/hardware.js.map +1 -1
- package/build/types/index.d.ts +2 -6
- package/build/types/index.d.ts.map +1 -1
- package/build/types/index.js +2 -6
- package/build/types/index.js.map +1 -1
- 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/devMiniappLaunch.d.ts +19 -8
- package/build/utils/devMiniappLaunch.d.ts.map +1 -1
- package/build/utils/devMiniappLaunch.js +144 -21
- package/build/utils/devMiniappLaunch.js.map +1 -1
- package/build/utils/diagnosticContext.d.ts.map +1 -1
- package/build/utils/diagnosticContext.js +15 -17
- package/build/utils/diagnosticContext.js.map +1 -1
- package/build/utils/hardware/hardware.d.ts.map +1 -1
- package/build/utils/hardware/hardware.js +7 -3
- package/build/utils/hardware/hardware.js.map +1 -1
- 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/permissions/MediaLibraryPermissions.d.ts +11 -0
- package/build/utils/permissions/MediaLibraryPermissions.d.ts.map +1 -1
- package/build/utils/permissions/MediaLibraryPermissions.js +27 -4
- package/build/utils/permissions/MediaLibraryPermissions.js.map +1 -1
- package/build/utils/timers/timers.d.ts.map +1 -1
- package/build/utils/timers/timers.js +55 -18
- package/build/utils/timers/timers.js.map +1 -1
- package/package.json +59 -31
- package/src/assets/silence.wav +0 -0
- package/src/bluetooth-sdk/debug.ts +1 -0
- package/src/bluetooth-sdk/index.ts +2 -0
- package/src/bluetooth-sdk/photo-receiver.ts +2 -0
- package/src/bluetooth-sdk/react.ts +1 -0
- package/src/bluetooth-sdk/types.ts +1 -0
- package/src/engine.ts +9 -4
- package/src/facades/dev.ts +17 -12
- package/src/facades/display.ts +1 -1
- package/src/facades/gallery.ts +1 -1
- package/src/facades/glasses.ts +20 -7
- package/src/facades/glassesSettings.ts +5 -0
- package/src/facades/miniapps.ts +7 -0
- package/src/facades/ota.ts +23 -8
- package/src/facades/pairing.ts +15 -11
- package/src/facades/permissions.ts +14 -0
- package/src/facades/phoneNotifications.ts +4 -13
- package/src/facades/speech.ts +21 -7
- package/src/generated/releaseMetadata.ts +20 -0
- package/src/index.ts +39 -13
- package/src/react/MentraLiveOtaFlow.tsx +856 -0
- package/src/react/index.ts +7 -0
- package/src/react/useEngineSnapshot.ts +16 -0
- package/src/runtime/bootstrap.ts +33 -1
- package/src/runtime/scanQrSeam.ts +20 -0
- package/src/services/AppRegistry.ts +240 -149
- package/src/services/AudioCloudUplink.ts +23 -1
- package/src/services/AudioPlaybackService.ts +287 -38
- package/src/services/BlobStore.ts +22 -9
- package/src/services/CloudAudioSubscriptionSync.ts +13 -1
- package/src/services/CloudClientService.ts +96 -1
- package/src/services/DeviceEventRouter.ts +5 -5
- package/src/services/ForegroundLocationPermission.ts +24 -0
- package/src/services/GlassesSettingsSync.ts +9 -3
- package/src/services/GlassesStatusProjection.ts +16 -8
- package/src/services/HotspotOtaTransport.ts +184 -0
- package/src/services/HotspotShutdown.ts +41 -0
- package/src/services/LocalDisplayManager.ts +112 -21
- package/src/services/LocalMiniappRuntime.ts +967 -346
- package/src/services/LocalMiniappStorage.ts +82 -0
- package/src/services/LocalMiniappUserIdentity.ts +46 -0
- package/src/services/LocalSttFallbackCoordinator.ts +19 -12
- package/src/services/MicStateCoordinator.ts +169 -4
- package/src/services/MiniappLauncher.ts +30 -3
- package/src/services/MiniappLiveness.ts +24 -0
- package/src/services/NativeHttpResponse.ts +6 -0
- package/src/services/OtaArtifactDownloader.ts +312 -0
- package/src/services/OtaAutoChain.ts +106 -0
- package/src/services/OtaErrorMapping.ts +80 -0
- package/src/services/OtaInstallCoordinator.ts +649 -144
- package/src/services/OtaService.ts +11 -5
- package/src/services/OtaUpdateCheckService.ts +181 -21
- package/src/services/PhoneCalendarHelpers.ts +212 -0
- package/src/services/PhoneCalendarService.ts +65 -0
- package/src/services/PhoneCameraFovCoordinator.ts +210 -0
- package/src/services/PhoneNotificationsSync.ts +12 -10
- package/src/services/PhonePhotoCoordinator.ts +116 -18
- package/src/services/PhoneStreamCoordinator.ts +139 -25
- package/src/services/PhoneVideoCoordinator.ts +11 -0
- package/src/services/SceneRenderer.ts +16 -0
- package/src/services/SentenceTtsPipeline.ts +106 -0
- package/src/services/SupportProfileSync.ts +218 -0
- package/src/services/TranscriptionRouting.ts +37 -0
- package/src/services/TtsTextSanitizer.ts +66 -0
- package/src/services/WifiAdbRequest.ts +53 -0
- package/src/services/asg/asgCameraApi.ts +615 -33
- package/src/services/asg/cameraRollExportCoordinator.ts +627 -0
- package/src/services/asg/cameraRollExportLedger.ts +122 -0
- package/src/services/asg/galleryNotices.ts +1 -0
- package/src/services/asg/galleryPathMigration.ts +22 -0
- package/src/services/asg/gallerySettingsService.ts +3 -0
- package/src/services/asg/gallerySyncService.ts +184 -73
- package/src/services/asg/galleryTransferLedger.ts +312 -0
- package/src/services/asg/localNetworkTransport.ts +169 -0
- package/src/services/asg/localStorageService.ts +179 -24
- package/src/services/asg/mediaProcessingQueue.ts +209 -62
- package/src/services/audioPlaybackAssets.ts +8 -0
- package/src/services/gallerySyncClock.ts +1 -1
- package/src/services/glassesClockSync.ts +6 -2
- package/src/services/manifestActions.ts +30 -0
- package/src/services/otaDisplayState.ts +58 -17
- package/src/services/otaInstallPolicy.ts +30 -4
- package/src/services/otaLegacyMapping.ts +1 -1
- package/src/services/otaManifestPolicy.ts +42 -0
- package/src/services/otaManifestUrl.ts +44 -0
- package/src/services/slimStreamStatus.ts +16 -5
- package/src/stores/apps.ts +12 -0
- package/src/stores/bluetoothSettingKeys.ts +2 -0
- package/src/stores/gallerySync.ts +4 -0
- package/src/stores/glasses.ts +3 -0
- package/src/stores/settings.ts +179 -18
- package/src/types/applet.ts +2 -0
- package/src/types/asg.ts +7 -0
- package/src/types/enums.ts +3 -28
- package/src/types/hardware.ts +20 -13
- package/src/types/index.ts +2 -6
- package/src/utils/configuredDevHost.ts +17 -0
- package/src/utils/devMiniappLaunch.ts +151 -23
- package/src/utils/diagnosticContext.ts +17 -17
- package/src/utils/hardware/hardware.ts +7 -9
- package/src/utils/miniappDiagnostics.ts +226 -0
- package/src/utils/permissions/MediaLibraryPermissions.ts +35 -4
- package/src/utils/timers/timers.ts +57 -21
- package/build/devtools.d.ts +0 -11
- package/build/devtools.d.ts.map +0 -1
- package/build/devtools.js +0 -13
- package/build/devtools.js.map +0 -1
- package/build/internal.d.ts +0 -66
- package/build/internal.d.ts.map +0 -1
- package/build/internal.js +0 -89
- package/build/internal.js.map +0 -1
- package/build/services/asgOtaVersionUrl.d.ts +0 -2
- package/build/services/asgOtaVersionUrl.d.ts.map +0 -1
- package/build/services/asgOtaVersionUrl.js +0 -36
- package/build/services/asgOtaVersionUrl.js.map +0 -1
- package/src/devtools.ts +0 -13
- package/src/internal.ts +0 -158
- package/src/services/asgOtaVersionUrl.ts +0 -41
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MentraLiveOtaFlow.js","sourceRoot":"","sources":["../../src/react/MentraLiveOtaFlow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAC,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAA;AAC9E,OAAO,EAAC,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAiC,MAAM,cAAc,CAAA;AACjH,OAAO,EAAC,YAAY,EAAC,MAAM,gCAAgC,CAAA;AAC3D,OAAO,GAAG,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAEhD,OAAO,EAAC,GAAG,EAAC,MAAM,gBAAgB,CAAA;AAClC,OAAO,EACL,iBAAiB,EACjB,8BAA8B,EAC9B,oBAAoB,EACpB,uBAAuB,EACvB,kCAAkC,EAClC,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,2BAA2B,EAC3B,kBAAkB,EAClB,uCAAuC,EACvC,yCAAyC,GAC1C,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAA;AA0CrD,MAAM,iCAAiC,GAAG,IAAI,CAAA;AAC9C,MAAM,4BAA4B,GAAG,GAAG,CAAA;AAExC,MAAM,aAAa,GAA2B;IAC5C,UAAU,EAAE,SAAS;IACrB,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,SAAS;IAChB,UAAU,EAAE,SAAS;IACrB,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,SAAS;IACtB,OAAO,EAAE,SAAS;CACnB,CAAA;AAED,MAAM,YAAY,GAA2B;IAC3C,iBAAiB,EAAE,UAAU;IAC7B,wBAAwB,EAAE,sBAAsB;IAChD,+BAA+B,EAC7B,wGAAwG;IAC1G,qBAAqB,EAAE,iCAAiC;IACxD,uBAAuB,EAAE,4DAA4D;IACrF,uBAAuB,EACrB,gGAAgG;IAClG,wBAAwB,EAAE,wCAAwC;IAClE,0BAA0B,EACxB,kLAAkL;IACpL,eAAe,EAAE,YAAY;IAC7B,eAAe,EAAE,YAAY;IAC7B,iBAAiB,EAAE,OAAO;IAC1B,cAAc,EAAE,YAAY;IAC5B,cAAc,EAAE,mBAAmB;IACnC,mBAAmB,EACjB,0JAA0J;IAC5J,wBAAwB,EAAE,8CAA8C;IACxE,iBAAiB,EAAE,cAAc;IACjC,wBAAwB,EAAE,yEAAyE;IACnG,2BAA2B,EAAE,yBAAyB;IACtD,kCAAkC,EAChC,kIAAkI;IACpI,uBAAuB,EAAE,kEAAkE;IAC3F,6BAA6B,EAAE,iCAAiC;IAChE,4BAA4B,EAAE,yBAAyB;IACvD,6BAA6B,EAAE,yEAAyE;IACxG,2BAA2B,EAAE,yBAAyB;IACtD,kCAAkC,EAChC,+GAA+G;IACjH,uCAAuC,EAAE,kBAAkB;IAC3D,8CAA8C,EAC5C,wGAAwG;CAC3G,CAAA;AAED,SAAS,gBAAgB,CAAC,GAAW,EAAE,OAAgC;IACrE,IAAI,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,CAAA;IACpC,KAAK,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QAChE,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,IAAI,IAAI,EAAE,WAAW,CAAC,CAAA;IACtD,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAChC,YAAY,GAAG,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,EACxD,UAAU,GAAG,aAAa,EAC1B,WAAW,GAAG,OAAO,EACrB,iBAAiB,GAAG,IAAI,EACxB,UAAU,EACV,0BAA0B,EAC1B,eAAe,EACf,KAAK,EACL,SAAS,GAAG,KAAK,EACjB,KAAK,EACL,SAAS,GAAG,gBAAgB,GACL;IACvB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAC,GAAG,aAAa,EAAE,GAAG,KAAK,EAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IACrE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAwB,WAAW,CAAC,CAAA;IACpE,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IACzD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,CAAC,iBAAiB,CAAC,CAAA;IAEpE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,eAAe,CAAC,IAAI,CAAC,CAAA;YACrB,OAAM;QACR,CAAC;QACD,IAAI,SAAS,GAAG,KAAK,CAAA;QACrB,eAAe,CAAC,KAAK,CAAC,CAAA;QACtB,KAAK,GAAG,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YACjC,IAAI,CAAC,SAAS;gBAAE,eAAe,CAAC,IAAI,CAAC,CAAA;QACvC,CAAC,CAAC,CAAA;QACF,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAA;QAClB,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAEvB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;QACjC,OAAO,CAAC,OAAO,CAAC,CAAA;QAChB,kBAAkB,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC,CAAA;IACpD,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,CACL,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAC,eAAe,EAAE,MAAM,CAAC,UAAU,EAAC,EAAE,KAAK,CAAC,CAAC,CAClF;MAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CACzB;QAAA,CAAC,IAAI,CAAC,AAAD,EACL;QAAA,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EACpC;MAAA,EAAE,IAAI,CACN;MAAA,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CACf,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC,CACnF;UAAA,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAC3D;QAAA,EAAE,QAAQ,CAAC,CACZ,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CACrB,CAAC,YAAY,CACX,YAAY,CAAC,CAAC,YAAY,CAAC,CAC3B,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,UAAU,CAAC,CAAC,UAAU,CAAC,CACvB,UAAU,CAAC,CAAC,eAAe,CAAC,CAC5B,UAAU,CAAC,CAAC,UAAU,CAAC,CACvB,eAAe,CAAC,CAAC,eAAe,CAAC,CACjC,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAC3C,SAAS,CAAC,CAAC,SAAS,CAAC,EACrB,CACH,CAAC,CAAC,CAAC,CACF,CAAC,eAAe,CACd,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,0BAA0B,CAAC,CAAC,0BAA0B,CAAC,CACvD,eAAe,CAAC,CAAC,eAAe,CAAC,CACjC,eAAe,CAAC,CAAC,SAAS,CAAC,CAC3B,SAAS,CAAC,CAAC,SAAS,CAAC,CACrB,SAAS,CAAC,CAAC,SAAS,CAAC,EACrB,CACH,CACH;IAAA,EAAE,YAAY,CAAC,CAChB,CAAA;AACH,CAAC;AAaD,SAAS,YAAY,CAAC,EACpB,YAAY,EACZ,MAAM,EACN,UAAU,EACV,UAAU,EACV,UAAU,EACV,eAAe,EACf,eAAe,EACf,SAAS,GACM;IACf,MAAM,WAAW,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC,CAAA;IACnE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAa,UAAU,CAAC,CAAA;IACpE,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC9D,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACjE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAgC,SAAS,CAAC,CAAA;IACpF,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAC/E,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IACzD,MAAM,yBAAyB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IAC3C,MAAM,iBAAiB,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAA;IACrD,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IACrC,MAAM,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IACvC,MAAM,sBAAsB,GAAG,MAAM,CAAyD,IAAI,CAAC,CAAA;IACnG,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;IACxC,MAAM,kBAAkB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAA;IAClD,aAAa,CAAC,OAAO,GAAG,UAAU,CAAA;IAClC,kBAAkB,CAAC,OAAO,GAAG,eAAe,CAAA;IAE5C,MAAM,oBAAoB,GAAG,WAAW,CAAC,aAAa,CAAA;IACtD,MAAM,sBAAsB,GAAG,WAAW,CAAC,eAAe,CAAA;IAC1D,MAAM,mBAAmB,GAAG,WAAW,CAAC,iBAAiB,KAAK,CAAC,CAAA;IAC/D,MAAM,gBAAgB,GAAG,sBAAsB,IAAI,CAAC,oBAAoB,IAAI,mBAAmB,CAAC,CAAA;IAChG,MAAM,QAAQ,GAAG,GAAG,UAAU,IAAI,eAAe,EAAE,CAAA;IAEnD,MAAM,kBAAkB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC1C,GAAG,CAAC,aAAa,EAAE,CAAA;QACnB,kBAAkB,CAAC,OAAO,EAAE,CAAA;IAC9B,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,mBAAmB,GAAG,IAAI,CAAA;QAChC,MAAM,4BAA4B,GAAG,MAAM,CAAA;QAC3C,IAAI,iBAAiB,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC3C,iBAAiB,CAAC,OAAO,GAAG,QAAQ,CAAA;YACpC,eAAe,CAAC,OAAO,GAAG,KAAK,CAAA;YAC/B,iBAAiB,CAAC,OAAO,GAAG,KAAK,CAAA;YACjC,aAAa,CAAC,UAAU,CAAC,CAAA;QAC3B,CAAC;QAED,MAAM,YAAY,GAAG,EAAE,yBAAyB,CAAC,OAAO,CAAA;QACxD,IAAI,SAAS,GAAG,KAAK,CAAA;QACrB,IAAI,gBAAgB,GAAyC,IAAI,CAAA;QAEjE,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;YAC9B,IAAI,iBAAiB,CAAC,OAAO;gBAAE,OAAM;YACrC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;gBAC3B,IAAI,oBAAoB,EAAE,EAAE,CAAC;oBAC3B,MAAM,WAAW,GAAG,kCAAkC,EAAE,CAAA;oBACxD,IAAI,WAAW,KAAK,IAAI;wBAAE,OAAM;oBAChC,gBAAgB,GAAG,UAAU,CAAC,GAAG,EAAE;wBACjC,IAAI,SAAS,IAAI,YAAY,KAAK,yBAAyB,CAAC,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,SAAS;4BAAE,OAAM;wBACvG,gBAAgB,EAAE,CAAA;wBAClB,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAA;wBAChC,aAAa,CAAC,OAAO,CAAC,CAAA;oBACxB,CAAC,EAAE,WAAW,CAAC,CAAA;oBACf,OAAM;gBACR,CAAC;gBACD,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;oBAC5B,gBAAgB,EAAE,CAAA;oBAClB,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAA;oBAChC,aAAa,CAAC,OAAO,CAAC,CAAA;oBACtB,OAAM;gBACR,CAAC;gBACD,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAA;gBAChC,aAAa,CAAC,OAAO,EAAE,CAAA;gBACvB,OAAM;YACR,CAAC;YAED,8BAA8B,EAAE,CAAA;YAChC,eAAe,CAAC,OAAO,GAAG,IAAI,CAAA;YAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAC5B,IAAI,CAAC;gBACH,IAAI,MAAM,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC;oBACrC,oBAAoB,EAAE,4BAA4B;oBAClD,mBAAmB,EAAE,IAAI;oBACzB,mBAAmB,EAAE,IAAI;oBACzB,kBAAkB,EAAE,IAAI;oBACxB,mBAAmB,EAAE,KAAK;iBAC3B,CAAC,CAAA;gBACF,IAAI,SAAS,IAAI,YAAY,KAAK,yBAAyB,CAAC,OAAO;oBAAE,OAAM;gBAC3E,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,kBAAkB,KAAK,SAAS,IAAI,oBAAoB,EAAE,EAAE,CAAC;oBACnG,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,iCAAiC,CAAC,CAAC,CAAA;oBACtF,IAAI,SAAS,IAAI,YAAY,KAAK,yBAAyB,CAAC,OAAO;wBAAE,OAAM;oBAC3E,MAAM,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC;wBACjC,oBAAoB,EAAE,4BAA4B;wBAClD,mBAAmB,EAAE,IAAI;wBACzB,mBAAmB,EAAE,IAAI;wBACzB,kBAAkB,EAAE,IAAI;wBACxB,mBAAmB,EAAE,KAAK;qBAC3B,CAAC,CAAA;gBACJ,CAAC;gBACD,IAAI,SAAS,IAAI,YAAY,KAAK,yBAAyB,CAAC,OAAO;oBAAE,OAAM;gBAC3E,sBAAsB,CAAC,OAAO,GAAG,MAAM,CAAA;gBACvC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;gBAChH,IAAI,SAAS,IAAI,YAAY,KAAK,yBAAyB,CAAC,OAAO;oBAAE,OAAM;gBAE3E,IAAI,MAAM,CAAC,aAAa,KAAK,cAAc,EAAE,CAAC;oBAC5C,gBAAgB,EAAE,CAAA;oBAClB,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAA;oBAChC,aAAa,CAAC,OAAO,CAAC,CAAA;oBACtB,OAAM;gBACR,CAAC;gBACD,IAAI,MAAM,CAAC,aAAa,KAAK,eAAe,EAAE,CAAC;oBAC7C,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAA;oBAChC,IAAI,oBAAoB,EAAE,EAAE,CAAC;wBAC3B,gBAAgB,EAAE,CAAA;wBAClB,aAAa,CAAC,OAAO,CAAC,CAAA;oBACxB,CAAC;yBAAM,CAAC;wBACN,aAAa,CAAC,OAAO,EAAE,CAAA;oBACzB,CAAC;oBACD,OAAM;gBACR,CAAC;gBACD,IAAI,MAAM,CAAC,aAAa,KAAK,WAAW,EAAE,CAAC;oBACzC,gBAAgB,EAAE,CAAA;oBAClB,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAA;oBAChC,GAAG,CAAC,oBAAoB,EAAE,CAAA;oBAC1B,aAAa,CAAC,WAAW,CAAC,CAAA;oBAC1B,OAAM;gBACR,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;oBAC9B,gBAAgB,EAAE,CAAA;oBAClB,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAA;oBAChC,YAAY,CAAC,MAAM,CAAC,kBAAkB,KAAK,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;oBAC7F,aAAa,CAAC,OAAO,CAAC,CAAA;oBACtB,OAAM;gBACR,CAAC;gBACD,IAAI,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBAChD,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;oBACtC,oBAAoB,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,KAAK,IAAI,CAAC,CAAA;oBAC5D,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAA;oBACnD,oBAAoB,CAAC,WAAW,CAAC,CAAA;oBACjC,IAAI,oBAAoB,EAAE,EAAE,CAAC;wBAC3B,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAA;wBAC/B,IAAI,CAAC,QAAQ,CAAC,eAAe;4BAAE,OAAM;wBACrC,IAAI,CAAC,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,iBAAiB,KAAK,CAAC,EAAE,CAAC;4BAChE,gBAAgB,EAAE,CAAA;wBACpB,CAAC;6BAAM,CAAC;4BACN,MAAM,SAAS,GAAG,sBAAsB,CAAC,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,KAAK,IAAI,CAAC,CAAA;4BAC7F,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;gCACtB,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAA;gCAChC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;gCAClC,kBAAkB,EAAE,CAAA;gCACpB,OAAM;4BACR,CAAC;wBACH,CAAC;oBACH,CAAC;oBACD,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAA;oBAChC,aAAa,CAAC,kBAAkB,CAAC,CAAA;oBACjC,OAAM;gBACR,CAAC;gBACD,gBAAgB,EAAE,CAAA;gBAClB,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAA;gBAChC,GAAG,CAAC,oBAAoB,EAAE,CAAA;gBAC1B,aAAa,CAAC,WAAW,CAAC,CAAA;YAC5B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAA;gBACzC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;gBAChH,IAAI,SAAS,IAAI,YAAY,KAAK,yBAAyB,CAAC,OAAO;oBAAE,OAAM;gBAC3E,gBAAgB,EAAE,CAAA;gBAClB,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAA;gBAChC,aAAa,CAAC,OAAO,CAAC,CAAA;YACxB,CAAC;QACH,CAAC,CAAA;QAED,KAAK,YAAY,EAAE,CAAA;QACnB,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAA;YAChB,IAAI,gBAAgB;gBAAE,YAAY,CAAC,gBAAgB,CAAC,CAAA;QACtD,CAAC,CAAA;IACH,CAAC,EAAE;QACD,QAAQ;QACR,WAAW,CAAC,SAAS;QACrB,WAAW,CAAC,eAAe;QAC3B,kBAAkB;KACnB,CAAC,CAAA;IAEF,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,aAAa,CAAC,UAAU,CAAC,CAAA;QACzB,kBAAkB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;IAC1C,CAAC,CAAA;IAED,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAA;QAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,aAAa,CAAC,OAAO,CAAC,CAAA;YACtB,OAAM;QACR,CAAC;QACD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAA;QAC/B,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;YAC9B,KAAK,EAAE,CAAA;YACP,OAAM;QACR,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,iBAAiB,KAAK,CAAC,EAAE,CAAC;YAChE,eAAe,EAAE,CAAA;YACjB,OAAM;QACR,CAAC;QACD,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAClC,IAAI,iBAAiB;YAAE,iBAAiB,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAA;QAC9E,kBAAkB,EAAE,CAAA;IACtB,CAAC,CAAA;IAED,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,CACL,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC,CACnF;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC,EAAE,QAAQ,CAChF;QAAA,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAC3D;MAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;IACH,CAAC;IAED,IAAI,UAAU,KAAK,kBAAkB,EAAE,CAAC;QACtC,OAAO,CACL,CAAC,QAAQ,CACP,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,IAAI,CAAC,UAAU,CACf,KAAK,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,qBAAqB,EAAE,EAAC,UAAU,EAAC,CAAC,CAAC,CACrG,OAAO,CAAC,CACN,EACE;YAAA,CAAC,UAAU,CACT,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAClC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,sBAAsB,IAAI,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAClG,OAAO,CAAC,CAAC,SAAS,CAAC,EAErB;YAAA,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CACnB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,SAAS,EAAG,CACnG,CAAC,CAAC,CAAC,IAAI,CACR;YAAA,CAAC,YAAY,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAClC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,SAAS,EAAG,CACtF,CAAC,CAAC,CAAC,IAAI,CACV;UAAA,GACF,CAAC,CACD;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CACvB;UAAA,CAAC,gBAAgB;gBACf,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,uBAAuB,CAAC;gBACrF,CAAC,CAAC,SAAS,CAAC,uBAAuB,EAAE,EAAC,UAAU,EAAC,CAAC,CACtD;QAAA,EAAE,QAAQ,CACZ;MAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;IACH,CAAC;IAED,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;QAC/B,OAAO,CACL,CAAC,QAAQ,CACP,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,EAAG,CAAC,CAClG,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,IAAI,CAAC,UAAU,CACf,KAAK,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CACjC;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,EAAE,QAAQ,CACtE;MAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;IACH,CAAC;IAED,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;QAC/B,OAAO,CACL,CAAC,QAAQ,CACP,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,EAAG,CAAC,CAClG,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,IAAI,CAAC,OAAO,CACZ,KAAK,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CACjC;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC,EAAE,QAAQ,CAC3E;MAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;IACH,CAAC;IAED,IAAI,SAAS,KAAK,iBAAiB,EAAE,CAAC;QACpC,OAAO,CACL,CAAC,QAAQ,CACP,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,EAAG,CAAC,CAClG,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,IAAI,CAAC,OAAO,CACZ,KAAK,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC,CAC9C;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC,EAAE,QAAQ,CACrF;MAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;IACH,CAAC;IAED,OAAO,CACL,CAAC,QAAQ,CACP,OAAO,CAAC,CACN,EACE;UAAA,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,EACzD;UAAA,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,SAAS,EAAG,CAAC,CAAC,CAAC,IAAI,CAC9G;QAAA,GACF,CAAC,CACD,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,IAAI,CAAC,OAAO,CACZ,KAAK,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CACpC;MAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC,EAAE,QAAQ,CAC3E;IAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;AACH,CAAC;AAWD,SAAS,eAAe,CAAC,EACvB,MAAM,EACN,0BAA0B,EAC1B,eAAe,EACf,eAAe,EACf,SAAS,EACT,SAAS,GACS;IAClB,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,CAAA;IAC7F,MAAM,oBAAoB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC1C,MAAM,EACJ,SAAS,EACT,sBAAsB,EACtB,YAAY,EACZ,QAAQ,EACR,sBAAsB,EACtB,YAAY,EACZ,eAAe,EACf,+BAA+B,EAC/B,WAAW,EACX,SAAS,EACT,sBAAsB,EACtB,kBAAkB,GACnB,GAAG,OAAO,CAAA;IACX,MAAM,kBAAkB,GAAG,CAAC,CAAC,SAAS,IAAI,YAAY,KAAK,YAAY,CAAC,IAAI,kBAAkB,KAAK,YAAY,CAAA;IAE/G,SAAS,CAAC,GAAG,EAAE;QACb,0BAA0B,EAAE,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAA;IACxD,CAAC,EAAE,CAAC,kBAAkB,EAAE,0BAA0B,CAAC,CAAC,CAAA;IAEpD,SAAS,CACP,GAAG,EAAE,CAAC,GAAG,EAAE;QACT,0BAA0B,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAC5C,CAAC,EACD,CAAC,0BAA0B,CAAC,CAC7B,CAAA;IAED,SAAS,CAAC,GAAG,EAAE;QACb,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,CAAA;QAC3B,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,CAAA;IAC1C,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY,KAAK,UAAU,IAAI,CAAC,SAAS,IAAI,CAAC,oBAAoB,EAAE,IAAI,oBAAoB,CAAC,OAAO;YAAE,OAAM;QAChH,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,IAAI,CAAC,oBAAoB,EAAE;gBAAE,OAAM;YACnC,oBAAoB,CAAC,OAAO,GAAG,IAAI,CAAA;YACnC,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,CAAA;YAC3B,eAAe,EAAE,CAAA;QACnB,CAAC,EAAE,4BAA4B,CAAC,CAAA;QAChC,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IACpC,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC,CAAA;IAE9C,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,CAAA;QAC3B,eAAe,EAAE,CAAA;IACnB,CAAC,CAAA;IACD,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,gBAAgB,EAAE,CAAA;QAClB,cAAc,EAAE,CAAA;IAClB,CAAC,CAAA;IACD,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,0BAA0B,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QACzC,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;IAC5B,CAAC,CAAA;IAED,IAAI,kBAAkB,KAAK,YAAY,IAAI,kBAAkB,KAAK,WAAW,EAAE,CAAC;QAC9E,OAAO,CACL,CAAC,QAAQ,CACP,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,IAAI,CAAC,UAAU,CACf,KAAK,CAAC,CAAC,SAAS,CACd,kBAAkB,KAAK,WAAW,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,6BAA6B,CAClG,CAAC,CACF;QAAA,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EACzD;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC,EAAE,QAAQ,CAC9E;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC,EAAE,QAAQ,CAC1E;MAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;IACH,CAAC;IAED,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;QAChC,MAAM,YAAY,GAChB,YAAY,KAAK,aAAa;YAC5B,CAAC,CAAC,gCAAgC;YAClC,CAAC,CAAC,YAAY,KAAK,kBAAkB;gBACrC,CAAC,CAAC,6BAA6B;gBAC/B,CAAC,CAAC,YAAY,KAAK,iBAAiB;oBACpC,CAAC,CAAC,gCAAgC;oBAClC,CAAC,CAAC,oBAAoB,CAAA;QAC1B,OAAO,CACL,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAC5D;QAAA,CAAC,YAAY,KAAK,aAAa,IAAI,sBAAsB,KAAK,IAAI,CAAC,CAAC,CAAC,CACnE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,sBAAsB,CAAC,EAAG,CACjE,CAAC,CAAC,CAAC,IAAI,CACR;QAAA,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EACzD;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,8BAA8B,EAAE,QAAQ,CACpE;MAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;IACH,CAAC;IAED,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,SAAS,EAAE,KAAK,KAAK,UAAU,CAAA;QAClD,MAAM,UAAU,GAAG,SAAS,EAAE,UAAU,IAAI,CAAC,CAAA;QAC7C,MAAM,mBAAmB,GAAG,SAAS,EAAE,QAAQ,KAAK,KAAK,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS,IAAI,UAAU,KAAK,CAAC,CAAA;QAC9G,MAAM,UAAU,GAAG,UAAU;YAC3B,CAAC,CAAC,SAAS,EAAE,WAAW,IAAI,CAAC;YAC7B,CAAC,CAAC,UAAU,IAAI,CAAC;gBACjB,CAAC,CAAC,SAAS,EAAE,cAAc,IAAI,CAAC;gBAChC,CAAC,CAAC,SAAS,EAAE,WAAW,IAAI,CAAC,CAAA;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,+BAA+B,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAC5F,OAAO,CACL,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAC,CAC/F;QAAA,CAAC,mBAAmB,CAAC,CAAC,CAAC,CACrB,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAG,CAC7D,CAAC,CAAC,CAAC,CACF,EACE;YAAA,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAC9C;YAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,EAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAC,CAAC,CAAC,CACpE;cAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,EAAC,eAAe,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,OAAO,GAAG,EAAC,CAAC,CAAC,EAC9F;YAAA,EAAE,IAAI,CACR;UAAA,GAAG,CACJ,CACD;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,8BAA8B,EAAE,QAAQ,CAClE;QAAA,CAAC,eAAe,IAAI,SAAS,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CACnD,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAC1E,CAAC,CAAC,CAAC,IAAI,CACV;MAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;IACH,CAAC;IAED,IAAI,YAAY,KAAK,YAAY,EAAE,CAAC;QAClC,OAAO,CACL,CAAC,QAAQ,CACP,OAAO,CAAC,CACN,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,sBAAsB,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,EACvG,CAAC,CACD,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,IAAI,CAAC,OAAO,CACZ,KAAK,CAAC,kBAAkB,EACxB,CACH,CAAA;IACH,CAAC;IAED,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,sBAAsB;YAClC,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC;YACxC,CAAC,CAAC,eAAe;gBACjB,CAAC,CAAC,SAAS,CAAC,uCAAuC,CAAC;gBACpD,CAAC,CAAC,kBAAkB,CAAA;QACtB,MAAM,OAAO,GAAG,sBAAsB;YACpC,CAAC,CAAC,SAAS,CAAC,kCAAkC,CAAC;YAC/C,CAAC,CAAC,eAAe;gBACjB,CAAC,CAAC,SAAS,CAAC,8CAA8C,CAAC;gBAC3D,CAAC,CAAC,8BAA8B,CAAA;QAClC,OAAO,CACL,CAAC,QAAQ,CACP,OAAO,CAAC,CACN,CAAC,UAAU,CACT,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,KAAK,CAAC,CAAC,eAAe,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CACxE,OAAO,CAAC,CAAC,cAAc,CAAC,EAE5B,CAAC,CACD,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,IAAI,CAAC,OAAO,CACZ,KAAK,CAAC,CAAC,KAAK,CAAC,CACb;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,CAC/C;MAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;IACH,CAAC;IAED,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,qBAAqB,GAAG,uCAAuC,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;QACvG,MAAM,cAAc,GAAG,qBAAqB;YAC1C,CAAC,CAAC,2BAA2B;YAC7B,CAAC,CAAC,QAAQ,IAAI,kBAAkB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QACpD,MAAM,cAAc,GAAG,yCAAyC,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;QAClG,OAAO,CACL,CAAC,QAAQ,CACP,OAAO,CAAC,CACN,EACE;YAAA,CAAC,UAAU,CACT,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,KAAK,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAChD,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,EAE/D;YAAA,CAAC,cAAc,CAAC,CAAC,CAAC,CAChB,CAAC,UAAU,CACT,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,KAAK,CAAC,aAAa,CACnB,OAAO,CAAC,CAAC,GAAG,EAAE;wBACZ,gBAAgB,EAAE,CAAA;wBAClB,eAAe,EAAE,CAAA;oBACnB,CAAC,CAAC,CACF,SAAS,EACT,CACH,CAAC,CAAC,CAAC,IAAI,CACV;UAAA,GACF,CAAC,CACD,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,IAAI,CAAC,OAAO,CACZ,KAAK,CAAC,eAAe,CACrB;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,QAAQ,CACtD;MAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;IACH,CAAC;IAED,OAAO,CACL,CAAC,QAAQ,CACP,OAAO,CAAC,CACN,SAAS,CAAC,CAAC,CAAC,CACV,CAAC,UAAU,CACT,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,KAAK,CAAC,cAAc,CACpB,OAAO,CAAC,CAAC,GAAG,EAAE;gBACZ,gBAAgB,EAAE,CAAA;gBAClB,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,CAAA;gBAC5B,eAAe,EAAE,CAAA;YACnB,CAAC,CAAC,CACF,SAAS,EACT,CACH,CAAC,CAAC,CAAC,SACN,CAAC,CACD,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,IAAI,CAAC,WAAW,CAChB,KAAK,CAAC,sBAAsB,CAC5B;MAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,QAAQ,CACnD;MAAA,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAC3D;IAAA,EAAE,QAAQ,CAAC,CACZ,CAAA;AACH,CAAC;AAUD,SAAS,QAAQ,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAgB;IACvE,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,sBAAsB,CACrD;MAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAChC;QAAA,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EACrC;QAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,EAAC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CACtE;QAAA,CAAC,QAAQ,CACX;MAAA,EAAE,IAAI,CACN;MAAA,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,EAAG,CACjG;IAAA,EAAE,IAAI,CAAC,CACR,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,EAAC,QAAQ,EAAE,MAAM,EAA8D;IAC/F,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAA;AAC/E,CAAC;AAED,SAAS,WAAW,CAAC,EAAC,MAAM,EAAE,OAAO,EAAoD;IACvF,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,EAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;AAC9F,CAAC;AAED,SAAS,UAAU,CAAC,EAClB,MAAM,EACN,QAAQ,GAAG,KAAK,EAChB,KAAK,EACL,OAAO,EACP,SAAS,GAAG,KAAK,GAOlB;IACC,OAAO,CACL,CAAC,SAAS,CACR,iBAAiB,CAAC,QAAQ,CAC1B,QAAQ,CAAC,CAAC,QAAQ,CAAC,CACnB,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,KAAK,CAAC,CAAC,CAAC,EAAC,OAAO,EAAC,EAAE,EAAE,CAAC;YACpB,MAAM,CAAC,MAAM;YACb;gBACE,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO;gBAC/D,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO;gBACvD,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAC9C;SACF,CAAC,CACF,MAAM,CAAC,CAAC,UAAU,KAAK,EAAE,CAAC,CAC1B;MAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,EAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAC9G;IAAA,EAAE,SAAS,CAAC,CACb,CAAA;AACH,CAAC;AAED,SAAS,UAAU,CAAC,EAAC,KAAK,EAAkB;IAC1C,OAAO,CACL,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CACzD;MAAA,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAC/D;MAAA,CAAC,IAAI,CAAC,CAAC,CAAC,uDAAuD,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAC5E;MAAA,CAAC,IAAI,CAAC,CAAC,CAAC,kDAAkD,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EACzE;IAAA,EAAE,GAAG,CAAC,CACP,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,EAAC,MAAM,EAAE,IAAI,EAAgE;IAC7F,MAAM,KAAK,GAAG,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAA;IACtF,MAAM,KAAK,GACT,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;IAChH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAC,KAAK,EAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,QAAQ,EAAE,EAAC,IAAI,EAAE,CAAC,EAAC;IACnB,MAAM,EAAE;QACN,UAAU,EAAE,QAAQ;QACpB,aAAa,EAAE,KAAK;QACpB,MAAM,EAAE,EAAE;QACV,cAAc,EAAE,eAAe;QAC/B,iBAAiB,EAAE,EAAE;KACtB;IACD,IAAI,EAAE,EAAC,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAC;IACzD,aAAa,EAAE,EAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAC;IACjF,YAAY,EAAE,EAAC,MAAM,EAAE,EAAE,EAAC;IAC1B,OAAO,EAAE,EAAC,GAAG,EAAE,EAAE,EAAC;IAClB,IAAI,EAAE,EAAC,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAC;IAC5E,KAAK,EAAE,EAAC,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAC;IAC7D,IAAI,EAAE,EAAC,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAC;IACxE,OAAO,EAAE,EAAC,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,KAAK,EAAC;IACzE,aAAa,EAAE,EAAC,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAC;IAC7F,YAAY,EAAE,EAAC,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAC;IAC1C,MAAM,EAAE;QACN,UAAU,EAAE,QAAQ;QACpB,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,CAAC;QACd,cAAc,EAAE,QAAQ;QACxB,SAAS,EAAE,EAAE;QACb,iBAAiB,EAAE,EAAE;KACtB;IACD,UAAU,EAAE,EAAC,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAC;CAC9C,CAAC,CAAA","sourcesContent":["import React, {useCallback, useEffect, useMemo, useRef, useState} from \"react\"\nimport {ActivityIndicator, Pressable, StyleSheet, Text, View, type StyleProp, type ViewStyle} from \"react-native\"\nimport {SafeAreaView} from \"react-native-safe-area-context\"\nimport Svg, {Path, Rect} from \"react-native-svg\"\n\nimport {ota} from \"../facades/ota\"\nimport {\n beginOtaAutoChain,\n clearOtaAutoChainReconnectWait,\n isOtaAutoChainActive,\n otaAutoChainFingerprint,\n otaAutoChainReconnectWaitRemaining,\n stopOtaAutoChain,\n tryAdvanceOtaAutoChain,\n} from \"../services/OtaAutoChain\"\nimport {\n BES_INSTALL_RESTART_MESSAGE,\n getOtaErrorMessage,\n shouldRequireGlassesRebootForBesFailure,\n shouldShowChangeWifiForOtaDownloadFailure,\n} from \"../services/OtaErrorMapping\"\nimport {useEngineSnapshot} from \"./useEngineSnapshot\"\n\nexport type MentraLiveOtaFlowPage = \"check\" | \"progress\"\n\nexport type MentraLiveOtaFlowTheme = {\n background: string\n border: string\n error: string\n foreground: string\n primary: string\n primaryText: string\n textDim: string\n}\n\nexport type MentraLiveOtaFlowTranslate = (key: string, options?: Record<string, string>) => string\n\nexport type MentraLiveOtaFlowProps = {\n /** Display name used in update copy. */\n deviceName?: string\n /** Entry page. `progress` exists for recovery/deep-link compatibility. */\n initialPage?: MentraLiveOtaFlowPage\n /** Start the OTA-only projections. Full engine hosts should pass false. */\n initializeRuntime?: boolean\n /** Called after the final check or when the user leaves an optional update. */\n onFinished: () => void\n /** Host-owned Wi-Fi setup for glasses that do not support hotspot OTA. */\n onOpenWifiSetup: () => void\n /** Lets a host coordinate its global connection overlay with OTA progress and firmware restarts. */\n onFirmwareRestartingChange?: (restarting: boolean, progressActive: boolean) => void\n /** Enables the existing developer-only escape hatches. */\n allowDevSkip?: boolean\n /** Enables the existing super-mode interrupted-session escape hatch. */\n superMode?: boolean\n /** Optional host localization. Defaults to the Mentra App English OTA copy. */\n translate?: MentraLiveOtaFlowTranslate\n /** Optional host theme. Both hosts use the same layout and state machine. */\n theme?: Partial<MentraLiveOtaFlowTheme>\n style?: StyleProp<ViewStyle>\n}\n\ntype CheckState = \"checking\" | \"update_available\" | \"no_update\" | \"dev_build\" | \"error\"\n\nconst AUTO_CHAIN_NETWORK_RETRY_DELAY_MS = 5000\nconst AUTO_CHAIN_COMPLETE_DELAY_MS = 750\n\nconst DEFAULT_THEME: MentraLiveOtaFlowTheme = {\n background: \"#FFFFFF\",\n border: \"#D7DFDA\",\n error: \"#C43131\",\n foreground: \"#0E2C1A\",\n primary: \"#00B869\",\n primaryText: \"#FFFFFF\",\n textDim: \"#66736B\",\n}\n\nconst ENGLISH_COPY: Record<string, string> = {\n \"common:continue\": \"Continue\",\n \"ota:checkingForUpdates\": \"Checking for updates\",\n \"ota:checkingForUpdatesMessage\":\n \"Connected devices will perform automatic updates. Automatic updates can be disabled in Device Settings\",\n \"ota:updateAvailable\": \"{{deviceName}} Update Available\",\n \"ota:updateConnectWifi\": \"Connect your {{deviceName}} to WiFi to install the update.\",\n \"ota:updateDescription\":\n \"A new update is available for your glasses. We recommend updating now for the best experience.\",\n \"ota:downgradeAvailable\": \"{{deviceName}} Version Change Required\",\n \"ota:downgradeDescription\":\n \"This app requires an earlier glasses software version. Your photos and videos will be preserved, but glasses settings will be reset and restored automatically after the change.\",\n \"ota:updateNow\": \"Update Now\",\n \"ota:setupWifi\": \"Setup WiFi\",\n \"ota:updateLater\": \"Later\",\n \"ota:upToDate\": \"Up To Date\",\n \"ota:devBuild\": \"Development Build\",\n \"ota:devBuildNoOta\":\n \"This mobile app is a development build, so automatic glasses updates are disabled. Use the developer settings manifest override to update them manually.\",\n \"ota:noUpdatesAvailable\": \"Your glasses are running the latest version.\",\n \"ota:checkFailed\": \"Check Failed\",\n \"ota:checkFailedMessage\": \"Couldn't check for updates. Please check your connection and try again.\",\n \"ota:updateInfoUnavailable\": \"Update Info Unavailable\",\n \"ota:updateInfoUnavailableMessage\":\n \"Update information for this version of the app is unavailable. Please check the app store for a newer version of the Mentra App.\",\n \"ota:downgradeDuration\": \"Your glasses will restart twice — this may take up to 2 minutes.\",\n \"ota:versionChangeRestarting\": \"Installing a different version…\",\n \"ota:versionChangeVerifying\": \"Verifying your glasses…\",\n \"ota:versionChangeKeepNearby\": \"Keep your glasses nearby and connected. They will restart on their own.\",\n \"ota:versionChangeComplete\": \"Version Change Complete\",\n \"ota:versionChangeCompleteMessage\":\n \"Your glasses are now on the required version. Their settings were reset and are being restored automatically.\",\n \"ota:versionChangeFirmwarePassComplete\": \"Firmware updated\",\n \"ota:versionChangeFirmwarePassCompleteMessage\":\n \"Your glasses restarted with new firmware. One more step: they'll now continue to the required version.\",\n}\n\nfunction defaultTranslate(key: string, options?: Record<string, string>): string {\n let value = ENGLISH_COPY[key] ?? key\n for (const [name, replacement] of Object.entries(options ?? {})) {\n value = value.replaceAll(`{{${name}}}`, replacement)\n }\n return value\n}\n\nexport function MentraLiveOtaFlow({\n allowDevSkip = typeof __DEV__ !== \"undefined\" && __DEV__,\n deviceName = \"Mentra Live\",\n initialPage = \"check\",\n initializeRuntime = true,\n onFinished,\n onFirmwareRestartingChange,\n onOpenWifiSetup,\n style,\n superMode = false,\n theme,\n translate = defaultTranslate,\n}: MentraLiveOtaFlowProps) {\n const colors = useMemo(() => ({...DEFAULT_THEME, ...theme}), [theme])\n const [page, setPage] = useState<MentraLiveOtaFlowPage>(initialPage)\n const [checkGeneration, setCheckGeneration] = useState(0)\n const [runtimeReady, setRuntimeReady] = useState(!initializeRuntime)\n\n useEffect(() => {\n if (!initializeRuntime) {\n setRuntimeReady(true)\n return\n }\n let cancelled = false\n setRuntimeReady(false)\n void ota.initialize().finally(() => {\n if (!cancelled) setRuntimeReady(true)\n })\n return () => {\n cancelled = true\n }\n }, [initializeRuntime])\n\n const showCheck = useCallback(() => {\n setPage(\"check\")\n setCheckGeneration((generation) => generation + 1)\n }, [])\n\n return (\n <SafeAreaView style={[styles.safeArea, {backgroundColor: colors.background}, style]}>\n <View style={styles.header}>\n <View />\n <MentraMark color={colors.primary} />\n </View>\n {!runtimeReady ? (\n <FlowPage colors={colors} icon=\"download\" title={translate(\"ota:checkingForUpdates\")}>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n </FlowPage>\n ) : page === \"check\" ? (\n <OtaCheckPage\n allowDevSkip={allowDevSkip}\n colors={colors}\n deviceName={deviceName}\n generation={checkGeneration}\n onFinished={onFinished}\n onOpenWifiSetup={onOpenWifiSetup}\n onStartProgress={() => setPage(\"progress\")}\n translate={translate}\n />\n ) : (\n <OtaProgressPage\n colors={colors}\n onFirmwareRestartingChange={onFirmwareRestartingChange}\n onOpenWifiSetup={onOpenWifiSetup}\n onReturnToCheck={showCheck}\n superMode={superMode}\n translate={translate}\n />\n )}\n </SafeAreaView>\n )\n}\n\ntype CheckPageProps = {\n allowDevSkip: boolean\n colors: MentraLiveOtaFlowTheme\n deviceName: string\n generation: number\n onFinished: () => void\n onOpenWifiSetup: () => void\n onStartProgress: () => void\n translate: MentraLiveOtaFlowTranslate\n}\n\nfunction OtaCheckPage({\n allowDevSkip,\n colors,\n deviceName,\n generation,\n onFinished,\n onOpenWifiSetup,\n onStartProgress,\n translate,\n}: CheckPageProps) {\n const otaSnapshot = useEngineSnapshot(ota.snapshot, ota.onSnapshot)\n const [checkState, setCheckState] = useState<CheckState>(\"checking\")\n const [isUpdateRequired, setIsUpdateRequired] = useState(true)\n const [isDowngradeUpdate, setIsDowngradeUpdate] = useState(false)\n const [errorKind, setErrorKind] = useState<\"network\" | \"pin_unavailable\">(\"network\")\n const [updateFingerprint, setUpdateFingerprint] = useState<string | null>(null)\n const [retryGeneration, setRetryGeneration] = useState(0)\n const performCheckGenerationRef = useRef(0)\n const activeCheckKeyRef = useRef<string | null>(null)\n const checkStartedRef = useRef(false)\n const checkCompletedRef = useRef(false)\n const selectedCheckResultRef = useRef<Awaited<ReturnType<typeof ota.checkForUpdates>> | null>(null)\n const onFinishedRef = useRef(onFinished)\n const onStartProgressRef = useRef(onStartProgress)\n onFinishedRef.current = onFinished\n onStartProgressRef.current = onStartProgress\n\n const glassesWifiConnected = otaSnapshot.wifiConnected\n const glassesWifiStatusKnown = otaSnapshot.wifiStatusKnown\n const hotspotOtaSupported = otaSnapshot.hotspotOtaVersion === 1\n const canInstallUpdate = glassesWifiStatusKnown && (glassesWifiConnected || hotspotOtaSupported)\n const checkKey = `${generation}:${retryGeneration}`\n\n const navigateToProgress = useCallback(() => {\n ota.clearProgress()\n onStartProgressRef.current()\n }, [])\n\n useEffect(() => {\n const MIN_DISPLAY_TIME_MS = 1100\n const MAX_WAIT_FOR_VERSION_INFO_MS = 10_000\n if (activeCheckKeyRef.current !== checkKey) {\n activeCheckKeyRef.current = checkKey\n checkStartedRef.current = false\n checkCompletedRef.current = false\n setCheckState(\"checking\")\n }\n\n const myGeneration = ++performCheckGenerationRef.current\n let cancelled = false\n let reconnectTimeout: ReturnType<typeof setTimeout> | null = null\n\n const performCheck = async () => {\n if (checkCompletedRef.current) return\n if (!otaSnapshot.connected) {\n if (isOtaAutoChainActive()) {\n const remainingMs = otaAutoChainReconnectWaitRemaining()\n if (remainingMs === null) return\n reconnectTimeout = setTimeout(() => {\n if (cancelled || myGeneration !== performCheckGenerationRef.current || ota.snapshot().connected) return\n stopOtaAutoChain()\n checkCompletedRef.current = true\n setCheckState(\"error\")\n }, remainingMs)\n return\n }\n if (checkStartedRef.current) {\n stopOtaAutoChain()\n checkCompletedRef.current = true\n setCheckState(\"error\")\n return\n }\n checkCompletedRef.current = true\n onFinishedRef.current()\n return\n }\n\n clearOtaAutoChainReconnectWait()\n checkStartedRef.current = true\n const startTime = Date.now()\n try {\n let result = await ota.checkForUpdates({\n waitForBuildNumberMs: MAX_WAIT_FOR_VERSION_INFO_MS,\n waitForBesVersionMs: 5000,\n waitForMtkVersionMs: 2000,\n refreshVersionInfo: true,\n fixClockBeforeCheck: false,\n })\n if (cancelled || myGeneration !== performCheckGenerationRef.current) return\n if (!result.hasCheckCompleted && result.checkFailureReason === \"network\" && isOtaAutoChainActive()) {\n await new Promise((resolve) => setTimeout(resolve, AUTO_CHAIN_NETWORK_RETRY_DELAY_MS))\n if (cancelled || myGeneration !== performCheckGenerationRef.current) return\n result = await ota.checkForUpdates({\n waitForBuildNumberMs: MAX_WAIT_FOR_VERSION_INFO_MS,\n waitForBesVersionMs: 5000,\n waitForMtkVersionMs: 2000,\n refreshVersionInfo: true,\n fixClockBeforeCheck: false,\n })\n }\n if (cancelled || myGeneration !== performCheckGenerationRef.current) return\n selectedCheckResultRef.current = result\n await new Promise((resolve) => setTimeout(resolve, Math.max(0, MIN_DISPLAY_TIME_MS - (Date.now() - startTime))))\n if (cancelled || myGeneration !== performCheckGenerationRef.current) return\n\n if (result.skippedReason === \"disconnected\") {\n stopOtaAutoChain()\n checkCompletedRef.current = true\n setCheckState(\"error\")\n return\n }\n if (result.skippedReason === \"missing_build\") {\n checkCompletedRef.current = true\n if (isOtaAutoChainActive()) {\n stopOtaAutoChain()\n setCheckState(\"error\")\n } else {\n onFinishedRef.current()\n }\n return\n }\n if (result.skippedReason === \"dev_build\") {\n stopOtaAutoChain()\n checkCompletedRef.current = true\n ota.clearUpdateAvailable()\n setCheckState(\"dev_build\")\n return\n }\n if (!result.hasCheckCompleted) {\n stopOtaAutoChain()\n checkCompletedRef.current = true\n setErrorKind(result.checkFailureReason === \"pin_unavailable\" ? \"pin_unavailable\" : \"network\")\n setCheckState(\"error\")\n return\n }\n if (result.updateAvailable && result.updateInfo) {\n setIsUpdateRequired(result.isRequired)\n setIsDowngradeUpdate(result.updateInfo.isDowngrade === true)\n const fingerprint = otaAutoChainFingerprint(result)\n setUpdateFingerprint(fingerprint)\n if (isOtaAutoChainActive()) {\n const snapshot = ota.snapshot()\n if (!snapshot.wifiStatusKnown) return\n if (!snapshot.wifiConnected && snapshot.hotspotOtaVersion !== 1) {\n stopOtaAutoChain()\n } else {\n const admission = tryAdvanceOtaAutoChain(fingerprint, result.updateInfo.isDowngrade === true)\n if (admission.advance) {\n checkCompletedRef.current = true\n ota.installSession.prepare(result)\n navigateToProgress()\n return\n }\n }\n }\n checkCompletedRef.current = true\n setCheckState(\"update_available\")\n return\n }\n stopOtaAutoChain()\n checkCompletedRef.current = true\n ota.clearUpdateAvailable()\n setCheckState(\"no_update\")\n } catch (error) {\n console.error(\"OTA check failed:\", error)\n await new Promise((resolve) => setTimeout(resolve, Math.max(0, MIN_DISPLAY_TIME_MS - (Date.now() - startTime))))\n if (cancelled || myGeneration !== performCheckGenerationRef.current) return\n stopOtaAutoChain()\n checkCompletedRef.current = true\n setCheckState(\"error\")\n }\n }\n\n void performCheck()\n return () => {\n cancelled = true\n if (reconnectTimeout) clearTimeout(reconnectTimeout)\n }\n }, [\n checkKey,\n otaSnapshot.connected,\n otaSnapshot.wifiStatusKnown,\n navigateToProgress,\n ])\n\n const retry = () => {\n setCheckState(\"checking\")\n setRetryGeneration((value) => value + 1)\n }\n\n const updateNow = () => {\n const result = selectedCheckResultRef.current\n if (!result) {\n setCheckState(\"error\")\n return\n }\n const snapshot = ota.snapshot()\n if (!snapshot.wifiStatusKnown) {\n retry()\n return\n }\n if (!snapshot.wifiConnected && snapshot.hotspotOtaVersion !== 1) {\n onOpenWifiSetup()\n return\n }\n ota.installSession.prepare(result)\n if (updateFingerprint) beginOtaAutoChain(updateFingerprint, isDowngradeUpdate)\n navigateToProgress()\n }\n\n if (checkState === \"checking\") {\n return (\n <FlowPage colors={colors} icon=\"download\" title={translate(\"ota:checkingForUpdates\")}>\n <BodyText colors={colors}>{translate(\"ota:checkingForUpdatesMessage\")}</BodyText>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n </FlowPage>\n )\n }\n\n if (checkState === \"update_available\") {\n return (\n <FlowPage\n colors={colors}\n icon=\"download\"\n title={translate(isDowngradeUpdate ? \"ota:downgradeAvailable\" : \"ota:updateAvailable\", {deviceName})}\n actions={\n <>\n <FlowButton\n colors={colors}\n disabled={!glassesWifiStatusKnown}\n label={translate(!glassesWifiStatusKnown || canInstallUpdate ? \"ota:updateNow\" : \"ota:setupWifi\")}\n onPress={updateNow}\n />\n {!isUpdateRequired ? (\n <FlowButton colors={colors} label={translate(\"ota:updateLater\")} onPress={onFinished} secondary />\n ) : null}\n {allowDevSkip && isUpdateRequired ? (\n <FlowButton colors={colors} label=\"Skip (dev only)\" onPress={onFinished} secondary />\n ) : null}\n </>\n }>\n <BodyText colors={colors}>\n {canInstallUpdate\n ? translate(isDowngradeUpdate ? \"ota:downgradeDescription\" : \"ota:updateDescription\")\n : translate(\"ota:updateConnectWifi\", {deviceName})}\n </BodyText>\n </FlowPage>\n )\n }\n\n if (checkState === \"dev_build\") {\n return (\n <FlowPage\n actions={<FlowButton colors={colors} label={translate(\"common:continue\")} onPress={onFinished} />}\n colors={colors}\n icon=\"settings\"\n title={translate(\"ota:devBuild\")}>\n <BodyText colors={colors}>{translate(\"ota:devBuildNoOta\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (checkState === \"no_update\") {\n return (\n <FlowPage\n actions={<FlowButton colors={colors} label={translate(\"common:continue\")} onPress={onFinished} />}\n colors={colors}\n icon=\"check\"\n title={translate(\"ota:upToDate\")}>\n <BodyText colors={colors}>{translate(\"ota:noUpdatesAvailable\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (errorKind === \"pin_unavailable\") {\n return (\n <FlowPage\n actions={<FlowButton colors={colors} label={translate(\"common:continue\")} onPress={onFinished} />}\n colors={colors}\n icon=\"alert\"\n title={translate(\"ota:updateInfoUnavailable\")}>\n <BodyText colors={colors}>{translate(\"ota:updateInfoUnavailableMessage\")}</BodyText>\n </FlowPage>\n )\n }\n\n return (\n <FlowPage\n actions={\n <>\n <FlowButton colors={colors} label=\"Retry\" onPress={retry} />\n {allowDevSkip ? <FlowButton colors={colors} label=\"Skip (dev only)\" onPress={onFinished} secondary /> : null}\n </>\n }\n colors={colors}\n icon=\"alert\"\n title={translate(\"ota:checkFailed\")}>\n <BodyText colors={colors}>{translate(\"ota:checkFailedMessage\")}</BodyText>\n </FlowPage>\n )\n}\n\ntype ProgressPageProps = {\n colors: MentraLiveOtaFlowTheme\n onFirmwareRestartingChange?: (restarting: boolean, progressActive: boolean) => void\n onOpenWifiSetup: () => void\n onReturnToCheck: () => void\n superMode: boolean\n translate: MentraLiveOtaFlowTranslate\n}\n\nfunction OtaProgressPage({\n colors,\n onFirmwareRestartingChange,\n onOpenWifiSetup,\n onReturnToCheck,\n superMode,\n translate,\n}: ProgressPageProps) {\n const install = useEngineSnapshot(ota.installSession.snapshot, ota.installSession.onSnapshot)\n const autoChainAdvancedRef = useRef(false)\n const {\n connected,\n continueButtonDisabled,\n displayState,\n errorMsg,\n hotspotArtifactPercent,\n hotspotPhase,\n isVersionChange,\n mtkInstallStallSimulatedPercent,\n otaProgress,\n otaStatus,\n versionChangeConverged,\n versionChangePhase,\n } = install\n const firmwareRestarting = (!connected && displayState === \"restarting\") || versionChangePhase === \"restarting\"\n\n useEffect(() => {\n onFirmwareRestartingChange?.(firmwareRestarting, true)\n }, [firmwareRestarting, onFirmwareRestartingChange])\n\n useEffect(\n () => () => {\n onFirmwareRestartingChange?.(false, false)\n },\n [onFirmwareRestartingChange],\n )\n\n useEffect(() => {\n ota.installSession.attach()\n return () => ota.installSession.detach()\n }, [])\n\n useEffect(() => {\n if (displayState !== \"complete\" || !connected || !isOtaAutoChainActive() || autoChainAdvancedRef.current) return\n const timeout = setTimeout(() => {\n if (!isOtaAutoChainActive()) return\n autoChainAdvancedRef.current = true\n ota.installSession.finish()\n onReturnToCheck()\n }, AUTO_CHAIN_COMPLETE_DELAY_MS)\n return () => clearTimeout(timeout)\n }, [connected, displayState, onReturnToCheck])\n\n const finishAndCheck = () => {\n ota.installSession.finish()\n onReturnToCheck()\n }\n const stopAndCheck = () => {\n stopOtaAutoChain()\n finishAndCheck()\n }\n const retryInstall = () => {\n onFirmwareRestartingChange?.(false, true)\n ota.installSession.retry()\n }\n\n if (versionChangePhase === \"restarting\" || versionChangePhase === \"verifying\") {\n return (\n <FlowPage\n colors={colors}\n icon=\"download\"\n title={translate(\n versionChangePhase === \"verifying\" ? \"ota:versionChangeVerifying\" : \"ota:versionChangeRestarting\",\n )}>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n <BodyText colors={colors}>{translate(\"ota:versionChangeKeepNearby\")}</BodyText>\n <BodyText colors={colors}>{translate(\"ota:downgradeDuration\")}</BodyText>\n </FlowPage>\n )\n }\n\n if (displayState === \"starting\") {\n const hotspotTitle =\n hotspotPhase === \"downloading\"\n ? \"Downloading update to phone...\"\n : hotspotPhase === \"starting_hotspot\"\n ? \"Starting glasses hotspot...\"\n : hotspotPhase === \"joining_hotspot\"\n ? \"Connecting phone to glasses...\"\n : \"Starting update...\"\n return (\n <FlowPage colors={colors} icon=\"download\" title={hotspotTitle}>\n {hotspotPhase === \"downloading\" && hotspotArtifactPercent !== null ? (\n <PercentText colors={colors} percent={hotspotArtifactPercent} />\n ) : null}\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n <BodyText colors={colors}>Do not disconnect your glasses</BodyText>\n </FlowPage>\n )\n }\n\n if (displayState === \"updating\") {\n const isDownload = otaStatus?.phase === \"download\"\n const totalSteps = otaStatus?.totalSteps ?? 1\n const isApkOnlyInstalling = otaStatus?.stepType === \"apk\" && otaStatus.phase === \"install\" && totalSteps === 1\n const rawPercent = isDownload\n ? otaStatus?.stepPercent ?? 0\n : totalSteps >= 2\n ? otaStatus?.overallPercent ?? 0\n : otaStatus?.stepPercent ?? 0\n const percent = Math.min(Math.max(rawPercent, mtkInstallStallSimulatedPercent ?? 0, 0), 100)\n return (\n <FlowPage colors={colors} icon=\"download\" title={isDownload ? \"Downloading...\" : \"Installing...\"}>\n {isApkOnlyInstalling ? (\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n ) : (\n <>\n <PercentText colors={colors} percent={percent} />\n <View style={[styles.progressTrack, {backgroundColor: colors.border}]}>\n <View style={[styles.progressFill, {backgroundColor: colors.primary, width: `${percent}%`}]} />\n </View>\n </>\n )}\n <BodyText colors={colors}>Do not disconnect your glasses</BodyText>\n {isVersionChange && otaStatus?.phase === \"install\" ? (\n <BodyText colors={colors}>{translate(\"ota:downgradeDuration\")}</BodyText>\n ) : null}\n </FlowPage>\n )\n }\n\n if (displayState === \"restarting\") {\n return (\n <FlowPage\n actions={\n <FlowButton colors={colors} disabled={continueButtonDisabled} label=\"Continue\" onPress={stopAndCheck} />\n }\n colors={colors}\n icon=\"check\"\n title=\"Update Installed\"\n />\n )\n }\n\n if (displayState === \"complete\") {\n const title = versionChangeConverged\n ? translate(\"ota:versionChangeComplete\")\n : isVersionChange\n ? translate(\"ota:versionChangeFirmwarePassComplete\")\n : \"Update complete!\"\n const message = versionChangeConverged\n ? translate(\"ota:versionChangeCompleteMessage\")\n : isVersionChange\n ? translate(\"ota:versionChangeFirmwarePassCompleteMessage\")\n : \"Your glasses are up to date.\"\n return (\n <FlowPage\n actions={\n <FlowButton\n colors={colors}\n label={isVersionChange && !versionChangeConverged ? \"Continue\" : \"Done\"}\n onPress={finishAndCheck}\n />\n }\n colors={colors}\n icon=\"check\"\n title={title}>\n <BodyText colors={colors}>{message}</BodyText>\n </FlowPage>\n )\n }\n\n if (displayState === \"failed\") {\n const requiresGlassesReboot = shouldRequireGlassesRebootForBesFailure(otaStatus, otaProgress, errorMsg)\n const displayedError = requiresGlassesReboot\n ? BES_INSTALL_RESTART_MESSAGE\n : errorMsg || getOtaErrorMessage(otaStatus?.error)\n const showChangeWifi = shouldShowChangeWifiForOtaDownloadFailure(otaStatus, otaProgress, errorMsg)\n return (\n <FlowPage\n actions={\n <>\n <FlowButton\n colors={colors}\n label={requiresGlassesReboot ? \"Done\" : \"Retry\"}\n onPress={requiresGlassesReboot ? stopAndCheck : retryInstall}\n />\n {showChangeWifi ? (\n <FlowButton\n colors={colors}\n label=\"Change WiFi\"\n onPress={() => {\n stopOtaAutoChain()\n onOpenWifiSetup()\n }}\n secondary\n />\n ) : null}\n </>\n }\n colors={colors}\n icon=\"alert\"\n title=\"Update Failed\">\n <BodyText colors={colors}>{displayedError}</BodyText>\n </FlowPage>\n )\n }\n\n return (\n <FlowPage\n actions={\n superMode ? (\n <FlowButton\n colors={colors}\n label=\"Skip (super)\"\n onPress={() => {\n stopOtaAutoChain()\n ota.installSession.discard()\n onReturnToCheck()\n }}\n secondary\n />\n ) : undefined\n }\n colors={colors}\n icon=\"bluetooth\"\n title=\"Glasses disconnected\">\n <BodyText colors={colors}>Reconnecting...</BodyText>\n <ActivityIndicator size=\"large\" color={colors.foreground} />\n </FlowPage>\n )\n}\n\ntype FlowPageProps = {\n actions?: React.ReactNode\n children?: React.ReactNode\n colors: MentraLiveOtaFlowTheme\n icon: \"alert\" | \"bluetooth\" | \"check\" | \"download\" | \"settings\"\n title: string\n}\n\nfunction FlowPage({actions, children, colors, icon, title}: FlowPageProps) {\n return (\n <View style={styles.page} testID=\"mentra-live-ota-flow\">\n <View style={styles.centerContent}>\n <FlowIcon colors={colors} name={icon} />\n <Text style={[styles.title, {color: colors.foreground}]}>{title}</Text>\n {children}\n </View>\n {actions ? <View style={styles.actions}>{actions}</View> : <View style={styles.actionSpacer} />}\n </View>\n )\n}\n\nfunction BodyText({children, colors}: {children: React.ReactNode; colors: MentraLiveOtaFlowTheme}) {\n return <Text style={[styles.body, {color: colors.textDim}]}>{children}</Text>\n}\n\nfunction PercentText({colors, percent}: {colors: MentraLiveOtaFlowTheme; percent: number}) {\n return <Text style={[styles.percent, {color: colors.primary}]}>{Math.round(percent)}%</Text>\n}\n\nfunction FlowButton({\n colors,\n disabled = false,\n label,\n onPress,\n secondary = false,\n}: {\n colors: MentraLiveOtaFlowTheme\n disabled?: boolean\n label: string\n onPress: () => void\n secondary?: boolean\n}) {\n return (\n <Pressable\n accessibilityRole=\"button\"\n disabled={disabled}\n onPress={onPress}\n style={({pressed}) => [\n styles.button,\n {\n backgroundColor: secondary ? colors.background : colors.primary,\n borderColor: secondary ? colors.border : colors.primary,\n opacity: disabled ? 0.45 : pressed ? 0.75 : 1,\n },\n ]}\n testID={`button-${label}`}>\n <Text style={[styles.buttonText, {color: secondary ? colors.foreground : colors.primaryText}]}>{label}</Text>\n </Pressable>\n )\n}\n\nfunction MentraMark({color}: {color: string}) {\n return (\n <Svg width={33} height={18} viewBox=\"0 0 50 27\" fill=\"none\">\n <Rect y={14.8072} width={11.8457} height={11.8457} fill={color} />\n <Path d=\"M9.36639 0L30.7163 14.8072V26.6529L9.36639 11.8457V0Z\" fill={color} />\n <Path d=\"M28.6501 0L50 14.8072V26.6529L28.6501 11.8457V0Z\" fill={color} />\n </Svg>\n )\n}\n\nfunction FlowIcon({colors, name}: {colors: MentraLiveOtaFlowTheme; name: FlowPageProps[\"icon\"]}) {\n const color = name === \"alert\" || name === \"bluetooth\" ? colors.error : colors.primary\n const glyph =\n name === \"check\" ? \"✓\" : name === \"alert\" ? \"!\" : name === \"settings\" ? \"⚙\" : name === \"bluetooth\" ? \"⌁\" : \"↓\"\n return <Text style={[styles.icon, {color}]}>{glyph}</Text>\n}\n\nconst styles = StyleSheet.create({\n safeArea: {flex: 1},\n header: {\n alignItems: \"center\",\n flexDirection: \"row\",\n height: 48,\n justifyContent: \"space-between\",\n paddingHorizontal: 20,\n },\n page: {flex: 1, paddingBottom: 24, paddingHorizontal: 24},\n centerContent: {alignItems: \"center\", flex: 1, gap: 16, justifyContent: \"center\"},\n actionSpacer: {height: 48},\n actions: {gap: 12},\n icon: {fontSize: 64, fontWeight: \"500\", lineHeight: 72, textAlign: \"center\"},\n title: {fontSize: 20, fontWeight: \"600\", textAlign: \"center\"},\n body: {fontSize: 14, lineHeight: 20, maxWidth: 420, textAlign: \"center\"},\n percent: {fontSize: 30, fontVariant: [\"tabular-nums\"], fontWeight: \"700\"},\n progressTrack: {borderRadius: 4, height: 8, maxWidth: 420, overflow: \"hidden\", width: \"100%\"},\n progressFill: {borderRadius: 4, height: 8},\n button: {\n alignItems: \"center\",\n borderRadius: 10,\n borderWidth: 1,\n justifyContent: \"center\",\n minHeight: 48,\n paddingHorizontal: 20,\n },\n buttonText: {fontSize: 15, fontWeight: \"700\"},\n})\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,GAChC,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAKlB,MAAM,qBAAqB,CAAA","sourcesContent":["export {\n MentraLiveOtaFlow,\n type MentraLiveOtaFlowPage,\n type MentraLiveOtaFlowProps,\n type MentraLiveOtaFlowTheme,\n type MentraLiveOtaFlowTranslate,\n} from \"./MentraLiveOtaFlow\"\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useEngineSnapshot.d.ts","sourceRoot":"","sources":["../../src/react/useEngineSnapshot.ts"],"names":[],"mappings":"AAEA,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,CAa7G"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { useEffect, useRef, useState } from "react";
|
|
2
|
+
export function useEngineSnapshot(getSnapshot, subscribe) {
|
|
3
|
+
const getSnapshotRef = useRef(getSnapshot);
|
|
4
|
+
const subscribeRef = useRef(subscribe);
|
|
5
|
+
getSnapshotRef.current = getSnapshot;
|
|
6
|
+
subscribeRef.current = subscribe;
|
|
7
|
+
const [snapshot, setSnapshot] = useState(() => getSnapshot());
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
setSnapshot(getSnapshotRef.current());
|
|
10
|
+
return subscribeRef.current(() => setSnapshot(getSnapshotRef.current()));
|
|
11
|
+
}, []);
|
|
12
|
+
return snapshot;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=useEngineSnapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useEngineSnapshot.js","sourceRoot":"","sources":["../../src/react/useEngineSnapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAA;AAEjD,MAAM,UAAU,iBAAiB,CAAI,WAAoB,EAAE,SAA+C;IACxG,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;IAC1C,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,CAAA;IACtC,cAAc,CAAC,OAAO,GAAG,WAAW,CAAA;IACpC,YAAY,CAAC,OAAO,GAAG,SAAS,CAAA;IAChC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAA;IAE7D,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAA;QACrC,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;IAC1E,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,QAAQ,CAAA;AACjB,CAAC","sourcesContent":["import {useEffect, useRef, useState} from \"react\"\n\nexport function useEngineSnapshot<T>(getSnapshot: () => T, subscribe: (onChange: () => void) => () => void): T {\n const getSnapshotRef = useRef(getSnapshot)\n const subscribeRef = useRef(subscribe)\n getSnapshotRef.current = getSnapshot\n subscribeRef.current = subscribe\n const [snapshot, setSnapshot] = useState(() => getSnapshot())\n\n useEffect(() => {\n setSnapshot(getSnapshotRef.current())\n return subscribeRef.current(() => setSnapshot(getSnapshotRef.current()))\n }, [])\n\n return snapshot\n}\n"]}
|
|
@@ -50,8 +50,23 @@ export interface IslandUiSeams {
|
|
|
50
50
|
* `session.glasses.requestWifiSetup` — open the host's glasses Wi-Fi setup
|
|
51
51
|
* flow. Absent ⇒ miniapps get NOT_IMPLEMENTED for the request.
|
|
52
52
|
*/
|
|
53
|
-
requestWifiSetup?: (reason?: string) => Promise<void> | void;
|
|
53
|
+
requestWifiSetup?: (reason?: string, packageName?: string) => Promise<void> | void;
|
|
54
|
+
/**
|
|
55
|
+
* `session.system.scanQr` — open a phone-camera QR scanner overlay. Must NOT
|
|
56
|
+
* clear miniapp foreground: UI_CLOSE on a live call hangs it up. Absent ⇒
|
|
57
|
+
* miniapps get NOT_IMPLEMENTED.
|
|
58
|
+
*/
|
|
59
|
+
scanQr?: (options?: ScanQrOptions) => Promise<ScanQrResult>;
|
|
60
|
+
}
|
|
61
|
+
export interface ScanQrOptions {
|
|
62
|
+
title?: string;
|
|
63
|
+
hint?: string;
|
|
54
64
|
}
|
|
65
|
+
export type ScanQrResult = {
|
|
66
|
+
data: string;
|
|
67
|
+
} | {
|
|
68
|
+
cancelled: true;
|
|
69
|
+
};
|
|
55
70
|
export interface IslandConfigureOptions {
|
|
56
71
|
/** REQUIRED — the only must-have seam. The host owns login; engine owns the rest. */
|
|
57
72
|
auth: IslandAuth;
|
|
@@ -69,11 +84,19 @@ export interface IslandConfigureOptions {
|
|
|
69
84
|
* while started; after `stop()`, `configure()` + `start()` begin a fresh cycle.
|
|
70
85
|
*/
|
|
71
86
|
export declare function configure(opts: IslandConfigureOptions): void;
|
|
87
|
+
/**
|
|
88
|
+
* Merge host-UI seams after configure/start. UI capabilities (scan overlay,
|
|
89
|
+
* wifi setup) are looked up per request, so this is safe on a running runtime.
|
|
90
|
+
* Used so Metro reloads can attach seams that missed the original configure().
|
|
91
|
+
*/
|
|
92
|
+
export declare function updateUiSeams(ui: IslandUiSeams): void;
|
|
72
93
|
/** Mark the runtime started. Idempotent. */
|
|
73
94
|
export declare function start(): Promise<void>;
|
|
74
95
|
/** Tear down. Idempotent. */
|
|
75
96
|
export declare function stop(): Promise<void>;
|
|
76
97
|
export declare function isStarted(): boolean;
|
|
98
|
+
/** Test-only: wipe configure state so suites can start from a cold host. */
|
|
99
|
+
export declare function resetForTests(): void;
|
|
77
100
|
/** The host-supplied auth provider, or null if not configured yet. */
|
|
78
101
|
export declare function getAuth(): IslandAuth | null;
|
|
79
102
|
export declare function getConfigValues(): IslandConfigValues;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/runtime/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AAErE,MAAM,WAAW,UAAU;IACzB,iFAAiF;IACjF,eAAe,EAAE,MAAM,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,gBAAgB,CAAA;KAAC,CAAC,CAAA;IACvE;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAC,GAAG,IAAI,KAAK,IAAI,KAAK,OAAO,CAAA;CACxG;AAED,MAAM,WAAW,kBAAkB;IACjC,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAA;CACzC;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;AAEtF;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/runtime/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AAErE,MAAM,WAAW,UAAU;IACzB,iFAAiF;IACjF,eAAe,EAAE,MAAM,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,gBAAgB,CAAA;KAAC,CAAC,CAAA;IACvE;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAC,GAAG,IAAI,KAAK,IAAI,KAAK,OAAO,CAAA;CACxG;AAED,MAAM,WAAW,kBAAkB;IACjC,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAA;CACzC;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;AAEtF;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAClF;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;CAC5D;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,MAAM,YAAY,GAAG;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,GAAG;IAAC,SAAS,EAAE,IAAI,CAAA;CAAC,CAAA;AAE7D,MAAM,WAAW,sBAAsB;IACrC,qFAAqF;IACrF,IAAI,EAAE,UAAU,CAAA;IAChB,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,SAAS,CAAC,EAAE,eAAe,CAAA;IAC3B,EAAE,CAAC,EAAE,aAAa,CAAA;CACnB;AAKD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,sBAAsB,GAAG,IAAI,CAM5D;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI,CAMrD;AAED,4CAA4C;AAC5C,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAM3C;AAED,6BAA6B;AAC7B,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1C;AAED,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,sEAAsE;AACtE,wBAAgB,OAAO,IAAI,UAAU,GAAG,IAAI,CAE3C;AAED,wBAAgB,eAAe,IAAI,kBAAkB,CAEpD;AAED,wBAAgB,YAAY,IAAI,eAAe,GAAG,IAAI,CAErD;AAED,uEAAuE;AACvE,wBAAgB,UAAU,IAAI,aAAa,CAE1C"}
|
|
@@ -23,6 +23,18 @@ export function configure(opts) {
|
|
|
23
23
|
}
|
|
24
24
|
options = opts;
|
|
25
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Merge host-UI seams after configure/start. UI capabilities (scan overlay,
|
|
28
|
+
* wifi setup) are looked up per request, so this is safe on a running runtime.
|
|
29
|
+
* Used so Metro reloads can attach seams that missed the original configure().
|
|
30
|
+
*/
|
|
31
|
+
export function updateUiSeams(ui) {
|
|
32
|
+
if (!options) {
|
|
33
|
+
console.warn("engine.updateUiSeams() called before engine.configure(); ignored");
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
options = { ...options, ui: { ...options.ui, ...ui } };
|
|
37
|
+
}
|
|
26
38
|
/** Mark the runtime started. Idempotent. */
|
|
27
39
|
export async function start() {
|
|
28
40
|
if (started)
|
|
@@ -39,6 +51,11 @@ export async function stop() {
|
|
|
39
51
|
export function isStarted() {
|
|
40
52
|
return started;
|
|
41
53
|
}
|
|
54
|
+
/** Test-only: wipe configure state so suites can start from a cold host. */
|
|
55
|
+
export function resetForTests() {
|
|
56
|
+
options = null;
|
|
57
|
+
started = false;
|
|
58
|
+
}
|
|
42
59
|
/** The host-supplied auth provider, or null if not configured yet. */
|
|
43
60
|
export function getAuth() {
|
|
44
61
|
return options?.auth ?? null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/runtime/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/runtime/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAsEH,IAAI,OAAO,GAAkC,IAAI,CAAA;AACjD,IAAI,OAAO,GAAG,KAAK,CAAA;AAEnB;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CAAC,IAA4B;IACpD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,mGAAmG,CAAC,CAAA;QACjH,OAAM;IACR,CAAC;IACD,OAAO,GAAG,IAAI,CAAA;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,EAAiB;IAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAA;QAChF,OAAM;IACR,CAAC;IACD,OAAO,GAAG,EAAC,GAAG,OAAO,EAAE,EAAE,EAAE,EAAC,GAAG,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,EAAC,EAAC,CAAA;AACpD,CAAC;AAED,4CAA4C;AAC5C,MAAM,CAAC,KAAK,UAAU,KAAK;IACzB,IAAI,OAAO;QAAE,OAAM;IACnB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;IACpE,CAAC;IACD,OAAO,GAAG,IAAI,CAAA;AAChB,CAAC;AAED,6BAA6B;AAC7B,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,OAAO,GAAG,KAAK,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,aAAa;IAC3B,OAAO,GAAG,IAAI,CAAA;IACd,OAAO,GAAG,KAAK,CAAA;AACjB,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,OAAO;IACrB,OAAO,OAAO,EAAE,IAAI,IAAI,IAAI,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,OAAO,EAAE,MAAM,IAAI,EAAE,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,OAAO,EAAE,SAAS,IAAI,IAAI,CAAA;AACnC,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,UAAU;IACxB,OAAO,OAAO,EAAE,EAAE,IAAI,EAAE,CAAA;AAC1B,CAAC","sourcesContent":["/**\n * Bootstrap — the engine's single front door (`engine.configure` / `start` / `stop`).\n *\n * The host hands engine auth + config + analytics in one call; engine owns the\n * runtime construction behind `start()`. Internal services read this holder\n * directly instead of exposing host-facing adapter bags.\n */\n\nexport type SubjectTokenType = \"supabase\" | \"authing\" | (string & {})\n\nexport interface IslandAuth {\n /** Returns the host's current (auto-refreshed) subject token for the backend. */\n getSubjectToken: () => Promise<{token: string; type: SubjectTokenType}>\n /**\n * Optional auth-session listener. Hosts that can emit auth changes should\n * wire this so engine can reconnect backend sessions after restored login\n * state lands post-boot.\n */\n onStateChange?: (callback: (event: string, session: {token?: string | null} | null) => void) => unknown\n}\n\nexport interface IslandConfigValues {\n /** cloud-v2 core service base URL (defaults resolved by the cloud client). */\n coreUrl?: string\n /** cloud-v2 runtime service base URL. */\n runtimeUrl?: string\n /** OEM identifier (Mentra is OEM #0); reserved for OEM auth/telemetry. */\n oemId?: string\n /**\n * LC3 frame size (bytes) the phone's mic encoder emits — announced to the\n * cloud on connect (20 for G1, 40 for G2, …). Defaults to 20 if unset.\n */\n audioFrameSizeBytes?: number\n /**\n * Dev-only live Metro/LAN host used to repair persisted local-miniapp dev URLs\n * after the laptop changes networks. Omitted in production/OEM builds.\n */\n devServerHost?: () => string | undefined\n}\n\nexport type IslandAnalytics = (event: string, props?: Record<string, unknown>) => void\n\n/**\n * Named host-UI seams: engine dispatches the runtime request, the host owns the\n * screen/navigation/branding. Keep each entry a single narrow purpose — this is\n * a contract of specific UI capabilities, not a generic runtime-hook bag.\n */\nexport interface IslandUiSeams {\n /**\n * `session.glasses.requestWifiSetup` — open the host's glasses Wi-Fi setup\n * flow. Absent ⇒ miniapps get NOT_IMPLEMENTED for the request.\n */\n requestWifiSetup?: (reason?: string, packageName?: string) => Promise<void> | void\n /**\n * `session.system.scanQr` — open a phone-camera QR scanner overlay. Must NOT\n * clear miniapp foreground: UI_CLOSE on a live call hangs it up. Absent ⇒\n * miniapps get NOT_IMPLEMENTED.\n */\n scanQr?: (options?: ScanQrOptions) => Promise<ScanQrResult>\n}\n\nexport interface ScanQrOptions {\n title?: string\n hint?: string\n}\n\nexport type ScanQrResult = {data: string} | {cancelled: true}\n\nexport interface IslandConfigureOptions {\n /** REQUIRED — the only must-have seam. The host owns login; engine owns the rest. */\n auth: IslandAuth\n config?: IslandConfigValues\n analytics?: IslandAnalytics\n ui?: IslandUiSeams\n}\n\nlet options: IslandConfigureOptions | null = null\nlet started = false\n\n/**\n * Hand engine its auth + config + analytics. Call once, before `start()`.\n *\n * Reconfiguring a RUNNING runtime is not supported: services capture pieces of\n * this config as they build (e.g. the cloud client's endpoints), so swapping the\n * options mid-run would split-brain the runtime (`getAuth()`/`getConfigValues()`\n * report values the running services never consumed). Ignored with a warning\n * while started; after `stop()`, `configure()` + `start()` begin a fresh cycle.\n */\nexport function configure(opts: IslandConfigureOptions): void {\n if (started) {\n console.warn(\"engine.configure() called after engine.start(); ignored — stop() the runtime before reconfiguring\")\n return\n }\n options = opts\n}\n\n/**\n * Merge host-UI seams after configure/start. UI capabilities (scan overlay,\n * wifi setup) are looked up per request, so this is safe on a running runtime.\n * Used so Metro reloads can attach seams that missed the original configure().\n */\nexport function updateUiSeams(ui: IslandUiSeams): void {\n if (!options) {\n console.warn(\"engine.updateUiSeams() called before engine.configure(); ignored\")\n return\n }\n options = {...options, ui: {...options.ui, ...ui}}\n}\n\n/** Mark the runtime started. Idempotent. */\nexport async function start(): Promise<void> {\n if (started) return\n if (!options) {\n throw new Error(\"engine.start() called before engine.configure()\")\n }\n started = true\n}\n\n/** Tear down. Idempotent. */\nexport async function stop(): Promise<void> {\n started = false\n}\n\nexport function isStarted(): boolean {\n return started\n}\n\n/** Test-only: wipe configure state so suites can start from a cold host. */\nexport function resetForTests(): void {\n options = null\n started = false\n}\n\n/** The host-supplied auth provider, or null if not configured yet. */\nexport function getAuth(): IslandAuth | null {\n return options?.auth ?? null\n}\n\nexport function getConfigValues(): IslandConfigValues {\n return options?.config ?? {}\n}\n\nexport function getAnalytics(): IslandAnalytics | null {\n return options?.analytics ?? null\n}\n\n/** The host-supplied UI seams ({} until configure() provides them). */\nexport function getUiSeams(): IslandUiSeams {\n return options?.ui ?? {}\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ScanQrOptions, ScanQrResult } from "./bootstrap";
|
|
2
|
+
export declare class ScanQrNotConfiguredError extends Error {
|
|
3
|
+
readonly code = "NOT_IMPLEMENTED";
|
|
4
|
+
constructor();
|
|
5
|
+
}
|
|
6
|
+
export declare function invokeScanQrSeam(scanQr: ((options?: ScanQrOptions) => Promise<ScanQrResult>) | undefined, payload?: Record<string, unknown>): Promise<ScanQrResult>;
|
|
7
|
+
//# sourceMappingURL=scanQrSeam.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanQrSeam.d.ts","sourceRoot":"","sources":["../../src/runtime/scanQrSeam.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAE,YAAY,EAAC,MAAM,aAAa,CAAA;AAE5D,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,IAAI,qBAAoB;;CAKlC;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,SAAS,EACxE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACpC,OAAO,CAAC,YAAY,CAAC,CAMvB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export class ScanQrNotConfiguredError extends Error {
|
|
2
|
+
code = "NOT_IMPLEMENTED";
|
|
3
|
+
constructor() {
|
|
4
|
+
super("QR scanning is not configured on this host. Reload the Mentra App and try again.");
|
|
5
|
+
this.name = "ScanQrNotConfiguredError";
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export async function invokeScanQrSeam(scanQr, payload = {}) {
|
|
9
|
+
if (!scanQr)
|
|
10
|
+
throw new ScanQrNotConfiguredError();
|
|
11
|
+
return scanQr({
|
|
12
|
+
title: typeof payload.title === "string" ? payload.title : undefined,
|
|
13
|
+
hint: typeof payload.hint === "string" ? payload.hint : undefined,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=scanQrSeam.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanQrSeam.js","sourceRoot":"","sources":["../../src/runtime/scanQrSeam.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACxC,IAAI,GAAG,iBAAiB,CAAA;IACjC;QACE,KAAK,CAAC,kFAAkF,CAAC,CAAA;QACzF,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAA;IACxC,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAwE,EACxE,UAAmC,EAAE;IAErC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,wBAAwB,EAAE,CAAA;IACjD,OAAO,MAAM,CAAC;QACZ,KAAK,EAAE,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QACpE,IAAI,EAAE,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;KAClE,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import type {ScanQrOptions, ScanQrResult} from \"./bootstrap\"\n\nexport class ScanQrNotConfiguredError extends Error {\n readonly code = \"NOT_IMPLEMENTED\"\n constructor() {\n super(\"QR scanning is not configured on this host. Reload the Mentra App and try again.\")\n this.name = \"ScanQrNotConfiguredError\"\n }\n}\n\nexport async function invokeScanQrSeam(\n scanQr: ((options?: ScanQrOptions) => Promise<ScanQrResult>) | undefined,\n payload: Record<string, unknown> = {},\n): Promise<ScanQrResult> {\n if (!scanQr) throw new ScanQrNotConfiguredError()\n return scanQr({\n title: typeof payload.title === \"string\" ? payload.title : undefined,\n hint: typeof payload.hint === \"string\" ? payload.hint : undefined,\n })\n}\n"]}
|
|
@@ -17,8 +17,9 @@
|
|
|
17
17
|
* - subscribe(fn) register a refresh listener
|
|
18
18
|
*/
|
|
19
19
|
import { AsyncResult, Result } from "typesafe-ts";
|
|
20
|
-
import type { AppletPermission, AppletType, ClientApp
|
|
20
|
+
import type { AppletPermission, AppletType, ClientApp } from "../types/applet";
|
|
21
21
|
import { HardwareRequirement } from "../types";
|
|
22
|
+
export { normalizeManifestActions } from "./manifestActions";
|
|
22
23
|
/**
|
|
23
24
|
* Normalize the `permissions` field from a miniapp.json manifest.
|
|
24
25
|
*
|
|
@@ -30,13 +31,6 @@ export declare function normalizeManifestPermissions(raw: Array<string | {
|
|
|
30
31
|
required?: boolean;
|
|
31
32
|
description?: string;
|
|
32
33
|
}> | undefined): AppletPermission[];
|
|
33
|
-
/**
|
|
34
|
-
* Normalize a manifest's `actions` into DeclaredAction[]. Defensive — keeps only
|
|
35
|
-
* well-formed `{id, description}` entries (installed/dev bundles may be
|
|
36
|
-
* malformed). Shared by installed (disk) and dev-sideload projection so both
|
|
37
|
-
* surface declared actions to session.miniapps.list + the invoke gate.
|
|
38
|
-
*/
|
|
39
|
-
export declare function normalizeManifestActions(raw: unknown): DeclaredAction[];
|
|
40
34
|
/**
|
|
41
35
|
* Convert declared hardwareRequirements from a miniapp.json manifest into
|
|
42
36
|
* runtime `HardwareRequirement[]`, always appending `{EXIST, REQUIRED}` so
|
|
@@ -58,6 +52,12 @@ interface InstalledLma {
|
|
|
58
52
|
packageName: string;
|
|
59
53
|
versions: Record<string, InstalledInfo>;
|
|
60
54
|
}
|
|
55
|
+
export interface MiniappReleaseIdentity {
|
|
56
|
+
source: "direct_download" | "bundled_asset" | "preinstalled_registry" | "dev_snapshot";
|
|
57
|
+
releaseId?: string;
|
|
58
|
+
bundleSha256?: string;
|
|
59
|
+
channel?: string;
|
|
60
|
+
}
|
|
61
61
|
type Listener = () => void;
|
|
62
62
|
declare class AppRegistry {
|
|
63
63
|
private cachedApps;
|
|
@@ -125,6 +125,7 @@ declare class AppRegistry {
|
|
|
125
125
|
*/
|
|
126
126
|
installFromUrl(url: string, opts?: {
|
|
127
127
|
versionOverride?: string;
|
|
128
|
+
releaseIdentity?: MiniappReleaseIdentity;
|
|
128
129
|
}): AsyncResult<void, Error>;
|
|
129
130
|
/**
|
|
130
131
|
* Install a miniapp from a zip already on local disk (e.g. a bundled asset
|
|
@@ -135,6 +136,7 @@ declare class AppRegistry {
|
|
|
135
136
|
*/
|
|
136
137
|
installFromLocalZip(zipPath: string, opts?: {
|
|
137
138
|
versionOverride?: string;
|
|
139
|
+
releaseIdentity?: MiniappReleaseIdentity;
|
|
138
140
|
}): AsyncResult<{
|
|
139
141
|
packageName: string;
|
|
140
142
|
version: string;
|
|
@@ -145,6 +147,7 @@ declare class AppRegistry {
|
|
|
145
147
|
* installed bundle, and notify subscribers to refresh.
|
|
146
148
|
*/
|
|
147
149
|
private finalizeInstall;
|
|
150
|
+
getReleaseIdentity(packageName: string, version: string): MiniappReleaseIdentity | null;
|
|
148
151
|
installFromJsonUrl(baseUrl: string): AsyncResult<{
|
|
149
152
|
packageName: string;
|
|
150
153
|
version: string;
|
|
@@ -172,18 +175,11 @@ declare class AppRegistry {
|
|
|
172
175
|
setActiveVersion(packageName: string, version: string): Result<void, Error>;
|
|
173
176
|
getMetadata(packageName: string, version: string): InstalledInfo;
|
|
174
177
|
getInstalledInfo(): InstalledLma[];
|
|
175
|
-
/**
|
|
176
|
-
* Read the lmas/ tree and return one ClientApp per installed package,
|
|
177
|
-
* picking each package's active version. The store/host overlays runtime
|
|
178
|
-
* state (loading, hidden, compatibility) on top of these.
|
|
179
|
-
*
|
|
180
|
-
* `running` reflects MiniappHost mount state via miniappRunningRegistry.
|
|
181
|
-
*/
|
|
182
178
|
/**
|
|
183
179
|
* Merge disk-derived apps with the projected dev + offline layers,
|
|
184
|
-
* de-duping by packageName.
|
|
185
|
-
*
|
|
186
|
-
*
|
|
180
|
+
* de-duping by packageName. An active dev registration wins over an older
|
|
181
|
+
* disk install of the same package; installing a release clears that dev
|
|
182
|
+
* registration in finalizeInstall. Native offline apps keep top priority.
|
|
187
183
|
*/
|
|
188
184
|
private mergeProjectedApps;
|
|
189
185
|
getInstalledMiniapps(): Promise<ClientApp[]>;
|
|
@@ -200,6 +196,14 @@ declare class AppRegistry {
|
|
|
200
196
|
installOfflineApp(app: ClientApp, opts?: {
|
|
201
197
|
requiresLocalSttModel?: boolean;
|
|
202
198
|
}): void;
|
|
199
|
+
/**
|
|
200
|
+
* Update whether a registered offline app is projected into launcher UIs.
|
|
201
|
+
*
|
|
202
|
+
* Offline apps are registered once at host startup, so settings-backed
|
|
203
|
+
* visibility changes need to update the projection without reinstalling or
|
|
204
|
+
* duplicating the app. No-op when the app is missing or already matches.
|
|
205
|
+
*/
|
|
206
|
+
setOfflineAppHidden(packageName: string, hidden: boolean): void;
|
|
203
207
|
/**
|
|
204
208
|
* Registered as needing the on-device STT model before it can start (the
|
|
205
209
|
* host declares this per offline app; the apps store gates start() on it).
|
|
@@ -231,6 +235,12 @@ export interface DevAppRecord {
|
|
|
231
235
|
iconUrl: string;
|
|
232
236
|
devUrl: string;
|
|
233
237
|
devPort?: number;
|
|
238
|
+
/**
|
|
239
|
+
* Bonjour / mDNS hostname from the QR (`ComputerName.local`). Used as a
|
|
240
|
+
* failover host when the raw LAN IP in `devUrl` goes stale after a Wi-Fi
|
|
241
|
+
* change — phones that resolve `.local` can relaunch without re-scanning.
|
|
242
|
+
*/
|
|
243
|
+
mdnsHost?: string;
|
|
234
244
|
type?: AppletType;
|
|
235
245
|
permissions?: Array<string | {
|
|
236
246
|
type: string;
|
|
@@ -247,56 +257,30 @@ export interface DevAppRecord {
|
|
|
247
257
|
id?: unknown;
|
|
248
258
|
description?: unknown;
|
|
249
259
|
parameters?: unknown;
|
|
260
|
+
outputSchema?: unknown;
|
|
250
261
|
}>;
|
|
251
|
-
/**
|
|
252
|
-
* The dev miniapp's real manifest package name. `packageName` is overwritten to
|
|
253
|
-
* {@link DEV_APP_PACKAGE_NAME} so the launch chain routes consistently, so this field
|
|
254
|
-
* preserves the original so install/uninstall of OTHER packages don't wipe the dev slot.
|
|
255
|
-
*/
|
|
262
|
+
/** Legacy single-slot migration field. New records use the real packageName directly. */
|
|
256
263
|
sourcePackageName?: string;
|
|
257
264
|
/**
|
|
258
265
|
* Short-lived Core-verifiable proof emitted by `mentra dev`. This lets the
|
|
259
|
-
*
|
|
260
|
-
*
|
|
266
|
+
* dev runtime request auto-auth for the manifest package without letting
|
|
267
|
+
* arbitrary dev URLs claim any package name.
|
|
261
268
|
*/
|
|
262
269
|
devAttestation?: string;
|
|
263
270
|
}
|
|
264
|
-
/**
|
|
265
|
-
* The one and only package name a dev miniapp is registered under.
|
|
266
|
-
*
|
|
267
|
-
* There is a SINGLE dev slot: scanning a new QR (or entering a new dev URL)
|
|
268
|
-
* replaces the previous dev app rather than adding a second tile. Because the
|
|
269
|
-
* whole launch chain — JSContext registration, UI-router binding,
|
|
270
|
-
* setForeground, dev_url/dev_port storage keys, respawn-bg lookup — keys on
|
|
271
|
-
* this package name, every consumer MUST use `DEV_APP_PACKAGE_NAME` (not the
|
|
272
|
-
* manifest's real packageName) so messages route consistently. Mixing the two
|
|
273
|
-
* was the cause of the "CONNECT_ACK timeout" — the tile said `com.dev` while
|
|
274
|
-
* the dev URL/port and foreground target used the manifest name.
|
|
275
|
-
*/
|
|
271
|
+
/** Legacy package used by builds that supported only one dev miniapp. */
|
|
276
272
|
export declare const DEV_APP_PACKAGE_NAME = "com.dev";
|
|
277
273
|
export declare const DEV_APP_NAME = "Dev";
|
|
278
274
|
/**
|
|
279
|
-
* Register
|
|
280
|
-
*
|
|
281
|
-
* is the single source of truth for the dev slot — callers must not write the
|
|
282
|
-
* `*_dev_url` / `*_dev_port` keys under the manifest's real package name.
|
|
283
|
-
*
|
|
284
|
-
* Callers pass the manifest's REAL packageName/name. Only the packageName is
|
|
285
|
-
* forced to {@link DEV_APP_PACKAGE_NAME} so the home tile and launch chain key
|
|
286
|
-
* on the single dev slot (the real package survives in `sourcePackageName` for
|
|
287
|
-
* clearDevArtifacts). The name + icon are kept as-is so the home tile reflects
|
|
288
|
-
* the actual dev miniapp — marked as dev by the {@link DevMiniappBadge} dot
|
|
289
|
-
* rather than renamed to a generic "Dev" tile.
|
|
290
|
-
*/
|
|
291
|
-
export declare function registerDevApp(record: DevAppRecord): void;
|
|
292
|
-
/** Drop the dev miniapp's home-tile metadata + dev URL/port keys. */
|
|
293
|
-
export declare function unregisterDevApp(): void;
|
|
294
|
-
/**
|
|
295
|
-
* The real manifest package name currently occupying the dev slot, or null if no dev app is
|
|
296
|
-
* registered. Used to decide whether clearing a package's artifacts should also drop the dev slot.
|
|
275
|
+
* Register or update one dev miniapp under its real manifest package. Different
|
|
276
|
+
* package names coexist; rescanning the same package updates that package only.
|
|
297
277
|
*/
|
|
298
|
-
export declare function
|
|
299
|
-
|
|
278
|
+
export declare function registerDevApp(record: DevAppRecord): Promise<void>;
|
|
279
|
+
/** Drop one dev miniapp's metadata, routing keys, and cached icon. */
|
|
280
|
+
export declare function unregisterDevApp(packageName?: string): void;
|
|
281
|
+
/** Resolve the manifest package for a dev runtime (including the legacy slot). */
|
|
282
|
+
export declare function getDevAppSourcePackage(packageName?: string): string | null;
|
|
283
|
+
export declare function getDevAppAttestation(packageName?: string): string | null;
|
|
300
284
|
export declare function getDevAppRecords(): DevAppRecord[];
|
|
301
285
|
declare const appRegistry: AppRegistry;
|
|
302
286
|
export default appRegistry;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppRegistry.d.ts","sourceRoot":"","sources":["../../src/services/AppRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,EAAC,WAAW,EAAE,MAAM,EAAgB,MAAM,aAAa,CAAA;AAE9D,OAAO,KAAK,EAAC,gBAAgB,EAAqB,UAAU,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"AppRegistry.d.ts","sourceRoot":"","sources":["../../src/services/AppRegistry.ts"],"names":[],"mappings":"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"}
|