@mentra/engine 0.1.0-beta.0 → 0.1.0-dev.1

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.
Files changed (355) hide show
  1. package/README.md +42 -1
  2. package/build/engine.d.ts +11 -3
  3. package/build/engine.d.ts.map +1 -1
  4. package/build/engine.js +7 -2
  5. package/build/engine.js.map +1 -1
  6. package/build/facades/dev.d.ts.map +1 -1
  7. package/build/facades/dev.js +9 -5
  8. package/build/facades/dev.js.map +1 -1
  9. package/build/facades/gallery.js +1 -1
  10. package/build/facades/gallery.js.map +1 -1
  11. package/build/facades/glasses.d.ts +1 -0
  12. package/build/facades/glasses.d.ts.map +1 -1
  13. package/build/facades/glasses.js +19 -4
  14. package/build/facades/glasses.js.map +1 -1
  15. package/build/facades/glassesSettings.d.ts.map +1 -1
  16. package/build/facades/glassesSettings.js +1 -0
  17. package/build/facades/glassesSettings.js.map +1 -1
  18. package/build/facades/miniapps.d.ts +4 -0
  19. package/build/facades/miniapps.d.ts.map +1 -1
  20. package/build/facades/miniapps.js +5 -0
  21. package/build/facades/miniapps.js.map +1 -1
  22. package/build/facades/ota.d.ts +11 -2
  23. package/build/facades/ota.d.ts.map +1 -1
  24. package/build/facades/ota.js +19 -4
  25. package/build/facades/ota.js.map +1 -1
  26. package/build/facades/pairing.d.ts +4 -0
  27. package/build/facades/pairing.d.ts.map +1 -1
  28. package/build/facades/pairing.js +10 -8
  29. package/build/facades/pairing.js.map +1 -1
  30. package/build/facades/phoneNotifications.d.ts +0 -4
  31. package/build/facades/phoneNotifications.d.ts.map +1 -1
  32. package/build/facades/phoneNotifications.js +4 -14
  33. package/build/facades/phoneNotifications.js.map +1 -1
  34. package/build/index.d.ts +6 -3
  35. package/build/index.d.ts.map +1 -1
  36. package/build/index.js +4 -2
  37. package/build/index.js.map +1 -1
  38. package/build/internal.d.ts +2 -2
  39. package/build/internal.d.ts.map +1 -1
  40. package/build/internal.js +1 -1
  41. package/build/internal.js.map +1 -1
  42. package/build/react/MentraLiveOtaFlow.d.ts +38 -0
  43. package/build/react/MentraLiveOtaFlow.d.ts.map +1 -0
  44. package/build/react/MentraLiveOtaFlow.js +528 -0
  45. package/build/react/MentraLiveOtaFlow.js.map +1 -0
  46. package/build/react/index.d.ts +2 -0
  47. package/build/react/index.d.ts.map +1 -0
  48. package/build/react/index.js +2 -0
  49. package/build/react/index.js.map +1 -0
  50. package/build/react/useEngineSnapshot.d.ts +2 -0
  51. package/build/react/useEngineSnapshot.d.ts.map +1 -0
  52. package/build/react/useEngineSnapshot.js +14 -0
  53. package/build/react/useEngineSnapshot.js.map +1 -0
  54. package/build/runtime/bootstrap.d.ts +24 -1
  55. package/build/runtime/bootstrap.d.ts.map +1 -1
  56. package/build/runtime/bootstrap.js +17 -0
  57. package/build/runtime/bootstrap.js.map +1 -1
  58. package/build/runtime/scanQrSeam.d.ts +7 -0
  59. package/build/runtime/scanQrSeam.d.ts.map +1 -0
  60. package/build/runtime/scanQrSeam.js +16 -0
  61. package/build/runtime/scanQrSeam.js.map +1 -0
  62. package/build/services/AppRegistry.d.ts +18 -8
  63. package/build/services/AppRegistry.d.ts.map +1 -1
  64. package/build/services/AppRegistry.js +44 -45
  65. package/build/services/AppRegistry.js.map +1 -1
  66. package/build/services/AudioCloudUplink.d.ts +9 -3
  67. package/build/services/AudioCloudUplink.d.ts.map +1 -1
  68. package/build/services/AudioCloudUplink.js +9 -3
  69. package/build/services/AudioCloudUplink.js.map +1 -1
  70. package/build/services/AudioPlaybackService.d.ts +9 -1
  71. package/build/services/AudioPlaybackService.d.ts.map +1 -1
  72. package/build/services/AudioPlaybackService.js +77 -32
  73. package/build/services/AudioPlaybackService.js.map +1 -1
  74. package/build/services/BlobStore.d.ts +2 -1
  75. package/build/services/BlobStore.d.ts.map +1 -1
  76. package/build/services/BlobStore.js +17 -9
  77. package/build/services/BlobStore.js.map +1 -1
  78. package/build/services/CloudAudioSubscriptionSync.d.ts.map +1 -1
  79. package/build/services/CloudAudioSubscriptionSync.js +13 -1
  80. package/build/services/CloudAudioSubscriptionSync.js.map +1 -1
  81. package/build/services/CloudClientService.d.ts +15 -0
  82. package/build/services/CloudClientService.d.ts.map +1 -1
  83. package/build/services/CloudClientService.js +75 -0
  84. package/build/services/CloudClientService.js.map +1 -1
  85. package/build/services/ForegroundLocationPermission.d.ts +13 -0
  86. package/build/services/ForegroundLocationPermission.d.ts.map +1 -0
  87. package/build/services/ForegroundLocationPermission.js +12 -0
  88. package/build/services/ForegroundLocationPermission.js.map +1 -0
  89. package/build/services/GlassesSettingsSync.d.ts.map +1 -1
  90. package/build/services/GlassesSettingsSync.js +9 -3
  91. package/build/services/GlassesSettingsSync.js.map +1 -1
  92. package/build/services/GlassesStatusProjection.d.ts +2 -1
  93. package/build/services/GlassesStatusProjection.d.ts.map +1 -1
  94. package/build/services/GlassesStatusProjection.js +15 -8
  95. package/build/services/GlassesStatusProjection.js.map +1 -1
  96. package/build/services/HotspotOtaTransport.d.ts +29 -0
  97. package/build/services/HotspotOtaTransport.d.ts.map +1 -0
  98. package/build/services/HotspotOtaTransport.js +146 -0
  99. package/build/services/HotspotOtaTransport.js.map +1 -0
  100. package/build/services/HotspotShutdown.d.ts +17 -0
  101. package/build/services/HotspotShutdown.d.ts.map +1 -0
  102. package/build/services/HotspotShutdown.js +29 -0
  103. package/build/services/HotspotShutdown.js.map +1 -0
  104. package/build/services/LocalDisplayManager.d.ts +15 -0
  105. package/build/services/LocalDisplayManager.d.ts.map +1 -1
  106. package/build/services/LocalDisplayManager.js +106 -20
  107. package/build/services/LocalDisplayManager.js.map +1 -1
  108. package/build/services/LocalMiniappRuntime.d.ts +67 -1
  109. package/build/services/LocalMiniappRuntime.d.ts.map +1 -1
  110. package/build/services/LocalMiniappRuntime.js +486 -126
  111. package/build/services/LocalMiniappRuntime.js.map +1 -1
  112. package/build/services/LocalMiniappStorage.d.ts +32 -0
  113. package/build/services/LocalMiniappStorage.d.ts.map +1 -0
  114. package/build/services/LocalMiniappStorage.js +66 -0
  115. package/build/services/LocalMiniappStorage.js.map +1 -0
  116. package/build/services/LocalMiniappUserIdentity.d.ts +20 -0
  117. package/build/services/LocalMiniappUserIdentity.d.ts.map +1 -0
  118. package/build/services/LocalMiniappUserIdentity.js +43 -0
  119. package/build/services/LocalMiniappUserIdentity.js.map +1 -0
  120. package/build/services/MicStateCoordinator.d.ts +42 -1
  121. package/build/services/MicStateCoordinator.d.ts.map +1 -1
  122. package/build/services/MicStateCoordinator.js +141 -3
  123. package/build/services/MicStateCoordinator.js.map +1 -1
  124. package/build/services/MiniappLauncher.d.ts.map +1 -1
  125. package/build/services/MiniappLauncher.js +23 -3
  126. package/build/services/MiniappLauncher.js.map +1 -1
  127. package/build/services/MiniappLiveness.d.ts +12 -0
  128. package/build/services/MiniappLiveness.d.ts.map +1 -0
  129. package/build/services/MiniappLiveness.js +16 -0
  130. package/build/services/MiniappLiveness.js.map +1 -0
  131. package/build/services/OtaArtifactDownloader.d.ts +65 -0
  132. package/build/services/OtaArtifactDownloader.d.ts.map +1 -0
  133. package/build/services/OtaArtifactDownloader.js +226 -0
  134. package/build/services/OtaArtifactDownloader.js.map +1 -0
  135. package/build/services/OtaAutoChain.d.ts +34 -0
  136. package/build/services/OtaAutoChain.d.ts.map +1 -0
  137. package/build/services/OtaAutoChain.js +83 -0
  138. package/build/services/OtaAutoChain.js.map +1 -0
  139. package/build/services/OtaErrorMapping.d.ts +18 -0
  140. package/build/services/OtaErrorMapping.d.ts.map +1 -0
  141. package/build/services/OtaErrorMapping.js +63 -0
  142. package/build/services/OtaErrorMapping.js.map +1 -0
  143. package/build/services/OtaInstallCoordinator.d.ts +94 -14
  144. package/build/services/OtaInstallCoordinator.d.ts.map +1 -1
  145. package/build/services/OtaInstallCoordinator.js +574 -130
  146. package/build/services/OtaInstallCoordinator.js.map +1 -1
  147. package/build/services/OtaService.d.ts.map +1 -1
  148. package/build/services/OtaService.js +8 -1
  149. package/build/services/OtaService.js.map +1 -1
  150. package/build/services/OtaUpdateCheckService.d.ts +38 -3
  151. package/build/services/OtaUpdateCheckService.d.ts.map +1 -1
  152. package/build/services/OtaUpdateCheckService.js +142 -22
  153. package/build/services/OtaUpdateCheckService.js.map +1 -1
  154. package/build/services/PhoneCalendarService.d.ts.map +1 -1
  155. package/build/services/PhoneCalendarService.js +22 -1
  156. package/build/services/PhoneCalendarService.js.map +1 -1
  157. package/build/services/PhoneCameraFovCoordinator.d.ts +2 -0
  158. package/build/services/PhoneCameraFovCoordinator.d.ts.map +1 -1
  159. package/build/services/PhoneCameraFovCoordinator.js +14 -0
  160. package/build/services/PhoneCameraFovCoordinator.js.map +1 -1
  161. package/build/services/PhoneNotificationsSync.d.ts.map +1 -1
  162. package/build/services/PhoneNotificationsSync.js +12 -10
  163. package/build/services/PhoneNotificationsSync.js.map +1 -1
  164. package/build/services/PhonePhotoCoordinator.d.ts +10 -3
  165. package/build/services/PhonePhotoCoordinator.d.ts.map +1 -1
  166. package/build/services/PhonePhotoCoordinator.js +21 -3
  167. package/build/services/PhonePhotoCoordinator.js.map +1 -1
  168. package/build/services/PhoneStreamCoordinator.d.ts +8 -1
  169. package/build/services/PhoneStreamCoordinator.d.ts.map +1 -1
  170. package/build/services/PhoneStreamCoordinator.js +125 -13
  171. package/build/services/PhoneStreamCoordinator.js.map +1 -1
  172. package/build/services/PhoneVideoCoordinator.d.ts +2 -0
  173. package/build/services/PhoneVideoCoordinator.d.ts.map +1 -1
  174. package/build/services/PhoneVideoCoordinator.js +10 -0
  175. package/build/services/PhoneVideoCoordinator.js.map +1 -1
  176. package/build/services/SceneRenderer.d.ts.map +1 -1
  177. package/build/services/SceneRenderer.js +15 -0
  178. package/build/services/SceneRenderer.js.map +1 -1
  179. package/build/services/SupportProfileSync.d.ts +22 -0
  180. package/build/services/SupportProfileSync.d.ts.map +1 -0
  181. package/build/services/SupportProfileSync.js +213 -0
  182. package/build/services/SupportProfileSync.js.map +1 -0
  183. package/build/services/TtsTextSanitizer.d.ts +5 -0
  184. package/build/services/TtsTextSanitizer.d.ts.map +1 -0
  185. package/build/services/TtsTextSanitizer.js +61 -0
  186. package/build/services/TtsTextSanitizer.js.map +1 -0
  187. package/build/services/WifiAdbRequest.d.ts +17 -0
  188. package/build/services/WifiAdbRequest.d.ts.map +1 -0
  189. package/build/services/WifiAdbRequest.js +35 -0
  190. package/build/services/WifiAdbRequest.js.map +1 -0
  191. package/build/services/asg/asgCameraApi.d.ts +3 -0
  192. package/build/services/asg/asgCameraApi.d.ts.map +1 -1
  193. package/build/services/asg/asgCameraApi.js +72 -2
  194. package/build/services/asg/asgCameraApi.js.map +1 -1
  195. package/build/services/asg/gallerySyncService.d.ts.map +1 -1
  196. package/build/services/asg/gallerySyncService.js +26 -14
  197. package/build/services/asg/gallerySyncService.js.map +1 -1
  198. package/build/services/asg/localNetworkTransport.d.ts +2 -2
  199. package/build/services/asg/localNetworkTransport.d.ts.map +1 -1
  200. package/build/services/asg/localNetworkTransport.js +6 -6
  201. package/build/services/asg/localNetworkTransport.js.map +1 -1
  202. package/build/services/audioPlaybackAssets.d.ts +8 -0
  203. package/build/services/audioPlaybackAssets.d.ts.map +1 -0
  204. package/build/services/audioPlaybackAssets.js +7 -0
  205. package/build/services/audioPlaybackAssets.js.map +1 -0
  206. package/build/services/glassesClockSync.js +2 -2
  207. package/build/services/glassesClockSync.js.map +1 -1
  208. package/build/services/manifestActions.d.ts +7 -0
  209. package/build/services/manifestActions.d.ts.map +1 -0
  210. package/build/services/manifestActions.js +25 -0
  211. package/build/services/manifestActions.js.map +1 -0
  212. package/build/services/otaDisplayState.d.ts +22 -11
  213. package/build/services/otaDisplayState.d.ts.map +1 -1
  214. package/build/services/otaDisplayState.js +36 -14
  215. package/build/services/otaDisplayState.js.map +1 -1
  216. package/build/services/otaInstallPolicy.d.ts +15 -3
  217. package/build/services/otaInstallPolicy.d.ts.map +1 -1
  218. package/build/services/otaInstallPolicy.js +24 -3
  219. package/build/services/otaInstallPolicy.js.map +1 -1
  220. package/build/services/otaManifestUrl.d.ts +2 -0
  221. package/build/services/otaManifestUrl.d.ts.map +1 -0
  222. package/build/services/{asgOtaVersionUrl.js → otaManifestUrl.js} +15 -5
  223. package/build/services/otaManifestUrl.js.map +1 -0
  224. package/build/services/slimStreamStatus.d.ts +11 -0
  225. package/build/services/slimStreamStatus.d.ts.map +1 -1
  226. package/build/services/slimStreamStatus.js +14 -4
  227. package/build/services/slimStreamStatus.js.map +1 -1
  228. package/build/stores/apps.d.ts.map +1 -1
  229. package/build/stores/apps.js +11 -0
  230. package/build/stores/apps.js.map +1 -1
  231. package/build/stores/bluetoothSettingKeys.d.ts.map +1 -1
  232. package/build/stores/bluetoothSettingKeys.js +2 -0
  233. package/build/stores/bluetoothSettingKeys.js.map +1 -1
  234. package/build/stores/gallerySync.d.ts +2 -0
  235. package/build/stores/gallerySync.d.ts.map +1 -1
  236. package/build/stores/gallerySync.js +2 -0
  237. package/build/stores/gallerySync.js.map +1 -1
  238. package/build/stores/glasses.d.ts.map +1 -1
  239. package/build/stores/glasses.js +3 -0
  240. package/build/stores/glasses.js.map +1 -1
  241. package/build/stores/settings.d.ts +17 -0
  242. package/build/stores/settings.d.ts.map +1 -1
  243. package/build/stores/settings.js +152 -19
  244. package/build/stores/settings.js.map +1 -1
  245. package/build/types/applet.d.ts +2 -0
  246. package/build/types/applet.d.ts.map +1 -1
  247. package/build/types/applet.js.map +1 -1
  248. package/build/types/enums.d.ts +1 -0
  249. package/build/types/enums.d.ts.map +1 -1
  250. package/build/types/enums.js +1 -0
  251. package/build/types/enums.js.map +1 -1
  252. package/build/types/hardware.d.ts +1 -0
  253. package/build/types/hardware.d.ts.map +1 -1
  254. package/build/types/hardware.js +14 -0
  255. package/build/types/hardware.js.map +1 -1
  256. package/build/utils/configuredDevHost.d.ts +6 -0
  257. package/build/utils/configuredDevHost.d.ts.map +1 -0
  258. package/build/utils/configuredDevHost.js +19 -0
  259. package/build/utils/configuredDevHost.js.map +1 -0
  260. package/build/utils/devMiniappLaunch.d.ts +19 -8
  261. package/build/utils/devMiniappLaunch.d.ts.map +1 -1
  262. package/build/utils/devMiniappLaunch.js +144 -21
  263. package/build/utils/devMiniappLaunch.js.map +1 -1
  264. package/build/utils/diagnosticContext.d.ts.map +1 -1
  265. package/build/utils/diagnosticContext.js +15 -17
  266. package/build/utils/diagnosticContext.js.map +1 -1
  267. package/build/utils/hardware/hardware.d.ts.map +1 -1
  268. package/build/utils/hardware/hardware.js +7 -3
  269. package/build/utils/hardware/hardware.js.map +1 -1
  270. package/build/utils/miniappDiagnostics.d.ts +64 -0
  271. package/build/utils/miniappDiagnostics.d.ts.map +1 -0
  272. package/build/utils/miniappDiagnostics.js +173 -0
  273. package/build/utils/miniappDiagnostics.js.map +1 -0
  274. package/build/utils/timers/timers.d.ts.map +1 -1
  275. package/build/utils/timers/timers.js +55 -18
  276. package/build/utils/timers/timers.js.map +1 -1
  277. package/package.json +27 -18
  278. package/src/assets/silence.wav +0 -0
  279. package/src/engine.ts +7 -2
  280. package/src/facades/dev.ts +9 -5
  281. package/src/facades/gallery.ts +1 -1
  282. package/src/facades/glasses.ts +17 -4
  283. package/src/facades/glassesSettings.ts +5 -0
  284. package/src/facades/miniapps.ts +7 -0
  285. package/src/facades/ota.ts +19 -4
  286. package/src/facades/pairing.ts +11 -7
  287. package/src/facades/phoneNotifications.ts +4 -13
  288. package/src/index.ts +26 -2
  289. package/src/internal.ts +2 -1
  290. package/src/react/MentraLiveOtaFlow.tsx +856 -0
  291. package/src/react/index.ts +7 -0
  292. package/src/react/useEngineSnapshot.ts +16 -0
  293. package/src/runtime/bootstrap.ts +33 -1
  294. package/src/runtime/scanQrSeam.ts +20 -0
  295. package/src/services/AppRegistry.ts +72 -48
  296. package/src/services/AudioCloudUplink.ts +9 -3
  297. package/src/services/AudioPlaybackService.ts +94 -34
  298. package/src/services/BlobStore.ts +22 -9
  299. package/src/services/CloudAudioSubscriptionSync.ts +13 -1
  300. package/src/services/CloudClientService.ts +74 -0
  301. package/src/services/ForegroundLocationPermission.ts +24 -0
  302. package/src/services/GlassesSettingsSync.ts +9 -3
  303. package/src/services/GlassesStatusProjection.ts +16 -8
  304. package/src/services/HotspotOtaTransport.ts +184 -0
  305. package/src/services/HotspotShutdown.ts +41 -0
  306. package/src/services/LocalDisplayManager.ts +112 -21
  307. package/src/services/LocalMiniappRuntime.ts +576 -130
  308. package/src/services/LocalMiniappStorage.ts +82 -0
  309. package/src/services/LocalMiniappUserIdentity.ts +46 -0
  310. package/src/services/MicStateCoordinator.ts +169 -4
  311. package/src/services/MiniappLauncher.ts +30 -3
  312. package/src/services/MiniappLiveness.ts +24 -0
  313. package/src/services/OtaArtifactDownloader.ts +312 -0
  314. package/src/services/OtaAutoChain.ts +106 -0
  315. package/src/services/OtaErrorMapping.ts +80 -0
  316. package/src/services/OtaInstallCoordinator.ts +645 -143
  317. package/src/services/OtaService.ts +11 -5
  318. package/src/services/OtaUpdateCheckService.ts +180 -20
  319. package/src/services/PhoneCalendarService.ts +27 -4
  320. package/src/services/PhoneCameraFovCoordinator.ts +15 -0
  321. package/src/services/PhoneNotificationsSync.ts +12 -10
  322. package/src/services/PhonePhotoCoordinator.ts +33 -7
  323. package/src/services/PhoneStreamCoordinator.ts +139 -25
  324. package/src/services/PhoneVideoCoordinator.ts +11 -0
  325. package/src/services/SceneRenderer.ts +16 -0
  326. package/src/services/SupportProfileSync.ts +218 -0
  327. package/src/services/TtsTextSanitizer.ts +66 -0
  328. package/src/services/WifiAdbRequest.ts +53 -0
  329. package/src/services/asg/asgCameraApi.ts +99 -8
  330. package/src/services/asg/gallerySyncService.ts +28 -19
  331. package/src/services/asg/localNetworkTransport.ts +7 -11
  332. package/src/services/audioPlaybackAssets.ts +8 -0
  333. package/src/services/glassesClockSync.ts +2 -2
  334. package/src/services/manifestActions.ts +30 -0
  335. package/src/services/otaDisplayState.ts +57 -16
  336. package/src/services/otaInstallPolicy.ts +29 -3
  337. package/src/services/{asgOtaVersionUrl.ts → otaManifestUrl.ts} +16 -4
  338. package/src/services/slimStreamStatus.ts +16 -5
  339. package/src/stores/apps.ts +12 -0
  340. package/src/stores/bluetoothSettingKeys.ts +2 -0
  341. package/src/stores/gallerySync.ts +4 -0
  342. package/src/stores/glasses.ts +3 -0
  343. package/src/stores/settings.ts +174 -21
  344. package/src/types/applet.ts +2 -0
  345. package/src/types/enums.ts +2 -1
  346. package/src/types/hardware.ts +17 -0
  347. package/src/utils/configuredDevHost.ts +17 -0
  348. package/src/utils/devMiniappLaunch.ts +151 -23
  349. package/src/utils/diagnosticContext.ts +17 -17
  350. package/src/utils/hardware/hardware.ts +7 -9
  351. package/src/utils/miniappDiagnostics.ts +226 -0
  352. package/src/utils/timers/timers.ts +57 -21
  353. package/build/services/asgOtaVersionUrl.d.ts +0 -2
  354. package/build/services/asgOtaVersionUrl.d.ts.map +0 -1
  355. package/build/services/asgOtaVersionUrl.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MentraLiveOtaFlow.js","sourceRoot":"","sources":["../../src/react/MentraLiveOtaFlow.tsx"],"names":[],"mappings":"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","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,2 @@
