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