@mentra/engine 0.1.0-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (787) hide show
  1. package/README.md +79 -0
  2. package/build/devtools.d.ts +11 -0
  3. package/build/devtools.d.ts.map +1 -0
  4. package/build/devtools.js +13 -0
  5. package/build/devtools.js.map +1 -0
  6. package/build/engine.d.ts +261 -0
  7. package/build/engine.d.ts.map +1 -0
  8. package/build/engine.js +170 -0
  9. package/build/engine.js.map +1 -0
  10. package/build/facades/dev.d.ts +57 -0
  11. package/build/facades/dev.d.ts.map +1 -0
  12. package/build/facades/dev.js +187 -0
  13. package/build/facades/dev.js.map +1 -0
  14. package/build/facades/display.d.ts +21 -0
  15. package/build/facades/display.d.ts.map +1 -0
  16. package/build/facades/display.js +17 -0
  17. package/build/facades/display.js.map +1 -0
  18. package/build/facades/displayMirror.d.ts +15 -0
  19. package/build/facades/displayMirror.d.ts.map +1 -0
  20. package/build/facades/displayMirror.js +29 -0
  21. package/build/facades/displayMirror.js.map +1 -0
  22. package/build/facades/gallery.d.ts +62 -0
  23. package/build/facades/gallery.d.ts.map +1 -0
  24. package/build/facades/gallery.js +61 -0
  25. package/build/facades/gallery.js.map +1 -0
  26. package/build/facades/glasses.d.ts +141 -0
  27. package/build/facades/glasses.d.ts.map +1 -0
  28. package/build/facades/glasses.js +199 -0
  29. package/build/facades/glasses.js.map +1 -0
  30. package/build/facades/glassesSettings.d.ts +13 -0
  31. package/build/facades/glassesSettings.d.ts.map +1 -0
  32. package/build/facades/glassesSettings.js +54 -0
  33. package/build/facades/glassesSettings.js.map +1 -0
  34. package/build/facades/glassesWifi.d.ts +25 -0
  35. package/build/facades/glassesWifi.d.ts.map +1 -0
  36. package/build/facades/glassesWifi.js +57 -0
  37. package/build/facades/glassesWifi.js.map +1 -0
  38. package/build/facades/miniapps.d.ts +43 -0
  39. package/build/facades/miniapps.d.ts.map +1 -0
  40. package/build/facades/miniapps.js +49 -0
  41. package/build/facades/miniapps.js.map +1 -0
  42. package/build/facades/notifications.d.ts +13 -0
  43. package/build/facades/notifications.d.ts.map +1 -0
  44. package/build/facades/notifications.js +12 -0
  45. package/build/facades/notifications.js.map +1 -0
  46. package/build/facades/ota.d.ts +103 -0
  47. package/build/facades/ota.d.ts.map +1 -0
  48. package/build/facades/ota.js +156 -0
  49. package/build/facades/ota.js.map +1 -0
  50. package/build/facades/pairing.d.ts +114 -0
  51. package/build/facades/pairing.d.ts.map +1 -0
  52. package/build/facades/pairing.js +275 -0
  53. package/build/facades/pairing.js.map +1 -0
  54. package/build/facades/permissions.d.ts +23 -0
  55. package/build/facades/permissions.d.ts.map +1 -0
  56. package/build/facades/permissions.js +145 -0
  57. package/build/facades/permissions.js.map +1 -0
  58. package/build/facades/phoneNotifications.d.ts +21 -0
  59. package/build/facades/phoneNotifications.d.ts.map +1 -0
  60. package/build/facades/phoneNotifications.js +51 -0
  61. package/build/facades/phoneNotifications.js.map +1 -0
  62. package/build/facades/reports.d.ts +36 -0
  63. package/build/facades/reports.d.ts.map +1 -0
  64. package/build/facades/reports.js +134 -0
  65. package/build/facades/reports.js.map +1 -0
  66. package/build/facades/session.d.ts +21 -0
  67. package/build/facades/session.d.ts.map +1 -0
  68. package/build/facades/session.js +52 -0
  69. package/build/facades/session.js.map +1 -0
  70. package/build/facades/settings.d.ts +37 -0
  71. package/build/facades/settings.d.ts.map +1 -0
  72. package/build/facades/settings.js +55 -0
  73. package/build/facades/settings.js.map +1 -0
  74. package/build/facades/speech.d.ts +30 -0
  75. package/build/facades/speech.d.ts.map +1 -0
  76. package/build/facades/speech.js +37 -0
  77. package/build/facades/speech.js.map +1 -0
  78. package/build/index.d.ts +43 -0
  79. package/build/index.d.ts.map +1 -0
  80. package/build/index.js +45 -0
  81. package/build/index.js.map +1 -0
  82. package/build/internal.d.ts +66 -0
  83. package/build/internal.d.ts.map +1 -0
  84. package/build/internal.js +89 -0
  85. package/build/internal.js.map +1 -0
  86. package/build/runtime/bootstrap.d.ts +83 -0
  87. package/build/runtime/bootstrap.d.ts.map +1 -0
  88. package/build/runtime/bootstrap.js +56 -0
  89. package/build/runtime/bootstrap.js.map +1 -0
  90. package/build/runtime/config.d.ts +146 -0
  91. package/build/runtime/config.d.ts.map +1 -0
  92. package/build/runtime/config.js +18 -0
  93. package/build/runtime/config.js.map +1 -0
  94. package/build/runtime/streamConfig.d.ts +4 -0
  95. package/build/runtime/streamConfig.d.ts.map +1 -0
  96. package/build/runtime/streamConfig.js +38 -0
  97. package/build/runtime/streamConfig.js.map +1 -0
  98. package/build/services/AppRegistry.d.ts +303 -0
  99. package/build/services/AppRegistry.d.ts.map +1 -0
  100. package/build/services/AppRegistry.js +1029 -0
  101. package/build/services/AppRegistry.js.map +1 -0
  102. package/build/services/AudioCloudUplink.d.ts +3 -0
  103. package/build/services/AudioCloudUplink.d.ts.map +1 -0
  104. package/build/services/AudioCloudUplink.js +33 -0
  105. package/build/services/AudioCloudUplink.js.map +1 -0
  106. package/build/services/AudioPlaybackService.d.ts +144 -0
  107. package/build/services/AudioPlaybackService.d.ts.map +1 -0
  108. package/build/services/AudioPlaybackService.js +533 -0
  109. package/build/services/AudioPlaybackService.js.map +1 -0
  110. package/build/services/AutomaticReportResult.d.ts +20 -0
  111. package/build/services/AutomaticReportResult.d.ts.map +1 -0
  112. package/build/services/AutomaticReportResult.js +29 -0
  113. package/build/services/AutomaticReportResult.js.map +1 -0
  114. package/build/services/BlobStore.d.ts +91 -0
  115. package/build/services/BlobStore.d.ts.map +1 -0
  116. package/build/services/BlobStore.js +668 -0
  117. package/build/services/BlobStore.js.map +1 -0
  118. package/build/services/CaptionsTesterReportService.d.ts +4 -0
  119. package/build/services/CaptionsTesterReportService.d.ts.map +1 -0
  120. package/build/services/CaptionsTesterReportService.js +80 -0
  121. package/build/services/CaptionsTesterReportService.js.map +1 -0
  122. package/build/services/CloudAudioSubscriptionSync.d.ts +24 -0
  123. package/build/services/CloudAudioSubscriptionSync.d.ts.map +1 -0
  124. package/build/services/CloudAudioSubscriptionSync.js +39 -0
  125. package/build/services/CloudAudioSubscriptionSync.js.map +1 -0
  126. package/build/services/CloudClientService.d.ts +143 -0
  127. package/build/services/CloudClientService.d.ts.map +1 -0
  128. package/build/services/CloudClientService.js +627 -0
  129. package/build/services/CloudClientService.js.map +1 -0
  130. package/build/services/CloudTranscriptE2EMetrics.d.ts +4 -0
  131. package/build/services/CloudTranscriptE2EMetrics.d.ts.map +1 -0
  132. package/build/services/CloudTranscriptE2EMetrics.js +24 -0
  133. package/build/services/CloudTranscriptE2EMetrics.js.map +1 -0
  134. package/build/services/ConnectionCoordinator.d.ts +51 -0
  135. package/build/services/ConnectionCoordinator.d.ts.map +1 -0
  136. package/build/services/ConnectionCoordinator.js +34 -0
  137. package/build/services/ConnectionCoordinator.js.map +1 -0
  138. package/build/services/DevServerBridge.d.ts +63 -0
  139. package/build/services/DevServerBridge.d.ts.map +1 -0
  140. package/build/services/DevServerBridge.js +294 -0
  141. package/build/services/DevServerBridge.js.map +1 -0
  142. package/build/services/DeviceEventRouter.d.ts +3 -0
  143. package/build/services/DeviceEventRouter.d.ts.map +1 -0
  144. package/build/services/DeviceEventRouter.js +190 -0
  145. package/build/services/DeviceEventRouter.js.map +1 -0
  146. package/build/services/DeviceStoreHydration.d.ts +38 -0
  147. package/build/services/DeviceStoreHydration.d.ts.map +1 -0
  148. package/build/services/DeviceStoreHydration.js +124 -0
  149. package/build/services/DeviceStoreHydration.js.map +1 -0
  150. package/build/services/DisplayProcessor.d.ts +223 -0
  151. package/build/services/DisplayProcessor.d.ts.map +1 -0
  152. package/build/services/DisplayProcessor.js +552 -0
  153. package/build/services/DisplayProcessor.js.map +1 -0
  154. package/build/services/GlassesReadiness.d.ts +41 -0
  155. package/build/services/GlassesReadiness.d.ts.map +1 -0
  156. package/build/services/GlassesReadiness.js +82 -0
  157. package/build/services/GlassesReadiness.js.map +1 -0
  158. package/build/services/GlassesSettingsSync.d.ts +33 -0
  159. package/build/services/GlassesSettingsSync.d.ts.map +1 -0
  160. package/build/services/GlassesSettingsSync.js +121 -0
  161. package/build/services/GlassesSettingsSync.js.map +1 -0
  162. package/build/services/GlassesStatusProjection.d.ts +3 -0
  163. package/build/services/GlassesStatusProjection.d.ts.map +1 -0
  164. package/build/services/GlassesStatusProjection.js +65 -0
  165. package/build/services/GlassesStatusProjection.js.map +1 -0
  166. package/build/services/HeadingService.d.ts +27 -0
  167. package/build/services/HeadingService.d.ts.map +1 -0
  168. package/build/services/HeadingService.js +96 -0
  169. package/build/services/HeadingService.js.map +1 -0
  170. package/build/services/LocalDisplayManager.d.ts +139 -0
  171. package/build/services/LocalDisplayManager.d.ts.map +1 -0
  172. package/build/services/LocalDisplayManager.js +579 -0
  173. package/build/services/LocalDisplayManager.js.map +1 -0
  174. package/build/services/LocalMiniappRuntime.d.ts +433 -0
  175. package/build/services/LocalMiniappRuntime.d.ts.map +1 -0
  176. package/build/services/LocalMiniappRuntime.js +3561 -0
  177. package/build/services/LocalMiniappRuntime.js.map +1 -0
  178. package/build/services/LocalSttFallbackCoordinator.d.ts +54 -0
  179. package/build/services/LocalSttFallbackCoordinator.d.ts.map +1 -0
  180. package/build/services/LocalSttFallbackCoordinator.js +131 -0
  181. package/build/services/LocalSttFallbackCoordinator.js.map +1 -0
  182. package/build/services/MentraJSCrashController.d.ts +97 -0
  183. package/build/services/MentraJSCrashController.d.ts.map +1 -0
  184. package/build/services/MentraJSCrashController.js +138 -0
  185. package/build/services/MentraJSCrashController.js.map +1 -0
  186. package/build/services/MentraJSCrashloopReportService.d.ts +9 -0
  187. package/build/services/MentraJSCrashloopReportService.d.ts.map +1 -0
  188. package/build/services/MentraJSCrashloopReportService.js +54 -0
  189. package/build/services/MentraJSCrashloopReportService.js.map +1 -0
  190. package/build/services/MentraJSLogPipeline.d.ts +87 -0
  191. package/build/services/MentraJSLogPipeline.d.ts.map +1 -0
  192. package/build/services/MentraJSLogPipeline.js +137 -0
  193. package/build/services/MentraJSLogPipeline.js.map +1 -0
  194. package/build/services/MentraJSRouter.d.ts +203 -0
  195. package/build/services/MentraJSRouter.d.ts.map +1 -0
  196. package/build/services/MentraJSRouter.js +480 -0
  197. package/build/services/MentraJSRouter.js.map +1 -0
  198. package/build/services/MentraUIRouter.d.ts +137 -0
  199. package/build/services/MentraUIRouter.d.ts.map +1 -0
  200. package/build/services/MentraUIRouter.js +210 -0
  201. package/build/services/MentraUIRouter.js.map +1 -0
  202. package/build/services/MicStateCoordinator.d.ts +37 -0
  203. package/build/services/MicStateCoordinator.d.ts.map +1 -0
  204. package/build/services/MicStateCoordinator.js +81 -0
  205. package/build/services/MicStateCoordinator.js.map +1 -0
  206. package/build/services/MiniappEngine.d.ts +31 -0
  207. package/build/services/MiniappEngine.d.ts.map +1 -0
  208. package/build/services/MiniappEngine.js +119 -0
  209. package/build/services/MiniappEngine.js.map +1 -0
  210. package/build/services/MiniappLauncher.d.ts +129 -0
  211. package/build/services/MiniappLauncher.d.ts.map +1 -0
  212. package/build/services/MiniappLauncher.js +291 -0
  213. package/build/services/MiniappLauncher.js.map +1 -0
  214. package/build/services/MiniappRunningRegistry.d.ts +24 -0
  215. package/build/services/MiniappRunningRegistry.d.ts.map +1 -0
  216. package/build/services/MiniappRunningRegistry.js +52 -0
  217. package/build/services/MiniappRunningRegistry.js.map +1 -0
  218. package/build/services/NavigationHandlers.d.ts +90 -0
  219. package/build/services/NavigationHandlers.d.ts.map +1 -0
  220. package/build/services/NavigationHandlers.js +379 -0
  221. package/build/services/NavigationHandlers.js.map +1 -0
  222. package/build/services/NavigationService.d.ts +254 -0
  223. package/build/services/NavigationService.d.ts.map +1 -0
  224. package/build/services/NavigationService.js +553 -0
  225. package/build/services/NavigationService.js.map +1 -0
  226. package/build/services/NotificationsEmitter.d.ts +28 -0
  227. package/build/services/NotificationsEmitter.d.ts.map +1 -0
  228. package/build/services/NotificationsEmitter.js +22 -0
  229. package/build/services/NotificationsEmitter.js.map +1 -0
  230. package/build/services/OfflineSpeechModelService.d.ts +33 -0
  231. package/build/services/OfflineSpeechModelService.d.ts.map +1 -0
  232. package/build/services/OfflineSpeechModelService.js +136 -0
  233. package/build/services/OfflineSpeechModelService.js.map +1 -0
  234. package/build/services/OtaInstallCoordinator.d.ts +195 -0
  235. package/build/services/OtaInstallCoordinator.d.ts.map +1 -0
  236. package/build/services/OtaInstallCoordinator.js +1047 -0
  237. package/build/services/OtaInstallCoordinator.js.map +1 -0
  238. package/build/services/OtaService.d.ts +3 -0
  239. package/build/services/OtaService.d.ts.map +1 -0
  240. package/build/services/OtaService.js +65 -0
  241. package/build/services/OtaService.js.map +1 -0
  242. package/build/services/OtaUpdateCheckService.d.ts +65 -0
  243. package/build/services/OtaUpdateCheckService.d.ts.map +1 -0
  244. package/build/services/OtaUpdateCheckService.js +260 -0
  245. package/build/services/OtaUpdateCheckService.js.map +1 -0
  246. package/build/services/PairingIdentity.d.ts +80 -0
  247. package/build/services/PairingIdentity.d.ts.map +1 -0
  248. package/build/services/PairingIdentity.js +145 -0
  249. package/build/services/PairingIdentity.js.map +1 -0
  250. package/build/services/PhoneLocationService.d.ts +36 -0
  251. package/build/services/PhoneLocationService.d.ts.map +1 -0
  252. package/build/services/PhoneLocationService.js +115 -0
  253. package/build/services/PhoneLocationService.js.map +1 -0
  254. package/build/services/PhoneNotificationsSync.d.ts +3 -0
  255. package/build/services/PhoneNotificationsSync.d.ts.map +1 -0
  256. package/build/services/PhoneNotificationsSync.js +35 -0
  257. package/build/services/PhoneNotificationsSync.js.map +1 -0
  258. package/build/services/PhonePhotoCoordinator.d.ts +86 -0
  259. package/build/services/PhonePhotoCoordinator.d.ts.map +1 -0
  260. package/build/services/PhonePhotoCoordinator.js +274 -0
  261. package/build/services/PhonePhotoCoordinator.js.map +1 -0
  262. package/build/services/PhoneStreamCoordinator.d.ts +168 -0
  263. package/build/services/PhoneStreamCoordinator.d.ts.map +1 -0
  264. package/build/services/PhoneStreamCoordinator.js +632 -0
  265. package/build/services/PhoneStreamCoordinator.js.map +1 -0
  266. package/build/services/PhoneVideoCoordinator.d.ts +50 -0
  267. package/build/services/PhoneVideoCoordinator.d.ts.map +1 -0
  268. package/build/services/PhoneVideoCoordinator.js +147 -0
  269. package/build/services/PhoneVideoCoordinator.js.map +1 -0
  270. package/build/services/STTModelManager.d.ts +65 -0
  271. package/build/services/STTModelManager.d.ts.map +1 -0
  272. package/build/services/STTModelManager.js +292 -0
  273. package/build/services/STTModelManager.js.map +1 -0
  274. package/build/services/SceneRenderer.d.ts +90 -0
  275. package/build/services/SceneRenderer.d.ts.map +1 -0
  276. package/build/services/SceneRenderer.js +248 -0
  277. package/build/services/SceneRenderer.js.map +1 -0
  278. package/build/services/StreamLifecycleController.d.ts +67 -0
  279. package/build/services/StreamLifecycleController.d.ts.map +1 -0
  280. package/build/services/StreamLifecycleController.js +152 -0
  281. package/build/services/StreamLifecycleController.js.map +1 -0
  282. package/build/services/TTSModelManager.d.ts +90 -0
  283. package/build/services/TTSModelManager.d.ts.map +1 -0
  284. package/build/services/TTSModelManager.js +366 -0
  285. package/build/services/TTSModelManager.js.map +1 -0
  286. package/build/services/WebviewBridge.d.ts +22 -0
  287. package/build/services/WebviewBridge.d.ts.map +1 -0
  288. package/build/services/WebviewBridge.js +47 -0
  289. package/build/services/WebviewBridge.js.map +1 -0
  290. package/build/services/asg/GalleryMediaIntegrityReportService.d.ts +17 -0
  291. package/build/services/asg/GalleryMediaIntegrityReportService.d.ts.map +1 -0
  292. package/build/services/asg/GalleryMediaIntegrityReportService.js +43 -0
  293. package/build/services/asg/GalleryMediaIntegrityReportService.js.map +1 -0
  294. package/build/services/asg/asgCameraApi.d.ts +165 -0
  295. package/build/services/asg/asgCameraApi.d.ts.map +1 -0
  296. package/build/services/asg/asgCameraApi.js +997 -0
  297. package/build/services/asg/asgCameraApi.js.map +1 -0
  298. package/build/services/asg/galleryMediaValidation.d.ts +29 -0
  299. package/build/services/asg/galleryMediaValidation.d.ts.map +1 -0
  300. package/build/services/asg/galleryMediaValidation.js +149 -0
  301. package/build/services/asg/galleryMediaValidation.js.map +1 -0
  302. package/build/services/asg/galleryNotices.d.ts +33 -0
  303. package/build/services/asg/galleryNotices.d.ts.map +1 -0
  304. package/build/services/asg/galleryNotices.js +29 -0
  305. package/build/services/asg/galleryNotices.js.map +1 -0
  306. package/build/services/asg/gallerySettingsService.d.ts +19 -0
  307. package/build/services/asg/gallerySettingsService.d.ts.map +1 -0
  308. package/build/services/asg/gallerySettingsService.js +51 -0
  309. package/build/services/asg/gallerySettingsService.js.map +1 -0
  310. package/build/services/asg/gallerySyncNotifications.d.ts +56 -0
  311. package/build/services/asg/gallerySyncNotifications.d.ts.map +1 -0
  312. package/build/services/asg/gallerySyncNotifications.js +198 -0
  313. package/build/services/asg/gallerySyncNotifications.js.map +1 -0
  314. package/build/services/asg/gallerySyncService.d.ts +137 -0
  315. package/build/services/asg/gallerySyncService.d.ts.map +1 -0
  316. package/build/services/asg/gallerySyncService.js +1839 -0
  317. package/build/services/asg/gallerySyncService.js.map +1 -0
  318. package/build/services/asg/localStorageService.d.ts +128 -0
  319. package/build/services/asg/localStorageService.d.ts.map +1 -0
  320. package/build/services/asg/localStorageService.js +423 -0
  321. package/build/services/asg/localStorageService.js.map +1 -0
  322. package/build/services/asg/mediaProcessingQueue.d.ts +60 -0
  323. package/build/services/asg/mediaProcessingQueue.d.ts.map +1 -0
  324. package/build/services/asg/mediaProcessingQueue.js +320 -0
  325. package/build/services/asg/mediaProcessingQueue.js.map +1 -0
  326. package/build/services/asgOtaVersionUrl.d.ts +2 -0
  327. package/build/services/asgOtaVersionUrl.d.ts.map +1 -0
  328. package/build/services/asgOtaVersionUrl.js +36 -0
  329. package/build/services/asgOtaVersionUrl.js.map +1 -0
  330. package/build/services/blobPaths.d.ts +31 -0
  331. package/build/services/blobPaths.d.ts.map +1 -0
  332. package/build/services/blobPaths.js +86 -0
  333. package/build/services/blobPaths.js.map +1 -0
  334. package/build/services/cloudStreamApi.d.ts +59 -0
  335. package/build/services/cloudStreamApi.d.ts.map +1 -0
  336. package/build/services/cloudStreamApi.js +81 -0
  337. package/build/services/cloudStreamApi.js.map +1 -0
  338. package/build/services/gallerySyncClock.d.ts +17 -0
  339. package/build/services/gallerySyncClock.d.ts.map +1 -0
  340. package/build/services/gallerySyncClock.js +21 -0
  341. package/build/services/gallerySyncClock.js.map +1 -0
  342. package/build/services/glassesClockSync.d.ts +20 -0
  343. package/build/services/glassesClockSync.d.ts.map +1 -0
  344. package/build/services/glassesClockSync.js +97 -0
  345. package/build/services/glassesClockSync.js.map +1 -0
  346. package/build/services/manifestVersionGate.d.ts +28 -0
  347. package/build/services/manifestVersionGate.d.ts.map +1 -0
  348. package/build/services/manifestVersionGate.js +41 -0
  349. package/build/services/manifestVersionGate.js.map +1 -0
  350. package/build/services/mentraUiShim.d.ts +38 -0
  351. package/build/services/mentraUiShim.d.ts.map +1 -0
  352. package/build/services/mentraUiShim.js +360 -0
  353. package/build/services/mentraUiShim.js.map +1 -0
  354. package/build/services/navigation/roadNameResolver.d.ts +67 -0
  355. package/build/services/navigation/roadNameResolver.d.ts.map +1 -0
  356. package/build/services/navigation/roadNameResolver.js +96 -0
  357. package/build/services/navigation/roadNameResolver.js.map +1 -0
  358. package/build/services/navigation/routesApiCodec.d.ts +38 -0
  359. package/build/services/navigation/routesApiCodec.d.ts.map +1 -0
  360. package/build/services/navigation/routesApiCodec.js +68 -0
  361. package/build/services/navigation/routesApiCodec.js.map +1 -0
  362. package/build/services/otaDisplayState.d.ts +42 -0
  363. package/build/services/otaDisplayState.d.ts.map +1 -0
  364. package/build/services/otaDisplayState.js +92 -0
  365. package/build/services/otaDisplayState.js.map +1 -0
  366. package/build/services/otaInstallPolicy.d.ts +81 -0
  367. package/build/services/otaInstallPolicy.d.ts.map +1 -0
  368. package/build/services/otaInstallPolicy.js +96 -0
  369. package/build/services/otaInstallPolicy.js.map +1 -0
  370. package/build/services/otaLegacyMapping.d.ts +22 -0
  371. package/build/services/otaLegacyMapping.d.ts.map +1 -0
  372. package/build/services/otaLegacyMapping.js +56 -0
  373. package/build/services/otaLegacyMapping.js.map +1 -0
  374. package/build/services/slimStreamStatus.d.ts +7 -0
  375. package/build/services/slimStreamStatus.d.ts.map +1 -0
  376. package/build/services/slimStreamStatus.js +26 -0
  377. package/build/services/slimStreamStatus.js.map +1 -0
  378. package/build/stores/apps.d.ts +104 -0
  379. package/build/stores/apps.d.ts.map +1 -0
  380. package/build/stores/apps.js +492 -0
  381. package/build/stores/apps.js.map +1 -0
  382. package/build/stores/bluetoothSettingKeys.d.ts +4 -0
  383. package/build/stores/bluetoothSettingKeys.d.ts.map +1 -0
  384. package/build/stores/bluetoothSettingKeys.js +31 -0
  385. package/build/stores/bluetoothSettingKeys.js.map +1 -0
  386. package/build/stores/cloudClientStatus.d.ts +9 -0
  387. package/build/stores/cloudClientStatus.d.ts.map +1 -0
  388. package/build/stores/cloudClientStatus.js +24 -0
  389. package/build/stores/cloudClientStatus.js.map +1 -0
  390. package/build/stores/connection.d.ts +22 -0
  391. package/build/stores/connection.d.ts.map +1 -0
  392. package/build/stores/connection.js +43 -0
  393. package/build/stores/connection.js.map +1 -0
  394. package/build/stores/core.d.ts +15 -0
  395. package/build/stores/core.d.ts.map +1 -0
  396. package/build/stores/core.js +21 -0
  397. package/build/stores/core.js.map +1 -0
  398. package/build/stores/display.d.ts +24 -0
  399. package/build/stores/display.d.ts.map +1 -0
  400. package/build/stores/display.js +96 -0
  401. package/build/stores/display.js.map +1 -0
  402. package/build/stores/gallerySync.d.ts +101 -0
  403. package/build/stores/gallerySync.d.ts.map +1 -0
  404. package/build/stores/gallerySync.js +217 -0
  405. package/build/stores/gallerySync.js.map +1 -0
  406. package/build/stores/glasses.d.ts +62 -0
  407. package/build/stores/glasses.d.ts.map +1 -0
  408. package/build/stores/glasses.js +203 -0
  409. package/build/stores/glasses.js.map +1 -0
  410. package/build/stores/settings.d.ts +37 -0
  411. package/build/stores/settings.d.ts.map +1 -0
  412. package/build/stores/settings.js +915 -0
  413. package/build/stores/settings.js.map +1 -0
  414. package/build/types/applet.d.ts +96 -0
  415. package/build/types/applet.d.ts.map +1 -0
  416. package/build/types/applet.js +5 -0
  417. package/build/types/applet.js.map +1 -0
  418. package/build/types/asg.d.ts +46 -0
  419. package/build/types/asg.d.ts.map +1 -0
  420. package/build/types/asg.js +2 -0
  421. package/build/types/asg.js.map +1 -0
  422. package/build/types/capabilities/even-realities-g1.d.ts +12 -0
  423. package/build/types/capabilities/even-realities-g1.d.ts.map +1 -0
  424. package/build/types/capabilities/even-realities-g1.js +55 -0
  425. package/build/types/capabilities/even-realities-g1.js.map +1 -0
  426. package/build/types/capabilities/even-realities-g2.d.ts +12 -0
  427. package/build/types/capabilities/even-realities-g2.d.ts.map +1 -0
  428. package/build/types/capabilities/even-realities-g2.js +75 -0
  429. package/build/types/capabilities/even-realities-g2.js.map +1 -0
  430. package/build/types/capabilities/mentra-display.d.ts +12 -0
  431. package/build/types/capabilities/mentra-display.d.ts.map +1 -0
  432. package/build/types/capabilities/mentra-display.js +63 -0
  433. package/build/types/capabilities/mentra-display.js.map +1 -0
  434. package/build/types/capabilities/mentra-live.d.ts +12 -0
  435. package/build/types/capabilities/mentra-live.d.ts.map +1 -0
  436. package/build/types/capabilities/mentra-live.js +92 -0
  437. package/build/types/capabilities/mentra-live.js.map +1 -0
  438. package/build/types/capabilities/none.d.ts +13 -0
  439. package/build/types/capabilities/none.d.ts.map +1 -0
  440. package/build/types/capabilities/none.js +65 -0
  441. package/build/types/capabilities/none.js.map +1 -0
  442. package/build/types/capabilities/simulated-glasses.d.ts +13 -0
  443. package/build/types/capabilities/simulated-glasses.d.ts.map +1 -0
  444. package/build/types/capabilities/simulated-glasses.js +65 -0
  445. package/build/types/capabilities/simulated-glasses.js.map +1 -0
  446. package/build/types/capabilities/vuzix-z100.d.ts +12 -0
  447. package/build/types/capabilities/vuzix-z100.d.ts.map +1 -0
  448. package/build/types/capabilities/vuzix-z100.js +52 -0
  449. package/build/types/capabilities/vuzix-z100.js.map +1 -0
  450. package/build/types/enums.d.ts +40 -0
  451. package/build/types/enums.d.ts.map +1 -0
  452. package/build/types/enums.js +44 -0
  453. package/build/types/enums.js.map +1 -0
  454. package/build/types/hardware.d.ts +160 -0
  455. package/build/types/hardware.d.ts.map +1 -0
  456. package/build/types/hardware.js +36 -0
  457. package/build/types/hardware.js.map +1 -0
  458. package/build/types/index.d.ts +11 -0
  459. package/build/types/index.d.ts.map +1 -0
  460. package/build/types/index.js +10 -0
  461. package/build/types/index.js.map +1 -0
  462. package/build/utils/GlobalEventEmitter.d.ts +10 -0
  463. package/build/utils/GlobalEventEmitter.d.ts.map +1 -0
  464. package/build/utils/GlobalEventEmitter.js +13 -0
  465. package/build/utils/GlobalEventEmitter.js.map +1 -0
  466. package/build/utils/cloudClient/RnUdpAdapter.d.ts +3 -0
  467. package/build/utils/cloudClient/RnUdpAdapter.d.ts.map +1 -0
  468. package/build/utils/cloudClient/RnUdpAdapter.js +41 -0
  469. package/build/utils/cloudClient/RnUdpAdapter.js.map +1 -0
  470. package/build/utils/cloudClient/cloudSecureStore.d.ts +3 -0
  471. package/build/utils/cloudClient/cloudSecureStore.d.ts.map +1 -0
  472. package/build/utils/cloudClient/cloudSecureStore.js +26 -0
  473. package/build/utils/cloudClient/cloudSecureStore.js.map +1 -0
  474. package/build/utils/debouncedPatch.d.ts +6 -0
  475. package/build/utils/debouncedPatch.d.ts.map +1 -0
  476. package/build/utils/debouncedPatch.js +25 -0
  477. package/build/utils/debouncedPatch.js.map +1 -0
  478. package/build/utils/devLogging.d.ts +26 -0
  479. package/build/utils/devLogging.d.ts.map +1 -0
  480. package/build/utils/devLogging.js +116 -0
  481. package/build/utils/devLogging.js.map +1 -0
  482. package/build/utils/devMiniappLaunch.d.ts +44 -0
  483. package/build/utils/devMiniappLaunch.d.ts.map +1 -0
  484. package/build/utils/devMiniappLaunch.js +52 -0
  485. package/build/utils/devMiniappLaunch.js.map +1 -0
  486. package/build/utils/diagnosticContext.d.ts +3 -0
  487. package/build/utils/diagnosticContext.d.ts.map +1 -0
  488. package/build/utils/diagnosticContext.js +119 -0
  489. package/build/utils/diagnosticContext.js.map +1 -0
  490. package/build/utils/display/composer/ColumnComposer.d.ts +131 -0
  491. package/build/utils/display/composer/ColumnComposer.d.ts.map +1 -0
  492. package/build/utils/display/composer/ColumnComposer.js +204 -0
  493. package/build/utils/display/composer/ColumnComposer.js.map +1 -0
  494. package/build/utils/display/composer/index.d.ts +9 -0
  495. package/build/utils/display/composer/index.d.ts.map +1 -0
  496. package/build/utils/display/composer/index.js +9 -0
  497. package/build/utils/display/composer/index.js.map +1 -0
  498. package/build/utils/display/helpers/DisplayHelpers.d.ts +165 -0
  499. package/build/utils/display/helpers/DisplayHelpers.d.ts.map +1 -0
  500. package/build/utils/display/helpers/DisplayHelpers.js +312 -0
  501. package/build/utils/display/helpers/DisplayHelpers.js.map +1 -0
  502. package/build/utils/display/helpers/ScrollView.d.ts +183 -0
  503. package/build/utils/display/helpers/ScrollView.d.ts.map +1 -0
  504. package/build/utils/display/helpers/ScrollView.js +257 -0
  505. package/build/utils/display/helpers/ScrollView.js.map +1 -0
  506. package/build/utils/display/helpers/index.d.ts +11 -0
  507. package/build/utils/display/helpers/index.d.ts.map +1 -0
  508. package/build/utils/display/helpers/index.js +10 -0
  509. package/build/utils/display/helpers/index.js.map +1 -0
  510. package/build/utils/display/index.d.ts +174 -0
  511. package/build/utils/display/index.d.ts.map +1 -0
  512. package/build/utils/display/index.js +185 -0
  513. package/build/utils/display/index.js.map +1 -0
  514. package/build/utils/display/measurer/TextMeasurer.d.ts +160 -0
  515. package/build/utils/display/measurer/TextMeasurer.d.ts.map +1 -0
  516. package/build/utils/display/measurer/TextMeasurer.js +273 -0
  517. package/build/utils/display/measurer/TextMeasurer.js.map +1 -0
  518. package/build/utils/display/measurer/index.d.ts +10 -0
  519. package/build/utils/display/measurer/index.d.ts.map +1 -0
  520. package/build/utils/display/measurer/index.js +11 -0
  521. package/build/utils/display/measurer/index.js.map +1 -0
  522. package/build/utils/display/measurer/script-detection.d.ts +53 -0
  523. package/build/utils/display/measurer/script-detection.d.ts.map +1 -0
  524. package/build/utils/display/measurer/script-detection.js +184 -0
  525. package/build/utils/display/measurer/script-detection.js.map +1 -0
  526. package/build/utils/display/profiles/g1.d.ts +33 -0
  527. package/build/utils/display/profiles/g1.d.ts.map +1 -0
  528. package/build/utils/display/profiles/g1.js +213 -0
  529. package/build/utils/display/profiles/g1.js.map +1 -0
  530. package/build/utils/display/profiles/g2.d.ts +13 -0
  531. package/build/utils/display/profiles/g2.d.ts.map +1 -0
  532. package/build/utils/display/profiles/g2.js +34 -0
  533. package/build/utils/display/profiles/g2.js.map +1 -0
  534. package/build/utils/display/profiles/index.d.ts +12 -0
  535. package/build/utils/display/profiles/index.d.ts.map +1 -0
  536. package/build/utils/display/profiles/index.js +15 -0
  537. package/build/utils/display/profiles/index.js.map +1 -0
  538. package/build/utils/display/profiles/nex.d.ts +10 -0
  539. package/build/utils/display/profiles/nex.d.ts.map +1 -0
  540. package/build/utils/display/profiles/nex.js +150 -0
  541. package/build/utils/display/profiles/nex.js.map +1 -0
  542. package/build/utils/display/profiles/types.d.ts +103 -0
  543. package/build/utils/display/profiles/types.d.ts.map +1 -0
  544. package/build/utils/display/profiles/types.js +2 -0
  545. package/build/utils/display/profiles/types.js.map +1 -0
  546. package/build/utils/display/profiles/z100.d.ts +33 -0
  547. package/build/utils/display/profiles/z100.d.ts.map +1 -0
  548. package/build/utils/display/profiles/z100.js +182 -0
  549. package/build/utils/display/profiles/z100.js.map +1 -0
  550. package/build/utils/display/scene/degrade.d.ts +25 -0
  551. package/build/utils/display/scene/degrade.d.ts.map +1 -0
  552. package/build/utils/display/scene/degrade.js +64 -0
  553. package/build/utils/display/scene/degrade.js.map +1 -0
  554. package/build/utils/display/scene/differ.d.ts +38 -0
  555. package/build/utils/display/scene/differ.d.ts.map +1 -0
  556. package/build/utils/display/scene/differ.js +107 -0
  557. package/build/utils/display/scene/differ.js.map +1 -0
  558. package/build/utils/display/scene/index.d.ts +10 -0
  559. package/build/utils/display/scene/index.d.ts.map +1 -0
  560. package/build/utils/display/scene/index.js +6 -0
  561. package/build/utils/display/scene/index.js.map +1 -0
  562. package/build/utils/display/scene/process.d.ts +35 -0
  563. package/build/utils/display/scene/process.d.ts.map +1 -0
  564. package/build/utils/display/scene/process.js +187 -0
  565. package/build/utils/display/scene/process.js.map +1 -0
  566. package/build/utils/display/scene/store.d.ts +48 -0
  567. package/build/utils/display/scene/store.d.ts.map +1 -0
  568. package/build/utils/display/scene/store.js +0 -0
  569. package/build/utils/display/scene/store.js.map +1 -0
  570. package/build/utils/display/scene/types.d.ts +120 -0
  571. package/build/utils/display/scene/types.d.ts.map +1 -0
  572. package/build/utils/display/scene/types.js +0 -0
  573. package/build/utils/display/scene/types.js.map +1 -0
  574. package/build/utils/display/wrapper/TextWrapper.d.ts +102 -0
  575. package/build/utils/display/wrapper/TextWrapper.d.ts.map +1 -0
  576. package/build/utils/display/wrapper/TextWrapper.js +471 -0
  577. package/build/utils/display/wrapper/TextWrapper.js.map +1 -0
  578. package/build/utils/display/wrapper/index.d.ts +12 -0
  579. package/build/utils/display/wrapper/index.d.ts.map +1 -0
  580. package/build/utils/display/wrapper/index.js +12 -0
  581. package/build/utils/display/wrapper/index.js.map +1 -0
  582. package/build/utils/display/wrapper/types.d.ts +75 -0
  583. package/build/utils/display/wrapper/types.d.ts.map +1 -0
  584. package/build/utils/display/wrapper/types.js +11 -0
  585. package/build/utils/display/wrapper/types.js.map +1 -0
  586. package/build/utils/e2eMetrics.d.ts +6 -0
  587. package/build/utils/e2eMetrics.d.ts.map +1 -0
  588. package/build/utils/e2eMetrics.js +27 -0
  589. package/build/utils/e2eMetrics.js.map +1 -0
  590. package/build/utils/hardware/hardware.d.ts +42 -0
  591. package/build/utils/hardware/hardware.d.ts.map +1 -0
  592. package/build/utils/hardware/hardware.js +127 -0
  593. package/build/utils/hardware/hardware.js.map +1 -0
  594. package/build/utils/hardware/index.d.ts +2 -0
  595. package/build/utils/hardware/index.d.ts.map +1 -0
  596. package/build/utils/hardware/index.js +2 -0
  597. package/build/utils/hardware/index.js.map +1 -0
  598. package/build/utils/miniappGlobals.d.ts +60 -0
  599. package/build/utils/miniappGlobals.d.ts.map +1 -0
  600. package/build/utils/miniappGlobals.js +224 -0
  601. package/build/utils/miniappGlobals.js.map +1 -0
  602. package/build/utils/permissions/MediaLibraryPermissions.d.ts +34 -0
  603. package/build/utils/permissions/MediaLibraryPermissions.d.ts.map +1 -0
  604. package/build/utils/permissions/MediaLibraryPermissions.js +122 -0
  605. package/build/utils/permissions/MediaLibraryPermissions.js.map +1 -0
  606. package/build/utils/permissions/galleryDisplayName.d.ts +8 -0
  607. package/build/utils/permissions/galleryDisplayName.d.ts.map +1 -0
  608. package/build/utils/permissions/galleryDisplayName.js +25 -0
  609. package/build/utils/permissions/galleryDisplayName.js.map +1 -0
  610. package/build/utils/storage/index.d.ts +3 -0
  611. package/build/utils/storage/index.d.ts.map +1 -0
  612. package/build/utils/storage/index.js +3 -0
  613. package/build/utils/storage/index.js.map +1 -0
  614. package/build/utils/storage/storage.d.ts +24 -0
  615. package/build/utils/storage/storage.d.ts.map +1 -0
  616. package/build/utils/storage/storage.js +85 -0
  617. package/build/utils/storage/storage.js.map +1 -0
  618. package/build/utils/storage/zip.d.ts +3 -0
  619. package/build/utils/storage/zip.d.ts.map +1 -0
  620. package/build/utils/storage/zip.js +14 -0
  621. package/build/utils/storage/zip.js.map +1 -0
  622. package/build/utils/timers/index.d.ts +3 -0
  623. package/build/utils/timers/index.d.ts.map +1 -0
  624. package/build/utils/timers/index.js +3 -0
  625. package/build/utils/timers/index.js.map +1 -0
  626. package/build/utils/timers/timers.d.ts +9 -0
  627. package/build/utils/timers/timers.d.ts.map +1 -0
  628. package/build/utils/timers/timers.js +105 -0
  629. package/build/utils/timers/timers.js.map +1 -0
  630. package/package.json +119 -0
  631. package/src/devtools.ts +13 -0
  632. package/src/engine.ts +173 -0
  633. package/src/facades/dev.ts +197 -0
  634. package/src/facades/display.ts +17 -0
  635. package/src/facades/displayMirror.ts +33 -0
  636. package/src/facades/gallery.ts +69 -0
  637. package/src/facades/glasses.ts +206 -0
  638. package/src/facades/glassesSettings.ts +56 -0
  639. package/src/facades/glassesWifi.ts +68 -0
  640. package/src/facades/miniapps.ts +55 -0
  641. package/src/facades/notifications.ts +15 -0
  642. package/src/facades/ota.ts +174 -0
  643. package/src/facades/pairing.ts +329 -0
  644. package/src/facades/permissions.ts +151 -0
  645. package/src/facades/phoneNotifications.ts +50 -0
  646. package/src/facades/reports.ts +185 -0
  647. package/src/facades/session.ts +55 -0
  648. package/src/facades/settings.ts +57 -0
  649. package/src/facades/speech.ts +38 -0
  650. package/src/index.ts +191 -0
  651. package/src/internal.ts +158 -0
  652. package/src/runtime/bootstrap.ts +118 -0
  653. package/src/runtime/config.ts +147 -0
  654. package/src/runtime/streamConfig.ts +34 -0
  655. package/src/services/AppRegistry.ts +1139 -0
  656. package/src/services/AudioCloudUplink.ts +34 -0
  657. package/src/services/AudioPlaybackService.ts +624 -0
  658. package/src/services/AutomaticReportResult.ts +48 -0
  659. package/src/services/BlobStore.ts +746 -0
  660. package/src/services/CaptionsTesterReportService.ts +107 -0
  661. package/src/services/CloudAudioSubscriptionSync.ts +41 -0
  662. package/src/services/CloudClientService.ts +668 -0
  663. package/src/services/CloudTranscriptE2EMetrics.ts +27 -0
  664. package/src/services/ConnectionCoordinator.ts +65 -0
  665. package/src/services/DevServerBridge.ts +332 -0
  666. package/src/services/DeviceEventRouter.ts +238 -0
  667. package/src/services/DeviceStoreHydration.ts +130 -0
  668. package/src/services/DisplayProcessor.ts +775 -0
  669. package/src/services/GlassesReadiness.ts +103 -0
  670. package/src/services/GlassesSettingsSync.ts +134 -0
  671. package/src/services/GlassesStatusProjection.ts +73 -0
  672. package/src/services/HeadingService.ts +98 -0
  673. package/src/services/LocalDisplayManager.ts +703 -0
  674. package/src/services/LocalMiniappRuntime.ts +4038 -0
  675. package/src/services/LocalSttFallbackCoordinator.ts +140 -0
  676. package/src/services/MentraJSCrashController.ts +189 -0
  677. package/src/services/MentraJSCrashloopReportService.ts +66 -0
  678. package/src/services/MentraJSLogPipeline.ts +166 -0
  679. package/src/services/MentraJSRouter.ts +557 -0
  680. package/src/services/MentraUIRouter.ts +244 -0
  681. package/src/services/MicStateCoordinator.ts +94 -0
  682. package/src/services/MiniappEngine.ts +143 -0
  683. package/src/services/MiniappLauncher.ts +340 -0
  684. package/src/services/MiniappRunningRegistry.ts +57 -0
  685. package/src/services/NavigationHandlers.ts +423 -0
  686. package/src/services/NavigationService.ts +731 -0
  687. package/src/services/NotificationsEmitter.ts +48 -0
  688. package/src/services/OfflineSpeechModelService.ts +168 -0
  689. package/src/services/OtaInstallCoordinator.ts +1205 -0
  690. package/src/services/OtaService.ts +83 -0
  691. package/src/services/OtaUpdateCheckService.ts +386 -0
  692. package/src/services/PairingIdentity.ts +154 -0
  693. package/src/services/PhoneLocationService.ts +122 -0
  694. package/src/services/PhoneNotificationsSync.ts +44 -0
  695. package/src/services/PhonePhotoCoordinator.ts +337 -0
  696. package/src/services/PhoneStreamCoordinator.ts +777 -0
  697. package/src/services/PhoneVideoCoordinator.ts +189 -0
  698. package/src/services/STTModelManager.ts +360 -0
  699. package/src/services/SceneRenderer.ts +292 -0
  700. package/src/services/StreamLifecycleController.ts +213 -0
  701. package/src/services/TTSModelManager.ts +466 -0
  702. package/src/services/WebviewBridge.ts +50 -0
  703. package/src/services/asg/GalleryMediaIntegrityReportService.ts +70 -0
  704. package/src/services/asg/asgCameraApi.ts +1204 -0
  705. package/src/services/asg/galleryMediaValidation.ts +183 -0
  706. package/src/services/asg/galleryNotices.ts +60 -0
  707. package/src/services/asg/gallerySettingsService.ts +65 -0
  708. package/src/services/asg/gallerySyncNotifications.ts +236 -0
  709. package/src/services/asg/gallerySyncService.ts +2167 -0
  710. package/src/services/asg/localStorageService.ts +497 -0
  711. package/src/services/asg/mediaProcessingQueue.ts +371 -0
  712. package/src/services/asgOtaVersionUrl.ts +41 -0
  713. package/src/services/blobPaths.ts +86 -0
  714. package/src/services/cloudStreamApi.ts +154 -0
  715. package/src/services/gallerySyncClock.ts +39 -0
  716. package/src/services/glassesClockSync.ts +115 -0
  717. package/src/services/manifestVersionGate.ts +43 -0
  718. package/src/services/mentraUiShim.ts +366 -0
  719. package/src/services/navigation/roadNameResolver.ts +112 -0
  720. package/src/services/navigation/routesApiCodec.ts +69 -0
  721. package/src/services/otaDisplayState.ts +115 -0
  722. package/src/services/otaInstallPolicy.ts +106 -0
  723. package/src/services/otaLegacyMapping.ts +71 -0
  724. package/src/services/slimStreamStatus.ts +28 -0
  725. package/src/stores/apps.ts +614 -0
  726. package/src/stores/bluetoothSettingKeys.ts +36 -0
  727. package/src/stores/cloudClientStatus.ts +37 -0
  728. package/src/stores/connection.ts +69 -0
  729. package/src/stores/core.ts +32 -0
  730. package/src/stores/display.ts +121 -0
  731. package/src/stores/gallerySync.ts +380 -0
  732. package/src/stores/glasses.ts +309 -0
  733. package/src/stores/settings.ts +993 -0
  734. package/src/types/applet.ts +112 -0
  735. package/src/types/asg.ts +51 -0
  736. package/src/types/capabilities/even-realities-g1.ts +67 -0
  737. package/src/types/capabilities/even-realities-g2.ts +88 -0
  738. package/src/types/capabilities/mentra-display.ts +75 -0
  739. package/src/types/capabilities/mentra-live.ts +103 -0
  740. package/src/types/capabilities/none.ts +76 -0
  741. package/src/types/capabilities/simulated-glasses.ts +76 -0
  742. package/src/types/capabilities/vuzix-z100.ts +64 -0
  743. package/src/types/enums.ts +43 -0
  744. package/src/types/hardware.ts +203 -0
  745. package/src/types/index.ts +37 -0
  746. package/src/utils/GlobalEventEmitter.ts +14 -0
  747. package/src/utils/cloudClient/RnUdpAdapter.ts +47 -0
  748. package/src/utils/cloudClient/cloudSecureStore.ts +28 -0
  749. package/src/utils/debouncedPatch.ts +28 -0
  750. package/src/utils/devLogging.ts +140 -0
  751. package/src/utils/devMiniappLaunch.ts +68 -0
  752. package/src/utils/diagnosticContext.ts +155 -0
  753. package/src/utils/display/composer/ColumnComposer.ts +285 -0
  754. package/src/utils/display/composer/index.ts +15 -0
  755. package/src/utils/display/helpers/DisplayHelpers.ts +413 -0
  756. package/src/utils/display/helpers/ScrollView.ts +337 -0
  757. package/src/utils/display/helpers/index.ts +14 -0
  758. package/src/utils/display/index.ts +273 -0
  759. package/src/utils/display/measurer/TextMeasurer.ts +346 -0
  760. package/src/utils/display/measurer/index.ts +21 -0
  761. package/src/utils/display/measurer/script-detection.ts +218 -0
  762. package/src/utils/display/profiles/g1.ts +236 -0
  763. package/src/utils/display/profiles/g2.ts +39 -0
  764. package/src/utils/display/profiles/index.ts +28 -0
  765. package/src/utils/display/profiles/nex.ts +166 -0
  766. package/src/utils/display/profiles/types.ts +132 -0
  767. package/src/utils/display/profiles/z100.ts +198 -0
  768. package/src/utils/display/scene/degrade.ts +80 -0
  769. package/src/utils/display/scene/differ.ts +128 -0
  770. package/src/utils/display/scene/index.ts +21 -0
  771. package/src/utils/display/scene/process.ts +214 -0
  772. package/src/utils/display/scene/store.ts +0 -0
  773. package/src/utils/display/scene/types.ts +0 -0
  774. package/src/utils/display/wrapper/TextWrapper.ts +546 -0
  775. package/src/utils/display/wrapper/index.ts +15 -0
  776. package/src/utils/display/wrapper/types.ts +102 -0
  777. package/src/utils/e2eMetrics.ts +30 -0
  778. package/src/utils/hardware/hardware.ts +166 -0
  779. package/src/utils/hardware/index.ts +1 -0
  780. package/src/utils/miniappGlobals.ts +260 -0
  781. package/src/utils/permissions/MediaLibraryPermissions.ts +130 -0
  782. package/src/utils/permissions/galleryDisplayName.ts +28 -0
  783. package/src/utils/storage/index.ts +2 -0
  784. package/src/utils/storage/storage.ts +101 -0
  785. package/src/utils/storage/zip.ts +13 -0
  786. package/src/utils/timers/index.ts +2 -0
  787. package/src/utils/timers/timers.ts +139 -0
