@mentra/engine 0.1.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (842) hide show
  1. package/README.md +79 -0
  2. package/build/devtools.d.ts +11 -0
  3. package/build/devtools.d.ts.map +1 -0
  4. package/build/devtools.js +13 -0
  5. package/build/devtools.js.map +1 -0
  6. package/build/engine.d.ts +261 -0
  7. package/build/engine.d.ts.map +1 -0
  8. package/build/engine.js +170 -0
  9. package/build/engine.js.map +1 -0
  10. package/build/facades/dev.d.ts +58 -0
  11. package/build/facades/dev.d.ts.map +1 -0
  12. package/build/facades/dev.js +189 -0
  13. package/build/facades/dev.js.map +1 -0
  14. package/build/facades/display.d.ts +21 -0
  15. package/build/facades/display.d.ts.map +1 -0
  16. package/build/facades/display.js +17 -0
  17. package/build/facades/display.js.map +1 -0
  18. package/build/facades/displayMirror.d.ts +15 -0
  19. package/build/facades/displayMirror.d.ts.map +1 -0
  20. package/build/facades/displayMirror.js +29 -0
  21. package/build/facades/displayMirror.js.map +1 -0
  22. package/build/facades/gallery.d.ts +62 -0
  23. package/build/facades/gallery.d.ts.map +1 -0
  24. package/build/facades/gallery.js +61 -0
  25. package/build/facades/gallery.js.map +1 -0
  26. package/build/facades/glasses.d.ts +141 -0
  27. package/build/facades/glasses.d.ts.map +1 -0
  28. package/build/facades/glasses.js +199 -0
  29. package/build/facades/glasses.js.map +1 -0
  30. package/build/facades/glassesSettings.d.ts +13 -0
  31. package/build/facades/glassesSettings.d.ts.map +1 -0
  32. package/build/facades/glassesSettings.js +54 -0
  33. package/build/facades/glassesSettings.js.map +1 -0
  34. package/build/facades/glassesWifi.d.ts +25 -0
  35. package/build/facades/glassesWifi.d.ts.map +1 -0
  36. package/build/facades/glassesWifi.js +57 -0
  37. package/build/facades/glassesWifi.js.map +1 -0
  38. package/build/facades/miniapps.d.ts +43 -0
  39. package/build/facades/miniapps.d.ts.map +1 -0
  40. package/build/facades/miniapps.js +49 -0
  41. package/build/facades/miniapps.js.map +1 -0
  42. package/build/facades/notifications.d.ts +13 -0
  43. package/build/facades/notifications.d.ts.map +1 -0
  44. package/build/facades/notifications.js +12 -0
  45. package/build/facades/notifications.js.map +1 -0
  46. package/build/facades/ota.d.ts +103 -0
  47. package/build/facades/ota.d.ts.map +1 -0
  48. package/build/facades/ota.js +156 -0
  49. package/build/facades/ota.js.map +1 -0
  50. package/build/facades/pairing.d.ts +114 -0
  51. package/build/facades/pairing.d.ts.map +1 -0
  52. package/build/facades/pairing.js +275 -0
  53. package/build/facades/pairing.js.map +1 -0
  54. package/build/facades/permissions.d.ts +33 -0
  55. package/build/facades/permissions.d.ts.map +1 -0
  56. package/build/facades/permissions.js +155 -0
  57. package/build/facades/permissions.js.map +1 -0
  58. package/build/facades/phoneNotifications.d.ts +21 -0
  59. package/build/facades/phoneNotifications.d.ts.map +1 -0
  60. package/build/facades/phoneNotifications.js +51 -0
  61. package/build/facades/phoneNotifications.js.map +1 -0
  62. package/build/facades/reports.d.ts +36 -0
  63. package/build/facades/reports.d.ts.map +1 -0
  64. package/build/facades/reports.js +134 -0
  65. package/build/facades/reports.js.map +1 -0
  66. package/build/facades/session.d.ts +21 -0
  67. package/build/facades/session.d.ts.map +1 -0
  68. package/build/facades/session.js +52 -0
  69. package/build/facades/session.js.map +1 -0
  70. package/build/facades/settings.d.ts +37 -0
  71. package/build/facades/settings.d.ts.map +1 -0
  72. package/build/facades/settings.js +55 -0
  73. package/build/facades/settings.js.map +1 -0
  74. package/build/facades/speech.d.ts +30 -0
  75. package/build/facades/speech.d.ts.map +1 -0
  76. package/build/facades/speech.js +37 -0
  77. package/build/facades/speech.js.map +1 -0
  78. package/build/index.d.ts +43 -0
  79. package/build/index.d.ts.map +1 -0
  80. package/build/index.js +45 -0
  81. package/build/index.js.map +1 -0
  82. package/build/internal.d.ts +67 -0
  83. package/build/internal.d.ts.map +1 -0
  84. package/build/internal.js +90 -0
  85. package/build/internal.js.map +1 -0
  86. package/build/runtime/bootstrap.d.ts +83 -0
  87. package/build/runtime/bootstrap.d.ts.map +1 -0
  88. package/build/runtime/bootstrap.js +56 -0
  89. package/build/runtime/bootstrap.js.map +1 -0
  90. package/build/runtime/config.d.ts +146 -0
  91. package/build/runtime/config.d.ts.map +1 -0
  92. package/build/runtime/config.js +18 -0
  93. package/build/runtime/config.js.map +1 -0
  94. package/build/runtime/streamConfig.d.ts +4 -0
  95. package/build/runtime/streamConfig.d.ts.map +1 -0
  96. package/build/runtime/streamConfig.js +38 -0
  97. package/build/runtime/streamConfig.js.map +1 -0
  98. package/build/services/AppRegistry.d.ts +269 -0
  99. package/build/services/AppRegistry.d.ts.map +1 -0
  100. package/build/services/AppRegistry.js +1079 -0
  101. package/build/services/AppRegistry.js.map +1 -0
  102. package/build/services/AudioCloudUplink.d.ts +9 -0
  103. package/build/services/AudioCloudUplink.d.ts.map +1 -0
  104. package/build/services/AudioCloudUplink.js +48 -0
  105. package/build/services/AudioCloudUplink.js.map +1 -0
  106. package/build/services/AudioPlaybackService.d.ts +175 -0
  107. package/build/services/AudioPlaybackService.d.ts.map +1 -0
  108. package/build/services/AudioPlaybackService.js +705 -0
  109. package/build/services/AudioPlaybackService.js.map +1 -0
  110. package/build/services/AutomaticReportResult.d.ts +20 -0
  111. package/build/services/AutomaticReportResult.d.ts.map +1 -0
  112. package/build/services/AutomaticReportResult.js +29 -0
  113. package/build/services/AutomaticReportResult.js.map +1 -0
  114. package/build/services/BlobStore.d.ts +91 -0
  115. package/build/services/BlobStore.d.ts.map +1 -0
  116. package/build/services/BlobStore.js +668 -0
  117. package/build/services/BlobStore.js.map +1 -0
  118. package/build/services/CaptionsTesterReportService.d.ts +4 -0
  119. package/build/services/CaptionsTesterReportService.d.ts.map +1 -0
  120. package/build/services/CaptionsTesterReportService.js +80 -0
  121. package/build/services/CaptionsTesterReportService.js.map +1 -0
  122. package/build/services/CloudAudioSubscriptionSync.d.ts +24 -0
  123. package/build/services/CloudAudioSubscriptionSync.d.ts.map +1 -0
  124. package/build/services/CloudAudioSubscriptionSync.js +39 -0
  125. package/build/services/CloudAudioSubscriptionSync.js.map +1 -0
  126. package/build/services/CloudClientService.d.ts +143 -0
  127. package/build/services/CloudClientService.d.ts.map +1 -0
  128. package/build/services/CloudClientService.js +644 -0
  129. package/build/services/CloudClientService.js.map +1 -0
  130. package/build/services/CloudTranscriptE2EMetrics.d.ts +4 -0
  131. package/build/services/CloudTranscriptE2EMetrics.d.ts.map +1 -0
  132. package/build/services/CloudTranscriptE2EMetrics.js +24 -0
  133. package/build/services/CloudTranscriptE2EMetrics.js.map +1 -0
  134. package/build/services/ConnectionCoordinator.d.ts +51 -0
  135. package/build/services/ConnectionCoordinator.d.ts.map +1 -0
  136. package/build/services/ConnectionCoordinator.js +34 -0
  137. package/build/services/ConnectionCoordinator.js.map +1 -0
  138. package/build/services/DevServerBridge.d.ts +63 -0
  139. package/build/services/DevServerBridge.d.ts.map +1 -0
  140. package/build/services/DevServerBridge.js +294 -0
  141. package/build/services/DevServerBridge.js.map +1 -0
  142. package/build/services/DeviceEventRouter.d.ts +3 -0
  143. package/build/services/DeviceEventRouter.d.ts.map +1 -0
  144. package/build/services/DeviceEventRouter.js +190 -0
  145. package/build/services/DeviceEventRouter.js.map +1 -0
  146. package/build/services/DeviceStoreHydration.d.ts +38 -0
  147. package/build/services/DeviceStoreHydration.d.ts.map +1 -0
  148. package/build/services/DeviceStoreHydration.js +124 -0
  149. package/build/services/DeviceStoreHydration.js.map +1 -0
  150. package/build/services/DisplayProcessor.d.ts +223 -0
  151. package/build/services/DisplayProcessor.d.ts.map +1 -0
  152. package/build/services/DisplayProcessor.js +552 -0
  153. package/build/services/DisplayProcessor.js.map +1 -0
  154. package/build/services/GlassesReadiness.d.ts +41 -0
  155. package/build/services/GlassesReadiness.d.ts.map +1 -0
  156. package/build/services/GlassesReadiness.js +82 -0
  157. package/build/services/GlassesReadiness.js.map +1 -0
  158. package/build/services/GlassesSettingsSync.d.ts +33 -0
  159. package/build/services/GlassesSettingsSync.d.ts.map +1 -0
  160. package/build/services/GlassesSettingsSync.js +121 -0
  161. package/build/services/GlassesSettingsSync.js.map +1 -0
  162. package/build/services/GlassesStatusProjection.d.ts +3 -0
  163. package/build/services/GlassesStatusProjection.d.ts.map +1 -0
  164. package/build/services/GlassesStatusProjection.js +65 -0
  165. package/build/services/GlassesStatusProjection.js.map +1 -0
  166. package/build/services/HeadingService.d.ts +27 -0
  167. package/build/services/HeadingService.d.ts.map +1 -0
  168. package/build/services/HeadingService.js +96 -0
  169. package/build/services/HeadingService.js.map +1 -0
  170. package/build/services/LocalDisplayManager.d.ts +139 -0
  171. package/build/services/LocalDisplayManager.d.ts.map +1 -0
  172. package/build/services/LocalDisplayManager.js +579 -0
  173. package/build/services/LocalDisplayManager.js.map +1 -0
  174. package/build/services/LocalMiniappRuntime.d.ts +439 -0
  175. package/build/services/LocalMiniappRuntime.d.ts.map +1 -0
  176. package/build/services/LocalMiniappRuntime.js +3695 -0
  177. package/build/services/LocalMiniappRuntime.js.map +1 -0
  178. package/build/services/LocalSttFallbackCoordinator.d.ts +57 -0
  179. package/build/services/LocalSttFallbackCoordinator.d.ts.map +1 -0
  180. package/build/services/LocalSttFallbackCoordinator.js +137 -0
  181. package/build/services/LocalSttFallbackCoordinator.js.map +1 -0
  182. package/build/services/MentraJSCrashController.d.ts +97 -0
  183. package/build/services/MentraJSCrashController.d.ts.map +1 -0
  184. package/build/services/MentraJSCrashController.js +138 -0
  185. package/build/services/MentraJSCrashController.js.map +1 -0
  186. package/build/services/MentraJSCrashloopReportService.d.ts +9 -0
  187. package/build/services/MentraJSCrashloopReportService.d.ts.map +1 -0
  188. package/build/services/MentraJSCrashloopReportService.js +54 -0
  189. package/build/services/MentraJSCrashloopReportService.js.map +1 -0
  190. package/build/services/MentraJSLogPipeline.d.ts +87 -0
  191. package/build/services/MentraJSLogPipeline.d.ts.map +1 -0
  192. package/build/services/MentraJSLogPipeline.js +137 -0
  193. package/build/services/MentraJSLogPipeline.js.map +1 -0
  194. package/build/services/MentraJSRouter.d.ts +203 -0
  195. package/build/services/MentraJSRouter.d.ts.map +1 -0
  196. package/build/services/MentraJSRouter.js +480 -0
  197. package/build/services/MentraJSRouter.js.map +1 -0
  198. package/build/services/MentraUIRouter.d.ts +137 -0
  199. package/build/services/MentraUIRouter.d.ts.map +1 -0
  200. package/build/services/MentraUIRouter.js +210 -0
  201. package/build/services/MentraUIRouter.js.map +1 -0
  202. package/build/services/MicStateCoordinator.d.ts +37 -0
  203. package/build/services/MicStateCoordinator.d.ts.map +1 -0
  204. package/build/services/MicStateCoordinator.js +81 -0
  205. package/build/services/MicStateCoordinator.js.map +1 -0
  206. package/build/services/MiniappEngine.d.ts +31 -0
  207. package/build/services/MiniappEngine.d.ts.map +1 -0
  208. package/build/services/MiniappEngine.js +119 -0
  209. package/build/services/MiniappEngine.js.map +1 -0
  210. package/build/services/MiniappLauncher.d.ts +129 -0
  211. package/build/services/MiniappLauncher.d.ts.map +1 -0
  212. package/build/services/MiniappLauncher.js +291 -0
  213. package/build/services/MiniappLauncher.js.map +1 -0
  214. package/build/services/MiniappRunningRegistry.d.ts +24 -0
  215. package/build/services/MiniappRunningRegistry.d.ts.map +1 -0
  216. package/build/services/MiniappRunningRegistry.js +52 -0
  217. package/build/services/MiniappRunningRegistry.js.map +1 -0
  218. package/build/services/NativeHttpResponse.d.ts +3 -0
  219. package/build/services/NativeHttpResponse.d.ts.map +1 -0
  220. package/build/services/NativeHttpResponse.js +6 -0
  221. package/build/services/NativeHttpResponse.js.map +1 -0
  222. package/build/services/NavigationHandlers.d.ts +90 -0
  223. package/build/services/NavigationHandlers.d.ts.map +1 -0
  224. package/build/services/NavigationHandlers.js +379 -0
  225. package/build/services/NavigationHandlers.js.map +1 -0
  226. package/build/services/NavigationService.d.ts +254 -0
  227. package/build/services/NavigationService.d.ts.map +1 -0
  228. package/build/services/NavigationService.js +553 -0
  229. package/build/services/NavigationService.js.map +1 -0
  230. package/build/services/NotificationsEmitter.d.ts +28 -0
  231. package/build/services/NotificationsEmitter.d.ts.map +1 -0
  232. package/build/services/NotificationsEmitter.js +22 -0
  233. package/build/services/NotificationsEmitter.js.map +1 -0
  234. package/build/services/OfflineSpeechModelService.d.ts +33 -0
  235. package/build/services/OfflineSpeechModelService.d.ts.map +1 -0
  236. package/build/services/OfflineSpeechModelService.js +136 -0
  237. package/build/services/OfflineSpeechModelService.js.map +1 -0
  238. package/build/services/OtaInstallCoordinator.d.ts +195 -0
  239. package/build/services/OtaInstallCoordinator.d.ts.map +1 -0
  240. package/build/services/OtaInstallCoordinator.js +1047 -0
  241. package/build/services/OtaInstallCoordinator.js.map +1 -0
  242. package/build/services/OtaService.d.ts +3 -0
  243. package/build/services/OtaService.d.ts.map +1 -0
  244. package/build/services/OtaService.js +65 -0
  245. package/build/services/OtaService.js.map +1 -0
  246. package/build/services/OtaUpdateCheckService.d.ts +65 -0
  247. package/build/services/OtaUpdateCheckService.d.ts.map +1 -0
  248. package/build/services/OtaUpdateCheckService.js +260 -0
  249. package/build/services/OtaUpdateCheckService.js.map +1 -0
  250. package/build/services/PairingIdentity.d.ts +80 -0
  251. package/build/services/PairingIdentity.d.ts.map +1 -0
  252. package/build/services/PairingIdentity.js +145 -0
  253. package/build/services/PairingIdentity.js.map +1 -0
  254. package/build/services/PhoneCalendarHelpers.d.ts +32 -0
  255. package/build/services/PhoneCalendarHelpers.d.ts.map +1 -0
  256. package/build/services/PhoneCalendarHelpers.js +157 -0
  257. package/build/services/PhoneCalendarHelpers.js.map +1 -0
  258. package/build/services/PhoneCalendarService.d.ts +5 -0
  259. package/build/services/PhoneCalendarService.d.ts.map +1 -0
  260. package/build/services/PhoneCalendarService.js +24 -0
  261. package/build/services/PhoneCalendarService.js.map +1 -0
  262. package/build/services/PhoneCameraFovCoordinator.d.ts +28 -0
  263. package/build/services/PhoneCameraFovCoordinator.d.ts.map +1 -0
  264. package/build/services/PhoneCameraFovCoordinator.js +180 -0
  265. package/build/services/PhoneCameraFovCoordinator.js.map +1 -0
  266. package/build/services/PhoneLocationService.d.ts +36 -0
  267. package/build/services/PhoneLocationService.d.ts.map +1 -0
  268. package/build/services/PhoneLocationService.js +115 -0
  269. package/build/services/PhoneLocationService.js.map +1 -0
  270. package/build/services/PhoneNotificationsSync.d.ts +3 -0
  271. package/build/services/PhoneNotificationsSync.d.ts.map +1 -0
  272. package/build/services/PhoneNotificationsSync.js +35 -0
  273. package/build/services/PhoneNotificationsSync.js.map +1 -0
  274. package/build/services/PhonePhotoCoordinator.d.ts +103 -0
  275. package/build/services/PhonePhotoCoordinator.d.ts.map +1 -0
  276. package/build/services/PhonePhotoCoordinator.js +326 -0
  277. package/build/services/PhonePhotoCoordinator.js.map +1 -0
  278. package/build/services/PhoneStreamCoordinator.d.ts +168 -0
  279. package/build/services/PhoneStreamCoordinator.d.ts.map +1 -0
  280. package/build/services/PhoneStreamCoordinator.js +632 -0
  281. package/build/services/PhoneStreamCoordinator.js.map +1 -0
  282. package/build/services/PhoneVideoCoordinator.d.ts +50 -0
  283. package/build/services/PhoneVideoCoordinator.d.ts.map +1 -0
  284. package/build/services/PhoneVideoCoordinator.js +147 -0
  285. package/build/services/PhoneVideoCoordinator.js.map +1 -0
  286. package/build/services/STTModelManager.d.ts +65 -0
  287. package/build/services/STTModelManager.d.ts.map +1 -0
  288. package/build/services/STTModelManager.js +292 -0
  289. package/build/services/STTModelManager.js.map +1 -0
  290. package/build/services/SceneRenderer.d.ts +90 -0
  291. package/build/services/SceneRenderer.d.ts.map +1 -0
  292. package/build/services/SceneRenderer.js +248 -0
  293. package/build/services/SceneRenderer.js.map +1 -0
  294. package/build/services/SentenceTtsPipeline.d.ts +31 -0
  295. package/build/services/SentenceTtsPipeline.d.ts.map +1 -0
  296. package/build/services/SentenceTtsPipeline.js +67 -0
  297. package/build/services/SentenceTtsPipeline.js.map +1 -0
  298. package/build/services/StreamLifecycleController.d.ts +67 -0
  299. package/build/services/StreamLifecycleController.d.ts.map +1 -0
  300. package/build/services/StreamLifecycleController.js +152 -0
  301. package/build/services/StreamLifecycleController.js.map +1 -0
  302. package/build/services/TTSModelManager.d.ts +90 -0
  303. package/build/services/TTSModelManager.d.ts.map +1 -0
  304. package/build/services/TTSModelManager.js +366 -0
  305. package/build/services/TTSModelManager.js.map +1 -0
  306. package/build/services/TranscriptionRouting.d.ts +12 -0
  307. package/build/services/TranscriptionRouting.d.ts.map +1 -0
  308. package/build/services/TranscriptionRouting.js +24 -0
  309. package/build/services/TranscriptionRouting.js.map +1 -0
  310. package/build/services/WebviewBridge.d.ts +22 -0
  311. package/build/services/WebviewBridge.d.ts.map +1 -0
  312. package/build/services/WebviewBridge.js +47 -0
  313. package/build/services/WebviewBridge.js.map +1 -0
  314. package/build/services/asg/GalleryMediaIntegrityReportService.d.ts +17 -0
  315. package/build/services/asg/GalleryMediaIntegrityReportService.d.ts.map +1 -0
  316. package/build/services/asg/GalleryMediaIntegrityReportService.js +43 -0
  317. package/build/services/asg/GalleryMediaIntegrityReportService.js.map +1 -0
  318. package/build/services/asg/asgCameraApi.d.ts +205 -0
  319. package/build/services/asg/asgCameraApi.d.ts.map +1 -0
  320. package/build/services/asg/asgCameraApi.js +1410 -0
  321. package/build/services/asg/asgCameraApi.js.map +1 -0
  322. package/build/services/asg/cameraRollExportCoordinator.d.ts +60 -0
  323. package/build/services/asg/cameraRollExportCoordinator.d.ts.map +1 -0
  324. package/build/services/asg/cameraRollExportCoordinator.js +618 -0
  325. package/build/services/asg/cameraRollExportCoordinator.js.map +1 -0
  326. package/build/services/asg/cameraRollExportLedger.d.ts +44 -0
  327. package/build/services/asg/cameraRollExportLedger.d.ts.map +1 -0
  328. package/build/services/asg/cameraRollExportLedger.js +78 -0
  329. package/build/services/asg/cameraRollExportLedger.js.map +1 -0
  330. package/build/services/asg/galleryMediaValidation.d.ts +29 -0
  331. package/build/services/asg/galleryMediaValidation.d.ts.map +1 -0
  332. package/build/services/asg/galleryMediaValidation.js +149 -0
  333. package/build/services/asg/galleryMediaValidation.js.map +1 -0
  334. package/build/services/asg/galleryNotices.d.ts +33 -0
  335. package/build/services/asg/galleryNotices.d.ts.map +1 -0
  336. package/build/services/asg/galleryNotices.js +29 -0
  337. package/build/services/asg/galleryNotices.js.map +1 -0
  338. package/build/services/asg/galleryPathMigration.d.ts +3 -0
  339. package/build/services/asg/galleryPathMigration.d.ts.map +1 -0
  340. package/build/services/asg/galleryPathMigration.js +26 -0
  341. package/build/services/asg/galleryPathMigration.js.map +1 -0
  342. package/build/services/asg/gallerySettingsService.d.ts +20 -0
  343. package/build/services/asg/gallerySettingsService.d.ts.map +1 -0
  344. package/build/services/asg/gallerySettingsService.js +53 -0
  345. package/build/services/asg/gallerySettingsService.js.map +1 -0
  346. package/build/services/asg/gallerySyncNotifications.d.ts +56 -0
  347. package/build/services/asg/gallerySyncNotifications.d.ts.map +1 -0
  348. package/build/services/asg/gallerySyncNotifications.js +198 -0
  349. package/build/services/asg/gallerySyncNotifications.js.map +1 -0
  350. package/build/services/asg/gallerySyncService.d.ts +137 -0
  351. package/build/services/asg/gallerySyncService.d.ts.map +1 -0
  352. package/build/services/asg/gallerySyncService.js +1933 -0
  353. package/build/services/asg/gallerySyncService.js.map +1 -0
  354. package/build/services/asg/galleryTransferLedger.d.ts +58 -0
  355. package/build/services/asg/galleryTransferLedger.d.ts.map +1 -0
  356. package/build/services/asg/galleryTransferLedger.js +225 -0
  357. package/build/services/asg/galleryTransferLedger.js.map +1 -0
  358. package/build/services/asg/localNetworkTransport.d.ts +15 -0
  359. package/build/services/asg/localNetworkTransport.d.ts.map +1 -0
  360. package/build/services/asg/localNetworkTransport.js +144 -0
  361. package/build/services/asg/localNetworkTransport.js.map +1 -0
  362. package/build/services/asg/localStorageService.d.ts +146 -0
  363. package/build/services/asg/localStorageService.d.ts.map +1 -0
  364. package/build/services/asg/localStorageService.js +572 -0
  365. package/build/services/asg/localStorageService.js.map +1 -0
  366. package/build/services/asg/mediaProcessingQueue.d.ts +70 -0
  367. package/build/services/asg/mediaProcessingQueue.d.ts.map +1 -0
  368. package/build/services/asg/mediaProcessingQueue.js +451 -0
  369. package/build/services/asg/mediaProcessingQueue.js.map +1 -0
  370. package/build/services/asgOtaVersionUrl.d.ts +2 -0
  371. package/build/services/asgOtaVersionUrl.d.ts.map +1 -0
  372. package/build/services/asgOtaVersionUrl.js +36 -0
  373. package/build/services/asgOtaVersionUrl.js.map +1 -0
  374. package/build/services/blobPaths.d.ts +31 -0
  375. package/build/services/blobPaths.d.ts.map +1 -0
  376. package/build/services/blobPaths.js +86 -0
  377. package/build/services/blobPaths.js.map +1 -0
  378. package/build/services/cloudStreamApi.d.ts +59 -0
  379. package/build/services/cloudStreamApi.d.ts.map +1 -0
  380. package/build/services/cloudStreamApi.js +81 -0
  381. package/build/services/cloudStreamApi.js.map +1 -0
  382. package/build/services/gallerySyncClock.d.ts +17 -0
  383. package/build/services/gallerySyncClock.d.ts.map +1 -0
  384. package/build/services/gallerySyncClock.js +21 -0
  385. package/build/services/gallerySyncClock.js.map +1 -0
  386. package/build/services/glassesClockSync.d.ts +20 -0
  387. package/build/services/glassesClockSync.d.ts.map +1 -0
  388. package/build/services/glassesClockSync.js +97 -0
  389. package/build/services/glassesClockSync.js.map +1 -0
  390. package/build/services/manifestVersionGate.d.ts +28 -0
  391. package/build/services/manifestVersionGate.d.ts.map +1 -0
  392. package/build/services/manifestVersionGate.js +41 -0
  393. package/build/services/manifestVersionGate.js.map +1 -0
  394. package/build/services/mentraUiShim.d.ts +38 -0
  395. package/build/services/mentraUiShim.d.ts.map +1 -0
  396. package/build/services/mentraUiShim.js +360 -0
  397. package/build/services/mentraUiShim.js.map +1 -0
  398. package/build/services/navigation/roadNameResolver.d.ts +67 -0
  399. package/build/services/navigation/roadNameResolver.d.ts.map +1 -0
  400. package/build/services/navigation/roadNameResolver.js +96 -0
  401. package/build/services/navigation/roadNameResolver.js.map +1 -0
  402. package/build/services/navigation/routesApiCodec.d.ts +38 -0
  403. package/build/services/navigation/routesApiCodec.d.ts.map +1 -0
  404. package/build/services/navigation/routesApiCodec.js +68 -0
  405. package/build/services/navigation/routesApiCodec.js.map +1 -0
  406. package/build/services/otaDisplayState.d.ts +42 -0
  407. package/build/services/otaDisplayState.d.ts.map +1 -0
  408. package/build/services/otaDisplayState.js +92 -0
  409. package/build/services/otaDisplayState.js.map +1 -0
  410. package/build/services/otaInstallPolicy.d.ts +81 -0
  411. package/build/services/otaInstallPolicy.d.ts.map +1 -0
  412. package/build/services/otaInstallPolicy.js +96 -0
  413. package/build/services/otaInstallPolicy.js.map +1 -0
  414. package/build/services/otaLegacyMapping.d.ts +22 -0
  415. package/build/services/otaLegacyMapping.d.ts.map +1 -0
  416. package/build/services/otaLegacyMapping.js +56 -0
  417. package/build/services/otaLegacyMapping.js.map +1 -0
  418. package/build/services/slimStreamStatus.d.ts +7 -0
  419. package/build/services/slimStreamStatus.d.ts.map +1 -0
  420. package/build/services/slimStreamStatus.js +26 -0
  421. package/build/services/slimStreamStatus.js.map +1 -0
  422. package/build/stores/apps.d.ts +104 -0
  423. package/build/stores/apps.d.ts.map +1 -0
  424. package/build/stores/apps.js +492 -0
  425. package/build/stores/apps.js.map +1 -0
  426. package/build/stores/bluetoothSettingKeys.d.ts +4 -0
  427. package/build/stores/bluetoothSettingKeys.d.ts.map +1 -0
  428. package/build/stores/bluetoothSettingKeys.js +31 -0
  429. package/build/stores/bluetoothSettingKeys.js.map +1 -0
  430. package/build/stores/cloudClientStatus.d.ts +9 -0
  431. package/build/stores/cloudClientStatus.d.ts.map +1 -0
  432. package/build/stores/cloudClientStatus.js +24 -0
  433. package/build/stores/cloudClientStatus.js.map +1 -0
  434. package/build/stores/connection.d.ts +22 -0
  435. package/build/stores/connection.d.ts.map +1 -0
  436. package/build/stores/connection.js +43 -0
  437. package/build/stores/connection.js.map +1 -0
  438. package/build/stores/core.d.ts +15 -0
  439. package/build/stores/core.d.ts.map +1 -0
  440. package/build/stores/core.js +21 -0
  441. package/build/stores/core.js.map +1 -0
  442. package/build/stores/display.d.ts +24 -0
  443. package/build/stores/display.d.ts.map +1 -0
  444. package/build/stores/display.js +96 -0
  445. package/build/stores/display.js.map +1 -0
  446. package/build/stores/gallerySync.d.ts +101 -0
  447. package/build/stores/gallerySync.d.ts.map +1 -0
  448. package/build/stores/gallerySync.js +217 -0
  449. package/build/stores/gallerySync.js.map +1 -0
  450. package/build/stores/glasses.d.ts +62 -0
  451. package/build/stores/glasses.d.ts.map +1 -0
  452. package/build/stores/glasses.js +203 -0
  453. package/build/stores/glasses.js.map +1 -0
  454. package/build/stores/settings.d.ts +37 -0
  455. package/build/stores/settings.d.ts.map +1 -0
  456. package/build/stores/settings.js +922 -0
  457. package/build/stores/settings.js.map +1 -0
  458. package/build/types/applet.d.ts +96 -0
  459. package/build/types/applet.d.ts.map +1 -0
  460. package/build/types/applet.js +5 -0
  461. package/build/types/applet.js.map +1 -0
  462. package/build/types/asg.d.ts +53 -0
  463. package/build/types/asg.d.ts.map +1 -0
  464. package/build/types/asg.js +2 -0
  465. package/build/types/asg.js.map +1 -0
  466. package/build/types/capabilities/even-realities-g1.d.ts +12 -0
  467. package/build/types/capabilities/even-realities-g1.d.ts.map +1 -0
  468. package/build/types/capabilities/even-realities-g1.js +55 -0
  469. package/build/types/capabilities/even-realities-g1.js.map +1 -0
  470. package/build/types/capabilities/even-realities-g2.d.ts +12 -0
  471. package/build/types/capabilities/even-realities-g2.d.ts.map +1 -0
  472. package/build/types/capabilities/even-realities-g2.js +75 -0
  473. package/build/types/capabilities/even-realities-g2.js.map +1 -0
  474. package/build/types/capabilities/mentra-display.d.ts +12 -0
  475. package/build/types/capabilities/mentra-display.d.ts.map +1 -0
  476. package/build/types/capabilities/mentra-display.js +63 -0
  477. package/build/types/capabilities/mentra-display.js.map +1 -0
  478. package/build/types/capabilities/mentra-live.d.ts +12 -0
  479. package/build/types/capabilities/mentra-live.d.ts.map +1 -0
  480. package/build/types/capabilities/mentra-live.js +92 -0
  481. package/build/types/capabilities/mentra-live.js.map +1 -0
  482. package/build/types/capabilities/none.d.ts +13 -0
  483. package/build/types/capabilities/none.d.ts.map +1 -0
  484. package/build/types/capabilities/none.js +65 -0
  485. package/build/types/capabilities/none.js.map +1 -0
  486. package/build/types/capabilities/simulated-glasses.d.ts +13 -0
  487. package/build/types/capabilities/simulated-glasses.d.ts.map +1 -0
  488. package/build/types/capabilities/simulated-glasses.js +65 -0
  489. package/build/types/capabilities/simulated-glasses.js.map +1 -0
  490. package/build/types/capabilities/vuzix-z100.d.ts +12 -0
  491. package/build/types/capabilities/vuzix-z100.d.ts.map +1 -0
  492. package/build/types/capabilities/vuzix-z100.js +52 -0
  493. package/build/types/capabilities/vuzix-z100.js.map +1 -0
  494. package/build/types/enums.d.ts +40 -0
  495. package/build/types/enums.d.ts.map +1 -0
  496. package/build/types/enums.js +44 -0
  497. package/build/types/enums.js.map +1 -0
  498. package/build/types/hardware.d.ts +160 -0
  499. package/build/types/hardware.d.ts.map +1 -0
  500. package/build/types/hardware.js +36 -0
  501. package/build/types/hardware.js.map +1 -0
  502. package/build/types/index.d.ts +11 -0
  503. package/build/types/index.d.ts.map +1 -0
  504. package/build/types/index.js +10 -0
  505. package/build/types/index.js.map +1 -0
  506. package/build/utils/GlobalEventEmitter.d.ts +10 -0
  507. package/build/utils/GlobalEventEmitter.d.ts.map +1 -0
  508. package/build/utils/GlobalEventEmitter.js +13 -0
  509. package/build/utils/GlobalEventEmitter.js.map +1 -0
  510. package/build/utils/cloudClient/RnUdpAdapter.d.ts +3 -0
  511. package/build/utils/cloudClient/RnUdpAdapter.d.ts.map +1 -0
  512. package/build/utils/cloudClient/RnUdpAdapter.js +41 -0
  513. package/build/utils/cloudClient/RnUdpAdapter.js.map +1 -0
  514. package/build/utils/cloudClient/cloudSecureStore.d.ts +3 -0
  515. package/build/utils/cloudClient/cloudSecureStore.d.ts.map +1 -0
  516. package/build/utils/cloudClient/cloudSecureStore.js +26 -0
  517. package/build/utils/cloudClient/cloudSecureStore.js.map +1 -0
  518. package/build/utils/debouncedPatch.d.ts +6 -0
  519. package/build/utils/debouncedPatch.d.ts.map +1 -0
  520. package/build/utils/debouncedPatch.js +25 -0
  521. package/build/utils/debouncedPatch.js.map +1 -0
  522. package/build/utils/devLogging.d.ts +26 -0
  523. package/build/utils/devLogging.d.ts.map +1 -0
  524. package/build/utils/devLogging.js +116 -0
  525. package/build/utils/devLogging.js.map +1 -0
  526. package/build/utils/devMiniappLaunch.d.ts +44 -0
  527. package/build/utils/devMiniappLaunch.d.ts.map +1 -0
  528. package/build/utils/devMiniappLaunch.js +52 -0
  529. package/build/utils/devMiniappLaunch.js.map +1 -0
  530. package/build/utils/diagnosticContext.d.ts +3 -0
  531. package/build/utils/diagnosticContext.d.ts.map +1 -0
  532. package/build/utils/diagnosticContext.js +119 -0
  533. package/build/utils/diagnosticContext.js.map +1 -0
  534. package/build/utils/display/composer/ColumnComposer.d.ts +131 -0
  535. package/build/utils/display/composer/ColumnComposer.d.ts.map +1 -0
  536. package/build/utils/display/composer/ColumnComposer.js +204 -0
  537. package/build/utils/display/composer/ColumnComposer.js.map +1 -0
  538. package/build/utils/display/composer/index.d.ts +9 -0
  539. package/build/utils/display/composer/index.d.ts.map +1 -0
  540. package/build/utils/display/composer/index.js +9 -0
  541. package/build/utils/display/composer/index.js.map +1 -0
  542. package/build/utils/display/helpers/DisplayHelpers.d.ts +165 -0
  543. package/build/utils/display/helpers/DisplayHelpers.d.ts.map +1 -0
  544. package/build/utils/display/helpers/DisplayHelpers.js +312 -0
  545. package/build/utils/display/helpers/DisplayHelpers.js.map +1 -0
  546. package/build/utils/display/helpers/ScrollView.d.ts +183 -0
  547. package/build/utils/display/helpers/ScrollView.d.ts.map +1 -0
  548. package/build/utils/display/helpers/ScrollView.js +257 -0
  549. package/build/utils/display/helpers/ScrollView.js.map +1 -0
  550. package/build/utils/display/helpers/index.d.ts +11 -0
  551. package/build/utils/display/helpers/index.d.ts.map +1 -0
  552. package/build/utils/display/helpers/index.js +10 -0
  553. package/build/utils/display/helpers/index.js.map +1 -0
  554. package/build/utils/display/index.d.ts +174 -0
  555. package/build/utils/display/index.d.ts.map +1 -0
  556. package/build/utils/display/index.js +185 -0
  557. package/build/utils/display/index.js.map +1 -0
  558. package/build/utils/display/measurer/TextMeasurer.d.ts +160 -0
  559. package/build/utils/display/measurer/TextMeasurer.d.ts.map +1 -0
  560. package/build/utils/display/measurer/TextMeasurer.js +273 -0
  561. package/build/utils/display/measurer/TextMeasurer.js.map +1 -0
  562. package/build/utils/display/measurer/index.d.ts +10 -0
  563. package/build/utils/display/measurer/index.d.ts.map +1 -0
  564. package/build/utils/display/measurer/index.js +11 -0
  565. package/build/utils/display/measurer/index.js.map +1 -0
  566. package/build/utils/display/measurer/script-detection.d.ts +53 -0
  567. package/build/utils/display/measurer/script-detection.d.ts.map +1 -0
  568. package/build/utils/display/measurer/script-detection.js +184 -0
  569. package/build/utils/display/measurer/script-detection.js.map +1 -0
  570. package/build/utils/display/profiles/g1.d.ts +33 -0
  571. package/build/utils/display/profiles/g1.d.ts.map +1 -0
  572. package/build/utils/display/profiles/g1.js +213 -0
  573. package/build/utils/display/profiles/g1.js.map +1 -0
  574. package/build/utils/display/profiles/g2.d.ts +13 -0
  575. package/build/utils/display/profiles/g2.d.ts.map +1 -0
  576. package/build/utils/display/profiles/g2.js +34 -0
  577. package/build/utils/display/profiles/g2.js.map +1 -0
  578. package/build/utils/display/profiles/index.d.ts +12 -0
  579. package/build/utils/display/profiles/index.d.ts.map +1 -0
  580. package/build/utils/display/profiles/index.js +15 -0
  581. package/build/utils/display/profiles/index.js.map +1 -0
  582. package/build/utils/display/profiles/nex.d.ts +10 -0
  583. package/build/utils/display/profiles/nex.d.ts.map +1 -0
  584. package/build/utils/display/profiles/nex.js +150 -0
  585. package/build/utils/display/profiles/nex.js.map +1 -0
  586. package/build/utils/display/profiles/types.d.ts +103 -0
  587. package/build/utils/display/profiles/types.d.ts.map +1 -0
  588. package/build/utils/display/profiles/types.js +2 -0
  589. package/build/utils/display/profiles/types.js.map +1 -0
  590. package/build/utils/display/profiles/z100.d.ts +33 -0
  591. package/build/utils/display/profiles/z100.d.ts.map +1 -0
  592. package/build/utils/display/profiles/z100.js +182 -0
  593. package/build/utils/display/profiles/z100.js.map +1 -0
  594. package/build/utils/display/scene/degrade.d.ts +25 -0
  595. package/build/utils/display/scene/degrade.d.ts.map +1 -0
  596. package/build/utils/display/scene/degrade.js +64 -0
  597. package/build/utils/display/scene/degrade.js.map +1 -0
  598. package/build/utils/display/scene/differ.d.ts +38 -0
  599. package/build/utils/display/scene/differ.d.ts.map +1 -0
  600. package/build/utils/display/scene/differ.js +107 -0
  601. package/build/utils/display/scene/differ.js.map +1 -0
  602. package/build/utils/display/scene/index.d.ts +10 -0
  603. package/build/utils/display/scene/index.d.ts.map +1 -0
  604. package/build/utils/display/scene/index.js +6 -0
  605. package/build/utils/display/scene/index.js.map +1 -0
  606. package/build/utils/display/scene/process.d.ts +35 -0
  607. package/build/utils/display/scene/process.d.ts.map +1 -0
  608. package/build/utils/display/scene/process.js +187 -0
  609. package/build/utils/display/scene/process.js.map +1 -0
  610. package/build/utils/display/scene/store.d.ts +48 -0
  611. package/build/utils/display/scene/store.d.ts.map +1 -0
  612. package/build/utils/display/scene/store.js +0 -0
  613. package/build/utils/display/scene/store.js.map +1 -0
  614. package/build/utils/display/scene/types.d.ts +120 -0
  615. package/build/utils/display/scene/types.d.ts.map +1 -0
  616. package/build/utils/display/scene/types.js +0 -0
  617. package/build/utils/display/scene/types.js.map +1 -0
  618. package/build/utils/display/wrapper/TextWrapper.d.ts +102 -0
  619. package/build/utils/display/wrapper/TextWrapper.d.ts.map +1 -0
  620. package/build/utils/display/wrapper/TextWrapper.js +471 -0
  621. package/build/utils/display/wrapper/TextWrapper.js.map +1 -0
  622. package/build/utils/display/wrapper/index.d.ts +12 -0
  623. package/build/utils/display/wrapper/index.d.ts.map +1 -0
  624. package/build/utils/display/wrapper/index.js +12 -0
  625. package/build/utils/display/wrapper/index.js.map +1 -0
  626. package/build/utils/display/wrapper/types.d.ts +75 -0
  627. package/build/utils/display/wrapper/types.d.ts.map +1 -0
  628. package/build/utils/display/wrapper/types.js +11 -0
  629. package/build/utils/display/wrapper/types.js.map +1 -0
  630. package/build/utils/e2eMetrics.d.ts +6 -0
  631. package/build/utils/e2eMetrics.d.ts.map +1 -0
  632. package/build/utils/e2eMetrics.js +27 -0
  633. package/build/utils/e2eMetrics.js.map +1 -0
  634. package/build/utils/hardware/hardware.d.ts +42 -0
  635. package/build/utils/hardware/hardware.d.ts.map +1 -0
  636. package/build/utils/hardware/hardware.js +127 -0
  637. package/build/utils/hardware/hardware.js.map +1 -0
  638. package/build/utils/hardware/index.d.ts +2 -0
  639. package/build/utils/hardware/index.d.ts.map +1 -0
  640. package/build/utils/hardware/index.js +2 -0
  641. package/build/utils/hardware/index.js.map +1 -0
  642. package/build/utils/miniappGlobals.d.ts +60 -0
  643. package/build/utils/miniappGlobals.d.ts.map +1 -0
  644. package/build/utils/miniappGlobals.js +224 -0
  645. package/build/utils/miniappGlobals.js.map +1 -0
  646. package/build/utils/permissions/MediaLibraryPermissions.d.ts +45 -0
  647. package/build/utils/permissions/MediaLibraryPermissions.d.ts.map +1 -0
  648. package/build/utils/permissions/MediaLibraryPermissions.js +145 -0
  649. package/build/utils/permissions/MediaLibraryPermissions.js.map +1 -0
  650. package/build/utils/permissions/galleryDisplayName.d.ts +8 -0
  651. package/build/utils/permissions/galleryDisplayName.d.ts.map +1 -0
  652. package/build/utils/permissions/galleryDisplayName.js +25 -0
  653. package/build/utils/permissions/galleryDisplayName.js.map +1 -0
  654. package/build/utils/storage/index.d.ts +3 -0
  655. package/build/utils/storage/index.d.ts.map +1 -0
  656. package/build/utils/storage/index.js +3 -0
  657. package/build/utils/storage/index.js.map +1 -0
  658. package/build/utils/storage/storage.d.ts +24 -0
  659. package/build/utils/storage/storage.d.ts.map +1 -0
  660. package/build/utils/storage/storage.js +85 -0
  661. package/build/utils/storage/storage.js.map +1 -0
  662. package/build/utils/storage/zip.d.ts +3 -0
  663. package/build/utils/storage/zip.d.ts.map +1 -0
  664. package/build/utils/storage/zip.js +14 -0
  665. package/build/utils/storage/zip.js.map +1 -0
  666. package/build/utils/timers/index.d.ts +3 -0
  667. package/build/utils/timers/index.d.ts.map +1 -0
  668. package/build/utils/timers/index.js +3 -0
  669. package/build/utils/timers/index.js.map +1 -0
  670. package/build/utils/timers/timers.d.ts +9 -0
  671. package/build/utils/timers/timers.d.ts.map +1 -0
  672. package/build/utils/timers/timers.js +105 -0
  673. package/build/utils/timers/timers.js.map +1 -0
  674. package/package.json +120 -0
  675. package/src/devtools.ts +13 -0
  676. package/src/engine.ts +173 -0
  677. package/src/facades/dev.ts +198 -0
  678. package/src/facades/display.ts +17 -0
  679. package/src/facades/displayMirror.ts +33 -0
  680. package/src/facades/gallery.ts +69 -0
  681. package/src/facades/glasses.ts +206 -0
  682. package/src/facades/glassesSettings.ts +56 -0
  683. package/src/facades/glassesWifi.ts +68 -0
  684. package/src/facades/miniapps.ts +55 -0
  685. package/src/facades/notifications.ts +15 -0
  686. package/src/facades/ota.ts +174 -0
  687. package/src/facades/pairing.ts +329 -0
  688. package/src/facades/permissions.ts +165 -0
  689. package/src/facades/phoneNotifications.ts +50 -0
  690. package/src/facades/reports.ts +185 -0
  691. package/src/facades/session.ts +55 -0
  692. package/src/facades/settings.ts +57 -0
  693. package/src/facades/speech.ts +38 -0
  694. package/src/index.ts +191 -0
  695. package/src/internal.ts +159 -0
  696. package/src/runtime/bootstrap.ts +118 -0
  697. package/src/runtime/config.ts +147 -0
  698. package/src/runtime/streamConfig.ts +34 -0
  699. package/src/services/AppRegistry.ts +1190 -0
  700. package/src/services/AudioCloudUplink.ts +50 -0
  701. package/src/services/AudioPlaybackService.ts +813 -0
  702. package/src/services/AutomaticReportResult.ts +48 -0
  703. package/src/services/BlobStore.ts +746 -0
  704. package/src/services/CaptionsTesterReportService.ts +107 -0
  705. package/src/services/CloudAudioSubscriptionSync.ts +41 -0
  706. package/src/services/CloudClientService.ts +689 -0
  707. package/src/services/CloudTranscriptE2EMetrics.ts +27 -0
  708. package/src/services/ConnectionCoordinator.ts +65 -0
  709. package/src/services/DevServerBridge.ts +332 -0
  710. package/src/services/DeviceEventRouter.ts +238 -0
  711. package/src/services/DeviceStoreHydration.ts +130 -0
  712. package/src/services/DisplayProcessor.ts +775 -0
  713. package/src/services/GlassesReadiness.ts +103 -0
  714. package/src/services/GlassesSettingsSync.ts +134 -0
  715. package/src/services/GlassesStatusProjection.ts +73 -0
  716. package/src/services/HeadingService.ts +98 -0
  717. package/src/services/LocalDisplayManager.ts +703 -0
  718. package/src/services/LocalMiniappRuntime.ts +4213 -0
  719. package/src/services/LocalSttFallbackCoordinator.ts +147 -0
  720. package/src/services/MentraJSCrashController.ts +189 -0
  721. package/src/services/MentraJSCrashloopReportService.ts +66 -0
  722. package/src/services/MentraJSLogPipeline.ts +166 -0
  723. package/src/services/MentraJSRouter.ts +557 -0
  724. package/src/services/MentraUIRouter.ts +244 -0
  725. package/src/services/MicStateCoordinator.ts +94 -0
  726. package/src/services/MiniappEngine.ts +143 -0
  727. package/src/services/MiniappLauncher.ts +340 -0
  728. package/src/services/MiniappRunningRegistry.ts +57 -0
  729. package/src/services/NativeHttpResponse.ts +6 -0
  730. package/src/services/NavigationHandlers.ts +423 -0
  731. package/src/services/NavigationService.ts +731 -0
  732. package/src/services/NotificationsEmitter.ts +48 -0
  733. package/src/services/OfflineSpeechModelService.ts +168 -0
  734. package/src/services/OtaInstallCoordinator.ts +1205 -0
  735. package/src/services/OtaService.ts +83 -0
  736. package/src/services/OtaUpdateCheckService.ts +386 -0
  737. package/src/services/PairingIdentity.ts +154 -0
  738. package/src/services/PhoneCalendarHelpers.ts +212 -0
  739. package/src/services/PhoneCalendarService.ts +42 -0
  740. package/src/services/PhoneCameraFovCoordinator.ts +195 -0
  741. package/src/services/PhoneLocationService.ts +122 -0
  742. package/src/services/PhoneNotificationsSync.ts +44 -0
  743. package/src/services/PhonePhotoCoordinator.ts +409 -0
  744. package/src/services/PhoneStreamCoordinator.ts +777 -0
  745. package/src/services/PhoneVideoCoordinator.ts +189 -0
  746. package/src/services/STTModelManager.ts +360 -0
  747. package/src/services/SceneRenderer.ts +292 -0
  748. package/src/services/SentenceTtsPipeline.ts +106 -0
  749. package/src/services/StreamLifecycleController.ts +213 -0
  750. package/src/services/TTSModelManager.ts +466 -0
  751. package/src/services/TranscriptionRouting.ts +37 -0
  752. package/src/services/WebviewBridge.ts +50 -0
  753. package/src/services/asg/GalleryMediaIntegrityReportService.ts +70 -0
  754. package/src/services/asg/asgCameraApi.ts +1695 -0
  755. package/src/services/asg/cameraRollExportCoordinator.ts +627 -0
  756. package/src/services/asg/cameraRollExportLedger.ts +122 -0
  757. package/src/services/asg/galleryMediaValidation.ts +183 -0
  758. package/src/services/asg/galleryNotices.ts +61 -0
  759. package/src/services/asg/galleryPathMigration.ts +22 -0
  760. package/src/services/asg/gallerySettingsService.ts +68 -0
  761. package/src/services/asg/gallerySyncNotifications.ts +236 -0
  762. package/src/services/asg/gallerySyncService.ts +2269 -0
  763. package/src/services/asg/galleryTransferLedger.ts +312 -0
  764. package/src/services/asg/localNetworkTransport.ts +173 -0
  765. package/src/services/asg/localStorageService.ts +652 -0
  766. package/src/services/asg/mediaProcessingQueue.ts +518 -0
  767. package/src/services/asgOtaVersionUrl.ts +41 -0
  768. package/src/services/blobPaths.ts +86 -0
  769. package/src/services/cloudStreamApi.ts +154 -0
  770. package/src/services/gallerySyncClock.ts +39 -0
  771. package/src/services/glassesClockSync.ts +115 -0
  772. package/src/services/manifestVersionGate.ts +43 -0
  773. package/src/services/mentraUiShim.ts +366 -0
  774. package/src/services/navigation/roadNameResolver.ts +112 -0
  775. package/src/services/navigation/routesApiCodec.ts +69 -0
  776. package/src/services/otaDisplayState.ts +115 -0
  777. package/src/services/otaInstallPolicy.ts +106 -0
  778. package/src/services/otaLegacyMapping.ts +71 -0
  779. package/src/services/slimStreamStatus.ts +28 -0
  780. package/src/stores/apps.ts +614 -0
  781. package/src/stores/bluetoothSettingKeys.ts +36 -0
  782. package/src/stores/cloudClientStatus.ts +37 -0
  783. package/src/stores/connection.ts +69 -0
  784. package/src/stores/core.ts +32 -0
  785. package/src/stores/display.ts +121 -0
  786. package/src/stores/gallerySync.ts +380 -0
  787. package/src/stores/glasses.ts +309 -0
  788. package/src/stores/settings.ts +1001 -0
  789. package/src/types/applet.ts +112 -0
  790. package/src/types/asg.ts +58 -0
  791. package/src/types/capabilities/even-realities-g1.ts +67 -0
  792. package/src/types/capabilities/even-realities-g2.ts +88 -0
  793. package/src/types/capabilities/mentra-display.ts +75 -0
  794. package/src/types/capabilities/mentra-live.ts +103 -0
  795. package/src/types/capabilities/none.ts +76 -0
  796. package/src/types/capabilities/simulated-glasses.ts +76 -0
  797. package/src/types/capabilities/vuzix-z100.ts +64 -0
  798. package/src/types/enums.ts +43 -0
  799. package/src/types/hardware.ts +203 -0
  800. package/src/types/index.ts +37 -0
  801. package/src/utils/GlobalEventEmitter.ts +14 -0
  802. package/src/utils/cloudClient/RnUdpAdapter.ts +47 -0
  803. package/src/utils/cloudClient/cloudSecureStore.ts +28 -0
  804. package/src/utils/debouncedPatch.ts +28 -0
  805. package/src/utils/devLogging.ts +140 -0
  806. package/src/utils/devMiniappLaunch.ts +68 -0
  807. package/src/utils/diagnosticContext.ts +155 -0
  808. package/src/utils/display/composer/ColumnComposer.ts +285 -0
  809. package/src/utils/display/composer/index.ts +15 -0
  810. package/src/utils/display/helpers/DisplayHelpers.ts +413 -0
  811. package/src/utils/display/helpers/ScrollView.ts +337 -0
  812. package/src/utils/display/helpers/index.ts +14 -0
  813. package/src/utils/display/index.ts +273 -0
  814. package/src/utils/display/measurer/TextMeasurer.ts +346 -0
  815. package/src/utils/display/measurer/index.ts +21 -0
  816. package/src/utils/display/measurer/script-detection.ts +218 -0
  817. package/src/utils/display/profiles/g1.ts +236 -0
  818. package/src/utils/display/profiles/g2.ts +39 -0
  819. package/src/utils/display/profiles/index.ts +28 -0
  820. package/src/utils/display/profiles/nex.ts +166 -0
  821. package/src/utils/display/profiles/types.ts +132 -0
  822. package/src/utils/display/profiles/z100.ts +198 -0
  823. package/src/utils/display/scene/degrade.ts +80 -0
  824. package/src/utils/display/scene/differ.ts +128 -0
  825. package/src/utils/display/scene/index.ts +21 -0
  826. package/src/utils/display/scene/process.ts +214 -0
  827. package/src/utils/display/scene/store.ts +0 -0
  828. package/src/utils/display/scene/types.ts +0 -0
  829. package/src/utils/display/wrapper/TextWrapper.ts +546 -0
  830. package/src/utils/display/wrapper/index.ts +15 -0
  831. package/src/utils/display/wrapper/types.ts +102 -0
  832. package/src/utils/e2eMetrics.ts +30 -0
  833. package/src/utils/hardware/hardware.ts +166 -0
  834. package/src/utils/hardware/index.ts +1 -0
  835. package/src/utils/miniappGlobals.ts +260 -0
  836. package/src/utils/permissions/MediaLibraryPermissions.ts +161 -0
  837. package/src/utils/permissions/galleryDisplayName.ts +28 -0
  838. package/src/utils/storage/index.ts +2 -0
  839. package/src/utils/storage/storage.ts +101 -0
  840. package/src/utils/storage/zip.ts +13 -0
  841. package/src/utils/timers/index.ts +2 -0
  842. package/src/utils/timers/timers.ts +139 -0
