@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,689 @@
1
+ /**
2
+ * Owns the singleton `@mentra/cloud-client` (CloudClient) for the engine runtime
3
+ * — the keystone move that pulls backend comms INTO engine.
4
+ *
5
+ * engine constructs the client from engine-owned pieces (the native UDP socket,
6
+ * the MMKV secure store, the cloud-status store) plus the two things the host
7
+ * provides through the engine front door: `auth.getSubjectToken` (the one
8
+ * permanent seam — the OEM owns login) and the resolved cloud endpoints
9
+ * (`config.coreUrl/runtimeUrl`, computed host-side from dev/settings). On init it
10
+ * exposes cloud runtime methods directly from this service, so the host no longer
11
+ * injects a cloud adapter — engine owns construction and wiring.
12
+ *
13
+ * The local-miniapp path drives the cloud's transcription/translation through
14
+ * this service.
15
+ */
16
+ import {CloudClient, setNativeHttp, setNativeUdp, setSecureStorage} from "@mentra/cloud-client/react-native"
17
+ import type {PreinstalledMiniappRegistry, RuntimeSnapshot} from "@mentra/cloud-client/react-native"
18
+ import type {SubjectTokenType} from "@mentra/cloud-client"
19
+ import {Platform} from "react-native"
20
+ import type {AudioSubscription, TranscriptionData, TranslationData} from "@mentra/cloud-protocol"
21
+
22
+ import BluetoothSdk from "@mentra/bluetooth-sdk/internal"
23
+ import CrustModule from "@mentra/crust"
24
+ import {getAuth, getConfigValues} from "../runtime/bootstrap"
25
+ import {useSettingsStore, SETTINGS} from "../stores/settings"
26
+ import {type CloudClientStatusSnapshot, type MiniappAuthToken} from "../runtime/config"
27
+ import {createCloudUdpSocket} from "../utils/cloudClient/RnUdpAdapter"
28
+ import {cloudSecureStore} from "../utils/cloudClient/cloudSecureStore"
29
+ import {useCloudClientStatusStore} from "../stores/cloudClientStatus"
30
+ import {islandNotifications} from "./NotificationsEmitter"
31
+ import {BgTimer} from "../utils/timers"
32
+ import {logCloudV2TranscriptMetric} from "./CloudTranscriptE2EMetrics"
33
+ import {nativeHttpResponseBody} from "./NativeHttpResponse"
34
+
35
+ const LOG_TAG = "cloudClient"
36
+ type CloudCore = NonNullable<CloudClient["core"]>
37
+
38
+ // Persistent cloud-disconnect detector: the cloud-client reconnect loop is infinite
39
+ // and never surfaces a "giving up" signal, so "persistent failure" = the session has
40
+ // been continuously NOT connected for this long. A quick reconnect cancels it; brief
41
+ // flaps that recover don't fire. Raised as engine.notifications(connection_failed_persistent).
42
+ const CLOUD_PERSISTENT_FAILURE_MS = 60_000
43
+
44
+ /** Cancel the pending persistent-failure alarm + re-arm for the next outage. */
45
+ function clearPersistentFailureAlarm(): void {
46
+ if (persistentFailureTimer) {
47
+ BgTimer.clearTimeout(persistentFailureTimer)
48
+ persistentFailureTimer = null
49
+ }
50
+ persistentFailureNotified = false
51
+ }
52
+
53
+ type Lc3FrameSizeBytes = 20 | 40 | 60
54
+
55
+ // Neutral last-ditch fallbacks (reachable under `adb reverse`) for when the host
56
+ // passes no endpoints. The host normally resolves the real URLs (dev override /
57
+ // Metro host / env) and hands them in via `engine.configure({config})`.
58
+ const FALLBACK_CORE_URL = "http://localhost:3000"
59
+ const FALLBACK_RUNTIME_URL = "http://localhost:3001"
60
+ const LOCAL_AUTH_PORT = 3002
61
+
62
+ let client: CloudClient | null = null
63
+ let connected = false
64
+ let persistentFailureTimer: ReturnType<typeof BgTimer.setTimeout> | null = null
65
+ let persistentFailureNotified = false
66
+ let audioSubscriptions: AudioSubscription[] = []
67
+ let transportsReady = false
68
+ /** Endpoints to build with — seeded from config, overridable via reconnect(). */
69
+ let endpointsOverride: {core: string; runtime: string} | null = null
70
+ let runtimeStatusUnsubscribe: (() => void) | null = null
71
+ let transcriptUnsubscribe: (() => void) | null = null
72
+ let translationUnsubscribe: (() => void) | null = null
73
+ let authStateUnsubscribe: (() => void) | null = null
74
+ let localDevRuntimeToken: {runtimeUrl: string; token: string; expiresAtMs: number} | null = null
75
+ let lc3FrameSizeUnsubscribe: (() => void) | null = null
76
+ let coreTokenSyncPromise: Promise<string> | null = null
77
+
78
+ const transcriptListeners = new Set<(d: TranscriptionData) => void>()
79
+ const translationListeners = new Set<(d: TranslationData) => void>()
80
+ const statusListeners = new Set<(snapshot: CloudClientStatusSnapshot) => void>()
81
+ const connectionListeners = new Set<(connected: boolean) => void>()
82
+
83
+ function resolveEndpoints(): {core: string; runtime: string} {
84
+ if (endpointsOverride) return endpointsOverride
85
+ const cfg = getConfigValues()
86
+ return {
87
+ core: cfg.coreUrl?.trim() || FALLBACK_CORE_URL,
88
+ runtime: cfg.runtimeUrl?.trim() || FALLBACK_RUNTIME_URL,
89
+ }
90
+ }
91
+
92
+ function getCoreClient(): CloudCore {
93
+ if (!client) construct()
94
+ const core = client?.core
95
+ if (!core) throw new Error("cloud client core not configured")
96
+ return core
97
+ }
98
+
99
+ function syncCoreAccessTokenToBluetooth(): Promise<string> {
100
+ if (coreTokenSyncPromise) return coreTokenSyncPromise
101
+
102
+ coreTokenSyncPromise = syncCoreAccessTokenToBluetoothInternal().finally(() => {
103
+ coreTokenSyncPromise = null
104
+ })
105
+ return coreTokenSyncPromise
106
+ }
107
+
108
+ async function syncCoreAccessTokenToBluetoothInternal(): Promise<string> {
109
+ if (!client) construct()
110
+ const c = client
111
+ if (!c) throw new Error("cloud client not initialized")
112
+
113
+ const token = await c.auth.getCoreToken()
114
+ if (c !== client) {
115
+ throw new Error("cloud client changed while syncing core token")
116
+ }
117
+ const result = await useSettingsStore.getState().setSetting(SETTINGS.core_token.key, token, false)
118
+ if (result.is_error()) {
119
+ throw result.error
120
+ }
121
+
122
+ try {
123
+ await BluetoothSdk.updateBluetoothSettings({[SETTINGS.core_token.key]: token})
124
+ } catch (err) {
125
+ console.warn(`${LOG_TAG}: direct Bluetooth core_token sync failed: ${(err as Error)?.message ?? err}`)
126
+ }
127
+
128
+ return token
129
+ }
130
+
131
+ function frameSizeBytes(): Lc3FrameSizeBytes {
132
+ // Read LIVE from the engine settings store (the source of truth) so a
133
+ // reconnect after a glasses swap (G1=20 ↔ G2=40) picks up the new frame size,
134
+ // not the one-time engine.configure({config}) snapshot. Falls back to the
135
+ // config value (set at boot) then 20 when the setting is unset.
136
+ const fromSettings = useSettingsStore.getState().getSetting(SETTINGS.lc3_frame_size.key)
137
+ const size = fromSettings ?? getConfigValues().audioFrameSizeBytes
138
+ return size === 20 || size === 40 || size === 60 ? size : 20
139
+ }
140
+
141
+ async function getSubjectToken(): Promise<{token: string; type: SubjectTokenType}> {
142
+ const a = getAuth()
143
+ if (!a) throw new Error("cloudClient: engine.configure({auth}) not called")
144
+ const r = await a.getSubjectToken()
145
+ // IslandAuth's SubjectTokenType is intentionally open (`string & {}`) so OEMs
146
+ // can use other token kinds; cloud-client's is a closed union. The host's
147
+ // actual value ("supabase") is valid — narrow at this boundary.
148
+ return {token: r.token, type: r.type as SubjectTokenType}
149
+ }
150
+
151
+ function normalizeExpiresAt(expiresAt: number): number {
152
+ return expiresAt < 10_000_000_000 ? expiresAt * 1000 : expiresAt
153
+ }
154
+
155
+ function shouldUseLocalDevRuntimeToken(endpoints: {runtime: string}): boolean {
156
+ if (!__DEV__) return false
157
+ try {
158
+ const host = new URL(endpoints.runtime).hostname
159
+ return host === "localhost" || host === "127.0.0.1" || host === "10.0.2.2"
160
+ } catch {
161
+ return false
162
+ }
163
+ }
164
+
165
+ async function getLocalDevRuntimeToken(runtimeEndpoint: string, opts?: {forceRefresh?: boolean}): Promise<string> {
166
+ const now = Date.now()
167
+ if (
168
+ !opts?.forceRefresh &&
169
+ localDevRuntimeToken?.runtimeUrl === runtimeEndpoint &&
170
+ localDevRuntimeToken.expiresAtMs - now > 60_000
171
+ ) {
172
+ return localDevRuntimeToken.token
173
+ }
174
+
175
+ const base = new URL(runtimeEndpoint)
176
+ base.port = String(LOCAL_AUTH_PORT)
177
+ base.pathname = "/api/dev/runtime-token"
178
+ base.search = new URLSearchParams({userId: "local-phone-user", tenantId: "mentra"}).toString()
179
+
180
+ const res = await fetch(base.toString())
181
+ if (!res.ok) {
182
+ throw new Error(`cloudClient: local dev runtime token failed (${res.status})`)
183
+ }
184
+ const body = (await res.json()) as {access_token?: string; expires_in?: number}
185
+ if (!body.access_token) {
186
+ throw new Error("cloudClient: local dev runtime token response missing access_token")
187
+ }
188
+ localDevRuntimeToken = {
189
+ runtimeUrl: runtimeEndpoint,
190
+ token: body.access_token,
191
+ expiresAtMs: now + (body.expires_in ?? 300) * 1000,
192
+ }
193
+ return body.access_token
194
+ }
195
+
196
+ function toCloudClientStatusSnapshot(snapshot: RuntimeSnapshot): CloudClientStatusSnapshot {
197
+ return {status: snapshot.status, audioTransport: snapshot.audioTransport}
198
+ }
199
+
200
+ function currentRuntimeStatus(): CloudClientStatusSnapshot {
201
+ const state = useCloudClientStatusStore.getState()
202
+ return {status: state.status, audioTransport: state.audioTransport}
203
+ }
204
+
205
+ function setRuntimeStatus(snapshot: RuntimeSnapshot): void {
206
+ useCloudClientStatusStore.getState().setSnapshot(snapshot)
207
+ emitStatus(toCloudClientStatusSnapshot(snapshot))
208
+ }
209
+
210
+ function resetRuntimeStatus(): void {
211
+ useCloudClientStatusStore.getState().reset()
212
+ emitStatus(currentRuntimeStatus())
213
+ }
214
+
215
+ function stringifyMeta(meta: unknown): string {
216
+ if (!meta || typeof meta !== "object") return ""
217
+ try {
218
+ return ` ${JSON.stringify(meta)}`
219
+ } catch {
220
+ return ""
221
+ }
222
+ }
223
+
224
+ const cloudLogger = {
225
+ debug: (msg: string, meta?: unknown) => console.log(`${LOG_TAG}: debug: ${msg}${stringifyMeta(meta)}`),
226
+ info: (msg: string, meta?: unknown) => console.log(`${LOG_TAG}: info: ${msg}${stringifyMeta(meta)}`),
227
+ warn: (msg: string, meta?: unknown) => console.warn(`${LOG_TAG}: warn: ${msg}${stringifyMeta(meta)}`),
228
+ error: (msg: string, meta?: unknown) => console.warn(`${LOG_TAG}: error: ${msg}${stringifyMeta(meta)}`),
229
+ }
230
+
231
+ function notifyConnectionListeners(next: boolean): void {
232
+ for (const l of connectionListeners) {
233
+ try {
234
+ l(next)
235
+ } catch (err) {
236
+ console.warn(`${LOG_TAG}: connection listener threw: ${(err as Error)?.message ?? err}`)
237
+ }
238
+ }
239
+ }
240
+
241
+ function extractUnsubscribe(sub: unknown): (() => void) | null {
242
+ const candidates: unknown[] = []
243
+ const s = sub as Record<string, unknown> | null | undefined
244
+ if (s && typeof s === "object") {
245
+ candidates.push(s)
246
+ candidates.push((s.value as Record<string, unknown>)?.subscription)
247
+ candidates.push((s.data as Record<string, unknown>)?.subscription)
248
+ candidates.push(s.subscription)
249
+ }
250
+ for (const c of candidates) {
251
+ const unsub = (c as {unsubscribe?: unknown})?.unsubscribe
252
+ if (typeof unsub === "function") return unsub as () => void
253
+ }
254
+ return null
255
+ }
256
+
257
+ function ensureAuthWatch(): void {
258
+ if (authStateUnsubscribe) return
259
+ authStateUnsubscribe = () => {}
260
+
261
+ const auth = getAuth()
262
+ if (!auth?.onStateChange) return
263
+
264
+ let reconnectPending = false
265
+ try {
266
+ const sub = auth.onStateChange((event, session) => {
267
+ if (!session?.token) return
268
+ if (connected || reconnectPending) return
269
+
270
+ reconnectPending = true
271
+ console.log(`${LOG_TAG}: auth session available (${event}) while disconnected — reconnecting`)
272
+ try {
273
+ cloudClientService.reconnect()
274
+ } finally {
275
+ setTimeout(() => {
276
+ reconnectPending = false
277
+ }, 0)
278
+ }
279
+ })
280
+
281
+ const unsub = extractUnsubscribe(sub)
282
+ if (unsub) authStateUnsubscribe = unsub
283
+ } catch (err) {
284
+ console.warn(`${LOG_TAG}: auth watch subscribe failed: ${(err as Error)?.message ?? err}`)
285
+ }
286
+ }
287
+
288
+ function stopAuthWatch(): void {
289
+ authStateUnsubscribe?.()
290
+ authStateUnsubscribe = null
291
+ }
292
+
293
+ function emitTranscript(data: TranscriptionData): void {
294
+ for (const l of transcriptListeners) {
295
+ try {
296
+ l(data)
297
+ } catch (err) {
298
+ console.warn(`${LOG_TAG}: transcript listener threw: ${(err as Error)?.message ?? err}`)
299
+ }
300
+ }
301
+ }
302
+
303
+ function emitTranslation(data: TranslationData): void {
304
+ for (const l of translationListeners) {
305
+ try {
306
+ l(data)
307
+ } catch (err) {
308
+ console.warn(`${LOG_TAG}: translation listener threw: ${(err as Error)?.message ?? err}`)
309
+ }
310
+ }
311
+ }
312
+
313
+ function emitStatus(snapshot: CloudClientStatusSnapshot): void {
314
+ for (const l of statusListeners) {
315
+ try {
316
+ l(snapshot)
317
+ } catch (err) {
318
+ console.warn(`${LOG_TAG}: status listener threw: ${(err as Error)?.message ?? err}`)
319
+ }
320
+ }
321
+ }
322
+
323
+ function ensureTransports(): void {
324
+ if (transportsReady) return
325
+ transportsReady = true
326
+ setNativeUdp(() => createCloudUdpSocket())
327
+ setSecureStorage(cloudSecureStore)
328
+ if (Platform.OS !== "android") return
329
+ setNativeHttp(async (input, init) => {
330
+ if (typeof input !== "string" || (init?.body != null && typeof init.body !== "string")) {
331
+ return globalThis.fetch(input, init)
332
+ }
333
+ const headers = Object.fromEntries(new Headers(init?.headers).entries())
334
+ const result = await CrustModule.nativeHttpRequest(
335
+ init?.method ?? "GET",
336
+ input,
337
+ headers,
338
+ (init?.body as string | undefined) ?? null,
339
+ )
340
+ return new Response(nativeHttpResponseBody(result.status, result.body), {
341
+ status: result.status,
342
+ statusText: result.statusText,
343
+ headers: result.headers,
344
+ })
345
+ })
346
+ }
347
+
348
+ function clearRuntimeEventSubscriptions(): void {
349
+ runtimeStatusUnsubscribe?.()
350
+ runtimeStatusUnsubscribe = null
351
+ transcriptUnsubscribe?.()
352
+ transcriptUnsubscribe = null
353
+ translationUnsubscribe?.()
354
+ translationUnsubscribe = null
355
+ }
356
+
357
+ function startLc3FrameSizeWatcher(): void {
358
+ if (lc3FrameSizeUnsubscribe) return
359
+
360
+ let last = frameSizeBytes()
361
+ lc3FrameSizeUnsubscribe = useSettingsStore.subscribe(
362
+ (state) => state.getSetting(SETTINGS.lc3_frame_size.key),
363
+ () => {
364
+ const next = frameSizeBytes()
365
+ if (next === last) return
366
+ last = next
367
+ if (!client) return
368
+ console.log(`${LOG_TAG}: LC3 frame size changed to ${next}; reconnecting runtime`)
369
+ cloudClientService.reconnect()
370
+ },
371
+ )
372
+ }
373
+
374
+ function stopLc3FrameSizeWatcher(): void {
375
+ lc3FrameSizeUnsubscribe?.()
376
+ lc3FrameSizeUnsubscribe = null
377
+ }
378
+
379
+ function construct(): void {
380
+ ensureTransports()
381
+
382
+ const endpoints = resolveEndpoints()
383
+ console.log(`${LOG_TAG}: endpoints ${JSON.stringify(endpoints)}`)
384
+
385
+ const coreAuth = {getSubjectToken}
386
+ const auth = shouldUseLocalDevRuntimeToken(endpoints)
387
+ ? {
388
+ core: coreAuth,
389
+ runtime: {getToken: (opts?: {forceRefresh?: boolean}) => getLocalDevRuntimeToken(endpoints.runtime, opts)},
390
+ }
391
+ : {core: coreAuth, runtime: {source: "core" as const}}
392
+
393
+ client = new CloudClient({
394
+ endpoints,
395
+ // The phone LC3-encodes mic audio (even in phone/simulated mode); announce
396
+ // LC3 at 16 kHz with the frame size the encoder emits.
397
+ audio: {codec: "lc3", sampleRate: 16000, frameSizeBytes: frameSizeBytes()},
398
+ auth,
399
+ logger: cloudLogger,
400
+ })
401
+
402
+ const c = client
403
+ clearRuntimeEventSubscriptions()
404
+ runtimeStatusUnsubscribe = c.runtime.onStatusChanged((status) => {
405
+ if (c !== client) return
406
+ setRuntimeStatus(status)
407
+ })
408
+ transcriptUnsubscribe = c.runtime.onTranscript((data) => {
409
+ if (c !== client) return
410
+ logCloudV2TranscriptMetric(data)
411
+ emitTranscript(data)
412
+ })
413
+ translationUnsubscribe = c.runtime.onTranslation((data) => {
414
+ if (c !== client) return
415
+ emitTranslation(data)
416
+ })
417
+ setRuntimeStatus(c.runtime.getStatus())
418
+
419
+ c.runtime.onConnected(() => {
420
+ if (c !== client) return
421
+ connected = true
422
+ console.log(`${LOG_TAG}: runtime connected`)
423
+ // Cloud is up — cancel any pending persistent-failure alarm and re-arm for the
424
+ // next outage.
425
+ clearPersistentFailureAlarm()
426
+ // Re-apply the authoritative subscription set, including the empty set, so
427
+ // a fresh phone launch clears any stale server-side audio subscriptions.
428
+ c.runtime
429
+ .setSubscriptions(audioSubscriptions)
430
+ .catch((err) =>
431
+ console.warn(`${LOG_TAG}: re-applying queued subscriptions failed: ${(err as Error)?.message ?? err}`),
432
+ )
433
+ notifyConnectionListeners(true)
434
+ })
435
+ c.runtime.onDisconnected((info) => {
436
+ if (c !== client) return
437
+ connected = false
438
+ console.log(`${LOG_TAG}: runtime disconnected (${info.reason})`)
439
+ // Arm the persistent-failure alarm once; if we're still down when it fires, raise
440
+ // the notification. A reconnect within the window cancels it (onConnected above).
441
+ if (!persistentFailureTimer && !persistentFailureNotified) {
442
+ persistentFailureTimer = BgTimer.setTimeout(() => {
443
+ persistentFailureTimer = null
444
+ if (connected) return
445
+ persistentFailureNotified = true
446
+ islandNotifications.emit({
447
+ kind: "connection_failed_persistent",
448
+ reason: `Cloud session has been disconnected for over ${Math.round(CLOUD_PERSISTENT_FAILURE_MS / 1000)}s`,
449
+ metadata: {downForMs: CLOUD_PERSISTENT_FAILURE_MS, lastReason: info.reason},
450
+ timestamp: Date.now(),
451
+ })
452
+ }, CLOUD_PERSISTENT_FAILURE_MS)
453
+ }
454
+ notifyConnectionListeners(false)
455
+ })
456
+ c.runtime.onError((err) => {
457
+ console.warn(`${LOG_TAG}: runtime error: ${err.code}`)
458
+ })
459
+
460
+ // Best-effort connect. Do not crash the app if the dev cloud is unreachable.
461
+ c.runtime
462
+ .connect()
463
+ .then(() => console.log(`${LOG_TAG}: connect() resolved`))
464
+ .catch((err) => console.warn(`${LOG_TAG}: connect() failed: ${err?.message ?? err}`))
465
+
466
+ syncCoreAccessTokenToBluetooth().catch((err) =>
467
+ console.warn(`${LOG_TAG}: initial Bluetooth core_token sync failed: ${(err as Error)?.message ?? err}`),
468
+ )
469
+
470
+ startLc3FrameSizeWatcher()
471
+ }
472
+
473
+ /**
474
+ * engine's cloud client. Owns the singleton CloudClient, its connection state,
475
+ * and the runtime-hook wiring.
476
+ */
477
+ export const cloudClientService = {
478
+ /**
479
+ * Construct (once) + connect the client. Idempotent. Best-effort connect — a
480
+ * failure is logged and the app keeps running. Requires
481
+ * `engine.configure({auth, config})` first.
482
+ */
483
+ init(): void {
484
+ if (client) return
485
+ ensureAuthWatch()
486
+ construct()
487
+ },
488
+
489
+ /**
490
+ * Tear down + rebuild. Pass new endpoints to switch URLs; pass `null` to CLEAR
491
+ * a prior override and fall back to the boot config (so cleared/default cloud
492
+ * URLs don't keep reconnecting to a stale override); omit to keep the current.
493
+ */
494
+ reconnect(endpoints?: {core: string; runtime: string} | null): void {
495
+ if (endpoints !== undefined) endpointsOverride = endpoints
496
+ try {
497
+ client?.runtime.close()
498
+ } catch (err) {
499
+ console.warn(`${LOG_TAG}: reconnect close() failed: ${(err as Error)?.message ?? err}`)
500
+ }
501
+ clearRuntimeEventSubscriptions()
502
+ clearPersistentFailureAlarm()
503
+
504
+ const wasConnected = connected
505
+ client = null
506
+ localDevRuntimeToken = null
507
+ connected = false
508
+ resetRuntimeStatus()
509
+ if (wasConnected) notifyConnectionListeners(false)
510
+
511
+ construct()
512
+ },
513
+
514
+ async getPreinstalledMiniappRegistry(): Promise<PreinstalledMiniappRegistry> {
515
+ if (!client) this.init()
516
+ const c = client
517
+ if (!c?.core) throw new Error("cloud client core is unavailable")
518
+ return c.core.miniapps.getRegistry()
519
+ },
520
+
521
+ async getMiniappAuthToken(
522
+ packageName: string,
523
+ opts?: {minTtlMs?: number; devAttestation?: string},
524
+ ): Promise<MiniappAuthToken> {
525
+ if (!client) this.init()
526
+ const c = client
527
+ if (!c) throw new Error("cloud client not initialized")
528
+
529
+ const {token, expiresAt} = await c.auth.getMiniappToken(packageName, opts)
530
+ const identity = c.auth.identity
531
+ return {
532
+ mentraUserId: identity.mentraUserId,
533
+ tenantId: identity.tenantId,
534
+ token,
535
+ expiresAt: normalizeExpiresAt(expiresAt),
536
+ }
537
+ },
538
+
539
+ /** Tear down the client + connection (the engine.stop() lifecycle). */
540
+ stop(): void {
541
+ try {
542
+ client?.runtime.close()
543
+ } catch (err) {
544
+ console.warn(`${LOG_TAG}: stop close() failed: ${(err as Error)?.message ?? err}`)
545
+ }
546
+ stopLc3FrameSizeWatcher()
547
+ stopAuthWatch()
548
+ clearRuntimeEventSubscriptions()
549
+ clearPersistentFailureAlarm()
550
+ const wasConnected = connected
551
+ client = null
552
+ localDevRuntimeToken = null
553
+ connected = false
554
+ resetRuntimeStatus()
555
+ if (wasConnected) notifyConnectionListeners(false)
556
+ },
557
+
558
+ /** Device-side managed photo (cloud-v2): presign now, deliver bytes, await ready. */
559
+ startManagedPhoto(opts: Record<string, unknown> = {}) {
560
+ if (!client) throw new Error("cloud client not connected")
561
+ return client.runtime.startManagedPhoto(opts)
562
+ },
563
+ awaitManagedPhotoReady(requestId: string) {
564
+ if (!client) throw new Error("cloud client not connected")
565
+ return client.runtime.awaitManagedPhotoReady(requestId)
566
+ },
567
+
568
+ /** Managed stream (cloud-v2): provision ingest+playback on the runtime. */
569
+ startManagedStream(opts: Record<string, unknown> = {}) {
570
+ if (!client) throw new Error("cloud client not connected")
571
+ return client.runtime.startManagedStream(opts)
572
+ },
573
+ getManagedStreamStatus(streamId: string) {
574
+ if (!client) throw new Error("cloud client not connected")
575
+ return client.runtime.getManagedStreamStatus(streamId)
576
+ },
577
+ stopManagedStream(streamId: string) {
578
+ if (!client) throw new Error("cloud client not connected")
579
+ return client.runtime.stopManagedStream(streamId)
580
+ },
581
+
582
+ /** Current live-session connection state (handshake completed). */
583
+ isConnected(): boolean {
584
+ return connected
585
+ },
586
+
587
+ /** Subscribe to connection-state transitions. Returns an unsubscribe fn. */
588
+ onConnectionChange(listener: (connected: boolean) => void): () => void {
589
+ connectionListeners.add(listener)
590
+ return () => {
591
+ connectionListeners.delete(listener)
592
+ }
593
+ },
594
+
595
+ /** Replace the v2 cloud's audio subscription set for the live session. */
596
+ async setSubscriptions(subs: AudioSubscription[]): Promise<void> {
597
+ // Cache unconditionally so the desired set survives a not-yet-connected
598
+ // session and reconnects; the onConnected handler re-applies the cached set.
599
+ audioSubscriptions = subs
600
+ const c = client
601
+ if (connected && c) {
602
+ await c.runtime.setSubscriptions(subs)
603
+ }
604
+ },
605
+
606
+ sendAudioFrame(frame: Uint8Array): void {
607
+ client?.runtime.sendAudioFrame(frame)
608
+ },
609
+
610
+ onTranscript(cb: (d: TranscriptionData) => void): () => void {
611
+ transcriptListeners.add(cb)
612
+ return () => {
613
+ transcriptListeners.delete(cb)
614
+ }
615
+ },
616
+
617
+ onTranslation(cb: (d: TranslationData) => void): () => void {
618
+ translationListeners.add(cb)
619
+ return () => {
620
+ translationListeners.delete(cb)
621
+ }
622
+ },
623
+
624
+ getStatus(): CloudClientStatusSnapshot {
625
+ return currentRuntimeStatus()
626
+ },
627
+
628
+ getCoreUrl(): string {
629
+ return resolveEndpoints().core
630
+ },
631
+
632
+ syncCoreTokenToBluetooth(): Promise<string> {
633
+ return syncCoreAccessTokenToBluetooth()
634
+ },
635
+
636
+ onStatusChanged(cb: (snapshot: CloudClientStatusSnapshot) => void): () => void {
637
+ statusListeners.add(cb)
638
+ return () => {
639
+ statusListeners.delete(cb)
640
+ }
641
+ },
642
+
643
+ tts: {
644
+ speak(text: string, options?: Parameters<CloudClient["runtime"]["tts"]["speak"]>[1]) {
645
+ if (!client) throw new Error("cloud client not connected")
646
+ return client.runtime.tts.speak(text, options)
647
+ },
648
+ },
649
+
650
+ maps: {
651
+ directions(req: Parameters<CloudClient["runtime"]["maps"]["directions"]>[0]) {
652
+ if (!client) throw new Error("cloud client not connected")
653
+ return client.runtime.maps.directions(req)
654
+ },
655
+ reverseGeocode(coord: Parameters<CloudClient["runtime"]["maps"]["reverseGeocode"]>[0]) {
656
+ if (!client) throw new Error("cloud client not connected")
657
+ return client.runtime.maps.reverseGeocode(coord)
658
+ },
659
+ placeAutocomplete(req: Parameters<CloudClient["runtime"]["maps"]["placeAutocomplete"]>[0]) {
660
+ if (!client) throw new Error("cloud client not connected")
661
+ return client.runtime.maps.placeAutocomplete(req)
662
+ },
663
+ placeDetails(req: Parameters<CloudClient["runtime"]["maps"]["placeDetails"]>[0]) {
664
+ if (!client) throw new Error("cloud client not connected")
665
+ return client.runtime.maps.placeDetails(req)
666
+ },
667
+ },
668
+
669
+ core: {
670
+ reports: {
671
+ submit(...args: Parameters<CloudCore["reports"]["submit"]>) {
672
+ return getCoreClient().reports.submit(...args)
673
+ },
674
+ addLogs(...args: Parameters<CloudCore["reports"]["addLogs"]>) {
675
+ return getCoreClient().reports.addLogs(...args)
676
+ },
677
+ addScreenshots(...args: Parameters<CloudCore["reports"]["addScreenshots"]>) {
678
+ return getCoreClient().reports.addScreenshots(...args)
679
+ },
680
+ complete(...args: Parameters<CloudCore["reports"]["complete"]>) {
681
+ return getCoreClient().reports.complete(...args)
682
+ },
683
+ },
684
+ },
685
+
686
+ hasAudioSubscriptions(): boolean {
687
+ return audioSubscriptions.length > 0
688
+ },
689
+ }