@glassly/engine 0.1.0-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1053) hide show
  1. package/README.md +96 -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 +336 -0
  7. package/build/engine.d.ts.map +1 -0
  8. package/build/engine.js +198 -0
  9. package/build/engine.js.map +1 -0
  10. package/build/facades/dev.d.ts +69 -0
  11. package/build/facades/dev.d.ts.map +1 -0
  12. package/build/facades/dev.js +204 -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 +142 -0
  27. package/build/facades/glasses.d.ts.map +1 -0
  28. package/build/facades/glasses.js +214 -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 +55 -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/maps.d.ts +18 -0
  39. package/build/facades/maps.d.ts.map +1 -0
  40. package/build/facades/maps.js +13 -0
  41. package/build/facades/maps.js.map +1 -0
  42. package/build/facades/memory.d.ts +38 -0
  43. package/build/facades/memory.d.ts.map +1 -0
  44. package/build/facades/memory.js +33 -0
  45. package/build/facades/memory.js.map +1 -0
  46. package/build/facades/miniapps.d.ts +47 -0
  47. package/build/facades/miniapps.d.ts.map +1 -0
  48. package/build/facades/miniapps.js +54 -0
  49. package/build/facades/miniapps.js.map +1 -0
  50. package/build/facades/notifications.d.ts +13 -0
  51. package/build/facades/notifications.d.ts.map +1 -0
  52. package/build/facades/notifications.js +12 -0
  53. package/build/facades/notifications.js.map +1 -0
  54. package/build/facades/ota.d.ts +106 -0
  55. package/build/facades/ota.d.ts.map +1 -0
  56. package/build/facades/ota.js +159 -0
  57. package/build/facades/ota.js.map +1 -0
  58. package/build/facades/pairing.d.ts +115 -0
  59. package/build/facades/pairing.d.ts.map +1 -0
  60. package/build/facades/pairing.js +275 -0
  61. package/build/facades/pairing.js.map +1 -0
  62. package/build/facades/permissions.d.ts +33 -0
  63. package/build/facades/permissions.d.ts.map +1 -0
  64. package/build/facades/permissions.js +155 -0
  65. package/build/facades/permissions.js.map +1 -0
  66. package/build/facades/phoneNotifications.d.ts +17 -0
  67. package/build/facades/phoneNotifications.d.ts.map +1 -0
  68. package/build/facades/phoneNotifications.js +41 -0
  69. package/build/facades/phoneNotifications.js.map +1 -0
  70. package/build/facades/providerKeys.d.ts +26 -0
  71. package/build/facades/providerKeys.d.ts.map +1 -0
  72. package/build/facades/providerKeys.js +26 -0
  73. package/build/facades/providerKeys.js.map +1 -0
  74. package/build/facades/reports.d.ts +36 -0
  75. package/build/facades/reports.d.ts.map +1 -0
  76. package/build/facades/reports.js +134 -0
  77. package/build/facades/reports.js.map +1 -0
  78. package/build/facades/session.d.ts +21 -0
  79. package/build/facades/session.d.ts.map +1 -0
  80. package/build/facades/session.js +52 -0
  81. package/build/facades/session.js.map +1 -0
  82. package/build/facades/settings.d.ts +37 -0
  83. package/build/facades/settings.d.ts.map +1 -0
  84. package/build/facades/settings.js +55 -0
  85. package/build/facades/settings.js.map +1 -0
  86. package/build/facades/speakers.d.ts +41 -0
  87. package/build/facades/speakers.d.ts.map +1 -0
  88. package/build/facades/speakers.js +139 -0
  89. package/build/facades/speakers.js.map +1 -0
  90. package/build/facades/speech.d.ts +44 -0
  91. package/build/facades/speech.d.ts.map +1 -0
  92. package/build/facades/speech.js +46 -0
  93. package/build/facades/speech.js.map +1 -0
  94. package/build/index.d.ts +48 -0
  95. package/build/index.d.ts.map +1 -0
  96. package/build/index.js +49 -0
  97. package/build/index.js.map +1 -0
  98. package/build/internal.d.ts +67 -0
  99. package/build/internal.d.ts.map +1 -0
  100. package/build/internal.js +90 -0
  101. package/build/internal.js.map +1 -0
  102. package/build/runtime/bootstrap.d.ts +115 -0
  103. package/build/runtime/bootstrap.d.ts.map +1 -0
  104. package/build/runtime/bootstrap.js +73 -0
  105. package/build/runtime/bootstrap.js.map +1 -0
  106. package/build/runtime/config.d.ts +152 -0
  107. package/build/runtime/config.d.ts.map +1 -0
  108. package/build/runtime/config.js +19 -0
  109. package/build/runtime/config.js.map +1 -0
  110. package/build/runtime/scanQrSeam.d.ts +7 -0
  111. package/build/runtime/scanQrSeam.d.ts.map +1 -0
  112. package/build/runtime/scanQrSeam.js +16 -0
  113. package/build/runtime/scanQrSeam.js.map +1 -0
  114. package/build/runtime/streamConfig.d.ts +4 -0
  115. package/build/runtime/streamConfig.d.ts.map +1 -0
  116. package/build/runtime/streamConfig.js +38 -0
  117. package/build/runtime/streamConfig.js.map +1 -0
  118. package/build/services/AiTierResolution.d.ts +61 -0
  119. package/build/services/AiTierResolution.d.ts.map +1 -0
  120. package/build/services/AiTierResolution.js +83 -0
  121. package/build/services/AiTierResolution.js.map +1 -0
  122. package/build/services/AppRegistry.d.ts +303 -0
  123. package/build/services/AppRegistry.d.ts.map +1 -0
  124. package/build/services/AppRegistry.js +1108 -0
  125. package/build/services/AppRegistry.js.map +1 -0
  126. package/build/services/AudioCloudUplink.d.ts +15 -0
  127. package/build/services/AudioCloudUplink.d.ts.map +1 -0
  128. package/build/services/AudioCloudUplink.js +54 -0
  129. package/build/services/AudioCloudUplink.js.map +1 -0
  130. package/build/services/AudioPlaybackService.d.ts +183 -0
  131. package/build/services/AudioPlaybackService.d.ts.map +1 -0
  132. package/build/services/AudioPlaybackService.js +750 -0
  133. package/build/services/AudioPlaybackService.js.map +1 -0
  134. package/build/services/AutomaticReportResult.d.ts +20 -0
  135. package/build/services/AutomaticReportResult.d.ts.map +1 -0
  136. package/build/services/AutomaticReportResult.js +29 -0
  137. package/build/services/AutomaticReportResult.js.map +1 -0
  138. package/build/services/BlobStore.d.ts +106 -0
  139. package/build/services/BlobStore.d.ts.map +1 -0
  140. package/build/services/BlobStore.js +741 -0
  141. package/build/services/BlobStore.js.map +1 -0
  142. package/build/services/CaptionsTesterReportService.d.ts +4 -0
  143. package/build/services/CaptionsTesterReportService.d.ts.map +1 -0
  144. package/build/services/CaptionsTesterReportService.js +80 -0
  145. package/build/services/CaptionsTesterReportService.js.map +1 -0
  146. package/build/services/CloudAudioSubscriptionSync.d.ts +24 -0
  147. package/build/services/CloudAudioSubscriptionSync.d.ts.map +1 -0
  148. package/build/services/CloudAudioSubscriptionSync.js +51 -0
  149. package/build/services/CloudAudioSubscriptionSync.js.map +1 -0
  150. package/build/services/CloudClientService.d.ts +293 -0
  151. package/build/services/CloudClientService.d.ts.map +1 -0
  152. package/build/services/CloudClientService.js +965 -0
  153. package/build/services/CloudClientService.js.map +1 -0
  154. package/build/services/CloudTranscriptE2EMetrics.d.ts +4 -0
  155. package/build/services/CloudTranscriptE2EMetrics.d.ts.map +1 -0
  156. package/build/services/CloudTranscriptE2EMetrics.js +24 -0
  157. package/build/services/CloudTranscriptE2EMetrics.js.map +1 -0
  158. package/build/services/ConnectionCoordinator.d.ts +51 -0
  159. package/build/services/ConnectionCoordinator.d.ts.map +1 -0
  160. package/build/services/ConnectionCoordinator.js +34 -0
  161. package/build/services/ConnectionCoordinator.js.map +1 -0
  162. package/build/services/DevServerBridge.d.ts +63 -0
  163. package/build/services/DevServerBridge.d.ts.map +1 -0
  164. package/build/services/DevServerBridge.js +296 -0
  165. package/build/services/DevServerBridge.js.map +1 -0
  166. package/build/services/DeviceEventRouter.d.ts +3 -0
  167. package/build/services/DeviceEventRouter.d.ts.map +1 -0
  168. package/build/services/DeviceEventRouter.js +214 -0
  169. package/build/services/DeviceEventRouter.js.map +1 -0
  170. package/build/services/DeviceStoreHydration.d.ts +38 -0
  171. package/build/services/DeviceStoreHydration.d.ts.map +1 -0
  172. package/build/services/DeviceStoreHydration.js +124 -0
  173. package/build/services/DeviceStoreHydration.js.map +1 -0
  174. package/build/services/DisplayProcessor.d.ts +223 -0
  175. package/build/services/DisplayProcessor.d.ts.map +1 -0
  176. package/build/services/DisplayProcessor.js +552 -0
  177. package/build/services/DisplayProcessor.js.map +1 -0
  178. package/build/services/ForegroundLocationPermission.d.ts +13 -0
  179. package/build/services/ForegroundLocationPermission.d.ts.map +1 -0
  180. package/build/services/ForegroundLocationPermission.js +12 -0
  181. package/build/services/ForegroundLocationPermission.js.map +1 -0
  182. package/build/services/GlassesReadiness.d.ts +41 -0
  183. package/build/services/GlassesReadiness.d.ts.map +1 -0
  184. package/build/services/GlassesReadiness.js +82 -0
  185. package/build/services/GlassesReadiness.js.map +1 -0
  186. package/build/services/GlassesSettingsSync.d.ts +33 -0
  187. package/build/services/GlassesSettingsSync.d.ts.map +1 -0
  188. package/build/services/GlassesSettingsSync.js +127 -0
  189. package/build/services/GlassesSettingsSync.js.map +1 -0
  190. package/build/services/GlassesStatusProjection.d.ts +3 -0
  191. package/build/services/GlassesStatusProjection.d.ts.map +1 -0
  192. package/build/services/GlassesStatusProjection.js +65 -0
  193. package/build/services/GlassesStatusProjection.js.map +1 -0
  194. package/build/services/HeadingService.d.ts +33 -0
  195. package/build/services/HeadingService.d.ts.map +1 -0
  196. package/build/services/HeadingService.js +123 -0
  197. package/build/services/HeadingService.js.map +1 -0
  198. package/build/services/HotspotOtaTransport.d.ts +29 -0
  199. package/build/services/HotspotOtaTransport.d.ts.map +1 -0
  200. package/build/services/HotspotOtaTransport.js +146 -0
  201. package/build/services/HotspotOtaTransport.js.map +1 -0
  202. package/build/services/HotspotShutdown.d.ts +17 -0
  203. package/build/services/HotspotShutdown.d.ts.map +1 -0
  204. package/build/services/HotspotShutdown.js +29 -0
  205. package/build/services/HotspotShutdown.js.map +1 -0
  206. package/build/services/JSCrashController.d.ts +97 -0
  207. package/build/services/JSCrashController.d.ts.map +1 -0
  208. package/build/services/JSCrashController.js +138 -0
  209. package/build/services/JSCrashController.js.map +1 -0
  210. package/build/services/JSCrashloopReportService.d.ts +9 -0
  211. package/build/services/JSCrashloopReportService.d.ts.map +1 -0
  212. package/build/services/JSCrashloopReportService.js +54 -0
  213. package/build/services/JSCrashloopReportService.js.map +1 -0
  214. package/build/services/JSLogPipeline.d.ts +87 -0
  215. package/build/services/JSLogPipeline.d.ts.map +1 -0
  216. package/build/services/JSLogPipeline.js +137 -0
  217. package/build/services/JSLogPipeline.js.map +1 -0
  218. package/build/services/JSRouter.d.ts +203 -0
  219. package/build/services/JSRouter.d.ts.map +1 -0
  220. package/build/services/JSRouter.js +482 -0
  221. package/build/services/JSRouter.js.map +1 -0
  222. package/build/services/LocalDisplayManager.d.ts +162 -0
  223. package/build/services/LocalDisplayManager.d.ts.map +1 -0
  224. package/build/services/LocalDisplayManager.js +687 -0
  225. package/build/services/LocalDisplayManager.js.map +1 -0
  226. package/build/services/LocalMiniappDataMigration.d.ts +46 -0
  227. package/build/services/LocalMiniappDataMigration.d.ts.map +1 -0
  228. package/build/services/LocalMiniappDataMigration.js +78 -0
  229. package/build/services/LocalMiniappDataMigration.js.map +1 -0
  230. package/build/services/LocalMiniappRuntime.d.ts +677 -0
  231. package/build/services/LocalMiniappRuntime.d.ts.map +1 -0
  232. package/build/services/LocalMiniappRuntime.js +5068 -0
  233. package/build/services/LocalMiniappRuntime.js.map +1 -0
  234. package/build/services/LocalMiniappStorage.d.ts +32 -0
  235. package/build/services/LocalMiniappStorage.d.ts.map +1 -0
  236. package/build/services/LocalMiniappStorage.js +66 -0
  237. package/build/services/LocalMiniappStorage.js.map +1 -0
  238. package/build/services/LocalMiniappUserIdentity.d.ts +41 -0
  239. package/build/services/LocalMiniappUserIdentity.d.ts.map +1 -0
  240. package/build/services/LocalMiniappUserIdentity.js +73 -0
  241. package/build/services/LocalMiniappUserIdentity.js.map +1 -0
  242. package/build/services/LocalSttFallbackCoordinator.d.ts +101 -0
  243. package/build/services/LocalSttFallbackCoordinator.d.ts.map +1 -0
  244. package/build/services/LocalSttFallbackCoordinator.js +210 -0
  245. package/build/services/LocalSttFallbackCoordinator.js.map +1 -0
  246. package/build/services/MapboxTokenService.d.ts +33 -0
  247. package/build/services/MapboxTokenService.d.ts.map +1 -0
  248. package/build/services/MapboxTokenService.js +115 -0
  249. package/build/services/MapboxTokenService.js.map +1 -0
  250. package/build/services/MemoryCapture.d.ts +40 -0
  251. package/build/services/MemoryCapture.d.ts.map +1 -0
  252. package/build/services/MemoryCapture.js +42 -0
  253. package/build/services/MemoryCapture.js.map +1 -0
  254. package/build/services/MemoryStore.d.ts +184 -0
  255. package/build/services/MemoryStore.d.ts.map +1 -0
  256. package/build/services/MemoryStore.js +541 -0
  257. package/build/services/MemoryStore.js.map +1 -0
  258. package/build/services/MicStateCoordinator.d.ts +78 -0
  259. package/build/services/MicStateCoordinator.d.ts.map +1 -0
  260. package/build/services/MicStateCoordinator.js +219 -0
  261. package/build/services/MicStateCoordinator.js.map +1 -0
  262. package/build/services/MiniappEngine.d.ts +31 -0
  263. package/build/services/MiniappEngine.d.ts.map +1 -0
  264. package/build/services/MiniappEngine.js +119 -0
  265. package/build/services/MiniappEngine.js.map +1 -0
  266. package/build/services/MiniappLauncher.d.ts +127 -0
  267. package/build/services/MiniappLauncher.d.ts.map +1 -0
  268. package/build/services/MiniappLauncher.js +309 -0
  269. package/build/services/MiniappLauncher.js.map +1 -0
  270. package/build/services/MiniappLiveness.d.ts +12 -0
  271. package/build/services/MiniappLiveness.d.ts.map +1 -0
  272. package/build/services/MiniappLiveness.js +16 -0
  273. package/build/services/MiniappLiveness.js.map +1 -0
  274. package/build/services/MiniappRunningRegistry.d.ts +24 -0
  275. package/build/services/MiniappRunningRegistry.d.ts.map +1 -0
  276. package/build/services/MiniappRunningRegistry.js +52 -0
  277. package/build/services/MiniappRunningRegistry.js.map +1 -0
  278. package/build/services/NativeHttpResponse.d.ts +3 -0
  279. package/build/services/NativeHttpResponse.d.ts.map +1 -0
  280. package/build/services/NativeHttpResponse.js +6 -0
  281. package/build/services/NativeHttpResponse.js.map +1 -0
  282. package/build/services/NativeNavigationService.d.ts +51 -0
  283. package/build/services/NativeNavigationService.d.ts.map +1 -0
  284. package/build/services/NativeNavigationService.js +154 -0
  285. package/build/services/NativeNavigationService.js.map +1 -0
  286. package/build/services/NavigationHandlers.d.ts +107 -0
  287. package/build/services/NavigationHandlers.d.ts.map +1 -0
  288. package/build/services/NavigationHandlers.js +479 -0
  289. package/build/services/NavigationHandlers.js.map +1 -0
  290. package/build/services/NavigationService.d.ts +283 -0
  291. package/build/services/NavigationService.d.ts.map +1 -0
  292. package/build/services/NavigationService.js +696 -0
  293. package/build/services/NavigationService.js.map +1 -0
  294. package/build/services/NotificationsEmitter.d.ts +28 -0
  295. package/build/services/NotificationsEmitter.d.ts.map +1 -0
  296. package/build/services/NotificationsEmitter.js +22 -0
  297. package/build/services/NotificationsEmitter.js.map +1 -0
  298. package/build/services/OfflineSpeechModelService.d.ts +33 -0
  299. package/build/services/OfflineSpeechModelService.d.ts.map +1 -0
  300. package/build/services/OfflineSpeechModelService.js +136 -0
  301. package/build/services/OfflineSpeechModelService.js.map +1 -0
  302. package/build/services/OtaArtifactDownloader.d.ts +65 -0
  303. package/build/services/OtaArtifactDownloader.d.ts.map +1 -0
  304. package/build/services/OtaArtifactDownloader.js +226 -0
  305. package/build/services/OtaArtifactDownloader.js.map +1 -0
  306. package/build/services/OtaInstallCoordinator.d.ts +275 -0
  307. package/build/services/OtaInstallCoordinator.d.ts.map +1 -0
  308. package/build/services/OtaInstallCoordinator.js +1491 -0
  309. package/build/services/OtaInstallCoordinator.js.map +1 -0
  310. package/build/services/OtaService.d.ts +3 -0
  311. package/build/services/OtaService.d.ts.map +1 -0
  312. package/build/services/OtaService.js +72 -0
  313. package/build/services/OtaService.js.map +1 -0
  314. package/build/services/OtaUpdateCheckService.d.ts +100 -0
  315. package/build/services/OtaUpdateCheckService.d.ts.map +1 -0
  316. package/build/services/OtaUpdateCheckService.js +380 -0
  317. package/build/services/OtaUpdateCheckService.js.map +1 -0
  318. package/build/services/PairingIdentity.d.ts +80 -0
  319. package/build/services/PairingIdentity.d.ts.map +1 -0
  320. package/build/services/PairingIdentity.js +145 -0
  321. package/build/services/PairingIdentity.js.map +1 -0
  322. package/build/services/PhoneCalendarHelpers.d.ts +32 -0
  323. package/build/services/PhoneCalendarHelpers.d.ts.map +1 -0
  324. package/build/services/PhoneCalendarHelpers.js +157 -0
  325. package/build/services/PhoneCalendarHelpers.js.map +1 -0
  326. package/build/services/PhoneCalendarService.d.ts +5 -0
  327. package/build/services/PhoneCalendarService.d.ts.map +1 -0
  328. package/build/services/PhoneCalendarService.js +45 -0
  329. package/build/services/PhoneCalendarService.js.map +1 -0
  330. package/build/services/PhoneCameraFovCoordinator.d.ts +30 -0
  331. package/build/services/PhoneCameraFovCoordinator.d.ts.map +1 -0
  332. package/build/services/PhoneCameraFovCoordinator.js +194 -0
  333. package/build/services/PhoneCameraFovCoordinator.js.map +1 -0
  334. package/build/services/PhoneLocationService.d.ts +36 -0
  335. package/build/services/PhoneLocationService.d.ts.map +1 -0
  336. package/build/services/PhoneLocationService.js +115 -0
  337. package/build/services/PhoneLocationService.js.map +1 -0
  338. package/build/services/PhoneNotificationsSync.d.ts +3 -0
  339. package/build/services/PhoneNotificationsSync.d.ts.map +1 -0
  340. package/build/services/PhoneNotificationsSync.js +37 -0
  341. package/build/services/PhoneNotificationsSync.js.map +1 -0
  342. package/build/services/PhonePhotoCoordinator.d.ts +110 -0
  343. package/build/services/PhonePhotoCoordinator.d.ts.map +1 -0
  344. package/build/services/PhonePhotoCoordinator.js +344 -0
  345. package/build/services/PhonePhotoCoordinator.js.map +1 -0
  346. package/build/services/PhoneStreamCoordinator.d.ts +175 -0
  347. package/build/services/PhoneStreamCoordinator.d.ts.map +1 -0
  348. package/build/services/PhoneStreamCoordinator.js +740 -0
  349. package/build/services/PhoneStreamCoordinator.js.map +1 -0
  350. package/build/services/PhoneVideoCoordinator.d.ts +52 -0
  351. package/build/services/PhoneVideoCoordinator.d.ts.map +1 -0
  352. package/build/services/PhoneVideoCoordinator.js +157 -0
  353. package/build/services/PhoneVideoCoordinator.js.map +1 -0
  354. package/build/services/ProviderKeyValidation.d.ts +27 -0
  355. package/build/services/ProviderKeyValidation.d.ts.map +1 -0
  356. package/build/services/ProviderKeyValidation.js +42 -0
  357. package/build/services/ProviderKeyValidation.js.map +1 -0
  358. package/build/services/STTModelManager.d.ts +65 -0
  359. package/build/services/STTModelManager.d.ts.map +1 -0
  360. package/build/services/STTModelManager.js +366 -0
  361. package/build/services/STTModelManager.js.map +1 -0
  362. package/build/services/SceneRenderer.d.ts +90 -0
  363. package/build/services/SceneRenderer.d.ts.map +1 -0
  364. package/build/services/SceneRenderer.js +274 -0
  365. package/build/services/SceneRenderer.js.map +1 -0
  366. package/build/services/SentenceTtsPipeline.d.ts +31 -0
  367. package/build/services/SentenceTtsPipeline.d.ts.map +1 -0
  368. package/build/services/SentenceTtsPipeline.js +67 -0
  369. package/build/services/SentenceTtsPipeline.js.map +1 -0
  370. package/build/services/SpeakerIdModelManager.d.ts +36 -0
  371. package/build/services/SpeakerIdModelManager.d.ts.map +1 -0
  372. package/build/services/SpeakerIdModelManager.js +132 -0
  373. package/build/services/SpeakerIdModelManager.js.map +1 -0
  374. package/build/services/SpeakerIdSync.d.ts +14 -0
  375. package/build/services/SpeakerIdSync.d.ts.map +1 -0
  376. package/build/services/SpeakerIdSync.js +62 -0
  377. package/build/services/SpeakerIdSync.js.map +1 -0
  378. package/build/services/SpeakerLabelResolver.d.ts +80 -0
  379. package/build/services/SpeakerLabelResolver.d.ts.map +1 -0
  380. package/build/services/SpeakerLabelResolver.js +108 -0
  381. package/build/services/SpeakerLabelResolver.js.map +1 -0
  382. package/build/services/SpeakerProfileStore.d.ts +90 -0
  383. package/build/services/SpeakerProfileStore.d.ts.map +1 -0
  384. package/build/services/SpeakerProfileStore.js +213 -0
  385. package/build/services/SpeakerProfileStore.js.map +1 -0
  386. package/build/services/SpeakerSegmentResolver.d.ts +87 -0
  387. package/build/services/SpeakerSegmentResolver.d.ts.map +1 -0
  388. package/build/services/SpeakerSegmentResolver.js +137 -0
  389. package/build/services/SpeakerSegmentResolver.js.map +1 -0
  390. package/build/services/StreamLifecycleController.d.ts +63 -0
  391. package/build/services/StreamLifecycleController.d.ts.map +1 -0
  392. package/build/services/StreamLifecycleController.js +148 -0
  393. package/build/services/StreamLifecycleController.js.map +1 -0
  394. package/build/services/SupportProfileSync.d.ts +22 -0
  395. package/build/services/SupportProfileSync.d.ts.map +1 -0
  396. package/build/services/SupportProfileSync.js +213 -0
  397. package/build/services/SupportProfileSync.js.map +1 -0
  398. package/build/services/TTSModelManager.d.ts +90 -0
  399. package/build/services/TTSModelManager.d.ts.map +1 -0
  400. package/build/services/TTSModelManager.js +366 -0
  401. package/build/services/TTSModelManager.js.map +1 -0
  402. package/build/services/TranscriptionRouting.d.ts +22 -0
  403. package/build/services/TranscriptionRouting.d.ts.map +1 -0
  404. package/build/services/TranscriptionRouting.js +34 -0
  405. package/build/services/TranscriptionRouting.js.map +1 -0
  406. package/build/services/TtsTextSanitizer.d.ts +5 -0
  407. package/build/services/TtsTextSanitizer.d.ts.map +1 -0
  408. package/build/services/TtsTextSanitizer.js +61 -0
  409. package/build/services/TtsTextSanitizer.js.map +1 -0
  410. package/build/services/UIRouter.d.ts +137 -0
  411. package/build/services/UIRouter.d.ts.map +1 -0
  412. package/build/services/UIRouter.js +210 -0
  413. package/build/services/UIRouter.js.map +1 -0
  414. package/build/services/WebviewBridge.d.ts +22 -0
  415. package/build/services/WebviewBridge.d.ts.map +1 -0
  416. package/build/services/WebviewBridge.js +47 -0
  417. package/build/services/WebviewBridge.js.map +1 -0
  418. package/build/services/WifiAdbRequest.d.ts +17 -0
  419. package/build/services/WifiAdbRequest.d.ts.map +1 -0
  420. package/build/services/WifiAdbRequest.js +35 -0
  421. package/build/services/WifiAdbRequest.js.map +1 -0
  422. package/build/services/asg/GalleryMediaIntegrityReportService.d.ts +17 -0
  423. package/build/services/asg/GalleryMediaIntegrityReportService.d.ts.map +1 -0
  424. package/build/services/asg/GalleryMediaIntegrityReportService.js +43 -0
  425. package/build/services/asg/GalleryMediaIntegrityReportService.js.map +1 -0
  426. package/build/services/asg/asgCameraApi.d.ts +208 -0
  427. package/build/services/asg/asgCameraApi.d.ts.map +1 -0
  428. package/build/services/asg/asgCameraApi.js +1480 -0
  429. package/build/services/asg/asgCameraApi.js.map +1 -0
  430. package/build/services/asg/cameraRollExportCoordinator.d.ts +60 -0
  431. package/build/services/asg/cameraRollExportCoordinator.d.ts.map +1 -0
  432. package/build/services/asg/cameraRollExportCoordinator.js +618 -0
  433. package/build/services/asg/cameraRollExportCoordinator.js.map +1 -0
  434. package/build/services/asg/cameraRollExportLedger.d.ts +44 -0
  435. package/build/services/asg/cameraRollExportLedger.d.ts.map +1 -0
  436. package/build/services/asg/cameraRollExportLedger.js +78 -0
  437. package/build/services/asg/cameraRollExportLedger.js.map +1 -0
  438. package/build/services/asg/galleryMediaValidation.d.ts +29 -0
  439. package/build/services/asg/galleryMediaValidation.d.ts.map +1 -0
  440. package/build/services/asg/galleryMediaValidation.js +149 -0
  441. package/build/services/asg/galleryMediaValidation.js.map +1 -0
  442. package/build/services/asg/galleryNotices.d.ts +33 -0
  443. package/build/services/asg/galleryNotices.d.ts.map +1 -0
  444. package/build/services/asg/galleryNotices.js +29 -0
  445. package/build/services/asg/galleryNotices.js.map +1 -0
  446. package/build/services/asg/galleryPathMigration.d.ts +3 -0
  447. package/build/services/asg/galleryPathMigration.d.ts.map +1 -0
  448. package/build/services/asg/galleryPathMigration.js +26 -0
  449. package/build/services/asg/galleryPathMigration.js.map +1 -0
  450. package/build/services/asg/gallerySettingsService.d.ts +20 -0
  451. package/build/services/asg/gallerySettingsService.d.ts.map +1 -0
  452. package/build/services/asg/gallerySettingsService.js +53 -0
  453. package/build/services/asg/gallerySettingsService.js.map +1 -0
  454. package/build/services/asg/gallerySyncNotifications.d.ts +56 -0
  455. package/build/services/asg/gallerySyncNotifications.d.ts.map +1 -0
  456. package/build/services/asg/gallerySyncNotifications.js +198 -0
  457. package/build/services/asg/gallerySyncNotifications.js.map +1 -0
  458. package/build/services/asg/gallerySyncService.d.ts +137 -0
  459. package/build/services/asg/gallerySyncService.d.ts.map +1 -0
  460. package/build/services/asg/gallerySyncService.js +1945 -0
  461. package/build/services/asg/gallerySyncService.js.map +1 -0
  462. package/build/services/asg/galleryTransferLedger.d.ts +58 -0
  463. package/build/services/asg/galleryTransferLedger.d.ts.map +1 -0
  464. package/build/services/asg/galleryTransferLedger.js +225 -0
  465. package/build/services/asg/galleryTransferLedger.js.map +1 -0
  466. package/build/services/asg/localNetworkTransport.d.ts +15 -0
  467. package/build/services/asg/localNetworkTransport.d.ts.map +1 -0
  468. package/build/services/asg/localNetworkTransport.js +144 -0
  469. package/build/services/asg/localNetworkTransport.js.map +1 -0
  470. package/build/services/asg/localStorageService.d.ts +146 -0
  471. package/build/services/asg/localStorageService.d.ts.map +1 -0
  472. package/build/services/asg/localStorageService.js +572 -0
  473. package/build/services/asg/localStorageService.js.map +1 -0
  474. package/build/services/asg/mediaProcessingQueue.d.ts +70 -0
  475. package/build/services/asg/mediaProcessingQueue.d.ts.map +1 -0
  476. package/build/services/asg/mediaProcessingQueue.js +451 -0
  477. package/build/services/asg/mediaProcessingQueue.js.map +1 -0
  478. package/build/services/audioPlaybackAssets.d.ts +8 -0
  479. package/build/services/audioPlaybackAssets.d.ts.map +1 -0
  480. package/build/services/audioPlaybackAssets.js +7 -0
  481. package/build/services/audioPlaybackAssets.js.map +1 -0
  482. package/build/services/blobPaths.d.ts +31 -0
  483. package/build/services/blobPaths.d.ts.map +1 -0
  484. package/build/services/blobPaths.js +86 -0
  485. package/build/services/blobPaths.js.map +1 -0
  486. package/build/services/cloudStreamApi.d.ts +59 -0
  487. package/build/services/cloudStreamApi.d.ts.map +1 -0
  488. package/build/services/cloudStreamApi.js +81 -0
  489. package/build/services/cloudStreamApi.js.map +1 -0
  490. package/build/services/effectiveCapabilities.d.ts +8 -0
  491. package/build/services/effectiveCapabilities.d.ts.map +1 -0
  492. package/build/services/effectiveCapabilities.js +23 -0
  493. package/build/services/effectiveCapabilities.js.map +1 -0
  494. package/build/services/gallerySyncClock.d.ts +17 -0
  495. package/build/services/gallerySyncClock.d.ts.map +1 -0
  496. package/build/services/gallerySyncClock.js +21 -0
  497. package/build/services/gallerySyncClock.js.map +1 -0
  498. package/build/services/glassesClockSync.d.ts +20 -0
  499. package/build/services/glassesClockSync.d.ts.map +1 -0
  500. package/build/services/glassesClockSync.js +97 -0
  501. package/build/services/glassesClockSync.js.map +1 -0
  502. package/build/services/manifestActions.d.ts +31 -0
  503. package/build/services/manifestActions.d.ts.map +1 -0
  504. package/build/services/manifestActions.js +54 -0
  505. package/build/services/manifestActions.js.map +1 -0
  506. package/build/services/manifestVersionGate.d.ts +28 -0
  507. package/build/services/manifestVersionGate.d.ts.map +1 -0
  508. package/build/services/manifestVersionGate.js +41 -0
  509. package/build/services/manifestVersionGate.js.map +1 -0
  510. package/build/services/memoryStoreInstance.d.ts +19 -0
  511. package/build/services/memoryStoreInstance.d.ts.map +1 -0
  512. package/build/services/memoryStoreInstance.js +65 -0
  513. package/build/services/memoryStoreInstance.js.map +1 -0
  514. package/build/services/navigation/roadNameResolver.d.ts +67 -0
  515. package/build/services/navigation/roadNameResolver.d.ts.map +1 -0
  516. package/build/services/navigation/roadNameResolver.js +87 -0
  517. package/build/services/navigation/roadNameResolver.js.map +1 -0
  518. package/build/services/navigation/routesApiCodec.d.ts +38 -0
  519. package/build/services/navigation/routesApiCodec.d.ts.map +1 -0
  520. package/build/services/navigation/routesApiCodec.js +68 -0
  521. package/build/services/navigation/routesApiCodec.js.map +1 -0
  522. package/build/services/otaDisplayState.d.ts +53 -0
  523. package/build/services/otaDisplayState.d.ts.map +1 -0
  524. package/build/services/otaDisplayState.js +114 -0
  525. package/build/services/otaDisplayState.js.map +1 -0
  526. package/build/services/otaInstallPolicy.d.ts +93 -0
  527. package/build/services/otaInstallPolicy.d.ts.map +1 -0
  528. package/build/services/otaInstallPolicy.js +117 -0
  529. package/build/services/otaInstallPolicy.js.map +1 -0
  530. package/build/services/otaLegacyMapping.d.ts +22 -0
  531. package/build/services/otaLegacyMapping.d.ts.map +1 -0
  532. package/build/services/otaLegacyMapping.js +56 -0
  533. package/build/services/otaLegacyMapping.js.map +1 -0
  534. package/build/services/otaManifestUrl.d.ts +2 -0
  535. package/build/services/otaManifestUrl.d.ts.map +1 -0
  536. package/build/services/otaManifestUrl.js +46 -0
  537. package/build/services/otaManifestUrl.js.map +1 -0
  538. package/build/services/slimStreamStatus.d.ts +18 -0
  539. package/build/services/slimStreamStatus.d.ts.map +1 -0
  540. package/build/services/slimStreamStatus.js +36 -0
  541. package/build/services/slimStreamStatus.js.map +1 -0
  542. package/build/services/soniox/SonioxDirectService.d.ts +109 -0
  543. package/build/services/soniox/SonioxDirectService.d.ts.map +1 -0
  544. package/build/services/soniox/SonioxDirectService.js +449 -0
  545. package/build/services/soniox/SonioxDirectService.js.map +1 -0
  546. package/build/services/soniox/SonioxRealtimeClient.d.ts +121 -0
  547. package/build/services/soniox/SonioxRealtimeClient.d.ts.map +1 -0
  548. package/build/services/soniox/SonioxRealtimeClient.js +301 -0
  549. package/build/services/soniox/SonioxRealtimeClient.js.map +1 -0
  550. package/build/services/soniox/SonioxTokenAssembler.d.ts +98 -0
  551. package/build/services/soniox/SonioxTokenAssembler.d.ts.map +1 -0
  552. package/build/services/soniox/SonioxTokenAssembler.js +394 -0
  553. package/build/services/soniox/SonioxTokenAssembler.js.map +1 -0
  554. package/build/services/speakerProfileStoreInstance.d.ts +8 -0
  555. package/build/services/speakerProfileStoreInstance.d.ts.map +1 -0
  556. package/build/services/speakerProfileStoreInstance.js +24 -0
  557. package/build/services/speakerProfileStoreInstance.js.map +1 -0
  558. package/build/services/uiShim.d.ts +38 -0
  559. package/build/services/uiShim.d.ts.map +1 -0
  560. package/build/services/uiShim.js +369 -0
  561. package/build/services/uiShim.js.map +1 -0
  562. package/build/stores/apps.d.ts +104 -0
  563. package/build/stores/apps.d.ts.map +1 -0
  564. package/build/stores/apps.js +503 -0
  565. package/build/stores/apps.js.map +1 -0
  566. package/build/stores/bluetoothSettingKeys.d.ts +4 -0
  567. package/build/stores/bluetoothSettingKeys.d.ts.map +1 -0
  568. package/build/stores/bluetoothSettingKeys.js +33 -0
  569. package/build/stores/bluetoothSettingKeys.js.map +1 -0
  570. package/build/stores/cloudClientStatus.d.ts +9 -0
  571. package/build/stores/cloudClientStatus.d.ts.map +1 -0
  572. package/build/stores/cloudClientStatus.js +24 -0
  573. package/build/stores/cloudClientStatus.js.map +1 -0
  574. package/build/stores/connection.d.ts +22 -0
  575. package/build/stores/connection.d.ts.map +1 -0
  576. package/build/stores/connection.js +43 -0
  577. package/build/stores/connection.js.map +1 -0
  578. package/build/stores/core.d.ts +15 -0
  579. package/build/stores/core.d.ts.map +1 -0
  580. package/build/stores/core.js +21 -0
  581. package/build/stores/core.js.map +1 -0
  582. package/build/stores/display.d.ts +24 -0
  583. package/build/stores/display.d.ts.map +1 -0
  584. package/build/stores/display.js +96 -0
  585. package/build/stores/display.js.map +1 -0
  586. package/build/stores/gallerySync.d.ts +103 -0
  587. package/build/stores/gallerySync.d.ts.map +1 -0
  588. package/build/stores/gallerySync.js +219 -0
  589. package/build/stores/gallerySync.js.map +1 -0
  590. package/build/stores/glasses.d.ts +62 -0
  591. package/build/stores/glasses.d.ts.map +1 -0
  592. package/build/stores/glasses.js +208 -0
  593. package/build/stores/glasses.js.map +1 -0
  594. package/build/stores/settings.d.ts +54 -0
  595. package/build/stores/settings.d.ts.map +1 -0
  596. package/build/stores/settings.js +1200 -0
  597. package/build/stores/settings.js.map +1 -0
  598. package/build/stores/transcriptionDebug.d.ts +25 -0
  599. package/build/stores/transcriptionDebug.d.ts.map +1 -0
  600. package/build/stores/transcriptionDebug.js +0 -0
  601. package/build/stores/transcriptionDebug.js.map +1 -0
  602. package/build/types/applet.d.ts +101 -0
  603. package/build/types/applet.d.ts.map +1 -0
  604. package/build/types/applet.js +5 -0
  605. package/build/types/applet.js.map +1 -0
  606. package/build/types/asg.d.ts +53 -0
  607. package/build/types/asg.d.ts.map +1 -0
  608. package/build/types/asg.js +2 -0
  609. package/build/types/asg.js.map +1 -0
  610. package/build/types/capabilities/even-realities-g1.d.ts +12 -0
  611. package/build/types/capabilities/even-realities-g1.d.ts.map +1 -0
  612. package/build/types/capabilities/even-realities-g1.js +57 -0
  613. package/build/types/capabilities/even-realities-g1.js.map +1 -0
  614. package/build/types/capabilities/even-realities-g2.d.ts +12 -0
  615. package/build/types/capabilities/even-realities-g2.d.ts.map +1 -0
  616. package/build/types/capabilities/even-realities-g2.js +83 -0
  617. package/build/types/capabilities/even-realities-g2.js.map +1 -0
  618. package/build/types/capabilities/mentra-display.d.ts +12 -0
  619. package/build/types/capabilities/mentra-display.d.ts.map +1 -0
  620. package/build/types/capabilities/mentra-display.js +65 -0
  621. package/build/types/capabilities/mentra-display.js.map +1 -0
  622. package/build/types/capabilities/mentra-live.d.ts +12 -0
  623. package/build/types/capabilities/mentra-live.d.ts.map +1 -0
  624. package/build/types/capabilities/mentra-live.js +94 -0
  625. package/build/types/capabilities/mentra-live.js.map +1 -0
  626. package/build/types/capabilities/nimo.d.ts +13 -0
  627. package/build/types/capabilities/nimo.d.ts.map +1 -0
  628. package/build/types/capabilities/nimo.js +72 -0
  629. package/build/types/capabilities/nimo.js.map +1 -0
  630. package/build/types/capabilities/none.d.ts +13 -0
  631. package/build/types/capabilities/none.d.ts.map +1 -0
  632. package/build/types/capabilities/none.js +67 -0
  633. package/build/types/capabilities/none.js.map +1 -0
  634. package/build/types/capabilities/simulated-glasses.d.ts +13 -0
  635. package/build/types/capabilities/simulated-glasses.d.ts.map +1 -0
  636. package/build/types/capabilities/simulated-glasses.js +82 -0
  637. package/build/types/capabilities/simulated-glasses.js.map +1 -0
  638. package/build/types/capabilities/vuzix-z100.d.ts +12 -0
  639. package/build/types/capabilities/vuzix-z100.d.ts.map +1 -0
  640. package/build/types/capabilities/vuzix-z100.js +54 -0
  641. package/build/types/capabilities/vuzix-z100.js.map +1 -0
  642. package/build/types/enums.d.ts +22 -0
  643. package/build/types/enums.d.ts.map +1 -0
  644. package/build/types/enums.js +27 -0
  645. package/build/types/enums.js.map +1 -0
  646. package/build/types/hardware.d.ts +155 -0
  647. package/build/types/hardware.d.ts.map +1 -0
  648. package/build/types/hardware.js +52 -0
  649. package/build/types/hardware.js.map +1 -0
  650. package/build/types/index.d.ts +11 -0
  651. package/build/types/index.d.ts.map +1 -0
  652. package/build/types/index.js +10 -0
  653. package/build/types/index.js.map +1 -0
  654. package/build/utils/GlobalEventEmitter.d.ts +11 -0
  655. package/build/utils/GlobalEventEmitter.d.ts.map +1 -0
  656. package/build/utils/GlobalEventEmitter.js +14 -0
  657. package/build/utils/GlobalEventEmitter.js.map +1 -0
  658. package/build/utils/cloudClient/RnUdpAdapter.d.ts +3 -0
  659. package/build/utils/cloudClient/RnUdpAdapter.d.ts.map +1 -0
  660. package/build/utils/cloudClient/RnUdpAdapter.js +41 -0
  661. package/build/utils/cloudClient/RnUdpAdapter.js.map +1 -0
  662. package/build/utils/cloudClient/cloudSecureStore.d.ts +3 -0
  663. package/build/utils/cloudClient/cloudSecureStore.d.ts.map +1 -0
  664. package/build/utils/cloudClient/cloudSecureStore.js +26 -0
  665. package/build/utils/cloudClient/cloudSecureStore.js.map +1 -0
  666. package/build/utils/configuredDevHost.d.ts +6 -0
  667. package/build/utils/configuredDevHost.d.ts.map +1 -0
  668. package/build/utils/configuredDevHost.js +19 -0
  669. package/build/utils/configuredDevHost.js.map +1 -0
  670. package/build/utils/debouncedPatch.d.ts +6 -0
  671. package/build/utils/debouncedPatch.d.ts.map +1 -0
  672. package/build/utils/debouncedPatch.js +25 -0
  673. package/build/utils/debouncedPatch.js.map +1 -0
  674. package/build/utils/devLogging.d.ts +26 -0
  675. package/build/utils/devLogging.d.ts.map +1 -0
  676. package/build/utils/devLogging.js +116 -0
  677. package/build/utils/devLogging.js.map +1 -0
  678. package/build/utils/devMiniappLaunch.d.ts +55 -0
  679. package/build/utils/devMiniappLaunch.d.ts.map +1 -0
  680. package/build/utils/devMiniappLaunch.js +175 -0
  681. package/build/utils/devMiniappLaunch.js.map +1 -0
  682. package/build/utils/diagnosticContext.d.ts +3 -0
  683. package/build/utils/diagnosticContext.d.ts.map +1 -0
  684. package/build/utils/diagnosticContext.js +122 -0
  685. package/build/utils/diagnosticContext.js.map +1 -0
  686. package/build/utils/display/composer/ColumnComposer.d.ts +131 -0
  687. package/build/utils/display/composer/ColumnComposer.d.ts.map +1 -0
  688. package/build/utils/display/composer/ColumnComposer.js +204 -0
  689. package/build/utils/display/composer/ColumnComposer.js.map +1 -0
  690. package/build/utils/display/composer/index.d.ts +9 -0
  691. package/build/utils/display/composer/index.d.ts.map +1 -0
  692. package/build/utils/display/composer/index.js +9 -0
  693. package/build/utils/display/composer/index.js.map +1 -0
  694. package/build/utils/display/helpers/DisplayHelpers.d.ts +165 -0
  695. package/build/utils/display/helpers/DisplayHelpers.d.ts.map +1 -0
  696. package/build/utils/display/helpers/DisplayHelpers.js +312 -0
  697. package/build/utils/display/helpers/DisplayHelpers.js.map +1 -0
  698. package/build/utils/display/helpers/ScrollView.d.ts +183 -0
  699. package/build/utils/display/helpers/ScrollView.d.ts.map +1 -0
  700. package/build/utils/display/helpers/ScrollView.js +257 -0
  701. package/build/utils/display/helpers/ScrollView.js.map +1 -0
  702. package/build/utils/display/helpers/index.d.ts +11 -0
  703. package/build/utils/display/helpers/index.d.ts.map +1 -0
  704. package/build/utils/display/helpers/index.js +10 -0
  705. package/build/utils/display/helpers/index.js.map +1 -0
  706. package/build/utils/display/index.d.ts +174 -0
  707. package/build/utils/display/index.d.ts.map +1 -0
  708. package/build/utils/display/index.js +188 -0
  709. package/build/utils/display/index.js.map +1 -0
  710. package/build/utils/display/measurer/TextMeasurer.d.ts +160 -0
  711. package/build/utils/display/measurer/TextMeasurer.d.ts.map +1 -0
  712. package/build/utils/display/measurer/TextMeasurer.js +273 -0
  713. package/build/utils/display/measurer/TextMeasurer.js.map +1 -0
  714. package/build/utils/display/measurer/index.d.ts +10 -0
  715. package/build/utils/display/measurer/index.d.ts.map +1 -0
  716. package/build/utils/display/measurer/index.js +11 -0
  717. package/build/utils/display/measurer/index.js.map +1 -0
  718. package/build/utils/display/measurer/script-detection.d.ts +53 -0
  719. package/build/utils/display/measurer/script-detection.d.ts.map +1 -0
  720. package/build/utils/display/measurer/script-detection.js +184 -0
  721. package/build/utils/display/measurer/script-detection.js.map +1 -0
  722. package/build/utils/display/profiles/g1.d.ts +33 -0
  723. package/build/utils/display/profiles/g1.d.ts.map +1 -0
  724. package/build/utils/display/profiles/g1.js +213 -0
  725. package/build/utils/display/profiles/g1.js.map +1 -0
  726. package/build/utils/display/profiles/g2.d.ts +13 -0
  727. package/build/utils/display/profiles/g2.d.ts.map +1 -0
  728. package/build/utils/display/profiles/g2.js +34 -0
  729. package/build/utils/display/profiles/g2.js.map +1 -0
  730. package/build/utils/display/profiles/index.d.ts +12 -0
  731. package/build/utils/display/profiles/index.d.ts.map +1 -0
  732. package/build/utils/display/profiles/index.js +15 -0
  733. package/build/utils/display/profiles/index.js.map +1 -0
  734. package/build/utils/display/profiles/nex.d.ts +10 -0
  735. package/build/utils/display/profiles/nex.d.ts.map +1 -0
  736. package/build/utils/display/profiles/nex.js +150 -0
  737. package/build/utils/display/profiles/nex.js.map +1 -0
  738. package/build/utils/display/profiles/types.d.ts +103 -0
  739. package/build/utils/display/profiles/types.d.ts.map +1 -0
  740. package/build/utils/display/profiles/types.js +2 -0
  741. package/build/utils/display/profiles/types.js.map +1 -0
  742. package/build/utils/display/profiles/z100.d.ts +33 -0
  743. package/build/utils/display/profiles/z100.d.ts.map +1 -0
  744. package/build/utils/display/profiles/z100.js +182 -0
  745. package/build/utils/display/profiles/z100.js.map +1 -0
  746. package/build/utils/display/scene/anchor.d.ts +17 -0
  747. package/build/utils/display/scene/anchor.d.ts.map +1 -0
  748. package/build/utils/display/scene/anchor.js +33 -0
  749. package/build/utils/display/scene/anchor.js.map +1 -0
  750. package/build/utils/display/scene/degrade.d.ts +25 -0
  751. package/build/utils/display/scene/degrade.d.ts.map +1 -0
  752. package/build/utils/display/scene/degrade.js +64 -0
  753. package/build/utils/display/scene/degrade.js.map +1 -0
  754. package/build/utils/display/scene/differ.d.ts +38 -0
  755. package/build/utils/display/scene/differ.d.ts.map +1 -0
  756. package/build/utils/display/scene/differ.js +107 -0
  757. package/build/utils/display/scene/differ.js.map +1 -0
  758. package/build/utils/display/scene/index.d.ts +11 -0
  759. package/build/utils/display/scene/index.d.ts.map +1 -0
  760. package/build/utils/display/scene/index.js +7 -0
  761. package/build/utils/display/scene/index.js.map +1 -0
  762. package/build/utils/display/scene/process.d.ts +35 -0
  763. package/build/utils/display/scene/process.d.ts.map +1 -0
  764. package/build/utils/display/scene/process.js +201 -0
  765. package/build/utils/display/scene/process.js.map +1 -0
  766. package/build/utils/display/scene/store.d.ts +48 -0
  767. package/build/utils/display/scene/store.d.ts.map +1 -0
  768. package/build/utils/display/scene/store.js +0 -0
  769. package/build/utils/display/scene/store.js.map +1 -0
  770. package/build/utils/display/scene/types.d.ts +139 -0
  771. package/build/utils/display/scene/types.d.ts.map +1 -0
  772. package/build/utils/display/scene/types.js +0 -0
  773. package/build/utils/display/scene/types.js.map +1 -0
  774. package/build/utils/display/wrapper/TextWrapper.d.ts +102 -0
  775. package/build/utils/display/wrapper/TextWrapper.d.ts.map +1 -0
  776. package/build/utils/display/wrapper/TextWrapper.js +471 -0
  777. package/build/utils/display/wrapper/TextWrapper.js.map +1 -0
  778. package/build/utils/display/wrapper/index.d.ts +12 -0
  779. package/build/utils/display/wrapper/index.d.ts.map +1 -0
  780. package/build/utils/display/wrapper/index.js +12 -0
  781. package/build/utils/display/wrapper/index.js.map +1 -0
  782. package/build/utils/display/wrapper/types.d.ts +75 -0
  783. package/build/utils/display/wrapper/types.d.ts.map +1 -0
  784. package/build/utils/display/wrapper/types.js +11 -0
  785. package/build/utils/display/wrapper/types.js.map +1 -0
  786. package/build/utils/e2eMetrics.d.ts +6 -0
  787. package/build/utils/e2eMetrics.d.ts.map +1 -0
  788. package/build/utils/e2eMetrics.js +27 -0
  789. package/build/utils/e2eMetrics.js.map +1 -0
  790. package/build/utils/hardware/hardware.d.ts +42 -0
  791. package/build/utils/hardware/hardware.d.ts.map +1 -0
  792. package/build/utils/hardware/hardware.js +131 -0
  793. package/build/utils/hardware/hardware.js.map +1 -0
  794. package/build/utils/hardware/index.d.ts +2 -0
  795. package/build/utils/hardware/index.d.ts.map +1 -0
  796. package/build/utils/hardware/index.js +2 -0
  797. package/build/utils/hardware/index.js.map +1 -0
  798. package/build/utils/memory/search.d.ts +72 -0
  799. package/build/utils/memory/search.d.ts.map +1 -0
  800. package/build/utils/memory/search.js +178 -0
  801. package/build/utils/memory/search.js.map +1 -0
  802. package/build/utils/miniappDiagnostics.d.ts +64 -0
  803. package/build/utils/miniappDiagnostics.d.ts.map +1 -0
  804. package/build/utils/miniappDiagnostics.js +173 -0
  805. package/build/utils/miniappDiagnostics.js.map +1 -0
  806. package/build/utils/miniappGlobals.d.ts +59 -0
  807. package/build/utils/miniappGlobals.d.ts.map +1 -0
  808. package/build/utils/miniappGlobals.js +223 -0
  809. package/build/utils/miniappGlobals.js.map +1 -0
  810. package/build/utils/permissions/MediaLibraryPermissions.d.ts +45 -0
  811. package/build/utils/permissions/MediaLibraryPermissions.d.ts.map +1 -0
  812. package/build/utils/permissions/MediaLibraryPermissions.js +145 -0
  813. package/build/utils/permissions/MediaLibraryPermissions.js.map +1 -0
  814. package/build/utils/permissions/galleryDisplayName.d.ts +8 -0
  815. package/build/utils/permissions/galleryDisplayName.d.ts.map +1 -0
  816. package/build/utils/permissions/galleryDisplayName.js +25 -0
  817. package/build/utils/permissions/galleryDisplayName.js.map +1 -0
  818. package/build/utils/speakerEmbedding.d.ts +8 -0
  819. package/build/utils/speakerEmbedding.d.ts.map +1 -0
  820. package/build/utils/speakerEmbedding.js +63 -0
  821. package/build/utils/speakerEmbedding.js.map +1 -0
  822. package/build/utils/storage/index.d.ts +3 -0
  823. package/build/utils/storage/index.d.ts.map +1 -0
  824. package/build/utils/storage/index.js +3 -0
  825. package/build/utils/storage/index.js.map +1 -0
  826. package/build/utils/storage/storage.d.ts +24 -0
  827. package/build/utils/storage/storage.d.ts.map +1 -0
  828. package/build/utils/storage/storage.js +85 -0
  829. package/build/utils/storage/storage.js.map +1 -0
  830. package/build/utils/storage/zip.d.ts +3 -0
  831. package/build/utils/storage/zip.d.ts.map +1 -0
  832. package/build/utils/storage/zip.js +14 -0
  833. package/build/utils/storage/zip.js.map +1 -0
  834. package/build/utils/timers/index.d.ts +3 -0
  835. package/build/utils/timers/index.d.ts.map +1 -0
  836. package/build/utils/timers/index.js +3 -0
  837. package/build/utils/timers/index.js.map +1 -0
  838. package/build/utils/timers/timers.d.ts +9 -0
  839. package/build/utils/timers/timers.d.ts.map +1 -0
  840. package/build/utils/timers/timers.js +142 -0
  841. package/build/utils/timers/timers.js.map +1 -0
  842. package/package.json +122 -0
  843. package/src/assets/silence.wav +0 -0
  844. package/src/devtools.ts +13 -0
  845. package/src/engine.ts +198 -0
  846. package/src/facades/dev.ts +213 -0
  847. package/src/facades/display.ts +17 -0
  848. package/src/facades/displayMirror.ts +33 -0
  849. package/src/facades/gallery.ts +69 -0
  850. package/src/facades/glasses.ts +219 -0
  851. package/src/facades/glassesSettings.ts +57 -0
  852. package/src/facades/glassesWifi.ts +68 -0
  853. package/src/facades/maps.ts +13 -0
  854. package/src/facades/memory.ts +46 -0
  855. package/src/facades/miniapps.ts +62 -0
  856. package/src/facades/notifications.ts +14 -0
  857. package/src/facades/ota.ts +177 -0
  858. package/src/facades/pairing.ts +329 -0
  859. package/src/facades/permissions.ts +165 -0
  860. package/src/facades/phoneNotifications.ts +41 -0
  861. package/src/facades/providerKeys.ts +31 -0
  862. package/src/facades/reports.ts +180 -0
  863. package/src/facades/session.ts +54 -0
  864. package/src/facades/settings.ts +57 -0
  865. package/src/facades/speakers.ts +152 -0
  866. package/src/facades/speech.ts +49 -0
  867. package/src/index.ts +214 -0
  868. package/src/internal.ts +155 -0
  869. package/src/runtime/bootstrap.ts +159 -0
  870. package/src/runtime/config.ts +155 -0
  871. package/src/runtime/scanQrSeam.ts +20 -0
  872. package/src/runtime/streamConfig.ts +34 -0
  873. package/src/services/AiTierResolution.ts +106 -0
  874. package/src/services/AppRegistry.ts +1245 -0
  875. package/src/services/AudioCloudUplink.ts +56 -0
  876. package/src/services/AudioPlaybackService.ts +873 -0
  877. package/src/services/AutomaticReportResult.ts +50 -0
  878. package/src/services/BlobStore.ts +823 -0
  879. package/src/services/CaptionsTesterReportService.ts +107 -0
  880. package/src/services/CloudAudioSubscriptionSync.ts +53 -0
  881. package/src/services/CloudClientService.ts +1031 -0
  882. package/src/services/CloudTranscriptE2EMetrics.ts +27 -0
  883. package/src/services/ConnectionCoordinator.ts +65 -0
  884. package/src/services/DevServerBridge.ts +334 -0
  885. package/src/services/DeviceEventRouter.ts +266 -0
  886. package/src/services/DeviceStoreHydration.ts +130 -0
  887. package/src/services/DisplayProcessor.ts +775 -0
  888. package/src/services/ForegroundLocationPermission.ts +24 -0
  889. package/src/services/GlassesReadiness.ts +103 -0
  890. package/src/services/GlassesSettingsSync.ts +140 -0
  891. package/src/services/GlassesStatusProjection.ts +73 -0
  892. package/src/services/HeadingService.ts +122 -0
  893. package/src/services/HotspotOtaTransport.ts +184 -0
  894. package/src/services/HotspotShutdown.ts +41 -0
  895. package/src/services/JSCrashController.ts +189 -0
  896. package/src/services/JSCrashloopReportService.ts +66 -0
  897. package/src/services/JSLogPipeline.ts +166 -0
  898. package/src/services/JSRouter.ts +555 -0
  899. package/src/services/LocalDisplayManager.ts +815 -0
  900. package/src/services/LocalMiniappDataMigration.ts +102 -0
  901. package/src/services/LocalMiniappRuntime.ts +5747 -0
  902. package/src/services/LocalMiniappStorage.ts +82 -0
  903. package/src/services/LocalMiniappUserIdentity.ts +79 -0
  904. package/src/services/LocalSttFallbackCoordinator.ts +247 -0
  905. package/src/services/MapboxTokenService.ts +118 -0
  906. package/src/services/MemoryCapture.ts +61 -0
  907. package/src/services/MemoryStore.ts +633 -0
  908. package/src/services/MicStateCoordinator.ts +259 -0
  909. package/src/services/MiniappEngine.ts +143 -0
  910. package/src/services/MiniappLauncher.ts +365 -0
  911. package/src/services/MiniappLiveness.ts +24 -0
  912. package/src/services/MiniappRunningRegistry.ts +57 -0
  913. package/src/services/NativeHttpResponse.ts +6 -0
  914. package/src/services/NativeNavigationService.ts +176 -0
  915. package/src/services/NavigationHandlers.ts +527 -0
  916. package/src/services/NavigationService.ts +926 -0
  917. package/src/services/NotificationsEmitter.ts +49 -0
  918. package/src/services/OfflineSpeechModelService.ts +168 -0
  919. package/src/services/OtaArtifactDownloader.ts +312 -0
  920. package/src/services/OtaInstallCoordinator.ts +1707 -0
  921. package/src/services/OtaService.ts +89 -0
  922. package/src/services/OtaUpdateCheckService.ts +550 -0
  923. package/src/services/PairingIdentity.ts +154 -0
  924. package/src/services/PhoneCalendarHelpers.ts +212 -0
  925. package/src/services/PhoneCalendarService.ts +61 -0
  926. package/src/services/PhoneCameraFovCoordinator.ts +210 -0
  927. package/src/services/PhoneLocationService.ts +120 -0
  928. package/src/services/PhoneNotificationsSync.ts +46 -0
  929. package/src/services/PhonePhotoCoordinator.ts +435 -0
  930. package/src/services/PhoneStreamCoordinator.ts +874 -0
  931. package/src/services/PhoneVideoCoordinator.ts +203 -0
  932. package/src/services/ProviderKeyValidation.ts +57 -0
  933. package/src/services/STTModelManager.ts +434 -0
  934. package/src/services/SceneRenderer.ts +320 -0
  935. package/src/services/SentenceTtsPipeline.ts +106 -0
  936. package/src/services/SpeakerIdModelManager.ts +151 -0
  937. package/src/services/SpeakerIdSync.ts +79 -0
  938. package/src/services/SpeakerLabelResolver.ts +140 -0
  939. package/src/services/SpeakerProfileStore.ts +265 -0
  940. package/src/services/SpeakerSegmentResolver.ts +194 -0
  941. package/src/services/StreamLifecycleController.ts +203 -0
  942. package/src/services/SupportProfileSync.ts +218 -0
  943. package/src/services/TTSModelManager.ts +466 -0
  944. package/src/services/TranscriptionRouting.ts +47 -0
  945. package/src/services/TtsTextSanitizer.ts +66 -0
  946. package/src/services/UIRouter.ts +250 -0
  947. package/src/services/WebviewBridge.ts +50 -0
  948. package/src/services/WifiAdbRequest.ts +53 -0
  949. package/src/services/asg/GalleryMediaIntegrityReportService.ts +72 -0
  950. package/src/services/asg/asgCameraApi.ts +1786 -0
  951. package/src/services/asg/cameraRollExportCoordinator.ts +627 -0
  952. package/src/services/asg/cameraRollExportLedger.ts +122 -0
  953. package/src/services/asg/galleryMediaValidation.ts +185 -0
  954. package/src/services/asg/galleryNotices.ts +61 -0
  955. package/src/services/asg/galleryPathMigration.ts +22 -0
  956. package/src/services/asg/gallerySettingsService.ts +68 -0
  957. package/src/services/asg/gallerySyncNotifications.ts +235 -0
  958. package/src/services/asg/gallerySyncService.ts +2278 -0
  959. package/src/services/asg/galleryTransferLedger.ts +312 -0
  960. package/src/services/asg/localNetworkTransport.ts +169 -0
  961. package/src/services/asg/localStorageService.ts +652 -0
  962. package/src/services/asg/mediaProcessingQueue.ts +518 -0
  963. package/src/services/audioPlaybackAssets.ts +8 -0
  964. package/src/services/blobPaths.ts +86 -0
  965. package/src/services/cloudStreamApi.ts +142 -0
  966. package/src/services/effectiveCapabilities.ts +27 -0
  967. package/src/services/gallerySyncClock.ts +39 -0
  968. package/src/services/glassesClockSync.ts +115 -0
  969. package/src/services/manifestActions.ts +80 -0
  970. package/src/services/manifestVersionGate.ts +43 -0
  971. package/src/services/memoryStoreInstance.ts +70 -0
  972. package/src/services/navigation/roadNameResolver.ts +103 -0
  973. package/src/services/navigation/routesApiCodec.ts +69 -0
  974. package/src/services/otaDisplayState.ts +156 -0
  975. package/src/services/otaInstallPolicy.ts +132 -0
  976. package/src/services/otaLegacyMapping.ts +71 -0
  977. package/src/services/otaManifestUrl.ts +53 -0
  978. package/src/services/slimStreamStatus.ts +39 -0
  979. package/src/services/soniox/SonioxDirectService.ts +517 -0
  980. package/src/services/soniox/SonioxRealtimeClient.ts +349 -0
  981. package/src/services/soniox/SonioxTokenAssembler.ts +451 -0
  982. package/src/services/speakerProfileStoreInstance.ts +25 -0
  983. package/src/services/uiShim.ts +375 -0
  984. package/src/stores/apps.ts +626 -0
  985. package/src/stores/bluetoothSettingKeys.ts +35 -0
  986. package/src/stores/cloudClientStatus.ts +37 -0
  987. package/src/stores/connection.ts +69 -0
  988. package/src/stores/core.ts +32 -0
  989. package/src/stores/display.ts +121 -0
  990. package/src/stores/gallerySync.ts +384 -0
  991. package/src/stores/glasses.ts +314 -0
  992. package/src/stores/settings.ts +1299 -0
  993. package/src/stores/transcriptionDebug.ts +0 -0
  994. package/src/types/applet.ts +121 -0
  995. package/src/types/asg.ts +58 -0
  996. package/src/types/capabilities/even-realities-g1.ts +70 -0
  997. package/src/types/capabilities/even-realities-g2.ts +98 -0
  998. package/src/types/capabilities/mentra-display.ts +78 -0
  999. package/src/types/capabilities/mentra-live.ts +106 -0
  1000. package/src/types/capabilities/nimo.ts +84 -0
  1001. package/src/types/capabilities/none.ts +79 -0
  1002. package/src/types/capabilities/simulated-glasses.ts +95 -0
  1003. package/src/types/capabilities/vuzix-z100.ts +67 -0
  1004. package/src/types/enums.ts +27 -0
  1005. package/src/types/hardware.ts +220 -0
  1006. package/src/types/index.ts +38 -0
  1007. package/src/utils/GlobalEventEmitter.ts +15 -0
  1008. package/src/utils/cloudClient/RnUdpAdapter.ts +47 -0
  1009. package/src/utils/cloudClient/cloudSecureStore.ts +28 -0
  1010. package/src/utils/configuredDevHost.ts +17 -0
  1011. package/src/utils/debouncedPatch.ts +28 -0
  1012. package/src/utils/devLogging.ts +140 -0
  1013. package/src/utils/devMiniappLaunch.ts +196 -0
  1014. package/src/utils/diagnosticContext.ts +159 -0
  1015. package/src/utils/display/composer/ColumnComposer.ts +285 -0
  1016. package/src/utils/display/composer/index.ts +15 -0
  1017. package/src/utils/display/helpers/DisplayHelpers.ts +409 -0
  1018. package/src/utils/display/helpers/ScrollView.ts +326 -0
  1019. package/src/utils/display/helpers/index.ts +14 -0
  1020. package/src/utils/display/index.ts +273 -0
  1021. package/src/utils/display/measurer/TextMeasurer.ts +346 -0
  1022. package/src/utils/display/measurer/index.ts +21 -0
  1023. package/src/utils/display/measurer/script-detection.ts +218 -0
  1024. package/src/utils/display/profiles/g1.ts +236 -0
  1025. package/src/utils/display/profiles/g2.ts +39 -0
  1026. package/src/utils/display/profiles/index.ts +28 -0
  1027. package/src/utils/display/profiles/nex.ts +166 -0
  1028. package/src/utils/display/profiles/types.ts +132 -0
  1029. package/src/utils/display/profiles/z100.ts +198 -0
  1030. package/src/utils/display/scene/anchor.ts +39 -0
  1031. package/src/utils/display/scene/degrade.ts +80 -0
  1032. package/src/utils/display/scene/differ.ts +128 -0
  1033. package/src/utils/display/scene/index.ts +24 -0
  1034. package/src/utils/display/scene/process.ts +228 -0
  1035. package/src/utils/display/scene/store.ts +0 -0
  1036. package/src/utils/display/scene/types.ts +0 -0
  1037. package/src/utils/display/wrapper/TextWrapper.ts +546 -0
  1038. package/src/utils/display/wrapper/index.ts +15 -0
  1039. package/src/utils/display/wrapper/types.ts +102 -0
  1040. package/src/utils/e2eMetrics.ts +30 -0
  1041. package/src/utils/hardware/hardware.ts +171 -0
  1042. package/src/utils/hardware/index.ts +1 -0
  1043. package/src/utils/memory/search.ts +204 -0
  1044. package/src/utils/miniappDiagnostics.ts +226 -0
  1045. package/src/utils/miniappGlobals.ts +259 -0
  1046. package/src/utils/permissions/MediaLibraryPermissions.ts +161 -0
  1047. package/src/utils/permissions/galleryDisplayName.ts +28 -0
  1048. package/src/utils/speakerEmbedding.ts +58 -0
  1049. package/src/utils/storage/index.ts +2 -0
  1050. package/src/utils/storage/storage.ts +101 -0
  1051. package/src/utils/storage/zip.ts +13 -0
  1052. package/src/utils/timers/index.ts +2 -0
  1053. package/src/utils/timers/timers.ts +175 -0
