@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,632 @@
1
+ /**
2
+ * PhoneStreamCoordinator — owns all local-miniapp streaming on the phone.
3
+ *
4
+ * Architecture:
5
+ * miniapp → SDK → LocalMiniappRuntime → coordinator
6
+ * coordinator → BluetoothSdk (BLE → glasses publisher)
7
+ * coordinator ↔ cloudStreamApi (managed only, cloud-v2 runtime provisioning)
8
+ * coordinator ↔ StreamLifecycleController (keep-alive heartbeat)
9
+ * coordinator → status listeners → routed back to miniapp(s)
10
+ *
11
+ * Single-stream constraint:
12
+ * At most ONE stream is active across all miniapps. The exception is that
13
+ * multiple miniapps can subscribe to a single managed stream that's already
14
+ * running — Cloudflare muxes one ingest into many viewers, so subscribers
15
+ * share the same playback URLs. Refcounted; teardown happens when the last
16
+ * subscriber releases.
17
+ *
18
+ * Status routing:
19
+ * Glasses publisher status arrives over BLE as `stream_status` events with
20
+ * a `streamId`. The coordinator's `owns(streamId)` lookup lets MantleManager
21
+ * route phone-owned status events here (not to cloud). For managed streams,
22
+ * we additionally poll Cloudflare's live-input status every 5s to surface
23
+ * what the OTHER end of the pipe sees.
24
+ *
25
+ * Important: this is the ONLY place that mints `streamId`s for phone-owned
26
+ * streams. We use a `phone-` prefix so they're trivially distinguishable from
27
+ * cloud-minted IDs in logs and from cloud-SDK app streams that flow through
28
+ * the legacy path.
29
+ */
30
+ import BluetoothSdk from "@mentra/bluetooth-sdk/internal";
31
+ import { isGlassesConnected } from "./GlassesReadiness";
32
+ import { useGlassesStore } from "../stores/glasses";
33
+ import { StreamLifecycleController } from "./StreamLifecycleController";
34
+ import { slimStreamStatusEvent, streamStatusSignature } from "./slimStreamStatus";
35
+ import { getManagedStreamStatus, provisionManagedStream, teardownManagedStream, } from "./cloudStreamApi";
36
+ /**
37
+ * Default cadence + thresholds. Exposed via {@link CoordinatorTimings} so tests
38
+ * can shorten them; production code should never override these.
39
+ */
40
+ const DEFAULT_TIMINGS = {
41
+ keepAliveIntervalMs: 15_000,
42
+ ackTimeoutMs: 10_000,
43
+ maxMissedAcks: 3,
44
+ cloudflareStatusPollMs: 5_000,
45
+ // Cloudflare typically needs ~5-10s after first frame before HLS is live.
46
+ hlsReadinessInitialDelayMs: 5_000,
47
+ hlsReadinessPollMs: 2_000,
48
+ hlsReadinessMaxAttempts: 30,
49
+ };
50
+ // Console-backed minimal logger; replaces pino on the phone.
51
+ const consoleLogger = {
52
+ child: (bindings) => ({
53
+ ...consoleLogger,
54
+ debug: (...args) => console.debug("[STREAM]", bindings, ...args),
55
+ warn: (...args) => console.warn("[STREAM]", bindings, ...args),
56
+ error: (...args) => console.error("[STREAM]", bindings, ...args),
57
+ }),
58
+ debug: (...args) => console.debug("[STREAM]", ...args),
59
+ warn: (...args) => console.warn("[STREAM]", ...args),
60
+ error: (...args) => console.error("[STREAM]", ...args),
61
+ };
62
+ export class StreamConflictError extends Error {
63
+ code;
64
+ stage;
65
+ transport;
66
+ constructor(code, message,
67
+ /** Pipeline stage that failed (provision | command | publish | playback). */
68
+ stage,
69
+ /** Transport in play at the failure (cloud-rest | ble | wifi). */
70
+ transport) {
71
+ super(message);
72
+ this.code = code;
73
+ this.stage = stage;
74
+ this.transport = transport;
75
+ this.name = "StreamConflictError";
76
+ }
77
+ }
78
+ /**
79
+ * Fail fast if glasses aren't connected — BEFORE provisioning. Without this a
80
+ * managed start would create a provider live input, fail the BLE command, and
81
+ * tear the input down again: a slow, billable no-op with a confusing error.
82
+ */
83
+ function assertGlassesConnected() {
84
+ if (!isGlassesConnected(useGlassesStore.getState().connection)) {
85
+ throw new StreamConflictError("GLASSES_NOT_CONNECTED", "Glasses are not connected", "command", "ble");
86
+ }
87
+ }
88
+ export class PhoneStreamCoordinator {
89
+ current = null;
90
+ lifecycle = null;
91
+ statusSubscriber = null;
92
+ idCounter = 0;
93
+ timings;
94
+ /**
95
+ * Serializes state transitions (start, stop, teardown). Without it, a
96
+ * second `start*` racing with the first can pass the `this.current === null`
97
+ * pre-check while the first is still awaiting its provision/BLE work, and
98
+ * end up provisioning two separate streams. A teardown racing with a start
99
+ * can clear `current` mid-stop and let the start fire BLE writes that
100
+ * collide with the in-flight stopStream.
101
+ */
102
+ inFlight = Promise.resolve();
103
+ /** Drop identical stream_status fanouts within one session. */
104
+ lastFanoutSignature = null;
105
+ /** Send full resolvedConfig only once per stream session. */
106
+ resolvedConfigForwarded = false;
107
+ constructor(timings = {}) {
108
+ this.timings = { ...DEFAULT_TIMINGS, ...timings };
109
+ }
110
+ /**
111
+ * Run `work` under the transition lock. Each call awaits the previous
112
+ * transition before re-evaluating preconditions, so e.g. two concurrent
113
+ * `startManaged` calls are observed sequentially.
114
+ */
115
+ async runExclusive(work) {
116
+ const prev = this.inFlight;
117
+ let release;
118
+ this.inFlight = new Promise((r) => (release = r));
119
+ try {
120
+ await prev;
121
+ return await work();
122
+ }
123
+ finally {
124
+ release();
125
+ }
126
+ }
127
+ /**
128
+ * Register the function that routes status updates to miniapps.
129
+ * LocalMiniappRuntime wires this so updates become EVENT envelopes on the
130
+ * `stream_status` stream for every subscribing miniapp.
131
+ */
132
+ setStatusSubscriber(cb) {
133
+ this.statusSubscriber = cb;
134
+ }
135
+ /**
136
+ * True when a phone-owned stream currently uses this streamId. For managed
137
+ * streams, all subscribers share the same streamId so a single equality
138
+ * check covers the multi-subscriber case.
139
+ */
140
+ owns(streamId) {
141
+ return this.current !== null && this.current.streamId === streamId;
142
+ }
143
+ async startUnmanaged(packageName, opts) {
144
+ // Pre-check the obvious-bad input before queueing — the lock is for
145
+ // serializing state transitions, not for validating arguments.
146
+ if (!opts.streamUrl || typeof opts.streamUrl !== "string") {
147
+ throw new StreamConflictError("STREAM_URL_REQUIRED", "streamUrl is required");
148
+ }
149
+ assertGlassesConnected();
150
+ return this.runExclusive(async () => {
151
+ if (this.current) {
152
+ throw new StreamConflictError("STREAM_ALREADY_ACTIVE", `A ${this.current.kind} stream is already active. Stop it before starting a new one.`);
153
+ }
154
+ const streamId = this.mintId("u");
155
+ const entry = {
156
+ kind: "unmanaged",
157
+ streamId,
158
+ packageName,
159
+ streamUrl: opts.streamUrl,
160
+ };
161
+ // Claim the slot BEFORE the BLE call so a concurrent caller waiting on
162
+ // the lock sees the in-progress entry and rejects with the conflict.
163
+ this.current = entry;
164
+ try {
165
+ const event = await BluetoothSdk.startExternallyManagedStream({
166
+ type: "start_stream",
167
+ streamUrl: opts.streamUrl,
168
+ streamId,
169
+ sound: opts.sound ?? true,
170
+ // The native bridge rejects explicit `undefined` values ("Value is
171
+ // undefined, expected an Object") — only include what was provided.
172
+ ...(opts.video !== undefined ? { video: opts.video } : {}),
173
+ ...(opts.audio !== undefined ? { audio: opts.audio } : {}),
174
+ });
175
+ const result = publisherStartResult(streamId, event);
176
+ this.startLifecycle(streamId);
177
+ return result;
178
+ }
179
+ catch (err) {
180
+ this.current = null;
181
+ throw err;
182
+ }
183
+ });
184
+ }
185
+ async startManaged(packageName, opts) {
186
+ // Two-phase: the entry-claim runs under the transition lock; the wait for
187
+ // HLS readiness happens AFTER the lock releases so a long warm-up doesn't
188
+ // block subsequent start/stop transitions on this coordinator.
189
+ assertGlassesConnected();
190
+ const decision = await this.runExclusive(async () => {
191
+ if (this.current && this.current.kind === "unmanaged") {
192
+ throw new StreamConflictError("STREAM_ALREADY_ACTIVE", "An unmanaged stream is already active. Stop it before starting a managed stream.");
193
+ }
194
+ // Join an existing managed stream if one is already running.
195
+ if (this.current && this.current.kind === "managed") {
196
+ const existing = this.current;
197
+ // Restream destinations are immutable after provision — a second
198
+ // caller trying to dictate destinations on an already-live stream
199
+ // is a likely bug or a feature we don't yet support.
200
+ if (opts.restreamDestinations && opts.restreamDestinations.length > 0) {
201
+ throw new StreamConflictError("STREAM_DESTINATIONS_LOCKED", "Restream destinations cannot be modified on an already-running managed stream.");
202
+ }
203
+ existing.subscribers.add(packageName);
204
+ const immediate = existing.hlsReady
205
+ ? managedStartResult(existing)
206
+ : null;
207
+ return { kind: "join", entry: existing, immediate };
208
+ }
209
+ // Fresh provision — claim slot BEFORE awaiting Cloudflare so a
210
+ // concurrent caller queued behind us sees a managed stream in flight
211
+ // and joins instead of double-provisioning.
212
+ const provision = await provisionManagedStream(opts.restreamDestinations);
213
+ const streamId = this.mintId("m");
214
+ const ingestUrl = pickIngestUrl(provision, opts.ingest);
215
+ const mode = ingestUrl === provision.webrtcPublishUrl ? "webrtc" : "hls";
216
+ const entry = {
217
+ kind: "managed",
218
+ streamId,
219
+ liveInputId: provision.liveInputId,
220
+ ingestUrl,
221
+ mode,
222
+ hlsUrl: provision.hlsUrl,
223
+ dashUrl: provision.dashUrl,
224
+ webrtcUrl: provision.webrtcUrl,
225
+ subscribers: new Set([packageName]),
226
+ hlsReady: false,
227
+ hlsReadyResolvers: [],
228
+ hlsReadyRejecters: [],
229
+ hlsAttempts: 0,
230
+ connectAttempts: 0,
231
+ };
232
+ this.current = entry;
233
+ try {
234
+ const event = await BluetoothSdk.startExternallyManagedStream({
235
+ type: "start_stream",
236
+ streamUrl: ingestUrl,
237
+ streamId,
238
+ sound: opts.sound ?? true,
239
+ // See startUnmanaged: the native bridge rejects explicit `undefined`.
240
+ ...(opts.video !== undefined ? { video: opts.video } : {}),
241
+ ...(opts.audio !== undefined ? { audio: opts.audio } : {}),
242
+ });
243
+ entry.publisherStart = publisherStartResult(streamId, event);
244
+ }
245
+ catch (err) {
246
+ this.current = null;
247
+ await teardownManagedStream(provision.liveInputId).catch(() => undefined);
248
+ throw err;
249
+ }
250
+ this.startLifecycle(streamId);
251
+ this.startCloudflareStatusPoll(entry);
252
+ // hls mode: readiness = a real HLS manifest exists. webrtc mode: HLS
253
+ // never materializes (Cloudflare WHIP limitation) — readiness resolves
254
+ // off the status poll's first "connected" instead.
255
+ if (entry.mode === "hls") {
256
+ this.startHlsReadinessPoll(entry);
257
+ }
258
+ return { kind: "fresh", entry };
259
+ });
260
+ if (decision.kind === "join" && decision.immediate) {
261
+ return decision.immediate;
262
+ }
263
+ // Wait for playback readiness OUTSIDE the lock — readiness can take ~10s
264
+ // and we don't want to block other transitions for that long.
265
+ return new Promise((resolve, reject) => {
266
+ decision.entry.hlsReadyResolvers.push(resolve);
267
+ decision.entry.hlsReadyRejecters.push(reject);
268
+ });
269
+ }
270
+ async stop(packageName, streamId) {
271
+ await this.runExclusive(async () => {
272
+ if (!this.current)
273
+ return;
274
+ // If a streamId was passed but doesn't match, ignore — silent no-op
275
+ // matches the cloud's tolerant behavior.
276
+ if (streamId && this.current.streamId !== streamId)
277
+ return;
278
+ if (this.current.kind === "managed") {
279
+ const entry = this.current;
280
+ entry.subscribers.delete(packageName);
281
+ if (entry.subscribers.size > 0) {
282
+ // Other miniapps still subscribed; keep the stream alive.
283
+ return;
284
+ }
285
+ }
286
+ else if (this.current.packageName !== packageName) {
287
+ // Unmanaged stream: only the owner can stop it.
288
+ return;
289
+ }
290
+ await this.teardownLocked("explicit_stop");
291
+ });
292
+ }
293
+ /**
294
+ * Called by MantleManager when a `stream_status` event arrives from glasses
295
+ * and the registry says it's phone-owned.
296
+ */
297
+ handleGlassesStatus(event) {
298
+ if (!this.current)
299
+ return;
300
+ if (event.streamId && event.streamId !== this.current.streamId)
301
+ return;
302
+ this.lifecycle?.recordActivity();
303
+ const includeResolvedConfig = !this.resolvedConfigForwarded && !!event.resolvedConfig;
304
+ if (includeResolvedConfig)
305
+ this.resolvedConfigForwarded = true;
306
+ const slimData = slimStreamStatusEvent(event, { includeResolvedConfig });
307
+ const signature = streamStatusSignature(slimData);
308
+ if (signature === this.lastFanoutSignature)
309
+ return;
310
+ this.lastFanoutSignature = signature;
311
+ this.fanout({
312
+ streamId: this.current.streamId,
313
+ source: "glasses",
314
+ status: event.status,
315
+ data: slimData,
316
+ });
317
+ // Glasses-reported TERMINAL states unwind the coordinator. Terminal means
318
+ // the publisher gave up or stopped — NOT a transient `kind:"error"`: the
319
+ // glasses publisher auto-recovers (error → reconnecting → reconnected),
320
+ // and tearing down on the first hiccup deletes the live input out from
321
+ // under a publisher that comes right back (it then retries into a dead
322
+ // input forever). A publisher that errors and never recovers is reaped by
323
+ // the keep-alive ack timeout. Queue the teardown through the transition
324
+ // lock so it serializes with any start/stop currently in flight.
325
+ const isStopped = (event.kind === "lifecycle" && event.status === "stopped") ||
326
+ (event.kind === "snapshot" && event.status === "stopped");
327
+ const isGiveUp = event.kind === "reconnect" && event.status === "reconnect_failed";
328
+ if (isGiveUp || isStopped) {
329
+ const reason = isGiveUp ? "glasses_gave_up" : "glasses_stopped";
330
+ const targetStreamId = this.current.streamId;
331
+ void this.runExclusive(async () => {
332
+ // The stream we wanted to tear down may already be gone (e.g. another
333
+ // teardown won the lock and unwound it). Guard before acting.
334
+ if (this.current?.streamId !== targetStreamId)
335
+ return;
336
+ await this.teardownLocked(reason, { sendBleStop: false });
337
+ });
338
+ }
339
+ }
340
+ /** Called by MantleManager when a phone-owned keep_alive_ack arrives. */
341
+ handleKeepAliveAck(event) {
342
+ if (!event.ackId)
343
+ return;
344
+ this.lifecycle?.handleAck(event.ackId);
345
+ }
346
+ // ===========================================================================
347
+ // Internal
348
+ // ===========================================================================
349
+ mintId(prefix) {
350
+ this.idCounter += 1;
351
+ return `phone-${prefix}-${Date.now().toString(36)}-${this.idCounter}`;
352
+ }
353
+ startLifecycle(streamId) {
354
+ this.lifecycle?.dispose();
355
+ const ctrl = new StreamLifecycleController({
356
+ logger: consoleLogger,
357
+ streamId,
358
+ keepAliveIntervalMs: this.timings.keepAliveIntervalMs,
359
+ ackTimeoutMs: this.timings.ackTimeoutMs,
360
+ maxMissedAcks: this.timings.maxMissedAcks,
361
+ }, {
362
+ sendKeepAlive: async (ackId) => {
363
+ await BluetoothSdk.sendExternallyManagedStreamKeepAlive({
364
+ type: "keep_stream_alive",
365
+ streamId,
366
+ ackId,
367
+ });
368
+ },
369
+ onTimeout: async () => {
370
+ this.fanout({
371
+ streamId,
372
+ source: "coordinator",
373
+ status: "error",
374
+ data: { reason: "keep_alive_timeout" },
375
+ });
376
+ await this.runExclusive(async () => {
377
+ // The stream this timeout was bound to may already be gone.
378
+ if (this.current?.streamId !== streamId)
379
+ return;
380
+ await this.teardownLocked("keep_alive_timeout");
381
+ });
382
+ },
383
+ });
384
+ ctrl.setActive(true);
385
+ this.lifecycle = ctrl;
386
+ }
387
+ startCloudflareStatusPoll(entry) {
388
+ // webrtc mode: how many polls to wait for the first "connected" before
389
+ // declaring the publisher never reached Cloudflare. Mirrors the HLS
390
+ // readiness budget (~60s at the default 5s cadence).
391
+ const maxConnectAttempts = Math.max(1, Math.ceil((this.timings.hlsReadinessMaxAttempts * this.timings.hlsReadinessPollMs) /
392
+ this.timings.cloudflareStatusPollMs));
393
+ const poll = async () => {
394
+ if (this.current !== entry)
395
+ return;
396
+ try {
397
+ const status = await getManagedStreamStatus(entry.liveInputId);
398
+ this.fanout({
399
+ streamId: entry.streamId,
400
+ source: "cloudflare",
401
+ status: status.isConnected ? "connected" : "disconnected",
402
+ data: status,
403
+ });
404
+ // webrtc mode readiness: first "connected" means WHEP playback is
405
+ // available (WebRTC playback follows the ingest directly; there is no
406
+ // manifest to probe).
407
+ if (entry.mode === "webrtc" && !entry.hlsReady) {
408
+ if (status.isConnected) {
409
+ entry.hlsReady = true;
410
+ const result = managedStartResult(entry);
411
+ for (const r of entry.hlsReadyResolvers)
412
+ r(result);
413
+ entry.hlsReadyResolvers = [];
414
+ entry.hlsReadyRejecters = [];
415
+ this.fanout({
416
+ streamId: entry.streamId,
417
+ source: "coordinator",
418
+ status: "webrtc_ready",
419
+ data: result,
420
+ });
421
+ }
422
+ else {
423
+ entry.connectAttempts += 1;
424
+ if (entry.connectAttempts >= maxConnectAttempts) {
425
+ const err = new Error(`WebRTC ingest never reached Cloudflare after ${entry.connectAttempts} status polls`);
426
+ for (const reject of entry.hlsReadyRejecters)
427
+ reject(err);
428
+ entry.hlsReadyResolvers = [];
429
+ entry.hlsReadyRejecters = [];
430
+ this.fanout({
431
+ streamId: entry.streamId,
432
+ source: "coordinator",
433
+ status: "error",
434
+ data: { reason: "webrtc_not_connected" },
435
+ });
436
+ const targetStreamId = entry.streamId;
437
+ void this.runExclusive(async () => {
438
+ if (this.current?.streamId !== targetStreamId)
439
+ return;
440
+ await this.teardownLocked("webrtc_not_connected");
441
+ });
442
+ }
443
+ }
444
+ }
445
+ }
446
+ catch (err) {
447
+ console.warn("[STREAM] cloudflare status poll failed:", err);
448
+ }
449
+ };
450
+ entry.cloudflareTimer = setInterval(poll, this.timings.cloudflareStatusPollMs);
451
+ // Don't fire immediately — Cloudflare wouldn't have first-frame yet.
452
+ }
453
+ startHlsReadinessPoll(entry) {
454
+ // Skip the first few seconds — Cloudflare doesn't have first-frame yet,
455
+ // and the HEAD requests would all 404 and burn battery.
456
+ const tick = async () => {
457
+ if (this.current !== entry)
458
+ return;
459
+ entry.hlsAttempts += 1;
460
+ try {
461
+ // Require a real manifest (200 with a body), not just res.ok — the
462
+ // playback edge returns 204 No Content while the input has no
463
+ // HLS-capable frames (e.g. WebRTC ingest), and 204 is "ok".
464
+ const res = await fetch(entry.hlsUrl, { method: "HEAD" });
465
+ if (res.status === 200) {
466
+ entry.hlsReady = true;
467
+ if (entry.hlsTimer) {
468
+ clearInterval(entry.hlsTimer);
469
+ entry.hlsTimer = undefined;
470
+ }
471
+ const result = managedStartResult(entry);
472
+ for (const r of entry.hlsReadyResolvers)
473
+ r(result);
474
+ entry.hlsReadyResolvers = [];
475
+ entry.hlsReadyRejecters = [];
476
+ this.fanout({
477
+ streamId: entry.streamId,
478
+ source: "coordinator",
479
+ status: "hls_ready",
480
+ data: result,
481
+ });
482
+ return;
483
+ }
484
+ }
485
+ catch {
486
+ // 404 / network blip is expected while Cloudflare warms up.
487
+ }
488
+ if (entry.hlsAttempts >= this.timings.hlsReadinessMaxAttempts) {
489
+ if (entry.hlsTimer) {
490
+ clearInterval(entry.hlsTimer);
491
+ entry.hlsTimer = undefined;
492
+ }
493
+ const err = new Error(`HLS playback URL did not become ready after ${this.timings.hlsReadinessMaxAttempts} attempts`);
494
+ for (const reject of entry.hlsReadyRejecters)
495
+ reject(err);
496
+ entry.hlsReadyResolvers = [];
497
+ entry.hlsReadyRejecters = [];
498
+ this.fanout({
499
+ streamId: entry.streamId,
500
+ source: "coordinator",
501
+ status: "error",
502
+ data: { reason: "hls_not_ready" },
503
+ });
504
+ const targetStreamId = entry.streamId;
505
+ void this.runExclusive(async () => {
506
+ if (this.current?.streamId !== targetStreamId)
507
+ return;
508
+ await this.teardownLocked("hls_not_ready");
509
+ });
510
+ }
511
+ };
512
+ setTimeout(() => {
513
+ // Guard: stream may have been torn down during the initial delay.
514
+ if (this.current !== entry)
515
+ return;
516
+ entry.hlsTimer = setInterval(tick, this.timings.hlsReadinessPollMs);
517
+ }, this.timings.hlsReadinessInitialDelayMs);
518
+ }
519
+ fanout(update) {
520
+ if (!this.current || !this.statusSubscriber)
521
+ return;
522
+ const targets = this.current.kind === "managed"
523
+ ? Array.from(this.current.subscribers)
524
+ : [this.current.packageName];
525
+ for (const pkg of targets) {
526
+ try {
527
+ this.statusSubscriber(pkg, update);
528
+ }
529
+ catch (err) {
530
+ console.warn("[STREAM] statusSubscriber threw:", err);
531
+ }
532
+ }
533
+ }
534
+ /**
535
+ * Run teardown of the currently-active stream. Caller must hold the
536
+ * transition lock (see {@link runExclusive}). Keeps `this.current`
537
+ * populated until BluetoothSdk.stopStream resolves so a concurrent caller
538
+ * waiting on the lock can't claim the slot mid-stop and have its
539
+ * startStream BLE write collide with our in-flight stopStream.
540
+ */
541
+ async teardownLocked(reason, options = {}) {
542
+ const entry = this.current;
543
+ if (!entry)
544
+ return;
545
+ const sendBleStop = options.sendBleStop !== false;
546
+ this.lastFanoutSignature = null;
547
+ this.resolvedConfigForwarded = false;
548
+ // Dispose the lifecycle controller immediately so it doesn't fire one
549
+ // more keep-alive against a stream we're tearing down. The transition
550
+ // lock guarantees no new lifecycle is started concurrently.
551
+ this.lifecycle?.dispose();
552
+ this.lifecycle = null;
553
+ if (entry.kind === "managed") {
554
+ if (entry.cloudflareTimer)
555
+ clearInterval(entry.cloudflareTimer);
556
+ if (entry.hlsTimer)
557
+ clearInterval(entry.hlsTimer);
558
+ // Reject any still-pending HLS readiness waiters.
559
+ const pendingErr = new Error(`Stream torn down: ${reason}`);
560
+ for (const reject of entry.hlsReadyRejecters)
561
+ reject(pendingErr);
562
+ entry.hlsReadyResolvers = [];
563
+ entry.hlsReadyRejecters = [];
564
+ // Cloudflare DELETE is fire-and-forget — failing it doesn't undo the
565
+ // BLE stop we're about to do, and Cloudflare's idle-input scavenger
566
+ // will eventually clean up leaked inputs.
567
+ teardownManagedStream(entry.liveInputId).catch((err) => {
568
+ console.warn("[STREAM] teardownManagedStream failed:", err);
569
+ });
570
+ }
571
+ try {
572
+ if (sendBleStop) {
573
+ await BluetoothSdk.stopStream();
574
+ }
575
+ }
576
+ catch (err) {
577
+ console.warn("[STREAM] BluetoothSdk.stopStream failed:", err);
578
+ }
579
+ finally {
580
+ // Release the slot AFTER the BLE stop finished, so the next start can
581
+ // safely write its own start_stream without colliding with ours.
582
+ // Only clear if we're still the active entry (defensive — runExclusive
583
+ // serializes us, so this should always be true).
584
+ if (this.current === entry)
585
+ this.current = null;
586
+ }
587
+ }
588
+ }
589
+ function pickIngestUrl(p, preference) {
590
+ // Glasses' StreamCommandHandler detects protocol from URL prefix.
591
+ //
592
+ // Default priority: SRT > RTMP > WHIP. SRT first: Cloudflare's WebRTC (WHIP)
593
+ // ingest does NOT feed HLS/DASH playback or recording — a WHIP-ingested
594
+ // managed stream reports "connected" while its hlsUrl serves 204 forever,
595
+ // which breaks the managed contract (subscribers share HLS playback). SRT
596
+ // also survives office firewalls that kill RTMPS:443 mid-handshake.
597
+ //
598
+ // "whip" preference flips the trade: sub-second WHEP playback for
599
+ // live-monitor use cases, accepting no HLS and no recording.
600
+ //
601
+ // Throw if none resolved so the caller's Promise rejects with a clear
602
+ // message rather than the glasses' "unknown protocol" error.
603
+ const url = preference === "whip"
604
+ ? p.webrtcPublishUrl || p.srtUrl || p.rtmpUrl
605
+ : p.srtUrl || p.rtmpUrl || p.webrtcPublishUrl;
606
+ if (!url) {
607
+ throw new Error("Cloudflare provision returned no usable ingest URL");
608
+ }
609
+ return url;
610
+ }
611
+ function publisherStartResult(streamId, event) {
612
+ return {
613
+ streamId: event?.streamId || streamId,
614
+ status: event?.status ?? "streaming",
615
+ ...(event?.resolvedConfig ? { resolvedConfig: event.resolvedConfig } : {}),
616
+ };
617
+ }
618
+ function managedStartResult(entry) {
619
+ const publisher = entry.publisherStart ?? publisherStartResult(entry.streamId);
620
+ return {
621
+ ...publisher,
622
+ streamId: entry.streamId,
623
+ liveInputId: entry.liveInputId,
624
+ mode: entry.mode,
625
+ hlsUrl: entry.hlsUrl,
626
+ dashUrl: entry.dashUrl,
627
+ webrtcUrl: entry.webrtcUrl,
628
+ };
629
+ }
630
+ // Singleton — coordinator's single-stream constraint is process-wide.
631
+ export const phoneStreamCoordinator = new PhoneStreamCoordinator();
632
+ //# sourceMappingURL=PhoneStreamCoordinator.js.map