@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,115 @@
1
+ /**
2
+ * Push phone time to glasses only when clock skew is detected (gallery sync, OTA, etc.).
3
+ */
4
+
5
+ import BluetoothSdk from "@mentra/bluetooth-sdk/internal"
6
+ import {BgTimer} from "../utils/timers"
7
+ import {useGlassesStore} from "../stores/glasses"
8
+
9
+ import {getAsgOtaVersionUrl} from "./asgOtaVersionUrl"
10
+ import {detectClockSkew} from "./gallerySyncClock"
11
+
12
+ export const CLOCK_SETTLE_MS = 500
13
+
14
+ const OTA_CLOCK_FIX_COOLDOWN_MS = 30_000
15
+ let lastOtaClockFixAt = 0
16
+ // Coalesce concurrent OTA clock-fix attempts. Glasses can emit two clock_skew events
17
+ // back-to-back during BLE handshake; without this guard both would await the BLE fix
18
+ // + retry pair before either updated `lastOtaClockFixAt`.
19
+ let inflightOtaClockFix: Promise<boolean> | null = null
20
+
21
+ /** @internal test-only */
22
+ export function resetOtaClockFixCooldownForTests(): void {
23
+ lastOtaClockFixAt = 0
24
+ inflightOtaClockFix = null
25
+ }
26
+
27
+ function delay(ms: number): Promise<void> {
28
+ return new Promise((resolve) => BgTimer.setTimeout(resolve, ms))
29
+ }
30
+
31
+ /**
32
+ * Set glasses system clock from phone when skew is detected.
33
+ */
34
+ export async function fixGlassesClockIfSkewed(glassesServerTime: number, lastSyncTime = 0): Promise<boolean> {
35
+ const {skewed, reason} = detectClockSkew(Date.now(), glassesServerTime, lastSyncTime)
36
+ if (!skewed) {
37
+ return false
38
+ }
39
+ console.log(`[GlassesClockSync] ⏰ Clock skew detected (${reason}) — setting glasses time from phone`)
40
+ await BluetoothSdk.setSystemTime(Date.now())
41
+ await delay(CLOCK_SETTLE_MS)
42
+ return true
43
+ }
44
+
45
+ /**
46
+ * After glasses report OTA failure due to clock skew, fix time and restart
47
+ * through the normal phone-driven ota_start path.
48
+ */
49
+ export async function handleOtaClockSkewFromGlasses(
50
+ errorCode: string | undefined,
51
+ glassesTimeMs?: number,
52
+ ): Promise<boolean> {
53
+ if (Date.now() - lastOtaClockFixAt < OTA_CLOCK_FIX_COOLDOWN_MS) {
54
+ return false
55
+ }
56
+
57
+ const hasGlassesTime = typeof glassesTimeMs === "number" && Number.isFinite(glassesTimeMs) && glassesTimeMs > 0
58
+
59
+ if (errorCode === "ssl_error") {
60
+ if (!hasGlassesTime) {
61
+ return false
62
+ }
63
+ const {skewed} = detectClockSkew(Date.now(), glassesTimeMs, 0)
64
+ if (!skewed) {
65
+ return false
66
+ }
67
+ console.log("[GlassesClockSync] ⏰ OTA ssl_error with wall-clock drift — treating as clock skew")
68
+ } else if (errorCode !== "clock_skew") {
69
+ return false
70
+ }
71
+
72
+ // Coalesce concurrent attempts: if a fix is already in flight, await its result instead
73
+ // of racing it through the cooldown guard.
74
+ if (inflightOtaClockFix) {
75
+ return inflightOtaClockFix
76
+ }
77
+
78
+ const glassesTime = hasGlassesTime ? glassesTimeMs : Date.now() - 86_400_000
79
+
80
+ inflightOtaClockFix = (async () => {
81
+ try {
82
+ const fixed = await fixGlassesClockIfSkewed(glassesTime, 0)
83
+ if (!fixed) {
84
+ return false
85
+ }
86
+
87
+ lastOtaClockFixAt = Date.now()
88
+ const {buildNumber, otaVersionUrl} = useGlassesStore.getState()
89
+ const manifestUrl = getAsgOtaVersionUrl(otaVersionUrl, buildNumber)
90
+ console.log("[GlassesClockSync] ⏰ Restarting OTA with ota_start after clock fix")
91
+ await BluetoothSdk.startOtaUpdate(manifestUrl)
92
+ return true
93
+ } finally {
94
+ inflightOtaClockFix = null
95
+ }
96
+ })()
97
+
98
+ return inflightOtaClockFix
99
+ }
100
+
101
+ /**
102
+ * Proactive fix when version_info includes glasses system_time_ms before OTA manifest checks.
103
+ */
104
+ export async function maybeFixGlassesClockFromVersionInfo(systemTimeMs: number | undefined): Promise<boolean> {
105
+ if (typeof systemTimeMs !== "number" || systemTimeMs <= 0) {
106
+ return false
107
+ }
108
+
109
+ const fixed = await fixGlassesClockIfSkewed(systemTimeMs, 0)
110
+ if (!fixed) {
111
+ return false
112
+ }
113
+
114
+ return true
115
+ }
@@ -0,0 +1,43 @@
1
+ import semver from "semver"
2
+
3
+ /**
4
+ * Pure helper extracted from `AppRegistry.checkManifestVersions` so it
5
+ * can be unit-tested without dragging in the `expo-file-system`
6
+ * transitively-React-Native dependency tree.
7
+ *
8
+ * Returns `{ok: true}` when the manifest is compatible with the host,
9
+ * or `{ok: false, reason}` with a user-facing string. Manifests missing
10
+ * either field pass through (legacy single-bundle bundles).
11
+ *
12
+ * `sdkVersion` is the SDK ABI the bundle targets; `minHostVersion` is
13
+ * the host floor the miniapp requires. Both must satisfy semver-coerce.
14
+ * Strings that don't coerce are treated as "unspecified" — the
15
+ * CLI's validateManifest catches malformed inputs at install time so
16
+ * this helper stays permissive at the policy layer.
17
+ */
18
+ export function checkManifestVersions(
19
+ manifest: {sdkVersion?: string; minHostVersion?: string} | null,
20
+ options: {hostVersion: string; supportedSdkRange: string},
21
+ ): {ok: true} | {ok: false; reason: string} {
22
+ if (!manifest) return {ok: true}
23
+ if (manifest.minHostVersion) {
24
+ const cleanHost = semver.valid(semver.coerce(options.hostVersion) ?? options.hostVersion)
25
+ const cleanMin = semver.valid(semver.coerce(manifest.minHostVersion) ?? manifest.minHostVersion)
26
+ if (cleanHost && cleanMin && semver.lt(cleanHost, cleanMin)) {
27
+ return {
28
+ ok: false,
29
+ reason: `Requires MentraOS ${manifest.minHostVersion}+; this host is ${options.hostVersion}.`,
30
+ }
31
+ }
32
+ }
33
+ if (manifest.sdkVersion) {
34
+ const cleanSdk = semver.valid(semver.coerce(manifest.sdkVersion) ?? manifest.sdkVersion)
35
+ if (cleanSdk && !semver.satisfies(cleanSdk, options.supportedSdkRange)) {
36
+ return {
37
+ ok: false,
38
+ reason: `Built for SDK ${manifest.sdkVersion}; host supports ${options.supportedSdkRange}.`,
39
+ }
40
+ }
41
+ }
42
+ return {ok: true}
43
+ }
@@ -0,0 +1,366 @@
1
+ /**
2
+ * window.mentra — WebView-side bridge to the per-miniapp background JSContext.
3
+ *
4
+ * Injected into every UI WebView via `injectedJavaScriptBeforeContentLoaded`
5
+ * (iOS) or `injectedJavaScriptObject` + a bundler-emitted inline `<script>`
6
+ * (Android, where the `BeforeContentLoaded` prop is documented unreliable
7
+ * per react-native-webview issues #1099 / #1609).
8
+ *
9
+ * The shim:
10
+ * - Buffers `mentra.send(channel, payload)` calls until `mentra.ready()`
11
+ * fires + the host acks the channel is open. WebView-side BUFFERS (the
12
+ * WebView is the short-lived side and shouldn't drop user input).
13
+ * - Installs `window.__mentra.recv(envelope)` for the host to push
14
+ * background → WebView messages via `webview.injectJavaScript(...)`.
15
+ * - Sends `__heartbeat__` every 5s; host considers the WebView gone
16
+ * after 15s of silence.
17
+ * - Maintains monotonic seq numbers; the host's per-WebView dedup window
18
+ * drops replays during reconnect.
19
+ *
20
+ * This file exports a `buildMentraUiShim()` function returning the JS
21
+ * source as a string. The host's MentraUIRouter wraps it inside the
22
+ * existing WebView setup so a single bundler-time string emission covers
23
+ * both platforms.
24
+ *
25
+ * IMPORTANT: the shim runs in the WebView's bare ECMAScript scope before
26
+ * the miniapp's bundle. It must not import anything; the source is one
27
+ * IIFE. The only injected dependencies are
28
+ * `window.ReactNativeWebView.postMessage` (provided by react-native-webview)
29
+ * and (on Android) `window.ReactNativeWebView.injectedObjectJson()`
30
+ * (provided when the host sets `injectedJavaScriptObject`).
31
+ */
32
+
33
+ export interface MentraUiShimOptions {
34
+ packageName: string
35
+ /** @deprecated No longer used — heartbeat removed since WebViews are foreground-only. */
36
+ heartbeatIntervalMs?: number
37
+ }
38
+
39
+ export function buildMentraUiShim(options: MentraUiShimOptions): string {
40
+ const packageNameJson = JSON.stringify(options.packageName)
41
+ // The IIFE assembles a typed `mentra` global plus an internal
42
+ // `__mentra` for host inbound calls. Quoted strings are JSON-safe so
43
+ // direct injection inside another JS literal also works.
44
+ return `
45
+ (function () {
46
+ if (typeof window === 'undefined') return;
47
+ if (window.mentra && window.__mentra) return;
48
+ var packageName = ${packageNameJson};
49
+ // Resolve window.ReactNativeWebView.postMessage LAZILY, not once at shim-eval.
50
+ // On Android the shim is injected as a WebViewCompat document-start script
51
+ // (so it beats the page bundle and the ready handshake can't be raced — see
52
+ // the react-native-webview patch). But the order in which that document-start
53
+ // script runs vs. the WebMessageListener that installs
54
+ // window.ReactNativeWebView is not contractually fixed on Android the way it
55
+ // is on iOS (postMessageScript is registered before atStartScript there). If
56
+ // we captured rnPost once and the bridge object wasn't installed yet, every
57
+ // postMessage — including {type:'ready'} — would be silently dropped and the
58
+ // splash would hang forever. Resolving per-call means we always pick up the
59
+ // bridge once it exists, which it reliably does by the time the bundle mounts
60
+ // and calls mentra.ready().
61
+ function getRnPost() {
62
+ try {
63
+ return window.ReactNativeWebView && typeof window.ReactNativeWebView.postMessage === 'function'
64
+ ? window.ReactNativeWebView.postMessage.bind(window.ReactNativeWebView)
65
+ : null;
66
+ } catch (e) { return null; }
67
+ }
68
+
69
+ // Outbound seq number — purely a log-correlation aid (the host's
70
+ // router doesn't dedup anymore since reconnect can't happen: one
71
+ // WebView, foreground-only, destroyed on close → fresh shim on
72
+ // next open).
73
+ var outboundSeq = 1;
74
+ var ready = false;
75
+ var channelHandlers = Object.create(null);
76
+ var openHandlers = [];
77
+ var closeHandlers = [];
78
+ // Queued mentra.send calls before mentra.ready() acks. FIFO drained
79
+ // on ack. Buffered so user input (button taps, etc.) isn't dropped
80
+ // when the WebView mounts faster than the host expects.
81
+ var outboundQueue = [];
82
+ // Inbound payloads that arrived before any mentra.on subscriber was
83
+ // registered for the channel. The background side fires
84
+ // session.ui.onOpen handlers as soon as the WebView posts {type:'ready'},
85
+ // and on a fast bridge the resulting ui.send round-trips back before
86
+ // React useEffects have had a chance to attach listeners. Without
87
+ // buffering, the very first snapshot (the one a controller pushes from
88
+ // its ui.onOpen handler to hydrate the fresh UI) is silently dropped.
89
+ //
90
+ // Drain policy: the queue for a channel is flushed into the FIRST
91
+ // mentra.on(channel, ...) subscriber, then discarded. Subsequent
92
+ // sends with no listener fall back to the old drop-on-floor behaviour
93
+ // — we don't want a re-subscribe to replay stale state.
94
+ //
95
+ // Cap: 32 entries per channel, oldest dropped on overflow. Bounds the
96
+ // memory cost when a controller pushes to a channel that no UI page
97
+ // ever subscribes to.
98
+ var pendingByChannel = Object.create(null);
99
+ var PENDING_CAP_PER_CHANNEL = 32;
100
+
101
+ function postEnvelope(envelope) {
102
+ var rnPost = getRnPost();
103
+ if (!rnPost) return;
104
+ try { rnPost(JSON.stringify(envelope)); } catch (_) {}
105
+ }
106
+
107
+ function send(channel, payload) {
108
+ var seq = outboundSeq++;
109
+ var envelope = { type: 'msg', seq: seq, channel: String(channel), payload: payload };
110
+ if (!ready) {
111
+ outboundQueue.push(envelope);
112
+ return;
113
+ }
114
+ postEnvelope(envelope);
115
+ }
116
+
117
+ function flushQueue() {
118
+ while (outboundQueue.length > 0) {
119
+ postEnvelope(outboundQueue.shift());
120
+ }
121
+ }
122
+
123
+ // NOTE: console.* tap lives in miniappGlobals.ts (injected alongside
124
+ // this shim for every UI WebView, two-layer or single-bundle). That
125
+ // shim posts {payload:{type:"dev_log", ...}} envelopes which
126
+ // LocalMiniappRuntime forwards to the dev sidecar tagged source:"ui".
127
+ // We don't re-wrap here to avoid double-delivery.
128
+
129
+ function on(channel, cb) {
130
+ if (typeof cb !== 'function') return function () {};
131
+ var list = channelHandlers[channel];
132
+ var firstSubscriber = !list || list.length === 0;
133
+ if (!list) { list = []; channelHandlers[channel] = list; }
134
+ list.push(cb);
135
+ // Drain any payloads buffered before this channel had a listener.
136
+ // Only fired on the first subscriber for the channel — a later
137
+ // re-subscribe (after an unsubscribe) does NOT replay history.
138
+ if (firstSubscriber) {
139
+ var pending = pendingByChannel[channel];
140
+ if (pending) {
141
+ delete pendingByChannel[channel];
142
+ for (var i = 0; i < pending.length; i++) {
143
+ try { cb(pending[i]); } catch (e) {}
144
+ }
145
+ }
146
+ }
147
+ return function () {
148
+ var idx = list.indexOf(cb);
149
+ if (idx >= 0) list.splice(idx, 1);
150
+ };
151
+ }
152
+
153
+ // ── RPC ─────────────────────────────────────────────────────────────
154
+ // Outbound RPC: every mentra.request() generates a request id, sends a
155
+ // 'msg' envelope tagged with requestId, and stashes a one-shot resolver
156
+ // keyed on the id. The background-side reply is a recv('msg') with the
157
+ // same channel + requestId; we route it directly to the resolver.
158
+ //
159
+ // Cancellation: caller's AbortSignal triggers a 'cancel' envelope to
160
+ // background and rejects the local promise with a DOM-standard
161
+ // AbortError. The background side's UI_CANCEL handler aborts the
162
+ // handler's ctx.signal and drops the reply.
163
+ var rpcCounter = 0;
164
+ var rpcInflight = Object.create(null);
165
+
166
+ function makeRequestId() {
167
+ rpcCounter += 1;
168
+ return 'r' + rpcCounter + '-' + Date.now().toString(36) + '-' + Math.random().toString(36).slice(2, 8);
169
+ }
170
+
171
+ function MentraRpcError(message, code, stage, transport) {
172
+ var e = new Error(message);
173
+ e.name = 'MentraRpcError';
174
+ if (code) {
175
+ try { e.cause = {code: code}; } catch (_) { /* old runtimes */ }
176
+ e.code = code;
177
+ }
178
+ // Diagnostic fields ride as own props so a miniapp can show exactly which
179
+ // pipeline stage and transport failed, not just a message string.
180
+ if (stage) e.stage = stage;
181
+ if (transport) e.transport = transport;
182
+ return e;
183
+ }
184
+
185
+ function MentraRpcTimeoutError(message) {
186
+ var e = new Error(message || 'RPC timed out');
187
+ e.name = 'MentraRpcTimeoutError';
188
+ return e;
189
+ }
190
+
191
+ function MentraAbortError() {
192
+ var e;
193
+ try { e = new DOMException('aborted', 'AbortError'); } catch (_) {
194
+ e = new Error('aborted');
195
+ e.name = 'AbortError';
196
+ }
197
+ return e;
198
+ }
199
+
200
+ function request(channel, payload, options) {
201
+ var opts = options || {};
202
+ var signal = opts.signal;
203
+ var timeoutMs = typeof opts.timeout === 'number' ? opts.timeout : null;
204
+ var id = makeRequestId();
205
+
206
+ return new Promise(function (resolve, reject) {
207
+ var done = false;
208
+ var timeoutHandle = null;
209
+ var abortListener = null;
210
+
211
+ function cleanup() {
212
+ if (done) return;
213
+ done = true;
214
+ delete rpcInflight[id];
215
+ if (timeoutHandle != null) { clearTimeout(timeoutHandle); timeoutHandle = null; }
216
+ if (signal && abortListener) {
217
+ try { signal.removeEventListener('abort', abortListener); } catch (_) {}
218
+ }
219
+ }
220
+
221
+ function settle(envelope) {
222
+ if (done) return;
223
+ cleanup();
224
+ if (envelope && envelope.ok === true) {
225
+ resolve(envelope.result);
226
+ } else if (envelope && envelope.ok === false) {
227
+ reject(MentraRpcError(envelope.error && envelope.error.message || 'RPC failed', envelope.error && envelope.error.code, envelope.error && envelope.error.stage, envelope.error && envelope.error.transport));
228
+ } else {
229
+ reject(MentraRpcError('malformed RPC reply'));
230
+ }
231
+ }
232
+
233
+ rpcInflight[id] = settle;
234
+
235
+ if (signal) {
236
+ if (signal.aborted) {
237
+ cleanup();
238
+ reject(MentraAbortError());
239
+ return;
240
+ }
241
+ abortListener = function () {
242
+ if (done) return;
243
+ cleanup();
244
+ postEnvelope({type: 'cancel', requestId: id});
245
+ reject(MentraAbortError());
246
+ };
247
+ try { signal.addEventListener('abort', abortListener); } catch (_) {}
248
+ }
249
+
250
+ if (timeoutMs != null) {
251
+ timeoutHandle = setTimeout(function () {
252
+ if (done) return;
253
+ cleanup();
254
+ postEnvelope({type: 'cancel', requestId: id});
255
+ reject(MentraRpcTimeoutError());
256
+ }, timeoutMs);
257
+ }
258
+
259
+ var envelope = {type: 'msg', seq: outboundSeq++, channel: String(channel), payload: payload, requestId: id};
260
+ if (!ready) {
261
+ outboundQueue.push(envelope);
262
+ return;
263
+ }
264
+ postEnvelope(envelope);
265
+ });
266
+ }
267
+
268
+ function onOpen(cb) {
269
+ if (typeof cb !== 'function') return function () {};
270
+ openHandlers.push(cb);
271
+ if (ready) {
272
+ try { cb(); } catch (e) {}
273
+ }
274
+ return function () {
275
+ var idx = openHandlers.indexOf(cb);
276
+ if (idx >= 0) openHandlers.splice(idx, 1);
277
+ };
278
+ }
279
+
280
+ function onClose(cb) {
281
+ if (typeof cb !== 'function') return function () {};
282
+ closeHandlers.push(cb);
283
+ return function () {
284
+ var idx = closeHandlers.indexOf(cb);
285
+ if (idx >= 0) closeHandlers.splice(idx, 1);
286
+ };
287
+ }
288
+
289
+ function readyFn() {
290
+ if (ready) return;
291
+ ready = true;
292
+ postEnvelope({ type: 'ready' });
293
+ flushQueue();
294
+ for (var i = 0; i < openHandlers.length; i++) {
295
+ try { openHandlers[i](); } catch (e) {}
296
+ }
297
+ }
298
+
299
+ function fireChannel(channel, payload) {
300
+ var list = channelHandlers[channel];
301
+ if (!list || list.length === 0) {
302
+ // No subscriber yet — stash for the first mentra.on(channel, ...).
303
+ // Bounded FIFO: drop the oldest when capped so a stuck channel
304
+ // can't grow unbounded.
305
+ var q = pendingByChannel[channel];
306
+ if (!q) { q = []; pendingByChannel[channel] = q; }
307
+ q.push(payload);
308
+ if (q.length > PENDING_CAP_PER_CHANNEL) q.shift();
309
+ return;
310
+ }
311
+ for (var i = 0; i < list.length; i++) {
312
+ try { list[i](payload); } catch (e) {}
313
+ }
314
+ }
315
+
316
+ function recv(envelope) {
317
+ if (!envelope || typeof envelope !== 'object') return;
318
+ var type = envelope.type;
319
+ if (type === 'msg' && typeof envelope.channel === 'string') {
320
+ // RPC frames carry a requestId; broadcast frames don't. Treat them
321
+ // as disjoint — never fall through from RPC to broadcast. An orphan
322
+ // RPC reply (caller already aborted/timed out) is silently dropped.
323
+ if (typeof envelope.requestId === 'string') {
324
+ var settle = rpcInflight[envelope.requestId];
325
+ if (settle) settle(envelope.payload);
326
+ return;
327
+ }
328
+ fireChannel(envelope.channel, envelope.payload);
329
+ return;
330
+ }
331
+ if (type === 'open') {
332
+ for (var j = 0; j < openHandlers.length; j++) {
333
+ try { openHandlers[j](); } catch (e) {}
334
+ }
335
+ return;
336
+ }
337
+ if (type === 'close') {
338
+ for (var k = 0; k < closeHandlers.length; k++) {
339
+ try { closeHandlers[k](); } catch (e) {}
340
+ }
341
+ return;
342
+ }
343
+ if (type === 'cancel' && typeof envelope.requestId === 'string') {
344
+ // Background-side cancel (reserved; currently unused). If we had a
345
+ // future bidirectional RPC this would abort an in-flight UI handler.
346
+ return;
347
+ }
348
+ if (type === 'ack') {
349
+ return;
350
+ }
351
+ }
352
+
353
+ window.mentra = {
354
+ send: send,
355
+ on: on,
356
+ request: request,
357
+ onOpen: onOpen,
358
+ onClose: onClose,
359
+ ready: readyFn,
360
+ /** @internal — packageName for diagnostic logs only. */
361
+ _packageName: packageName,
362
+ };
363
+ window.__mentra = { recv: recv };
364
+ })();
365
+ `.trim()
366
+ }
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Hybrid road-name resolver for Routes-API steps. Used to fill
3
+ * `ComputedRouteStep.road` so miniapps don't have to parse instruction
4
+ * prose or geocode themselves — every miniapp talking to the SDK sees
5
+ * the same accurate names for preview AND live trip.
6
+ *
7
+ * Strategy per step:
8
+ * 1. Parse "onto X" from the Routes-API instruction when present
9
+ * (the API literally tells us the road; no second-guessing).
10
+ * 2. Fall back to reverse-geocoding the step MIDPOINT when the
11
+ * instruction has no road name ("Slight right", "Turn left toward
12
+ * …", "Destination will be on the right", bare depart steps).
13
+ *
14
+ * Endpoints get rejected as fallback probe points: they sit on
15
+ * junctions and snap to whichever cross-street has higher weight;
16
+ * the midpoint sits on the step's own road.
17
+ *
18
+ * This is a direct port of the resolver that used to live in the Nav
19
+ * miniapp's NavigationPage.tsx. Lives on the host so all miniapps
20
+ * benefit and so preview + live can share a single implementation.
21
+ */
22
+
23
+ type StepLike = {
24
+ lat: number
25
+ lng: number
26
+ endLat: number
27
+ endLng: number
28
+ instruction?: string
29
+ }
30
+
31
+ type ReverseGeocode = (coord: {lat: number; lng: number}) => Promise<{
32
+ ok: boolean
33
+ road?: string | null
34
+ error?: string
35
+ }>
36
+
37
+ const DIRECTION_WORDS = new Set([
38
+ "right",
39
+ "left",
40
+ "the right",
41
+ "the left",
42
+ "north",
43
+ "south",
44
+ "east",
45
+ "west",
46
+ ])
47
+
48
+ /**
49
+ * Pull a short road name out of a Routes-API instruction. Instructions
50
+ * look like:
51
+ * "Turn left onto Octavia Blvd"
52
+ * "Head northeast on Market St toward Octavia St"
53
+ * "Turn right onto Haight St\nDestination will be on the right"
54
+ *
55
+ * Pitfalls this guards against (seen in real data):
56
+ * - Multi-line: API appends "Destination will be on the right" etc.
57
+ * Only the first line is parsed, otherwise the greedy "on" match
58
+ * grabs "on the right" → "the right".
59
+ * - Trailing clauses ("… toward Octavia St", "… and continue"):
60
+ * cut at the first such keyword.
61
+ * - Unit suffixes: "Hayes St #116" → "Hayes St".
62
+ * - Bare direction words slipping through: rejected so the resolver
63
+ * falls back to geocoding instead of labeling a step "left".
64
+ */
65
+ export function roadNameFromInstruction(instruction?: string): string | null {
66
+ if (!instruction) return null
67
+ const firstLine = instruction.split("\n")[0] ?? ""
68
+ // Prefer "onto" (always immediately precedes the road); fall back to
69
+ // "on" for depart steps ("Head north on Market St").
70
+ const m = firstLine.match(/\bonto\s+(.+)$/i) ?? firstLine.match(/\bon\s+(.+)$/i)
71
+ let raw = (m ? m[1] : "").trim()
72
+ if (!raw) return null
73
+ // Cut trailing direction/continuation clauses the API appends.
74
+ raw = raw.split(/\s+(?:toward|towards|to|and|then|for)\b/i)[0]?.trim() ?? ""
75
+ // Strip a unit/suite suffix.
76
+ raw = raw.replace(/\s+#.*$/, "").trim()
77
+ if (!raw) return null
78
+ if (DIRECTION_WORDS.has(raw.toLowerCase())) return null
79
+ return raw
80
+ }
81
+
82
+ /**
83
+ * Resolve `road` for every step in a Routes-API step list. The
84
+ * `reverseGeocode` callback is injected so this module stays free of
85
+ * the host's network plumbing (and is unit-testable).
86
+ *
87
+ * Steps are resolved in parallel: parsed names land synchronously,
88
+ * geocoded fallbacks fire concurrently. Order is preserved.
89
+ */
90
+ export async function resolveStepRoads<S extends StepLike>(
91
+ steps: S[],
92
+ reverseGeocode: ReverseGeocode,
93
+ ): Promise<Array<S & {road: string | null}>> {
94
+ const probes = steps.map<Promise<string | null>>((s) => {
95
+ const parsed = roadNameFromInstruction(s.instruction)
96
+ if (parsed) return Promise.resolve(parsed)
97
+ if (
98
+ !Number.isFinite(s.lat) ||
99
+ !Number.isFinite(s.lng) ||
100
+ !Number.isFinite(s.endLat) ||
101
+ !Number.isFinite(s.endLng)
102
+ ) {
103
+ return Promise.resolve(null)
104
+ }
105
+ const mid = {lat: (s.lat + s.endLat) / 2, lng: (s.lng + s.endLng) / 2}
106
+ return reverseGeocode(mid)
107
+ .then((r) => (r.ok ? r.road ?? null : null))
108
+ .catch(() => null)
109
+ })
110
+ const roads = await Promise.all(probes)
111
+ return steps.map((s, i) => ({...s, road: roads[i]}))
112
+ }