@@ -0,0 +1,1299 @@
1
+ import {getTimeZone} from "react-native-localize"
2
+ import {AsyncResult, result as Res, Result} from "typesafe-ts"
3
+ import {create} from "zustand"
4
+ import {subscribeWithSelector} from "zustand/middleware"
5
+
6
+ import {storage} from "../utils/storage"
7
+ import {getBluetoothSettingKeysForDevice} from "./bluetoothSettingKeys"
8
+ import {useGlassesStore} from "./glasses"
9
+
10
+ export {MENTRA_LIVE_SETTING_KEYS, getBluetoothSettingKeysForDevice} from "./bluetoothSettingKeys"
11
+
12
+ export interface Setting {
13
+ key: string
14
+ defaultValue: () => any
15
+ writable: boolean
16
+ saveOnServer: boolean
17
+ // change the key to a different key based on the indexer
18
+ // NEVER do any network calls in the indexer (or performance will suffer greatly
19
+ indexer?: (key: string) => string
20
+ // optionally override the value of the setting when it's accessed
21
+ override?: () => any
22
+ // onWrite?: () => void
23
+ persist: boolean
24
+ // Pairing-identity keys are NATIVE-authoritative: the native layer writes
25
+ // them on pairing success (handleDeviceReady) / forget and echoes them down
26
+ // via save_setting; JS鈫抧ative they travel only in the explicit SEEDS
27
+ // (hydration, pre-connect, post-demotion, abandon re-seed) — never the
28
+ // change-push and never the on-connect replay, whose mid-relay snapshot can
29
+ // overwrite a just-promoted identity. PAIRING_IDENTITY_KEYS is derived from
30
+ // this flag so the sync exclusions can't drift from the descriptors.
31
+ nativeAuthoritative?: true
32
+ /**
33
+ * Clear this setting when the build's environment changes.
34
+ *
35
+ * A persisted override normally outranks both the build's env and the
36
+ * compiled default, which is right within one environment: a developer's
37
+ * METRO_AUTO pin should survive a rebuild. It is wrong across environments,
38
+ * where an override pinned under a dev build would silently follow the
39
+ * install onto a store build pointed at production.
40
+ *
41
+ * Note this keys off the build's environment label, so it does NOT fire on a
42
+ * TestFlight to App Store promotion: that ships the same binary with the same
43
+ * label. Promotion is safe because the publishing lane bakes prod URLs, not
44
+ * because this reset runs. See the resolution block in loadSettings.
45
+ *
46
+ * Absent means the value is never invalidated automatically.
47
+ */
48
+ resetOnBuildEnvChange?: true
49
+ }
50
+
51
+ export const SETTINGS: Record<string, Setting> = {
52
+ // feature flags / mantle settings:
53
+ dev_mode: {key: "dev_mode", defaultValue: () => __DEV__, writable: true, saveOnServer: true, persist: true}, // deprecated
54
+ debug_mode: {key: "debug_mode", defaultValue: () => __DEV__, writable: true, saveOnServer: true, persist: true},
55
+ android_notification_listener_enabled: {
56
+ key: "android_notification_listener_enabled",
57
+ // Operational kill switch. The listener now runs in a guarded lightweight
58
+ // process, so normal installs can safely capture notifications by default.
59
+ defaultValue: () => true,
60
+ writable: true,
61
+ saveOnServer: true,
62
+ persist: true,
63
+ },
64
+ super_mode: {key: "super_mode", defaultValue: () => false, writable: true, saveOnServer: true, persist: true},
65
+ app_boot_extra_info: {
66
+ key: "app_boot_extra_info",
67
+ defaultValue: () => false,
68
+ writable: true,
69
+ saveOnServer: true,
70
+ persist: true,
71
+ },
72
+ miniapp_dev_mode: {
73
+ key: "miniapp_dev_mode",
74
+ defaultValue: () => false,
75
+ writable: true,
76
+ saveOnServer: true,
77
+ persist: true,
78
+ },
79
+ enable_squircles: {
80
+ key: "enable_squircles",
81
+ defaultValue: () => true,
82
+ writable: true,
83
+ saveOnServer: true,
84
+ persist: true,
85
+ },
86
+ android_blur: {
87
+ key: "android_blur",
88
+ defaultValue: () => {
89
+ return false
90
+ },
91
+ writable: true,
92
+ saveOnServer: true,
93
+ persist: true,
94
+ },
95
+ android_inner_shadow: {
96
+ key: "android_inner_shadow",
97
+ defaultValue: () => {
98
+ return false
99
+ },
100
+ writable: true,
101
+ saveOnServer: true,
102
+ persist: true,
103
+ },
104
+ ios_glass_effect: {
105
+ key: "ios_glass_effect",
106
+ defaultValue: () => true,
107
+ writable: true,
108
+ saveOnServer: true,
109
+ persist: true,
110
+ },
111
+ ios_app_switcher_bottom_swipe: {
112
+ key: "ios_app_switcher_bottom_swipe",
113
+ defaultValue: () => false,
114
+ writable: true,
115
+ saveOnServer: true,
116
+ persist: true,
117
+ },
118
+ debug_console: {
119
+ key: "debug_console",
120
+ defaultValue: () => false,
121
+ writable: true,
122
+ saveOnServer: true,
123
+ persist: true,
124
+ },
125
+ // Show the glasses display mirror on the home screen even when a real
126
+ // (non-simulated) pair of glasses is paired. Toggled from the glasses card's
127
+ // long-press menu.
128
+ home_mirror: {
129
+ key: "home_mirror",
130
+ defaultValue: () => false,
131
+ writable: true,
132
+ saveOnServer: true,
133
+ persist: true,
134
+ },
135
+ debug_navigation_history: {
136
+ key: "debug_navigation_history",
137
+ defaultValue: () => false,
138
+ writable: true,
139
+ saveOnServer: true,
140
+ persist: true,
141
+ },
142
+ debug_core_status_bar: {
143
+ key: "debug_core_status_bar",
144
+ defaultValue: () => false,
145
+ writable: true,
146
+ saveOnServer: true,
147
+ persist: true,
148
+ },
149
+ // Mentra Nex feature flags (off by default; toggled from Nex Developer Settings).
150
+ // When on, the Nex display skips ASCII-only text sanitization so CJK/Chinese
151
+ // captions render on glasses. Synced to the Bluetooth SDK via BLUETOOTH_SETTING_KEYS.
152
+ nex_chinese_captions: {
153
+ key: "nex_chinese_captions",
154
+ defaultValue: () => false,
155
+ writable: true,
156
+ saveOnServer: true,
157
+ persist: true,
158
+ },
159
+ // When on, LC3 audio received from Nex glasses is played back (Android only).
160
+ // Local-only dev toggle: defaults off and never synced to the cloud account
161
+ // (saveOnServer: false); persists locally so it survives app restarts.
162
+ // Key renamed from the legacy `nex_audio_playback` so stale server/local
163
+ // values (saved back when this was saveOnServer:true) can't re-enable it.
164
+ nex_lc3_audio_playback: {
165
+ key: "nex_lc3_audio_playback",
166
+ defaultValue: () => false,
167
+ writable: true,
168
+ saveOnServer: false,
169
+ persist: true,
170
+ },
171
+ // Passive conversation memory: when on, the runtime persists every FINAL
172
+ // transcript into the shared user-scoped MemoryStore (Settings > Memory),
173
+ // independent of which miniapps are running or subscribed. Off = nothing is
174
+ // written; existing history is kept until the user clears it. Device-local
175
+ // only (saveOnServer: false) — the timeline itself never leaves the phone,
176
+ // so the switch that governs it shouldn't either. Defaults ON to preserve
177
+ // the behavior the Assistant miniapp previously provided.
178
+ memory_save_conversations: {
179
+ key: "memory_save_conversations",
180
+ defaultValue: () => true,
181
+ writable: true,
182
+ saveOnServer: false,
183
+ persist: true,
184
+ },
185
+ china_deployment: {
186
+ key: "china_deployment",
187
+ defaultValue: () => (process.env.EXPO_PUBLIC_DEPLOYMENT_REGION === "china" ? true : false),
188
+ override: () => (process.env.EXPO_PUBLIC_DEPLOYMENT_REGION === "china" ? true : false),
189
+ writable: false,
190
+ saveOnServer: false,
191
+ persist: true,
192
+ },
193
+ // Hard privacy stance (Settings > Privacy): when true the app never talks to
194
+ // Glassly cloud at all — the CloudClient is not constructed, so the runtime
195
+ // websocket, cloud STT/TTS, managed photo/stream uploads, and report uploads
196
+ // all go away with it. Distinct from `offline_mode`, which is a transient
197
+ // "I'm offline right now" app-grid filter the user flips from Speech; this
198
+ // one is a durable choice that survives reconnecting to a good network.
199
+ // Device-local by design: a "don't use the cloud" preference must not itself
200
+ // be uploaded to the cloud, so saveOnServer stays false. Not in
201
+ // BLUETOOTH_SETTING_KEYS — glasses firmware has no use for it.
202
+ disable_cloud: {
203
+ key: "disable_cloud",
204
+ defaultValue: () => false,
205
+ writable: true,
206
+ saveOnServer: false,
207
+ persist: true,
208
+ },
209
+ // Cloud V2 endpoint OVERRIDES. Empty = no override; cloudClient's resolveUrl
210
+ // owns the full precedence (override -> env -> Metro-derived dev default).
211
+ // The value may be an explicit URL or the METRO_AUTO sentinel ("my dev
212
+ // laptop", resolved live from Metro so it survives network changes). Never
213
+ // bake an env var or a personal LAN IP into the default here: that makes the
214
+ // override branch always-truthy and strands devs on a stale address.
215
+ cloud_core_url: {
216
+ key: "cloud_core_url",
217
+ defaultValue: () => "",
218
+ writable: true,
219
+ saveOnServer: false,
220
+ persist: true,
221
+ resetOnBuildEnvChange: true,
222
+ },
223
+ cloud_runtime_url: {
224
+ key: "cloud_runtime_url",
225
+ defaultValue: () => "",
226
+ writable: true,
227
+ saveOnServer: false,
228
+ persist: true,
229
+ resetOnBuildEnvChange: true,
230
+ },
231
+ // Bookmarked Cloud V2 endpoint pairs. Each entry is {label, coreUrl,
232
+ // runtimeUrl} — core + runtime are saved together because they are always
233
+ // applied as a matched set (presets fill both; Save & Test verifies both).
234
+ saved_cloud_url_pairs: {
235
+ key: "saved_cloud_url_pairs",
236
+ defaultValue: () => [],
237
+ writable: true,
238
+ saveOnServer: false,
239
+ persist: true,
240
+ },
241
+ // User-supplied Soniox API key (Settings > Keys). Non-empty enables
242
+ // phone -> Soniox direct transcription: audio streams from the device to
243
+ // Soniox and transcription/translation subscriptions are withheld from the
244
+ // cloud. Device-local by design — the key must never sync to a server
245
+ // (saveOnServer: false) and must never ride BLE to glasses (do NOT add to
246
+ // bluetoothSettingKeys).
247
+ soniox_api_key: {
248
+ key: "soniox_api_key",
249
+ defaultValue: () => "",
250
+ writable: true,
251
+ saveOnServer: false,
252
+ persist: true,
253
+ },
254
+ // User-supplied Mapbox access token (Settings > Keys). The app ships no
255
+ // baked Mapbox key: every consumer resolves this key first, else the public
256
+ // render token served by Glassly Cloud at runtime (MapboxTokenService) —
257
+ // and with the cloud disabled this key is the ONLY token source, by
258
+ // design. The `_api_key`
259
+ // suffix is load-bearing: diagnosticContext redacts settings by that suffix,
260
+ // so renaming would leak the key into bug reports. Device-local by design —
261
+ // never synced to a server (saveOnServer: false) and never on BLE (do NOT
262
+ // add to bluetoothSettingKeys).
263
+ mapbox_api_key: {
264
+ key: "mapbox_api_key",
265
+ defaultValue: () => "",
266
+ writable: true,
267
+ saveOnServer: false,
268
+ persist: true,
269
+ },
270
+ // User-supplied AI/voice provider keys (Settings > API Keys). Not consumed
271
+ // by the app itself — they exist so miniapps declaring the API_KEYS manifest
272
+ // permission can read them via session.keys.get() (see
273
+ // MINIAPP_READABLE_API_KEYS in LocalMiniappRuntime; mapbox is also readable
274
+ // there, soniox is not). Same invariants as the other provider keys: the
275
+ // `_api_key` suffix is load-bearing (diagnosticContext redacts by suffix),
276
+ // device-local by design — never synced to a server (saveOnServer: false)
277
+ // and never on BLE (do NOT add to bluetoothSettingKeys).
278
+ anthropic_api_key: {
279
+ key: "anthropic_api_key",
280
+ defaultValue: () => "",
281
+ writable: true,
282
+ saveOnServer: false,
283
+ persist: true,
284
+ },
285
+ gemini_api_key: {
286
+ key: "gemini_api_key",
287
+ defaultValue: () => "",
288
+ writable: true,
289
+ saveOnServer: false,
290
+ persist: true,
291
+ },
292
+ openai_api_key: {
293
+ key: "openai_api_key",
294
+ defaultValue: () => "",
295
+ writable: true,
296
+ saveOnServer: false,
297
+ persist: true,
298
+ },
299
+ elevenlabs_api_key: {
300
+ key: "elevenlabs_api_key",
301
+ defaultValue: () => "",
302
+ writable: true,
303
+ saveOnServer: false,
304
+ persist: true,
305
+ },
306
+ // Per-tier model picks for session.ai completions (Settings > AI Models).
307
+ // Miniapps request a TIER ("quick"/"balanced"/"frontier"), never a
308
+ // provider/model; these settings are how the user overrides what each tier
309
+ // resolves to. Value is "auto" (pick by which provider keys are saved — see
310
+ // AiTierResolution) or "<provider>:<model>" from the curated registry.
311
+ // Device-local: the mapping only matters to this phone's direct/cloud calls.
312
+ ai_model_quick: {
313
+ key: "ai_model_quick",
314
+ defaultValue: () => "auto",
315
+ writable: true,
316
+ saveOnServer: false,
317
+ persist: true,
318
+ },
319
+ ai_model_balanced: {
320
+ key: "ai_model_balanced",
321
+ defaultValue: () => "auto",
322
+ writable: true,
323
+ saveOnServer: false,
324
+ persist: true,
325
+ },
326
+ ai_model_frontier: {
327
+ key: "ai_model_frontier",
328
+ defaultValue: () => "auto",
329
+ writable: true,
330
+ saveOnServer: false,
331
+ persist: true,
332
+ },
333
+ // Developer override for the ASG OTA manifest URL. null/empty = no override;
334
+ // the normal selection applies (legacy-glasses gate, EXPO_PUBLIC_ASG_OTA_VERSION_URL,
335
+ // glasses-reported URL, then production). See resolveOtaManifestUrl.
336
+ ota_version_url: {
337
+ key: "ota_version_url",
338
+ defaultValue: () => null,
339
+ writable: true,
340
+ saveOnServer: false,
341
+ persist: true,
342
+ },
343
+ saved_ota_version_urls: {
344
+ key: "saved_ota_version_urls",
345
+ defaultValue: () => [],
346
+ writable: true,
347
+ saveOnServer: false,
348
+ persist: true,
349
+ },
350
+ reconnect_on_app_foreground: {
351
+ key: "reconnect_on_app_foreground",
352
+ defaultValue: () => true,
353
+ writable: true,
354
+ saveOnServer: true,
355
+ persist: true,
356
+ },
357
+ location_tier: {key: "location_tier", defaultValue: () => "", writable: true, saveOnServer: true, persist: true},
358
+ // Volatile bearer synced to Bluetooth for glasses-side Cloud V2 calls. The
359
+ // key name is kept for BLE compatibility, but the value must never be loaded
360
+ // from or saved to the legacy Cloud V1 settings store.
361
+ core_token: {key: "core_token", defaultValue: () => "", writable: true, saveOnServer: false, persist: false},
362
+ auth_email: {key: "auth_email", defaultValue: () => "", writable: true, saveOnServer: false, persist: true},
363
+ // Pairing identity is per-phone, not per-account: two phones on one account
364
+ // can be paired to different glasses, so none of these keys may sync to the
365
+ // server (saveOnServer: false — a stale server copy resurrecting a local
366
+ // pairing identity is exactly the desync this group's flags prevent).
367
+ //
368
+ // Two-phase identity: pending_wearable is the model the user last STARTED
369
+ // pairing (written at selection, rendered as a finish-pairing card);
370
+ // default_wearable + device_name + device_address are only promoted by the
371
+ // native layer when pairing actually succeeds (handleDeviceReady).
372
+ // pending_wearable persists so an abandoned selection still shows its
373
+ // finish-pairing card after an app restart.
374
+ pending_wearable: {
375
+ key: "pending_wearable",
376
+ defaultValue: () => "",
377
+ writable: true,
378
+ saveOnServer: false,
379
+ persist: true,
380
+ nativeAuthoritative: true,
381
+ },
382
+ default_wearable: {
383
+ key: "default_wearable",
384
+ defaultValue: () => "",
385
+ writable: true,
386
+ saveOnServer: false,
387
+ persist: true,
388
+ nativeAuthoritative: true,
389
+ },
390
+ device_name: {
391
+ key: "device_name",
392
+ defaultValue: () => "",
393
+ writable: true,
394
+ saveOnServer: false,
395
+ persist: true,
396
+ nativeAuthoritative: true,
397
+ },
398
+ device_address: {
399
+ key: "device_address",
400
+ defaultValue: () => "",
401
+ writable: true,
402
+ saveOnServer: false,
403
+ persist: true,
404
+ nativeAuthoritative: true,
405
+ },
406
+ project_name: {
407
+ key: "project_name",
408
+ defaultValue: () => "",
409
+ writable: true,
410
+ saveOnServer: false,
411
+ persist: true,
412
+ nativeAuthoritative: true,
413
+ },
414
+ default_controller: {
415
+ key: "default_controller",
416
+ defaultValue: () => "",
417
+ writable: true,
418
+ saveOnServer: false,
419
+ persist: true,
420
+ nativeAuthoritative: true,
421
+ },
422
+ pending_controller: {
423
+ key: "pending_controller",
424
+ defaultValue: () => "",
425
+ writable: true,
426
+ saveOnServer: false,
427
+ persist: true,
428
+ nativeAuthoritative: true,
429
+ },
430
+ controller_device_name: {
431
+ key: "controller_device_name",
432
+ defaultValue: () => "",
433
+ writable: true,
434
+ saveOnServer: false,
435
+ persist: true,
436
+ nativeAuthoritative: true,
437
+ },
438
+ controller_address: {
439
+ key: "controller_address",
440
+ defaultValue: () => "",
441
+ writable: true,
442
+ saveOnServer: false,
443
+ persist: true,
444
+ nativeAuthoritative: true,
445
+ },
446
+ // ui state:
447
+ home_background: {
448
+ key: "home_background",
449
+ defaultValue: () => "",
450
+ writable: true,
451
+ saveOnServer: false,
452
+ persist: true,
453
+ },
454
+ theme_preference: {
455
+ key: "theme_preference",
456
+ defaultValue: () => "system",
457
+ // override: () => "light",
458
+ writable: true,
459
+ saveOnServer: true,
460
+ persist: true,
461
+ },
462
+ enable_phone_notifications: {
463
+ key: "enable_phone_notifications",
464
+ defaultValue: () => false,
465
+ writable: true,
466
+ saveOnServer: true,
467
+ persist: true,
468
+ },
469
+ settings_access_count: {
470
+ key: "settings_access_count",
471
+ defaultValue: () => 0,
472
+ writable: true,
473
+ saveOnServer: true,
474
+ persist: true,
475
+ },
476
+ show_advanced_settings: {
477
+ key: "show_advanced_settings",
478
+ defaultValue: () => false,
479
+ writable: true,
480
+ saveOnServer: false,
481
+ persist: true,
482
+ },
483
+ onboarding_completed: {
484
+ key: "onboarding_completed",
485
+ defaultValue: () => false,
486
+ writable: true,
487
+ saveOnServer: true,
488
+ persist: true,
489
+ },
490
+ onboarding_live_completed: {
491
+ key: "onboarding_live_completed",
492
+ defaultValue: () => false,
493
+ writable: true,
494
+ saveOnServer: true,
495
+ persist: true,
496
+ },
497
+ onboarding_os_completed: {
498
+ key: "onboarding_os_completed",
499
+ defaultValue: () => false,
500
+ writable: true,
501
+ saveOnServer: true,
502
+ persist: true,
503
+ },
504
+ has_ever_activated_app: {
505
+ key: "has_ever_activated_app",
506
+ defaultValue: () => false,
507
+ writable: true,
508
+ saveOnServer: true,
509
+ persist: true,
510
+ },
511
+
512
+ // Bluetooth SDK settings:
513
+ sensing_enabled: {
514
+ key: "sensing_enabled",
515
+ defaultValue: () => true,
516
+ writable: true,
517
+ saveOnServer: true,
518
+ persist: true,
519
+ },
520
+ power_saving_mode: {
521
+ key: "power_saving_mode",
522
+ defaultValue: () => false,
523
+ writable: true,
524
+ saveOnServer: true,
525
+ persist: true,
526
+ },
527
+ // The Glassly App intentionally preserves Mentra Live's historical VAD-on
528
+ // product default. Standalone public Bluetooth SDK hosts default VAD off so
529
+ // their microphone audio remains continuous.
530
+ voice_activity_detection_enabled: {
531
+ key: "voice_activity_detection_enabled",
532
+ defaultValue: () => true,
533
+ writable: true,
534
+ saveOnServer: true,
535
+ persist: true,
536
+ },
537
+ // Mentra Live center-mic loudness / "Barrier" gate (cs_swit type 10). Default on.
538
+ loudness_gate_enabled: {
539
+ key: "loudness_gate_enabled",
540
+ defaultValue: () => true,
541
+ writable: true,
542
+ saveOnServer: true,
543
+ persist: true,
544
+ },
545
+ always_on_status_bar: {
546
+ key: "always_on_status_bar",
547
+ defaultValue: () => false,
548
+ writable: true,
549
+ saveOnServer: true,
550
+ persist: true,
551
+ },
552
+ // Legacy cloud/mobile setting name. Locally it maps to glasses-side Voice Activity Detection.
553
+ bypass_vad_for_debugging: {
554
+ key: "bypass_vad_for_debugging",
555
+ defaultValue: () => false,
556
+ writable: true,
557
+ saveOnServer: true,
558
+ persist: true,
559
+ },
560
+ bypass_audio_encoding_for_debugging: {
561
+ key: "bypass_audio_encoding_for_debugging",
562
+ defaultValue: () => false,
563
+ writable: true,
564
+ saveOnServer: true,
565
+ persist: true,
566
+ },
567
+ metric_system: {
568
+ key: "metric_system",
569
+ defaultValue: () => false,
570
+ writable: true,
571
+ saveOnServer: true,
572
+ persist: true,
573
+ },
574
+ twelve_hour_time: {
575
+ key: "twelve_hour_time",
576
+ defaultValue: () => true,
577
+ writable: true,
578
+ saveOnServer: true,
579
+ persist: true,
580
+ },
581
+ enforce_local_transcription: {
582
+ key: "enforce_local_transcription",
583
+ defaultValue: () => false,
584
+ writable: true,
585
+ saveOnServer: true,
586
+ persist: true,
587
+ },
588
+ // "Recognize my voice" (Settings > Voice Recognition). Drives the on-device
589
+ // SpeakerIdEngine. Device-local by design — voice profiles are biometric
590
+ // data, so nothing about this feature syncs to the server.
591
+ speaker_id_enabled: {
592
+ key: "speaker_id_enabled",
593
+ defaultValue: () => false,
594
+ writable: true,
595
+ saveOnServer: false,
596
+ persist: true,
597
+ },
598
+ // LC3 audio quality setting (frame size in bytes)
599
+ // 20 = 16kbps (low bandwidth), 40 = 32kbps (balanced), 60 = 48kbps (high quality)
600
+ lc3_frame_size: {
601
+ key: "lc3_frame_size",
602
+ defaultValue: () => 60,
603
+ writable: true,
604
+ saveOnServer: false,
605
+ persist: true,
606
+ },
607
+ preferred_mic: {
608
+ key: "preferred_mic",
609
+ defaultValue: () => "auto",
610
+ writable: true,
611
+ indexer: (key: string) => {
612
+ const glasses = useSettingsStore.getState().getSetting(SETTINGS.default_wearable.key)
613
+ if (glasses) {
614
+ return `${key}:${glasses}`
615
+ }
616
+ return key
617
+ },
618
+ saveOnServer: true,
619
+ persist: true,
620
+ },
621
+ screen_disabled: {
622
+ key: "screen_disabled",
623
+ defaultValue: () => false,
624
+ writable: true,
625
+ saveOnServer: false,
626
+ persist: true,
627
+ },
628
+ // glasses settings:
629
+ contextual_dashboard: {
630
+ key: "contextual_dashboard",
631
+ defaultValue: () => true,
632
+ writable: true,
633
+ saveOnServer: true,
634
+ persist: true,
635
+ },
636
+ use_native_dashboard: {
637
+ key: "use_native_dashboard",
638
+ defaultValue: () => true,
639
+ writable: true,
640
+ saveOnServer: true,
641
+ persist: true,
642
+ },
643
+ head_up_angle: {key: "head_up_angle", defaultValue: () => 45, writable: true, saveOnServer: true, persist: true},
644
+ brightness: {key: "brightness", defaultValue: () => 50, writable: true, saveOnServer: true, persist: true},
645
+ auto_brightness: {
646
+ key: "auto_brightness",
647
+ defaultValue: () => true,
648
+ writable: true,
649
+ saveOnServer: true,
650
+ persist: true,
651
+ },
652
+ dashboard_height: {
653
+ key: "dashboard_height",
654
+ defaultValue: () => 4,
655
+ writable: true,
656
+ saveOnServer: true,
657
+ persist: true,
658
+ },
659
+ dashboard_depth: {
660
+ key: "dashboard_depth",
661
+ defaultValue: () => 2,
662
+ writable: true,
663
+ saveOnServer: true,
664
+ persist: true,
665
+ },
666
+ menu_apps: {
667
+ key: "menu_apps",
668
+ defaultValue: () => null,
669
+ writable: true,
670
+ saveOnServer: true,
671
+ persist: true,
672
+ },
673
+ calendar_events: {
674
+ key: "calendar_events",
675
+ defaultValue: () => [],
676
+ writable: true,
677
+ saveOnServer: false,
678
+ persist: false,
679
+ },
680
+ // button settings
681
+ // Legacy persisted/cloud key; hardware behavior is now controlled by gallery_mode plus capture settings.
682
+ button_mode: {key: "button_mode", defaultValue: () => "photo", writable: true, saveOnServer: true, persist: true},
683
+ button_photo_size: {
684
+ key: "button_photo_size",
685
+ defaultValue: () => "max",
686
+ writable: true,
687
+ saveOnServer: true,
688
+ persist: true,
689
+ },
690
+ button_video_settings: {
691
+ key: "button_video_settings",
692
+ defaultValue: () => ({width: 1920, height: 1080, fps: 30}),
693
+ writable: true,
694
+ saveOnServer: true,
695
+ persist: true,
696
+ },
697
+ button_max_recording_time: {
698
+ key: "button_max_recording_time",
699
+ defaultValue: () => 10,
700
+ writable: true,
701
+ saveOnServer: true,
702
+ persist: true,
703
+ },
704
+ camera_fov: {
705
+ key: "camera_fov",
706
+ defaultValue: () => ({fov: 118, roi_position: 0}),
707
+ writable: true,
708
+ saveOnServer: true,
709
+ persist: true,
710
+ },
711
+ media_post_processing: {
712
+ key: "media_post_processing",
713
+ defaultValue: () => false,
714
+ writable: true,
715
+ saveOnServer: true,
716
+ persist: true,
717
+ },
718
+
719
+ // time zone settings
720
+ time_zone: {
721
+ key: "time_zone",
722
+ defaultValue: () => "",
723
+ writable: true,
724
+ override: () => {
725
+ const override = useSettingsStore.getState().getSetting(SETTINGS.time_zone_override.key)
726
+ if (override) {
727
+ return override
728
+ }
729
+ return getTimeZone()
730
+ },
731
+ saveOnServer: true,
732
+ persist: true,
733
+ },
734
+ time_zone_override: {
735
+ key: "time_zone_override",
736
+ defaultValue: () => "",
737
+ writable: true,
738
+ saveOnServer: true,
739
+ persist: true,
740
+ },
741
+ // offline applets
742
+ offline_mode: {key: "offline_mode", defaultValue: () => false, writable: true, saveOnServer: true, persist: true},
743
+ // Runtime flag: coordinator flips this on when cloud STT has failed and fallback is active.
744
+ // Native GlassesStore watches it to gate PCM 鈫?Sherpa feeding. Not user-facing.
745
+ local_stt_fallback_active: {
746
+ key: "local_stt_fallback_active",
747
+ defaultValue: () => false,
748
+ writable: true,
749
+ saveOnServer: false,
750
+ persist: false,
751
+ },
752
+ // Runtime flag: why the coordinator activated local STT ("" while inactive).
753
+ // Values are LocalSttFallbackReason strings. UI-only; native ignores it.
754
+ local_stt_fallback_reason: {
755
+ key: "local_stt_fallback_reason",
756
+ defaultValue: () => "",
757
+ writable: true,
758
+ saveOnServer: false,
759
+ persist: false,
760
+ },
761
+ gallery_mode: {key: "gallery_mode", defaultValue: () => true, writable: true, saveOnServer: true, persist: true},
762
+ gallery_sync_explained: {
763
+ key: "gallery_sync_explained",
764
+ defaultValue: () => false,
765
+ writable: true,
766
+ saveOnServer: false,
767
+ persist: true,
768
+ },
769
+ offline_camera_running: {
770
+ key: "offline_camera_running",
771
+ defaultValue: () => false,
772
+ writable: true,
773
+ saveOnServer: false,
774
+ persist: true,
775
+ },
776
+ // offline translation
777
+ offline_translation_running: {
778
+ key: "offline_translation_running",
779
+ defaultValue: () => false,
780
+ writable: true,
781
+ saveOnServer: true,
782
+ persist: true,
783
+ },
784
+ offline_translation_source: {
785
+ key: "offline_translation_source",
786
+ defaultValue: () => "en",
787
+ writable: true,
788
+ saveOnServer: true,
789
+ persist: true,
790
+ },
791
+ offline_translation_target: {
792
+ key: "offline_translation_target",
793
+ defaultValue: () => "es",
794
+ writable: true,
795
+ saveOnServer: true,
796
+ persist: true,
797
+ },
798
+ // button action settings
799
+ default_button_action_enabled: {
800
+ key: "default_button_action_enabled",
801
+ defaultValue: () => true,
802
+ writable: true,
803
+ saveOnServer: true,
804
+ persist: true,
805
+ },
806
+ default_button_action_app: {
807
+ key: "default_button_action_app",
808
+ defaultValue: () => "com.glassly.camera",
809
+ writable: true,
810
+ saveOnServer: true,
811
+ persist: true,
812
+ },
813
+ // notifications
814
+ notifications_blocklist: {
815
+ key: "notifications_blocklist",
816
+ defaultValue: () => [],
817
+ writable: true,
818
+ saveOnServer: true,
819
+ persist: true,
820
+ },
821
+ // Cached required version from server - used to enforce updates even when offline
822
+ cached_required_version: {
823
+ key: "cached_required_version",
824
+ defaultValue: () => "",
825
+ writable: true,
826
+ saveOnServer: false,
827
+ persist: true,
828
+ },
829
+ // OTA update dismissal - stores the version code user dismissed (not persisted so resets on app restart)
830
+ dismissed_ota_version: {
831
+ key: "dismissed_ota_version",
832
+ defaultValue: () => "",
833
+ writable: true,
834
+ saveOnServer: false,
835
+ persist: false,
836
+ },
837
+ // Contact email for feedback (persisted for Apple private relay users)
838
+ contact_email: {
839
+ key: "contact_email",
840
+ defaultValue: () => "",
841
+ writable: true,
842
+ saveOnServer: false,
843
+ persist: true,
844
+ },
845
+ } as const
846
+
847
+ export const OFFLINE_APPLETS: string[] = ["com.glassly.livecaptions", "com.glassly.camera"]
848
+
849
+ // These settings are automatically synced to the Bluetooth SDK.
850
+ // Keep this list hardware-facing; app/UI/cloud-only preferences should stay in JS/Crust.
851
+ export const BLUETOOTH_SETTING_KEYS: string[] = [
852
+ // Bluetooth settings:
853
+ SETTINGS.sensing_enabled.key,
854
+ SETTINGS.power_saving_mode.key,
855
+ SETTINGS.voice_activity_detection_enabled.key,
856
+ SETTINGS.loudness_gate_enabled.key,
857
+ SETTINGS.lc3_frame_size.key,
858
+ SETTINGS.preferred_mic.key,
859
+ SETTINGS.screen_disabled.key,
860
+ SETTINGS.auth_email.key,
861
+ SETTINGS.core_token.key,
862
+ // glasses settings:
863
+ SETTINGS.contextual_dashboard.key,
864
+ SETTINGS.head_up_angle.key,
865
+ SETTINGS.brightness.key,
866
+ SETTINGS.auto_brightness.key,
867
+ SETTINGS.dashboard_height.key,
868
+ SETTINGS.dashboard_depth.key,
869
+ SETTINGS.menu_apps.key,
870
+ SETTINGS.calendar_events.key,
871
+ SETTINGS.use_native_dashboard.key,
872
+ SETTINGS.twelve_hour_time.key,
873
+ SETTINGS.metric_system.key,
874
+ // button:
875
+ SETTINGS.button_photo_size.key,
876
+ // Legacy MentraLive native code reads the object form when syncing video settings.
877
+ SETTINGS.button_video_settings.key,
878
+ SETTINGS.button_max_recording_time.key,
879
+ SETTINGS.camera_fov.key,
880
+ // device / pairing:
881
+ SETTINGS.pending_wearable.key,
882
+ SETTINGS.default_wearable.key,
883
+ SETTINGS.device_name.key,
884
+ SETTINGS.device_address.key,
885
+ SETTINGS.project_name.key,
886
+ SETTINGS.default_controller.key,
887
+ SETTINGS.pending_controller.key,
888
+ SETTINGS.controller_device_name.key,
889
+ SETTINGS.controller_address.key,
890
+ // offline applets:
891
+ SETTINGS.offline_mode.key,
892
+ // Runtime flag flipped by LocalSttFallbackCoordinator. Native reads it from
893
+ // GlassesStore to gate PCM 鈫?Sherpa feeding in handlePcm and to keep the
894
+ // mic on while local STT is the active engine.
895
+ SETTINGS.local_stt_fallback_active.key,
896
+ SETTINGS.gallery_mode.key,
897
+ // Mentra Nex feature flags:
898
+ SETTINGS.nex_chinese_captions.key,
899
+ SETTINGS.nex_lc3_audio_playback.key,
900
+ ]
901
+
902
+ // Pairing identity is NATIVE-authoritative: the native layer writes it on
903
+ // pairing success (handleDeviceReady) / forget and echoes it down via
904
+ // save_setting; JS persists those echoes. JS鈫抧ative, identity travels ONLY in
905
+ // the explicit full seeds (device-store hydration, pre-connect push,
906
+ // post-demotion re-push) — never in the change-push subscription. Relaying an
907
+ // echoed identity change back up would make the sync bidirectional with loop
908
+ // gain 1: two identity values in flight (e.g. a boot demotion crossing a
909
+ // native promotion) then chase each other through push鈫抋pply鈫抏cho鈫抪ush
910
+ // forever, flapping the UI.
911
+ //
912
+ // Derived from the `nativeAuthoritative` descriptor flag (not maintained as a
913
+ // parallel list) so the change-push exclusion in GlassesSettingsSync can't
914
+ // drift from the setting declarations.
915
+ export const PAIRING_IDENTITY_KEYS: string[] = Object.values(SETTINGS)
916
+ .filter((setting) => setting.nativeAuthoritative)
917
+ .map((setting) => setting.key)
918
+
919
+ // const PER_GLASSES_SETTINGS_KEYS: string[] = [SETTINGS.preferred_mic.key]
920
+
921
+ export interface SettingsState {
922
+ // Settings values
923
+ settings: Record<string, any>
924
+ // Loading states
925
+ isInitialized: boolean
926
+ // Actions
927
+ setSetting: (key: string, value: any, updateServer?: boolean) => AsyncResult<void, Error>
928
+ setManyLocally: (settings: Record<string, any>) => AsyncResult<void, Error>
929
+ getSetting: (key: string) => any
930
+ // loadSetting: (key: string) => AsyncResult<void, Error>
931
+ loadAllSettings: () => AsyncResult<void, Error>
932
+ // Utility methods
933
+ getBluetoothSettings: () => Record<string, any>
934
+ resetAllSettingsLocally: () => void
935
+ }
936
+
937
+ const getDefaultSettings = () =>
938
+ Object.keys(SETTINGS).reduce(
939
+ (acc, key) => {
940
+ acc[key] = SETTINGS[key].defaultValue()
941
+ return acc
942
+ },
943
+ {} as Record<string, any>,
944
+ )
945
+
946
+ // Single-flight for loadAllSettings: the host fires it at module load and
947
+ // engine.start()'s device-store hydration awaits it — without the memo the
948
+ // second caller runs a duplicate full disk load while the first is still in
949
+ // flight. Cleared on failure so a later call can retry.
950
+ let loadAllSettingsInFlight: AsyncResult<void, Error> | null = null
951
+
952
+ function printableSettingValue(key: string, value: unknown): string {
953
+ return key.includes("token") || key.includes("email") || key.includes("api_key")
954
+ ? "<redacted>"
955
+ : JSON.stringify(value)
956
+ }
957
+
958
+ export const useSettingsStore = create<SettingsState>()(
959
+ subscribeWithSelector((set, get) => ({
960
+ settings: getDefaultSettings(),
961
+ isInitialized: false,
962
+ loadingKeys: new Set(),
963
+ setSetting: (key: string, value: any, _updateServer = true): AsyncResult<void, Error> => {
964
+ return Res.try_async(async () => {
965
+ const setting = SETTINGS[key]
966
+ const originalKey = key
967
+
968
+ if (!setting) {
969
+ throw new Error(`SETTINGS: SET: ${originalKey} is not a valid setting!`)
970
+ }
971
+
972
+ if (setting.indexer) {
973
+ key = setting.indexer(originalKey)
974
+ }
975
+
976
+ if (!setting.writable) {
977
+ throw new Error(`SETTINGS: ${originalKey} is not writable!`)
978
+ }
979
+
980
+ // Update store immediately for optimistic UI
981
+ console.log(`SETTINGS: SET: ${key} = ${printableSettingValue(key, value)}`)
982
+ set((state) => ({
983
+ settings: {...state.settings, [key]: value},
984
+ }))
985
+
986
+ if (setting.persist) {
987
+ let res = await storage.save(key, value)
988
+ if (res.is_error()) {
989
+ throw new Error(`SETTINGS: couldn't save setting to storage: ${res.error}`)
990
+ }
991
+
992
+ // Cloud V1 per-change server sync removed with the V1 ripout (issue
993
+ // #3392). Settings are local-first until a V2 sync lands; the
994
+ // saveOnServer flags are retained as intent markers for that work.
995
+ }
996
+ })
997
+ },
998
+ getSetting: (key: string) => {
999
+ const state = get()
1000
+ const originalKey = key
1001
+ const setting = SETTINGS[originalKey]
1002
+
1003
+ if (!setting) {
1004
+ console.error(`SETTINGS: GET: ${originalKey} is not a valid setting!`)
1005
+ return undefined
1006
+ }
1007
+
1008
+ if (setting.override) {
1009
+ let override = setting.override()
1010
+ if (override !== undefined) {
1011
+ return override
1012
+ }
1013
+ }
1014
+
1015
+ if (setting.indexer) {
1016
+ key = setting.indexer(originalKey)
1017
+ }
1018
+
1019
+ // console.log(`GET SETTING: ${key} = ${state.settings[key]}`)
1020
+
1021
+ try {
1022
+ const raw = state.settings[key] ?? SETTINGS[originalKey].defaultValue()
1023
+ return raw
1024
+ } catch (e) {
1025
+ // for dynamically created settings, we need to create a new setting in SETTINGS:
1026
+ console.log(`Failed to get setting, creating new setting:(${key}):`, e)
1027
+ SETTINGS[key] = {key: key, defaultValue: () => undefined, writable: true, saveOnServer: false, persist: true}
1028
+ return SETTINGS[key].defaultValue()
1029
+ }
1030
+ },
1031
+ // batch update many settings from the server:
1032
+ setManyLocally: (settings: Record<string, any>): AsyncResult<void, Error> => {
1033
+ return Res.try_async(async () => {
1034
+ const settingsToLoad: Record<string, any> = {}
1035
+ // if a setting should not persist, don't load it:
1036
+ for (const [key, value] of Object.entries(settings)) {
1037
+ const stg: Setting | undefined = SETTINGS[key.toLowerCase()]
1038
+ if (!stg) {
1039
+ continue
1040
+ }
1041
+ if (!stg.persist) {
1042
+ continue
1043
+ }
1044
+ settingsToLoad[key.toLowerCase()] = value
1045
+ }
1046
+ // console.log("SETTINGS: SET MANY LOCALLY: ", settingsToLoad)
1047
+
1048
+ set((state) => ({
1049
+ settings: {...state.settings, ...settingsToLoad},
1050
+ }))
1051
+
1052
+ // save to storage:
1053
+ await Promise.all(Object.entries(settingsToLoad).map(([key, value]) => storage.save(key, value)))
1054
+ })
1055
+ },
1056
+ // loads any preferences that have been changed from the default and saved to DISK!
1057
+ loadAllSettings: (): AsyncResult<void, Error> => {
1058
+ console.log("SETTINGS: loadAllSettings()")
1059
+ if (loadAllSettingsInFlight) {
1060
+ return loadAllSettingsInFlight
1061
+ }
1062
+ const inFlight = Res.try_async(async () => {
1063
+ const state = get()
1064
+ let loadedSettings: Record<string, any> = {}
1065
+
1066
+ if (state.isInitialized) {
1067
+ return undefined
1068
+ }
1069
+
1070
+ for (const setting of Object.values(SETTINGS)) {
1071
+ // if the settings should not persist, don't load it:
1072
+ if (!setting.persist) {
1073
+ continue
1074
+ }
1075
+
1076
+ // load all subkeys for an indexed setting:
1077
+ if (setting?.indexer) {
1078
+ console.log(`SETTINGS: LOAD: ${setting.key} with indexer!`)
1079
+
1080
+ let res: Result<Record<string, unknown>, Error> = storage.loadSubKeys(setting.key)
1081
+ if (res.is_error()) {
1082
+ console.log(`SETTINGS: LOAD: ${setting.key}`, res.error)
1083
+ continue
1084
+ }
1085
+
1086
+ let subKeys: Record<string, unknown> = res.value
1087
+ console.log(`SETTINGS: LOAD: ${setting.key} subkeys are set!`, subKeys)
1088
+ loadedSettings = {...loadedSettings, ...subKeys}
1089
+ continue
1090
+ }
1091
+
1092
+ let res = storage.load<any>(setting.key)
1093
+ if (res.is_error()) {
1094
+ console.log(`SETTINGS: LOAD: ${setting.key} is not set!`, res.error)
1095
+ // this setting isn't set from the default, so we don't load anything
1096
+ continue
1097
+ }
1098
+ // normal key:value pair:
1099
+ let value = res.value
1100
+ // res.value IS the stored value; logging value.value printed
1101
+ // "undefined" for every loaded setting and disguised present
1102
+ // values as missing. Redact token- and email-bearing keys: console
1103
+ // logs are uploaded in bug-report artifacts (same keys
1104
+ // diagnosticContext's SENSITIVE_SETTINGS_KEYS strips, minus an
1105
+ // import that would cycle stores <-> utils).
1106
+ console.log(`SETTINGS: LOAD: ${setting.key} = ${printableSettingValue(setting.key, value)}`)
1107
+ loadedSettings[setting.key] = value
1108
+ }
1109
+
1110
+ // console.log("##############################################")
1111
+ // console.log(loadedSettings)
1112
+ // console.log("##############################################")
1113
+
1114
+ set((state) => ({
1115
+ isInitialized: true,
1116
+ settings: {...state.settings, ...loadedSettings},
1117
+ }))
1118
+
1119
+ // This hidden debug switch originally shipped default-off while the
1120
+ // notification-listener cold-start ANR was being investigated. Now
1121
+ // that the listener runs in its own guarded process, migrate existing
1122
+ // installs to the new default once; later explicit debug changes still
1123
+ // persist normally.
1124
+ // Reset the cloud backend override when the build's environment changes.
1125
+ //
1126
+ // cloud_core_url / cloud_runtime_url are persist:true and outrank both
1127
+ // the build's env and the compiled default (see resolveUrl in
1128
+ // cloudClient.ts). That is what we want inside one environment: a
1129
+ // developer's METRO_AUTO pin should survive a rebuild. It is wrong
1130
+ // across environments.
1131
+ //
1132
+ // The concrete case is an install that moves BETWEEN environments: an
1133
+ // internal tester running a dev build with a pinned override who then
1134
+ // installs the store build. The override outranks that build's prod
1135
+ // URLs, so without this they keep talking to dev with nothing
1136
+ // surfacing it.
1137
+ //
1138
+ // Note what this deliberately does NOT do, because the distinction is
1139
+ // easy to get backwards. TestFlight and the App Store receive the SAME
1140
+ // binary, so promotion does not change EXPO_PUBLIC_BUILD_ENV and this
1141
+ // reset never fires on it. Promotion is safe for a different reason:
1142
+ // the publishing lane bakes prod URLs (staging-builds.yml defaults
1143
+ // cloud_env to prod), so a promoted build was pointed at production the
1144
+ // whole time. The same holds for Android internal-track to production.
1145
+ //
1146
+ // The residual gap is therefore an override pinned while already on a
1147
+ // prod-labelled build, which no label comparison can see. That is a
1148
+ // deliberate limit: reaching it means typing a URL into a dev-only
1149
+ // screen, VersionInfo renders the current value, and the same screen
1150
+ // clears it.
1151
+ //
1152
+ // Comparing the baked EXPO_PUBLIC_BUILD_ENV against the last one seen
1153
+ // on this device covers those environment switches and fresh installs
1154
+ // without touching the setting write path. A reinstall needs no
1155
+ // handling: it drops the marker and the override together
1156
+ // (android:allowBackup="false", and iOS deletes the container).
1157
+ const BUILD_ENV_KEY = "settings.lastBuildEnv"
1158
+ const buildEnv = (process.env.EXPO_PUBLIC_BUILD_ENV ?? "dev").trim() || "dev"
1159
+ const lastBuildEnv = storage.load<string>(BUILD_ENV_KEY)
1160
+ const previousBuildEnv = lastBuildEnv.is_error() ? undefined : lastBuildEnv.value
1161
+ if (previousBuildEnv !== buildEnv) {
1162
+ // Clear when there is no marker yet, not just on a recorded change.
1163
+ // The first build carrying this code meets every existing install
1164
+ // with previousBuildEnv === undefined, and those are exactly the
1165
+ // installs that may hold an override set before the pin existed --
1166
+ // the population this is here to repair. Treating "no marker" as a
1167
+ // fresh install would record the marker and never look again. A
1168
+ // genuinely fresh install has nothing persisted, so the clear below
1169
+ // writes each default over itself and costs nothing.
1170
+ //
1171
+ // Driven by the descriptors rather than a hardcoded key list, so a
1172
+ // setting that needs this behaviour declares it in one place and
1173
+ // cannot be missed here.
1174
+ const scoped = Object.values(SETTINGS).filter((setting) => setting.resetOnBuildEnvChange)
1175
+ console.log(
1176
+ `SETTINGS: build env ${previousBuildEnv ?? "(none recorded)"} -> ${buildEnv}, ` +
1177
+ `clearing ${scoped.length} build-scoped setting(s)`,
1178
+ )
1179
+ let allCleared = true
1180
+ for (const setting of scoped) {
1181
+ const cleared = await get().setSetting(setting.key, setting.defaultValue(), false)
1182
+ if (cleared.is_error()) {
1183
+ allCleared = false
1184
+ console.log(`SETTINGS: could not clear ${setting.key}:`, cleared.error)
1185
+ }
1186
+ }
1187
+ // Advance the marker only once the reset actually landed. Recording
1188
+ // it after a failed write would retire the retry and leave the stale
1189
+ // override for the life of the install; leaving it unset costs one
1190
+ // repeated attempt per launch until a write succeeds.
1191
+ if (allCleared) {
1192
+ storage.save(BUILD_ENV_KEY, buildEnv)
1193
+ }
1194
+ }
1195
+
1196
+ const NOTIFICATION_LISTENER_MIGRATION_KEY = "migration:android_notification_listener_default_on_v1"
1197
+ const notificationListenerMigrationDone = storage.load<boolean>(NOTIFICATION_LISTENER_MIGRATION_KEY)
1198
+ if (notificationListenerMigrationDone.is_error() || !notificationListenerMigrationDone.value) {
1199
+ const result = await get().setSetting(SETTINGS.android_notification_listener_enabled.key, true, false)
1200
+ if (result.is_error()) {
1201
+ console.log("SETTINGS: notification listener migration failed:", result.error)
1202
+ } else {
1203
+ storage.save(NOTIFICATION_LISTENER_MIGRATION_KEY, true)
1204
+ }
1205
+ }
1206
+
1207
+ // One-time migration: force android_blur=false for existing users.
1208
+ // The setting's default is already false; this migration covers users
1209
+ // who explicitly opted into Android blur effects before we discovered
1210
+ // they're a major source of frame drops on cheap Android phones.
1211
+ // The dimezisBlurViewSdk31Plus blur each costs ~5-10ms/frame; with
1212
+ // multiple blurs on home (top fade + AppSwitcherButton x2) a low-end
1213
+ // device misses the 16ms budget consistently. Users can turn it back
1214
+ // on under Settings 鈫?Appearance once we've optimized further.
1215
+ //
1216
+ // The setSetting call also pushes to the server (saveOnServer: true)
1217
+ // so the server-stored value flips too — otherwise the next sync
1218
+ // from the user's server-stored prefs would re-enable blur.
1219
+ // Best-effort: a server failure (offline, 5xx) shouldn't block boot;
1220
+ // we still mark the migration done locally so we don't loop.
1221
+ const MIGRATION_KEY = "migration:android_blur_default_false_v1"
1222
+ const migrationDone = storage.load<boolean>(MIGRATION_KEY)
1223
+ if (migrationDone.is_error() || !migrationDone.value) {
1224
+ const current = get().getSetting(SETTINGS.android_blur.key)
1225
+ if (current === true) {
1226
+ const result = await get().setSetting(SETTINGS.android_blur.key, false, true)
1227
+ if (result.is_error()) {
1228
+ // Server push failed (offline / 5xx). Local storage was still
1229
+ // updated, so the user immediately gets the new behavior. The
1230
+ // server-side stale `true` will be overwritten the next time
1231
+ // the user opens Appearance settings and the auto-sync runs.
1232
+ console.log("SETTINGS: android_blur migration server-push failed:", result.error)
1233
+ }
1234
+ }
1235
+ // Mark done unconditionally — even on server-push failure we don't
1236
+ // want to retry the migration on every boot. The local value is
1237
+ // already correct.
1238
+ storage.save(MIGRATION_KEY, true)
1239
+ }
1240
+
1241
+ // The old camera default cropped the sensor to 102掳. Move existing
1242
+ // default-shaped values to the full 118掳 sensor once; named miniapp
1243
+ // requests for the 102掳 "standard" preset remain available.
1244
+ const CAMERA_FOV_MIGRATION_KEY = "migration:camera_fov_full_sensor_v1"
1245
+ const cameraFovMigrationDone = storage.load<boolean>(CAMERA_FOV_MIGRATION_KEY)
1246
+ if (cameraFovMigrationDone.is_error() || !cameraFovMigrationDone.value) {
1247
+ const current = get().getSetting(SETTINGS.camera_fov.key) as {fov?: number; roi_position?: number} | undefined
1248
+ let migrationSucceeded = true
1249
+ if (current?.fov === 102 && (current.roi_position ?? 0) === 0) {
1250
+ const result = await get().setSetting(SETTINGS.camera_fov.key, {fov: 118, roi_position: 0}, true)
1251
+ if (result.is_error()) {
1252
+ console.log("SETTINGS: camera FOV migration failed:", result.error)
1253
+ migrationSucceeded = false
1254
+ }
1255
+ }
1256
+ // Unlike the blur migration above, a failed camera set may leave the
1257
+ // local value unchanged. Only mark this migration complete once the
1258
+ // desired value was applied so a transient failure retries on boot.
1259
+ if (migrationSucceeded) storage.save(CAMERA_FOV_MIGRATION_KEY, true)
1260
+ }
1261
+ })
1262
+ loadAllSettingsInFlight = inFlight
1263
+ void Promise.resolve(inFlight).then((result) => {
1264
+ if (result.is_error()) {
1265
+ loadAllSettingsInFlight = null
1266
+ }
1267
+ })
1268
+ return inFlight
1269
+ },
1270
+ getBluetoothSettings: () => {
1271
+ const state = get()
1272
+ // Device-model-filtered key set (wire v2): Mentra Live (no display) gets
1273
+ // the reduced MENTRA_LIVE_SETTING_KEYS; display glasses get the full set.
1274
+ const deviceModel = useGlassesStore.getState().deviceModel || state.getSetting(SETTINGS.default_wearable.key)
1275
+ const keys = getBluetoothSettingKeysForDevice(deviceModel, BLUETOOTH_SETTING_KEYS)
1276
+ const bluetoothSettings: Record<string, any> = {}
1277
+ for (const key of keys) {
1278
+ const value = state.getSetting(key)
1279
+ if (key === SETTINGS.core_token.key && (typeof value !== "string" || value.trim().length === 0)) {
1280
+ continue
1281
+ }
1282
+ bluetoothSettings[key] = value
1283
+ }
1284
+ return bluetoothSettings
1285
+ },
1286
+ resetAllSettingsLocally: () => {
1287
+ set((_state) => ({
1288
+ settings: getDefaultSettings(),
1289
+ isInitialized: true,
1290
+ }))
1291
+ },
1292
+ })),
1293
+ )
1294
+
1295
+ export const useSetting = <T = any>(key: string): [T, (value: T) => AsyncResult<void, Error>] => {
1296
+ const value = useSettingsStore((state) => state.getSetting(key))
1297
+ const setSetting = useSettingsStore((state) => state.setSetting)
1298
+ return [value, (newValue: T) => setSetting(key, newValue)]
1299
+ }