@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,518 @@
1
+ /**
2
+ * Media Processing Queue
3
+ *
4
+ * Decouples media processing (HDR merge, color correction, stabilization, camera roll save)
5
+ * from the download pipeline. Downloads push items here; processing runs independently.
6
+ */
7
+
8
+ import * as RNFS from "@dr.pogodin/react-native-fs"
9
+ import CrustModule from "@mentra/crust"
10
+
11
+ import {asgCameraApi} from "./asgCameraApi"
12
+ import {localStorageService} from "./localStorageService"
13
+ import {INVALID_DOWNLOADED_MEDIA, validateDownloadedMediaFile} from "./galleryMediaValidation"
14
+ import {reportInvalidGalleryMedia} from "./GalleryMediaIntegrityReportService"
15
+ import {useGallerySyncStore} from "../../stores/gallerySync"
16
+ import {BgTimer} from "../../utils/timers"
17
+ import {galleryTransferLedger, GalleryTransferEntry} from "./galleryTransferLedger"
18
+ import {cameraRollExportCoordinator} from "./cameraRollExportCoordinator"
19
+
20
+ const TAG = "[MediaProcessingQueue]"
21
+
22
+ export interface ProcessingItem {
23
+ /** Unique ID — capture_id (v2) or file name (v1) */
24
+ id: string
25
+ type: "photo" | "video"
26
+ /** Path to the primary downloaded file */
27
+ primaryPath: string
28
+ /** HDR bracket paths (v2 only) */
29
+ bracketPaths?: string[]
30
+ /** IMU sidecar path for video stabilization */
31
+ sidecarPath?: string
32
+ /** Thumbnail base64 data */
33
+ thumbnailData?: string
34
+ /** Capture directory for saving thumbnail */
35
+ captureDir?: string
36
+ /** Original capture timestamp */
37
+ timestamp?: number
38
+ /** Total file size */
39
+ totalSize: number
40
+ /** Video duration in ms */
41
+ duration?: number
42
+ /** Glasses model */
43
+ glassesModel?: string
44
+ /** Whether to process (lens/color/stabilization) */
45
+ shouldProcess: boolean
46
+ /** Whether to auto-save to camera roll */
47
+ shouldAutoSave: boolean
48
+ /** Pre-downloaded thumbnail path (v1 legacy sync) */
49
+ thumbnailPath?: string
50
+ /** File names to delete from glasses after processing completes */
51
+ deleteFromGlasses?: string[]
52
+ /** Negotiated gallery protocol; absent entries are inferred from the transfer ledger. */
53
+ protocolVersion?: number
54
+ }
55
+
56
+ class MediaProcessingQueue {
57
+ private queue: ProcessingItem[] = []
58
+ private isRunning = false
59
+ private aborted = false
60
+ private generation = 0 // C2: incremented on reset() to invalidate stale processLoop()
61
+
62
+ /** Add an item to the processing queue. Starts processing if not already running. */
63
+ enqueue(item: ProcessingItem): void {
64
+ this.queue.push(item)
65
+ console.log(`${TAG} Enqueued ${item.id} (${item.type}), queue size: ${this.queue.length}`)
66
+
67
+ // Only mark as processing if we'll actually process this item
68
+ if (item.shouldProcess) {
69
+ const store = useGallerySyncStore.getState()
70
+ store.onFileProcessing(item.id)
71
+ }
72
+
73
+ if (!this.isRunning) {
74
+ this.processLoop()
75
+ }
76
+ }
77
+
78
+ /** Cancel all pending processing. */
79
+ abort(): void {
80
+ this.aborted = true
81
+ this.queue = []
82
+ console.log(`${TAG} Aborted`)
83
+ }
84
+
85
+ /** Reset state for a new sync session. */
86
+ reset(): void {
87
+ this.queue = []
88
+ this.isRunning = false
89
+ this.aborted = false
90
+ this.generation++ // C2: invalidate any running processLoop
91
+ }
92
+
93
+ /** Returns true if there are items queued or currently processing. */
94
+ get hasPending(): boolean {
95
+ return this.queue.length > 0 || this.isRunning
96
+ }
97
+
98
+ /** Returns a promise that resolves when the queue is fully drained, or rejects on timeout. */
99
+ waitUntilDrained(timeoutMs: number = 4 * 60 * 60 * 1000): Promise<void> {
100
+ if (!this.hasPending) return Promise.resolve()
101
+ return new Promise((resolve, reject) => {
102
+ const deadline = Date.now() + timeoutMs
103
+ const check = () => {
104
+ if (!this.hasPending || this.aborted) {
105
+ resolve()
106
+ } else if (Date.now() >= deadline) {
107
+ console.error(`${TAG} waitUntilDrained timed out after ${timeoutMs}ms, aborting queue`)
108
+ this.abort()
109
+ reject(new Error(`Processing queue timed out after ${timeoutMs / 1000}s`))
110
+ } else {
111
+ BgTimer.setTimeout(check, 200)
112
+ }
113
+ }
114
+ check()
115
+ })
116
+ }
117
+
118
+ /** Retry durable export/ack work after an app restart without downloading media again. */
119
+ async retryPending(): Promise<{retried: number; failed: number}> {
120
+ let retried = 0
121
+ let failed = 0
122
+ for (let entry of galleryTransferLedger.pendingRecovery()) {
123
+ try {
124
+ if (entry.state === "RESTORE_PENDING") {
125
+ await asgCameraApi.restoreCapture(entry.captureId)
126
+ galleryTransferLedger.transition(entry.captureId, "DISCOVERED", {lastError: undefined})
127
+ retried++
128
+ continue
129
+ }
130
+ if (!entry.finalPath || !(await RNFS.exists(entry.finalPath))) {
131
+ throw new Error(`Recovery file is missing for ${entry.captureId}`)
132
+ }
133
+ // Rebuild a missing app index before any source acknowledgement, even when camera-roll
134
+ // saving is disabled or an export receipt was already committed before restart.
135
+ const downloadedFile = await this.recoverDownloadedFile(entry)
136
+ if (entry.state === "EXPORT_PENDING" || entry.state === "INDEXED") {
137
+ const shouldAutoSave = await cameraRollExportCoordinator.isAutoSaveEnabled()
138
+ entry = galleryTransferLedger.update(entry.captureId, {shouldAutoSave, lastError: undefined})
139
+ if (shouldAutoSave) {
140
+ if (entry.state !== "EXPORT_PENDING") {
141
+ entry = galleryTransferLedger.transition(entry.captureId, "EXPORT_PENDING")
142
+ }
143
+ const receipt = await cameraRollExportCoordinator.exportForSource(downloadedFile, entry.captureId)
144
+ entry = receipt
145
+ ? galleryTransferLedger.transition(entry.captureId, "EXPORTED", {assetReceipt: receipt})
146
+ : galleryTransferLedger.transition(entry.captureId, "INDEXED", {
147
+ shouldAutoSave: false,
148
+ lastError: undefined,
149
+ })
150
+ } else if (entry.state === "EXPORT_PENDING") {
151
+ entry = galleryTransferLedger.transition(entry.captureId, "INDEXED", {
152
+ shouldAutoSave: false,
153
+ lastError: undefined,
154
+ })
155
+ }
156
+ }
157
+ entry = galleryTransferLedger.transition(entry.captureId, "ACK_PENDING")
158
+ await this.acknowledgeEntry(entry)
159
+ galleryTransferLedger.transition(entry.captureId, "TRASHED", {lastError: undefined})
160
+ retried++
161
+ } catch (error) {
162
+ galleryTransferLedger.recordFailure(entry.captureId, error)
163
+ failed++
164
+ console.warn(`${TAG} Recovery remains pending for ${entry.captureId}:`, error)
165
+ }
166
+ }
167
+ return {retried, failed}
168
+ }
169
+
170
+ private async acknowledgeEntry(entry: GalleryTransferEntry): Promise<void> {
171
+ if (entry.protocolVersion >= 3) {
172
+ await asgCameraApi.acknowledgeCapture(entry.captureId, entry.ackId)
173
+ return
174
+ }
175
+ const result = await asgCameraApi.deleteFilesFromServer(
176
+ entry.deleteFromGlasses.length > 0 ? entry.deleteFromGlasses : [entry.captureId],
177
+ )
178
+ if (result.failed.length > 0 || result.deleted.length === 0) {
179
+ throw new Error(`Glasses did not acknowledge ${entry.captureId}`)
180
+ }
181
+ }
182
+
183
+ /** Process items one at a time. */
184
+ private async processLoop(): Promise<void> {
185
+ if (this.isRunning) return
186
+ this.isRunning = true
187
+ const myGeneration = this.generation // C2: capture generation to detect reset()
188
+
189
+ while (this.queue.length > 0 && !this.aborted && this.generation === myGeneration) {
190
+ const item = this.queue.shift()!
191
+ let processFailed = false
192
+ try {
193
+ await this.processItem(item)
194
+ } catch (error) {
195
+ console.error(`${TAG} Error processing ${item.id}:`, error)
196
+ processFailed = true
197
+ const store = useGallerySyncStore.getState()
198
+ if (!store.failedFiles.includes(item.id)) {
199
+ store.onFileFailed(item.id, error instanceof Error ? error.message : String(error))
200
+ }
201
+ }
202
+
203
+ // Exit if generation changed (reset was called during processing)
204
+ if (this.generation !== myGeneration) break
205
+
206
+ const store = useGallerySyncStore.getState()
207
+ if (!processFailed) {
208
+ // Success: increment processedFiles and remove from processingFiles set.
209
+ store.onFileProcessed(item.id)
210
+ } else {
211
+ // Failure is counted exactly once above. Still clear the processingFiles entry so the UI
212
+ // does not show it as in-progress.
213
+ const current = store.processingFiles
214
+ if (current.has(item.id)) {
215
+ const newSet = new Set(current)
216
+ newSet.delete(item.id)
217
+ useGallerySyncStore.setState({processingFiles: newSet})
218
+ }
219
+ }
220
+ }
221
+
222
+ // Only clear isRunning if this loop owns the current generation
223
+ if (this.generation === myGeneration) {
224
+ this.isRunning = false
225
+ }
226
+ }
227
+
228
+ /** Process a single item through the full pipeline. */
229
+ private async processItem(item: ProcessingItem): Promise<void> {
230
+ const startTime = Date.now()
231
+ let filePathToSave = item.primaryPath
232
+ let ledgerEntry = galleryTransferLedger.get(item.id)
233
+ if (!ledgerEntry) {
234
+ ledgerEntry = galleryTransferLedger.ensureCapture(
235
+ {
236
+ capture_id: item.id,
237
+ type: item.type,
238
+ timestamp: item.timestamp || Date.now(),
239
+ total_size: item.totalSize,
240
+ files: (item.deleteFromGlasses?.length ? item.deleteFromGlasses : [item.id]).map((name, index) => ({
241
+ name,
242
+ size: index === 0 ? item.totalSize : 0,
243
+ role: index === 0 ? "primary" : "sidecar",
244
+ })),
245
+ },
246
+ item.protocolVersion || 2,
247
+ )
248
+ }
249
+
250
+ // 1. HDR merge (photos with brackets only)
251
+ if (item.shouldProcess && item.type === "photo" && item.bracketPaths && item.bracketPaths.length >= 3) {
252
+ try {
253
+ const underPath = item.bracketPaths.find((p) => p.includes("ev-2")) || item.bracketPaths[0]
254
+ const normalPath = item.bracketPaths.find((p) => p.includes("ev0")) || item.bracketPaths[1]
255
+ const overPath = item.bracketPaths.find((p) => p.includes("ev2") && !p.includes("ev-2")) || item.bracketPaths[2]
256
+
257
+ const hdrPath = item.primaryPath + ".hdr.jpg"
258
+ const hdrResult = await CrustModule.mergeHdrBrackets(underPath, normalPath, overPath, hdrPath)
259
+ if (hdrResult.success && hdrResult.outputPath) {
260
+ filePathToSave = hdrResult.outputPath
261
+ console.log(`${TAG} HDR merged ${item.id} in ${hdrResult.processingTimeMs}ms`)
262
+ }
263
+ } catch (hdrError) {
264
+ console.warn(`${TAG} HDR merge error for ${item.id}, continuing:`, hdrError)
265
+ }
266
+ }
267
+
268
+ // 2. Image processing (lens + color correction)
269
+ if (item.shouldProcess && item.type === "photo") {
270
+ try {
271
+ const processedPath = filePathToSave + ".processed.jpg"
272
+ const result = await CrustModule.processGalleryImage(filePathToSave, processedPath, {
273
+ lensCorrection: true,
274
+ colorCorrection: true,
275
+ })
276
+ if (result.success && result.outputPath) {
277
+ filePathToSave = result.outputPath
278
+ console.log(`${TAG} 🎨 Processed ${item.id} in ${result.processingTimeMs}ms`)
279
+ }
280
+ } catch (procError) {
281
+ console.warn(`${TAG} Processing error for ${item.id}, using original:`, procError)
282
+ }
283
+ }
284
+
285
+ // 3. Video stabilization + color correction
286
+ if (item.shouldProcess && item.type === "video" && item.sidecarPath) {
287
+ try {
288
+ const stabilizedPath = item.primaryPath + ".stabilized.mp4"
289
+ const result = await CrustModule.stabilizeVideo(item.primaryPath, item.sidecarPath, stabilizedPath)
290
+ if (result.success && result.outputPath) {
291
+ filePathToSave = result.outputPath
292
+ console.log(`${TAG} 📹 Stabilized ${item.id} in ${result.processingTimeMs}ms`)
293
+ }
294
+ } catch (stabError) {
295
+ console.warn(`${TAG} Stabilization error for ${item.id}, using original:`, stabError)
296
+ }
297
+ }
298
+
299
+ // 4. Save thumbnail to disk (or use pre-downloaded thumbnail from v1 sync)
300
+ let localThumbnailPath: string | undefined = item.thumbnailPath
301
+ if (item.thumbnailData && item.captureDir) {
302
+ try {
303
+ const thumbPath = `${item.captureDir}/.thumb.jpg`
304
+ const base64Data = item.thumbnailData.startsWith("data:")
305
+ ? item.thumbnailData.split(",")[1]
306
+ : item.thumbnailData
307
+ await RNFS.writeFile(thumbPath, base64Data, "base64")
308
+ localThumbnailPath = thumbPath
309
+ } catch (thumbError) {
310
+ console.warn(`${TAG} Failed to save thumbnail for ${item.id}:`, thumbError)
311
+ }
312
+ }
313
+
314
+ // 5. Validate local file before persisting metadata or deleting from glasses
315
+ try {
316
+ await validateDownloadedMediaFile({
317
+ path: filePathToSave,
318
+ name: item.id,
319
+ mediaKind: item.type,
320
+ })
321
+ } catch (validationError: any) {
322
+ const reason = validationError?.message?.includes(INVALID_DOWNLOADED_MEDIA)
323
+ ? validationError.message
324
+ : `${INVALID_DOWNLOADED_MEDIA}: ${item.id}`
325
+ console.error(`${TAG} Validation failed for ${item.id}: ${reason}`)
326
+ reportInvalidGalleryMedia({
327
+ name: item.id,
328
+ path: filePathToSave,
329
+ mediaKind: item.type,
330
+ stage: "processing_validation",
331
+ reason,
332
+ expectedSize: item.totalSize,
333
+ duration: item.duration,
334
+ glassesModel: item.glassesModel,
335
+ })
336
+ const store = useGallerySyncStore.getState()
337
+ store.onFileFailed(item.id, reason)
338
+ galleryTransferLedger.recordFailure(item.id, validationError)
339
+ throw new Error(reason)
340
+ }
341
+
342
+ // 6. Commit the app-local index before any export or source acknowledgement. Use the final
343
+ // on-disk output metadata for camera-roll identity: processing can change byte size, while
344
+ // recovery reconstructs this row from the same file and the transfer ledger timestamp.
345
+ const isVideo = item.type === "video"
346
+ const finalFileStat = await RNFS.stat(filePathToSave)
347
+ const finalFileSize = Number(finalFileStat.size)
348
+ const downloadedFile = localStorageService.convertToDownloadedFile(
349
+ {
350
+ name: item.id,
351
+ url: "",
352
+ download: "",
353
+ size: finalFileSize,
354
+ modified: ledgerEntry.timestamp,
355
+ is_video: isVideo,
356
+ thumbnail_data: item.thumbnailData,
357
+ duration: item.duration,
358
+ filePath: filePathToSave,
359
+ glassesModel: item.glassesModel,
360
+ },
361
+ filePathToSave,
362
+ localThumbnailPath,
363
+ item.glassesModel,
364
+ )
365
+ downloadedFile.capture_id = item.id
366
+ const shouldAutoSave = await cameraRollExportCoordinator.isAutoSaveEnabled()
367
+ try {
368
+ await localStorageService.saveDownloadedFile(downloadedFile)
369
+ ledgerEntry = galleryTransferLedger.transition(item.id, "INDEXED", {
370
+ finalPath: filePathToSave,
371
+ thumbnailPath: localThumbnailPath,
372
+ shouldAutoSave,
373
+ })
374
+ await cameraRollExportCoordinator.recordIndexed(
375
+ downloadedFile,
376
+ shouldAutoSave,
377
+ shouldAutoSave ? "SOURCE_BARRIER" : "HISTORICAL_BACKFILL",
378
+ item.id,
379
+ )
380
+ } catch (metadataError) {
381
+ console.error(`${TAG} Metadata save failed for ${item.id}; retaining local and glasses copies:`, metadataError)
382
+ galleryTransferLedger.recordFailure(item.id, metadataError)
383
+ throw metadataError
384
+ }
385
+
386
+ // 7. While enabled, export is a durable, receipted step whose failures block ack. Turning
387
+ // auto-save off safely falls back to the already-verified app-local copy and later backfill.
388
+ if (shouldAutoSave) {
389
+ galleryTransferLedger.transition(item.id, "EXPORT_PENDING")
390
+ let receipt
391
+ try {
392
+ receipt = await cameraRollExportCoordinator.exportForSource(downloadedFile, item.id)
393
+ } catch (error) {
394
+ galleryTransferLedger.recordFailure(item.id, error)
395
+ throw error
396
+ }
397
+ if (receipt) {
398
+ ledgerEntry = galleryTransferLedger.transition(item.id, "EXPORTED", {
399
+ assetReceipt: receipt,
400
+ })
401
+ console.log(`${TAG} ✅ Saved to camera roll with receipt: ${item.id}`)
402
+ } else {
403
+ ledgerEntry = galleryTransferLedger.transition(item.id, "INDEXED", {
404
+ shouldAutoSave: false,
405
+ lastError: undefined,
406
+ })
407
+ console.log(`${TAG} Automatic camera-roll saving was disabled; keeping app-local copy: ${item.id}`)
408
+ }
409
+ }
410
+
411
+ // S4: Clean up intermediate processing files
412
+ const intermediates = [
413
+ item.primaryPath + ".hdr.jpg",
414
+ item.primaryPath + ".processed.jpg",
415
+ item.primaryPath + ".stabilized.mp4",
416
+ ]
417
+ for (const intermediate of intermediates) {
418
+ if (intermediate !== filePathToSave) {
419
+ RNFS.unlink(intermediate).catch(() => {}) // fire-and-forget
420
+ }
421
+ }
422
+
423
+ // 8. Update file in sync queue with local paths for gallery display
424
+ const store = useGallerySyncStore.getState()
425
+ const localFileUrl = filePathToSave.startsWith("file://") ? filePathToSave : `file://${filePathToSave}`
426
+ const localThumbUrl = localThumbnailPath
427
+ ? localThumbnailPath.startsWith("file://")
428
+ ? localThumbnailPath
429
+ : `file://${localThumbnailPath}`
430
+ : undefined
431
+ store.updateFileInQueue(item.id, {
432
+ name: item.id,
433
+ url: localFileUrl,
434
+ download: localFileUrl,
435
+ size: finalFileSize,
436
+ modified: ledgerEntry.timestamp,
437
+ is_video: isVideo,
438
+ filePath: filePathToSave,
439
+ mime_type: isVideo ? "video/mp4" : "image/jpeg",
440
+ thumbnail_data: item.thumbnailData,
441
+ thumbnailPath: localThumbUrl,
442
+ duration: item.duration,
443
+ })
444
+
445
+ // 9. Acknowledge only after VERIFIED -> INDEXED -> (EXPORTED). The server turns this into
446
+ // recoverable trash; failures remain ACK_PENDING and are retried without re-downloading.
447
+ const localFileExists = await RNFS.exists(filePathToSave)
448
+ const localStat = localFileExists ? await RNFS.stat(filePathToSave) : null
449
+ if (!localStat || localStat.size <= 0) {
450
+ const error = new Error(`Cannot acknowledge ${item.id}: committed local file is missing or empty`)
451
+ galleryTransferLedger.recordFailure(item.id, error)
452
+ throw error
453
+ }
454
+ ledgerEntry = galleryTransferLedger.transition(item.id, "ACK_PENDING")
455
+ try {
456
+ await this.acknowledgeEntry(ledgerEntry)
457
+ galleryTransferLedger.transition(item.id, "TRASHED", {lastError: undefined})
458
+ } catch (ackError) {
459
+ galleryTransferLedger.recordFailure(item.id, ackError)
460
+ throw ackError
461
+ }
462
+
463
+ const elapsed = Date.now() - startTime
464
+ console.log(`${TAG} ✅ Finished ${item.id} in ${elapsed}ms`)
465
+ }
466
+
467
+ /** Rebuild a missing app-local index row from the durable transfer ledger. */
468
+ private async recoverDownloadedFile(entry: GalleryTransferEntry) {
469
+ if (!entry.finalPath) throw new Error(`Recovery file is missing for ${entry.captureId}`)
470
+
471
+ // The transfer ledger is the durable source of truth for a committed generation. A local
472
+ // index row can survive an interrupted replacement and still point at an older/missing path,
473
+ // or contain the pre-processing size. Only reuse it when its path and identity still match the
474
+ // ledger's committed file; otherwise rebuild the row before export or source acknowledgement.
475
+ const finalPath = entry.finalPath.replace(/^file:\/\//, "")
476
+ const indexed = await localStorageService.getDownloadedFile(entry.captureId)
477
+ if (indexed) {
478
+ try {
479
+ const indexedPath = indexed.filePath?.replace(/^file:\/\//, "")
480
+ if (indexedPath === finalPath && (await RNFS.exists(indexedPath))) {
481
+ const indexedStat = await RNFS.stat(indexedPath)
482
+ const indexedSize = Number(indexedStat.size)
483
+ if (indexedSize > 0 && indexed.size === indexedSize && indexed.modified === entry.timestamp) {
484
+ return indexed
485
+ }
486
+ }
487
+ } catch (error) {
488
+ console.warn(`${TAG} Ignoring stale local index for ${entry.captureId}:`, error)
489
+ }
490
+ }
491
+
492
+ const stat = await RNFS.stat(finalPath)
493
+ const finalSize = Number(stat.size)
494
+ if (!Number.isFinite(finalSize) || finalSize <= 0) {
495
+ throw new Error(`Recovery file is missing or empty for ${entry.captureId}`)
496
+ }
497
+ const recovered = localStorageService.convertToDownloadedFile(
498
+ {
499
+ name: entry.captureId,
500
+ url: "",
501
+ download: "",
502
+ size: finalSize,
503
+ modified: entry.timestamp,
504
+ mime_type: entry.captureType === "video" ? "video/mp4" : "image/jpeg",
505
+ is_video: entry.captureType === "video",
506
+ filePath: finalPath,
507
+ },
508
+ finalPath,
509
+ entry.thumbnailPath,
510
+ )
511
+ recovered.capture_id = entry.captureId
512
+ recovered.assetReceipt = entry.assetReceipt
513
+ await localStorageService.saveDownloadedFile(recovered)
514
+ return recovered
515
+ }
516
+ }
517
+
518
+ export const mediaProcessingQueue = new MediaProcessingQueue()
@@ -0,0 +1,41 @@
1
+ import {SETTINGS, useSettingsStore} from "../stores/settings"
2
+
3
+ const OTA_VERSION_URL_PROD = "https://ota.mentraglass.com/prod_live_version.json"
4
+
5
+ function isLegacyAsgOtaStartBuild(glassesBuildNumber?: string | null): boolean {
6
+ const buildNumber = Number.parseInt(glassesBuildNumber ?? "", 10)
7
+ // ASG builds before 39 ignore ota_start.ota_version_url, so compare against
8
+ // the URL they will actually use.
9
+ return Number.isFinite(buildNumber) && buildNumber < 39
10
+ }
11
+
12
+ function getOtaVersionUrlDevOverride(): string | null {
13
+ // Super mode only: a wrong OTA manifest can brick glasses, so a saved
14
+ // override is inert unless super mode is currently enabled.
15
+ if (!useSettingsStore.getState().getSetting(SETTINGS.super_mode.key)) {
16
+ return null
17
+ }
18
+ const value = useSettingsStore.getState().getSetting(SETTINGS.ota_version_url.key)
19
+ const trimmed = typeof value === "string" ? value.trim() : ""
20
+ return trimmed || null
21
+ }
22
+
23
+ export function getAsgOtaVersionUrl(glassesUrl?: string | null, glassesBuildNumber?: string | null): string {
24
+ const deviceUrl = glassesUrl?.trim()
25
+ if (isLegacyAsgOtaStartBuild(glassesBuildNumber)) {
26
+ // Legacy glasses ignore ota_start.ota_version_url and install from their
27
+ // compiled default, so the developer override does not apply to them either.
28
+ return deviceUrl || OTA_VERSION_URL_PROD
29
+ }
30
+
31
+ const devOverrideUrl = getOtaVersionUrlDevOverride()
32
+ if (devOverrideUrl) {
33
+ return devOverrideUrl
34
+ }
35
+
36
+ const envUrl = process.env.EXPO_PUBLIC_ASG_OTA_VERSION_URL?.trim()
37
+ if (envUrl) {
38
+ return envUrl
39
+ }
40
+ return deviceUrl || OTA_VERSION_URL_PROD
41
+ }
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Pure path helper for BlobStore. No React Native / Expo imports, so it's
3
+ * unit-testable in isolation (see blobPaths.test.ts).
4
+ */
5
+
6
+ /** Filesystem-safe path segment. Strips traversal + unsafe chars; never empty. */
7
+ export function sanitizeSegment(s: string): string {
8
+ const cleaned = (s || "").replace(/[^A-Za-z0-9._-]/g, "_")
9
+ if (cleaned === "" || cleaned === "." || cleaned === "..") return "_"
10
+ return cleaned.slice(0, 120)
11
+ }
12
+
13
+ /**
14
+ * Filesystem-safe display name for a shared blob, guaranteed to carry an
15
+ * extension. The on-disk blob name is a generated machine id (with a
16
+ * mime-derived extension since withDiskExt; legacy blobs may lack it), so the
17
+ * OS share sheet (which keys off the file path, not any metadata) would
18
+ * otherwise emit a machine-named file — breaking "open with"/preview on the
19
+ * receiving side. Derives the extension from the mimeType when the stored name
20
+ * lacks one.
21
+ */
22
+ export function shareFileName(meta: {name?: string; fileName: string; mimeType: string}): string {
23
+ const raw = (meta.name || meta.fileName).trim()
24
+ // Replace path separators + characters illegal on common filesystems (keep
25
+ // spaces, hyphens, dots, etc. — they're valid and keep names readable).
26
+ // eslint-disable-next-line no-control-regex
27
+ let safe = raw.replace(/[/\\<>:"|?*\x00-\x1f]/g, "_").trim()
28
+ if (!safe) safe = meta.fileName
29
+ // Split base + extension: use an extension already on the name, else derive
30
+ // one from the mimeType.
31
+ const dot = safe.lastIndexOf(".")
32
+ const hasExt = dot > 0 && dot < safe.length - 1
33
+ let base = hasExt ? safe.slice(0, dot) : safe
34
+ const ext = hasExt ? safe.slice(dot + 1) : extForMime(meta.mimeType)
35
+ const suffix = ext ? `.${ext}` : ""
36
+ // Bound the total length: common filesystems reject names over ~255 bytes, so
37
+ // a huge app-provided name would make the share's file copy throw. Truncate
38
+ // the base while preserving the extension (mirrors sanitizeSegment's ceiling).
39
+ const MAX_LEN = 120
40
+ if (base.length + suffix.length > MAX_LEN) {
41
+ base = base.slice(0, Math.max(1, MAX_LEN - suffix.length))
42
+ }
43
+ return base + suffix
44
+ }
45
+
46
+ /**
47
+ * On-disk name for a stored blob: the generated id plus a mime-derived
48
+ * extension when one is known. iOS AVPlayer resolves a local file's format
49
+ * from its path extension (not content sniffing), so an extension-less WAV is
50
+ * unplayable through `session.speaker.play` even though the bytes are valid.
51
+ * Leaves a name that already has an extension untouched.
52
+ */
53
+ export function withDiskExt(fileName: string, mimeType: string): string {
54
+ if (fileName.includes(".")) return fileName
55
+ const ext = extForMime(mimeType)
56
+ return ext ? `${fileName}.${ext}` : fileName
57
+ }
58
+
59
+ /** Best-effort file extension (no dot) for a MIME type. Inverse of inferMime in BlobStore. */
60
+ export function extForMime(mime: string): string | undefined {
61
+ const m = (mime || "").split(";")[0].trim().toLowerCase()
62
+ const map: Record<string, string> = {
63
+ "application/pdf": "pdf",
64
+ "application/epub+zip": "epub",
65
+ "application/zip": "zip",
66
+ "application/json": "json",
67
+ "text/plain": "txt",
68
+ "text/csv": "csv",
69
+ "text/html": "html",
70
+ "video/mp4": "mp4",
71
+ "video/quicktime": "mov",
72
+ "video/webm": "webm",
73
+ "audio/mpeg": "mp3",
74
+ "audio/mp4": "m4a",
75
+ "audio/wav": "wav",
76
+ "audio/x-wav": "wav",
77
+ "audio/wave": "wav",
78
+ "audio/ogg": "ogg",
79
+ "image/png": "png",
80
+ "image/jpeg": "jpg",
81
+ "image/gif": "gif",
82
+ "image/webp": "webp",
83
+ "image/svg+xml": "svg",
84
+ }
85
+ return map[m]
86
+ }