@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,122 @@
1
+ import {storage} from "../../utils/storage"
2
+ import {toPortableGalleryPath} from "./galleryPathMigration"
3
+ import type {GalleryAssetReceipt} from "./galleryTransferLedger"
4
+
5
+ export type CameraRollExportState =
6
+ | "NOT_REQUESTED"
7
+ | "LEGACY_UNKNOWN"
8
+ | "QUEUED"
9
+ | "RECONCILING"
10
+ | "EXPORTING"
11
+ | "EXPORTED"
12
+ | "BLOCKED_PERMISSION"
13
+ | "FAILED_RETRYABLE"
14
+ | "FAILED_PERMANENT"
15
+ | "MISSING_LOCAL"
16
+
17
+ export type CameraRollExportPriority = "SOURCE_BARRIER" | "HISTORICAL_BACKFILL"
18
+
19
+ export interface CameraRollExportEntry {
20
+ /** Stable identity for one local-file generation. */
21
+ id: string
22
+ mediaName: string
23
+ generation: string
24
+ filePath: string
25
+ size: number
26
+ modified: number
27
+ isVideo: boolean
28
+ captureId?: string
29
+ /** False while this generation is absent from the local index; exported receipts remain as hidden tombstones. */
30
+ localPresent?: boolean
31
+ /** True when an older client may already have exported this file without persisting a receipt. */
32
+ requiresFullLibraryReconciliation?: boolean
33
+ state: CameraRollExportState
34
+ priority: CameraRollExportPriority
35
+ receipt?: GalleryAssetReceipt
36
+ attempts: number
37
+ nextRetryAt?: number
38
+ lastError?: string
39
+ createdAt: number
40
+ updatedAt: number
41
+ }
42
+
43
+ const ENTRY_PREFIX = "asg_camera_roll_export_v1:"
44
+
45
+ export function cameraRollGeneration(mediaName: string, size: number, modified: number): string {
46
+ return `${mediaName}:${size}:${modified}`
47
+ }
48
+
49
+ export function cameraRollEntryId(mediaName: string, size: number, modified: number): string {
50
+ return encodeURIComponent(cameraRollGeneration(mediaName, size, modified))
51
+ }
52
+
53
+ class CameraRollExportLedger {
54
+ private runtimeDocumentDirectory = ""
55
+
56
+ setDocumentDirectory(path: string): void {
57
+ this.runtimeDocumentDirectory = path
58
+ }
59
+
60
+ get(id: string): CameraRollExportEntry | undefined {
61
+ const result = storage.load<CameraRollExportEntry>(`${ENTRY_PREFIX}${id}`)
62
+ if (result.is_error()) return undefined
63
+ return this.toRuntimeEntry(result.value)
64
+ }
65
+
66
+ list(): CameraRollExportEntry[] {
67
+ return storage
68
+ .getAllKeys()
69
+ .filter((key) => key.startsWith(ENTRY_PREFIX))
70
+ .map((key) => {
71
+ const result = storage.load<CameraRollExportEntry>(key)
72
+ return result.is_error() ? undefined : this.toRuntimeEntry(result.value)
73
+ })
74
+ .filter((entry): entry is CameraRollExportEntry => !!entry)
75
+ }
76
+
77
+ put(entry: CameraRollExportEntry): CameraRollExportEntry {
78
+ const updated = {...entry, updatedAt: Date.now()}
79
+ const result = storage.save(`${ENTRY_PREFIX}${entry.id}`, this.toStoredEntry(updated))
80
+ if (result.is_error()) throw result.error
81
+ return updated
82
+ }
83
+
84
+ update(id: string, patch: Partial<CameraRollExportEntry>): CameraRollExportEntry {
85
+ const current = this.get(id)
86
+ if (!current) throw new Error(`Camera-roll export entry missing: ${id}`)
87
+ return this.put({...current, ...patch, id})
88
+ }
89
+
90
+ remove(id: string): void {
91
+ const result = storage.remove(`${ENTRY_PREFIX}${id}`)
92
+ if (result.is_error()) throw result.error
93
+ }
94
+
95
+ removeForMedia(mediaName: string): void {
96
+ for (const entry of this.list()) {
97
+ if (entry.mediaName === mediaName) this.remove(entry.id)
98
+ }
99
+ }
100
+
101
+ clear(): void {
102
+ const keys = storage.getAllKeys().filter((key) => key.startsWith(ENTRY_PREFIX))
103
+ if (keys.length === 0) return
104
+ const result = storage.removeMultiple(keys)
105
+ if (result.is_error()) throw result.error
106
+ }
107
+
108
+ private toStoredEntry(entry: CameraRollExportEntry): CameraRollExportEntry {
109
+ if (!this.runtimeDocumentDirectory) return entry
110
+ return {
111
+ ...entry,
112
+ filePath: toPortableGalleryPath(entry.filePath, this.runtimeDocumentDirectory) || entry.filePath,
113
+ }
114
+ }
115
+
116
+ private toRuntimeEntry(entry: CameraRollExportEntry): CameraRollExportEntry {
117
+ if (!this.runtimeDocumentDirectory || entry.filePath.startsWith("/")) return entry
118
+ return {...entry, filePath: `${this.runtimeDocumentDirectory}/${entry.filePath}`}
119
+ }
120
+ }
121
+
122
+ export const cameraRollExportLedger = new CameraRollExportLedger()
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Post-download validation for gallery media synced from glasses.
3
+ */
4
+
5
+ import * as RNFS from "@dr.pogodin/react-native-fs"
6
+ import {Buffer} from "@craftzdog/react-native-buffer"
7
+
8
+ export const INVALID_DOWNLOADED_MEDIA = "Invalid downloaded media"
9
+
10
+ export type MediaKind = "photo" | "video" | "unknown"
11
+
12
+ export interface ValidateDownloadedMediaOptions {
13
+ path: string
14
+ name: string
15
+ expectedSize?: number
16
+ mediaKind?: MediaKind
17
+ }
18
+
19
+ // ISO BMFF brands that identify still-image (not video) containers. An mp4-like
20
+ // header with one of these brands at bytes 8-11 must NOT pass video validation.
21
+ const IMAGE_FTYP_BRANDS = new Set(["avif", "avis", "heic", "heix", "heim", "heis", "hevc", "hevx", "mif1", "msf1"])
22
+
23
+ function isVideoFileName(name: string): boolean {
24
+ return /\.(mp4|mov|avi|webm|mkv|3gp)$/i.test(name)
25
+ }
26
+
27
+ function isPhotoFileName(name: string): boolean {
28
+ return /\.(jpg|jpeg|png|avif)$/i.test(name) || !name.includes(".")
29
+ }
30
+
31
+ function detectMediaKind(name: string, override?: MediaKind): MediaKind {
32
+ if (override && override !== "unknown") {
33
+ return override
34
+ }
35
+ if (isVideoFileName(name)) {
36
+ return "video"
37
+ }
38
+ if (isPhotoFileName(name)) {
39
+ return "photo"
40
+ }
41
+ return "unknown"
42
+ }
43
+
44
+ function decodeHeader(base64Header: string): Buffer {
45
+ // Use Buffer (from the "buffer" polyfill) for byte-safe decoding; RN's atob
46
+ // is host-dependent and some implementations mangle bytes ≥ 0x80, which would
47
+ // mis-validate JPEG (0xFF 0xD8) and binary AVI/EBML headers.
48
+ return Buffer.from(base64Header, "base64")
49
+ }
50
+
51
+ function readAscii(bytes: Buffer, start: number, length: number): string {
52
+ if (bytes.length < start + length) return ""
53
+ return bytes.toString("ascii", start, start + length)
54
+ }
55
+
56
+ function validatePhotoSignature(base64Header: string): boolean {
57
+ try {
58
+ const bytes = decodeHeader(base64Header)
59
+ if (bytes.length >= 12 && readAscii(bytes, 4, 4) === "ftyp") {
60
+ const brand = readAscii(bytes, 8, 4)
61
+ // Image-only ISO BMFF brands (AVIF, HEIC, HEIF variants) are valid photos.
62
+ if (IMAGE_FTYP_BRANDS.has(brand)) {
63
+ return true
64
+ }
65
+ }
66
+ // JPEG: 0xFF 0xD8
67
+ if (bytes.length >= 2 && bytes[0] === 0xff && bytes[1] === 0xd8) {
68
+ return true
69
+ }
70
+ // PNG: 89 50 4E 47 0D 0A 1A 0A
71
+ if (
72
+ bytes.length >= 8 &&
73
+ bytes[0] === 0x89 &&
74
+ bytes[1] === 0x50 &&
75
+ bytes[2] === 0x4e &&
76
+ bytes[3] === 0x47 &&
77
+ bytes[4] === 0x0d &&
78
+ bytes[5] === 0x0a &&
79
+ bytes[6] === 0x1a &&
80
+ bytes[7] === 0x0a
81
+ ) {
82
+ return true
83
+ }
84
+ return false
85
+ } catch {
86
+ return false
87
+ }
88
+ }
89
+
90
+ function validateVideoSignature(base64Header: string): boolean {
91
+ try {
92
+ const bytes = decodeHeader(base64Header)
93
+ if (bytes.length < 8) {
94
+ return false
95
+ }
96
+ // ISO BMFF (mp4, mov, 3gp): bytes 4-7 should be "ftyp" AND brand at 8-11 must
97
+ // not be an image-only brand (AVIF/HEIC share the ftyp container).
98
+ if (readAscii(bytes, 4, 4) === "ftyp") {
99
+ const brand = readAscii(bytes, 8, 4)
100
+ if (IMAGE_FTYP_BRANDS.has(brand)) {
101
+ return false
102
+ }
103
+ return true
104
+ }
105
+ // RIFF/AVI: bytes 0-3 "RIFF", bytes 8-11 "AVI "
106
+ if (bytes.length >= 12 && readAscii(bytes, 0, 4) === "RIFF" && readAscii(bytes, 8, 4) === "AVI ") {
107
+ return true
108
+ }
109
+ // EBML (WebM, MKV): bytes 0-3 are 0x1A 0x45 0xDF 0xA3
110
+ if (bytes.length >= 4 && bytes[0] === 0x1a && bytes[1] === 0x45 && bytes[2] === 0xdf && bytes[3] === 0xa3) {
111
+ return true
112
+ }
113
+ return false
114
+ } catch {
115
+ return false
116
+ }
117
+ }
118
+
119
+ /**
120
+ * Validate a downloaded file on disk. Throws with INVALID_DOWNLOADED_MEDIA on failure.
121
+ */
122
+ export async function validateDownloadedMediaFile(options: ValidateDownloadedMediaOptions): Promise<void> {
123
+ const {path, name, expectedSize = 0, mediaKind} = options
124
+
125
+ const exists = await RNFS.exists(path)
126
+ if (!exists) {
127
+ throw new Error(`${INVALID_DOWNLOADED_MEDIA}: missing file ${name}`)
128
+ }
129
+
130
+ const stat = await RNFS.stat(path)
131
+ if (stat.size === 0) {
132
+ throw new Error(`${INVALID_DOWNLOADED_MEDIA}: zero-byte file ${name}`)
133
+ }
134
+
135
+ if (expectedSize > 0 && stat.size !== expectedSize) {
136
+ throw new Error(`${INVALID_DOWNLOADED_MEDIA}: size mismatch for ${name}: expected ${expectedSize}, got ${stat.size}`)
137
+ }
138
+
139
+ const kind = detectMediaKind(name, mediaKind)
140
+ if (kind === "unknown") {
141
+ return
142
+ }
143
+
144
+ const headerBase64 = await RNFS.read(path, 12, 0, "base64")
145
+ if (kind === "video") {
146
+ if (!validateVideoSignature(headerBase64)) {
147
+ throw new Error(`${INVALID_DOWNLOADED_MEDIA}: invalid video container for ${name}`)
148
+ }
149
+ return
150
+ }
151
+
152
+ if (!validatePhotoSignature(headerBase64)) {
153
+ throw new Error(`${INVALID_DOWNLOADED_MEDIA}: invalid photo signature for ${name}`)
154
+ }
155
+ }
156
+
157
+ /**
158
+ * Pre-download check using sync metadata before hitting the network.
159
+ */
160
+ export function validateCaptureMetadataForDownload(capture: {
161
+ capture_id: string
162
+ type: "photo" | "video"
163
+ total_size: number
164
+ files: Array<{name: string; size: number; role: string}>
165
+ }): void {
166
+ if (capture.type !== "video") {
167
+ return
168
+ }
169
+
170
+ if (capture.total_size <= 0) {
171
+ throw new Error(`${INVALID_DOWNLOADED_MEDIA}: video capture ${capture.capture_id} has zero total_size`)
172
+ }
173
+
174
+ const primaryFile = capture.files.find((f) => f.role === "primary") ?? capture.files[0]
175
+ if (!primaryFile) {
176
+ throw new Error(`${INVALID_DOWNLOADED_MEDIA}: video capture ${capture.capture_id} has no files`)
177
+ }
178
+ if (primaryFile.size <= 0) {
179
+ throw new Error(
180
+ `${INVALID_DOWNLOADED_MEDIA}: video capture ${capture.capture_id} primary file ${primaryFile.name} has zero size`,
181
+ )
182
+ }
183
+ }
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Gallery notices — engine-owned. The gallery sync emits STRUCTURED notice codes
3
+ * (never localized strings or alerts) when it hits a user-actionable precondition;
4
+ * the host renders its own alert / settings deep-link from the code. This keeps the
5
+ * sync (engine runtime) free of host UI/i18n/navigation — exposed as
6
+ * `engine.gallery.onNotice(cb)`.
7
+ */
8
+ export type GalleryNoticeCode =
9
+ | "glasses_disconnected"
10
+ | "bluetooth_off"
11
+ | "insufficient_storage"
12
+ | "wifi_initializing"
13
+ | "wifi_off"
14
+ | "location_services_off"
15
+ | "camera_roll_permission_required"
16
+ | "connect_to_glasses"
17
+
18
+ export interface GalleryNotice {
19
+ code: GalleryNoticeCode
20
+ /** Optional extra context (e.g. ssid/platform) for the host's message. */
21
+ data?: Record<string, unknown>
22
+ /**
23
+ * Present only on notices the sync BLOCKS on (currently the one-time wifi-join
24
+ * explanation): the host calls this when the user acknowledges, letting the sync
25
+ * proceed. If no host is listening, the emitter's return value lets the sync fall
26
+ * through instead of hanging.
27
+ */
28
+ ack?: () => void
29
+ }
30
+
31
+ type Listener = (notice: GalleryNotice) => void
32
+
33
+ const listeners = new Set<Listener>()
34
+
35
+ /**
36
+ * Emit a notice to all subscribers; returns how many SUCCESSFULLY received it
37
+ * (0 = nobody listening, or every listener threw). Callers use 0 as the
38
+ * "no host will act on this" signal — e.g. gallery sync auto-proceeds on the
39
+ * blocking connect_to_glasses notice — so a throwing listener must not count
40
+ * as a delivery.
41
+ */
42
+ export function emitGalleryNotice(notice: GalleryNotice): number {
43
+ let delivered = 0
44
+ listeners.forEach((l) => {
45
+ // Isolate listeners: one throwing host handler must not break delivery to the
46
+ // others or bubble an exception into the gallery sync.
47
+ try {
48
+ l(notice)
49
+ delivered += 1
50
+ } catch (error) {
51
+ console.error("galleryNotices: onNotice listener threw:", error)
52
+ }
53
+ })
54
+ return delivered
55
+ }
56
+
57
+ /** Subscribe to gallery notices; returns an unsubscribe. */
58
+ export function onGalleryNotice(cb: Listener): () => void {
59
+ listeners.add(cb)
60
+ return () => listeners.delete(cb)
61
+ }
@@ -0,0 +1,22 @@
1
+ /** Convert current or legacy app-container paths into a portable Documents-relative path. */
2
+ export function toPortableGalleryPath(path: string, documentDirectoryPath: string): string | null {
3
+ if (!path) return null
4
+ const cleanPath = path.replace(/^file:\/\//, "")
5
+ const docPath = documentDirectoryPath.replace(/\/$/, "")
6
+ let candidate: string | null = null
7
+ if (cleanPath.startsWith(`${docPath}/`)) candidate = cleanPath.substring(docPath.length + 1)
8
+ else if (!cleanPath.startsWith("/")) candidate = cleanPath.replace(/^\/+/, "")
9
+
10
+ if (!candidate) {
11
+ const documentsMarker = "/Documents/"
12
+ const documentsIndex = cleanPath.indexOf(documentsMarker)
13
+ if (documentsIndex >= 0) candidate = cleanPath.substring(documentsIndex + documentsMarker.length)
14
+ }
15
+
16
+ if (!candidate || candidate.includes("\0")) return null
17
+ const segments = candidate.split("/")
18
+ if (segments[0] !== "MentraPhotos" || segments.some((segment) => !segment || segment === "." || segment === "..")) {
19
+ return null
20
+ }
21
+ return segments.join("/")
22
+ }
@@ -0,0 +1,68 @@
1
+ import {storage} from "../../utils/storage/storage"
2
+
3
+ export interface GallerySettings {
4
+ autoSaveToCameraRoll: boolean
5
+ autoSaveDisableWarningShown: boolean
6
+ imageProcessingEnabled: boolean
7
+ }
8
+
9
+ export class GallerySettingsService {
10
+ private static instance: GallerySettingsService
11
+ private readonly SETTINGS_KEY = "gallery_settings"
12
+ private readonly DEFAULT_SETTINGS: GallerySettings = {
13
+ autoSaveToCameraRoll: true, // Default ON
14
+ autoSaveDisableWarningShown: false,
15
+ imageProcessingEnabled: true, // Lens coefficients calibrated from chessboard photos
16
+ }
17
+
18
+ private constructor() {}
19
+
20
+ static getInstance(): GallerySettingsService {
21
+ if (!GallerySettingsService.instance) {
22
+ GallerySettingsService.instance = new GallerySettingsService()
23
+ }
24
+ return GallerySettingsService.instance
25
+ }
26
+
27
+ async getSettings(): Promise<GallerySettings> {
28
+ const res = storage.load<GallerySettings>(this.SETTINGS_KEY)
29
+ if (res.is_error()) {
30
+ // Not an error - just means settings haven't been saved yet (first use)
31
+ // Return defaults silently
32
+ return this.DEFAULT_SETTINGS
33
+ }
34
+ const stored = res.value
35
+ return {...this.DEFAULT_SETTINGS, ...stored}
36
+ }
37
+
38
+ async updateSettings(settings: Partial<GallerySettings>): Promise<void> {
39
+ const current = await this.getSettings()
40
+ const updated = {...current, ...settings}
41
+ const res = await storage.save(this.SETTINGS_KEY, updated)
42
+ if (res.is_error()) {
43
+ console.error("[GallerySettings] Error saving settings:", res.error)
44
+ throw res.error
45
+ }
46
+ console.log("[GallerySettings] Settings updated:", updated)
47
+ }
48
+
49
+ async getAutoSaveToCameraRoll(): Promise<boolean> {
50
+ const settings = await this.getSettings()
51
+ return settings.autoSaveToCameraRoll
52
+ }
53
+
54
+ async setAutoSaveToCameraRoll(enabled: boolean): Promise<void> {
55
+ await this.updateSettings({autoSaveToCameraRoll: enabled})
56
+ }
57
+
58
+ async getImageProcessingEnabled(): Promise<boolean> {
59
+ const settings = await this.getSettings()
60
+ return settings.imageProcessingEnabled
61
+ }
62
+
63
+ async setImageProcessingEnabled(enabled: boolean): Promise<void> {
64
+ await this.updateSettings({imageProcessingEnabled: enabled})
65
+ }
66
+ }
67
+
68
+ export const gallerySettingsService = GallerySettingsService.getInstance()
@@ -0,0 +1,236 @@
1
+ /**
2
+ * Gallery Sync Notifications
3
+ * Manages system notifications for gallery sync progress
4
+ *
5
+ * Platform differences:
6
+ * - Android: Supports ongoing/sticky notifications that update silently
7
+ * - iOS: Each notification update shows a banner, so we throttle updates
8
+ * and only show start/complete notifications to avoid spam
9
+ */
10
+
11
+ // import * as Notifications from "expo-notifications"
12
+ import {Platform} from "react-native"
13
+
14
+ // iOS throttling - only update every N seconds to avoid banner spam
15
+ const IOS_UPDATE_THROTTLE_MS = 10000 // 10 seconds between updates on iOS
16
+
17
+ // Configure notification handler
18
+ // Notifications.setNotificationHandler({
19
+ // handleNotification: async () => ({
20
+ // shouldShowAlert: true,
21
+ // shouldPlaySound: false,
22
+ // shouldSetBadge: false,
23
+ // // On iOS, minimize banner popups for progress updates
24
+ // shouldShowBanner: Platform.OS === "android",
25
+ // shouldShowList: true,
26
+ // }),
27
+ // })
28
+
29
+ class GallerySyncNotifications {
30
+ private static instance: GallerySyncNotifications
31
+ private notificationActive = false
32
+ private lastUpdateTime = 0 // For iOS throttling
33
+
34
+ private constructor() {}
35
+
36
+ static getInstance(): GallerySyncNotifications {
37
+ if (!GallerySyncNotifications.instance) {
38
+ GallerySyncNotifications.instance = new GallerySyncNotifications()
39
+ }
40
+ return GallerySyncNotifications.instance
41
+ }
42
+
43
+ /**
44
+ * Initialize notification channel (Android only)
45
+ */
46
+ private async ensureChannel(): Promise<void> {
47
+ // if (this.channelCreated) return
48
+
49
+ // if (Platform.OS === "android") {
50
+ // await Notifications.setNotificationChannelAsync(CHANNEL_ID, {
51
+ // name: "Gallery Sync",
52
+ // description: "Shows progress when syncing photos from your glasses",
53
+ // importance: Notifications.AndroidImportance.LOW, // Low = no sound, shows in shade
54
+ // vibrationPattern: [0], // No vibration
55
+ // lightColor: "#4A90D9",
56
+ // lockscreenVisibility: Notifications.AndroidNotificationVisibility.PUBLIC,
57
+ // bypassDnd: false,
58
+ // enableLights: false,
59
+ // enableVibrate: false,
60
+ // showBadge: false,
61
+ // })
62
+ // }
63
+ }
64
+
65
+ /**
66
+ * Request notification permissions
67
+ */
68
+ async requestPermissions(): Promise<boolean> {
69
+ // const {status: existingStatus} = await Notifications.getPermissionsAsync()
70
+
71
+ // if (existingStatus === "granted") {
72
+ // return true
73
+ // }
74
+
75
+ // const {status} = await Notifications.requestPermissionsAsync()
76
+ // return status === "granted"
77
+ return true // Always return true when notifications disabled
78
+ }
79
+
80
+ /**
81
+ * Show initial sync notification
82
+ */
83
+ async showSyncStarted(totalFiles: number): Promise<void> {
84
+ await this.ensureChannel()
85
+
86
+ const hasPermission = await this.requestPermissions()
87
+ if (!hasPermission) {
88
+ console.log("[SyncNotifications] No notification permission, skipping")
89
+ return
90
+ }
91
+
92
+ // await Notifications.scheduleNotificationAsync({
93
+ // identifier: SYNC_NOTIFICATION_ID,
94
+ // content: {
95
+ // title: "Syncing photos from glasses",
96
+ // body: `Preparing to download ${totalFiles} ${totalFiles === 1 ? "file" : "files"}...`,
97
+ // data: {type: "gallery-sync"},
98
+ // sticky: Platform.OS === "android", // Ongoing notification on Android
99
+ // },
100
+ // trigger: null, // Show immediately
101
+ // })
102
+
103
+ this.notificationActive = true
104
+ this.lastUpdateTime = Date.now() // Reset throttle timer
105
+ console.log(`[SyncNotifications] Started sync notification for ${totalFiles} files (notifications disabled)`)
106
+ }
107
+
108
+ /**
109
+ * Update sync progress notification
110
+ * On iOS, updates are throttled to avoid spamming the user with banner notifications
111
+ */
112
+ async updateProgress(
113
+ currentFile: number,
114
+ totalFiles: number,
115
+ _fileName: string,
116
+ fileProgress: number,
117
+ ): Promise<void> {
118
+ if (!this.notificationActive) return
119
+
120
+ // On iOS, throttle updates to avoid banner spam
121
+ // iOS doesn't support silent notification updates like Android's ongoing notifications
122
+ if (Platform.OS === "ios") {
123
+ const now = Date.now()
124
+ const timeSinceLastUpdate = now - this.lastUpdateTime
125
+
126
+ // Only update if enough time has passed OR if this is the last file completing
127
+ const isLastFileCompleting = currentFile === totalFiles && fileProgress >= 99
128
+ if (timeSinceLastUpdate < IOS_UPDATE_THROTTLE_MS && !isLastFileCompleting) {
129
+ return // Skip this update on iOS to avoid banner spam
130
+ }
131
+ this.lastUpdateTime = now
132
+ }
133
+
134
+ await this.ensureChannel()
135
+
136
+ // Notifications are disabled; the overall-progress + body computation that fed
137
+ // scheduleNotificationAsync (below, commented) is omitted to keep this a no-op.
138
+
139
+ // await Notifications.scheduleNotificationAsync({
140
+ // identifier: SYNC_NOTIFICATION_ID,
141
+ // content: {
142
+ // title: "Syncing photos from glasses",
143
+ // body,
144
+ // data: {type: "gallery-sync", progress: overallProgress},
145
+ // sticky: Platform.OS === "android", // Keep notification visible on Android
146
+ // },
147
+ // trigger: null,
148
+ // })
149
+ }
150
+
151
+ /**
152
+ * Show sync complete notification
153
+ */
154
+ async showSyncComplete(downloadedCount: number, failedCount: number = 0): Promise<void> {
155
+ await this.ensureChannel()
156
+
157
+ // Notifications are disabled; the title/body computation that fed
158
+ // scheduleNotificationAsync (below, commented) is omitted to keep this a no-op.
159
+
160
+ // await Notifications.scheduleNotificationAsync({
161
+ // identifier: SYNC_NOTIFICATION_ID,
162
+ // content: {
163
+ // title,
164
+ // body,
165
+ // data: {type: "gallery-sync-complete"},
166
+ // },
167
+ // trigger: null,
168
+ // })
169
+
170
+ this.notificationActive = false
171
+ console.log(
172
+ `[SyncNotifications] Sync complete: ${downloadedCount} downloaded, ${failedCount} failed (notifications disabled)`,
173
+ )
174
+
175
+ // Auto-dismiss after 5 seconds
176
+ // setTimeout(() => {
177
+ // this.dismiss()
178
+ // }, 5000)
179
+ }
180
+
181
+ /**
182
+ * Show sync error notification
183
+ */
184
+ async showSyncError(errorMessage: string): Promise<void> {
185
+ await this.ensureChannel()
186
+
187
+ // await Notifications.scheduleNotificationAsync({
188
+ // identifier: SYNC_NOTIFICATION_ID,
189
+ // content: {
190
+ // title: "Sync failed",
191
+ // body: errorMessage,
192
+ // data: {type: "gallery-sync-error"},
193
+ // },
194
+ // trigger: null,
195
+ // })
196
+
197
+ this.notificationActive = false
198
+ console.log(`[SyncNotifications] Sync error: ${errorMessage} (notifications disabled)`)
199
+
200
+ // Auto-dismiss after 5 seconds
201
+ // setTimeout(() => {
202
+ // this.dismiss()
203
+ // }, 5000)
204
+ }
205
+
206
+ /**
207
+ * Show sync cancelled notification
208
+ */
209
+ async showSyncCancelled(): Promise<void> {
210
+ await this.dismiss()
211
+ this.notificationActive = false
212
+ console.log("[SyncNotifications] Sync cancelled, notification dismissed")
213
+ }
214
+
215
+ /**
216
+ * Dismiss sync notification
217
+ */
218
+ async dismiss(): Promise<void> {
219
+ try {
220
+ // await Notifications.dismissNotificationAsync(SYNC_NOTIFICATION_ID)
221
+ this.notificationActive = false
222
+ } catch (error) {
223
+ // Notification may already be dismissed
224
+ console.log("[SyncNotifications] Error dismissing notification:", error)
225
+ }
226
+ }
227
+
228
+ /**
229
+ * Check if sync notification is currently active
230
+ */
231
+ isActive(): boolean {
232
+ return this.notificationActive
233
+ }
234
+ }
235
+
236
+ export const gallerySyncNotifications = GallerySyncNotifications.getInstance()