@@ -0,0 +1,775 @@
1
+ /**
2
+ * DisplayProcessor
3
+ *
4
+ * Processes display events with pixel-accurate text wrapping using the same
5
+ * display-utils library as the cloud. This ensures the mobile preview matches
6
+ * exactly what is shown on the glasses.
7
+ *
8
+ * Key responsibilities:
9
+ * 1. Intercept display events before sending to native SGC
10
+ * 2. Wrap text using the correct device profile (G1, etc.)
11
+ * 3. Ensure GlassesDisplayMirror shows exactly what glasses will show
12
+ *
13
+ * @see cloud/issues/026-mobile-display-processor for design docs
14
+ */
15
+
16
+ import {
17
+ createDisplayToolkit,
18
+ G1_PROFILE,
19
+ G2_PROFILE,
20
+ Z100_PROFILE,
21
+ NEX_PROFILE,
22
+ TextMeasurer,
23
+ TextWrapper,
24
+ ColumnComposer,
25
+ type DisplayProfile,
26
+ type WrapOptions,
27
+ type BreakMode,
28
+ } from "../utils/display"
29
+
30
+ import {ISLAND_SETTINGS_KEYS} from "../runtime/config"
31
+ import {useGlassesStore} from "../stores/glasses"
32
+ import {useSettingsStore} from "../stores/settings"
33
+ import {isGlassesConnected} from "./GlassesReadiness"
34
+
35
+ // =============================================================================
36
+ // Types
37
+ // =============================================================================
38
+
39
+ /**
40
+ * Supported device models for display processing
41
+ */
42
+ export type DeviceModel = "g1" | "g2" | "z100" | "nex" | "mach1" | "mentra-live" | "simulated" | "unknown"
43
+
44
+ /**
45
+ * Display event types that we process
46
+ */
47
+ export type DisplayLayoutType =
48
+ | "text_wall"
49
+ | "text_line"
50
+ | "text_rows"
51
+ | "reference_card"
52
+ | "double_text_wall"
53
+ | "bitmap_view"
54
+
55
+ /**
56
+ * Raw display event from the cloud/WebSocket
57
+ */
58
+ export interface DisplayEvent {
59
+ view: "main" | "dashboard"
60
+ layoutType?: DisplayLayoutType
61
+ layout?: {
62
+ layoutType: DisplayLayoutType
63
+ text?: string | string[] // string for text_wall/text_line, string[] for text_rows
64
+ title?: string
65
+ topText?: string
66
+ bottomText?: string
67
+ breakMode?: BreakMode
68
+ data?: string // For bitmap_view
69
+ x?: number // bitmap_view container position/size (forwarded to native, used by G2)
70
+ y?: number
71
+ width?: number
72
+ height?: number
73
+ [key: string]: unknown
74
+ }
75
+ text?: string | string[]
76
+ title?: string
77
+ topText?: string
78
+ bottomText?: string
79
+ breakMode?: BreakMode
80
+ [key: string]: unknown
81
+ }
82
+
83
+ /**
84
+ * Processed display event with guaranteed wrapped text
85
+ */
86
+ export interface ProcessedDisplayEvent extends DisplayEvent {
87
+ /** Marks this event as processed */
88
+ _processed: true
89
+ /** The device profile used for processing */
90
+ _profile: string
91
+ /** Pre-split lines for text_wall/text_line (for easy rendering) */
92
+ _lines?: string[]
93
+ /** Original layout type before processing (e.g., double_text_wall -> text_wall) */
94
+ _originalLayoutType?: DisplayLayoutType
95
+ /** Column composition metadata for double_text_wall */
96
+ _composedColumns?: {
97
+ leftLines: string[]
98
+ rightLines: string[]
99
+ config: {
100
+ leftColumnWidthPx: number
101
+ rightColumnStartPx: number
102
+ rightColumnWidthPx: number
103
+ maxLines: number
104
+ leftMarginSpaces?: number
105
+ }
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Options for the DisplayProcessor
111
+ */
112
+ export interface DisplayProcessorOptions {
113
+ /** Default break mode for text wrapping */
114
+ breakMode?: BreakMode
115
+ /** Whether to log processing details */
116
+ debug?: boolean
117
+ }
118
+
119
+ // =============================================================================
120
+ // Placeholder Replacement
121
+ // =============================================================================
122
+
123
+ /**
124
+ * Placeholder values that can be replaced in display text.
125
+ * These match the placeholders used in CoreManager.kt/CoreManager.swift
126
+ */
127
+ interface PlaceholderValues {
128
+ /** Current time in 12-hour format (e.g., "2:30 PM") */
129
+ TIME12: string
130
+ /** Current time in 24-hour format (e.g., "14:30") */
131
+ TIME24: string
132
+ /** Current date (e.g., "1/22") */
133
+ DATE: string
134
+ /** Glasses battery level (e.g., "85%" or "" if unknown) */
135
+ GBATT: string
136
+ /** Connection status */
137
+ CONNECTION_STATUS: string
138
+ }
139
+
140
+ /**
141
+ * Get current placeholder values from device state
142
+ */
143
+ function getPlaceholderValues(): PlaceholderValues {
144
+ const now = new Date()
145
+
146
+ // Format time in 12-hour format
147
+ const hours12 = now.getHours() % 12 || 12
148
+ const minutes = now.getMinutes().toString().padStart(2, "0")
149
+ const ampm = now.getHours() >= 12 ? "PM" : "AM"
150
+ const TIME12 = `${hours12}:${minutes} ${ampm}`
151
+
152
+ // Format time in 24-hour format
153
+ const hours24 = now.getHours().toString().padStart(2, "0")
154
+ const TIME24 = `${hours24}:${minutes}`
155
+
156
+ // Format date
157
+ const month = now.getMonth() + 1
158
+ const day = now.getDate()
159
+ const DATE = `${month}/${day}`
160
+
161
+ // Battery + connection read from the engine glasses store directly (was a host
162
+ // glassesStatus hook).
163
+ const batteryLevel = useGlassesStore.getState().batteryLevel ?? -1
164
+ const GBATT = batteryLevel === -1 ? "" : `${batteryLevel}%`
165
+
166
+ // Connection status
167
+ const connected = isGlassesConnected(useGlassesStore.getState().connection)
168
+ const CONNECTION_STATUS = connected ? "Connected" : ""
169
+
170
+ return {TIME12, TIME24, DATE, GBATT, CONNECTION_STATUS}
171
+ }
172
+
173
+ /**
174
+ * Replace placeholders in text with actual values.
175
+ * Placeholders are in format $NAME$ (e.g., $GBATT$, $TIME12$)
176
+ *
177
+ * @param text - Text containing placeholders
178
+ * @returns Text with placeholders replaced
179
+ */
180
+ function replacePlaceholders(text: string): string {
181
+ if (!text || !text.includes("$")) {
182
+ return text
183
+ }
184
+
185
+ const values = getPlaceholderValues()
186
+
187
+ return text
188
+ .replace(/\$TIME12\$/g, values.TIME12)
189
+ .replace(/\$TIME24\$/g, values.TIME24)
190
+ .replace(/\$DATE\$/g, values.DATE)
191
+ .replace(/\$GBATT\$/g, values.GBATT)
192
+ .replace(/\$CONNECTION_STATUS\$/g, values.CONNECTION_STATUS)
193
+ .replace(/\$no_datetime\$/g, `${values.DATE}, ${values.TIME12}`)
194
+ }
195
+
196
+ function isBreakMode(value: unknown): value is BreakMode {
197
+ return value === "character" || value === "character-no-hyphen" || value === "word" || value === "strict-word"
198
+ }
199
+
200
+ // =============================================================================
201
+ // Device Profile Mapping
202
+ // =============================================================================
203
+
204
+ /**
205
+ * Map device model names to display profiles
206
+ */
207
+ const DEVICE_PROFILES: Record<DeviceModel, DisplayProfile> = {
208
+ "g1": G1_PROFILE,
209
+ "g2": G2_PROFILE,
210
+ "z100": Z100_PROFILE,
211
+ "nex": NEX_PROFILE,
212
+ "mach1": Z100_PROFILE, // Mach1 uses same hardware as Vuzix Z100
213
+ "mentra-live": G1_PROFILE, // Mentra Live has no display, uses G1 as fallback
214
+ "simulated": G1_PROFILE, // Simulated uses G1 profile
215
+ "unknown": G1_PROFILE, // Default to G1
216
+ }
217
+
218
+ /**
219
+ * Normalize various model name strings to our DeviceModel type
220
+ */
221
+ function normalizeModelName(modelName: string | null | undefined): DeviceModel {
222
+ if (!modelName) return "unknown"
223
+
224
+ const lower = modelName.toLowerCase()
225
+
226
+ if (lower.includes("g2") || lower.includes("even realities g2")) {
227
+ return "g2"
228
+ }
229
+ if (lower.includes("g1") || lower.includes("even realities")) {
230
+ return "g1"
231
+ }
232
+ if (lower.includes("z100") || lower.includes("vuzix")) {
233
+ return "z100"
234
+ }
235
+ if (lower.includes("nex") || lower.includes("mentra display")) {
236
+ return "nex"
237
+ }
238
+ if (lower.includes("mach1") || lower.includes("mach 1")) {
239
+ return "mach1"
240
+ }
241
+ if (lower.includes("mentra live") || lower.includes("mentra-live")) {
242
+ return "mentra-live"
243
+ }
244
+ if (lower.includes("simulated") || lower.includes("simulator")) {
245
+ return "simulated"
246
+ }
247
+
248
+ return "unknown"
249
+ }
250
+
251
+ // =============================================================================
252
+ // DisplayProcessor Class
253
+ // =============================================================================
254
+
255
+ /**
256
+ * Processes display events with pixel-accurate text wrapping.
257
+ *
258
+ * Usage:
259
+ * ```typescript
260
+ * const processor = DisplayProcessor.getInstance()
261
+ *
262
+ * // When glasses connect
263
+ * processor.setDeviceModel("Even Realities G1")
264
+ *
265
+ * // Process display events
266
+ * const processed = processor.processDisplayEvent(rawEvent)
267
+ * ```
268
+ */
269
+ export class DisplayProcessor {
270
+ private static instance: DisplayProcessor | null = null
271
+
272
+ private measurer: TextMeasurer
273
+ private wrapper: TextWrapper
274
+ private composer: ColumnComposer
275
+ private profile: DisplayProfile
276
+ private deviceModel: DeviceModel = "unknown"
277
+ private options: DisplayProcessorOptions
278
+
279
+ private runtimeAttached = false
280
+ private unsubscribeGlassesStatus: (() => void) | null = null
281
+
282
+ private constructor(options: DisplayProcessorOptions = {}) {
283
+ this.options = {
284
+ breakMode: "character-no-hyphen",
285
+ debug: false,
286
+ ...options,
287
+ }
288
+
289
+ // Initialize with default G1 profile
290
+ const engine = createDisplayToolkit(G1_PROFILE, {
291
+ breakMode: this.options.breakMode,
292
+ })
293
+
294
+ this.measurer = engine.measurer
295
+ this.wrapper = engine.wrapper
296
+ this.composer = new ColumnComposer(engine.profile, this.options.breakMode)
297
+ this.profile = engine.profile
298
+
299
+ // Engine stores may not be hydrated yet at module-load time; attachToRuntime()
300
+ // is called again by the host after app services start.
301
+ this.attachToRuntime()
302
+ }
303
+
304
+ /**
305
+ * Read the current default wearable and subscribe to engine glasses-status changes.
306
+ * Idempotent — safe to call again after app services start.
307
+ */
308
+ public attachToRuntime(): void {
309
+ if (this.runtimeAttached) {
310
+ return
311
+ }
312
+
313
+ // Seed the device profile from the saved default wearable, read off the engine
314
+ // settings store directly (was a host settings hook).
315
+ const defaultWearable = useSettingsStore.getState().getSetting(ISLAND_SETTINGS_KEYS.defaultWearable) as
316
+ | string
317
+ | undefined
318
+ if (defaultWearable) {
319
+ this.setDeviceModel(defaultWearable)
320
+ console.log(`DISPLAY_PROCESSOR: Initialized DisplayProcessor with default wearable: ${defaultWearable}`)
321
+ }
322
+
323
+ // Track device-model changes off the engine glasses store directly (was a host
324
+ // subscribeGlassesStatus hook).
325
+ this.unsubscribeGlassesStatus = useGlassesStore.subscribe(
326
+ (s) => s.deviceModel,
327
+ (deviceModel) => {
328
+ if (deviceModel) this.setDeviceModel(String(deviceModel))
329
+ },
330
+ )
331
+
332
+ this.runtimeAttached = true
333
+ }
334
+
335
+ /** Detach runtime subscriptions installed by attachToRuntime(). */
336
+ public detachFromRuntime(): void {
337
+ this.unsubscribeGlassesStatus?.()
338
+ this.unsubscribeGlassesStatus = null
339
+ this.runtimeAttached = false
340
+ }
341
+
342
+ /**
343
+ * Get the singleton instance
344
+ */
345
+ public static getInstance(options?: DisplayProcessorOptions): DisplayProcessor {
346
+ if (!DisplayProcessor.instance) {
347
+ DisplayProcessor.instance = new DisplayProcessor(options)
348
+ }
349
+ return DisplayProcessor.instance
350
+ }
351
+
352
+ /**
353
+ * Reset the singleton (useful for testing)
354
+ */
355
+ public static resetInstance(): void {
356
+ DisplayProcessor.instance?.detachFromRuntime()
357
+ DisplayProcessor.instance = null
358
+ }
359
+
360
+ // ===========================================================================
361
+ // Device Profile Management
362
+ // ===========================================================================
363
+
364
+ /**
365
+ * Set the device model and update the display profile accordingly.
366
+ * Call this when glasses connect.
367
+ *
368
+ * @param modelName - The model name from the connected glasses (e.g., "Even Realities G1")
369
+ */
370
+ public setDeviceModel(modelName: string | null | undefined): void {
371
+ const normalizedModel = normalizeModelName(modelName)
372
+
373
+ if (normalizedModel === this.deviceModel) {
374
+ return // No change needed
375
+ }
376
+
377
+ this.deviceModel = normalizedModel
378
+ const newProfile = DEVICE_PROFILES[normalizedModel]
379
+
380
+ if (newProfile !== this.profile) {
381
+ this.updateProfile(newProfile)
382
+ }
383
+
384
+ if (this.options.debug) {
385
+ console.log(`[DisplayProcessor] Device model set to: ${normalizedModel} (from: ${modelName})`)
386
+ }
387
+ }
388
+
389
+ /**
390
+ * Update the display profile and recreate engine
391
+ */
392
+ private updateProfile(newProfile: DisplayProfile): void {
393
+ const engine = createDisplayToolkit(newProfile, {
394
+ breakMode: this.options.breakMode,
395
+ })
396
+
397
+ this.measurer = engine.measurer
398
+ this.wrapper = engine.wrapper
399
+ this.composer = new ColumnComposer(newProfile, this.options.breakMode)
400
+ this.profile = engine.profile
401
+
402
+ if (this.options.debug) {
403
+ console.log(`[DisplayProcessor] Profile updated to: ${newProfile.id}`)
404
+ }
405
+ }
406
+
407
+ /**
408
+ * Get the current device model
409
+ */
410
+ public getDeviceModel(): DeviceModel {
411
+ return this.deviceModel
412
+ }
413
+
414
+ /**
415
+ * Get the current display profile
416
+ */
417
+ public getProfile(): DisplayProfile {
418
+ return this.profile
419
+ }
420
+
421
+ // ===========================================================================
422
+ // Display Event Processing
423
+ // ===========================================================================
424
+
425
+ /**
426
+ * Process a display event, wrapping text as needed.
427
+ *
428
+ * @param event - Raw display event from WebSocket
429
+ * @returns Processed event with wrapped text
430
+ */
431
+ public processDisplayEvent(event: DisplayEvent): ProcessedDisplayEvent {
432
+ // Already processed? Return as-is
433
+ if ((event as ProcessedDisplayEvent)._processed) {
434
+ return event as ProcessedDisplayEvent
435
+ }
436
+
437
+ // Get layout type from either root or nested layout object
438
+ const layoutType = event.layoutType || event.layout?.layoutType
439
+ const layout = event.layout || event
440
+
441
+ if (!layoutType) {
442
+ // No layout type - pass through
443
+ return {
444
+ ...event,
445
+ _processed: true,
446
+ _profile: this.profile.id,
447
+ }
448
+ }
449
+
450
+ switch (layoutType) {
451
+ case "text_wall":
452
+ case "text_line":
453
+ return this.processTextWall(event, layout)
454
+
455
+ case "text_rows":
456
+ return this.processTextRows(event, layout)
457
+
458
+ case "reference_card":
459
+ return this.processReferenceCard(event, layout)
460
+
461
+ case "double_text_wall":
462
+ return this.processDoubleTextWall(event, layout)
463
+
464
+ case "bitmap_view":
465
+ // Bitmap views don't need text processing
466
+ return {
467
+ ...event,
468
+ _processed: true,
469
+ _profile: this.profile.id,
470
+ }
471
+
472
+ default:
473
+ // Unknown layout type - pass through
474
+ if (this.options.debug) {
475
+ console.log(`[DisplayProcessor] Unknown layout type: ${layoutType}`)
476
+ }
477
+ return {
478
+ ...event,
479
+ _processed: true,
480
+ _profile: this.profile.id,
481
+ }
482
+ }
483
+ }
484
+
485
+ /**
486
+ * Process text_wall or text_line layout
487
+ */
488
+ private processTextWall(
489
+ event: DisplayEvent,
490
+ layout: DisplayEvent | NonNullable<DisplayEvent["layout"]>,
491
+ ): ProcessedDisplayEvent {
492
+ // text_wall/text_line always have string text, not string[]
493
+ const rawText = layout.text
494
+ const text = typeof rawText === "string" ? rawText : ""
495
+
496
+ // Replace placeholders BEFORE wrapping (so we measure actual content)
497
+ const textWithPlaceholders = replacePlaceholders(text)
498
+ const breakMode = this.getEventBreakMode(event, layout)
499
+
500
+ // Wrap the text
501
+ const lines = this.wrapText(textWithPlaceholders, breakMode ? {breakMode} : undefined)
502
+ const wrappedText = lines.join("\n")
503
+
504
+ // Update both root and nested layout if present
505
+ const processedLayout = event.layout
506
+ ? {
507
+ ...event.layout,
508
+ text: wrappedText,
509
+ }
510
+ : undefined
511
+
512
+ return {
513
+ ...event,
514
+ // Store original text with placeholders for debugging
515
+ _originalText: text,
516
+ text: wrappedText,
517
+ layout: processedLayout,
518
+ _processed: true,
519
+ _profile: this.profile.id,
520
+ _lines: lines,
521
+ }
522
+ }
523
+
524
+ /**
525
+ * Process text_rows layout
526
+ */
527
+ private processTextRows(
528
+ event: DisplayEvent,
529
+ layout: DisplayEvent | NonNullable<DisplayEvent["layout"]>,
530
+ ): ProcessedDisplayEvent {
531
+ const textField = layout.text
532
+ const rows: string[] = Array.isArray(textField) ? textField : []
533
+
534
+ // Replace placeholders and wrap each row
535
+ const breakMode = this.getEventBreakMode(event, layout)
536
+ const wrappedRows = rows.map((row: string) => {
537
+ const rowWithPlaceholders = replacePlaceholders(row)
538
+ const lines = this.wrapText(rowWithPlaceholders, breakMode ? {breakMode} : undefined)
539
+ return lines.join("\n")
540
+ })
541
+
542
+ const processedLayout = event.layout
543
+ ? {
544
+ ...event.layout,
545
+ text: wrappedRows as string | string[],
546
+ }
547
+ : undefined
548
+
549
+ return {
550
+ ...event,
551
+ text: wrappedRows as string | string[],
552
+ layout: processedLayout,
553
+ _processed: true,
554
+ _profile: this.profile.id,
555
+ }
556
+ }
557
+
558
+ /**
559
+ * Process reference_card layout
560
+ */
561
+ private processReferenceCard(
562
+ event: DisplayEvent,
563
+ layout: DisplayEvent | NonNullable<DisplayEvent["layout"]>,
564
+ ): ProcessedDisplayEvent {
565
+ const title = layout.title || ""
566
+ // reference_card text is always string, not string[]
567
+ const rawText = layout.text
568
+ const text = typeof rawText === "string" ? rawText : ""
569
+
570
+ // Replace placeholders BEFORE wrapping
571
+ const titleWithPlaceholders = replacePlaceholders(title)
572
+ const textWithPlaceholders = replacePlaceholders(text)
573
+ const breakMode = this.getEventBreakMode(event, layout)
574
+
575
+ // Wrap title and text separately
576
+ // Title typically gets 1 line, text gets remaining lines
577
+ const wrappedTitle = this.wrapText(titleWithPlaceholders, {maxLines: 1, ...(breakMode ? {breakMode} : {})})
578
+ const wrappedText = this.wrapText(textWithPlaceholders, {
579
+ maxLines: this.profile.maxLines - 1,
580
+ ...(breakMode ? {breakMode} : {}),
581
+ })
582
+
583
+ const processedLayout = event.layout
584
+ ? {
585
+ ...event.layout,
586
+ title: wrappedTitle.join("\n"),
587
+ text: wrappedText.join("\n"),
588
+ }
589
+ : undefined
590
+
591
+ return {
592
+ ...event,
593
+ title: wrappedTitle.join("\n"),
594
+ text: wrappedText.join("\n"),
595
+ layout: processedLayout,
596
+ _processed: true,
597
+ _profile: this.profile.id,
598
+ }
599
+ }
600
+
601
+ /**
602
+ * Process double_text_wall layout
603
+ *
604
+ * Uses ColumnComposer to create a fully composed string with both columns
605
+ * merged line-by-line with pixel-precise space alignment. This is the single
606
+ * source of truth for double_text_wall composition, replacing duplicate
607
+ * implementations in native iOS (G1Text.swift) and Android (G1Text.kt).
608
+ *
609
+ * The composed text is sent to native as a regular text_wall - native just
610
+ * chunks and sends it without any re-wrapping or column composition.
611
+ */
612
+ private processDoubleTextWall(
613
+ event: DisplayEvent,
614
+ layout: DisplayEvent | NonNullable<DisplayEvent["layout"]>,
615
+ ): ProcessedDisplayEvent {
616
+ const leftText = layout.topText || ""
617
+ const rightText = layout.bottomText || ""
618
+
619
+ // Replace placeholders BEFORE composition (so we measure actual content)
620
+ const leftTextWithPlaceholders = replacePlaceholders(leftText)
621
+ const rightTextWithPlaceholders = replacePlaceholders(rightText)
622
+ const breakMode = this.getEventBreakMode(event, layout)
623
+ const composer =
624
+ breakMode && breakMode !== this.options.breakMode ? new ColumnComposer(this.profile, breakMode) : this.composer
625
+
626
+ // Use ColumnComposer for pixel-precise column composition
627
+ const result = composer.composeDoubleTextWall(leftTextWithPlaceholders, rightTextWithPlaceholders)
628
+
629
+ if (this.options.debug) {
630
+ console.log(`[DisplayProcessor] double_text_wall composed:`)
631
+ console.log(` Left lines: ${result.leftLines.length}`)
632
+ console.log(` Right lines: ${result.rightLines.length}`)
633
+ console.log(` Config: ${JSON.stringify(result.config)}`)
634
+ }
635
+
636
+ // The composed text is a single string with both columns merged
637
+ // Native will receive this as a text_wall and just chunk & send it
638
+ const processedLayout = event.layout
639
+ ? {
640
+ ...event.layout,
641
+ // Keep original topText/bottomText for reference but add composed text
642
+ topText: leftTextWithPlaceholders,
643
+ bottomText: rightTextWithPlaceholders,
644
+ // The composed text is what native should actually display
645
+ _composedText: result.composedText,
646
+ }
647
+ : undefined
648
+
649
+ return {
650
+ ...event,
651
+ // Override the layout type to text_wall since we've pre-composed the columns
652
+ // This tells native to use sendTextWall instead of sendDoubleTextWall
653
+ layoutType: "text_wall" as DisplayLayoutType,
654
+ text: result.composedText,
655
+ // Keep original values for debugging/preview (with placeholders replaced)
656
+ topText: leftTextWithPlaceholders,
657
+ bottomText: rightTextWithPlaceholders,
658
+ // Store original values with placeholders for debugging
659
+ _originalTopText: leftText,
660
+ _originalBottomText: rightText,
661
+ layout: processedLayout
662
+ ? {
663
+ ...processedLayout,
664
+ layoutType: "text_wall" as DisplayLayoutType,
665
+ text: result.composedText,
666
+ }
667
+ : undefined,
668
+ _processed: true,
669
+ _profile: this.profile.id,
670
+ _originalLayoutType: "double_text_wall",
671
+ _composedColumns: {
672
+ leftLines: result.leftLines,
673
+ rightLines: result.rightLines,
674
+ config: result.config,
675
+ },
676
+ }
677
+ }
678
+
679
+ // ===========================================================================
680
+ // Text Wrapping Utilities
681
+ // ===========================================================================
682
+
683
+ /**
684
+ * Wrap text using the current profile
685
+ *
686
+ * @param text - Text to wrap
687
+ * @param options - Optional override options
688
+ * @returns Array of wrapped lines
689
+ */
690
+ public wrapText(text: string, options?: WrapOptions): string[] {
691
+ if (!text) return [""]
692
+
693
+ const result = this.wrapper.wrap(text, options)
694
+ return result.lines
695
+ }
696
+
697
+ private getEventBreakMode(
698
+ event: DisplayEvent,
699
+ layout: DisplayEvent | NonNullable<DisplayEvent["layout"]>,
700
+ ): BreakMode | undefined {
701
+ const breakMode = layout.breakMode ?? event.breakMode
702
+ return isBreakMode(breakMode) ? breakMode : undefined
703
+ }
704
+
705
+ /**
706
+ * Measure the pixel width of text
707
+ *
708
+ * @param text - Text to measure
709
+ * @returns Width in pixels
710
+ */
711
+ public measureText(text: string): number {
712
+ return this.measurer.measureText(text)
713
+ }
714
+
715
+ /**
716
+ * Check if text fits on a single line
717
+ *
718
+ * @param text - Text to check
719
+ * @returns true if text fits without wrapping
720
+ */
721
+ public fitsOnSingleLine(text: string): boolean {
722
+ return this.measurer.measureText(text) <= this.profile.displayWidthPx
723
+ }
724
+
725
+ /**
726
+ * Get the display width in pixels
727
+ */
728
+ public getDisplayWidth(): number {
729
+ return this.profile.displayWidthPx
730
+ }
731
+
732
+ /**
733
+ * Get the maximum number of lines
734
+ */
735
+ public getMaxLines(): number {
736
+ return this.profile.maxLines
737
+ }
738
+
739
+ /**
740
+ * Get detailed text measurement
741
+ */
742
+ public measureTextDetailed(text: string) {
743
+ return this.measurer.measureTextDetailed(text)
744
+ }
745
+
746
+ // ===========================================================================
747
+ // Break Mode Control
748
+ // ===========================================================================
749
+
750
+ /**
751
+ * Set the break mode for text wrapping
752
+ *
753
+ * @param breakMode - 'character' | 'word' | 'strict-word'
754
+ */
755
+ public setBreakMode(breakMode: BreakMode): void {
756
+ if (this.options.breakMode === breakMode) return
757
+
758
+ this.options.breakMode = breakMode
759
+ this.updateProfile(this.profile) // Recreate wrapper with new break mode
760
+
761
+ if (this.options.debug) {
762
+ console.log(`[DisplayProcessor] Break mode set to: ${breakMode}`)
763
+ }
764
+ }
765
+
766
+ /**
767
+ * Get the current break mode
768
+ */
769
+ public getBreakMode(): BreakMode {
770
+ return this.options.breakMode || "character"
771
+ }
772
+ }
773
+
774
+ export const displayProcessor = DisplayProcessor.getInstance()
775
+ export default displayProcessor