@mentra/engine 0.1.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (842) hide show
  1. package/README.md +79 -0
  2. package/build/devtools.d.ts +11 -0
  3. package/build/devtools.d.ts.map +1 -0
  4. package/build/devtools.js +13 -0
  5. package/build/devtools.js.map +1 -0
  6. package/build/engine.d.ts +261 -0
  7. package/build/engine.d.ts.map +1 -0
  8. package/build/engine.js +170 -0
  9. package/build/engine.js.map +1 -0
  10. package/build/facades/dev.d.ts +58 -0
  11. package/build/facades/dev.d.ts.map +1 -0
  12. package/build/facades/dev.js +189 -0
  13. package/build/facades/dev.js.map +1 -0
  14. package/build/facades/display.d.ts +21 -0
  15. package/build/facades/display.d.ts.map +1 -0
  16. package/build/facades/display.js +17 -0
  17. package/build/facades/display.js.map +1 -0
  18. package/build/facades/displayMirror.d.ts +15 -0
  19. package/build/facades/displayMirror.d.ts.map +1 -0
  20. package/build/facades/displayMirror.js +29 -0
  21. package/build/facades/displayMirror.js.map +1 -0
  22. package/build/facades/gallery.d.ts +62 -0
  23. package/build/facades/gallery.d.ts.map +1 -0
  24. package/build/facades/gallery.js +61 -0
  25. package/build/facades/gallery.js.map +1 -0
  26. package/build/facades/glasses.d.ts +141 -0
  27. package/build/facades/glasses.d.ts.map +1 -0
  28. package/build/facades/glasses.js +199 -0
  29. package/build/facades/glasses.js.map +1 -0
  30. package/build/facades/glassesSettings.d.ts +13 -0
  31. package/build/facades/glassesSettings.d.ts.map +1 -0
  32. package/build/facades/glassesSettings.js +54 -0
  33. package/build/facades/glassesSettings.js.map +1 -0
  34. package/build/facades/glassesWifi.d.ts +25 -0
  35. package/build/facades/glassesWifi.d.ts.map +1 -0
  36. package/build/facades/glassesWifi.js +57 -0
  37. package/build/facades/glassesWifi.js.map +1 -0
  38. package/build/facades/miniapps.d.ts +43 -0
  39. package/build/facades/miniapps.d.ts.map +1 -0
  40. package/build/facades/miniapps.js +49 -0
  41. package/build/facades/miniapps.js.map +1 -0
  42. package/build/facades/notifications.d.ts +13 -0
  43. package/build/facades/notifications.d.ts.map +1 -0
  44. package/build/facades/notifications.js +12 -0
  45. package/build/facades/notifications.js.map +1 -0
  46. package/build/facades/ota.d.ts +103 -0
  47. package/build/facades/ota.d.ts.map +1 -0
  48. package/build/facades/ota.js +156 -0
  49. package/build/facades/ota.js.map +1 -0
  50. package/build/facades/pairing.d.ts +114 -0
  51. package/build/facades/pairing.d.ts.map +1 -0
  52. package/build/facades/pairing.js +275 -0
  53. package/build/facades/pairing.js.map +1 -0
  54. package/build/facades/permissions.d.ts +33 -0
  55. package/build/facades/permissions.d.ts.map +1 -0
  56. package/build/facades/permissions.js +155 -0
  57. package/build/facades/permissions.js.map +1 -0
  58. package/build/facades/phoneNotifications.d.ts +21 -0
  59. package/build/facades/phoneNotifications.d.ts.map +1 -0
  60. package/build/facades/phoneNotifications.js +51 -0
  61. package/build/facades/phoneNotifications.js.map +1 -0
  62. package/build/facades/reports.d.ts +36 -0
  63. package/build/facades/reports.d.ts.map +1 -0
  64. package/build/facades/reports.js +134 -0
  65. package/build/facades/reports.js.map +1 -0
  66. package/build/facades/session.d.ts +21 -0
  67. package/build/facades/session.d.ts.map +1 -0
  68. package/build/facades/session.js +52 -0
  69. package/build/facades/session.js.map +1 -0
  70. package/build/facades/settings.d.ts +37 -0
  71. package/build/facades/settings.d.ts.map +1 -0
  72. package/build/facades/settings.js +55 -0
  73. package/build/facades/settings.js.map +1 -0
  74. package/build/facades/speech.d.ts +30 -0
  75. package/build/facades/speech.d.ts.map +1 -0
  76. package/build/facades/speech.js +37 -0
  77. package/build/facades/speech.js.map +1 -0
  78. package/build/index.d.ts +43 -0
  79. package/build/index.d.ts.map +1 -0
  80. package/build/index.js +45 -0
  81. package/build/index.js.map +1 -0
  82. package/build/internal.d.ts +67 -0
  83. package/build/internal.d.ts.map +1 -0
  84. package/build/internal.js +90 -0
  85. package/build/internal.js.map +1 -0
  86. package/build/runtime/bootstrap.d.ts +83 -0
  87. package/build/runtime/bootstrap.d.ts.map +1 -0
  88. package/build/runtime/bootstrap.js +56 -0
  89. package/build/runtime/bootstrap.js.map +1 -0
  90. package/build/runtime/config.d.ts +146 -0
  91. package/build/runtime/config.d.ts.map +1 -0
  92. package/build/runtime/config.js +18 -0
  93. package/build/runtime/config.js.map +1 -0
  94. package/build/runtime/streamConfig.d.ts +4 -0
  95. package/build/runtime/streamConfig.d.ts.map +1 -0
  96. package/build/runtime/streamConfig.js +38 -0
  97. package/build/runtime/streamConfig.js.map +1 -0
  98. package/build/services/AppRegistry.d.ts +269 -0
  99. package/build/services/AppRegistry.d.ts.map +1 -0
  100. package/build/services/AppRegistry.js +1079 -0
  101. package/build/services/AppRegistry.js.map +1 -0
  102. package/build/services/AudioCloudUplink.d.ts +9 -0
  103. package/build/services/AudioCloudUplink.d.ts.map +1 -0
  104. package/build/services/AudioCloudUplink.js +48 -0
  105. package/build/services/AudioCloudUplink.js.map +1 -0
  106. package/build/services/AudioPlaybackService.d.ts +175 -0
  107. package/build/services/AudioPlaybackService.d.ts.map +1 -0
  108. package/build/services/AudioPlaybackService.js +705 -0
  109. package/build/services/AudioPlaybackService.js.map +1 -0
  110. package/build/services/AutomaticReportResult.d.ts +20 -0
  111. package/build/services/AutomaticReportResult.d.ts.map +1 -0
  112. package/build/services/AutomaticReportResult.js +29 -0
  113. package/build/services/AutomaticReportResult.js.map +1 -0
  114. package/build/services/BlobStore.d.ts +91 -0
  115. package/build/services/BlobStore.d.ts.map +1 -0
  116. package/build/services/BlobStore.js +668 -0
  117. package/build/services/BlobStore.js.map +1 -0
  118. package/build/services/CaptionsTesterReportService.d.ts +4 -0
  119. package/build/services/CaptionsTesterReportService.d.ts.map +1 -0
  120. package/build/services/CaptionsTesterReportService.js +80 -0
  121. package/build/services/CaptionsTesterReportService.js.map +1 -0
  122. package/build/services/CloudAudioSubscriptionSync.d.ts +24 -0
  123. package/build/services/CloudAudioSubscriptionSync.d.ts.map +1 -0
  124. package/build/services/CloudAudioSubscriptionSync.js +39 -0
  125. package/build/services/CloudAudioSubscriptionSync.js.map +1 -0
  126. package/build/services/CloudClientService.d.ts +143 -0
  127. package/build/services/CloudClientService.d.ts.map +1 -0
  128. package/build/services/CloudClientService.js +644 -0
  129. package/build/services/CloudClientService.js.map +1 -0
  130. package/build/services/CloudTranscriptE2EMetrics.d.ts +4 -0
  131. package/build/services/CloudTranscriptE2EMetrics.d.ts.map +1 -0
  132. package/build/services/CloudTranscriptE2EMetrics.js +24 -0
  133. package/build/services/CloudTranscriptE2EMetrics.js.map +1 -0
  134. package/build/services/ConnectionCoordinator.d.ts +51 -0
  135. package/build/services/ConnectionCoordinator.d.ts.map +1 -0
  136. package/build/services/ConnectionCoordinator.js +34 -0
  137. package/build/services/ConnectionCoordinator.js.map +1 -0
  138. package/build/services/DevServerBridge.d.ts +63 -0
  139. package/build/services/DevServerBridge.d.ts.map +1 -0
  140. package/build/services/DevServerBridge.js +294 -0
  141. package/build/services/DevServerBridge.js.map +1 -0
  142. package/build/services/DeviceEventRouter.d.ts +3 -0
  143. package/build/services/DeviceEventRouter.d.ts.map +1 -0
  144. package/build/services/DeviceEventRouter.js +190 -0
  145. package/build/services/DeviceEventRouter.js.map +1 -0
  146. package/build/services/DeviceStoreHydration.d.ts +38 -0
  147. package/build/services/DeviceStoreHydration.d.ts.map +1 -0
  148. package/build/services/DeviceStoreHydration.js +124 -0
  149. package/build/services/DeviceStoreHydration.js.map +1 -0
  150. package/build/services/DisplayProcessor.d.ts +223 -0
  151. package/build/services/DisplayProcessor.d.ts.map +1 -0
  152. package/build/services/DisplayProcessor.js +552 -0
  153. package/build/services/DisplayProcessor.js.map +1 -0
  154. package/build/services/GlassesReadiness.d.ts +41 -0
  155. package/build/services/GlassesReadiness.d.ts.map +1 -0
  156. package/build/services/GlassesReadiness.js +82 -0
  157. package/build/services/GlassesReadiness.js.map +1 -0
  158. package/build/services/GlassesSettingsSync.d.ts +33 -0
  159. package/build/services/GlassesSettingsSync.d.ts.map +1 -0
  160. package/build/services/GlassesSettingsSync.js +121 -0
  161. package/build/services/GlassesSettingsSync.js.map +1 -0
  162. package/build/services/GlassesStatusProjection.d.ts +3 -0
  163. package/build/services/GlassesStatusProjection.d.ts.map +1 -0
  164. package/build/services/GlassesStatusProjection.js +65 -0
  165. package/build/services/GlassesStatusProjection.js.map +1 -0
  166. package/build/services/HeadingService.d.ts +27 -0
  167. package/build/services/HeadingService.d.ts.map +1 -0
  168. package/build/services/HeadingService.js +96 -0
  169. package/build/services/HeadingService.js.map +1 -0
  170. package/build/services/LocalDisplayManager.d.ts +139 -0
  171. package/build/services/LocalDisplayManager.d.ts.map +1 -0
  172. package/build/services/LocalDisplayManager.js +579 -0
  173. package/build/services/LocalDisplayManager.js.map +1 -0
  174. package/build/services/LocalMiniappRuntime.d.ts +439 -0
  175. package/build/services/LocalMiniappRuntime.d.ts.map +1 -0
  176. package/build/services/LocalMiniappRuntime.js +3695 -0
  177. package/build/services/LocalMiniappRuntime.js.map +1 -0
  178. package/build/services/LocalSttFallbackCoordinator.d.ts +57 -0
  179. package/build/services/LocalSttFallbackCoordinator.d.ts.map +1 -0
  180. package/build/services/LocalSttFallbackCoordinator.js +137 -0
  181. package/build/services/LocalSttFallbackCoordinator.js.map +1 -0
  182. package/build/services/MentraJSCrashController.d.ts +97 -0
  183. package/build/services/MentraJSCrashController.d.ts.map +1 -0
  184. package/build/services/MentraJSCrashController.js +138 -0
  185. package/build/services/MentraJSCrashController.js.map +1 -0
  186. package/build/services/MentraJSCrashloopReportService.d.ts +9 -0
  187. package/build/services/MentraJSCrashloopReportService.d.ts.map +1 -0
  188. package/build/services/MentraJSCrashloopReportService.js +54 -0
  189. package/build/services/MentraJSCrashloopReportService.js.map +1 -0
  190. package/build/services/MentraJSLogPipeline.d.ts +87 -0
  191. package/build/services/MentraJSLogPipeline.d.ts.map +1 -0
  192. package/build/services/MentraJSLogPipeline.js +137 -0
  193. package/build/services/MentraJSLogPipeline.js.map +1 -0
  194. package/build/services/MentraJSRouter.d.ts +203 -0
  195. package/build/services/MentraJSRouter.d.ts.map +1 -0
  196. package/build/services/MentraJSRouter.js +480 -0
  197. package/build/services/MentraJSRouter.js.map +1 -0
  198. package/build/services/MentraUIRouter.d.ts +137 -0
  199. package/build/services/MentraUIRouter.d.ts.map +1 -0
  200. package/build/services/MentraUIRouter.js +210 -0
  201. package/build/services/MentraUIRouter.js.map +1 -0
  202. package/build/services/MicStateCoordinator.d.ts +37 -0
  203. package/build/services/MicStateCoordinator.d.ts.map +1 -0
  204. package/build/services/MicStateCoordinator.js +81 -0
  205. package/build/services/MicStateCoordinator.js.map +1 -0
  206. package/build/services/MiniappEngine.d.ts +31 -0
  207. package/build/services/MiniappEngine.d.ts.map +1 -0
  208. package/build/services/MiniappEngine.js +119 -0
  209. package/build/services/MiniappEngine.js.map +1 -0
  210. package/build/services/MiniappLauncher.d.ts +129 -0
  211. package/build/services/MiniappLauncher.d.ts.map +1 -0
  212. package/build/services/MiniappLauncher.js +291 -0
  213. package/build/services/MiniappLauncher.js.map +1 -0
  214. package/build/services/MiniappRunningRegistry.d.ts +24 -0
  215. package/build/services/MiniappRunningRegistry.d.ts.map +1 -0
  216. package/build/services/MiniappRunningRegistry.js +52 -0
  217. package/build/services/MiniappRunningRegistry.js.map +1 -0
  218. package/build/services/NativeHttpResponse.d.ts +3 -0
  219. package/build/services/NativeHttpResponse.d.ts.map +1 -0
  220. package/build/services/NativeHttpResponse.js +6 -0
  221. package/build/services/NativeHttpResponse.js.map +1 -0
  222. package/build/services/NavigationHandlers.d.ts +90 -0
  223. package/build/services/NavigationHandlers.d.ts.map +1 -0
  224. package/build/services/NavigationHandlers.js +379 -0
  225. package/build/services/NavigationHandlers.js.map +1 -0
  226. package/build/services/NavigationService.d.ts +254 -0
  227. package/build/services/NavigationService.d.ts.map +1 -0
  228. package/build/services/NavigationService.js +553 -0
  229. package/build/services/NavigationService.js.map +1 -0
  230. package/build/services/NotificationsEmitter.d.ts +28 -0
  231. package/build/services/NotificationsEmitter.d.ts.map +1 -0
  232. package/build/services/NotificationsEmitter.js +22 -0
  233. package/build/services/NotificationsEmitter.js.map +1 -0
  234. package/build/services/OfflineSpeechModelService.d.ts +33 -0
  235. package/build/services/OfflineSpeechModelService.d.ts.map +1 -0
  236. package/build/services/OfflineSpeechModelService.js +136 -0
  237. package/build/services/OfflineSpeechModelService.js.map +1 -0
  238. package/build/services/OtaInstallCoordinator.d.ts +195 -0
  239. package/build/services/OtaInstallCoordinator.d.ts.map +1 -0
  240. package/build/services/OtaInstallCoordinator.js +1047 -0
  241. package/build/services/OtaInstallCoordinator.js.map +1 -0
  242. package/build/services/OtaService.d.ts +3 -0
  243. package/build/services/OtaService.d.ts.map +1 -0
  244. package/build/services/OtaService.js +65 -0
  245. package/build/services/OtaService.js.map +1 -0
  246. package/build/services/OtaUpdateCheckService.d.ts +65 -0
  247. package/build/services/OtaUpdateCheckService.d.ts.map +1 -0
  248. package/build/services/OtaUpdateCheckService.js +260 -0
  249. package/build/services/OtaUpdateCheckService.js.map +1 -0
  250. package/build/services/PairingIdentity.d.ts +80 -0
  251. package/build/services/PairingIdentity.d.ts.map +1 -0
  252. package/build/services/PairingIdentity.js +145 -0
  253. package/build/services/PairingIdentity.js.map +1 -0
  254. package/build/services/PhoneCalendarHelpers.d.ts +32 -0
  255. package/build/services/PhoneCalendarHelpers.d.ts.map +1 -0
  256. package/build/services/PhoneCalendarHelpers.js +157 -0
  257. package/build/services/PhoneCalendarHelpers.js.map +1 -0
  258. package/build/services/PhoneCalendarService.d.ts +5 -0
  259. package/build/services/PhoneCalendarService.d.ts.map +1 -0
  260. package/build/services/PhoneCalendarService.js +24 -0
  261. package/build/services/PhoneCalendarService.js.map +1 -0
  262. package/build/services/PhoneCameraFovCoordinator.d.ts +28 -0
  263. package/build/services/PhoneCameraFovCoordinator.d.ts.map +1 -0
  264. package/build/services/PhoneCameraFovCoordinator.js +180 -0
  265. package/build/services/PhoneCameraFovCoordinator.js.map +1 -0
  266. package/build/services/PhoneLocationService.d.ts +36 -0
  267. package/build/services/PhoneLocationService.d.ts.map +1 -0
  268. package/build/services/PhoneLocationService.js +115 -0
  269. package/build/services/PhoneLocationService.js.map +1 -0
  270. package/build/services/PhoneNotificationsSync.d.ts +3 -0
  271. package/build/services/PhoneNotificationsSync.d.ts.map +1 -0
  272. package/build/services/PhoneNotificationsSync.js +35 -0
  273. package/build/services/PhoneNotificationsSync.js.map +1 -0
  274. package/build/services/PhonePhotoCoordinator.d.ts +103 -0
  275. package/build/services/PhonePhotoCoordinator.d.ts.map +1 -0
  276. package/build/services/PhonePhotoCoordinator.js +326 -0
  277. package/build/services/PhonePhotoCoordinator.js.map +1 -0
  278. package/build/services/PhoneStreamCoordinator.d.ts +168 -0
  279. package/build/services/PhoneStreamCoordinator.d.ts.map +1 -0
  280. package/build/services/PhoneStreamCoordinator.js +632 -0
  281. package/build/services/PhoneStreamCoordinator.js.map +1 -0
  282. package/build/services/PhoneVideoCoordinator.d.ts +50 -0
  283. package/build/services/PhoneVideoCoordinator.d.ts.map +1 -0
  284. package/build/services/PhoneVideoCoordinator.js +147 -0
  285. package/build/services/PhoneVideoCoordinator.js.map +1 -0
  286. package/build/services/STTModelManager.d.ts +65 -0
  287. package/build/services/STTModelManager.d.ts.map +1 -0
  288. package/build/services/STTModelManager.js +292 -0
  289. package/build/services/STTModelManager.js.map +1 -0
  290. package/build/services/SceneRenderer.d.ts +90 -0
  291. package/build/services/SceneRenderer.d.ts.map +1 -0
  292. package/build/services/SceneRenderer.js +248 -0
  293. package/build/services/SceneRenderer.js.map +1 -0
  294. package/build/services/SentenceTtsPipeline.d.ts +31 -0
  295. package/build/services/SentenceTtsPipeline.d.ts.map +1 -0
  296. package/build/services/SentenceTtsPipeline.js +67 -0
  297. package/build/services/SentenceTtsPipeline.js.map +1 -0
  298. package/build/services/StreamLifecycleController.d.ts +67 -0
  299. package/build/services/StreamLifecycleController.d.ts.map +1 -0
  300. package/build/services/StreamLifecycleController.js +152 -0
  301. package/build/services/StreamLifecycleController.js.map +1 -0
  302. package/build/services/TTSModelManager.d.ts +90 -0
  303. package/build/services/TTSModelManager.d.ts.map +1 -0
  304. package/build/services/TTSModelManager.js +366 -0
  305. package/build/services/TTSModelManager.js.map +1 -0
  306. package/build/services/TranscriptionRouting.d.ts +12 -0
  307. package/build/services/TranscriptionRouting.d.ts.map +1 -0
  308. package/build/services/TranscriptionRouting.js +24 -0
  309. package/build/services/TranscriptionRouting.js.map +1 -0
  310. package/build/services/WebviewBridge.d.ts +22 -0
  311. package/build/services/WebviewBridge.d.ts.map +1 -0
  312. package/build/services/WebviewBridge.js +47 -0
  313. package/build/services/WebviewBridge.js.map +1 -0
  314. package/build/services/asg/GalleryMediaIntegrityReportService.d.ts +17 -0
  315. package/build/services/asg/GalleryMediaIntegrityReportService.d.ts.map +1 -0
  316. package/build/services/asg/GalleryMediaIntegrityReportService.js +43 -0
  317. package/build/services/asg/GalleryMediaIntegrityReportService.js.map +1 -0
  318. package/build/services/asg/asgCameraApi.d.ts +205 -0
  319. package/build/services/asg/asgCameraApi.d.ts.map +1 -0
  320. package/build/services/asg/asgCameraApi.js +1410 -0
  321. package/build/services/asg/asgCameraApi.js.map +1 -0
  322. package/build/services/asg/cameraRollExportCoordinator.d.ts +60 -0
  323. package/build/services/asg/cameraRollExportCoordinator.d.ts.map +1 -0
  324. package/build/services/asg/cameraRollExportCoordinator.js +618 -0
  325. package/build/services/asg/cameraRollExportCoordinator.js.map +1 -0
  326. package/build/services/asg/cameraRollExportLedger.d.ts +44 -0
  327. package/build/services/asg/cameraRollExportLedger.d.ts.map +1 -0
  328. package/build/services/asg/cameraRollExportLedger.js +78 -0
  329. package/build/services/asg/cameraRollExportLedger.js.map +1 -0
  330. package/build/services/asg/galleryMediaValidation.d.ts +29 -0
  331. package/build/services/asg/galleryMediaValidation.d.ts.map +1 -0
  332. package/build/services/asg/galleryMediaValidation.js +149 -0
  333. package/build/services/asg/galleryMediaValidation.js.map +1 -0
  334. package/build/services/asg/galleryNotices.d.ts +33 -0
  335. package/build/services/asg/galleryNotices.d.ts.map +1 -0
  336. package/build/services/asg/galleryNotices.js +29 -0
  337. package/build/services/asg/galleryNotices.js.map +1 -0
  338. package/build/services/asg/galleryPathMigration.d.ts +3 -0
  339. package/build/services/asg/galleryPathMigration.d.ts.map +1 -0
  340. package/build/services/asg/galleryPathMigration.js +26 -0
  341. package/build/services/asg/galleryPathMigration.js.map +1 -0
  342. package/build/services/asg/gallerySettingsService.d.ts +20 -0
  343. package/build/services/asg/gallerySettingsService.d.ts.map +1 -0
  344. package/build/services/asg/gallerySettingsService.js +53 -0
  345. package/build/services/asg/gallerySettingsService.js.map +1 -0
  346. package/build/services/asg/gallerySyncNotifications.d.ts +56 -0
  347. package/build/services/asg/gallerySyncNotifications.d.ts.map +1 -0
  348. package/build/services/asg/gallerySyncNotifications.js +198 -0
  349. package/build/services/asg/gallerySyncNotifications.js.map +1 -0
  350. package/build/services/asg/gallerySyncService.d.ts +137 -0
  351. package/build/services/asg/gallerySyncService.d.ts.map +1 -0
  352. package/build/services/asg/gallerySyncService.js +1933 -0
  353. package/build/services/asg/gallerySyncService.js.map +1 -0
  354. package/build/services/asg/galleryTransferLedger.d.ts +58 -0
  355. package/build/services/asg/galleryTransferLedger.d.ts.map +1 -0
  356. package/build/services/asg/galleryTransferLedger.js +225 -0
  357. package/build/services/asg/galleryTransferLedger.js.map +1 -0
  358. package/build/services/asg/localNetworkTransport.d.ts +15 -0
  359. package/build/services/asg/localNetworkTransport.d.ts.map +1 -0
  360. package/build/services/asg/localNetworkTransport.js +144 -0
  361. package/build/services/asg/localNetworkTransport.js.map +1 -0
  362. package/build/services/asg/localStorageService.d.ts +146 -0
  363. package/build/services/asg/localStorageService.d.ts.map +1 -0
  364. package/build/services/asg/localStorageService.js +572 -0
  365. package/build/services/asg/localStorageService.js.map +1 -0
  366. package/build/services/asg/mediaProcessingQueue.d.ts +70 -0
  367. package/build/services/asg/mediaProcessingQueue.d.ts.map +1 -0
  368. package/build/services/asg/mediaProcessingQueue.js +451 -0
  369. package/build/services/asg/mediaProcessingQueue.js.map +1 -0
  370. package/build/services/asgOtaVersionUrl.d.ts +2 -0
  371. package/build/services/asgOtaVersionUrl.d.ts.map +1 -0
  372. package/build/services/asgOtaVersionUrl.js +36 -0
  373. package/build/services/asgOtaVersionUrl.js.map +1 -0
  374. package/build/services/blobPaths.d.ts +31 -0
  375. package/build/services/blobPaths.d.ts.map +1 -0
  376. package/build/services/blobPaths.js +86 -0
  377. package/build/services/blobPaths.js.map +1 -0
  378. package/build/services/cloudStreamApi.d.ts +59 -0
  379. package/build/services/cloudStreamApi.d.ts.map +1 -0
  380. package/build/services/cloudStreamApi.js +81 -0
  381. package/build/services/cloudStreamApi.js.map +1 -0
  382. package/build/services/gallerySyncClock.d.ts +17 -0
  383. package/build/services/gallerySyncClock.d.ts.map +1 -0
  384. package/build/services/gallerySyncClock.js +21 -0
  385. package/build/services/gallerySyncClock.js.map +1 -0
  386. package/build/services/glassesClockSync.d.ts +20 -0
  387. package/build/services/glassesClockSync.d.ts.map +1 -0
  388. package/build/services/glassesClockSync.js +97 -0
  389. package/build/services/glassesClockSync.js.map +1 -0
  390. package/build/services/manifestVersionGate.d.ts +28 -0
  391. package/build/services/manifestVersionGate.d.ts.map +1 -0
  392. package/build/services/manifestVersionGate.js +41 -0
  393. package/build/services/manifestVersionGate.js.map +1 -0
  394. package/build/services/mentraUiShim.d.ts +38 -0
  395. package/build/services/mentraUiShim.d.ts.map +1 -0
  396. package/build/services/mentraUiShim.js +360 -0
  397. package/build/services/mentraUiShim.js.map +1 -0
  398. package/build/services/navigation/roadNameResolver.d.ts +67 -0
  399. package/build/services/navigation/roadNameResolver.d.ts.map +1 -0
  400. package/build/services/navigation/roadNameResolver.js +96 -0
  401. package/build/services/navigation/roadNameResolver.js.map +1 -0
  402. package/build/services/navigation/routesApiCodec.d.ts +38 -0
  403. package/build/services/navigation/routesApiCodec.d.ts.map +1 -0
  404. package/build/services/navigation/routesApiCodec.js +68 -0
  405. package/build/services/navigation/routesApiCodec.js.map +1 -0
  406. package/build/services/otaDisplayState.d.ts +42 -0
  407. package/build/services/otaDisplayState.d.ts.map +1 -0
  408. package/build/services/otaDisplayState.js +92 -0
  409. package/build/services/otaDisplayState.js.map +1 -0
  410. package/build/services/otaInstallPolicy.d.ts +81 -0
  411. package/build/services/otaInstallPolicy.d.ts.map +1 -0
  412. package/build/services/otaInstallPolicy.js +96 -0
  413. package/build/services/otaInstallPolicy.js.map +1 -0
  414. package/build/services/otaLegacyMapping.d.ts +22 -0
  415. package/build/services/otaLegacyMapping.d.ts.map +1 -0
  416. package/build/services/otaLegacyMapping.js +56 -0
  417. package/build/services/otaLegacyMapping.js.map +1 -0
  418. package/build/services/slimStreamStatus.d.ts +7 -0
  419. package/build/services/slimStreamStatus.d.ts.map +1 -0
  420. package/build/services/slimStreamStatus.js +26 -0
  421. package/build/services/slimStreamStatus.js.map +1 -0
  422. package/build/stores/apps.d.ts +104 -0
  423. package/build/stores/apps.d.ts.map +1 -0
  424. package/build/stores/apps.js +492 -0
  425. package/build/stores/apps.js.map +1 -0
  426. package/build/stores/bluetoothSettingKeys.d.ts +4 -0
  427. package/build/stores/bluetoothSettingKeys.d.ts.map +1 -0
  428. package/build/stores/bluetoothSettingKeys.js +31 -0
  429. package/build/stores/bluetoothSettingKeys.js.map +1 -0
  430. package/build/stores/cloudClientStatus.d.ts +9 -0
  431. package/build/stores/cloudClientStatus.d.ts.map +1 -0
  432. package/build/stores/cloudClientStatus.js +24 -0
  433. package/build/stores/cloudClientStatus.js.map +1 -0
  434. package/build/stores/connection.d.ts +22 -0
  435. package/build/stores/connection.d.ts.map +1 -0
  436. package/build/stores/connection.js +43 -0
  437. package/build/stores/connection.js.map +1 -0
  438. package/build/stores/core.d.ts +15 -0
  439. package/build/stores/core.d.ts.map +1 -0
  440. package/build/stores/core.js +21 -0
  441. package/build/stores/core.js.map +1 -0
  442. package/build/stores/display.d.ts +24 -0
  443. package/build/stores/display.d.ts.map +1 -0
  444. package/build/stores/display.js +96 -0
  445. package/build/stores/display.js.map +1 -0
  446. package/build/stores/gallerySync.d.ts +101 -0
  447. package/build/stores/gallerySync.d.ts.map +1 -0
  448. package/build/stores/gallerySync.js +217 -0
  449. package/build/stores/gallerySync.js.map +1 -0
  450. package/build/stores/glasses.d.ts +62 -0
  451. package/build/stores/glasses.d.ts.map +1 -0
  452. package/build/stores/glasses.js +203 -0
  453. package/build/stores/glasses.js.map +1 -0
  454. package/build/stores/settings.d.ts +37 -0
  455. package/build/stores/settings.d.ts.map +1 -0
  456. package/build/stores/settings.js +922 -0
  457. package/build/stores/settings.js.map +1 -0
  458. package/build/types/applet.d.ts +96 -0
  459. package/build/types/applet.d.ts.map +1 -0
  460. package/build/types/applet.js +5 -0
  461. package/build/types/applet.js.map +1 -0
  462. package/build/types/asg.d.ts +53 -0
  463. package/build/types/asg.d.ts.map +1 -0
  464. package/build/types/asg.js +2 -0
  465. package/build/types/asg.js.map +1 -0
  466. package/build/types/capabilities/even-realities-g1.d.ts +12 -0
  467. package/build/types/capabilities/even-realities-g1.d.ts.map +1 -0
  468. package/build/types/capabilities/even-realities-g1.js +55 -0
  469. package/build/types/capabilities/even-realities-g1.js.map +1 -0
  470. package/build/types/capabilities/even-realities-g2.d.ts +12 -0
  471. package/build/types/capabilities/even-realities-g2.d.ts.map +1 -0
  472. package/build/types/capabilities/even-realities-g2.js +75 -0
  473. package/build/types/capabilities/even-realities-g2.js.map +1 -0
  474. package/build/types/capabilities/mentra-display.d.ts +12 -0
  475. package/build/types/capabilities/mentra-display.d.ts.map +1 -0
  476. package/build/types/capabilities/mentra-display.js +63 -0
  477. package/build/types/capabilities/mentra-display.js.map +1 -0
  478. package/build/types/capabilities/mentra-live.d.ts +12 -0
  479. package/build/types/capabilities/mentra-live.d.ts.map +1 -0
  480. package/build/types/capabilities/mentra-live.js +92 -0
  481. package/build/types/capabilities/mentra-live.js.map +1 -0
  482. package/build/types/capabilities/none.d.ts +13 -0
  483. package/build/types/capabilities/none.d.ts.map +1 -0
  484. package/build/types/capabilities/none.js +65 -0
  485. package/build/types/capabilities/none.js.map +1 -0
  486. package/build/types/capabilities/simulated-glasses.d.ts +13 -0
  487. package/build/types/capabilities/simulated-glasses.d.ts.map +1 -0
  488. package/build/types/capabilities/simulated-glasses.js +65 -0
  489. package/build/types/capabilities/simulated-glasses.js.map +1 -0
  490. package/build/types/capabilities/vuzix-z100.d.ts +12 -0
  491. package/build/types/capabilities/vuzix-z100.d.ts.map +1 -0
  492. package/build/types/capabilities/vuzix-z100.js +52 -0
  493. package/build/types/capabilities/vuzix-z100.js.map +1 -0
  494. package/build/types/enums.d.ts +40 -0
  495. package/build/types/enums.d.ts.map +1 -0
  496. package/build/types/enums.js +44 -0
  497. package/build/types/enums.js.map +1 -0
  498. package/build/types/hardware.d.ts +160 -0
  499. package/build/types/hardware.d.ts.map +1 -0
  500. package/build/types/hardware.js +36 -0
  501. package/build/types/hardware.js.map +1 -0
  502. package/build/types/index.d.ts +11 -0
  503. package/build/types/index.d.ts.map +1 -0
  504. package/build/types/index.js +10 -0
  505. package/build/types/index.js.map +1 -0
  506. package/build/utils/GlobalEventEmitter.d.ts +10 -0
  507. package/build/utils/GlobalEventEmitter.d.ts.map +1 -0
  508. package/build/utils/GlobalEventEmitter.js +13 -0
  509. package/build/utils/GlobalEventEmitter.js.map +1 -0
  510. package/build/utils/cloudClient/RnUdpAdapter.d.ts +3 -0
  511. package/build/utils/cloudClient/RnUdpAdapter.d.ts.map +1 -0
  512. package/build/utils/cloudClient/RnUdpAdapter.js +41 -0
  513. package/build/utils/cloudClient/RnUdpAdapter.js.map +1 -0
  514. package/build/utils/cloudClient/cloudSecureStore.d.ts +3 -0
  515. package/build/utils/cloudClient/cloudSecureStore.d.ts.map +1 -0
  516. package/build/utils/cloudClient/cloudSecureStore.js +26 -0
  517. package/build/utils/cloudClient/cloudSecureStore.js.map +1 -0
  518. package/build/utils/debouncedPatch.d.ts +6 -0
  519. package/build/utils/debouncedPatch.d.ts.map +1 -0
  520. package/build/utils/debouncedPatch.js +25 -0
  521. package/build/utils/debouncedPatch.js.map +1 -0
  522. package/build/utils/devLogging.d.ts +26 -0
  523. package/build/utils/devLogging.d.ts.map +1 -0
  524. package/build/utils/devLogging.js +116 -0
  525. package/build/utils/devLogging.js.map +1 -0
  526. package/build/utils/devMiniappLaunch.d.ts +44 -0
  527. package/build/utils/devMiniappLaunch.d.ts.map +1 -0
  528. package/build/utils/devMiniappLaunch.js +52 -0
  529. package/build/utils/devMiniappLaunch.js.map +1 -0
  530. package/build/utils/diagnosticContext.d.ts +3 -0
  531. package/build/utils/diagnosticContext.d.ts.map +1 -0
  532. package/build/utils/diagnosticContext.js +119 -0
  533. package/build/utils/diagnosticContext.js.map +1 -0
  534. package/build/utils/display/composer/ColumnComposer.d.ts +131 -0
  535. package/build/utils/display/composer/ColumnComposer.d.ts.map +1 -0
  536. package/build/utils/display/composer/ColumnComposer.js +204 -0
  537. package/build/utils/display/composer/ColumnComposer.js.map +1 -0
  538. package/build/utils/display/composer/index.d.ts +9 -0
  539. package/build/utils/display/composer/index.d.ts.map +1 -0
  540. package/build/utils/display/composer/index.js +9 -0
  541. package/build/utils/display/composer/index.js.map +1 -0
  542. package/build/utils/display/helpers/DisplayHelpers.d.ts +165 -0
  543. package/build/utils/display/helpers/DisplayHelpers.d.ts.map +1 -0
  544. package/build/utils/display/helpers/DisplayHelpers.js +312 -0
  545. package/build/utils/display/helpers/DisplayHelpers.js.map +1 -0
  546. package/build/utils/display/helpers/ScrollView.d.ts +183 -0
  547. package/build/utils/display/helpers/ScrollView.d.ts.map +1 -0
  548. package/build/utils/display/helpers/ScrollView.js +257 -0
  549. package/build/utils/display/helpers/ScrollView.js.map +1 -0
  550. package/build/utils/display/helpers/index.d.ts +11 -0
  551. package/build/utils/display/helpers/index.d.ts.map +1 -0
  552. package/build/utils/display/helpers/index.js +10 -0
  553. package/build/utils/display/helpers/index.js.map +1 -0
  554. package/build/utils/display/index.d.ts +174 -0
  555. package/build/utils/display/index.d.ts.map +1 -0
  556. package/build/utils/display/index.js +185 -0
  557. package/build/utils/display/index.js.map +1 -0
  558. package/build/utils/display/measurer/TextMeasurer.d.ts +160 -0
  559. package/build/utils/display/measurer/TextMeasurer.d.ts.map +1 -0
  560. package/build/utils/display/measurer/TextMeasurer.js +273 -0
  561. package/build/utils/display/measurer/TextMeasurer.js.map +1 -0
  562. package/build/utils/display/measurer/index.d.ts +10 -0
  563. package/build/utils/display/measurer/index.d.ts.map +1 -0
  564. package/build/utils/display/measurer/index.js +11 -0
  565. package/build/utils/display/measurer/index.js.map +1 -0
  566. package/build/utils/display/measurer/script-detection.d.ts +53 -0
  567. package/build/utils/display/measurer/script-detection.d.ts.map +1 -0
  568. package/build/utils/display/measurer/script-detection.js +184 -0
  569. package/build/utils/display/measurer/script-detection.js.map +1 -0
  570. package/build/utils/display/profiles/g1.d.ts +33 -0
  571. package/build/utils/display/profiles/g1.d.ts.map +1 -0
  572. package/build/utils/display/profiles/g1.js +213 -0
  573. package/build/utils/display/profiles/g1.js.map +1 -0
  574. package/build/utils/display/profiles/g2.d.ts +13 -0
  575. package/build/utils/display/profiles/g2.d.ts.map +1 -0
  576. package/build/utils/display/profiles/g2.js +34 -0
  577. package/build/utils/display/profiles/g2.js.map +1 -0
  578. package/build/utils/display/profiles/index.d.ts +12 -0
  579. package/build/utils/display/profiles/index.d.ts.map +1 -0
  580. package/build/utils/display/profiles/index.js +15 -0
  581. package/build/utils/display/profiles/index.js.map +1 -0
  582. package/build/utils/display/profiles/nex.d.ts +10 -0
  583. package/build/utils/display/profiles/nex.d.ts.map +1 -0
  584. package/build/utils/display/profiles/nex.js +150 -0
  585. package/build/utils/display/profiles/nex.js.map +1 -0
  586. package/build/utils/display/profiles/types.d.ts +103 -0
  587. package/build/utils/display/profiles/types.d.ts.map +1 -0
  588. package/build/utils/display/profiles/types.js +2 -0
  589. package/build/utils/display/profiles/types.js.map +1 -0
  590. package/build/utils/display/profiles/z100.d.ts +33 -0
  591. package/build/utils/display/profiles/z100.d.ts.map +1 -0
  592. package/build/utils/display/profiles/z100.js +182 -0
  593. package/build/utils/display/profiles/z100.js.map +1 -0
  594. package/build/utils/display/scene/degrade.d.ts +25 -0
  595. package/build/utils/display/scene/degrade.d.ts.map +1 -0
  596. package/build/utils/display/scene/degrade.js +64 -0
  597. package/build/utils/display/scene/degrade.js.map +1 -0
  598. package/build/utils/display/scene/differ.d.ts +38 -0
  599. package/build/utils/display/scene/differ.d.ts.map +1 -0
  600. package/build/utils/display/scene/differ.js +107 -0
  601. package/build/utils/display/scene/differ.js.map +1 -0
  602. package/build/utils/display/scene/index.d.ts +10 -0
  603. package/build/utils/display/scene/index.d.ts.map +1 -0
  604. package/build/utils/display/scene/index.js +6 -0
  605. package/build/utils/display/scene/index.js.map +1 -0
  606. package/build/utils/display/scene/process.d.ts +35 -0
  607. package/build/utils/display/scene/process.d.ts.map +1 -0
  608. package/build/utils/display/scene/process.js +187 -0
  609. package/build/utils/display/scene/process.js.map +1 -0
  610. package/build/utils/display/scene/store.d.ts +48 -0
  611. package/build/utils/display/scene/store.d.ts.map +1 -0
  612. package/build/utils/display/scene/store.js +0 -0
  613. package/build/utils/display/scene/store.js.map +1 -0
  614. package/build/utils/display/scene/types.d.ts +120 -0
  615. package/build/utils/display/scene/types.d.ts.map +1 -0
  616. package/build/utils/display/scene/types.js +0 -0
  617. package/build/utils/display/scene/types.js.map +1 -0
  618. package/build/utils/display/wrapper/TextWrapper.d.ts +102 -0
  619. package/build/utils/display/wrapper/TextWrapper.d.ts.map +1 -0
  620. package/build/utils/display/wrapper/TextWrapper.js +471 -0
  621. package/build/utils/display/wrapper/TextWrapper.js.map +1 -0
  622. package/build/utils/display/wrapper/index.d.ts +12 -0
  623. package/build/utils/display/wrapper/index.d.ts.map +1 -0
  624. package/build/utils/display/wrapper/index.js +12 -0
  625. package/build/utils/display/wrapper/index.js.map +1 -0
  626. package/build/utils/display/wrapper/types.d.ts +75 -0
  627. package/build/utils/display/wrapper/types.d.ts.map +1 -0
  628. package/build/utils/display/wrapper/types.js +11 -0
  629. package/build/utils/display/wrapper/types.js.map +1 -0
  630. package/build/utils/e2eMetrics.d.ts +6 -0
  631. package/build/utils/e2eMetrics.d.ts.map +1 -0
  632. package/build/utils/e2eMetrics.js +27 -0
  633. package/build/utils/e2eMetrics.js.map +1 -0
  634. package/build/utils/hardware/hardware.d.ts +42 -0
  635. package/build/utils/hardware/hardware.d.ts.map +1 -0
  636. package/build/utils/hardware/hardware.js +127 -0
  637. package/build/utils/hardware/hardware.js.map +1 -0
  638. package/build/utils/hardware/index.d.ts +2 -0
  639. package/build/utils/hardware/index.d.ts.map +1 -0
  640. package/build/utils/hardware/index.js +2 -0
  641. package/build/utils/hardware/index.js.map +1 -0
  642. package/build/utils/miniappGlobals.d.ts +60 -0
  643. package/build/utils/miniappGlobals.d.ts.map +1 -0
  644. package/build/utils/miniappGlobals.js +224 -0
  645. package/build/utils/miniappGlobals.js.map +1 -0
  646. package/build/utils/permissions/MediaLibraryPermissions.d.ts +45 -0
  647. package/build/utils/permissions/MediaLibraryPermissions.d.ts.map +1 -0
  648. package/build/utils/permissions/MediaLibraryPermissions.js +145 -0
  649. package/build/utils/permissions/MediaLibraryPermissions.js.map +1 -0
  650. package/build/utils/permissions/galleryDisplayName.d.ts +8 -0
  651. package/build/utils/permissions/galleryDisplayName.d.ts.map +1 -0
  652. package/build/utils/permissions/galleryDisplayName.js +25 -0
  653. package/build/utils/permissions/galleryDisplayName.js.map +1 -0
  654. package/build/utils/storage/index.d.ts +3 -0
  655. package/build/utils/storage/index.d.ts.map +1 -0
  656. package/build/utils/storage/index.js +3 -0
  657. package/build/utils/storage/index.js.map +1 -0
  658. package/build/utils/storage/storage.d.ts +24 -0
  659. package/build/utils/storage/storage.d.ts.map +1 -0
  660. package/build/utils/storage/storage.js +85 -0
  661. package/build/utils/storage/storage.js.map +1 -0
  662. package/build/utils/storage/zip.d.ts +3 -0
  663. package/build/utils/storage/zip.d.ts.map +1 -0
  664. package/build/utils/storage/zip.js +14 -0
  665. package/build/utils/storage/zip.js.map +1 -0
  666. package/build/utils/timers/index.d.ts +3 -0
  667. package/build/utils/timers/index.d.ts.map +1 -0
  668. package/build/utils/timers/index.js +3 -0
  669. package/build/utils/timers/index.js.map +1 -0
  670. package/build/utils/timers/timers.d.ts +9 -0
  671. package/build/utils/timers/timers.d.ts.map +1 -0
  672. package/build/utils/timers/timers.js +105 -0
  673. package/build/utils/timers/timers.js.map +1 -0
  674. package/package.json +120 -0
  675. package/src/devtools.ts +13 -0
  676. package/src/engine.ts +173 -0
  677. package/src/facades/dev.ts +198 -0
  678. package/src/facades/display.ts +17 -0
  679. package/src/facades/displayMirror.ts +33 -0
  680. package/src/facades/gallery.ts +69 -0
  681. package/src/facades/glasses.ts +206 -0
  682. package/src/facades/glassesSettings.ts +56 -0
  683. package/src/facades/glassesWifi.ts +68 -0
  684. package/src/facades/miniapps.ts +55 -0
  685. package/src/facades/notifications.ts +15 -0
  686. package/src/facades/ota.ts +174 -0
  687. package/src/facades/pairing.ts +329 -0
  688. package/src/facades/permissions.ts +165 -0
  689. package/src/facades/phoneNotifications.ts +50 -0
  690. package/src/facades/reports.ts +185 -0
  691. package/src/facades/session.ts +55 -0
  692. package/src/facades/settings.ts +57 -0
  693. package/src/facades/speech.ts +38 -0
  694. package/src/index.ts +191 -0
  695. package/src/internal.ts +159 -0
  696. package/src/runtime/bootstrap.ts +118 -0
  697. package/src/runtime/config.ts +147 -0
  698. package/src/runtime/streamConfig.ts +34 -0
  699. package/src/services/AppRegistry.ts +1190 -0
  700. package/src/services/AudioCloudUplink.ts +50 -0
  701. package/src/services/AudioPlaybackService.ts +813 -0
  702. package/src/services/AutomaticReportResult.ts +48 -0
  703. package/src/services/BlobStore.ts +746 -0
  704. package/src/services/CaptionsTesterReportService.ts +107 -0
  705. package/src/services/CloudAudioSubscriptionSync.ts +41 -0
  706. package/src/services/CloudClientService.ts +689 -0
  707. package/src/services/CloudTranscriptE2EMetrics.ts +27 -0
  708. package/src/services/ConnectionCoordinator.ts +65 -0
  709. package/src/services/DevServerBridge.ts +332 -0
  710. package/src/services/DeviceEventRouter.ts +238 -0
  711. package/src/services/DeviceStoreHydration.ts +130 -0
  712. package/src/services/DisplayProcessor.ts +775 -0
  713. package/src/services/GlassesReadiness.ts +103 -0
  714. package/src/services/GlassesSettingsSync.ts +134 -0
  715. package/src/services/GlassesStatusProjection.ts +73 -0
  716. package/src/services/HeadingService.ts +98 -0
  717. package/src/services/LocalDisplayManager.ts +703 -0
  718. package/src/services/LocalMiniappRuntime.ts +4213 -0
  719. package/src/services/LocalSttFallbackCoordinator.ts +147 -0
  720. package/src/services/MentraJSCrashController.ts +189 -0
  721. package/src/services/MentraJSCrashloopReportService.ts +66 -0
  722. package/src/services/MentraJSLogPipeline.ts +166 -0
  723. package/src/services/MentraJSRouter.ts +557 -0
  724. package/src/services/MentraUIRouter.ts +244 -0
  725. package/src/services/MicStateCoordinator.ts +94 -0
  726. package/src/services/MiniappEngine.ts +143 -0
  727. package/src/services/MiniappLauncher.ts +340 -0
  728. package/src/services/MiniappRunningRegistry.ts +57 -0
  729. package/src/services/NativeHttpResponse.ts +6 -0
  730. package/src/services/NavigationHandlers.ts +423 -0
  731. package/src/services/NavigationService.ts +731 -0
  732. package/src/services/NotificationsEmitter.ts +48 -0
  733. package/src/services/OfflineSpeechModelService.ts +168 -0
  734. package/src/services/OtaInstallCoordinator.ts +1205 -0
  735. package/src/services/OtaService.ts +83 -0
  736. package/src/services/OtaUpdateCheckService.ts +386 -0
  737. package/src/services/PairingIdentity.ts +154 -0
  738. package/src/services/PhoneCalendarHelpers.ts +212 -0
  739. package/src/services/PhoneCalendarService.ts +42 -0
  740. package/src/services/PhoneCameraFovCoordinator.ts +195 -0
  741. package/src/services/PhoneLocationService.ts +122 -0
  742. package/src/services/PhoneNotificationsSync.ts +44 -0
  743. package/src/services/PhonePhotoCoordinator.ts +409 -0
  744. package/src/services/PhoneStreamCoordinator.ts +777 -0
  745. package/src/services/PhoneVideoCoordinator.ts +189 -0
  746. package/src/services/STTModelManager.ts +360 -0
  747. package/src/services/SceneRenderer.ts +292 -0
  748. package/src/services/SentenceTtsPipeline.ts +106 -0
  749. package/src/services/StreamLifecycleController.ts +213 -0
  750. package/src/services/TTSModelManager.ts +466 -0
  751. package/src/services/TranscriptionRouting.ts +37 -0
  752. package/src/services/WebviewBridge.ts +50 -0
  753. package/src/services/asg/GalleryMediaIntegrityReportService.ts +70 -0
  754. package/src/services/asg/asgCameraApi.ts +1695 -0
  755. package/src/services/asg/cameraRollExportCoordinator.ts +627 -0
  756. package/src/services/asg/cameraRollExportLedger.ts +122 -0
  757. package/src/services/asg/galleryMediaValidation.ts +183 -0
  758. package/src/services/asg/galleryNotices.ts +61 -0
  759. package/src/services/asg/galleryPathMigration.ts +22 -0
  760. package/src/services/asg/gallerySettingsService.ts +68 -0
  761. package/src/services/asg/gallerySyncNotifications.ts +236 -0
  762. package/src/services/asg/gallerySyncService.ts +2269 -0
  763. package/src/services/asg/galleryTransferLedger.ts +312 -0
  764. package/src/services/asg/localNetworkTransport.ts +173 -0
  765. package/src/services/asg/localStorageService.ts +652 -0
  766. package/src/services/asg/mediaProcessingQueue.ts +518 -0
  767. package/src/services/asgOtaVersionUrl.ts +41 -0
  768. package/src/services/blobPaths.ts +86 -0
  769. package/src/services/cloudStreamApi.ts +154 -0
  770. package/src/services/gallerySyncClock.ts +39 -0
  771. package/src/services/glassesClockSync.ts +115 -0
  772. package/src/services/manifestVersionGate.ts +43 -0
  773. package/src/services/mentraUiShim.ts +366 -0
  774. package/src/services/navigation/roadNameResolver.ts +112 -0
  775. package/src/services/navigation/routesApiCodec.ts +69 -0
  776. package/src/services/otaDisplayState.ts +115 -0
  777. package/src/services/otaInstallPolicy.ts +106 -0
  778. package/src/services/otaLegacyMapping.ts +71 -0
  779. package/src/services/slimStreamStatus.ts +28 -0
  780. package/src/stores/apps.ts +614 -0
  781. package/src/stores/bluetoothSettingKeys.ts +36 -0
  782. package/src/stores/cloudClientStatus.ts +37 -0
  783. package/src/stores/connection.ts +69 -0
  784. package/src/stores/core.ts +32 -0
  785. package/src/stores/display.ts +121 -0
  786. package/src/stores/gallerySync.ts +380 -0
  787. package/src/stores/glasses.ts +309 -0
  788. package/src/stores/settings.ts +1001 -0
  789. package/src/types/applet.ts +112 -0
  790. package/src/types/asg.ts +58 -0
  791. package/src/types/capabilities/even-realities-g1.ts +67 -0
  792. package/src/types/capabilities/even-realities-g2.ts +88 -0
  793. package/src/types/capabilities/mentra-display.ts +75 -0
  794. package/src/types/capabilities/mentra-live.ts +103 -0
  795. package/src/types/capabilities/none.ts +76 -0
  796. package/src/types/capabilities/simulated-glasses.ts +76 -0
  797. package/src/types/capabilities/vuzix-z100.ts +64 -0
  798. package/src/types/enums.ts +43 -0
  799. package/src/types/hardware.ts +203 -0
  800. package/src/types/index.ts +37 -0
  801. package/src/utils/GlobalEventEmitter.ts +14 -0
  802. package/src/utils/cloudClient/RnUdpAdapter.ts +47 -0
  803. package/src/utils/cloudClient/cloudSecureStore.ts +28 -0
  804. package/src/utils/debouncedPatch.ts +28 -0
  805. package/src/utils/devLogging.ts +140 -0
  806. package/src/utils/devMiniappLaunch.ts +68 -0
  807. package/src/utils/diagnosticContext.ts +155 -0
  808. package/src/utils/display/composer/ColumnComposer.ts +285 -0
  809. package/src/utils/display/composer/index.ts +15 -0
  810. package/src/utils/display/helpers/DisplayHelpers.ts +413 -0
  811. package/src/utils/display/helpers/ScrollView.ts +337 -0
  812. package/src/utils/display/helpers/index.ts +14 -0
  813. package/src/utils/display/index.ts +273 -0
  814. package/src/utils/display/measurer/TextMeasurer.ts +346 -0
  815. package/src/utils/display/measurer/index.ts +21 -0
  816. package/src/utils/display/measurer/script-detection.ts +218 -0
  817. package/src/utils/display/profiles/g1.ts +236 -0
  818. package/src/utils/display/profiles/g2.ts +39 -0
  819. package/src/utils/display/profiles/index.ts +28 -0
  820. package/src/utils/display/profiles/nex.ts +166 -0
  821. package/src/utils/display/profiles/types.ts +132 -0
  822. package/src/utils/display/profiles/z100.ts +198 -0
  823. package/src/utils/display/scene/degrade.ts +80 -0
  824. package/src/utils/display/scene/differ.ts +128 -0
  825. package/src/utils/display/scene/index.ts +21 -0
  826. package/src/utils/display/scene/process.ts +214 -0
  827. package/src/utils/display/scene/store.ts +0 -0
  828. package/src/utils/display/scene/types.ts +0 -0
  829. package/src/utils/display/wrapper/TextWrapper.ts +546 -0
  830. package/src/utils/display/wrapper/index.ts +15 -0
  831. package/src/utils/display/wrapper/types.ts +102 -0
  832. package/src/utils/e2eMetrics.ts +30 -0
  833. package/src/utils/hardware/hardware.ts +166 -0
  834. package/src/utils/hardware/index.ts +1 -0
  835. package/src/utils/miniappGlobals.ts +260 -0
  836. package/src/utils/permissions/MediaLibraryPermissions.ts +161 -0
  837. package/src/utils/permissions/galleryDisplayName.ts +28 -0
  838. package/src/utils/storage/index.ts +2 -0
  839. package/src/utils/storage/storage.ts +101 -0
  840. package/src/utils/storage/zip.ts +13 -0
  841. package/src/utils/timers/index.ts +2 -0
  842. package/src/utils/timers/timers.ts +139 -0
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Pure decoders used by `NavigationService.computeRoute` when talking to
3
+ * Mapbox's Directions API directly (no native dependency).
4
+ *
5
+ * Kept in their own module so unit tests don't have to bring up the
6
+ * `crust` native module to exercise them. The algorithms are unit
7
+ * testable; the surrounding service is not.
8
+ *
9
+ * Migrated from Google Routes API: Mapbox returns numeric `distance`
10
+ * (meters) / `duration` (seconds) rather than Google's `"123s"` protobuf
11
+ * strings, and `polyline6` (precision-6) geometry rather than Google's
12
+ * precision-5 encoded polyline. `parseDurationSeconds` is retained for
13
+ * back-compat but Mapbox callers pass the numeric value through directly.
14
+ */
15
+ /**
16
+ * Back-compat: Google Routes API encoded durations as protobuf strings
17
+ * ("123s"). Mapbox returns a number, so new callers should not need this.
18
+ * Accepts a number (passed through) or a "123s" string.
19
+ */
20
+ export function parseDurationSeconds(s) {
21
+ if (typeof s === "number")
22
+ return Number.isFinite(s) ? Math.round(s) : 0;
23
+ const match = s.match(/^(\d+)/);
24
+ return match ? Number(match[1]) : 0;
25
+ }
26
+ /**
27
+ * Decode an encoded polyline. The standard Google/Mapbox polyline
28
+ * algorithm, parameterized by coordinate precision:
29
+ * - precision 5 (Google Routes, Mapbox `polyline`): factor 1e5
30
+ * - precision 6 (Mapbox `polyline6`): factor 1e6
31
+ *
32
+ * We request `geometries=polyline6` from Mapbox Directions for the extra
33
+ * precision (tighter road-centerline tracing keeps the turn-pivot dots on
34
+ * the visible road), so the default precision here is 6.
35
+ *
36
+ * Reference: https://docs.mapbox.com/api/navigation/directions/#route-object
37
+ */
38
+ export function decodePolyline(encoded, precision = 6) {
39
+ if (!encoded)
40
+ return [];
41
+ const factor = Math.pow(10, precision);
42
+ const points = [];
43
+ let index = 0;
44
+ let lat = 0;
45
+ let lng = 0;
46
+ while (index < encoded.length) {
47
+ let result = 0;
48
+ let shift = 0;
49
+ let b;
50
+ do {
51
+ b = encoded.charCodeAt(index++) - 63;
52
+ result |= (b & 0x1f) << shift;
53
+ shift += 5;
54
+ } while (b >= 0x20);
55
+ lat += result & 1 ? ~(result >> 1) : result >> 1;
56
+ result = 0;
57
+ shift = 0;
58
+ do {
59
+ b = encoded.charCodeAt(index++) - 63;
60
+ result |= (b & 0x1f) << shift;
61
+ shift += 5;
62
+ } while (b >= 0x20);
63
+ lng += result & 1 ? ~(result >> 1) : result >> 1;
64
+ points.push({ lat: lat / factor, lng: lng / factor });
65
+ }
66
+ return points;
67
+ }
68
+ //# sourceMappingURL=routesApiCodec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routesApiCodec.js","sourceRoot":"","sources":["../../../src/services/navigation/routesApiCodec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,CAAkB;IACrD,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACxE,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC/B,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACrC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,YAAoB,CAAC;IACnE,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAA;IACvB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;IACtC,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,OAAO,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC9B,IAAI,MAAM,GAAG,CAAC,CAAA;QACd,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,IAAI,CAAS,CAAA;QACb,GAAG,CAAC;YACF,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,CAAA;YACpC,MAAM,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAA;YAC7B,KAAK,IAAI,CAAC,CAAA;QACZ,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAC;QACnB,GAAG,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAA;QAChD,MAAM,GAAG,CAAC,CAAA;QACV,KAAK,GAAG,CAAC,CAAA;QACT,GAAG,CAAC;YACF,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,CAAA;YACpC,MAAM,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAA;YAC7B,KAAK,IAAI,CAAC,CAAA;QACZ,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAC;QACnB,GAAG,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAA;QAChD,MAAM,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM,EAAC,CAAC,CAAA;IACrD,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC","sourcesContent":["/**\n * Pure decoders used by `NavigationService.computeRoute` when talking to\n * Mapbox's Directions API directly (no native dependency).\n *\n * Kept in their own module so unit tests don't have to bring up the\n * `crust` native module to exercise them. The algorithms are unit\n * testable; the surrounding service is not.\n *\n * Migrated from Google Routes API: Mapbox returns numeric `distance`\n * (meters) / `duration` (seconds) rather than Google's `\"123s\"` protobuf\n * strings, and `polyline6` (precision-6) geometry rather than Google's\n * precision-5 encoded polyline. `parseDurationSeconds` is retained for\n * back-compat but Mapbox callers pass the numeric value through directly.\n */\n\nexport type LatLng = {lat: number; lng: number}\n\n/**\n * Back-compat: Google Routes API encoded durations as protobuf strings\n * (\"123s\"). Mapbox returns a number, so new callers should not need this.\n * Accepts a number (passed through) or a \"123s\" string.\n */\nexport function parseDurationSeconds(s: string | number): number {\n if (typeof s === \"number\") return Number.isFinite(s) ? Math.round(s) : 0\n const match = s.match(/^(\\d+)/)\n return match ? Number(match[1]) : 0\n}\n\n/**\n * Decode an encoded polyline. The standard Google/Mapbox polyline\n * algorithm, parameterized by coordinate precision:\n * - precision 5 (Google Routes, Mapbox `polyline`): factor 1e5\n * - precision 6 (Mapbox `polyline6`): factor 1e6\n *\n * We request `geometries=polyline6` from Mapbox Directions for the extra\n * precision (tighter road-centerline tracing keeps the turn-pivot dots on\n * the visible road), so the default precision here is 6.\n *\n * Reference: https://docs.mapbox.com/api/navigation/directions/#route-object\n */\nexport function decodePolyline(encoded: string, precision: number = 6): LatLng[] {\n if (!encoded) return []\n const factor = Math.pow(10, precision)\n const points: LatLng[] = []\n let index = 0\n let lat = 0\n let lng = 0\n while (index < encoded.length) {\n let result = 0\n let shift = 0\n let b: number\n do {\n b = encoded.charCodeAt(index++) - 63\n result |= (b & 0x1f) << shift\n shift += 5\n } while (b >= 0x20)\n lat += result & 1 ? ~(result >> 1) : result >> 1\n result = 0\n shift = 0\n do {\n b = encoded.charCodeAt(index++) - 63\n result |= (b & 0x1f) << shift\n shift += 5\n } while (b >= 0x20)\n lng += result & 1 ? ~(result >> 1) : result >> 1\n points.push({lat: lat / factor, lng: lng / factor})\n }\n return points\n}\n"]}
@@ -0,0 +1,42 @@
1
+ import type { OtaProgress, OtaStatus } from "@mentra/bluetooth-sdk/internal";
2
+ export type DisplayState = "starting" | "updating" | "complete" | "failed" | "disconnected" | "restarting";
3
+ /**
4
+ * Pure derivation of the OTA progress UI state from the glasses data in the
5
+ * Zustand store plus a couple of genuinely-local inputs. See
6
+ * OtaInstallCoordinator.ts for the state machine that consumes this (the host
7
+ * progress screen renders its snapshot).
8
+ *
9
+ * Legacy shape (WP 8C): old (< 37) ASG builds send `ota_progress`, which the SDK
10
+ * maps to ota_status with sessionId "" and FINISHED→"complete" at ANY phase. For
11
+ * those statuses a download-phase "complete" only means the download finished
12
+ * (the install is still ahead), and an apk install "complete" may be held by the
13
+ * coordinator's settle window — both stay "updating" instead of terminal.
14
+ *
15
+ * Priority-ordered rules (first match wins):
16
+ * 1. errorMsg !== "" -> "failed"
17
+ * 2. BES terminal + connected + sawReconnectEdge -> "complete"
18
+ * 3. BES terminal (any connection state) -> "restarting"
19
+ * (legacy-shaped BES "complete" counts only in install phase)
20
+ * 4. apkCompletedViaBuildIncrease (legacy build-number port) -> "complete"
21
+ * 5. otaStatus.status === "failed" -> "failed"
22
+ * 6. otaStatus.status === "complete" (non-BES) -> "complete"
23
+ * (unless legacy-shaped download-complete or held apk settle -> in flight)
24
+ * 7. !connected + legacy in-flight complete (held apk) -> "updating"
25
+ * 8. !connected + APK step_complete with totalSteps > 1 -> "starting" (expected reboot)
26
+ * 9. !connected + BES in flight -> "restarting" (defensive)
27
+ * 10. !connected -> "disconnected"
28
+ * 11. connected + in_progress | step_complete | legacy in-flight complete -> "updating"
29
+ * 12. fallback -> "starting"
30
+ */
31
+ export declare function deriveDisplayState(args: {
32
+ otaStatus: OtaStatus | null;
33
+ otaProgress: OtaProgress | null;
34
+ connected: boolean;
35
+ errorMsg: string;
36
+ sawReconnectEdge: boolean;
37
+ /** Coordinator is holding a legacy apk install "complete" for the settle window (WP 8C). */
38
+ legacyApkSettleHold?: boolean;
39
+ /** Legacy APK completion detected by build-number increase (WP 8C). */
40
+ apkCompletedViaBuildIncrease?: boolean;
41
+ }): DisplayState;
42
+ //# sourceMappingURL=otaDisplayState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otaDisplayState.d.ts","sourceRoot":"","sources":["../../src/services/otaDisplayState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAE,SAAS,EAAC,MAAM,gCAAgC,CAAA;AAI1E,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,GAAG,cAAc,GAAG,YAAY,CAAA;AAE1G;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAA;IAC3B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAA;IAC/B,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,gBAAgB,EAAE,OAAO,CAAA;IACzB,4FAA4F;IAC5F,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,uEAAuE;IACvE,4BAA4B,CAAC,EAAE,OAAO,CAAA;CACvC,GAAG,YAAY,CAuDf"}
@@ -0,0 +1,92 @@
1
+ import { isLegacyShapedOtaStatus } from "./otaInstallPolicy";
2
+ /**
3
+ * Pure derivation of the OTA progress UI state from the glasses data in the
4
+ * Zustand store plus a couple of genuinely-local inputs. See
5
+ * OtaInstallCoordinator.ts for the state machine that consumes this (the host
6
+ * progress screen renders its snapshot).
7
+ *
8
+ * Legacy shape (WP 8C): old (< 37) ASG builds send `ota_progress`, which the SDK
9
+ * maps to ota_status with sessionId "" and FINISHED→"complete" at ANY phase. For
10
+ * those statuses a download-phase "complete" only means the download finished
11
+ * (the install is still ahead), and an apk install "complete" may be held by the
12
+ * coordinator's settle window — both stay "updating" instead of terminal.
13
+ *
14
+ * Priority-ordered rules (first match wins):
15
+ * 1. errorMsg !== "" -> "failed"
16
+ * 2. BES terminal + connected + sawReconnectEdge -> "complete"
17
+ * 3. BES terminal (any connection state) -> "restarting"
18
+ * (legacy-shaped BES "complete" counts only in install phase)
19
+ * 4. apkCompletedViaBuildIncrease (legacy build-number port) -> "complete"
20
+ * 5. otaStatus.status === "failed" -> "failed"
21
+ * 6. otaStatus.status === "complete" (non-BES) -> "complete"
22
+ * (unless legacy-shaped download-complete or held apk settle -> in flight)
23
+ * 7. !connected + legacy in-flight complete (held apk) -> "updating"
24
+ * 8. !connected + APK step_complete with totalSteps > 1 -> "starting" (expected reboot)
25
+ * 9. !connected + BES in flight -> "restarting" (defensive)
26
+ * 10. !connected -> "disconnected"
27
+ * 11. connected + in_progress | step_complete | legacy in-flight complete -> "updating"
28
+ * 12. fallback -> "starting"
29
+ */
30
+ export function deriveDisplayState(args) {
31
+ const { otaStatus, otaProgress, connected, errorMsg, sawReconnectEdge, legacyApkSettleHold, apkCompletedViaBuildIncrease } = args;
32
+ if (errorMsg)
33
+ return "failed";
34
+ const besTerminal = isBesTerminal(otaStatus, otaProgress);
35
+ if (besTerminal && connected && sawReconnectEdge)
36
+ return "complete";
37
+ if (besTerminal)
38
+ return "restarting";
39
+ // Legacy build-number APK completion: the coordinator clears errorMsg when it fires,
40
+ // and the flag outranks whatever stale legacy status is still in the store (the old
41
+ // screen's last-write-wins completion from starting/failed/installing).
42
+ if (apkCompletedViaBuildIncrease)
43
+ return "complete";
44
+ if (otaStatus?.status === "failed")
45
+ return "failed";
46
+ // Legacy-shaped "complete" that is still in flight: a download-phase FINISHED (the
47
+ // install is still ahead), or an apk install FINISHED held by the settle window.
48
+ const legacyInFlightComplete = isLegacyShapedOtaStatus(otaStatus) &&
49
+ otaStatus?.status === "complete" &&
50
+ (otaStatus.phase === "download" ||
51
+ (!!legacyApkSettleHold && otaStatus.stepType === "apk" && otaStatus.phase === "install"));
52
+ if (otaStatus?.status === "complete" && !legacyInFlightComplete)
53
+ return "complete";
54
+ if (!connected) {
55
+ // The held apk install complete means the glasses are restarting into the new
56
+ // build — the legacy screen kept showing "installing" through that restart.
57
+ if (legacyInFlightComplete && otaStatus?.phase === "install")
58
+ return "updating";
59
+ // By here, the failed/complete rules already returned for terminal statuses.
60
+ // For APK multi-step, "step_complete" means the current step ended and the
61
+ // glasses are rebooting to start the next one.
62
+ const apkRebootExpected = otaStatus?.stepType === "apk" && (otaStatus?.totalSteps ?? 0) > 1 && otaStatus.status === "step_complete";
63
+ if (apkRebootExpected)
64
+ return "starting";
65
+ // Legacy-shaped BES download events do not mean a reboot is coming (the flash
66
+ // has not started); the legacy screen treated that drop as a plain disconnect.
67
+ const besStatusInFlight = otaStatus?.stepType === "bes" && !(isLegacyShapedOtaStatus(otaStatus) && otaStatus.phase === "download");
68
+ const besInFlight = besStatusInFlight || (otaProgress?.currentUpdate === "bes" && otaProgress?.stage === "install");
69
+ if (besInFlight)
70
+ return "restarting";
71
+ return "disconnected";
72
+ }
73
+ if (otaStatus?.status === "in_progress" || otaStatus?.status === "step_complete" || legacyInFlightComplete) {
74
+ return "updating";
75
+ }
76
+ return "starting";
77
+ }
78
+ function isBesTerminal(otaStatus, otaProgress) {
79
+ if (otaStatus?.stepType === "bes" && (otaStatus.status === "step_complete" || otaStatus.status === "complete")) {
80
+ // Legacy-shaped statuses map download FINISHED to "complete" too; only an
81
+ // install-phase terminal means the BES flash actually ran (WP 8C).
82
+ if (isLegacyShapedOtaStatus(otaStatus) && otaStatus.phase !== "install") {
83
+ return false;
84
+ }
85
+ return true;
86
+ }
87
+ if (otaProgress?.currentUpdate === "bes" && otaProgress.stage === "install" && otaProgress.status === "FINISHED") {
88
+ return true;
89
+ }
90
+ return false;
91
+ }
92
+ //# sourceMappingURL=otaDisplayState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otaDisplayState.js","sourceRoot":"","sources":["../../src/services/otaDisplayState.ts"],"names":[],"mappings":"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","sourcesContent":["import type {OtaProgress, OtaStatus} from \"@mentra/bluetooth-sdk/internal\"\n\nimport {isLegacyShapedOtaStatus} from \"./otaInstallPolicy\"\n\nexport type DisplayState = \"starting\" | \"updating\" | \"complete\" | \"failed\" | \"disconnected\" | \"restarting\"\n\n/**\n * Pure derivation of the OTA progress UI state from the glasses data in the\n * Zustand store plus a couple of genuinely-local inputs. See\n * OtaInstallCoordinator.ts for the state machine that consumes this (the host\n * progress screen renders its snapshot).\n *\n * Legacy shape (WP 8C): old (< 37) ASG builds send `ota_progress`, which the SDK\n * maps to ota_status with sessionId \"\" and FINISHED→\"complete\" at ANY phase. For\n * those statuses a download-phase \"complete\" only means the download finished\n * (the install is still ahead), and an apk install \"complete\" may be held by the\n * coordinator's settle window — both stay \"updating\" instead of terminal.\n *\n * Priority-ordered rules (first match wins):\n * 1. errorMsg !== \"\" -> \"failed\"\n * 2. BES terminal + connected + sawReconnectEdge -> \"complete\"\n * 3. BES terminal (any connection state) -> \"restarting\"\n * (legacy-shaped BES \"complete\" counts only in install phase)\n * 4. apkCompletedViaBuildIncrease (legacy build-number port) -> \"complete\"\n * 5. otaStatus.status === \"failed\" -> \"failed\"\n * 6. otaStatus.status === \"complete\" (non-BES) -> \"complete\"\n * (unless legacy-shaped download-complete or held apk settle -> in flight)\n * 7. !connected + legacy in-flight complete (held apk) -> \"updating\"\n * 8. !connected + APK step_complete with totalSteps > 1 -> \"starting\" (expected reboot)\n * 9. !connected + BES in flight -> \"restarting\" (defensive)\n * 10. !connected -> \"disconnected\"\n * 11. connected + in_progress | step_complete | legacy in-flight complete -> \"updating\"\n * 12. fallback -> \"starting\"\n */\nexport function deriveDisplayState(args: {\n otaStatus: OtaStatus | null\n otaProgress: OtaProgress | null\n connected: boolean\n errorMsg: string\n sawReconnectEdge: boolean\n /** Coordinator is holding a legacy apk install \"complete\" for the settle window (WP 8C). */\n legacyApkSettleHold?: boolean\n /** Legacy APK completion detected by build-number increase (WP 8C). */\n apkCompletedViaBuildIncrease?: boolean\n}): DisplayState {\n const {otaStatus, otaProgress, connected, errorMsg, sawReconnectEdge, legacyApkSettleHold, apkCompletedViaBuildIncrease} =\n args\n\n if (errorMsg) return \"failed\"\n\n const besTerminal = isBesTerminal(otaStatus, otaProgress)\n if (besTerminal && connected && sawReconnectEdge) return \"complete\"\n if (besTerminal) return \"restarting\"\n\n // Legacy build-number APK completion: the coordinator clears errorMsg when it fires,\n // and the flag outranks whatever stale legacy status is still in the store (the old\n // screen's last-write-wins completion from starting/failed/installing).\n if (apkCompletedViaBuildIncrease) return \"complete\"\n\n if (otaStatus?.status === \"failed\") return \"failed\"\n\n // Legacy-shaped \"complete\" that is still in flight: a download-phase FINISHED (the\n // install is still ahead), or an apk install FINISHED held by the settle window.\n const legacyInFlightComplete =\n isLegacyShapedOtaStatus(otaStatus) &&\n otaStatus?.status === \"complete\" &&\n (otaStatus.phase === \"download\" ||\n (!!legacyApkSettleHold && otaStatus.stepType === \"apk\" && otaStatus.phase === \"install\"))\n\n if (otaStatus?.status === \"complete\" && !legacyInFlightComplete) return \"complete\"\n\n if (!connected) {\n // The held apk install complete means the glasses are restarting into the new\n // build — the legacy screen kept showing \"installing\" through that restart.\n if (legacyInFlightComplete && otaStatus?.phase === \"install\") return \"updating\"\n\n // By here, the failed/complete rules already returned for terminal statuses.\n // For APK multi-step, \"step_complete\" means the current step ended and the\n // glasses are rebooting to start the next one.\n const apkRebootExpected =\n otaStatus?.stepType === \"apk\" && (otaStatus?.totalSteps ?? 0) > 1 && otaStatus.status === \"step_complete\"\n if (apkRebootExpected) return \"starting\"\n\n // Legacy-shaped BES download events do not mean a reboot is coming (the flash\n // has not started); the legacy screen treated that drop as a plain disconnect.\n const besStatusInFlight =\n otaStatus?.stepType === \"bes\" && !(isLegacyShapedOtaStatus(otaStatus) && otaStatus.phase === \"download\")\n const besInFlight =\n besStatusInFlight || (otaProgress?.currentUpdate === \"bes\" && otaProgress?.stage === \"install\")\n if (besInFlight) return \"restarting\"\n\n return \"disconnected\"\n }\n\n if (otaStatus?.status === \"in_progress\" || otaStatus?.status === \"step_complete\" || legacyInFlightComplete) {\n return \"updating\"\n }\n\n return \"starting\"\n}\n\nfunction isBesTerminal(otaStatus: OtaStatus | null, otaProgress: OtaProgress | null): boolean {\n if (otaStatus?.stepType === \"bes\" && (otaStatus.status === \"step_complete\" || otaStatus.status === \"complete\")) {\n // Legacy-shaped statuses map download FINISHED to \"complete\" too; only an\n // install-phase terminal means the BES flash actually ran (WP 8C).\n if (isLegacyShapedOtaStatus(otaStatus) && otaStatus.phase !== \"install\") {\n return false\n }\n return true\n }\n if (otaProgress?.currentUpdate === \"bes\" && otaProgress.stage === \"install\" && otaProgress.status === \"FINISHED\") {\n return true\n }\n return false\n}\n"]}
@@ -0,0 +1,81 @@
1
+ /** Shared OTA progress watchdog timings (see progress-legacy.tsx / progress.tsx). */
2
+ import type { OtaProgress, OtaStatus } from "@mentra/bluetooth-sdk/internal";
3
+ /**
4
+ * First glasses `build_number` (ASG `versionCode`) that uses `progress.tsx` with unified
5
+ * `ota_status` session UI. Strictly lower builds use `/ota/progress-legacy` (routed from
6
+ * `check-for-updates.tsx` before navigation), and get the LEGACY_* padded policy below
7
+ * in the unified OtaInstallCoordinator (WP 8C). Change only here.
8
+ */
9
+ export declare const MINIMUM_OTA_STATUS_BUILD = 37;
10
+ export declare const MAX_RETRIES = 3;
11
+ export declare const RETRY_INTERVAL_MS = 5000;
12
+ /** APK/BES and general install when progress events are expected */
13
+ export declare const PROGRESS_TIMEOUT_MS = 120000;
14
+ /** Fail if still at 0% in starting/downloading */
15
+ export declare const DOWNLOAD_STUCK_TIMEOUT_MS = 70000;
16
+ /** MTK system install often goes quiet for long periods */
17
+ export declare const MTK_INSTALL_TIMEOUT_MS = 300000;
18
+ /** Whole multi-step session cap */
19
+ export declare const GLOBAL_OTA_TIMEOUT_MS: number;
20
+ /** After APK reboot, ASG OTA service needs time before next ota_start */
21
+ export declare const POST_APK_OTA_START_DELAY_MS = 6000;
22
+ /** BLE keepalive during OTA */
23
+ export declare const PING_INTERVAL_MS = 10000;
24
+ /**
25
+ * If we sent ota_query_status (e.g. on reconnect) and the glasses haven't
26
+ * replied with an ota_status by then, fall back to ota_start. This recovers
27
+ * from the case where the glasses process restarted between mount and
28
+ * reconnect — the session is gone, ota_query_status returns nothing, and
29
+ * the user would otherwise sit on the spinner forever.
30
+ */
31
+ export declare const QUERY_REPLY_TIMEOUT_MS = 6000;
32
+ /** 15s lockout on the Continue button after a BES restart, to prevent an accidental tap. */
33
+ export declare const BES_CONTINUE_LOCKOUT_MS = 15000;
34
+ /** The uniform pad progress-legacy.tsx added to every duration for old builds. */
35
+ export declare const LEGACY_EXTRA_TIMEOUT_MS = 20000;
36
+ export declare const LEGACY_RETRY_INTERVAL_MS: number;
37
+ export declare const LEGACY_PROGRESS_TIMEOUT_MS: number;
38
+ export declare const LEGACY_DOWNLOAD_STUCK_TIMEOUT_MS: number;
39
+ export declare const LEGACY_MTK_INSTALL_TIMEOUT_MS: number;
40
+ export declare const LEGACY_GLOBAL_OTA_TIMEOUT_MS: number;
41
+ export declare const LEGACY_PING_INTERVAL_MS: number;
42
+ export declare const LEGACY_BES_CONTINUE_LOCKOUT_MS: number;
43
+ /**
44
+ * After a legacy apk `install FINISHED` observed in-flight, the legacy screen held the
45
+ * completed state for 12s (+20s pad) so the ASG process restart settles (and fresh
46
+ * version_info lands) before the user can continue.
47
+ */
48
+ export declare const LEGACY_APK_COMPLETION_SETTLE_MS: number;
49
+ /**
50
+ * Legacy MTK install stall simulation (display-only): the MTK system install typically
51
+ * stalls around 49-50%. After LEGACY_MTK_STALL_DETECT_MS without a new event in the
52
+ * [45, 55) zone, the legacy screen simulated +1% every LEGACY_MTK_SIM_TICK_MS starting
53
+ * at max(stall+1, 51) and capped at 60%, purely to keep the user informed.
54
+ */
55
+ export declare const LEGACY_MTK_STALL_DETECT_MS: number;
56
+ export declare const LEGACY_MTK_SIM_TICK_MS: number;
57
+ export declare const LEGACY_MTK_STALL_ZONE_MIN_PERCENT = 45;
58
+ export declare const LEGACY_MTK_STALL_ZONE_MAX_PERCENT = 55;
59
+ export declare const LEGACY_MTK_SIM_FLOOR_PERCENT = 51;
60
+ export declare const LEGACY_MTK_SIM_CAP_PERCENT = 60;
61
+ /**
62
+ * Legacy-shaped ota_status: old (< 37) ASG builds send `ota_progress`, which the SDK
63
+ * (Android MentraLive.kt / iOS MentraLive.swift) maps to a unified ota_status with
64
+ * sessionId "" and totalSteps 1, and FINISHED→"complete" regardless of phase. A real
65
+ * (>= 37) session always carries a sessionId; an "idle" reply also has sessionId "" but
66
+ * proves the glasses speak the unified protocol, so it is NOT legacy-shaped.
67
+ */
68
+ export declare function isLegacyShapedOtaStatus(otaStatus: OtaStatus | null): boolean;
69
+ /**
70
+ * Is the current install session legacy-shaped? Event shape wins when events exist
71
+ * (per the WP 8C rule: key off legacy-shaped inputs, not a build flag, where possible);
72
+ * before any event arrives only the glasses build number can tell.
73
+ */
74
+ export declare function isLegacyShapedOtaSession(otaStatus: OtaStatus | null, otaProgress: OtaProgress | null, buildNumber: string | null | undefined): boolean;
75
+ export declare const OtaProgressMessages: {
76
+ readonly noAckResponse: "Unable to start update. Glasses did not respond.";
77
+ readonly stalledOrStuck: "Update may have failed. Ensure glasses have internet access and try again.";
78
+ readonly globalTimeout: "Update took too long. Please try again.";
79
+ readonly sendOtaStartFailed: "Failed to communicate with glasses.";
80
+ };
81
+ //# sourceMappingURL=otaInstallPolicy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otaInstallPolicy.d.ts","sourceRoot":"","sources":["../../src/services/otaInstallPolicy.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,OAAO,KAAK,EAAC,WAAW,EAAE,SAAS,EAAC,MAAM,gCAAgC,CAAA;AAE1E;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,KAAK,CAAA;AAE1C,eAAO,MAAM,WAAW,IAAI,CAAA;AAC5B,eAAO,MAAM,iBAAiB,OAAO,CAAA;AACrC,oEAAoE;AACpE,eAAO,MAAM,mBAAmB,SAAU,CAAA;AAC1C,kDAAkD;AAClD,eAAO,MAAM,yBAAyB,QAAS,CAAA;AAC/C,2DAA2D;AAC3D,eAAO,MAAM,sBAAsB,SAAU,CAAA;AAC7C,mCAAmC;AACnC,eAAO,MAAM,qBAAqB,QAAiB,CAAA;AACnD,yEAAyE;AACzE,eAAO,MAAM,2BAA2B,OAAO,CAAA;AAC/C,+BAA+B;AAC/B,eAAO,MAAM,gBAAgB,QAAS,CAAA;AACtC;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,OAAO,CAAA;AAC1C,4FAA4F;AAC5F,eAAO,MAAM,uBAAuB,QAAS,CAAA;AAW7C,kFAAkF;AAClF,eAAO,MAAM,uBAAuB,QAAS,CAAA;AAC7C,eAAO,MAAM,wBAAwB,QAA8C,CAAA;AACnF,eAAO,MAAM,0BAA0B,QAAgD,CAAA;AACvF,eAAO,MAAM,gCAAgC,QAAsD,CAAA;AACnG,eAAO,MAAM,6BAA6B,QAAmD,CAAA;AAC7F,eAAO,MAAM,4BAA4B,QAAkD,CAAA;AAC3F,eAAO,MAAM,uBAAuB,QAA6C,CAAA;AACjF,eAAO,MAAM,8BAA8B,QAAoD,CAAA;AAC/F;;;;GAIG;AACH,eAAO,MAAM,+BAA+B,QAAmC,CAAA;AAC/E;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,QAAmC,CAAA;AAC1E,eAAO,MAAM,sBAAsB,QAAmC,CAAA;AACtE,eAAO,MAAM,iCAAiC,KAAK,CAAA;AACnD,eAAO,MAAM,iCAAiC,KAAK,CAAA;AACnD,eAAO,MAAM,4BAA4B,KAAK,CAAA;AAC9C,eAAO,MAAM,0BAA0B,KAAK,CAAA;AAE5C;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,GAAG,OAAO,CAE5E;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,SAAS,GAAG,IAAI,EAC3B,WAAW,EAAE,WAAW,GAAG,IAAI,EAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACrC,OAAO,CAKT;AAED,eAAO,MAAM,mBAAmB;;;;;CAKtB,CAAA"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * First glasses `build_number` (ASG `versionCode`) that uses `progress.tsx` with unified
3
+ * `ota_status` session UI. Strictly lower builds use `/ota/progress-legacy` (routed from
4
+ * `check-for-updates.tsx` before navigation), and get the LEGACY_* padded policy below
5
+ * in the unified OtaInstallCoordinator (WP 8C). Change only here.
6
+ */
7
+ export const MINIMUM_OTA_STATUS_BUILD = 37;
8
+ export const MAX_RETRIES = 3;
9
+ export const RETRY_INTERVAL_MS = 5000;
10
+ /** APK/BES and general install when progress events are expected */
11
+ export const PROGRESS_TIMEOUT_MS = 120_000;
12
+ /** Fail if still at 0% in starting/downloading */
13
+ export const DOWNLOAD_STUCK_TIMEOUT_MS = 70_000;
14
+ /** MTK system install often goes quiet for long periods */
15
+ export const MTK_INSTALL_TIMEOUT_MS = 300_000;
16
+ /** Whole multi-step session cap */
17
+ export const GLOBAL_OTA_TIMEOUT_MS = 20 * 60 * 1000;
18
+ /** After APK reboot, ASG OTA service needs time before next ota_start */
19
+ export const POST_APK_OTA_START_DELAY_MS = 6000;
20
+ /** BLE keepalive during OTA */
21
+ export const PING_INTERVAL_MS = 10_000;
22
+ /**
23
+ * If we sent ota_query_status (e.g. on reconnect) and the glasses haven't
24
+ * replied with an ota_status by then, fall back to ota_start. This recovers
25
+ * from the case where the glasses process restarted between mount and
26
+ * reconnect — the session is gone, ota_query_status returns nothing, and
27
+ * the user would otherwise sit on the spinner forever.
28
+ */
29
+ export const QUERY_REPLY_TIMEOUT_MS = 6000;
30
+ /** 15s lockout on the Continue button after a BES restart, to prevent an accidental tap. */
31
+ export const BES_CONTINUE_LOCKOUT_MS = 15_000;
32
+ // --- Legacy old-build (< MINIMUM_OTA_STATUS_BUILD) OTA policy (WP 8C) ---
33
+ //
34
+ // Ported verbatim from mobile/src/app/ota/progress-legacy.tsx, which padded EVERY
35
+ // watchdog/timer by +20s for old ASG builds ("Legacy OTA: +20s on every watchdog /
36
+ // timer duration"). Old builds respond slower on every path, so where the legacy
37
+ // screen used a longer duration the coordinator applies the longer value whenever
38
+ // the session is legacy-shaped (see isLegacyShapedOtaStatus / the coordinator's
39
+ // session-shape check). Builds >= 37 keep the unpadded values above.
40
+ /** The uniform pad progress-legacy.tsx added to every duration for old builds. */
41
+ export const LEGACY_EXTRA_TIMEOUT_MS = 20_000;
42
+ export const LEGACY_RETRY_INTERVAL_MS = RETRY_INTERVAL_MS + LEGACY_EXTRA_TIMEOUT_MS;
43
+ export const LEGACY_PROGRESS_TIMEOUT_MS = PROGRESS_TIMEOUT_MS + LEGACY_EXTRA_TIMEOUT_MS;
44
+ export const LEGACY_DOWNLOAD_STUCK_TIMEOUT_MS = DOWNLOAD_STUCK_TIMEOUT_MS + LEGACY_EXTRA_TIMEOUT_MS;
45
+ export const LEGACY_MTK_INSTALL_TIMEOUT_MS = MTK_INSTALL_TIMEOUT_MS + LEGACY_EXTRA_TIMEOUT_MS;
46
+ export const LEGACY_GLOBAL_OTA_TIMEOUT_MS = GLOBAL_OTA_TIMEOUT_MS + LEGACY_EXTRA_TIMEOUT_MS;
47
+ export const LEGACY_PING_INTERVAL_MS = PING_INTERVAL_MS + LEGACY_EXTRA_TIMEOUT_MS;
48
+ export const LEGACY_BES_CONTINUE_LOCKOUT_MS = BES_CONTINUE_LOCKOUT_MS + LEGACY_EXTRA_TIMEOUT_MS;
49
+ /**
50
+ * After a legacy apk `install FINISHED` observed in-flight, the legacy screen held the
51
+ * completed state for 12s (+20s pad) so the ASG process restart settles (and fresh
52
+ * version_info lands) before the user can continue.
53
+ */
54
+ export const LEGACY_APK_COMPLETION_SETTLE_MS = 12_000 + LEGACY_EXTRA_TIMEOUT_MS;
55
+ /**
56
+ * Legacy MTK install stall simulation (display-only): the MTK system install typically
57
+ * stalls around 49-50%. After LEGACY_MTK_STALL_DETECT_MS without a new event in the
58
+ * [45, 55) zone, the legacy screen simulated +1% every LEGACY_MTK_SIM_TICK_MS starting
59
+ * at max(stall+1, 51) and capped at 60%, purely to keep the user informed.
60
+ */
61
+ export const LEGACY_MTK_STALL_DETECT_MS = 20_000 + LEGACY_EXTRA_TIMEOUT_MS;
62
+ export const LEGACY_MTK_SIM_TICK_MS = 15_000 + LEGACY_EXTRA_TIMEOUT_MS;
63
+ export const LEGACY_MTK_STALL_ZONE_MIN_PERCENT = 45;
64
+ export const LEGACY_MTK_STALL_ZONE_MAX_PERCENT = 55;
65
+ export const LEGACY_MTK_SIM_FLOOR_PERCENT = 51;
66
+ export const LEGACY_MTK_SIM_CAP_PERCENT = 60;
67
+ /**
68
+ * Legacy-shaped ota_status: old (< 37) ASG builds send `ota_progress`, which the SDK
69
+ * (Android MentraLive.kt / iOS MentraLive.swift) maps to a unified ota_status with
70
+ * sessionId "" and totalSteps 1, and FINISHED→"complete" regardless of phase. A real
71
+ * (>= 37) session always carries a sessionId; an "idle" reply also has sessionId "" but
72
+ * proves the glasses speak the unified protocol, so it is NOT legacy-shaped.
73
+ */
74
+ export function isLegacyShapedOtaStatus(otaStatus) {
75
+ return !!otaStatus && otaStatus.sessionId === "" && otaStatus.status !== "idle";
76
+ }
77
+ /**
78
+ * Is the current install session legacy-shaped? Event shape wins when events exist
79
+ * (per the WP 8C rule: key off legacy-shaped inputs, not a build flag, where possible);
80
+ * before any event arrives only the glasses build number can tell.
81
+ */
82
+ export function isLegacyShapedOtaSession(otaStatus, otaProgress, buildNumber) {
83
+ if (otaStatus)
84
+ return isLegacyShapedOtaStatus(otaStatus);
85
+ if (otaProgress)
86
+ return true;
87
+ const build = Number.parseInt(buildNumber ?? "", 10);
88
+ return Number.isFinite(build) && build > 0 && build < MINIMUM_OTA_STATUS_BUILD;
89
+ }
90
+ export const OtaProgressMessages = {
91
+ noAckResponse: "Unable to start update. Glasses did not respond.",
92
+ stalledOrStuck: "Update may have failed. Ensure glasses have internet access and try again.",
93
+ globalTimeout: "Update took too long. Please try again.",
94
+ sendOtaStartFailed: "Failed to communicate with glasses.",
95
+ };
96
+ //# sourceMappingURL=otaInstallPolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otaInstallPolicy.js","sourceRoot":"","sources":["../../src/services/otaInstallPolicy.ts"],"names":[],"mappings":"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","sourcesContent":["/** Shared OTA progress watchdog timings (see progress-legacy.tsx / progress.tsx). */\nimport type {OtaProgress, OtaStatus} from \"@mentra/bluetooth-sdk/internal\"\n\n/**\n * First glasses `build_number` (ASG `versionCode`) that uses `progress.tsx` with unified\n * `ota_status` session UI. Strictly lower builds use `/ota/progress-legacy` (routed from\n * `check-for-updates.tsx` before navigation), and get the LEGACY_* padded policy below\n * in the unified OtaInstallCoordinator (WP 8C). Change only here.\n */\nexport const MINIMUM_OTA_STATUS_BUILD = 37\n\nexport const MAX_RETRIES = 3\nexport const RETRY_INTERVAL_MS = 5000\n/** APK/BES and general install when progress events are expected */\nexport const PROGRESS_TIMEOUT_MS = 120_000\n/** Fail if still at 0% in starting/downloading */\nexport const DOWNLOAD_STUCK_TIMEOUT_MS = 70_000\n/** MTK system install often goes quiet for long periods */\nexport const MTK_INSTALL_TIMEOUT_MS = 300_000\n/** Whole multi-step session cap */\nexport const GLOBAL_OTA_TIMEOUT_MS = 20 * 60 * 1000\n/** After APK reboot, ASG OTA service needs time before next ota_start */\nexport const POST_APK_OTA_START_DELAY_MS = 6000\n/** BLE keepalive during OTA */\nexport const PING_INTERVAL_MS = 10_000\n/**\n * If we sent ota_query_status (e.g. on reconnect) and the glasses haven't\n * replied with an ota_status by then, fall back to ota_start. This recovers\n * from the case where the glasses process restarted between mount and\n * reconnect — the session is gone, ota_query_status returns nothing, and\n * the user would otherwise sit on the spinner forever.\n */\nexport const QUERY_REPLY_TIMEOUT_MS = 6000\n/** 15s lockout on the Continue button after a BES restart, to prevent an accidental tap. */\nexport const BES_CONTINUE_LOCKOUT_MS = 15_000\n\n// --- Legacy old-build (< MINIMUM_OTA_STATUS_BUILD) OTA policy (WP 8C) ---\n//\n// Ported verbatim from mobile/src/app/ota/progress-legacy.tsx, which padded EVERY\n// watchdog/timer by +20s for old ASG builds (\"Legacy OTA: +20s on every watchdog /\n// timer duration\"). Old builds respond slower on every path, so where the legacy\n// screen used a longer duration the coordinator applies the longer value whenever\n// the session is legacy-shaped (see isLegacyShapedOtaStatus / the coordinator's\n// session-shape check). Builds >= 37 keep the unpadded values above.\n\n/** The uniform pad progress-legacy.tsx added to every duration for old builds. */\nexport const LEGACY_EXTRA_TIMEOUT_MS = 20_000\nexport const LEGACY_RETRY_INTERVAL_MS = RETRY_INTERVAL_MS + LEGACY_EXTRA_TIMEOUT_MS\nexport const LEGACY_PROGRESS_TIMEOUT_MS = PROGRESS_TIMEOUT_MS + LEGACY_EXTRA_TIMEOUT_MS\nexport const LEGACY_DOWNLOAD_STUCK_TIMEOUT_MS = DOWNLOAD_STUCK_TIMEOUT_MS + LEGACY_EXTRA_TIMEOUT_MS\nexport const LEGACY_MTK_INSTALL_TIMEOUT_MS = MTK_INSTALL_TIMEOUT_MS + LEGACY_EXTRA_TIMEOUT_MS\nexport const LEGACY_GLOBAL_OTA_TIMEOUT_MS = GLOBAL_OTA_TIMEOUT_MS + LEGACY_EXTRA_TIMEOUT_MS\nexport const LEGACY_PING_INTERVAL_MS = PING_INTERVAL_MS + LEGACY_EXTRA_TIMEOUT_MS\nexport const LEGACY_BES_CONTINUE_LOCKOUT_MS = BES_CONTINUE_LOCKOUT_MS + LEGACY_EXTRA_TIMEOUT_MS\n/**\n * After a legacy apk `install FINISHED` observed in-flight, the legacy screen held the\n * completed state for 12s (+20s pad) so the ASG process restart settles (and fresh\n * version_info lands) before the user can continue.\n */\nexport const LEGACY_APK_COMPLETION_SETTLE_MS = 12_000 + LEGACY_EXTRA_TIMEOUT_MS\n/**\n * Legacy MTK install stall simulation (display-only): the MTK system install typically\n * stalls around 49-50%. After LEGACY_MTK_STALL_DETECT_MS without a new event in the\n * [45, 55) zone, the legacy screen simulated +1% every LEGACY_MTK_SIM_TICK_MS starting\n * at max(stall+1, 51) and capped at 60%, purely to keep the user informed.\n */\nexport const LEGACY_MTK_STALL_DETECT_MS = 20_000 + LEGACY_EXTRA_TIMEOUT_MS\nexport const LEGACY_MTK_SIM_TICK_MS = 15_000 + LEGACY_EXTRA_TIMEOUT_MS\nexport const LEGACY_MTK_STALL_ZONE_MIN_PERCENT = 45\nexport const LEGACY_MTK_STALL_ZONE_MAX_PERCENT = 55\nexport const LEGACY_MTK_SIM_FLOOR_PERCENT = 51\nexport const LEGACY_MTK_SIM_CAP_PERCENT = 60\n\n/**\n * Legacy-shaped ota_status: old (< 37) ASG builds send `ota_progress`, which the SDK\n * (Android MentraLive.kt / iOS MentraLive.swift) maps to a unified ota_status with\n * sessionId \"\" and totalSteps 1, and FINISHED→\"complete\" regardless of phase. A real\n * (>= 37) session always carries a sessionId; an \"idle\" reply also has sessionId \"\" but\n * proves the glasses speak the unified protocol, so it is NOT legacy-shaped.\n */\nexport function isLegacyShapedOtaStatus(otaStatus: OtaStatus | null): boolean {\n return !!otaStatus && otaStatus.sessionId === \"\" && otaStatus.status !== \"idle\"\n}\n\n/**\n * Is the current install session legacy-shaped? Event shape wins when events exist\n * (per the WP 8C rule: key off legacy-shaped inputs, not a build flag, where possible);\n * before any event arrives only the glasses build number can tell.\n */\nexport function isLegacyShapedOtaSession(\n otaStatus: OtaStatus | null,\n otaProgress: OtaProgress | null,\n buildNumber: string | null | undefined,\n): boolean {\n if (otaStatus) return isLegacyShapedOtaStatus(otaStatus)\n if (otaProgress) return true\n const build = Number.parseInt(buildNumber ?? \"\", 10)\n return Number.isFinite(build) && build > 0 && build < MINIMUM_OTA_STATUS_BUILD\n}\n\nexport const OtaProgressMessages = {\n noAckResponse: \"Unable to start update. Glasses did not respond.\",\n stalledOrStuck: \"Update may have failed. Ensure glasses have internet access and try again.\",\n globalTimeout: \"Update took too long. Please try again.\",\n sendOtaStartFailed: \"Failed to communicate with glasses.\",\n} as const\n"]}
@@ -0,0 +1,22 @@
1
+ import type { OtaProgress, OtaStatus } from "@mentra/bluetooth-sdk/internal";
2
+ /** Normalized ota_status fields (snake_case) after bridging Core/expo (snake or camel). */
3
+ export type NormalizedOtaStatusEvent = {
4
+ session_id: string;
5
+ total_steps: number;
6
+ current_step: number;
7
+ step_type: string;
8
+ phase: "download" | "install";
9
+ step_percent: number;
10
+ overall_percent: number;
11
+ status: string;
12
+ error_message?: string;
13
+ };
14
+ /**
15
+ * Core may deliver ota_status with snake_case (Android) or camelCase (some bridge paths).
16
+ * Use this for Mantle and legacy otaProgress mapping.
17
+ */
18
+ export declare function normalizeOtaStatusEvent(event: Record<string, unknown>): NormalizedOtaStatusEvent;
19
+ export declare function otaStatusFromNormalized(n: NormalizedOtaStatusEvent): OtaStatus;
20
+ /** Maps unified ota_status from Core into the legacy otaProgress store shape (progress-legacy, settings). */
21
+ export declare function legacyOtaProgressFromOtaStatusEvent(event: Record<string, unknown> | NormalizedOtaStatusEvent): OtaProgress;
22
+ //# sourceMappingURL=otaLegacyMapping.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otaLegacyMapping.d.ts","sourceRoot":"","sources":["../../src/services/otaLegacyMapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAqB,SAAS,EAAC,MAAM,gCAAgC,CAAA;AAE7F,2FAA2F;AAC3F,MAAM,MAAM,wBAAwB,GAAG;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,UAAU,GAAG,SAAS,CAAA;IAC7B,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,wBAAwB,CAehG;AAED,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,wBAAwB,GAAG,SAAS,CAY9E;AAED,6GAA6G;AAC7G,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,wBAAwB,GACxD,WAAW,CAiBb"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Core may deliver ota_status with snake_case (Android) or camelCase (some bridge paths).
3
+ * Use this for Mantle and legacy otaProgress mapping.
4
+ */
5
+ export function normalizeOtaStatusEvent(event) {
6
+ const e = event;
7
+ const phase = e?.phase === "install" ? "install" : "download";
8
+ const err = e?.error_message ?? e?.errorMessage;
9
+ return {
10
+ session_id: String(e?.session_id ?? e?.sessionId ?? ""),
11
+ total_steps: Number(e?.total_steps ?? e?.totalSteps ?? 0),
12
+ current_step: Number(e?.current_step ?? e?.currentStep ?? 0),
13
+ step_type: String(e?.step_type ?? e?.stepType ?? "apk"),
14
+ phase,
15
+ step_percent: Number(e?.step_percent ?? e?.stepPercent ?? 0),
16
+ overall_percent: Number(e?.overall_percent ?? e?.overallPercent ?? 0),
17
+ status: String(e?.status ?? "idle"),
18
+ error_message: err == null || err === "" ? undefined : String(err),
19
+ };
20
+ }
21
+ export function otaStatusFromNormalized(n) {
22
+ return {
23
+ sessionId: n.session_id,
24
+ totalSteps: n.total_steps,
25
+ currentStep: n.current_step,
26
+ stepType: n.step_type,
27
+ phase: n.phase,
28
+ stepPercent: n.step_percent,
29
+ overallPercent: n.overall_percent,
30
+ status: n.status,
31
+ error: n.error_message,
32
+ };
33
+ }
34
+ /** Maps unified ota_status from Core into the legacy otaProgress store shape (progress-legacy, settings). */
35
+ export function legacyOtaProgressFromOtaStatusEvent(event) {
36
+ const n = normalizeOtaStatusEvent(event);
37
+ const raw = (n.overall_percent ?? n.step_percent ?? 0);
38
+ let st = "PROGRESS";
39
+ // Native K900 BES OTA (sr_adota) sends step_complete, not complete, on success — map for progress-legacy FINISHED.
40
+ if (n.status === "complete" || n.status === "step_complete")
41
+ st = "FINISHED";
42
+ else if (n.status === "failed")
43
+ st = "FAILED";
44
+ else if (n.status === "idle")
45
+ st = "STARTED";
46
+ return {
47
+ stage: n.phase === "install" ? "install" : "download",
48
+ status: st,
49
+ progress: Math.round(raw),
50
+ bytesDownloaded: 0,
51
+ totalBytes: 0,
52
+ currentUpdate: n.step_type || "apk",
53
+ errorMessage: n.error_message,
54
+ };
55
+ }
56
+ //# sourceMappingURL=otaLegacyMapping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otaLegacyMapping.js","sourceRoot":"","sources":["../../src/services/otaLegacyMapping.ts"],"names":[],"mappings":"AAeA;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAA8B;IACpE,MAAM,CAAC,GAAG,KAA4B,CAAA;IACtC,MAAM,KAAK,GAA2B,CAAC,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAA;IACrF,MAAM,GAAG,GAAG,CAAC,EAAE,aAAa,IAAI,CAAC,EAAE,YAAY,CAAA;IAC/C,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,CAAC,EAAE,UAAU,IAAI,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC;QACvD,WAAW,EAAE,MAAM,CAAC,CAAC,EAAE,WAAW,IAAI,CAAC,EAAE,UAAU,IAAI,CAAC,CAAC;QACzD,YAAY,EAAE,MAAM,CAAC,CAAC,EAAE,YAAY,IAAI,CAAC,EAAE,WAAW,IAAI,CAAC,CAAC;QAC5D,SAAS,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,IAAI,CAAC,EAAE,QAAQ,IAAI,KAAK,CAAC;QACvD,KAAK;QACL,YAAY,EAAE,MAAM,CAAC,CAAC,EAAE,YAAY,IAAI,CAAC,EAAE,WAAW,IAAI,CAAC,CAAC;QAC5D,eAAe,EAAE,MAAM,CAAC,CAAC,EAAE,eAAe,IAAI,CAAC,EAAE,cAAc,IAAI,CAAC,CAAC;QACrE,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,IAAI,MAAM,CAAC;QACnC,aAAa,EAAE,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;KACnE,CAAA;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,CAA2B;IACjE,OAAO;QACL,SAAS,EAAE,CAAC,CAAC,UAAU;QACvB,UAAU,EAAE,CAAC,CAAC,WAAW;QACzB,WAAW,EAAE,CAAC,CAAC,YAAY;QAC3B,QAAQ,EAAE,CAAC,CAAC,SAAkC;QAC9C,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,WAAW,EAAE,CAAC,CAAC,YAAY;QAC3B,cAAc,EAAE,CAAC,CAAC,eAAe;QACjC,MAAM,EAAE,CAAC,CAAC,MAA6B;QACvC,KAAK,EAAE,CAAC,CAAC,aAAa;KACvB,CAAA;AACH,CAAC;AAED,6GAA6G;AAC7G,MAAM,UAAU,mCAAmC,CACjD,KAAyD;IAEzD,MAAM,CAAC,GAAG,uBAAuB,CAAC,KAAgC,CAAC,CAAA;IACnE,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAW,CAAA;IAChE,IAAI,EAAE,GAAsB,UAAU,CAAA;IACtC,mHAAmH;IACnH,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,KAAK,eAAe;QAAE,EAAE,GAAG,UAAU,CAAA;SACvE,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ;QAAE,EAAE,GAAG,QAAQ,CAAA;SACxC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM;QAAE,EAAE,GAAG,SAAS,CAAA;IAC5C,OAAO;QACL,KAAK,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;QACrD,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACzB,eAAe,EAAE,CAAC;QAClB,UAAU,EAAE,CAAC;QACb,aAAa,EAAE,CAAC,CAAC,SAAS,IAAI,KAAK;QACnC,YAAY,EAAE,CAAC,CAAC,aAAa;KAC9B,CAAA;AACH,CAAC","sourcesContent":["import type {OtaProgress, OtaProgressStatus, OtaStatus} from \"@mentra/bluetooth-sdk/internal\"\n\n/** Normalized ota_status fields (snake_case) after bridging Core/expo (snake or camel). */\nexport type NormalizedOtaStatusEvent = {\n session_id: string\n total_steps: number\n current_step: number\n step_type: string\n phase: \"download\" | \"install\"\n step_percent: number\n overall_percent: number\n status: string\n error_message?: string\n}\n\n/**\n * Core may deliver ota_status with snake_case (Android) or camelCase (some bridge paths).\n * Use this for Mantle and legacy otaProgress mapping.\n */\nexport function normalizeOtaStatusEvent(event: Record<string, unknown>): NormalizedOtaStatusEvent {\n const e = event as Record<string, any>\n const phase: \"download\" | \"install\" = e?.phase === \"install\" ? \"install\" : \"download\"\n const err = e?.error_message ?? e?.errorMessage\n return {\n session_id: String(e?.session_id ?? e?.sessionId ?? \"\"),\n total_steps: Number(e?.total_steps ?? e?.totalSteps ?? 0),\n current_step: Number(e?.current_step ?? e?.currentStep ?? 0),\n step_type: String(e?.step_type ?? e?.stepType ?? \"apk\"),\n phase,\n step_percent: Number(e?.step_percent ?? e?.stepPercent ?? 0),\n overall_percent: Number(e?.overall_percent ?? e?.overallPercent ?? 0),\n status: String(e?.status ?? \"idle\"),\n error_message: err == null || err === \"\" ? undefined : String(err),\n }\n}\n\nexport function otaStatusFromNormalized(n: NormalizedOtaStatusEvent): OtaStatus {\n return {\n sessionId: n.session_id,\n totalSteps: n.total_steps,\n currentStep: n.current_step,\n stepType: n.step_type as OtaStatus[\"stepType\"],\n phase: n.phase,\n stepPercent: n.step_percent,\n overallPercent: n.overall_percent,\n status: n.status as OtaStatus[\"status\"],\n error: n.error_message,\n }\n}\n\n/** Maps unified ota_status from Core into the legacy otaProgress store shape (progress-legacy, settings). */\nexport function legacyOtaProgressFromOtaStatusEvent(\n event: Record<string, unknown> | NormalizedOtaStatusEvent,\n): OtaProgress {\n const n = normalizeOtaStatusEvent(event as Record<string, unknown>)\n const raw = (n.overall_percent ?? n.step_percent ?? 0) as number\n let st: OtaProgressStatus = \"PROGRESS\"\n // Native K900 BES OTA (sr_adota) sends step_complete, not complete, on success — map for progress-legacy FINISHED.\n if (n.status === \"complete\" || n.status === \"step_complete\") st = \"FINISHED\"\n else if (n.status === \"failed\") st = \"FAILED\"\n else if (n.status === \"idle\") st = \"STARTED\"\n return {\n stage: n.phase === \"install\" ? \"install\" : \"download\",\n status: st,\n progress: Math.round(raw),\n bytesDownloaded: 0,\n totalBytes: 0,\n currentUpdate: n.step_type || \"apk\",\n errorMessage: n.error_message,\n }\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import type { StreamStatusEvent } from "@mentra/bluetooth-sdk/internal";
2
+ /** Fields forwarded to cloud / miniapps after the first resolvedConfig ack. */
3
+ export declare function slimStreamStatusEvent(event: StreamStatusEvent, options?: {
4
+ includeResolvedConfig?: boolean;
5
+ }): Record<string, unknown>;
6
+ export declare function streamStatusSignature(payload: Record<string, unknown>): string;
7
+ //# sourceMappingURL=slimStreamStatus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slimStreamStatus.d.ts","sourceRoot":"","sources":["../../src/services/slimStreamStatus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,gCAAgC,CAAA;AAErE,+EAA+E;AAC/E,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,iBAAiB,EACxB,OAAO,GAAE;IAAC,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAAM,GAC9C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiBzB;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAE9E"}
@@ -0,0 +1,26 @@
1
+ /** Fields forwarded to cloud / miniapps after the first resolvedConfig ack. */
2
+ export function slimStreamStatusEvent(event, options = {}) {
3
+ const slim = {
4
+ type: "stream_status",
5
+ kind: event.kind,
6
+ status: event.status,
7
+ };
8
+ if (event.streamId)
9
+ slim.streamId = event.streamId;
10
+ const ts = event.timestamp;
11
+ if (typeof ts === "number" && Number.isFinite(ts))
12
+ slim.timestamp = ts;
13
+ if (options.includeResolvedConfig && event.resolvedConfig) {
14
+ slim.resolvedConfig = event.resolvedConfig;
15
+ }
16
+ // Live telemetry passes straight through — unlike resolvedConfig it changes
17
+ // per event, and the signature dedupe upstream only suppresses identical
18
+ // payloads.
19
+ if (event.stats)
20
+ slim.stats = event.stats;
21
+ return slim;
22
+ }
23
+ export function streamStatusSignature(payload) {
24
+ return JSON.stringify(payload);
25
+ }
26
+ //# sourceMappingURL=slimStreamStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slimStreamStatus.js","sourceRoot":"","sources":["../../src/services/slimStreamStatus.ts"],"names":[],"mappings":"AAEA,+EAA+E;AAC/E,MAAM,UAAU,qBAAqB,CACnC,KAAwB,EACxB,UAA6C,EAAE;IAE/C,MAAM,IAAI,GAA4B;QACpC,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAA;IACD,IAAI,KAAK,CAAC,QAAQ;QAAE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAA;IAClD,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAA;IAC1B,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAE,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;IACtE,IAAI,OAAO,CAAC,qBAAqB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QAC1D,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAA;IAC5C,CAAC;IACD,4EAA4E;IAC5E,yEAAyE;IACzE,YAAY;IACZ,IAAI,KAAK,CAAC,KAAK;QAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;IACzC,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAgC;IACpE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;AAChC,CAAC","sourcesContent":["import type {StreamStatusEvent} from \"@mentra/bluetooth-sdk/internal\"\r\n\r\n/** Fields forwarded to cloud / miniapps after the first resolvedConfig ack. */\r\nexport function slimStreamStatusEvent(\r\n event: StreamStatusEvent,\r\n options: {includeResolvedConfig?: boolean} = {},\r\n): Record<string, unknown> {\r\n const slim: Record<string, unknown> = {\r\n type: \"stream_status\",\r\n kind: event.kind,\r\n status: event.status,\r\n }\r\n if (event.streamId) slim.streamId = event.streamId\r\n const ts = event.timestamp\r\n if (typeof ts === \"number\" && Number.isFinite(ts)) slim.timestamp = ts\r\n if (options.includeResolvedConfig && event.resolvedConfig) {\r\n slim.resolvedConfig = event.resolvedConfig\r\n }\r\n // Live telemetry passes straight through — unlike resolvedConfig it changes\r\n // per event, and the signature dedupe upstream only suppresses identical\r\n // payloads.\r\n if (event.stats) slim.stats = event.stats\r\n return slim\r\n}\r\n\r\nexport function streamStatusSignature(payload: Record<string, unknown>): string {\r\n return JSON.stringify(payload)\r\n}\r\n"]}