@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,926 @@
1
+ /**
2
+ * NavigationService
3
+ *
4
+ * Thin singleton wrapper around the native Mapbox Navigation SDK exposed
5
+ * by the `crust` Expo module.
6
+ *
7
+ * Mini apps will eventually subscribe through the mini app SDK, which
8
+ * routes via LocalMiniappRuntime and ultimately calls into here. For now,
9
+ * this is also called directly by the developer-settings test button.
10
+ *
11
+ * Works on both Android and iOS via the native Mapbox Navigation SDK.
12
+ */
13
+
14
+ import CrustModule from "@glassly/crust"
15
+
16
+ import {resolveMapboxAccessToken, resolveMapboxRenderToken, userMapboxApiKey} from "./MapboxTokenService"
17
+ import {decodePolyline, parseDurationSeconds} from "./navigation/routesApiCodec"
18
+ import {resolveStepRoads} from "./navigation/roadNameResolver"
19
+
20
+ const LOG_TAG = "NAV_SERVICE"
21
+
22
+ export type NavManeuver = {
23
+ kind: "maneuver"
24
+ /**
25
+ * Categorical type of the upcoming maneuver. One of: STRAIGHT,
26
+ * SLIGHT_LEFT, SLIGHT_RIGHT, TURN_LEFT, TURN_RIGHT, SHARP_LEFT,
27
+ * SHARP_RIGHT, U_TURN, ARRIVE.
28
+ */
29
+ maneuverType: string
30
+ distanceMeters: number
31
+ /** Road the user is currently on. Null if the SDK didn't supply one. */
32
+ fromRoad?: string | null
33
+ /** Road the user will be on after the maneuver. Null if the SDK didn't supply one. */
34
+ toRoad?: string | null
35
+ distanceToDestinationMeters?: number
36
+ timeToDestinationSeconds?: number
37
+ currentSpeedMps?: number | null
38
+ speedLimitMps?: number | null
39
+ routeHeadingDeg?: number | null
40
+ }
41
+
42
+ export type NavOffRoute = {
43
+ kind: "off_route"
44
+ offRouteDistanceMeters: number
45
+ }
46
+
47
+ export type NavRerouting = {kind: "rerouting"}
48
+ export type NavArrived = {kind: "arrived"}
49
+ export type NavError = {kind: "error"; message: string}
50
+
51
+ export type NavUpdate = NavManeuver | NavOffRoute | NavRerouting | NavArrived | NavError
52
+
53
+ export type NavListener = (update: NavUpdate) => void
54
+
55
+ export type NavLocation = {
56
+ lat: number
57
+ lng: number
58
+ accuracy: number | null
59
+ timestamp: number
60
+ }
61
+ export type NavLocationListener = (loc: NavLocation) => void
62
+
63
+ export type NavRouteStep = {
64
+ lat: number
65
+ lng: number
66
+ routeIndex: number
67
+ road: string | null
68
+ maneuver: string
69
+ distanceMeters: number
70
+ }
71
+ export type NavRoute = {
72
+ points: Array<{lat: number; lng: number}>
73
+ steps?: NavRouteStep[]
74
+ }
75
+ export type NavRouteListener = (route: NavRoute) => void
76
+
77
+ export type NavState = "idle" | "navigating" | "rerouting" | "arrived"
78
+
79
+ /**
80
+ * Snapshot of the active trip — fed to miniapps that open mid-trip via
81
+ * `navigation.getState()`. Mirrors the SDK's NavState shape closely; the
82
+ * runtime keeps it strictly in sync as nav events arrive.
83
+ */
84
+ export type NavTripSnapshot = {
85
+ active: boolean
86
+ mode?: string
87
+ stops?: Array<{lat: number; lng: number}>
88
+ currentStopIndex?: number
89
+ route?: NavRoute
90
+ maneuver?: NavManeuver
91
+ distanceToDestinationMeters?: number
92
+ timeToDestinationSeconds?: number
93
+ currentSpeedMps?: number | null
94
+ speedLimitMps?: number | null
95
+ }
96
+
97
+ class NavigationService {
98
+ private static instance: NavigationService | null = null
99
+ private listeners = new Set<NavListener>()
100
+ private locationListeners = new Set<NavLocationListener>()
101
+ private routeListeners = new Set<NavRouteListener>()
102
+ private subs: Array<{remove: () => void}> = []
103
+ private state: NavState = "idle"
104
+ /** Last emitted route — replayed to late subscribers so they get the
105
+ * current geometry immediately. */
106
+ private lastRoute: NavRoute | null = null
107
+ /** Last maneuver event observed — used to hydrate getState() on mid-trip mount. */
108
+ private lastManeuver: NavManeuver | null = null
109
+ /** Trip configuration captured at start(), surfaced via getState(). */
110
+ private tripStops: Array<{lat: number; lng: number}> = []
111
+ private tripMode: string = "driving"
112
+
113
+ private constructor() {}
114
+
115
+ public static getInstance(): NavigationService {
116
+ if (!NavigationService.instance) {
117
+ NavigationService.instance = new NavigationService()
118
+ }
119
+ return NavigationService.instance
120
+ }
121
+
122
+ public getState(): NavState {
123
+ return this.state
124
+ }
125
+
126
+ public addListener(listener: NavListener): () => void {
127
+ this.listeners.add(listener)
128
+ if (this.subs.length === 0) {
129
+ this.attachNativeSubs()
130
+ }
131
+ return () => {
132
+ this.listeners.delete(listener)
133
+ if (this.noListeners()) {
134
+ this.detachNativeSubs()
135
+ }
136
+ }
137
+ }
138
+
139
+ /**
140
+ * Subscribe to the Mapbox Nav SDK's road-snapped location stream. Only
141
+ * fires while a nav session is active. Returns an unsubscribe fn.
142
+ */
143
+ public addLocationListener(listener: NavLocationListener): () => void {
144
+ this.locationListeners.add(listener)
145
+ if (this.subs.length === 0) {
146
+ this.attachNativeSubs()
147
+ }
148
+ return () => {
149
+ this.locationListeners.delete(listener)
150
+ if (this.noListeners()) {
151
+ this.detachNativeSubs()
152
+ }
153
+ }
154
+ }
155
+
156
+ /**
157
+ * Subscribe to the active route's polyline. Fires once per route build
158
+ * (initial + after every reroute). Late subscribers get the current
159
+ * route replayed on subscribe so the UI can render immediately.
160
+ */
161
+ public addRouteListener(listener: NavRouteListener): () => void {
162
+ this.routeListeners.add(listener)
163
+ if (this.subs.length === 0) {
164
+ this.attachNativeSubs()
165
+ }
166
+ if (this.lastRoute) {
167
+ try {
168
+ listener(this.lastRoute)
169
+ } catch (err) {
170
+ console.error(`${LOG_TAG}: route listener threw on replay`, err)
171
+ }
172
+ }
173
+ return () => {
174
+ this.routeListeners.delete(listener)
175
+ if (this.noListeners()) {
176
+ this.detachNativeSubs()
177
+ }
178
+ }
179
+ }
180
+
181
+ private noListeners(): boolean {
182
+ return this.listeners.size === 0 && this.locationListeners.size === 0 && this.routeListeners.size === 0
183
+ }
184
+
185
+ public async start(
186
+ coords: {lat: number; lng: number},
187
+ options?: {
188
+ simulate?: boolean
189
+ speedMultiplier?: number
190
+ stops?: Array<{lat: number; lng: number}>
191
+ mode?: string
192
+ avoid?: {highways?: boolean; tolls?: boolean; ferries?: boolean}
193
+ missedTurnRerouteMeters?: number
194
+ },
195
+ ): Promise<{ok: boolean; error?: string}> {
196
+ console.log(
197
+ `${LOG_TAG}: start ${coords.lat},${coords.lng} sim=${options?.simulate ?? false} speed=${options?.speedMultiplier ?? 5}`,
198
+ )
199
+ if (this.subs.length === 0) {
200
+ // Listeners may attach after start(); make sure native subs exist
201
+ // so we don't drop early events.
202
+ this.attachNativeSubs()
203
+ }
204
+ // Resolve the token for the native SDK: user key first, else the public
205
+ // render token served by Glassly Cloud. The binary bakes no key, so with
206
+ // no resolvable token the trip must NOT start — the native SDK would
207
+ // otherwise fail opaquely mid-boot. Cloud disabled + no user key lands
208
+ // here by design. Pushed per-start rather than on settings change so it
209
+ // can't race native boot.
210
+ const mapboxRenderToken = await resolveMapboxRenderToken()
211
+ if (!mapboxRenderToken) {
212
+ const error =
213
+ "No Mapbox token available — add your key in Settings > API Keys" +
214
+ " (required while Glassly Cloud is disabled or unreachable)"
215
+ console.warn(`${LOG_TAG}: start blocked — ${error}`)
216
+ return {ok: false, error}
217
+ }
218
+ try {
219
+ await CrustModule.setMapboxAccessToken(mapboxRenderToken)
220
+ } catch (err) {
221
+ // Native build predating setMapboxAccessToken — no token reaches the
222
+ // SDK (nothing is baked), so fail the start rather than limp into an
223
+ // opaque native error.
224
+ console.warn(`${LOG_TAG}: setMapboxAccessToken unavailable`, err)
225
+ return {ok: false, error: "This build cannot receive a Mapbox token (update the app)"}
226
+ }
227
+ const result = await CrustModule.startNavigation(coords.lat, coords.lng, {
228
+ simulate: options?.simulate ?? false,
229
+ speedMultiplier: options?.speedMultiplier ?? 5,
230
+ stops: options?.stops,
231
+ mode: options?.mode ?? "driving",
232
+ avoid: options?.avoid,
233
+ missedTurnRerouteMeters: options?.missedTurnRerouteMeters,
234
+ })
235
+ if (!result.ok) {
236
+ console.warn(`${LOG_TAG}: start failed — ${result.error}`)
237
+ this.state = "idle"
238
+ this.tripStops = []
239
+ this.tripMode = "driving"
240
+ } else {
241
+ this.state = "navigating"
242
+ this.tripStops = options?.stops ?? [{lat: coords.lat, lng: coords.lng}]
243
+ this.tripMode = options?.mode ?? "driving"
244
+ }
245
+ return result
246
+ }
247
+
248
+ /**
249
+ * Snapshot of the active trip for `navigation.getState()`. Returns null
250
+ * when no trip is running. The snapshot is built from in-memory state
251
+ * fed by the existing native event stream — no extra IPC.
252
+ */
253
+ public getSnapshot(): NavTripSnapshot | null {
254
+ if (this.state === "idle") return null
255
+ const m = this.lastManeuver
256
+ return {
257
+ active: this.state !== "arrived",
258
+ mode: this.tripMode,
259
+ stops: this.tripStops.length > 0 ? this.tripStops : undefined,
260
+ // Single-destination trips: index is always 0 (final stop). The Nav
261
+ // SDK manages waypoint progression internally, so for now we report 0.
262
+ currentStopIndex: 0,
263
+ route: this.lastRoute ?? undefined,
264
+ maneuver: m ?? undefined,
265
+ distanceToDestinationMeters: m?.distanceToDestinationMeters,
266
+ timeToDestinationSeconds: m?.timeToDestinationSeconds,
267
+ currentSpeedMps: m?.currentSpeedMps,
268
+ speedLimitMps: m?.speedLimitMps,
269
+ }
270
+ }
271
+
272
+ public async stop(): Promise<{ok: boolean; error?: string}> {
273
+ console.log(`${LOG_TAG}: stop`)
274
+ const result = await CrustModule.stopNavigation()
275
+ this.state = "idle"
276
+ this.lastRoute = null
277
+ this.lastManeuver = null
278
+ this.tripStops = []
279
+ this.tripMode = "driving"
280
+ return result
281
+ }
282
+
283
+ /**
284
+ * Request navigation permission. Under Mapbox there is no T&C dialog —
285
+ * this resolves immediately with `accepted: true` — but it's still safe
286
+ * (and intended) to call eagerly on mount.
287
+ */
288
+ public async requestPermission(): Promise<{ok: boolean; accepted: boolean; error?: string}> {
289
+ console.log(`${LOG_TAG}: requestPermission`)
290
+ return await CrustModule.requestNavigationPermission()
291
+ }
292
+
293
+ /**
294
+ * Dev-only: nudge the simulator off-route to trigger an actual reroute
295
+ * from the Nav SDK. Useful for verifying the rerouting pipeline (UI
296
+ * flips to "Rebuilding route…", route polyline updates, glasses display
297
+ * mirrors the new path). No-op on iOS or with real GPS fixes.
298
+ */
299
+ public async simulateDeviation(offsetMeters: number = 20): Promise<{ok: boolean; error?: string}> {
300
+ console.log(`${LOG_TAG}: simulateDeviation(${offsetMeters}m)`)
301
+ return await CrustModule.simulateDeviation(offsetMeters)
302
+ }
303
+
304
+ /**
305
+ * Dev toggle: lock simulated locations onto the wrong sidewalk
306
+ * (perpendicular-right of the route bearing by ~8m). Used to verify
307
+ * the SDK's along-path pivot trigger fires even when the user never
308
+ * comes within the 7m radius of a pivot point. Android-only today; iOS
309
+ * is a no-op stub.
310
+ */
311
+ public async setWrongSidewalkOffset(enabled: boolean): Promise<{ok: boolean; error?: string}> {
312
+ console.log(`${LOG_TAG}: setWrongSidewalkOffset(${enabled})`)
313
+ return await CrustModule.setWrongSidewalkOffset(enabled)
314
+ }
315
+
316
+ /**
317
+ * Dev toggle: take over from the Google simulator and walk the user
318
+ * along a modified polyline that skips crossing micro-steps. Lets us
319
+ * reproduce the wrong-sidewalk-then-missed-the-turn scenario for
320
+ * pivot trigger testing. Android-only today; iOS is a no-op stub.
321
+ */
322
+ public async setSkipCrossings(enabled: boolean): Promise<{ok: boolean; error?: string}> {
323
+ console.log(`${LOG_TAG}: setSkipCrossings(${enabled})`)
324
+ return await CrustModule.setSkipCrossings(enabled)
325
+ }
326
+
327
+ /**
328
+ * Compute one or more routes without starting a trip.
329
+ *
330
+ * Reached from the miniapp bridge (NavigationHandlers.handleComputeRoute)
331
+ * when the user has saved their own Mapbox key in Settings > API Keys —
332
+ * that key exists so navigation works without the cloud. Without a user
333
+ * key the bridge uses the v2 cloud maps service, which holds a provider
334
+ * token server-side and caches results. Implemented by
335
+ * calling Mapbox's Directions API (REST) so we don't disturb the active
336
+ * Navigator. Returns `{ok: false}` plus an error string when the engine
337
+ * can't produce a route — mirrors the SDK's ComputeRouteResult shape so
338
+ * the host can pass it back to miniapps unchanged.
339
+ */
340
+ public async computeRoute(payload: Record<string, unknown>): Promise<{
341
+ ok: boolean
342
+ error?: string
343
+ routes?: Array<{
344
+ points: Array<{lat: number; lng: number}>
345
+ totalDistanceMeters: number
346
+ totalDurationSeconds: number
347
+ summary?: string
348
+ }>
349
+ }> {
350
+ return computeRouteViaRoutesApi(payload)
351
+ }
352
+
353
+ /**
354
+ * Reverse-geocode a coordinate into a short road/route name (plus the full
355
+ * formatted `address` for dropped-pin / POI labels).
356
+ *
357
+ * Reached from the miniapp bridge when the user has saved their own Mapbox
358
+ * key; otherwise the bridge uses the v2 cloud maps service. See
359
+ * {@link computeRoute} for the same local-first branch.
360
+ *
361
+ * Implemented via Mapbox's Geocoding REST API. Backs the SDK pivot engine's
362
+ * last-resort fallback when a Routes-API instruction didn't carry a parseable
363
+ * road. Returns `{ok: true, road: null}` when the coordinate is genuinely
364
+ * off-grid (mid-park, water) — that's a successful query with no road
365
+ * component, distinct from a failure.
366
+ */
367
+ public async reverseGeocodeRoad(coord: {lat: number; lng: number}): Promise<{
368
+ ok: boolean
369
+ road?: string | null
370
+ address?: string | null
371
+ error?: string
372
+ }> {
373
+ return reverseGeocodeRoadViaGeocodingApi(coord)
374
+ }
375
+
376
+ /** True when a phone-side DIRECT Mapbox call can be made (user key saved). */
377
+ public hasMapboxToken(): boolean {
378
+ return !!resolveMapboxAccessToken()
379
+ }
380
+
381
+ /** True when the user saved their own Mapbox key in Settings > API Keys. */
382
+ public hasUserMapboxKey(): boolean {
383
+ return !!userMapboxApiKey()
384
+ }
385
+
386
+ /**
387
+ * Type-ahead place search on-device with the user's own Mapbox key.
388
+ * Preferred over the cloud maps service whenever that key is set — see
389
+ * {@link placeAutocompleteViaSearchBox}.
390
+ */
391
+ public async placeAutocomplete(
392
+ query: string,
393
+ near: {lat: number; lng: number} | undefined,
394
+ sessionToken: string,
395
+ ): Promise<{
396
+ ok: boolean
397
+ suggestions?: Array<{placeId: string; mainText: string; secondaryText: string}>
398
+ error?: string
399
+ }> {
400
+ return placeAutocompleteViaSearchBox(query, near, sessionToken)
401
+ }
402
+
403
+ /** Resolve a suggestion to coordinates on-device. Pairs with {@link placeAutocomplete}. */
404
+ public async placeDetails(
405
+ placeId: string,
406
+ sessionToken: string,
407
+ ): Promise<{
408
+ ok: boolean
409
+ place?: {placeId: string; name: string; address: string; lat: number; lng: number}
410
+ error?: string
411
+ }> {
412
+ return placeDetailsViaSearchBox(placeId, sessionToken)
413
+ }
414
+
415
+ private attachNativeSubs(): void {
416
+ console.log(`${LOG_TAG}: attachNativeSubs() — listeners=${this.listeners.size}`)
417
+ this.subs.push(
418
+ CrustModule.addListener("onNavManeuver", (data) => {
419
+ this.state = "navigating"
420
+ const event: NavManeuver = {kind: "maneuver", ...data}
421
+ this.lastManeuver = event
422
+ this.fanout(event)
423
+ }),
424
+ CrustModule.addListener("onNavRerouting", () => {
425
+ console.log(`${LOG_TAG}: ← onNavRerouting`)
426
+ this.state = "rerouting"
427
+ this.fanout({kind: "rerouting"})
428
+ }),
429
+ CrustModule.addListener("onNavArrived", () => {
430
+ console.log(`${LOG_TAG}: ← onNavArrived`)
431
+ this.state = "arrived"
432
+ this.lastManeuver = null
433
+ this.fanout({kind: "arrived"})
434
+ }),
435
+ CrustModule.addListener("onNavError", (data) => {
436
+ console.log(`${LOG_TAG}: ← onNavError`, data?.message)
437
+ this.fanout({kind: "error", message: data.message})
438
+ }),
439
+ CrustModule.addListener("onNavLocation", (data) => {
440
+ const loc: NavLocation = {
441
+ lat: data.lat,
442
+ lng: data.lng,
443
+ accuracy: data.accuracy ?? null,
444
+ timestamp: data.timestamp,
445
+ }
446
+ this.locationListeners.forEach((l) => {
447
+ try {
448
+ l(loc)
449
+ } catch (err) {
450
+ console.error(`${LOG_TAG}: location listener threw`, err)
451
+ }
452
+ })
453
+ }),
454
+ CrustModule.addListener("onNavRoute", (data) => {
455
+ const route: NavRoute = {
456
+ points: data.points ?? [],
457
+ steps: data.steps?.map((step) => ({
458
+ ...step,
459
+ road: step.road ?? null,
460
+ })),
461
+ }
462
+ this.lastRoute = route
463
+ console.log(`${LOG_TAG}: ← onNavRoute (${route.points.length} points, steps=${route.steps?.length ?? "null"})`)
464
+ this.routeListeners.forEach((l) => {
465
+ try {
466
+ l(route)
467
+ } catch (err) {
468
+ console.error(`${LOG_TAG}: route listener threw`, err)
469
+ }
470
+ })
471
+ }),
472
+ CrustModule.addListener("onNavOffRoute", (data) => {
473
+ console.log(`${LOG_TAG}: ← onNavOffRoute`, data?.offRouteDistanceMeters)
474
+ this.fanout({kind: "off_route", offRouteDistanceMeters: data?.offRouteDistanceMeters ?? 0})
475
+ }),
476
+ )
477
+ }
478
+
479
+ private detachNativeSubs(): void {
480
+ this.subs.forEach((s) => s.remove())
481
+ this.subs = []
482
+ }
483
+
484
+ private fanout(update: NavUpdate): void {
485
+ this.listeners.forEach((l) => {
486
+ try {
487
+ l(update)
488
+ } catch (err) {
489
+ console.error(`${LOG_TAG}: listener threw`, err)
490
+ }
491
+ })
492
+ }
493
+ }
494
+
495
+ const navigationService = NavigationService.getInstance()
496
+ export default navigationService
497
+
498
+ // ---------------------------------------------------------------------------
499
+ // Routes API (REST)
500
+ // ---------------------------------------------------------------------------
501
+
502
+ // Routes + Geocoding go DIRECT to Mapbox from the phone process ONLY when the
503
+ // user saved their own key (Settings > API Keys) — "use my account". Without
504
+ // one, callers (NavigationHandlers) route these operations through the v2
505
+ // cloud maps proxy instead; the binary ships no baked Mapbox key.
506
+ const MAPBOX_DIRECTIONS_BASE = "https://api.mapbox.com/directions/v5/mapbox"
507
+ const MAPBOX_GEOCODE_REVERSE = "https://api.mapbox.com/search/geocode/v6/reverse"
508
+ const MAPBOX_SEARCHBOX_SUGGEST = "https://api.mapbox.com/search/searchbox/v1/suggest"
509
+ const MAPBOX_SEARCHBOX_RETRIEVE = "https://api.mapbox.com/search/searchbox/v1/retrieve"
510
+
511
+ /**
512
+ * The Mapbox token for phone-side REST calls: the user's key
513
+ * (Settings > Keys) or nothing — empty means "use the cloud maps proxy".
514
+ */
515
+ function mapboxToken(): string {
516
+ return resolveMapboxAccessToken()
517
+ }
518
+
519
+ /**
520
+ * Phone-side helper: hit the Mapbox Directions API directly with the user's own
521
+ * key (Settings > API Keys). Preferred over the v2 cloud maps service whenever
522
+ * that key is set, so routing works without the cloud. Lives here
523
+ * (not in Kotlin) so it's platform-independent across the JS bridge.
524
+ * Returns the SDK-shaped result with primary + alternates.
525
+ *
526
+ * Mapbox Directions differs from Google Routes in shape: numeric
527
+ * `distance`/`duration`, `polyline6` geometry per-route AND per-step, and
528
+ * `maneuver = {location:[lng,lat], type, modifier, instruction}`. We
529
+ * synthesize the SDK's `ComputedRouteStep` (lat/lng start, endLat/endLng
530
+ * = next step's start) from the ordered step list.
531
+ */
532
+ async function computeRouteViaRoutesApi(payload: Record<string, unknown>): Promise<{
533
+ ok: boolean
534
+ error?: string
535
+ routes?: Array<{
536
+ points: Array<{lat: number; lng: number}>
537
+ totalDistanceMeters: number
538
+ totalDurationSeconds: number
539
+ summary?: string
540
+ steps?: Array<{
541
+ lat: number
542
+ lng: number
543
+ endLat: number
544
+ endLng: number
545
+ distanceMeters: number
546
+ maneuver?: string
547
+ instruction?: string
548
+ road?: string | null
549
+ }>
550
+ }>
551
+ }> {
552
+ const origin = payload.origin as {lat?: unknown; lng?: unknown} | undefined
553
+ const stopsRaw = payload.stops as Array<{lat?: unknown; lng?: unknown}> | undefined
554
+ const mode = (typeof payload.mode === "string" ? payload.mode : "driving").toLowerCase()
555
+ const alt = Number(payload.alternatives)
556
+ const alternatives = Number.isFinite(alt) && alt > 0 ? alt : 1
557
+ const avoid = (payload.avoid as Record<string, unknown> | undefined) ?? {}
558
+
559
+ const oLat = Number(origin?.lat)
560
+ const oLng = Number(origin?.lng)
561
+ if (!Number.isFinite(oLat) || !Number.isFinite(oLng)) {
562
+ return {ok: false, error: "computeRoute: origin.lat/lng required"}
563
+ }
564
+ const stops = (Array.isArray(stopsRaw) ? stopsRaw : [])
565
+ .map((s) => ({lat: Number(s?.lat), lng: Number(s?.lng)}))
566
+ .filter((s) => Number.isFinite(s.lat) && Number.isFinite(s.lng))
567
+ if (stops.length === 0) {
568
+ return {ok: false, error: "computeRoute: at least one stop required"}
569
+ }
570
+
571
+ const token = mapboxToken()
572
+ if (!token) return {ok: false, error: "computeRoute: no Mapbox key saved (add yours in Settings > API Keys)"}
573
+
574
+ // Mapbox path is a semicolon-joined `lng,lat` list: origin then each stop.
575
+ const coords = [`${oLng},${oLat}`, ...stops.map((s) => `${s.lng},${s.lat}`)].join(";")
576
+ const exclude = mapboxExclude(avoid)
577
+ const params = new URLSearchParams({
578
+ alternatives: String(alternatives > 1),
579
+ geometries: "polyline6",
580
+ overview: "full",
581
+ steps: "true",
582
+ banner_instructions: "true",
583
+ voice_instructions: "false",
584
+ access_token: token,
585
+ })
586
+ if (exclude) params.set("exclude", exclude)
587
+ const url = `${MAPBOX_DIRECTIONS_BASE}/${mapboxProfile(mode)}/${coords}?${params.toString()}`
588
+
589
+ try {
590
+ const res = await fetch(url, {method: "GET"})
591
+ if (!res.ok) {
592
+ return {ok: false, error: `Directions API ${res.status}`}
593
+ }
594
+ const json = (await res.json()) as {
595
+ code?: string
596
+ message?: string
597
+ routes?: Array<{
598
+ geometry?: string
599
+ distance?: number
600
+ duration?: string | number
601
+ weight_name?: string
602
+ legs?: Array<{
603
+ summary?: string
604
+ steps?: Array<{
605
+ geometry?: string
606
+ name?: string
607
+ distance?: number
608
+ maneuver?: {location?: [number, number]; type?: string; modifier?: string; instruction?: string}
609
+ }>
610
+ }>
611
+ }>
612
+ }
613
+ if (json.code && json.code !== "Ok") {
614
+ return {ok: false, error: json.message ?? `Directions code ${json.code}`}
615
+ }
616
+ // Resolve `road` for every step whose Mapbox `name` was blank (slip
617
+ // lanes, unnamed paths, arrival legs) via reverse-geocode. Per-route
618
+ // and per-alternate resolution fire concurrently.
619
+ const routes = await Promise.all(
620
+ (json.routes ?? []).slice(0, alternatives).map(async (r) => {
621
+ const legs = r.legs ?? []
622
+ const flatSteps = legs.flatMap((leg) => leg.steps ?? [])
623
+ const rawSteps = flatSteps.map((s, i) => {
624
+ const here = s.maneuver?.location // [lng, lat]
625
+ const next = flatSteps[i + 1]?.maneuver?.location
626
+ const lat = here?.[1] ?? Number.NaN
627
+ const lng = here?.[0] ?? Number.NaN
628
+ return {
629
+ lat,
630
+ lng,
631
+ // End of step i == start of step i+1; final step ends at itself.
632
+ endLat: next?.[1] ?? lat,
633
+ endLng: next?.[0] ?? lng,
634
+ distanceMeters: Math.round(s.distance ?? 0),
635
+ maneuver: mapboxManeuverToKind(s.maneuver?.type, s.maneuver?.modifier),
636
+ instruction: s.maneuver?.instruction,
637
+ // Mapbox gives the road name inline as `step.name`; prefer it
638
+ // over geocoding. Blank names fall through to resolveStepRoads.
639
+ road: s.name && s.name.trim().length > 0 ? s.name.trim() : undefined,
640
+ }
641
+ })
642
+ const steps = await resolveStepRoads(rawSteps, reverseGeocodeRoadViaGeocodingApi)
643
+ return {
644
+ points: decodePolyline(r.geometry ?? "", 6),
645
+ totalDistanceMeters: Math.round(r.distance ?? 0),
646
+ totalDurationSeconds: parseDurationSeconds(r.duration ?? 0),
647
+ summary: legs[0]?.summary,
648
+ steps: steps.length > 0 ? steps : undefined,
649
+ }
650
+ }),
651
+ )
652
+ if (routes.length === 0) return {ok: false, error: "no routes returned"}
653
+ return {ok: true, routes}
654
+ } catch (err) {
655
+ return {ok: false, error: err instanceof Error ? err.message : "computeRoute failed"}
656
+ }
657
+ }
658
+
659
+ /** SDK-agnostic mode → Mapbox Directions profile. two_wheeler → driving. */
660
+ function mapboxProfile(mode: string): string {
661
+ switch (mode) {
662
+ case "walking":
663
+ return "walking"
664
+ case "cycling":
665
+ return "cycling"
666
+ case "two_wheeler":
667
+ return "driving"
668
+ default:
669
+ return "driving-traffic"
670
+ }
671
+ }
672
+
673
+ /** Avoid flags → Mapbox `exclude` param. Null when nothing to exclude. */
674
+ function mapboxExclude(avoid: Record<string, unknown>): string | null {
675
+ const ex: string[] = []
676
+ if (avoid.tolls === true) ex.push("toll")
677
+ if (avoid.ferries === true) ex.push("ferry")
678
+ if (avoid.highways === true) ex.push("motorway")
679
+ return ex.length > 0 ? ex.join(",") : null
680
+ }
681
+
682
+ /**
683
+ * Map Mapbox `maneuver.type` + `modifier` to the SDK's ManeuverKind
684
+ * vocabulary — the JS-side mirror of NavigationManager.kt's mapManeuver
685
+ * (issues/mapbox-navigation-migration.md §7). Kept here so the
686
+ * computeRoute preview path labels turns the same way the live trip does.
687
+ */
688
+ function mapboxManeuverToKind(type?: string, modifier?: string): string | undefined {
689
+ switch (type) {
690
+ case "depart":
691
+ return "DEPART"
692
+ case "arrive":
693
+ return "ARRIVE"
694
+ case "new name":
695
+ return "NAME_CHANGE"
696
+ case "continue":
697
+ case "merge":
698
+ return "CONTINUE"
699
+ case "notification":
700
+ return "STRAIGHT"
701
+ default:
702
+ break
703
+ }
704
+ switch (modifier) {
705
+ case "uturn":
706
+ return "U_TURN"
707
+ case "sharp left":
708
+ return "SHARP_LEFT"
709
+ case "left":
710
+ return "TURN_LEFT"
711
+ case "slight left":
712
+ return "SLIGHT_LEFT"
713
+ case "straight":
714
+ return "STRAIGHT"
715
+ case "slight right":
716
+ return "SLIGHT_RIGHT"
717
+ case "right":
718
+ return "TURN_RIGHT"
719
+ case "sharp right":
720
+ return "SHARP_RIGHT"
721
+ default:
722
+ return type ? "STRAIGHT" : undefined
723
+ }
724
+ }
725
+
726
+ /**
727
+ * Reverse-geocode a coordinate via the Mapbox Geocoding v6 API directly, using
728
+ * the user's own key (Settings > API Keys). Preferred over the v2 cloud maps
729
+ * service whenever that key is set, so pin labels work without the cloud.
730
+ *
731
+ * Returns the road/street name (e.g. "Octavia Blvd") plus the full formatted
732
+ * `address` for dropped-pin / POI labels. When no street is
733
+ * present — the coordinate is genuinely off-grid (water, park interior) —
734
+ * resolves with `{ok: true, road: null}`. Network failures and missing
735
+ * token resolve with `{ok: false, error}`.
736
+ *
737
+ * Mapbox v6 returns a GeoJSON FeatureCollection; the street name lives at
738
+ * `features[0].properties.context.street.name`. We also accept a feature
739
+ * whose own `feature_type` is `street` (its `name` is the road). We prefer
740
+ * the most-specific feature (the first), matching how the Google-era code
741
+ * took the first `route` component.
742
+ */
743
+ async function reverseGeocodeRoadViaGeocodingApi(coord: {lat: number; lng: number}): Promise<{
744
+ ok: boolean
745
+ road?: string | null
746
+ address?: string | null
747
+ error?: string
748
+ }> {
749
+ if (!Number.isFinite(coord.lat) || !Number.isFinite(coord.lng)) {
750
+ return {ok: false, error: "reverseGeocode: invalid coord"}
751
+ }
752
+ const token = mapboxToken()
753
+ if (!token)
754
+ return {
755
+ ok: false,
756
+ error: "reverseGeocode: no Mapbox key saved (add yours in Settings > API Keys)",
757
+ }
758
+ const params = new URLSearchParams({
759
+ longitude: String(coord.lng),
760
+ latitude: String(coord.lat),
761
+ // Bias toward address/street features so the street context is present.
762
+ types: "address,street",
763
+ limit: "1",
764
+ access_token: token,
765
+ })
766
+ try {
767
+ const res = await fetch(`${MAPBOX_GEOCODE_REVERSE}?${params.toString()}`, {method: "GET"})
768
+ if (!res.ok) return {ok: false, error: `Geocoding API ${res.status}`}
769
+ const json = (await res.json()) as {
770
+ features?: Array<{
771
+ properties?: {
772
+ feature_type?: string
773
+ name?: string
774
+ full_address?: string
775
+ place_formatted?: string
776
+ context?: {street?: {name?: string}}
777
+ }
778
+ }>
779
+ }
780
+ // The full formatted address for dropped-pin / POI labels, taken from the
781
+ // most-specific feature. Same precedence as the cloud provider so both
782
+ // paths label a pin identically.
783
+ const first = json.features?.[0]?.properties
784
+ const address = (first?.full_address ?? first?.name ?? first?.place_formatted ?? "").trim() || null
785
+
786
+ for (const feature of json.features ?? []) {
787
+ const props = feature.properties
788
+ // A street-type feature's own name is the road; otherwise read the
789
+ // street from context.
790
+ const fromStreetType = props?.feature_type === "street" ? props?.name : undefined
791
+ const name = (fromStreetType ?? props?.context?.street?.name ?? "").trim()
792
+ if (name) return {ok: true, road: name, address}
793
+ }
794
+ return {ok: true, road: null, address}
795
+ } catch (err) {
796
+ return {ok: false, error: err instanceof Error ? err.message : "reverseGeocode failed"}
797
+ }
798
+ }
799
+
800
+ /**
801
+ * Type-ahead place search straight from the device via Mapbox Search Box,
802
+ * using the user's own key (Settings > API Keys). This is the offline-from-
803
+ * the-cloud path: with a key saved, place search works with no runtime
804
+ * involvement at all.
805
+ *
806
+ * Field extraction mirrors the cloud provider so both paths return identical
807
+ * suggestions: only entries carrying a `mapbox_id` survive (without one there
808
+ * is nothing to retrieve later), and the secondary line prefers
809
+ * `place_formatted` over `full_address`.
810
+ *
811
+ * An empty query short-circuits to no suggestions — Search Box answers 422 for
812
+ * a blank `q`. A missing token resolves `{ok: false}` so the caller can fall
813
+ * back to the cloud.
814
+ */
815
+ async function placeAutocompleteViaSearchBox(
816
+ query: string,
817
+ near: {lat: number; lng: number} | undefined,
818
+ sessionToken: string,
819
+ ): Promise<{
820
+ ok: boolean
821
+ suggestions?: Array<{placeId: string; mainText: string; secondaryText: string}>
822
+ error?: string
823
+ }> {
824
+ if (!query.trim()) return {ok: true, suggestions: []}
825
+ const token = mapboxToken()
826
+ if (!token) {
827
+ return {
828
+ ok: false,
829
+ error: "placeAutocomplete: no Mapbox key saved (add yours in Settings > API Keys)",
830
+ }
831
+ }
832
+ const params = new URLSearchParams({
833
+ q: query,
834
+ access_token: token,
835
+ session_token: sessionToken,
836
+ // POIs + addresses + places — the things a user navigates to.
837
+ types: "poi,address,place,street",
838
+ limit: "10",
839
+ })
840
+ // Mapbox wants lng,lat for proximity bias.
841
+ if (near) params.set("proximity", `${near.lng},${near.lat}`)
842
+
843
+ try {
844
+ const res = await fetch(`${MAPBOX_SEARCHBOX_SUGGEST}?${params.toString()}`, {method: "GET"})
845
+ if (!res.ok) return {ok: false, error: `Search Box suggest ${res.status}`}
846
+ const json = (await res.json()) as {
847
+ suggestions?: Array<{
848
+ mapbox_id?: string
849
+ name?: string
850
+ place_formatted?: string
851
+ full_address?: string
852
+ }>
853
+ }
854
+ const suggestions = (json.suggestions ?? [])
855
+ .filter((s): s is {mapbox_id: string} & typeof s => !!s.mapbox_id)
856
+ .map((s) => ({
857
+ placeId: s.mapbox_id,
858
+ mainText: s.name ?? "",
859
+ secondaryText: s.place_formatted ?? s.full_address ?? "",
860
+ }))
861
+ return {ok: true, suggestions}
862
+ } catch (err) {
863
+ return {ok: false, error: err instanceof Error ? err.message : "placeAutocomplete failed"}
864
+ }
865
+ }
866
+
867
+ /**
868
+ * Resolve a Search Box suggestion to a full place with coordinates, using the
869
+ * user's own key. Pairs with {@link placeAutocompleteViaSearchBox} — the same
870
+ * `sessionToken` must thread both calls so Mapbox bills the keystrokes plus
871
+ * this retrieve as one search session.
872
+ *
873
+ * Retrieve answers a GeoJSON FeatureCollection; coordinates live at
874
+ * `features[0].geometry.coordinates` as [lng, lat].
875
+ */
876
+ async function placeDetailsViaSearchBox(
877
+ placeId: string,
878
+ sessionToken: string,
879
+ ): Promise<{
880
+ ok: boolean
881
+ place?: {placeId: string; name: string; address: string; lat: number; lng: number}
882
+ error?: string
883
+ }> {
884
+ const token = mapboxToken()
885
+ if (!token) {
886
+ return {
887
+ ok: false,
888
+ error: "placeDetails: no Mapbox key saved (add yours in Settings > API Keys)",
889
+ }
890
+ }
891
+ const params = new URLSearchParams({access_token: token, session_token: sessionToken})
892
+ try {
893
+ const res = await fetch(`${MAPBOX_SEARCHBOX_RETRIEVE}/${encodeURIComponent(placeId)}?${params.toString()}`, {
894
+ method: "GET",
895
+ })
896
+ if (!res.ok) return {ok: false, error: `Search Box retrieve ${res.status}`}
897
+ const json = (await res.json()) as {
898
+ features?: Array<{
899
+ geometry?: {coordinates?: [number, number]}
900
+ properties?: {
901
+ name?: string
902
+ full_address?: string
903
+ place_formatted?: string
904
+ }
905
+ }>
906
+ }
907
+ const feature = json.features?.[0]
908
+ const coords = feature?.geometry?.coordinates
909
+ if (!coords || coords.length < 2 || !Number.isFinite(coords[0]) || !Number.isFinite(coords[1])) {
910
+ return {ok: false, error: "placeDetails: no coordinates for place"}
911
+ }
912
+ const props = feature?.properties
913
+ return {
914
+ ok: true,
915
+ place: {
916
+ placeId,
917
+ name: props?.name ?? "",
918
+ address: props?.full_address ?? props?.place_formatted ?? "",
919
+ lng: coords[0],
920
+ lat: coords[1],
921
+ },
922
+ }
923
+ } catch (err) {
924
+ return {ok: false, error: err instanceof Error ? err.message : "placeDetails failed"}
925
+ }
926
+ }