@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,145 @@
1
+ import { Platform } from "react-native";
2
+ import { check, request, PERMISSIONS, RESULTS } from "react-native-permissions";
3
+ import CrustModule from "@mentra/crust";
4
+ import { deriveGalleryDisplayName } from "./galleryDisplayName";
5
+ /**
6
+ * MediaLibraryPermissions - Handles save-only permissions for camera roll
7
+ *
8
+ * Platform behavior:
9
+ * - iOS: Uses PHOTO_LIBRARY (read-write) so we can manage the MentraOS album
10
+ * - Android 10+ (API 29+): No permission needed to save your own files to MediaStore
11
+ * - Android 9-: Uses WRITE_EXTERNAL_STORAGE (legacy)
12
+ */
13
+ export class MediaLibraryPermissions {
14
+ /** Limited iOS access cannot see historical, unselected assets for duplicate reconciliation. */
15
+ static async hasLimitedAccess() {
16
+ if (Platform.OS !== "ios")
17
+ return false;
18
+ try {
19
+ return (await check(PERMISSIONS.IOS.PHOTO_LIBRARY)) === RESULTS.LIMITED;
20
+ }
21
+ catch (error) {
22
+ console.error("[MediaLibrary] Error checking limited-library access:", error);
23
+ // Conservatively block legacy reconciliation when the scope cannot be verified.
24
+ return true;
25
+ }
26
+ }
27
+ /**
28
+ * Check if we have permission to save to the camera roll
29
+ * Note: On Android 10+, this always returns true since no permission is needed
30
+ */
31
+ static async checkPermission() {
32
+ try {
33
+ if (Platform.OS === "ios") {
34
+ const status = await check(PERMISSIONS.IOS.PHOTO_LIBRARY);
35
+ return status === RESULTS.GRANTED || status === RESULTS.LIMITED;
36
+ }
37
+ if (Platform.OS === "android") {
38
+ // Android 10+ (API 29+): No permission needed to save your own files
39
+ if (Platform.Version >= 29) {
40
+ return true;
41
+ }
42
+ // Android 9 and below: Check legacy write permission
43
+ const status = await check(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE);
44
+ return status === RESULTS.GRANTED;
45
+ }
46
+ return false;
47
+ }
48
+ catch (error) {
49
+ console.error("[MediaLibrary] Error checking permission:", error);
50
+ // On error, assume we can try (Android 10+ doesn't need permission anyway)
51
+ return Platform.OS === "android" && Platform.Version >= 29;
52
+ }
53
+ }
54
+ /**
55
+ * Request permission to save to the camera roll
56
+ * Note: On Android 10+, this always returns true since no permission is needed
57
+ */
58
+ static async requestPermission() {
59
+ try {
60
+ if (Platform.OS === "ios") {
61
+ const status = await request(PERMISSIONS.IOS.PHOTO_LIBRARY);
62
+ return status === RESULTS.GRANTED || status === RESULTS.LIMITED;
63
+ }
64
+ if (Platform.OS === "android") {
65
+ // Android 10+ (API 29+): No permission needed to save your own files
66
+ if (Platform.Version >= 29) {
67
+ return true;
68
+ }
69
+ // Android 9 and below: Request legacy write permission
70
+ const status = await request(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE);
71
+ return status === RESULTS.GRANTED;
72
+ }
73
+ return false;
74
+ }
75
+ catch (error) {
76
+ console.error("[MediaLibrary] Error requesting permission:", error);
77
+ // On error, assume we can try (Android 10+ doesn't need permission anyway)
78
+ return Platform.OS === "android" && Platform.Version >= 29;
79
+ }
80
+ }
81
+ /**
82
+ * Save a file to the photo library in a glasses-specific location (MentraOS album on iOS;
83
+ * Pictures/MentraOS or Movies/MentraOS on Android 10+).
84
+ * On Android 10+, this works without any permission.
85
+ *
86
+ * IMPORTANT: This method sets the DATE_TAKEN (Android) or creation date (iOS)
87
+ * metadata to the original capture time, so gallery apps show the correct date.
88
+ * Also saves files in chronological order for proper "date added" ordering.
89
+ *
90
+ * @param filePath - Path to the file to save
91
+ * @param creationTime - Optional creation/capture time in milliseconds (Unix timestamp)
92
+ */
93
+ static async saveToLibrary(filePath, creationTime) {
94
+ return (await this.saveToLibraryWithReceipt(filePath, creationTime)).success;
95
+ }
96
+ /** Save and return the durable MediaStore/PhotoKit identifier used as the export receipt. */
97
+ static async saveToLibraryWithReceipt(filePath, creationTime) {
98
+ const platform = Platform.OS === "ios" || Platform.OS === "android" ? Platform.OS : "unknown";
99
+ try {
100
+ // On Android 10+, we can save without permission
101
+ // On iOS and older Android, check permission first
102
+ if (!(Platform.OS === "android" && Platform.Version >= 29)) {
103
+ const hasPermission = await this.checkPermission();
104
+ if (!hasPermission) {
105
+ // Try requesting permission one more time
106
+ const granted = await this.requestPermission();
107
+ if (!granted) {
108
+ console.warn("[MediaLibrary] No permission to save to library - photos saved to app storage only");
109
+ return { success: false, platform, error: "permission denied" };
110
+ }
111
+ }
112
+ }
113
+ // Remove file:// prefix if present
114
+ const cleanPath = filePath.replace("file://", "");
115
+ const displayName = deriveGalleryDisplayName(cleanPath);
116
+ // Use native module to save with proper DATE_TAKEN / creation date metadata
117
+ // This ensures gallery apps show the correct capture date, not the sync date
118
+ const result = await CrustModule.saveToGalleryWithDate(cleanPath, creationTime, displayName);
119
+ if (result.success) {
120
+ if (creationTime) {
121
+ const captureDate = new Date(creationTime);
122
+ console.log(`[MediaLibrary] Saved to camera roll with DATE_TAKEN: ${cleanPath} (captured: ${captureDate.toISOString()})`);
123
+ }
124
+ else {
125
+ console.log(`[MediaLibrary] Saved to camera roll: ${cleanPath}`);
126
+ }
127
+ return {
128
+ success: true,
129
+ platform,
130
+ uri: result.uri,
131
+ identifier: result.identifier,
132
+ };
133
+ }
134
+ else {
135
+ console.error(`[MediaLibrary] Failed to save to library: ${result.error}`);
136
+ return { success: false, platform, error: result.error || "native export failed" };
137
+ }
138
+ }
139
+ catch (error) {
140
+ console.error("[MediaLibrary] Error saving to library:", error);
141
+ return { success: false, platform, error: error instanceof Error ? error.message : String(error) };
142
+ }
143
+ }
144
+ }
145
+ //# sourceMappingURL=MediaLibraryPermissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaLibraryPermissions.js","sourceRoot":"","sources":["../../../src/utils/permissions/MediaLibraryPermissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,cAAc,CAAA;AACrC,OAAO,EAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAC,MAAM,0BAA0B,CAAA;AAE7E,OAAO,WAAW,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAC,wBAAwB,EAAC,MAAM,sBAAsB,CAAA;AAU7D;;;;;;;GAOG;AACH,MAAM,OAAO,uBAAuB;IAClC,gGAAgG;IAChG,MAAM,CAAC,KAAK,CAAC,gBAAgB;QAC3B,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK;YAAE,OAAO,KAAK,CAAA;QACvC,IAAI,CAAC;YACH,OAAO,CAAC,MAAM,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK,OAAO,CAAC,OAAO,CAAA;QACzE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,uDAAuD,EAAE,KAAK,CAAC,CAAA;YAC7E,gFAAgF;YAChF,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,eAAe;QAC1B,IAAI,CAAC;YACH,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;gBACzD,OAAO,MAAM,KAAK,OAAO,CAAC,OAAO,IAAI,MAAM,KAAK,OAAO,CAAC,OAAO,CAAA;YACjE,CAAC;YAED,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;gBAC9B,qEAAqE;gBACrE,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;oBAC3B,OAAO,IAAI,CAAA;gBACb,CAAC;gBACD,qDAAqD;gBACrD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAA;gBACtE,OAAO,MAAM,KAAK,OAAO,CAAC,OAAO,CAAA;YACnC,CAAC;YAED,OAAO,KAAK,CAAA;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAA;YACjE,2EAA2E;YAC3E,OAAO,QAAQ,CAAC,EAAE,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAA;QAC5D,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,iBAAiB;QAC5B,IAAI,CAAC;YACH,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;gBAC3D,OAAO,MAAM,KAAK,OAAO,CAAC,OAAO,IAAI,MAAM,KAAK,OAAO,CAAC,OAAO,CAAA;YACjE,CAAC;YAED,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;gBAC9B,qEAAqE;gBACrE,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;oBAC3B,OAAO,IAAI,CAAA;gBACb,CAAC;gBACD,uDAAuD;gBACvD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAA;gBACxE,OAAO,MAAM,KAAK,OAAO,CAAC,OAAO,CAAA;YACnC,CAAC;YAED,OAAO,KAAK,CAAA;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,KAAK,CAAC,CAAA;YACnE,2EAA2E;YAC3E,OAAO,QAAQ,CAAC,EAAE,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAA;QAC5D,CAAC;IACH,CAAC;IAED;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,QAAgB,EAAE,YAAqB;QAChE,OAAO,CAAC,MAAM,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAA;IAC9E,CAAC;IAED,6FAA6F;IAC7F,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,QAAgB,EAAE,YAAqB;QAC3E,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,KAAK,KAAK,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;QAC7F,IAAI,CAAC;YACH,iDAAiD;YACjD,mDAAmD;YACnD,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC3D,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAA;gBAClD,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnB,0CAA0C;oBAC1C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAA;oBAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,OAAO,CAAC,IAAI,CAAC,oFAAoF,CAAC,CAAA;wBAClG,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,mBAAmB,EAAC,CAAA;oBAC/D,CAAC;gBACH,CAAC;YACH,CAAC;YAED,mCAAmC;YACnC,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;YACjD,MAAM,WAAW,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAA;YAEvD,4EAA4E;YAC5E,6EAA6E;YAC7E,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,qBAAqB,CAAC,SAAS,EAAE,YAAY,EAAE,WAAW,CAAC,CAAA;YAE5F,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,IAAI,YAAY,EAAE,CAAC;oBACjB,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAA;oBAC1C,OAAO,CAAC,GAAG,CACT,wDAAwD,SAAS,eAAe,WAAW,CAAC,WAAW,EAAE,GAAG,CAC7G,CAAA;gBACH,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,wCAAwC,SAAS,EAAE,CAAC,CAAA;gBAClE,CAAC;gBACD,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,QAAQ;oBACR,GAAG,EAAE,MAAM,CAAC,GAAG;oBACf,UAAU,EAAE,MAAM,CAAC,UAAU;iBAC9B,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,6CAA6C,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;gBAC1E,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,sBAAsB,EAAC,CAAA;YAClF,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAA;YAC/D,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAC,CAAA;QAClG,CAAC;IACH,CAAC;CACF","sourcesContent":["import {Platform} from \"react-native\"\nimport {check, request, PERMISSIONS, RESULTS} from \"react-native-permissions\"\n\nimport CrustModule from \"@mentra/crust\"\n\nimport {deriveGalleryDisplayName} from \"./galleryDisplayName\"\n\nexport interface MediaLibrarySaveReceipt {\n success: boolean\n platform: \"ios\" | \"android\" | \"unknown\"\n uri?: string\n identifier?: string\n error?: string\n}\n\n/**\n * MediaLibraryPermissions - Handles save-only permissions for camera roll\n *\n * Platform behavior:\n * - iOS: Uses PHOTO_LIBRARY (read-write) so we can manage the MentraOS album\n * - Android 10+ (API 29+): No permission needed to save your own files to MediaStore\n * - Android 9-: Uses WRITE_EXTERNAL_STORAGE (legacy)\n */\nexport class MediaLibraryPermissions {\n /** Limited iOS access cannot see historical, unselected assets for duplicate reconciliation. */\n static async hasLimitedAccess(): Promise<boolean> {\n if (Platform.OS !== \"ios\") return false\n try {\n return (await check(PERMISSIONS.IOS.PHOTO_LIBRARY)) === RESULTS.LIMITED\n } catch (error) {\n console.error(\"[MediaLibrary] Error checking limited-library access:\", error)\n // Conservatively block legacy reconciliation when the scope cannot be verified.\n return true\n }\n }\n\n /**\n * Check if we have permission to save to the camera roll\n * Note: On Android 10+, this always returns true since no permission is needed\n */\n static async checkPermission(): Promise<boolean> {\n try {\n if (Platform.OS === \"ios\") {\n const status = await check(PERMISSIONS.IOS.PHOTO_LIBRARY)\n return status === RESULTS.GRANTED || status === RESULTS.LIMITED\n }\n\n if (Platform.OS === \"android\") {\n // Android 10+ (API 29+): No permission needed to save your own files\n if (Platform.Version >= 29) {\n return true\n }\n // Android 9 and below: Check legacy write permission\n const status = await check(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE)\n return status === RESULTS.GRANTED\n }\n\n return false\n } catch (error) {\n console.error(\"[MediaLibrary] Error checking permission:\", error)\n // On error, assume we can try (Android 10+ doesn't need permission anyway)\n return Platform.OS === \"android\" && Platform.Version >= 29\n }\n }\n\n /**\n * Request permission to save to the camera roll\n * Note: On Android 10+, this always returns true since no permission is needed\n */\n static async requestPermission(): Promise<boolean> {\n try {\n if (Platform.OS === \"ios\") {\n const status = await request(PERMISSIONS.IOS.PHOTO_LIBRARY)\n return status === RESULTS.GRANTED || status === RESULTS.LIMITED\n }\n\n if (Platform.OS === \"android\") {\n // Android 10+ (API 29+): No permission needed to save your own files\n if (Platform.Version >= 29) {\n return true\n }\n // Android 9 and below: Request legacy write permission\n const status = await request(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE)\n return status === RESULTS.GRANTED\n }\n\n return false\n } catch (error) {\n console.error(\"[MediaLibrary] Error requesting permission:\", error)\n // On error, assume we can try (Android 10+ doesn't need permission anyway)\n return Platform.OS === \"android\" && Platform.Version >= 29\n }\n }\n\n /**\n * Save a file to the photo library in a glasses-specific location (MentraOS album on iOS;\n * Pictures/MentraOS or Movies/MentraOS on Android 10+).\n * On Android 10+, this works without any permission.\n *\n * IMPORTANT: This method sets the DATE_TAKEN (Android) or creation date (iOS)\n * metadata to the original capture time, so gallery apps show the correct date.\n * Also saves files in chronological order for proper \"date added\" ordering.\n *\n * @param filePath - Path to the file to save\n * @param creationTime - Optional creation/capture time in milliseconds (Unix timestamp)\n */\n static async saveToLibrary(filePath: string, creationTime?: number): Promise<boolean> {\n return (await this.saveToLibraryWithReceipt(filePath, creationTime)).success\n }\n\n /** Save and return the durable MediaStore/PhotoKit identifier used as the export receipt. */\n static async saveToLibraryWithReceipt(filePath: string, creationTime?: number): Promise<MediaLibrarySaveReceipt> {\n const platform = Platform.OS === \"ios\" || Platform.OS === \"android\" ? Platform.OS : \"unknown\"\n try {\n // On Android 10+, we can save without permission\n // On iOS and older Android, check permission first\n if (!(Platform.OS === \"android\" && Platform.Version >= 29)) {\n const hasPermission = await this.checkPermission()\n if (!hasPermission) {\n // Try requesting permission one more time\n const granted = await this.requestPermission()\n if (!granted) {\n console.warn(\"[MediaLibrary] No permission to save to library - photos saved to app storage only\")\n return {success: false, platform, error: \"permission denied\"}\n }\n }\n }\n\n // Remove file:// prefix if present\n const cleanPath = filePath.replace(\"file://\", \"\")\n const displayName = deriveGalleryDisplayName(cleanPath)\n\n // Use native module to save with proper DATE_TAKEN / creation date metadata\n // This ensures gallery apps show the correct capture date, not the sync date\n const result = await CrustModule.saveToGalleryWithDate(cleanPath, creationTime, displayName)\n\n if (result.success) {\n if (creationTime) {\n const captureDate = new Date(creationTime)\n console.log(\n `[MediaLibrary] Saved to camera roll with DATE_TAKEN: ${cleanPath} (captured: ${captureDate.toISOString()})`,\n )\n } else {\n console.log(`[MediaLibrary] Saved to camera roll: ${cleanPath}`)\n }\n return {\n success: true,\n platform,\n uri: result.uri,\n identifier: result.identifier,\n }\n } else {\n console.error(`[MediaLibrary] Failed to save to library: ${result.error}`)\n return {success: false, platform, error: result.error || \"native export failed\"}\n }\n } catch (error) {\n console.error(\"[MediaLibrary] Error saving to library:\", error)\n return {success: false, platform, error: error instanceof Error ? error.message : String(error)}\n }\n }\n}\n"]}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Derive a unique MediaStore display name for camera-roll saves.
3
+ *
4
+ * Capture downloads use folder layout `IMG_xxx/base.jpg` (or `VID_xxx/base.mp4`).
5
+ * Using the leaf filename (`base.jpg`) causes MediaStore collisions on Android.
6
+ */
7
+ export declare function deriveGalleryDisplayName(filePath: string): string;
8
+ //# sourceMappingURL=galleryDisplayName.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"galleryDisplayName.d.ts","sourceRoot":"","sources":["../../../src/utils/permissions/galleryDisplayName.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAmBjE"}
@@ -0,0 +1,25 @@
1
+ const CAPTURE_FOLDER_PATTERN = /^(IMG|VID)_/;
2
+ /**
3
+ * Derive a unique MediaStore display name for camera-roll saves.
4
+ *
5
+ * Capture downloads use folder layout `IMG_xxx/base.jpg` (or `VID_xxx/base.mp4`).
6
+ * Using the leaf filename (`base.jpg`) causes MediaStore collisions on Android.
7
+ */
8
+ export function deriveGalleryDisplayName(filePath) {
9
+ const cleanPath = filePath.replace("file://", "");
10
+ const lastSlash = cleanPath.lastIndexOf("/");
11
+ if (lastSlash < 0) {
12
+ return cleanPath;
13
+ }
14
+ const fileName = cleanPath.substring(lastSlash + 1);
15
+ const parentDir = cleanPath.substring(0, lastSlash);
16
+ const parentSlash = parentDir.lastIndexOf("/");
17
+ const parentName = parentSlash < 0 ? parentDir : parentDir.substring(parentSlash + 1);
18
+ if (!CAPTURE_FOLDER_PATTERN.test(parentName)) {
19
+ return fileName;
20
+ }
21
+ const isVideo = /\.(mp4|mov|m4v|avi)(\.|$)/i.test(fileName);
22
+ const extension = isVideo ? "mp4" : "jpg";
23
+ return `${parentName}.${extension}`;
24
+ }
25
+ //# sourceMappingURL=galleryDisplayName.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"galleryDisplayName.js","sourceRoot":"","sources":["../../../src/utils/permissions/galleryDisplayName.ts"],"names":[],"mappings":"AAAA,MAAM,sBAAsB,GAAG,aAAa,CAAA;AAE5C;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,QAAgB;IACvD,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;IACjD,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IAC5C,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IACnD,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;IACnD,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IAC9C,MAAM,UAAU,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC,CAAA;IAErF,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC3D,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;IACzC,OAAO,GAAG,UAAU,IAAI,SAAS,EAAE,CAAA;AACrC,CAAC","sourcesContent":["const CAPTURE_FOLDER_PATTERN = /^(IMG|VID)_/\n\n/**\n * Derive a unique MediaStore display name for camera-roll saves.\n *\n * Capture downloads use folder layout `IMG_xxx/base.jpg` (or `VID_xxx/base.mp4`).\n * Using the leaf filename (`base.jpg`) causes MediaStore collisions on Android.\n */\nexport function deriveGalleryDisplayName(filePath: string): string {\n const cleanPath = filePath.replace(\"file://\", \"\")\n const lastSlash = cleanPath.lastIndexOf(\"/\")\n if (lastSlash < 0) {\n return cleanPath\n }\n\n const fileName = cleanPath.substring(lastSlash + 1)\n const parentDir = cleanPath.substring(0, lastSlash)\n const parentSlash = parentDir.lastIndexOf(\"/\")\n const parentName = parentSlash < 0 ? parentDir : parentDir.substring(parentSlash + 1)\n\n if (!CAPTURE_FOLDER_PATTERN.test(parentName)) {\n return fileName\n }\n\n const isVideo = /\\.(mp4|mov|m4v|avi)(\\.|$)/i.test(fileName)\n const extension = isVideo ? \"mp4\" : \"jpg\"\n return `${parentName}.${extension}`\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export { storage, StorageValueNotFoundError } from "./storage";
2
+ export { printDirectory } from "./zip";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,yBAAyB,EAAC,MAAM,WAAW,CAAA;AAC5D,OAAO,EAAC,cAAc,EAAC,MAAM,OAAO,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { storage, StorageValueNotFoundError } from "./storage";
2
+ export { printDirectory } from "./zip";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,yBAAyB,EAAC,MAAM,WAAW,CAAA;AAC5D,OAAO,EAAC,cAAc,EAAC,MAAM,OAAO,CAAA","sourcesContent":["export {storage, StorageValueNotFoundError} from \"./storage\"\nexport {printDirectory} from \"./zip\"\n"]}
@@ -0,0 +1,24 @@
1
+ import { Result } from "typesafe-ts";
2
+ /**
3
+ * Thrown by load() when the key has no stored value. Callers that treat a
4
+ * missing key as an expected state (e.g. first run) should branch on
5
+ * `instanceof StorageValueNotFoundError` rather than matching the message.
6
+ */
7
+ export declare class StorageValueNotFoundError extends Error {
8
+ constructor(key: string);
9
+ }
10
+ declare class MMKVStorage {
11
+ private _store?;
12
+ private get store();
13
+ save(key: string, value: unknown): Result<void, Error>;
14
+ load<T>(key: string): Result<T, Error>;
15
+ private saveString;
16
+ getAllKeys(): string[];
17
+ removeMultiple(keys: string[]): Result<void, Error>;
18
+ loadSubKeys(key: string): Result<Record<string, unknown>, Error>;
19
+ remove(key: string): Result<void, Error>;
20
+ clearAll(): Result<void, Error>;
21
+ }
22
+ export declare const storage: MMKVStorage;
23
+ export {};
24
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/utils/storage/storage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,MAAM,EAAC,MAAM,aAAa,CAAA;AAEjD;;;;GAIG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,GAAG,EAAE,MAAM;CAIxB;AAED,cAAM,WAAW;IACf,OAAO,CAAC,MAAM,CAAC,CAAM;IAErB,OAAO,KAAK,KAAK,GAKhB;IAEM,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAItD,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC;IAW7C,OAAO,CAAC,UAAU;IAKX,UAAU,IAAI,MAAM,EAAE;IAItB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAenD,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC;IAwBhE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAKxC,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;CAIvC;AAED,eAAO,MAAM,OAAO,aAAoB,CAAA"}
@@ -0,0 +1,85 @@
1
+ // @ts-nocheck
2
+ import { createMMKV } from "react-native-mmkv";
3
+ import { result as Res } from "typesafe-ts";
4
+ /**
5
+ * Thrown by load() when the key has no stored value. Callers that treat a
6
+ * missing key as an expected state (e.g. first run) should branch on
7
+ * `instanceof StorageValueNotFoundError` rather than matching the message.
8
+ */
9
+ export class StorageValueNotFoundError extends Error {
10
+ constructor(key) {
11
+ super(`No value found for ${key}`);
12
+ this.name = "StorageValueNotFoundError";
13
+ }
14
+ }
15
+ class MMKVStorage {
16
+ _store;
17
+ get store() {
18
+ if (!this._store) {
19
+ this._store = createMMKV();
20
+ }
21
+ return this._store;
22
+ }
23
+ save(key, value) {
24
+ return this.saveString(key, JSON.stringify(value));
25
+ }
26
+ load(key) {
27
+ return Res.try(() => {
28
+ const loadedString = this.store.getString(key) ?? "";
29
+ if (loadedString === "") {
30
+ throw new StorageValueNotFoundError(key);
31
+ }
32
+ const value = JSON.parse(loadedString);
33
+ return value;
34
+ });
35
+ }
36
+ saveString(key, value) {
37
+ this.store.set(key, value);
38
+ return Res.ok(undefined);
39
+ }
40
+ getAllKeys() {
41
+ return this.store.getAllKeys();
42
+ }
43
+ removeMultiple(keys) {
44
+ let success = true;
45
+ for (const key of keys) {
46
+ const res = this.store.remove(key);
47
+ if (!res) {
48
+ success = false;
49
+ }
50
+ }
51
+ if (!success) {
52
+ console.error("Failed to remove one or more keys");
53
+ return Res.error(new Error("Failed to remove one or more keys"));
54
+ }
55
+ return Res.ok(undefined);
56
+ }
57
+ loadSubKeys(key) {
58
+ return Res.try(() => {
59
+ // return the key value pair of any keys that start with the given key and contain a colon:
60
+ const keys = this.store.getAllKeys();
61
+ const subKeys = keys.filter((k) => k.startsWith(key) && k.includes(":"));
62
+ if (subKeys.length === 0) {
63
+ throw new Error(`No subkeys found for ${key}`);
64
+ }
65
+ let subKeysObject = {};
66
+ for (const subKey of subKeys) {
67
+ const res = this.load(subKey);
68
+ if (res.is_ok()) {
69
+ subKeysObject[subKey] = res.value;
70
+ }
71
+ }
72
+ return subKeysObject;
73
+ });
74
+ }
75
+ remove(key) {
76
+ this.store.remove(key);
77
+ return Res.ok(undefined);
78
+ }
79
+ clearAll() {
80
+ this.store.clearAll();
81
+ return Res.ok(undefined);
82
+ }
83
+ }
84
+ export const storage = new MMKVStorage();
85
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/utils/storage/storage.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport {createMMKV, type MMKV} from \"react-native-mmkv\"\nimport {result as Res, Result} from \"typesafe-ts\"\n\n/**\n * Thrown by load() when the key has no stored value. Callers that treat a\n * missing key as an expected state (e.g. first run) should branch on\n * `instanceof StorageValueNotFoundError` rather than matching the message.\n */\nexport class StorageValueNotFoundError extends Error {\n constructor(key: string) {\n super(`No value found for ${key}`)\n this.name = \"StorageValueNotFoundError\"\n }\n}\n\nclass MMKVStorage {\n private _store?: MMKV\n\n private get store(): MMKV {\n if (!this._store) {\n this._store = createMMKV()\n }\n return this._store\n }\n\n public save(key: string, value: unknown): Result<void, Error> {\n return this.saveString(key, JSON.stringify(value))\n }\n\n public load<T>(key: string): Result<T, Error> {\n return Res.try(() => {\n const loadedString = this.store.getString(key) ?? \"\"\n if (loadedString === \"\") {\n throw new StorageValueNotFoundError(key)\n }\n const value = JSON.parse(loadedString) as T\n return value\n })\n }\n\n private saveString(key: string, value: string): Result<void, Error> {\n this.store.set(key, value)\n return Res.ok(undefined)\n }\n\n public getAllKeys(): string[] {\n return this.store.getAllKeys()\n }\n\n public removeMultiple(keys: string[]): Result<void, Error> {\n let success = true\n for (const key of keys) {\n const res = this.store.remove(key)\n if (!res) {\n success = false\n }\n }\n if (!success) {\n console.error(\"Failed to remove one or more keys\")\n return Res.error(new Error(\"Failed to remove one or more keys\"))\n }\n return Res.ok(undefined)\n }\n\n public loadSubKeys(key: string): Result<Record<string, unknown>, Error> {\n return Res.try(() => {\n // return the key value pair of any keys that start with the given key and contain a colon:\n const keys = this.store.getAllKeys()\n\n const subKeys = keys.filter((k) => k.startsWith(key) && k.includes(\":\"))\n\n if (subKeys.length === 0) {\n throw new Error(`No subkeys found for ${key}`)\n }\n\n let subKeysObject: Record<string, unknown> = {}\n\n for (const subKey of subKeys) {\n const res = this.load(subKey)\n if (res.is_ok()) {\n subKeysObject[subKey] = res.value\n }\n }\n\n return subKeysObject\n })\n }\n\n public remove(key: string): Result<void, Error> {\n this.store.remove(key)\n return Res.ok(undefined)\n }\n\n public clearAll(): Result<void, Error> {\n this.store.clearAll()\n return Res.ok(undefined)\n }\n}\n\nexport const storage = new MMKVStorage()\n"]}
@@ -0,0 +1,3 @@
1
+ import { Directory } from "expo-file-system";
2
+ export declare function printDirectory(directory: Directory, indent?: number): void;
3
+ //# sourceMappingURL=zip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zip.d.ts","sourceRoot":"","sources":["../../../src/utils/storage/zip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAA;AAE1C,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,GAAE,MAAU,QAUtE"}
@@ -0,0 +1,14 @@
1
+ import { Directory } from "expo-file-system";
2
+ export function printDirectory(directory, indent = 0) {
3
+ console.log(`${" ".repeat(indent)} + ${directory.name}`);
4
+ const contents = directory.list();
5
+ for (const item of contents) {
6
+ if (item instanceof Directory) {
7
+ printDirectory(item, indent + 2);
8
+ }
9
+ else {
10
+ console.log(`${" ".repeat(indent + 2)} - ${item.name} (${item.size} bytes)`);
11
+ }
12
+ }
13
+ }
14
+ //# sourceMappingURL=zip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zip.js","sourceRoot":"","sources":["../../../src/utils/storage/zip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAA;AAE1C,MAAM,UAAU,cAAc,CAAC,SAAoB,EAAE,SAAiB,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC,CAAA;IACxD,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,CAAA;IACjC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,IAAI,YAAY,SAAS,EAAE,CAAC;YAC9B,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,CAAA;QAClC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,SAAS,CAAC,CAAA;QAC9E,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import {Directory} from \"expo-file-system\"\n\nexport function printDirectory(directory: Directory, indent: number = 0) {\n console.log(`${\" \".repeat(indent)} + ${directory.name}`)\n const contents = directory.list()\n for (const item of contents) {\n if (item instanceof Directory) {\n printDirectory(item, indent + 2)\n } else {\n console.log(`${\" \".repeat(indent + 2)} - ${item.name} (${item.size} bytes)`)\n }\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import { BgTimer, throttle, debounce } from "./timers";
2
+ export { BgTimer, throttle, debounce };
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/timers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAC,MAAM,UAAU,CAAA;AACpD,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { BgTimer, throttle, debounce } from "./timers";
2
+ export { BgTimer, throttle, debounce };
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/timers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAC,MAAM,UAAU,CAAA;AACpD,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAC,CAAA","sourcesContent":["import {BgTimer, throttle, debounce} from \"./timers\"\nexport {BgTimer, throttle, debounce}\n"]}
@@ -0,0 +1,9 @@
1
+ export declare class BgTimer {
2
+ static setInterval(callback: () => void, delay: number): number;
3
+ static clearInterval(intervalId: number): void;
4
+ static setTimeout(callback: () => void, delay: number): number;
5
+ static clearTimeout(timeoutId: number): void;
6
+ }
7
+ export declare function throttle<T extends (...args: any[]) => any>(fn: T, ms: number): (...args: Parameters<T>) => void;
8
+ export declare function debounce<T extends (...args: any[]) => any>(fn: T, ms: number): (...args: Parameters<T>) => void;
9
+ //# sourceMappingURL=timers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timers.d.ts","sourceRoot":"","sources":["../../../src/utils/timers/timers.ts"],"names":[],"mappings":"AAoFA,qBAAa,OAAO;IAClB,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAO/D,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAO9C,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAO9D,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAM7C;AAED,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAU/G;AAED,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAY/G"}
@@ -0,0 +1,105 @@
1
+ // until https://github.com/tconns/react-native-nitro-bg-timer/issues/2 is resolved, we need to use this class to disable this package on iOS:
2
+ import { Platform } from "react-native";
3
+ let nitroTimer;
4
+ let nitroDisabled = false;
5
+ let warnedUnavailable = false;
6
+ function warnUnavailable(reason) {
7
+ if (warnedUnavailable) {
8
+ return;
9
+ }
10
+ warnedUnavailable = true;
11
+ console.warn(`BgTimer: ${reason}, using JS timers`);
12
+ }
13
+ function getNitroTimer() {
14
+ if (nitroDisabled || Platform.OS !== "android") {
15
+ return null;
16
+ }
17
+ // react-native-nitro-bg-timer calls createHybridObject() at require() time. On dev
18
+ // builds with a stale native binary that throws NPE, React Native still surfaces a
19
+ // red LogBox error even when the exception is caught. Skip nitro in __DEV__ unless
20
+ // explicitly enabled after a native rebuild (bun android).
21
+ if (__DEV__ && process.env.EXPO_PUBLIC_USE_NITRO_BG_TIMER !== "true") {
22
+ warnUnavailable("nitro bg-timer disabled in dev (set EXPO_PUBLIC_USE_NITRO_BG_TIMER=true after native rebuild)");
23
+ return null;
24
+ }
25
+ if (nitroTimer !== undefined) {
26
+ return nitroTimer;
27
+ }
28
+ try {
29
+ const { isRuntimeAlive } = require("react-native-nitro-modules");
30
+ if (typeof isRuntimeAlive === "function" && !isRuntimeAlive()) {
31
+ nitroTimer = null;
32
+ warnUnavailable("nitro runtime is not alive");
33
+ return nitroTimer;
34
+ }
35
+ const { BackgroundTimer } = require("react-native-nitro-bg-timer");
36
+ nitroTimer =
37
+ BackgroundTimer &&
38
+ typeof BackgroundTimer.setTimeout === "function" &&
39
+ typeof BackgroundTimer.setInterval === "function" &&
40
+ typeof BackgroundTimer.clearTimeout === "function" &&
41
+ typeof BackgroundTimer.clearInterval === "function"
42
+ ? BackgroundTimer
43
+ : null;
44
+ }
45
+ catch {
46
+ nitroTimer = null;
47
+ nitroDisabled = true;
48
+ }
49
+ if (!nitroTimer) {
50
+ warnUnavailable("react-native-nitro-bg-timer unavailable");
51
+ }
52
+ return nitroTimer;
53
+ }
54
+ function withNitro(run, fallback) {
55
+ const api = getNitroTimer();
56
+ if (!api) {
57
+ return fallback();
58
+ }
59
+ try {
60
+ return run(api);
61
+ }
62
+ catch (error) {
63
+ nitroDisabled = true;
64
+ nitroTimer = null;
65
+ console.warn("BgTimer: nitro timer failed, using JS timers", error);
66
+ return fallback();
67
+ }
68
+ }
69
+ export class BgTimer {
70
+ static setInterval(callback, delay) {
71
+ return withNitro((api) => api.setInterval(callback, delay), () => setInterval(callback, delay));
72
+ }
73
+ static clearInterval(intervalId) {
74
+ withNitro((api) => api.clearInterval(intervalId), () => clearInterval(intervalId));
75
+ }
76
+ static setTimeout(callback, delay) {
77
+ return withNitro((api) => api.setTimeout(callback, delay), () => setTimeout(callback, delay));
78
+ }
79
+ static clearTimeout(timeoutId) {
80
+ withNitro((api) => api.clearTimeout(timeoutId), () => clearTimeout(timeoutId));
81
+ }
82
+ }
83
+ export function throttle(fn, ms) {
84
+ let lastCalled = 0;
85
+ return (...args) => {
86
+ const now = Date.now();
87
+ if (now - lastCalled >= ms) {
88
+ lastCalled = now;
89
+ fn(...args);
90
+ }
91
+ };
92
+ }
93
+ export function debounce(fn, ms) {
94
+ let timeoutId = null;
95
+ return (...args) => {
96
+ if (timeoutId) {
97
+ BgTimer.clearTimeout(timeoutId);
98
+ }
99
+ timeoutId = BgTimer.setTimeout(() => {
100
+ fn(...args);
101
+ timeoutId = null;
102
+ }, ms);
103
+ };
104
+ }
105
+ //# sourceMappingURL=timers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timers.js","sourceRoot":"","sources":["../../../src/utils/timers/timers.ts"],"names":[],"mappings":"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","sourcesContent":["// until https://github.com/tconns/react-native-nitro-bg-timer/issues/2 is resolved, we need to use this class to disable this package on iOS:\n\nimport {Platform} from \"react-native\"\n\ntype NitroTimerApi = {\n setInterval: (callback: () => void, delay: number) => number\n clearInterval: (intervalId: number) => void\n setTimeout: (callback: () => void, delay: number) => number\n clearTimeout: (timeoutId: number) => void\n}\n\nlet nitroTimer: NitroTimerApi | null | undefined\nlet nitroDisabled = false\nlet warnedUnavailable = false\n\nfunction warnUnavailable(reason: string) {\n if (warnedUnavailable) {\n return\n }\n warnedUnavailable = true\n console.warn(`BgTimer: ${reason}, using JS timers`)\n}\n\nfunction getNitroTimer(): NitroTimerApi | null {\n if (nitroDisabled || Platform.OS !== \"android\") {\n return null\n }\n\n // react-native-nitro-bg-timer calls createHybridObject() at require() time. On dev\n // builds with a stale native binary that throws NPE, React Native still surfaces a\n // red LogBox error even when the exception is caught. Skip nitro in __DEV__ unless\n // explicitly enabled after a native rebuild (bun android).\n if (__DEV__ && process.env.EXPO_PUBLIC_USE_NITRO_BG_TIMER !== \"true\") {\n warnUnavailable(\"nitro bg-timer disabled in dev (set EXPO_PUBLIC_USE_NITRO_BG_TIMER=true after native rebuild)\")\n return null\n }\n\n if (nitroTimer !== undefined) {\n return nitroTimer\n }\n\n try {\n const {isRuntimeAlive} = require(\"react-native-nitro-modules\") as {isRuntimeAlive?: () => boolean}\n if (typeof isRuntimeAlive === \"function\" && !isRuntimeAlive()) {\n nitroTimer = null\n warnUnavailable(\"nitro runtime is not alive\")\n return nitroTimer\n }\n\n const {BackgroundTimer} = require(\"react-native-nitro-bg-timer\") as {BackgroundTimer?: NitroTimerApi}\n nitroTimer =\n BackgroundTimer &&\n typeof BackgroundTimer.setTimeout === \"function\" &&\n typeof BackgroundTimer.setInterval === \"function\" &&\n typeof BackgroundTimer.clearTimeout === \"function\" &&\n typeof BackgroundTimer.clearInterval === \"function\"\n ? BackgroundTimer\n : null\n } catch {\n nitroTimer = null\n nitroDisabled = true\n }\n\n if (!nitroTimer) {\n warnUnavailable(\"react-native-nitro-bg-timer unavailable\")\n }\n return nitroTimer\n}\n\nfunction withNitro<T>(run: (api: NitroTimerApi) => T, fallback: () => T): T {\n const api = getNitroTimer()\n if (!api) {\n return fallback()\n }\n try {\n return run(api)\n } catch (error) {\n nitroDisabled = true\n nitroTimer = null\n console.warn(\"BgTimer: nitro timer failed, using JS timers\", error)\n return fallback()\n }\n}\n\nexport class BgTimer {\n static setInterval(callback: () => void, delay: number): number {\n return withNitro(\n (api) => api.setInterval(callback, delay),\n () => setInterval(callback, delay) as unknown as number,\n )\n }\n\n static clearInterval(intervalId: number): void {\n withNitro(\n (api) => api.clearInterval(intervalId),\n () => clearInterval(intervalId),\n )\n }\n\n static setTimeout(callback: () => void, delay: number): number {\n return withNitro(\n (api) => api.setTimeout(callback, delay),\n () => setTimeout(callback, delay) as unknown as number,\n )\n }\n\n static clearTimeout(timeoutId: number): void {\n withNitro(\n (api) => api.clearTimeout(timeoutId),\n () => clearTimeout(timeoutId),\n )\n }\n}\n\nexport function throttle<T extends (...args: any[]) => any>(fn: T, ms: number): (...args: Parameters<T>) => void {\n let lastCalled = 0\n\n return (...args: Parameters<T>) => {\n const now = Date.now()\n if (now - lastCalled >= ms) {\n lastCalled = now\n fn(...args)\n }\n }\n}\n\nexport function debounce<T extends (...args: any[]) => any>(fn: T, ms: number): (...args: Parameters<T>) => void {\n let timeoutId: number | null = null\n\n return (...args: Parameters<T>) => {\n if (timeoutId) {\n BgTimer.clearTimeout(timeoutId)\n }\n timeoutId = BgTimer.setTimeout(() => {\n fn(...args)\n timeoutId = null\n }, ms)\n }\n}\n"]}