@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,27 @@
1
+ import type {TranscriptionData} from "@mentra/cloud-protocol"
2
+
3
+ import {buildE2EMetric, logE2EMetricPayload} from "../utils/e2eMetrics"
4
+
5
+ export function buildCloudV2TranscriptMetric(data: TranscriptionData): Record<string, unknown> {
6
+ return buildE2EMetric("cloud_v2_transcript", {
7
+ text: data.text,
8
+ state: data.isFinal ? "final" : "interim",
9
+ is_final: data.isFinal,
10
+ resolved_language: data.resolvedLanguage,
11
+ language_detected: data.languageDetected,
12
+ utterance_id: data.utteranceId,
13
+ speaker_id: data.speakerId,
14
+ start_ms: data.startMs,
15
+ end_ms: data.endMs,
16
+ duration_ms: data.durationMs,
17
+ provider: data.provider,
18
+ confidence: data.confidence,
19
+ timestamp_ms: data.timestamp,
20
+ token_count: data.tokens.length,
21
+ subscription: data.subscription,
22
+ })
23
+ }
24
+
25
+ export function logCloudV2TranscriptMetric(data: TranscriptionData): void {
26
+ logE2EMetricPayload(buildCloudV2TranscriptMetric(data), "cloud_v2_transcript")
27
+ }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * ConnectionCoordinator — the connection *decisions* that were duplicated across
3
+ * the reconnect effect and the connect/disconnect buttons.
4
+ *
5
+ * Pure logic: callers gather the inputs from their stores and perform the IO
6
+ * (permission prompts, bluetooth calls, navigation) themselves. Centralizing the
7
+ * decisions keeps the "when do we (re)connect / cancel / go to pairing" rules in
8
+ * one tested place instead of re-deriving them in home.tsx, DeviceStatus, the
9
+ * reconnect effect, and the connect buttons.
10
+ *
11
+ */
12
+ export interface ReconnectDecisionInput {
13
+ /** The reconnect_on_app_foreground setting. */
14
+ reconnectOnForeground: boolean
15
+ /** The default_wearable setting (model id), if any. */
16
+ defaultWearable: string | null | undefined
17
+ /** True when defaultWearable is the simulated device. */
18
+ isSimulated: boolean
19
+ /** True when the glasses BLE link is already connected. */
20
+ connected: boolean
21
+ /** True while the native link layer is mid scan / connect / bond. */
22
+ nativeLinkBusy: boolean
23
+ /** True when the SDK holds an actual default device (connectDefault target). */
24
+ hasDefaultDevice: boolean
25
+ /** True when a scan is already in progress. */
26
+ searching: boolean
27
+ }
28
+
29
+ /**
30
+ * "skip" means do not connect — the caller returns `result` (preserving the
31
+ * original true/false contract of attemptReconnect). "connect" means proceed to
32
+ * the permission check + connectDefault().
33
+ */
34
+ export type ReconnectDecision = {kind: "skip"; result: boolean} | {kind: "connect"}
35
+
36
+ export function decideReconnect(input: ReconnectDecisionInput): ReconnectDecision {
37
+ // Reconnect-on-foreground disabled: treat as a no-op success.
38
+ if (!input.reconnectOnForeground) return {kind: "skip", result: true}
39
+ // No real wearable paired (or the simulated device): nothing to reconnect to.
40
+ if (!input.defaultWearable || input.isSimulated) return {kind: "skip", result: false}
41
+ // Model chosen but never actually paired (or the native default was cleared):
42
+ // connectDefault() would throw — skip quietly; pairing is a user-driven flow.
43
+ // (Safe to trust at cold start now: hasDefaultDevice reads are gated on the
44
+ // device-store hydration completing, and callers fail open on rejection.)
45
+ if (!input.hasDefaultDevice) return {kind: "skip", result: false}
46
+ // Already connected, or a scan/connect/bond is already in flight: starting a
47
+ // second connectDefault() on top of the busy link layer would collide with it
48
+ // (same busy rule as decideConnectButtonAction).
49
+ if (input.connected || input.searching || input.nativeLinkBusy) return {kind: "skip", result: true}
50
+ return {kind: "connect"}
51
+ }
52
+
53
+ export type ConnectButtonAction = "cancel" | "pair" | "connect"
54
+
55
+ /**
56
+ * What a connect/disconnect button should do when tapped:
57
+ * - "cancel" — a scan/connect is in flight; the tap cancels it (disconnect)
58
+ * - "pair" — no device is paired yet; the tap goes to the pairing flow
59
+ * - "connect" — a device is paired and idle; the tap connects to it
60
+ */
61
+ export function decideConnectButtonAction(input: {hasDefaultWearable: boolean; busy: boolean}): ConnectButtonAction {
62
+ if (input.busy) return "cancel"
63
+ if (!input.hasDefaultWearable) return "pair"
64
+ return "connect"
65
+ }
@@ -0,0 +1,332 @@
1
+ /**
2
+ * DevServerBridge — phone-side WebSocket connection to a `mentra-miniapp dev`
3
+ * sidecar running on a developer's laptop.
4
+ *
5
+ * Multiplexed over a single WebSocket per dev miniapp:
6
+ * laptop → phone : {type: "reload"} → trigger WebView.reload()
7
+ * phone → laptop: {type: "log", level, args, ...} → forwarded console calls
8
+ *
9
+ * Lifecycle: `connect(packageName, devUrl, devPort)` is called from
10
+ * MiniappHost.mountDev once the dev applet is mounted. `disconnect(packageName)`
11
+ * is called from MiniappHost.unmount. Reconnect with exponential backoff on
12
+ * unexpected close — the dev server is the developer's laptop and may bounce.
13
+ *
14
+ * Outgoing logs are buffered in a small ring while disconnected; flushed on
15
+ * reconnect. This catches early-startup logs the developer would otherwise
16
+ * miss when re-launching the dev server.
17
+ */
18
+
19
+ const LOG_TAG = "DEV_SERVER_BRIDGE"
20
+ const PROTOCOL_VERSION = "mentra-dev/1"
21
+ const HELLO_TIMEOUT_MS = 1_000
22
+ const BACKOFF_MIN_MS = 1_000
23
+ const BACKOFF_MAX_MS = 30_000
24
+ const RING_BUFFER_MAX_ENTRIES = 100
25
+ const RING_BUFFER_MAX_BYTES = 32 * 1024
26
+
27
+ type State = "idle" | "connecting" | "connected" | "disconnected" | "closed"
28
+
29
+ interface BufferedLog {
30
+ packageName: string
31
+ level: string
32
+ args: unknown[]
33
+ timestamp: number
34
+ /** "ui" = WebView, "background" = JSContext. Stamped at capture time. */
35
+ source: "ui" | "background"
36
+ size: number
37
+ }
38
+
39
+ interface BridgeEntry {
40
+ state: State
41
+ ws: WebSocket | null
42
+ url: string
43
+ attempts: number
44
+ ringBuffer: BufferedLog[]
45
+ ringBytes: number
46
+ reloadHandler: ((packageName: string) => void) | null
47
+ reconnectTimer: ReturnType<typeof setTimeout> | null
48
+ }
49
+
50
+ class DevServerBridge {
51
+ private entries = new Map<string, BridgeEntry>()
52
+ private globalReloadHandler: ((packageName: string) => void) | null = null
53
+ private globalRespawnBackgroundHandler: ((packageName: string) => void) | null = null
54
+
55
+ /**
56
+ * Register a global reload handler. MiniappHost calls this once at boot. The
57
+ * bridge invokes the handler with the offending packageName whenever a
58
+ * reload signal is received.
59
+ */
60
+ public onReload(handler: (packageName: string) => void): void {
61
+ this.globalReloadHandler = handler
62
+ }
63
+
64
+ /**
65
+ * Register a global background-respawn handler. Fires when the dev
66
+ * server sends `{type: "respawn-bg"}` — emitted on filesystem changes
67
+ * under `src/background/`. The host (MentraJSRouter via the
68
+ * bootstrap) should kill + respawn the JSContext to pick up the
69
+ * change. WebView reload is separate (see `onReload`).
70
+ */
71
+ public onRespawnBackground(handler: ((packageName: string) => void) | null): void {
72
+ this.globalRespawnBackgroundHandler = handler
73
+ }
74
+
75
+ /** Clear the background-respawn handler when the miniapp engine is stopped. */
76
+ public clearRespawnBackgroundHandler(): void {
77
+ this.globalRespawnBackgroundHandler = null
78
+ }
79
+
80
+ /** Open (or re-open) a bridge to the given dev server. */
81
+ public connect(packageName: string, devHostUrl: string, devPort: number): void {
82
+ const url = this.buildWsUrl(devHostUrl, devPort)
83
+ let entry = this.entries.get(packageName)
84
+ if (entry) {
85
+ // Already have an entry; if the URL changed (e.g. LAN IP shifted), close
86
+ // and rebuild.
87
+ if (entry.url === url && (entry.state === "connecting" || entry.state === "connected")) return
88
+ this.teardownEntry(entry)
89
+ }
90
+ entry = {
91
+ state: "idle",
92
+ ws: null,
93
+ url,
94
+ attempts: 0,
95
+ ringBuffer: [],
96
+ ringBytes: 0,
97
+ reloadHandler: null,
98
+ reconnectTimer: null,
99
+ }
100
+ this.entries.set(packageName, entry)
101
+ this.openSocket(packageName, entry)
102
+ }
103
+
104
+ /** Close a bridge for good. Called from MiniappHost.unmount. */
105
+ public disconnect(packageName: string): void {
106
+ const entry = this.entries.get(packageName)
107
+ if (!entry) return
108
+ entry.state = "closed"
109
+ this.teardownEntry(entry)
110
+ this.entries.delete(packageName)
111
+ }
112
+
113
+ /**
114
+ * Forward a `log` envelope to the connected dev sidecar. Called from
115
+ * the JSContext side (`MentraJSRouter.__log` handler) AND the WebView
116
+ * side (`MentraUIRouter.routeFromWebView` for `type:"log"` frames).
117
+ *
118
+ * `source` distinguishes the two halves so the CLI can prefix lines
119
+ * `[UI]` vs `[MentraJS]`. Logs are silently dropped when no bridge
120
+ * exists for the package (no `mentra-miniapp dev` running) and
121
+ * buffered in the per-bridge ring while disconnected.
122
+ */
123
+ public forwardLog(
124
+ packageName: string,
125
+ level: string,
126
+ args: unknown[],
127
+ timestamp: number,
128
+ source: "ui" | "background",
129
+ ): void {
130
+ const entry = this.entries.get(packageName)
131
+ if (!entry) return
132
+ const message = JSON.stringify({type: "log", level, args, packageName, timestamp, source})
133
+ if (entry.state === "connected" && entry.ws) {
134
+ try {
135
+ entry.ws.send(message)
136
+ return
137
+ } catch {
138
+ // Fall through to buffer.
139
+ }
140
+ }
141
+ this.bufferLog(entry, {packageName, level, args, timestamp, source, size: message.length})
142
+ }
143
+
144
+ // -----------------------------------------------------------------------
145
+
146
+ private buildWsUrl(devHostUrl: string, devPort: number): string {
147
+ let host: string
148
+ try {
149
+ const parsed = new URL(devHostUrl)
150
+ host = parsed.hostname
151
+ } catch {
152
+ // devHostUrl might already be just an IP; best-effort.
153
+ host = devHostUrl.replace(/^https?:\/\//, "").split(":")[0].split("/")[0]
154
+ }
155
+ return `ws://${host}:${devPort}/__mentra_dev`
156
+ }
157
+
158
+ private openSocket(packageName: string, entry: BridgeEntry): void {
159
+ if (entry.state === "closed") return
160
+ entry.state = "connecting"
161
+ const ws = new WebSocket(entry.url)
162
+ entry.ws = ws
163
+
164
+ let helloTimer: ReturnType<typeof setTimeout> | null = null
165
+ let helloAcked = false
166
+
167
+ const teardown = (reason: string): void => {
168
+ if (helloTimer) {
169
+ clearTimeout(helloTimer)
170
+ helloTimer = null
171
+ }
172
+ try {
173
+ ws.close()
174
+ } catch {
175
+ /* ignore */
176
+ }
177
+ if (entry.state === "closed") return
178
+ entry.state = "disconnected"
179
+ entry.ws = null
180
+ entry.attempts++
181
+ console.log(`${LOG_TAG}: ${packageName} disconnected (${reason}); reconnect in ${this.backoffMs(entry.attempts)}ms`)
182
+ this.scheduleReconnect(packageName, entry)
183
+ }
184
+
185
+ ws.onopen = () => {
186
+ // Send hello; wait for hello-ack to confirm we hit the right server.
187
+ try {
188
+ ws.send(JSON.stringify({type: "hello", protocol: PROTOCOL_VERSION}))
189
+ } catch {
190
+ teardown("hello send failed")
191
+ return
192
+ }
193
+ helloTimer = setTimeout(() => {
194
+ if (!helloAcked) {
195
+ teardown("hello-ack timeout")
196
+ }
197
+ }, HELLO_TIMEOUT_MS)
198
+ }
199
+
200
+ ws.onmessage = (ev) => {
201
+ const data = typeof ev.data === "string" ? ev.data : null
202
+ if (!data) return
203
+ let parsed: {type?: string; protocol?: string} | null = null
204
+ try {
205
+ parsed = JSON.parse(data)
206
+ } catch {
207
+ return
208
+ }
209
+ if (!parsed) return
210
+
211
+ if (parsed.type === "hello-ack") {
212
+ if (parsed.protocol !== PROTOCOL_VERSION) {
213
+ teardown(`protocol mismatch: server sent ${parsed.protocol}, expected ${PROTOCOL_VERSION}`)
214
+ return
215
+ }
216
+ helloAcked = true
217
+ if (helloTimer) {
218
+ clearTimeout(helloTimer)
219
+ helloTimer = null
220
+ }
221
+ entry.state = "connected"
222
+ entry.attempts = 0
223
+ console.log(`${LOG_TAG}: ${packageName} connected to ${entry.url}`)
224
+ this.flushRingBuffer(packageName, entry)
225
+ return
226
+ }
227
+
228
+ if (parsed.type === "reload") {
229
+ console.log(`${LOG_TAG}: ${packageName} received reload signal`)
230
+ this.globalReloadHandler?.(packageName)
231
+ return
232
+ }
233
+
234
+ // Two-layer dev signal: filesystem changes under src/background/
235
+ // trigger a full JSContext kill + respawn (not just a WebView
236
+ // reload). The host's MentraJSRouter listens here.
237
+ if (parsed.type === "respawn-bg") {
238
+ console.log(`${LOG_TAG}: ${packageName} received respawn-bg signal`)
239
+ this.globalRespawnBackgroundHandler?.(packageName)
240
+ return
241
+ }
242
+ }
243
+
244
+ ws.onerror = () => {
245
+ // onclose follows; defer all teardown to that path so we don't double-fire.
246
+ }
247
+
248
+ ws.onclose = () => {
249
+ teardown(helloAcked ? "ws closed" : "ws closed before hello-ack")
250
+ }
251
+ }
252
+
253
+ private scheduleReconnect(packageName: string, entry: BridgeEntry): void {
254
+ if (entry.state === "closed") return
255
+ if (entry.reconnectTimer) clearTimeout(entry.reconnectTimer)
256
+ const delay = this.backoffMs(entry.attempts)
257
+ entry.reconnectTimer = setTimeout(() => {
258
+ entry.reconnectTimer = null
259
+ // Verify still alive and still in the bridge map.
260
+ const current = this.entries.get(packageName)
261
+ if (!current || current !== entry || entry.state === "closed") return
262
+ this.openSocket(packageName, entry)
263
+ }, delay)
264
+ }
265
+
266
+ private backoffMs(attempts: number): number {
267
+ const exp = Math.min(BACKOFF_MAX_MS, BACKOFF_MIN_MS * Math.pow(2, Math.max(0, attempts - 1)))
268
+ const jitter = exp * (0.8 + Math.random() * 0.4)
269
+ return Math.round(jitter)
270
+ }
271
+
272
+ private bufferLog(entry: BridgeEntry, log: BufferedLog): void {
273
+ entry.ringBuffer.push(log)
274
+ entry.ringBytes += log.size
275
+ while (
276
+ entry.ringBuffer.length > RING_BUFFER_MAX_ENTRIES ||
277
+ entry.ringBytes > RING_BUFFER_MAX_BYTES
278
+ ) {
279
+ const dropped = entry.ringBuffer.shift()
280
+ if (dropped) entry.ringBytes -= dropped.size
281
+ if (entry.ringBuffer.length === 0) {
282
+ entry.ringBytes = 0
283
+ break
284
+ }
285
+ }
286
+ }
287
+
288
+ private flushRingBuffer(packageName: string, entry: BridgeEntry): void {
289
+ if (entry.ringBuffer.length === 0) return
290
+ const buffered = entry.ringBuffer
291
+ entry.ringBuffer = []
292
+ entry.ringBytes = 0
293
+ if (!entry.ws) return
294
+ for (const log of buffered) {
295
+ try {
296
+ entry.ws.send(
297
+ JSON.stringify({
298
+ type: "log",
299
+ level: log.level,
300
+ args: log.args,
301
+ packageName: log.packageName,
302
+ timestamp: log.timestamp,
303
+ source: log.source,
304
+ }),
305
+ )
306
+ } catch {
307
+ // Re-buffer on failure and bail.
308
+ entry.ringBuffer.unshift(log)
309
+ entry.ringBytes += log.size
310
+ return
311
+ }
312
+ }
313
+ }
314
+
315
+ private teardownEntry(entry: BridgeEntry): void {
316
+ if (entry.reconnectTimer) {
317
+ clearTimeout(entry.reconnectTimer)
318
+ entry.reconnectTimer = null
319
+ }
320
+ if (entry.ws) {
321
+ try {
322
+ entry.ws.close()
323
+ } catch {
324
+ /* ignore */
325
+ }
326
+ entry.ws = null
327
+ }
328
+ }
329
+ }
330
+
331
+ const devServerBridge = new DevServerBridge()
332
+ export default devServerBridge
@@ -0,0 +1,238 @@
1
+ /**
2
+ * Device-event router — engine-owned. Subscribes to the inbound native BLE/device
3
+ * events and routes them into the engine runtime: device stores, the process event
4
+ * bus, the photo/stream coordinators, and local miniapps (via forwardEvent).
5
+ *
6
+ * Why this exists: engine owns the stores, coordinators, miniapp runtime, and facades,
7
+ * but it never *subscribed to the device* for most events — the host MantleManager was
8
+ * still the event router the whole runtime secretly depended on. So a bare OEM that
9
+ * imported engine + called engine.start() got a connected runtime with almost no device
10
+ * data flowing in (no miniapp input, dead gallery sync, starved coordinators). This
11
+ * service moves those inbound bridges into engine so ANY host gets them.
12
+ *
13
+ * Scope: the engine legs only. The Cloud V1 relays that used to live beside them in
14
+ * MantleManager (touch→cloud, the cloud-SDK stream/photo legs, etc.) were deleted with
15
+ * Cloud V1 app end-of-life.
16
+ *
17
+ * Started by `engine.start()`. Idempotent.
18
+ */
19
+ import BluetoothSdk from "@mentra/bluetooth-sdk/internal"
20
+ import {shallow} from "zustand/shallow"
21
+
22
+ import localMiniappRuntime from "./LocalMiniappRuntime"
23
+ import localSttFallbackCoordinator from "./LocalSttFallbackCoordinator"
24
+ import {phonePhotoCoordinator} from "./PhonePhotoCoordinator"
25
+ import {phoneStreamCoordinator} from "./PhoneStreamCoordinator"
26
+ import {isGlassesConnected} from "./GlassesReadiness"
27
+ import {useGlassesStore} from "../stores/glasses"
28
+ import {useSettingsStore} from "../stores/settings"
29
+ import {useAppStatusStore} from "../stores/apps"
30
+ import {retirePendingSelectionOnPromotion} from "./PairingIdentity"
31
+ import GlobalEventEmitter from "../utils/GlobalEventEmitter"
32
+ import {asgCameraApi} from "./asg/asgCameraApi"
33
+
34
+ let subs: Array<{remove: () => void}> = []
35
+
36
+ export function startDeviceEventRouter(): void {
37
+ if (subs.length) return
38
+
39
+ // --- device state → engine stores ---
40
+
41
+ // Standalone WiFi status → glasses store.
42
+ subs.push(
43
+ BluetoothSdk.addListener("wifi_status_change", (event) => {
44
+ const {type: _type, ...wifi} = event
45
+ useGlassesStore.getState().setGlassesInfo({wifi})
46
+ }),
47
+ )
48
+
49
+ // Forward glasses Wi-Fi to miniapps (session.glasses.onWifi) from the STORE — the
50
+ // single source of truth — so every path converges here: wifi_status_change,
51
+ // onGlassesStatus, and BLE disconnect. Effective connectivity requires the glasses
52
+ // to be connected AND on Wi-Fi, so a disconnect correctly flips `connected` false.
53
+ subs.push({
54
+ remove: useGlassesStore.subscribe(
55
+ (s) => {
56
+ const connected = isGlassesConnected(s.connection) && s.wifi.state === "connected"
57
+ return {
58
+ connected,
59
+ ssid: s.wifi.state === "connected" ? s.wifi.ssid : undefined,
60
+ localIp: s.wifi.state === "connected" ? s.wifi.localIp : undefined,
61
+ }
62
+ },
63
+ (wifi) => localMiniappRuntime.forwardEvent("glasses_wifi", wifi),
64
+ {equalityFn: shallow},
65
+ ),
66
+ })
67
+
68
+ // Incremental battery status → glasses store + local miniapps.
69
+ subs.push(
70
+ BluetoothSdk.addListener("battery_status", (event) => {
71
+ const state = useGlassesStore.getState()
72
+ state.setBatteryInfo(event.level, event.charging, state.caseBatteryLevel, state.caseCharging)
73
+ localMiniappRuntime.forwardEvent("glasses_battery_update", {
74
+ type: "glasses_battery_update",
75
+ level: event.level,
76
+ charging: event.charging,
77
+ timestamp: event.timestamp ?? Date.now(),
78
+ })
79
+ }),
80
+ )
81
+
82
+ // Hotspot status → glasses store + event bus. engine's own gallerySyncService listens
83
+ // on the bus for these, so without this bridge engine's gallery sync is dead.
84
+ subs.push(
85
+ BluetoothSdk.addListener("hotspot_status_change", (event) => {
86
+ const enabled = event.state === "enabled"
87
+ const ssid = enabled ? event.ssid : ""
88
+ const password = enabled ? event.password : ""
89
+ const localIp = enabled ? event.localIp : ""
90
+ useGlassesStore.getState().setHotspotInfo(enabled, ssid, password, localIp)
91
+ // Always retarget the ASG camera client: on disable (or an event with no
92
+ // IP) fall back to the localhost default so later calls fail fast instead
93
+ // of hitting the previous network's stale glasses IP.
94
+ asgCameraApi.setServer(localIp || "localhost", 8089)
95
+ GlobalEventEmitter.emit("hotspot_status_change", {enabled, ssid, password, local_ip: localIp})
96
+ }),
97
+ )
98
+ subs.push(
99
+ BluetoothSdk.addListener("hotspot_error", (event) => {
100
+ GlobalEventEmitter.emit("hotspot_error", {error_message: event.errorMessage, timestamp: event.timestamp})
101
+ }),
102
+ )
103
+
104
+ // Glasses gallery content counts → event bus (consumed by gallerySyncService).
105
+ subs.push(
106
+ BluetoothSdk.addListener("gallery_status", (event) => {
107
+ GlobalEventEmitter.emit("gallery_status", {
108
+ photos: event.photos,
109
+ videos: event.videos,
110
+ total: event.total,
111
+ has_content: event.hasContent,
112
+ camera_busy: event.cameraBusy,
113
+ })
114
+ }),
115
+ )
116
+
117
+ // Hardware-originated setting changes (user changes a setting ON the glasses) → store.
118
+ // The inbound complement to GlassesSettingsSync (which only pushes store→device).
119
+ subs.push(
120
+ BluetoothSdk.addListener("save_setting", async (event) => {
121
+ const settings = useSettingsStore.getState()
122
+ // Damp the relay: native re-echoes some settings unconditionally (e.g.
123
+ // the identity block at every handleDeviceReady) — a same-value echo
124
+ // must not become a store write (persistence churn + change-push noise).
125
+ if (settings.getSetting(event.key) !== event.value) {
126
+ await settings.setSetting(event.key, event.value)
127
+ }
128
+ // Two-phase identity: a promoted default retires the pending selection
129
+ // marker. The rule lives with PairingIdentity (a no-op for other keys).
130
+ await retirePendingSelectionOnPromotion(event.key, event.value)
131
+ }),
132
+ )
133
+
134
+ // --- coordinators (owns()-gated) ---
135
+
136
+ // Phone-owned photo errors settle the in-flight long-poll fast (vs. timeout).
137
+ // Non-owned photo responses used to forward to the Cloud V1 photo pipeline via
138
+ // restComms; that relay was removed with Cloud V1 app end-of-life, so they drop.
139
+ // Wire v2 sends a short 4-hex BLE requestId; the coordinator maps it back to
140
+ // the cloud requestId (resolveCloudRequestId) before ownership checks.
141
+ subs.push(
142
+ BluetoothSdk.addListener("photo_response", (event) => {
143
+ const cloudRequestId = event.requestId ? phonePhotoCoordinator.resolveCloudRequestId(event.requestId) : ""
144
+ if (cloudRequestId && phonePhotoCoordinator.owns(cloudRequestId)) {
145
+ if (event.state === "error") {
146
+ phonePhotoCoordinator.handlePhotoError(
147
+ event.requestId ?? cloudRequestId,
148
+ event.errorCode ?? "GLASSES_ERROR",
149
+ event.errorMessage ?? "Glasses reported an error",
150
+ )
151
+ }
152
+ }
153
+ }),
154
+ )
155
+
156
+ // Phone-owned stream status / keep-alive → the stream coordinator. The Cloud V1 relay
157
+ // for non-owned streams was removed with Cloud V1 app end-of-life.
158
+ subs.push(
159
+ BluetoothSdk.addListener("stream_status", (event) => {
160
+ if (event.streamId && phoneStreamCoordinator.owns(event.streamId)) {
161
+ phoneStreamCoordinator.handleGlassesStatus(event)
162
+ }
163
+ }),
164
+ )
165
+ subs.push(
166
+ BluetoothSdk.addListener("keep_alive_ack", (event) => {
167
+ if (event.streamId && phoneStreamCoordinator.owns(event.streamId)) {
168
+ phoneStreamCoordinator.handleKeepAliveAck(event)
169
+ }
170
+ }),
171
+ )
172
+
173
+ // --- device input → local miniapps (forwardEvent is subscriber-gated; a no-op when
174
+ // no miniapp listens). The v1 SocketComms cloud legs for these were removed with
175
+ // the Cloud V1 ripout. ---
176
+
177
+ subs.push(
178
+ BluetoothSdk.addListener("button_press", (event) => {
179
+ localMiniappRuntime.forwardEvent("button_press", event)
180
+ }),
181
+ )
182
+ subs.push(
183
+ BluetoothSdk.addListener("touch_event", (event) => {
184
+ localMiniappRuntime.forwardEvent("touch_event", event)
185
+ }),
186
+ )
187
+ // G2 IMU accelerometer — payload already matches the miniapp AccelData shape.
188
+ subs.push(
189
+ BluetoothSdk.addListener("accel_event", (event) => {
190
+ localMiniappRuntime.forwardEvent("accel_event", {
191
+ x: event.x,
192
+ y: event.y,
193
+ z: event.z,
194
+ timestamp: typeof event.timestamp === "number" ? event.timestamp : Date.now(),
195
+ })
196
+ }),
197
+ )
198
+ // Head position — translate native {up:boolean} → SDK {position:"up"|"down"}.
199
+ subs.push(
200
+ BluetoothSdk.addListener("head_up", (event) => {
201
+ localMiniappRuntime.forwardEvent("head_up", {position: event.up ? "up" : "down", timestamp: Date.now()})
202
+ }),
203
+ )
204
+ // On-device STT transcripts → local miniapps only while the local engine is
205
+ // active (cloud fallback or an explicit forceLocal subscription). The runtime
206
+ // filters mixed local/cloud delivery per miniapp to avoid double-delivery.
207
+ // forwardEvent is subscriber-gated — a no-op when no miniapp listens.
208
+ // (Was MantleManager.handle_local_transcription; its offline-captions display branch
209
+ // went away with the pseudo captions renderer.)
210
+ subs.push(
211
+ BluetoothSdk.addListener("local_transcription", (event) => {
212
+ if (!localSttFallbackCoordinator.isActive()) return
213
+ const lang = event.transcribeLanguage ?? localSttFallbackCoordinator.getActiveLanguage() ?? "en-US"
214
+ localMiniappRuntime.forwardEvent(`transcription:${lang}`, event, "local")
215
+ }),
216
+ )
217
+
218
+ // --- glasses swipe-menu app launcher (G2) ---
219
+ subs.push(
220
+ BluetoothSdk.addListener("miniapp_selected", (event) => {
221
+ const packageName = event.packageName as string
222
+ if (!packageName) return
223
+ const app = useAppStatusStore.getState().apps.find((a) => a.packageName === packageName)
224
+ if (!app) return
225
+ // Toggle: stop if running, else start.
226
+ if (app.running) {
227
+ useAppStatusStore.getState().stop(packageName)
228
+ } else {
229
+ useAppStatusStore.getState().start(app, {skipNavigation: true})
230
+ }
231
+ }),
232
+ )
233
+ }
234
+
235
+ export function stopDeviceEventRouter(): void {
236
+ for (const sub of subs) sub.remove()
237
+ subs = []
238
+ }