1
+ export { MentraLiveOtaFlow, type MentraLiveOtaFlowPage, type MentraLiveOtaFlowProps, type MentraLiveOtaFlowTheme, type MentraLiveOtaFlowTranslate, } from "./MentraLiveOtaFlow";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ export { MentraLiveOtaFlow, } from "./MentraLiveOtaFlow";
2
+ //# sourceMappingURL=index.js.map
@@ -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,2 @@
1
+ export declare function useEngineSnapshot<T>(getSnapshot: () => T, subscribe: (onChange: () => void) => () => void): T;
2
+ //# sourceMappingURL=useEngineSnapshot.d.ts.map
@@ -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;CAC7D;AAED,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,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,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"}
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;AAyDH,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,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,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) => Promise<void> | void\n}\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/** 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/** 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"]}
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, DeclaredAction } from "../types/applet";
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;
@@ -224,6 +227,12 @@ export interface DevAppRecord {
224
227
  iconUrl: string;
225
228
  devUrl: string;
226
229
  devPort?: number;
230
+ /**
231
+ * Bonjour / mDNS hostname from the QR (`ComputerName.local`). Used as a
232
+ * failover host when the raw LAN IP in `devUrl` goes stale after a Wi-Fi
233
+ * change — phones that resolve `.local` can relaunch without re-scanning.
234
+ */
235
+ mdnsHost?: string;
227
236
  type?: AppletType;
228
237
  permissions?: Array<string | {
229
238
  type: string;
@@ -240,6 +249,7 @@ export interface DevAppRecord {
240
249
  id?: unknown;
241
250
  description?: unknown;
242
251
  parameters?: unknown;
252
+ outputSchema?: unknown;
243
253
  }>;
244
254
  /** Legacy single-slot migration field. New records use the real packageName directly. */
245
255
  sourcePackageName?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"AppRegistry.d.ts","sourceRoot":"","sources":["../../src/services/AppRegistry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AppRegistry.d.ts","sourceRoot":"","sources":["../../src/services/AppRegistry.ts"],"names":[],"mappings":"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"}