@@ -0,0 +1,366 @@
1
+ import BluetoothSdk from "@mentra/bluetooth-sdk";
2
+ import * as RNFS from "@dr.pogodin/react-native-fs";
3
+ /**
4
+ * Offline TTS via Sherpa-ONNX Supertonic 3.
5
+ *
6
+ * Supertonic 3 ships as a single multilingual model bundle (123 MB int8)
7
+ * with 31 languages and 10 preset voice styles inside one voice.bin.
8
+ *
9
+ * Speaker IDs are alphabetical by source filename, so:
10
+ * sid 0 = F1, 1 = F2, 2 = F3, 3 = F4, 4 = F5,
11
+ * sid 5 = M1, 6 = M2, 7 = M3, 8 = M4, 9 = M5.
12
+ *
13
+ * Default voice is F1 (sid 0) — a female "professional broadcast" voice.
14
+ *
15
+ * Per-call language selection is done by the native layer based on the
16
+ * languageCode set via setTtsModelDetails (Supertonic accepts e.g. "en",
17
+ * "ko", "ja", "fr", "de", "es", … — 31 codes total).
18
+ */
19
+ const SUPERTONIC_FILE = "sherpa-onnx-supertonic-3-tts-int8-2026-05-11";
20
+ const SUPERTONIC_SIZE = 128974848; // 123 MB
21
+ const SUPERTONIC_SHA256 = "82fa96f91c4ef8abaae3a14a3f4153facf88bed821d1f7331cec2700f432c427";
22
+ // Speaker IDs for Supertonic 3.
23
+ export const SUPERTONIC_VOICES = {
24
+ F1: 0,
25
+ F2: 1,
26
+ F3: 2,
27
+ F4: 3,
28
+ F5: 4,
29
+ M1: 5,
30
+ M2: 6,
31
+ M3: 7,
32
+ M4: 8,
33
+ M5: 9,
34
+ };
35
+ export const DEFAULT_SUPERTONIC_VOICE_SID = SUPERTONIC_VOICES.F1;
36
+ /** Languages Supertonic 3 supports (BCP-47-ish tags surfaced to the UI). */
37
+ const LANGUAGE_DISPLAY = {
38
+ en: { displayName: "English", bcp47: "en-US" },
39
+ fr: { displayName: "Français", bcp47: "fr-FR" },
40
+ de: { displayName: "Deutsch", bcp47: "de-DE" },
41
+ es: { displayName: "Español", bcp47: "es-ES" },
42
+ it: { displayName: "Italiano", bcp47: "it-IT" },
43
+ pt: { displayName: "Português", bcp47: "pt-PT" },
44
+ nl: { displayName: "Nederlands", bcp47: "nl-NL" },
45
+ pl: { displayName: "Polski", bcp47: "pl-PL" },
46
+ ru: { displayName: "Русский", bcp47: "ru-RU" },
47
+ uk: { displayName: "Українська", bcp47: "uk-UA" },
48
+ ko: { displayName: "한국어", bcp47: "ko-KR" },
49
+ ja: { displayName: "日本語", bcp47: "ja-JP" },
50
+ ar: { displayName: "العربية", bcp47: "ar-SA" },
51
+ hi: { displayName: "हिन्दी", bcp47: "hi-IN" },
52
+ id: { displayName: "Bahasa Indonesia", bcp47: "id-ID" },
53
+ vi: { displayName: "Tiếng Việt", bcp47: "vi-VN" },
54
+ tr: { displayName: "Türkçe", bcp47: "tr-TR" },
55
+ el: { displayName: "Ελληνικά", bcp47: "el-GR" },
56
+ bg: { displayName: "Български", bcp47: "bg-BG" },
57
+ cs: { displayName: "Čeština", bcp47: "cs-CZ" },
58
+ da: { displayName: "Dansk", bcp47: "da-DK" },
59
+ et: { displayName: "Eesti", bcp47: "et-EE" },
60
+ fi: { displayName: "Suomi", bcp47: "fi-FI" },
61
+ hr: { displayName: "Hrvatski", bcp47: "hr-HR" },
62
+ hu: { displayName: "Magyar", bcp47: "hu-HU" },
63
+ lt: { displayName: "Lietuvių", bcp47: "lt-LT" },
64
+ lv: { displayName: "Latviešu", bcp47: "lv-LV" },
65
+ ro: { displayName: "Română", bcp47: "ro-RO" },
66
+ sk: { displayName: "Slovenčina", bcp47: "sk-SK" },
67
+ sl: { displayName: "Slovenščina", bcp47: "sl-SI" },
68
+ sv: { displayName: "Svenska", bcp47: "sv-SE" },
69
+ };
70
+ const DEFAULT_LANGUAGE = "en";
71
+ /** On-disk folder name for the single Supertonic install. */
72
+ const MODEL_FOLDER = "supertonic";
73
+ /** Files inside the Supertonic 3 archive — must match TTSTools native validators. */
74
+ const SUPERTONIC_REQUIRED_FILES = [
75
+ "duration_predictor.int8.onnx",
76
+ "text_encoder.int8.onnx",
77
+ "vector_estimator.int8.onnx",
78
+ "vocoder.int8.onnx",
79
+ "tts.json",
80
+ "unicode_indexer.bin",
81
+ "voice.bin",
82
+ ];
83
+ function buildLanguageRegistry() {
84
+ const out = {};
85
+ for (const [code, meta] of Object.entries(LANGUAGE_DISPLAY)) {
86
+ out[code] = {
87
+ code,
88
+ displayName: meta.displayName,
89
+ fileName: SUPERTONIC_FILE,
90
+ size: SUPERTONIC_SIZE,
91
+ type: "supertonic",
92
+ requiredFiles: SUPERTONIC_REQUIRED_FILES,
93
+ languageCode: meta.bcp47,
94
+ };
95
+ }
96
+ return out;
97
+ }
98
+ class TTSModelManager {
99
+ static instance;
100
+ downloadJobId;
101
+ currentLanguage = DEFAULT_LANGUAGE;
102
+ // Sherpa-onnx releases page hosts the tarball.
103
+ modelBaseUrl = "https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/";
104
+ // Languages all map onto the same on-disk Supertonic install. Selecting a
105
+ // language tells the native layer which lang to pass to the model — no
106
+ // separate downloads per language.
107
+ languages = buildLanguageRegistry();
108
+ constructor() { }
109
+ static getInstance() {
110
+ if (!TTSModelManager.instance) {
111
+ TTSModelManager.instance = new TTSModelManager();
112
+ }
113
+ return TTSModelManager.instance;
114
+ }
115
+ /** Expected SHA-256 of the Supertonic 3 tarball, for downstream integrity checks. */
116
+ getExpectedSha256() {
117
+ return SUPERTONIC_SHA256;
118
+ }
119
+ async getCurrentLanguageFromPreferences() {
120
+ try {
121
+ const path = await BluetoothSdk.getTtsModelPath();
122
+ if (!path || path.length === 0) {
123
+ return "";
124
+ }
125
+ if (!(await this.isModelAvailable())) {
126
+ return "";
127
+ }
128
+ // The native side persists the BCP-47 tag (e.g. "fr-FR") that was passed
129
+ // to setTtsModelDetails. Map it back to our registry key.
130
+ const bcp47 = await BluetoothSdk.getTtsModelLanguage();
131
+ const primary = bcp47.split("-")[0].toLowerCase();
132
+ const code = this.languages[primary] ? primary : "";
133
+ if (code) {
134
+ this.currentLanguage = code;
135
+ }
136
+ return code;
137
+ }
138
+ catch (error) {
139
+ console.error("Error getting current TTS language from preferences:", error);
140
+ return "";
141
+ }
142
+ }
143
+ getCurrentLanguage() {
144
+ return this.currentLanguage;
145
+ }
146
+ setCurrentLanguage(code) {
147
+ if (this.languages[code]) {
148
+ this.currentLanguage = code;
149
+ }
150
+ }
151
+ getAvailableLanguages() {
152
+ return Object.values(this.languages);
153
+ }
154
+ getBcp47ForLanguage(code) {
155
+ const id = code || this.currentLanguage;
156
+ return this.languages[id]?.languageCode ?? "en-US";
157
+ }
158
+ getModelDirectory() {
159
+ return `${RNFS.DocumentDirectoryPath}/tts_models`;
160
+ }
161
+ /** All languages share the same on-disk Supertonic install. */
162
+ getModelPath(_code) {
163
+ return `${this.getModelDirectory()}/${MODEL_FOLDER}`;
164
+ }
165
+ /** Last path segment is "supertonic" (the on-disk install folder). */
166
+ getLanguageFromPath(path) {
167
+ return path.split("/").pop() || "";
168
+ }
169
+ async isModelAvailable(code) {
170
+ try {
171
+ const language = this.languages[code || this.currentLanguage];
172
+ if (!language)
173
+ return false;
174
+ const modelPath = this.getModelPath();
175
+ for (const file of language.requiredFiles) {
176
+ const exists = await RNFS.exists(`${modelPath}/${file}`);
177
+ if (!exists) {
178
+ console.log(`Missing required TTS file: ${file} at ${modelPath}`);
179
+ return false;
180
+ }
181
+ }
182
+ return await BluetoothSdk.validateTtsModel(modelPath);
183
+ }
184
+ catch (error) {
185
+ console.error("Error checking TTS model availability:", error);
186
+ return false;
187
+ }
188
+ }
189
+ async getLanguageInfo(code) {
190
+ const id = code || this.currentLanguage;
191
+ const language = this.languages[id];
192
+ if (!language) {
193
+ throw new Error(`TTS language ${id} not found`);
194
+ }
195
+ const downloaded = await this.isModelAvailable(id);
196
+ const path = downloaded ? this.getModelPath() : undefined;
197
+ return {
198
+ code: id,
199
+ displayName: language.displayName,
200
+ size: language.size,
201
+ language: language.languageCode,
202
+ downloaded,
203
+ path,
204
+ type: language.type,
205
+ };
206
+ }
207
+ async getAllLanguageInfo() {
208
+ const infos = [];
209
+ for (const code of Object.keys(this.languages)) {
210
+ infos.push(await this.getLanguageInfo(code));
211
+ }
212
+ return infos;
213
+ }
214
+ async downloadModel(code, onProgress, onExtractionProgress) {
215
+ const id = code || this.currentLanguage;
216
+ const language = this.languages[id];
217
+ if (!language) {
218
+ throw new Error(`TTS language ${id} not found`);
219
+ }
220
+ // All languages share the same archive — re-downloading is a no-op if
221
+ // the on-disk model is already present and valid.
222
+ if (await this.isModelAvailable(id)) {
223
+ onExtractionProgress?.({ percentage: 100 });
224
+ // Make sure the native layer has the latest language code.
225
+ await this.setNativeModelPath(this.getModelPath(), language.languageCode);
226
+ this.currentLanguage = id;
227
+ return;
228
+ }
229
+ const modelUrl = `${this.modelBaseUrl}${SUPERTONIC_FILE}.tar.bz2`;
230
+ const tempPath = `${RNFS.TemporaryDirectoryPath}/${SUPERTONIC_FILE}.tar.bz2`;
231
+ const modelDir = this.getModelDirectory();
232
+ const finalPath = this.getModelPath();
233
+ try {
234
+ await RNFS.mkdir(modelDir, { NSURLIsExcludedFromBackupKey: true });
235
+ const result = RNFS.downloadFile({
236
+ fromUrl: modelUrl,
237
+ toFile: tempPath,
238
+ progress: (res) => {
239
+ const percentage = Math.round((res.bytesWritten / res.contentLength) * 100);
240
+ onProgress?.({
241
+ jobId: res.jobId,
242
+ bytesWritten: res.bytesWritten,
243
+ contentLength: res.contentLength,
244
+ percentage,
245
+ });
246
+ },
247
+ progressDivider: 10,
248
+ connectionTimeout: 30000,
249
+ readTimeout: 30000,
250
+ });
251
+ this.downloadJobId = result.jobId;
252
+ const downloadResult = await result.promise;
253
+ if (downloadResult.statusCode !== 200) {
254
+ throw new Error(`TTS model download failed with status code: ${downloadResult.statusCode}`);
255
+ }
256
+ const subscription = BluetoothSdk.addListener("extraction_progress", (event) => {
257
+ onExtractionProgress?.({ percentage: event.percentage });
258
+ });
259
+ let extractionResult = false;
260
+ try {
261
+ extractionResult = await BluetoothSdk.extractTarBz2(tempPath, finalPath);
262
+ }
263
+ finally {
264
+ subscription.remove();
265
+ }
266
+ if (!extractionResult) {
267
+ throw new Error("Native TTS model extraction returned failure status");
268
+ }
269
+ onExtractionProgress?.({ percentage: 100 });
270
+ await RNFS.unlink(tempPath);
271
+ await this.setNativeModelPath(finalPath, language.languageCode);
272
+ this.currentLanguage = id;
273
+ }
274
+ catch (error) {
275
+ // Best-effort cleanup; never let it mask the original error.
276
+ try {
277
+ if (await RNFS.exists(tempPath))
278
+ await RNFS.unlink(tempPath);
279
+ }
280
+ catch (cleanupError) {
281
+ console.warn("TTSModelManager: temp cleanup failed:", cleanupError);
282
+ }
283
+ try {
284
+ if (await RNFS.exists(finalPath))
285
+ await RNFS.unlink(finalPath);
286
+ }
287
+ catch (cleanupError) {
288
+ console.warn("TTSModelManager: final cleanup failed:", cleanupError);
289
+ }
290
+ throw error;
291
+ }
292
+ }
293
+ async cancelDownload() {
294
+ if (this.downloadJobId !== undefined) {
295
+ await RNFS.stopDownload(this.downloadJobId);
296
+ this.downloadJobId = undefined;
297
+ }
298
+ }
299
+ async deleteModel(_code) {
300
+ const modelPath = this.getModelPath();
301
+ if (await RNFS.exists(modelPath)) {
302
+ await RNFS.unlink(modelPath);
303
+ }
304
+ }
305
+ async activateLanguage(code) {
306
+ const language = this.languages[code];
307
+ if (!language) {
308
+ throw new Error(`TTS language ${code} not found`);
309
+ }
310
+ const isAvailable = await this.isModelAvailable(code);
311
+ if (!isAvailable) {
312
+ throw new Error(`TTS language ${code} model is not downloaded`);
313
+ }
314
+ this.currentLanguage = code;
315
+ await this.setNativeModelPath(this.getModelPath(), language.languageCode);
316
+ }
317
+ async synthesizeToFile(text, options = {}) {
318
+ const id = options.languageCode || this.currentLanguage;
319
+ const language = this.languages[id];
320
+ if (!language) {
321
+ throw new Error(`TTS language ${id} not found`);
322
+ }
323
+ if (!(await this.isModelAvailable(id))) {
324
+ throw new Error(`TTS model is not downloaded`);
325
+ }
326
+ // Make sure the native layer is synced to this language before generating;
327
+ // Supertonic reads the BCP-47 tag from prefs when synthesising.
328
+ if (id !== this.currentLanguage) {
329
+ await this.activateLanguage(id);
330
+ }
331
+ const outputDir = RNFS.CachesDirectoryPath || RNFS.TemporaryDirectoryPath;
332
+ const safeId = `${Date.now()}_${Math.random().toString(36).slice(2)}`;
333
+ const outputPath = `${outputDir}/mentra_tts_${safeId}.wav`;
334
+ const ok = await BluetoothSdk.generateTtsAudio(text, this.getModelPath(), outputPath, options.speakerId ?? DEFAULT_SUPERTONIC_VOICE_SID, options.speed ?? 1.0);
335
+ if (!ok) {
336
+ throw new Error("Offline TTS synthesis failed");
337
+ }
338
+ return {
339
+ audioUrl: `file://${outputPath}`,
340
+ filePath: outputPath,
341
+ cleanup: async () => {
342
+ if (await RNFS.exists(outputPath)) {
343
+ await RNFS.unlink(outputPath);
344
+ }
345
+ },
346
+ };
347
+ }
348
+ async setNativeModelPath(path, languageCode) {
349
+ await BluetoothSdk.setTtsModelDetails(path, languageCode);
350
+ }
351
+ formatBytes(bytes) {
352
+ return TTSModelManager.formatBytes(bytes);
353
+ }
354
+ static formatBytes(bytes) {
355
+ if (bytes === 0)
356
+ return "0 Bytes";
357
+ const k = 1024;
358
+ const sizes = ["Bytes", "KB", "MB", "GB"];
359
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
360
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + " " + sizes[i];
361
+ }
362
+ }
363
+ const instance = TTSModelManager.getInstance();
364
+ export { TTSModelManager };
365
+ export default instance;
366
+ //# sourceMappingURL=TTSModelManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TTSModelManager.js","sourceRoot":"","sources":["../../src/services/TTSModelManager.ts"],"names":[],"mappings":"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","sourcesContent":["import BluetoothSdk from \"@mentra/bluetooth-sdk\"\nimport * as RNFS from \"@dr.pogodin/react-native-fs\"\n\n/**\n * Offline TTS via Sherpa-ONNX Supertonic 3.\n *\n * Supertonic 3 ships as a single multilingual model bundle (123 MB int8)\n * with 31 languages and 10 preset voice styles inside one voice.bin.\n *\n * Speaker IDs are alphabetical by source filename, so:\n * sid 0 = F1, 1 = F2, 2 = F3, 3 = F4, 4 = F5,\n * sid 5 = M1, 6 = M2, 7 = M3, 8 = M4, 9 = M5.\n *\n * Default voice is F1 (sid 0) — a female \"professional broadcast\" voice.\n *\n * Per-call language selection is done by the native layer based on the\n * languageCode set via setTtsModelDetails (Supertonic accepts e.g. \"en\",\n * \"ko\", \"ja\", \"fr\", \"de\", \"es\", … — 31 codes total).\n */\n\nconst SUPERTONIC_FILE = \"sherpa-onnx-supertonic-3-tts-int8-2026-05-11\"\nconst SUPERTONIC_SIZE = 128974848 // 123 MB\nconst SUPERTONIC_SHA256 = \"82fa96f91c4ef8abaae3a14a3f4153facf88bed821d1f7331cec2700f432c427\"\n\n// Speaker IDs for Supertonic 3.\nexport const SUPERTONIC_VOICES = {\n F1: 0,\n F2: 1,\n F3: 2,\n F4: 3,\n F5: 4,\n M1: 5,\n M2: 6,\n M3: 7,\n M4: 8,\n M5: 9,\n} as const\n\nexport const DEFAULT_SUPERTONIC_VOICE_SID = SUPERTONIC_VOICES.F1\n\nexport interface TTSLanguageInfo {\n code: string\n displayName: string\n size: number\n language: string\n downloaded: boolean\n path?: string\n type: \"supertonic\"\n}\n\nexport interface TTSDownloadProgress {\n jobId: number\n bytesWritten: number\n contentLength: number\n percentage: number\n}\n\nexport interface TTSExtractionProgress {\n percentage: number\n currentFile?: string\n}\n\nexport interface TTSLanguageConfig {\n code: string\n displayName: string\n fileName: string\n size: number\n type: \"supertonic\"\n requiredFiles: string[]\n languageCode: string\n}\n\nexport interface TTSGenerateOptions {\n /** BCP-47 language tag, e.g. \"en-US\", \"fr-FR\". Maps to Supertonic 2-letter code. */\n languageCode?: string\n /** Speaker ID (0..9). Defaults to F1 (sid 0). */\n speakerId?: number\n /** Speech rate, clamped 0.5..2.0 on native side. */\n speed?: number\n}\n\nexport interface TTSGenerateResult {\n audioUrl: string\n filePath: string\n cleanup: () => Promise<void>\n}\n\n/** Languages Supertonic 3 supports (BCP-47-ish tags surfaced to the UI). */\nconst LANGUAGE_DISPLAY: Record<string, {displayName: string; bcp47: string}> = {\n en: {displayName: \"English\", bcp47: \"en-US\"},\n fr: {displayName: \"Français\", bcp47: \"fr-FR\"},\n de: {displayName: \"Deutsch\", bcp47: \"de-DE\"},\n es: {displayName: \"Español\", bcp47: \"es-ES\"},\n it: {displayName: \"Italiano\", bcp47: \"it-IT\"},\n pt: {displayName: \"Português\", bcp47: \"pt-PT\"},\n nl: {displayName: \"Nederlands\", bcp47: \"nl-NL\"},\n pl: {displayName: \"Polski\", bcp47: \"pl-PL\"},\n ru: {displayName: \"Русский\", bcp47: \"ru-RU\"},\n uk: {displayName: \"Українська\", bcp47: \"uk-UA\"},\n ko: {displayName: \"한국어\", bcp47: \"ko-KR\"},\n ja: {displayName: \"日本語\", bcp47: \"ja-JP\"},\n ar: {displayName: \"العربية\", bcp47: \"ar-SA\"},\n hi: {displayName: \"हिन्दी\", bcp47: \"hi-IN\"},\n id: {displayName: \"Bahasa Indonesia\", bcp47: \"id-ID\"},\n vi: {displayName: \"Tiếng Việt\", bcp47: \"vi-VN\"},\n tr: {displayName: \"Türkçe\", bcp47: \"tr-TR\"},\n el: {displayName: \"Ελληνικά\", bcp47: \"el-GR\"},\n bg: {displayName: \"Български\", bcp47: \"bg-BG\"},\n cs: {displayName: \"Čeština\", bcp47: \"cs-CZ\"},\n da: {displayName: \"Dansk\", bcp47: \"da-DK\"},\n et: {displayName: \"Eesti\", bcp47: \"et-EE\"},\n fi: {displayName: \"Suomi\", bcp47: \"fi-FI\"},\n hr: {displayName: \"Hrvatski\", bcp47: \"hr-HR\"},\n hu: {displayName: \"Magyar\", bcp47: \"hu-HU\"},\n lt: {displayName: \"Lietuvių\", bcp47: \"lt-LT\"},\n lv: {displayName: \"Latviešu\", bcp47: \"lv-LV\"},\n ro: {displayName: \"Română\", bcp47: \"ro-RO\"},\n sk: {displayName: \"Slovenčina\", bcp47: \"sk-SK\"},\n sl: {displayName: \"Slovenščina\", bcp47: \"sl-SI\"},\n sv: {displayName: \"Svenska\", bcp47: \"sv-SE\"},\n}\n\nconst DEFAULT_LANGUAGE = \"en\"\n\n/** On-disk folder name for the single Supertonic install. */\nconst MODEL_FOLDER = \"supertonic\"\n\n/** Files inside the Supertonic 3 archive — must match TTSTools native validators. */\nconst SUPERTONIC_REQUIRED_FILES = [\n \"duration_predictor.int8.onnx\",\n \"text_encoder.int8.onnx\",\n \"vector_estimator.int8.onnx\",\n \"vocoder.int8.onnx\",\n \"tts.json\",\n \"unicode_indexer.bin\",\n \"voice.bin\",\n]\n\nfunction buildLanguageRegistry(): Record<string, TTSLanguageConfig> {\n const out: Record<string, TTSLanguageConfig> = {}\n for (const [code, meta] of Object.entries(LANGUAGE_DISPLAY)) {\n out[code] = {\n code,\n displayName: meta.displayName,\n fileName: SUPERTONIC_FILE,\n size: SUPERTONIC_SIZE,\n type: \"supertonic\",\n requiredFiles: SUPERTONIC_REQUIRED_FILES,\n languageCode: meta.bcp47,\n }\n }\n return out\n}\n\nclass TTSModelManager {\n private static instance: TTSModelManager\n private downloadJobId?: number\n private currentLanguage = DEFAULT_LANGUAGE\n // Sherpa-onnx releases page hosts the tarball.\n private modelBaseUrl = \"https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/\"\n\n // Languages all map onto the same on-disk Supertonic install. Selecting a\n // language tells the native layer which lang to pass to the model — no\n // separate downloads per language.\n private languages: Record<string, TTSLanguageConfig> = buildLanguageRegistry()\n\n private constructor() {}\n\n static getInstance(): TTSModelManager {\n if (!TTSModelManager.instance) {\n TTSModelManager.instance = new TTSModelManager()\n }\n return TTSModelManager.instance\n }\n\n /** Expected SHA-256 of the Supertonic 3 tarball, for downstream integrity checks. */\n getExpectedSha256(): string {\n return SUPERTONIC_SHA256\n }\n\n async getCurrentLanguageFromPreferences(): Promise<string> {\n try {\n const path = await BluetoothSdk.getTtsModelPath()\n if (!path || path.length === 0) {\n return \"\"\n }\n if (!(await this.isModelAvailable())) {\n return \"\"\n }\n // The native side persists the BCP-47 tag (e.g. \"fr-FR\") that was passed\n // to setTtsModelDetails. Map it back to our registry key.\n const bcp47 = await BluetoothSdk.getTtsModelLanguage()\n const primary = bcp47.split(\"-\")[0].toLowerCase()\n const code = this.languages[primary] ? primary : \"\"\n if (code) {\n this.currentLanguage = code\n }\n return code\n } catch (error) {\n console.error(\"Error getting current TTS language from preferences:\", error)\n return \"\"\n }\n }\n\n getCurrentLanguage(): string {\n return this.currentLanguage\n }\n\n setCurrentLanguage(code: string): void {\n if (this.languages[code]) {\n this.currentLanguage = code\n }\n }\n\n getAvailableLanguages(): TTSLanguageConfig[] {\n return Object.values(this.languages)\n }\n\n getBcp47ForLanguage(code?: string): string {\n const id = code || this.currentLanguage\n return this.languages[id]?.languageCode ?? \"en-US\"\n }\n\n getModelDirectory(): string {\n return `${RNFS.DocumentDirectoryPath}/tts_models`\n }\n\n /** All languages share the same on-disk Supertonic install. */\n getModelPath(_code?: string): string {\n return `${this.getModelDirectory()}/${MODEL_FOLDER}`\n }\n\n /** Last path segment is \"supertonic\" (the on-disk install folder). */\n getLanguageFromPath(path: string): string {\n return path.split(\"/\").pop() || \"\"\n }\n\n async isModelAvailable(code?: string): Promise<boolean> {\n try {\n const language = this.languages[code || this.currentLanguage]\n if (!language) return false\n\n const modelPath = this.getModelPath()\n for (const file of language.requiredFiles) {\n const exists = await RNFS.exists(`${modelPath}/${file}`)\n if (!exists) {\n console.log(`Missing required TTS file: ${file} at ${modelPath}`)\n return false\n }\n }\n\n return await BluetoothSdk.validateTtsModel(modelPath)\n } catch (error) {\n console.error(\"Error checking TTS model availability:\", error)\n return false\n }\n }\n\n async getLanguageInfo(code?: string): Promise<TTSLanguageInfo> {\n const id = code || this.currentLanguage\n const language = this.languages[id]\n if (!language) {\n throw new Error(`TTS language ${id} not found`)\n }\n\n const downloaded = await this.isModelAvailable(id)\n const path = downloaded ? this.getModelPath() : undefined\n\n return {\n code: id,\n displayName: language.displayName,\n size: language.size,\n language: language.languageCode,\n downloaded,\n path,\n type: language.type,\n }\n }\n\n async getAllLanguageInfo(): Promise<TTSLanguageInfo[]> {\n const infos: TTSLanguageInfo[] = []\n for (const code of Object.keys(this.languages)) {\n infos.push(await this.getLanguageInfo(code))\n }\n return infos\n }\n\n async downloadModel(\n code?: string,\n onProgress?: (progress: TTSDownloadProgress) => void,\n onExtractionProgress?: (progress: TTSExtractionProgress) => void,\n ): Promise<void> {\n const id = code || this.currentLanguage\n const language = this.languages[id]\n if (!language) {\n throw new Error(`TTS language ${id} not found`)\n }\n\n // All languages share the same archive — re-downloading is a no-op if\n // the on-disk model is already present and valid.\n if (await this.isModelAvailable(id)) {\n onExtractionProgress?.({percentage: 100})\n // Make sure the native layer has the latest language code.\n await this.setNativeModelPath(this.getModelPath(), language.languageCode)\n this.currentLanguage = id\n return\n }\n\n const modelUrl = `${this.modelBaseUrl}${SUPERTONIC_FILE}.tar.bz2`\n const tempPath = `${RNFS.TemporaryDirectoryPath}/${SUPERTONIC_FILE}.tar.bz2`\n const modelDir = this.getModelDirectory()\n const finalPath = this.getModelPath()\n\n try {\n await RNFS.mkdir(modelDir, {NSURLIsExcludedFromBackupKey: true})\n\n const result = RNFS.downloadFile({\n fromUrl: modelUrl,\n toFile: tempPath,\n progress: (res: RNFS.DownloadProgressCallbackResultT) => {\n const percentage = Math.round((res.bytesWritten / res.contentLength) * 100)\n onProgress?.({\n jobId: res.jobId,\n bytesWritten: res.bytesWritten,\n contentLength: res.contentLength,\n percentage,\n })\n },\n progressDivider: 10,\n connectionTimeout: 30000,\n readTimeout: 30000,\n })\n this.downloadJobId = result.jobId\n\n const downloadResult = await result.promise\n if (downloadResult.statusCode !== 200) {\n throw new Error(`TTS model download failed with status code: ${downloadResult.statusCode}`)\n }\n\n const subscription = BluetoothSdk.addListener(\"extraction_progress\", (event) => {\n onExtractionProgress?.({percentage: event.percentage})\n })\n\n let extractionResult = false\n try {\n extractionResult = await BluetoothSdk.extractTarBz2(tempPath, finalPath)\n } finally {\n subscription.remove()\n }\n\n if (!extractionResult) {\n throw new Error(\"Native TTS model extraction returned failure status\")\n }\n onExtractionProgress?.({percentage: 100})\n\n await RNFS.unlink(tempPath)\n\n await this.setNativeModelPath(finalPath, language.languageCode)\n this.currentLanguage = id\n } catch (error) {\n // Best-effort cleanup; never let it mask the original error.\n try {\n if (await RNFS.exists(tempPath)) await RNFS.unlink(tempPath)\n } catch (cleanupError) {\n console.warn(\"TTSModelManager: temp cleanup failed:\", cleanupError)\n }\n try {\n if (await RNFS.exists(finalPath)) await RNFS.unlink(finalPath)\n } catch (cleanupError) {\n console.warn(\"TTSModelManager: final cleanup failed:\", cleanupError)\n }\n throw error\n }\n }\n\n async cancelDownload(): Promise<void> {\n if (this.downloadJobId !== undefined) {\n await RNFS.stopDownload(this.downloadJobId)\n this.downloadJobId = undefined\n }\n }\n\n async deleteModel(_code?: string): Promise<void> {\n const modelPath = this.getModelPath()\n if (await RNFS.exists(modelPath)) {\n await RNFS.unlink(modelPath)\n }\n }\n\n async activateLanguage(code: string): Promise<void> {\n const language = this.languages[code]\n if (!language) {\n throw new Error(`TTS language ${code} not found`)\n }\n\n const isAvailable = await this.isModelAvailable(code)\n if (!isAvailable) {\n throw new Error(`TTS language ${code} model is not downloaded`)\n }\n\n this.currentLanguage = code\n await this.setNativeModelPath(this.getModelPath(), language.languageCode)\n }\n\n async synthesizeToFile(text: string, options: TTSGenerateOptions = {}): Promise<TTSGenerateResult> {\n const id = options.languageCode || this.currentLanguage\n const language = this.languages[id]\n if (!language) {\n throw new Error(`TTS language ${id} not found`)\n }\n\n if (!(await this.isModelAvailable(id))) {\n throw new Error(`TTS model is not downloaded`)\n }\n\n // Make sure the native layer is synced to this language before generating;\n // Supertonic reads the BCP-47 tag from prefs when synthesising.\n if (id !== this.currentLanguage) {\n await this.activateLanguage(id)\n }\n\n const outputDir = RNFS.CachesDirectoryPath || RNFS.TemporaryDirectoryPath\n const safeId = `${Date.now()}_${Math.random().toString(36).slice(2)}`\n const outputPath = `${outputDir}/mentra_tts_${safeId}.wav`\n const ok = await BluetoothSdk.generateTtsAudio(\n text,\n this.getModelPath(),\n outputPath,\n options.speakerId ?? DEFAULT_SUPERTONIC_VOICE_SID,\n options.speed ?? 1.0,\n )\n if (!ok) {\n throw new Error(\"Offline TTS synthesis failed\")\n }\n\n return {\n audioUrl: `file://${outputPath}`,\n filePath: outputPath,\n cleanup: async () => {\n if (await RNFS.exists(outputPath)) {\n await RNFS.unlink(outputPath)\n }\n },\n }\n }\n\n private async setNativeModelPath(path: string, languageCode: string): Promise<void> {\n await BluetoothSdk.setTtsModelDetails(path, languageCode)\n }\n\n formatBytes(bytes: number): string {\n return TTSModelManager.formatBytes(bytes)\n }\n\n static formatBytes(bytes: number): string {\n if (bytes === 0) return \"0 Bytes\"\n const k = 1024\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"]\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + \" \" + sizes[i]\n }\n}\n\nconst instance = TTSModelManager.getInstance()\nexport {TTSModelManager}\nexport default instance\n"]}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * WebviewBridge — WebView message handler registry.
3
+ *
4
+ * Holds per-packageName send functions so that any service (MiniappHost,
5
+ * webview.tsx) can inject JS into a specific WebView. That's it.
6
+ *
7
+ * Local miniapp message routing goes through LocalMiniappRuntime directly
8
+ * (MiniappHost calls localMiniappRuntime.handleRawMessage). WebviewBridge is
9
+ * not in that path.
10
+ */
11
+ declare class WebviewBridge {
12
+ private static instance;
13
+ private messageHandlers;
14
+ private constructor();
15
+ static getInstance(): WebviewBridge;
16
+ cleanup(): void;
17
+ setWebViewMessageHandler(packageName: string, handler?: (stringified: string) => void): void;
18
+ sendToMiniApp(packageName: string, message: object): void;
19
+ }
20
+ declare const webviewBridge: WebviewBridge;
21
+ export default webviewBridge;
22
+ //# sourceMappingURL=WebviewBridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebviewBridge.d.ts","sourceRoot":"","sources":["../../src/services/WebviewBridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAM,aAAa;IACjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA6B;IACpD,OAAO,CAAC,eAAe,CAAoD;IAE3E,OAAO;WAEO,WAAW,IAAI,aAAa;IAOnC,OAAO;IAKP,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI;IAQrF,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAS1D;AAED,QAAA,MAAM,aAAa,eAA8B,CAAA;AACjD,eAAe,aAAa,CAAA"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * WebviewBridge — WebView message handler registry.
3
+ *
4
+ * Holds per-packageName send functions so that any service (MiniappHost,
5
+ * webview.tsx) can inject JS into a specific WebView. That's it.
6
+ *
7
+ * Local miniapp message routing goes through LocalMiniappRuntime directly
8
+ * (MiniappHost calls localMiniappRuntime.handleRawMessage). WebviewBridge is
9
+ * not in that path.
10
+ */
11
+ class WebviewBridge {
12
+ static instance = null;
13
+ messageHandlers = {};
14
+ constructor() { }
15
+ static getInstance() {
16
+ if (!WebviewBridge.instance) {
17
+ WebviewBridge.instance = new WebviewBridge();
18
+ }
19
+ return WebviewBridge.instance;
20
+ }
21
+ cleanup() {
22
+ this.messageHandlers = {};
23
+ WebviewBridge.instance = null;
24
+ }
25
+ setWebViewMessageHandler(packageName, handler) {
26
+ if (handler) {
27
+ this.messageHandlers[packageName] = handler;
28
+ }
29
+ else {
30
+ delete this.messageHandlers[packageName];
31
+ }
32
+ }
33
+ sendToMiniApp(packageName, message) {
34
+ const handler = this.messageHandlers[packageName];
35
+ if (!handler)
36
+ return;
37
+ try {
38
+ handler(JSON.stringify(message));
39
+ }
40
+ catch (error) {
41
+ console.error(`MINICOM: Error sending to ${packageName}:`, error);
42
+ }
43
+ }
44
+ }
45
+ const webviewBridge = WebviewBridge.getInstance();
46
+ export default webviewBridge;
47
+ //# sourceMappingURL=WebviewBridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebviewBridge.js","sourceRoot":"","sources":["../../src/services/WebviewBridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,aAAa;IACT,MAAM,CAAC,QAAQ,GAAyB,IAAI,CAAA;IAC5C,eAAe,GAAkD,EAAE,CAAA;IAE3E,gBAAuB,CAAC;IAEjB,MAAM,CAAC,WAAW;QACvB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC5B,aAAa,CAAC,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAA;QAC9C,CAAC;QACD,OAAO,aAAa,CAAC,QAAQ,CAAA;IAC/B,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,eAAe,GAAG,EAAE,CAAA;QACzB,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAA;IAC/B,CAAC;IAEM,wBAAwB,CAAC,WAAmB,EAAE,OAAuC;QAC1F,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,OAAO,CAAA;QAC7C,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAA;QAC1C,CAAC;IACH,CAAC;IAEM,aAAa,CAAC,WAAmB,EAAE,OAAe;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAA;QACjD,IAAI,CAAC,OAAO;YAAE,OAAM;QACpB,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,WAAW,GAAG,EAAE,KAAK,CAAC,CAAA;QACnE,CAAC;IACH,CAAC;;AAGH,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW,EAAE,CAAA;AACjD,eAAe,aAAa,CAAA","sourcesContent":["/**\n * WebviewBridge — WebView message handler registry.\n *\n * Holds per-packageName send functions so that any service (MiniappHost,\n * webview.tsx) can inject JS into a specific WebView. That's it.\n *\n * Local miniapp message routing goes through LocalMiniappRuntime directly\n * (MiniappHost calls localMiniappRuntime.handleRawMessage). WebviewBridge is\n * not in that path.\n */\n\nclass WebviewBridge {\n private static instance: WebviewBridge | null = null\n private messageHandlers: Record<string, (stringified: string) => void> = {}\n\n private constructor() {}\n\n public static getInstance(): WebviewBridge {\n if (!WebviewBridge.instance) {\n WebviewBridge.instance = new WebviewBridge()\n }\n return WebviewBridge.instance\n }\n\n public cleanup() {\n this.messageHandlers = {}\n WebviewBridge.instance = null\n }\n\n public setWebViewMessageHandler(packageName: string, handler?: (stringified: string) => void) {\n if (handler) {\n this.messageHandlers[packageName] = handler\n } else {\n delete this.messageHandlers[packageName]\n }\n }\n\n public sendToMiniApp(packageName: string, message: object) {\n const handler = this.messageHandlers[packageName]\n if (!handler) return\n try {\n handler(JSON.stringify(message))\n } catch (error) {\n console.error(`MINICOM: Error sending to ${packageName}:`, error)\n }\n }\n}\n\nconst webviewBridge = WebviewBridge.getInstance()\nexport default webviewBridge\n"]}
@@ -0,0 +1,17 @@
1
+ import { type AutomaticReportSubmissionStatus } from "../AutomaticReportResult";
2
+ import type { MediaKind } from "./galleryMediaValidation";
3
+ export interface InvalidGalleryMediaReportInput {
4
+ name: string;
5
+ reason: string;
6
+ stage: "capture_metadata_validation" | "download_validation" | "download_capture_validation" | "processing_validation";
7
+ mediaKind: MediaKind;
8
+ path?: string;
9
+ expectedSize?: number;
10
+ captureId?: string;
11
+ duration?: number;
12
+ glassesModel?: string;
13
+ }
14
+ export declare function galleryMediaIntegrityThrottleKey(input: InvalidGalleryMediaReportInput): string;
15
+ export declare function submitInvalidGalleryMediaReport(input: InvalidGalleryMediaReportInput): Promise<AutomaticReportSubmissionStatus>;
16
+ export declare function reportInvalidGalleryMedia(input: InvalidGalleryMediaReportInput): void;
17
+ //# sourceMappingURL=GalleryMediaIntegrityReportService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GalleryMediaIntegrityReportService.d.ts","sourceRoot":"","sources":["../../../src/services/asg/GalleryMediaIntegrityReportService.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,+BAA+B,EAErC,MAAM,0BAA0B,CAAA;AACjC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,0BAA0B,CAAA;AAKvD,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,6BAA6B,GAAG,qBAAqB,GAAG,6BAA6B,GAAG,uBAAuB,CAAA;IACtH,SAAS,EAAE,SAAS,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,8BAA8B,GAAG,MAAM,CAE9F;AAED,wBAAsB,+BAA+B,CACnD,KAAK,EAAE,8BAA8B,GACpC,OAAO,CAAC,+BAA+B,CAAC,CAkC1C;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,8BAA8B,GAAG,IAAI,CAIrF"}
@@ -0,0 +1,43 @@
1
+ import { submitAutomaticReport } from "../../facades/reports";
2
+ import { logAutomaticReportSubmissionStatus, toAutomaticReportSubmissionStatus, } from "../AutomaticReportResult";
3
+ const LOG_TAG = "GalleryMediaIntegrityReport";
4
+ const THROTTLE_WINDOW_MS = 90_000;
5
+ export function galleryMediaIntegrityThrottleKey(input) {
6
+ return ["gallery_media_integrity", input.mediaKind, input.stage, input.captureId || input.name, input.reason].join("|");
7
+ }
8
+ export async function submitInvalidGalleryMediaReport(input) {
9
+ const result = await submitAutomaticReport({
10
+ kind: "automatic",
11
+ trigger: {
12
+ type: "automatic",
13
+ source: "gallery_media_integrity",
14
+ reason: "invalid_downloaded_media",
15
+ },
16
+ report: {
17
+ expectedBehavior: "Gallery media synced from glasses should be valid before it is shown in the gallery.",
18
+ actualBehavior: JSON.stringify({
19
+ name: input.name,
20
+ captureId: input.captureId,
21
+ mediaKind: input.mediaKind,
22
+ stage: input.stage,
23
+ reason: input.reason,
24
+ path: input.path,
25
+ expectedSize: input.expectedSize,
26
+ duration: input.duration,
27
+ glassesModel: input.glassesModel,
28
+ }, null, 2),
29
+ systemPriority: input.mediaKind === "video" ? "high" : "medium",
30
+ },
31
+ throttleKey: galleryMediaIntegrityThrottleKey(input),
32
+ throttleWindowMs: THROTTLE_WINDOW_MS,
33
+ });
34
+ const status = toAutomaticReportSubmissionStatus(result);
35
+ logAutomaticReportSubmissionStatus(LOG_TAG, status, input.name);
36
+ return status;
37
+ }
38
+ export function reportInvalidGalleryMedia(input) {
39
+ void submitInvalidGalleryMediaReport(input).catch((error) => {
40
+ console.error(`[${LOG_TAG}] Unexpected error:`, error);
41
+ });
42
+ }
43
+ //# sourceMappingURL=GalleryMediaIntegrityReportService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GalleryMediaIntegrityReportService.js","sourceRoot":"","sources":["../../../src/services/asg/GalleryMediaIntegrityReportService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,qBAAqB,EAAC,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EACL,kCAAkC,EAElC,iCAAiC,GAClC,MAAM,0BAA0B,CAAA;AAGjC,MAAM,OAAO,GAAG,6BAA6B,CAAA;AAC7C,MAAM,kBAAkB,GAAG,MAAM,CAAA;AAcjC,MAAM,UAAU,gCAAgC,CAAC,KAAqC;IACpF,OAAO,CAAC,yBAAyB,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACzH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,KAAqC;IAErC,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC;QACzC,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE;YACP,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,yBAAyB;YACjC,MAAM,EAAE,0BAA0B;SACnC;QACD,MAAM,EAAE;YACN,gBAAgB,EAAE,sFAAsF;YACxG,cAAc,EAAE,IAAI,CAAC,SAAS,CAC5B;gBACE,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,YAAY,EAAE,KAAK,CAAC,YAAY;aACjC,EACD,IAAI,EACJ,CAAC,CACF;YACD,cAAc,EAAE,KAAK,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;SAChE;QACD,WAAW,EAAE,gCAAgC,CAAC,KAAK,CAAC;QACpD,gBAAgB,EAAE,kBAAkB;KACrC,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,iCAAiC,CAAC,MAAM,CAAC,CAAA;IACxD,kCAAkC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;IAC/D,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAqC;IAC7E,KAAK,+BAA+B,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1D,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,qBAAqB,EAAE,KAAK,CAAC,CAAA;IACxD,CAAC,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import {submitAutomaticReport} from \"../../facades/reports\"\nimport {\n logAutomaticReportSubmissionStatus,\n type AutomaticReportSubmissionStatus,\n toAutomaticReportSubmissionStatus,\n} from \"../AutomaticReportResult\"\nimport type {MediaKind} from \"./galleryMediaValidation\"\n\nconst LOG_TAG = \"GalleryMediaIntegrityReport\"\nconst THROTTLE_WINDOW_MS = 90_000\n\nexport interface InvalidGalleryMediaReportInput {\n name: string\n reason: string\n stage: \"capture_metadata_validation\" | \"download_validation\" | \"download_capture_validation\" | \"processing_validation\"\n mediaKind: MediaKind\n path?: string\n expectedSize?: number\n captureId?: string\n duration?: number\n glassesModel?: string\n}\n\nexport function galleryMediaIntegrityThrottleKey(input: InvalidGalleryMediaReportInput): string {\n return [\"gallery_media_integrity\", input.mediaKind, input.stage, input.captureId || input.name, input.reason].join(\"|\")\n}\n\nexport async function submitInvalidGalleryMediaReport(\n input: InvalidGalleryMediaReportInput,\n): Promise<AutomaticReportSubmissionStatus> {\n const result = await submitAutomaticReport({\n kind: \"automatic\",\n trigger: {\n type: \"automatic\",\n source: \"gallery_media_integrity\",\n reason: \"invalid_downloaded_media\",\n },\n report: {\n expectedBehavior: \"Gallery media synced from glasses should be valid before it is shown in the gallery.\",\n actualBehavior: JSON.stringify(\n {\n name: input.name,\n captureId: input.captureId,\n mediaKind: input.mediaKind,\n stage: input.stage,\n reason: input.reason,\n path: input.path,\n expectedSize: input.expectedSize,\n duration: input.duration,\n glassesModel: input.glassesModel,\n },\n null,\n 2,\n ),\n systemPriority: input.mediaKind === \"video\" ? \"high\" : \"medium\",\n },\n throttleKey: galleryMediaIntegrityThrottleKey(input),\n throttleWindowMs: THROTTLE_WINDOW_MS,\n })\n\n const status = toAutomaticReportSubmissionStatus(result)\n logAutomaticReportSubmissionStatus(LOG_TAG, status, input.name)\n return status\n}\n\nexport function reportInvalidGalleryMedia(input: InvalidGalleryMediaReportInput): void {\n void submitInvalidGalleryMediaReport(input).catch((error) => {\n console.error(`[${LOG_TAG}] Unexpected error:`, error)\n })\n}\n"]}