@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,109 @@
1
+ /**
2
+ * SonioxDirectService
3
+ *
4
+ * Phone → Soniox direct transcription with a user-supplied API key
5
+ * (Settings > Keys). Enabled iff the `soniox_api_key` setting is non-empty.
6
+ *
7
+ * While enabled, LocalMiniappRuntime routes transcription/translation
8
+ * subscriptions HERE instead of to the cloud (and pushes an empty cloud
9
+ * subscription set, which also silences the LC3 audio uplink) — audio for
10
+ * transcription never touches the Glassly cloud. This service opens one
11
+ * Soniox realtime WebSocket session per subscription, feeds it decoded PCM
12
+ * from the glasses mic (`mic_pcm`), assembles tokens into utterances, and
13
+ * emits the same TranscriptionData / TranslationData shapes the cloud client
14
+ * emits so the miniapp fan-out is provider-agnostic.
15
+ *
16
+ * Failure policy (per product decision): a failing key degrades to on-device
17
+ * sherpa STT via LocalSttFallbackCoordinator — never back to the cloud.
18
+ * Reconnect semantics mirror the cloud provider: transient errors back off
19
+ * 500ms → 8s for 10 attempts, billing/auth (non-transient) errors retry on a
20
+ * slow 60s cadence forever; after transient attempts are exhausted the slow
21
+ * cadence takes over too (the phone has no worker-recreate path of last
22
+ * resort, so it must self-recover).
23
+ */
24
+ import type { AudioSubscription, TranscriptionData, TranslationData } from "@glassly/cloud-protocol";
25
+ import { SonioxRealtimeClient, type SonioxSessionOptions } from "./SonioxRealtimeClient";
26
+ export type SonioxDirectState = "inactive" | "connecting" | "active" | "error";
27
+ export type SonioxDirectErrorKind = "invalid_key" | "quota" | "unreachable";
28
+ export interface SonioxDirectStatus {
29
+ enabled: boolean;
30
+ state: SonioxDirectState;
31
+ errorKind?: SonioxDirectErrorKind;
32
+ lastErrorAt?: number;
33
+ }
34
+ declare class SonioxDirectService {
35
+ private static instance;
36
+ private started;
37
+ private apiKey;
38
+ private desiredSubs;
39
+ private transcriptionHints;
40
+ private slots;
41
+ private micSub;
42
+ private unsubscribeSettings;
43
+ private transcriptListeners;
44
+ private translationListeners;
45
+ private statusListeners;
46
+ private lastStatus;
47
+ private lastErrorAt;
48
+ private constructor();
49
+ /** Test seam: swap the realtime-client constructor (bun module mocks leak
50
+ * across test files, so injection beats mock.module here). */
51
+ private clientFactory;
52
+ setClientFactoryForTests(factory: ((opts: SonioxSessionOptions) => SonioxRealtimeClient) | null): void;
53
+ static getInstance(): SonioxDirectService;
54
+ start(): void;
55
+ stop(): void;
56
+ private readApiKey;
57
+ isEnabled(): boolean;
58
+ /**
59
+ * Whether the primary (Soniox-direct) transcription path is believed usable.
60
+ * False once any desired session has failed and none are open — that is the
61
+ * signal for the sherpa fallback. While disabled this is vacuously true
62
+ * (callers should gate on isEnabled()).
63
+ */
64
+ isHealthy(): boolean;
65
+ getStatus(): SonioxDirectStatus;
66
+ onTranscript(cb: (d: TranscriptionData) => void): () => void;
67
+ onTranslation(cb: (d: TranslationData) => void): () => void;
68
+ onStatusChanged(cb: (s: SonioxDirectStatus) => void): () => void;
69
+ /** Registered by LocalMiniappRuntime; invoked when enablement flips so the
70
+ * runtime re-partitions subscriptions between cloud and direct. A callback
71
+ * (not an import) to avoid a service import cycle. */
72
+ private routingChangedListener;
73
+ setRoutingChangedListener(cb: (() => void) | null): void;
74
+ /**
75
+ * The full transcription/translation subscription set this service should
76
+ * serve (same AudioSubscription[] the cloud would otherwise get), plus the
77
+ * union of auto-mode detection hints. Called by LocalMiniappRuntime on every
78
+ * subscription recompute; an empty array tears everything down.
79
+ */
80
+ setDesiredSubscriptions(subs: AudioSubscription[], transcriptionHints?: string[]): void;
81
+ validateApiKey(key: string): Promise<{
82
+ ok: true;
83
+ } | {
84
+ ok: false;
85
+ reason: "invalid_key" | "network";
86
+ }>;
87
+ private subKey;
88
+ private reconcile;
89
+ private createSlot;
90
+ private connectSlot;
91
+ private handleSlotError;
92
+ private handleSlotClosed;
93
+ private scheduleReconnect;
94
+ private teardownSlot;
95
+ private teardownAllSlots;
96
+ private syncMicListener;
97
+ /**
98
+ * Map an assembled utterance to the cloud wire shapes. Language resolution
99
+ * mirrors cloud result.ts: a specific-language subscription's code WINS over
100
+ * the provider-detected code (miniapp handlers key on the exact stream, and
101
+ * Soniox reports bare ISO codes while subscriptions carry BCP-47 tags).
102
+ */
103
+ private deliver;
104
+ private computeStatus;
105
+ private publishStatus;
106
+ }
107
+ declare const sonioxDirectService: SonioxDirectService;
108
+ export default sonioxDirectService;
109
+ //# sourceMappingURL=SonioxDirectService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SonioxDirectService.d.ts","sourceRoot":"","sources":["../../../src/services/soniox/SonioxDirectService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,449 @@
1
+ /**
2
+ * SonioxDirectService
3
+ *
4
+ * Phone → Soniox direct transcription with a user-supplied API key
5
+ * (Settings > Keys). Enabled iff the `soniox_api_key` setting is non-empty.
6
+ *
7
+ * While enabled, LocalMiniappRuntime routes transcription/translation
8
+ * subscriptions HERE instead of to the cloud (and pushes an empty cloud
9
+ * subscription set, which also silences the LC3 audio uplink) — audio for
10
+ * transcription never touches the Glassly cloud. This service opens one
11
+ * Soniox realtime WebSocket session per subscription, feeds it decoded PCM
12
+ * from the glasses mic (`mic_pcm`), assembles tokens into utterances, and
13
+ * emits the same TranscriptionData / TranslationData shapes the cloud client
14
+ * emits so the miniapp fan-out is provider-agnostic.
15
+ *
16
+ * Failure policy (per product decision): a failing key degrades to on-device
17
+ * sherpa STT via LocalSttFallbackCoordinator — never back to the cloud.
18
+ * Reconnect semantics mirror the cloud provider: transient errors back off
19
+ * 500ms → 8s for 10 attempts, billing/auth (non-transient) errors retry on a
20
+ * slow 60s cadence forever; after transient attempts are exhausted the slow
21
+ * cadence takes over too (the phone has no worker-recreate path of last
22
+ * resort, so it must self-recover).
23
+ */
24
+ import BluetoothSdk from "@glassly/bluetooth-sdk/internal";
25
+ import { SETTINGS, useSettingsStore } from "../../stores/settings";
26
+ import { BgTimer } from "../../utils/timers";
27
+ import localSttFallbackCoordinator from "../LocalSttFallbackCoordinator";
28
+ import { SonioxRealtimeClient, validateSonioxApiKey, } from "./SonioxRealtimeClient";
29
+ import { SonioxTokenAssembler } from "./SonioxTokenAssembler";
30
+ const LOG_TAG = "SONIOX_DIRECT";
31
+ const RECONNECT_BASE_MS = 500;
32
+ const RECONNECT_MAX_MS = 8_000;
33
+ const RECONNECT_MAX_ATTEMPTS = 10;
34
+ const NON_TRANSIENT_RETRY_MS = 60_000;
35
+ function subLanguage(sub) {
36
+ const source = sub.kind === "transcription" ? sub.language : sub.source;
37
+ if (source.mode === "specific")
38
+ return { language: source.code };
39
+ return { language: "auto", hints: source.hints };
40
+ }
41
+ function classifyError(err) {
42
+ if (err.code === 401 || err.code === 403)
43
+ return "invalid_key";
44
+ if (err.code === 402 || err.code === 429 || err.code === "quota_exceeded")
45
+ return "quota";
46
+ return "unreachable";
47
+ }
48
+ class SonioxDirectService {
49
+ static instance = null;
50
+ started = false;
51
+ apiKey = "";
52
+ desiredSubs = [];
53
+ transcriptionHints = [];
54
+ slots = new Map();
55
+ micSub = null;
56
+ unsubscribeSettings = null;
57
+ transcriptListeners = new Set();
58
+ translationListeners = new Set();
59
+ statusListeners = new Set();
60
+ lastStatus = { enabled: false, state: "inactive" };
61
+ lastErrorAt;
62
+ constructor() { }
63
+ /** Test seam: swap the realtime-client constructor (bun module mocks leak
64
+ * across test files, so injection beats mock.module here). */
65
+ clientFactory = (opts) => new SonioxRealtimeClient(opts);
66
+ setClientFactoryForTests(factory) {
67
+ this.clientFactory = factory ?? ((opts) => new SonioxRealtimeClient(opts));
68
+ }
69
+ static getInstance() {
70
+ if (!SonioxDirectService.instance) {
71
+ SonioxDirectService.instance = new SonioxDirectService();
72
+ }
73
+ return SonioxDirectService.instance;
74
+ }
75
+ // ===========================================================================
76
+ // Lifecycle
77
+ // ===========================================================================
78
+ start() {
79
+ if (this.started)
80
+ return;
81
+ this.started = true;
82
+ this.apiKey = this.readApiKey();
83
+ this.unsubscribeSettings = useSettingsStore.subscribe((s) => s.settings[SETTINGS.soniox_api_key.key], () => {
84
+ const next = this.readApiKey();
85
+ if (next === this.apiKey)
86
+ return;
87
+ const enabledChanged = !!next !== !!this.apiKey;
88
+ this.apiKey = next;
89
+ console.log(`${LOG_TAG}: api key ${next ? "set" : "cleared"}`);
90
+ // Existing sessions carry the old key in their config; rebuild.
91
+ this.teardownAllSlots();
92
+ this.reconcile();
93
+ if (enabledChanged) {
94
+ // Subscriptions must move between cloud and direct; the runtime
95
+ // re-partitions and calls setDesiredSubscriptions back into us.
96
+ this.routingChangedListener?.();
97
+ }
98
+ });
99
+ this.reconcile();
100
+ }
101
+ stop() {
102
+ if (!this.started)
103
+ return;
104
+ this.started = false;
105
+ this.unsubscribeSettings?.();
106
+ this.unsubscribeSettings = null;
107
+ this.teardownAllSlots();
108
+ this.reconcile();
109
+ }
110
+ readApiKey() {
111
+ const raw = useSettingsStore.getState().getSetting(SETTINGS.soniox_api_key.key);
112
+ return typeof raw === "string" ? raw.trim() : "";
113
+ }
114
+ // ===========================================================================
115
+ // Public surface
116
+ // ===========================================================================
117
+ isEnabled() {
118
+ return this.started && this.apiKey.length > 0;
119
+ }
120
+ /**
121
+ * Whether the primary (Soniox-direct) transcription path is believed usable.
122
+ * False once any desired session has failed and none are open — that is the
123
+ * signal for the sherpa fallback. While disabled this is vacuously true
124
+ * (callers should gate on isEnabled()).
125
+ */
126
+ isHealthy() {
127
+ if (!this.isEnabled())
128
+ return true;
129
+ if (this.slots.size === 0)
130
+ return true;
131
+ let anyOpen = false;
132
+ let anyFailed = false;
133
+ for (const slot of this.slots.values()) {
134
+ if (slot.open)
135
+ anyOpen = true;
136
+ if (slot.failed)
137
+ anyFailed = true;
138
+ }
139
+ return anyOpen || !anyFailed;
140
+ }
141
+ getStatus() {
142
+ return this.lastStatus;
143
+ }
144
+ onTranscript(cb) {
145
+ this.transcriptListeners.add(cb);
146
+ return () => this.transcriptListeners.delete(cb);
147
+ }
148
+ onTranslation(cb) {
149
+ this.translationListeners.add(cb);
150
+ return () => this.translationListeners.delete(cb);
151
+ }
152
+ onStatusChanged(cb) {
153
+ this.statusListeners.add(cb);
154
+ return () => this.statusListeners.delete(cb);
155
+ }
156
+ /** Registered by LocalMiniappRuntime; invoked when enablement flips so the
157
+ * runtime re-partitions subscriptions between cloud and direct. A callback
158
+ * (not an import) to avoid a service import cycle. */
159
+ routingChangedListener = null;
160
+ setRoutingChangedListener(cb) {
161
+ this.routingChangedListener = cb;
162
+ }
163
+ /**
164
+ * The full transcription/translation subscription set this service should
165
+ * serve (same AudioSubscription[] the cloud would otherwise get), plus the
166
+ * union of auto-mode detection hints. Called by LocalMiniappRuntime on every
167
+ * subscription recompute; an empty array tears everything down.
168
+ */
169
+ setDesiredSubscriptions(subs, transcriptionHints = []) {
170
+ this.desiredSubs = subs;
171
+ this.transcriptionHints = transcriptionHints;
172
+ this.reconcile();
173
+ }
174
+ validateApiKey(key) {
175
+ return validateSonioxApiKey(key.trim());
176
+ }
177
+ // ===========================================================================
178
+ // Session reconciliation
179
+ // ===========================================================================
180
+ subKey(sub) {
181
+ return sub.kind === "transcription"
182
+ ? `tx:${JSON.stringify(sub.language)}`
183
+ : `tr:${JSON.stringify(sub.source)}:${sub.target}`;
184
+ }
185
+ reconcile() {
186
+ const desired = new Map();
187
+ if (this.isEnabled()) {
188
+ for (const sub of this.desiredSubs)
189
+ desired.set(this.subKey(sub), sub);
190
+ }
191
+ for (const [key, slot] of this.slots) {
192
+ if (!desired.has(key)) {
193
+ this.teardownSlot(slot);
194
+ this.slots.delete(key);
195
+ }
196
+ }
197
+ for (const [key, sub] of desired) {
198
+ if (!this.slots.has(key)) {
199
+ this.slots.set(key, this.createSlot(key, sub));
200
+ }
201
+ }
202
+ this.syncMicListener();
203
+ this.publishStatus();
204
+ }
205
+ createSlot(key, sub) {
206
+ const { language } = subLanguage(sub);
207
+ const isTranslation = sub.kind === "translation";
208
+ const slot = {
209
+ key,
210
+ sub,
211
+ client: null,
212
+ assembler: null,
213
+ open: false,
214
+ failed: false,
215
+ attempts: 0,
216
+ nonTransient: false,
217
+ retryTimer: null,
218
+ };
219
+ slot.assembler = new SonioxTokenAssembler({
220
+ scope: key,
221
+ isTranslation,
222
+ fallbackLanguage: language === "auto" ? undefined : language,
223
+ onTranscript: (t) => this.deliver(slot, t),
224
+ });
225
+ this.connectSlot(slot);
226
+ return slot;
227
+ }
228
+ connectSlot(slot) {
229
+ const { language, hints } = subLanguage(slot.sub);
230
+ const client = this.clientFactory({
231
+ apiKey: this.apiKey,
232
+ language,
233
+ languageHints: hints ?? (language === "auto" ? this.transcriptionHints : undefined),
234
+ targetLanguage: slot.sub.kind === "translation" ? slot.sub.target : undefined,
235
+ onOpen: () => {
236
+ slot.open = true;
237
+ slot.failed = false;
238
+ slot.attempts = 0;
239
+ slot.nonTransient = false;
240
+ slot.errorKind = undefined;
241
+ console.log(`${LOG_TAG}: session open ${slot.key}`);
242
+ this.publishStatus();
243
+ },
244
+ onResult: (result) => slot.assembler.handleResult(result),
245
+ onEndpoint: () => slot.assembler.handleEndpoint(),
246
+ onFinalized: () => slot.assembler.handleFinalized(),
247
+ onError: (err) => this.handleSlotError(slot, err),
248
+ onClose: () => this.handleSlotClosed(slot),
249
+ });
250
+ slot.client = client;
251
+ client.connect();
252
+ }
253
+ handleSlotError(slot, err) {
254
+ if (!this.slots.has(slot.key))
255
+ return;
256
+ slot.errorKind = classifyError(err);
257
+ slot.nonTransient = err.nonTransient;
258
+ this.lastErrorAt = Date.now();
259
+ console.warn(`${LOG_TAG}: session error ${slot.key} code=${err.code ?? "?"} ${err.message}`);
260
+ // A server-side error message usually precedes the socket dying; close
261
+ // proactively (close() suppresses the client's own onClose callback) and
262
+ // drive the retry from here.
263
+ slot.client?.close();
264
+ this.scheduleReconnect(slot);
265
+ }
266
+ handleSlotClosed(slot) {
267
+ if (!this.slots.has(slot.key))
268
+ return;
269
+ this.scheduleReconnect(slot);
270
+ }
271
+ scheduleReconnect(slot) {
272
+ if (slot.retryTimer !== null)
273
+ return;
274
+ slot.open = false;
275
+ slot.failed = true;
276
+ slot.client = null;
277
+ let delay;
278
+ if (slot.nonTransient) {
279
+ slot.attempts = 0;
280
+ delay = NON_TRANSIENT_RETRY_MS;
281
+ }
282
+ else {
283
+ slot.attempts += 1;
284
+ if (slot.attempts > RECONNECT_MAX_ATTEMPTS) {
285
+ // Unlike the cloud worker (whose detach/attach recreates providers),
286
+ // nothing else will ever rebuild these sessions — fall back to the
287
+ // slow cadence instead of giving up outright.
288
+ delay = NON_TRANSIENT_RETRY_MS;
289
+ }
290
+ else {
291
+ delay = Math.min(RECONNECT_MAX_MS, RECONNECT_BASE_MS * 2 ** (slot.attempts - 1));
292
+ }
293
+ }
294
+ console.log(`${LOG_TAG}: reconnect ${slot.key} attempt=${slot.attempts} delayMs=${delay}`);
295
+ this.publishStatus();
296
+ slot.retryTimer = BgTimer.setTimeout(() => {
297
+ slot.retryTimer = null;
298
+ if (!this.slots.has(slot.key) || !this.isEnabled())
299
+ return;
300
+ this.connectSlot(slot);
301
+ }, delay);
302
+ }
303
+ teardownSlot(slot) {
304
+ if (slot.retryTimer !== null) {
305
+ BgTimer.clearTimeout(slot.retryTimer);
306
+ slot.retryTimer = null;
307
+ }
308
+ // Flush the in-flight utterance so a mid-update caption commits rather
309
+ // than dangling (mirrors the cloud provider's close()).
310
+ try {
311
+ slot.assembler.flush();
312
+ }
313
+ catch {
314
+ /* best-effort */
315
+ }
316
+ slot.client?.close();
317
+ slot.client = null;
318
+ slot.open = false;
319
+ }
320
+ teardownAllSlots() {
321
+ for (const slot of this.slots.values())
322
+ this.teardownSlot(slot);
323
+ this.slots.clear();
324
+ }
325
+ // ===========================================================================
326
+ // Audio feed
327
+ // ===========================================================================
328
+ syncMicListener() {
329
+ const wantMic = this.slots.size > 0;
330
+ if (wantMic && !this.micSub) {
331
+ this.micSub = BluetoothSdk.addListener("mic_pcm", (event) => {
332
+ if (!event?.pcm)
333
+ return;
334
+ for (const slot of this.slots.values()) {
335
+ slot.client?.sendAudio(event.pcm);
336
+ }
337
+ });
338
+ }
339
+ else if (!wantMic && this.micSub) {
340
+ this.micSub.remove();
341
+ this.micSub = null;
342
+ }
343
+ }
344
+ // ===========================================================================
345
+ // Transcript delivery
346
+ // ===========================================================================
347
+ /**
348
+ * Map an assembled utterance to the cloud wire shapes. Language resolution
349
+ * mirrors cloud result.ts: a specific-language subscription's code WINS over
350
+ * the provider-detected code (miniapp handlers key on the exact stream, and
351
+ * Soniox reports bare ISO codes while subscriptions carry BCP-47 tags).
352
+ */
353
+ deliver(slot, t) {
354
+ const timestamp = Date.now();
355
+ const startMs = t.startMs ?? 0;
356
+ const endMs = t.endMs ?? 0;
357
+ const durationMs = t.startMs != null && t.endMs != null ? t.endMs - t.startMs : undefined;
358
+ if (slot.sub.kind === "translation") {
359
+ const source = slot.sub.source;
360
+ const resolved = source.mode === "specific"
361
+ ? { language: source.code, detected: false }
362
+ : { language: t.sourceLanguage ?? "auto", detected: true };
363
+ const data = {
364
+ userId: "local",
365
+ subscription: slot.sub,
366
+ text: t.text,
367
+ originalText: t.originalText,
368
+ isFinal: t.isFinal,
369
+ utteranceId: t.utteranceId,
370
+ speakerId: t.speakerId,
371
+ startMs,
372
+ endMs,
373
+ durationMs,
374
+ source: { language: resolved.language, detected: resolved.detected },
375
+ target: { language: slot.sub.target },
376
+ provider: "soniox-direct",
377
+ timestamp,
378
+ };
379
+ for (const cb of this.translationListeners)
380
+ cb(data);
381
+ return;
382
+ }
383
+ const source = slot.sub.language;
384
+ const resolved = source.mode === "specific"
385
+ ? { language: source.code, detected: false }
386
+ : { language: t.language ?? "auto", detected: true };
387
+ const data = {
388
+ userId: "local",
389
+ subscription: slot.sub,
390
+ text: t.text,
391
+ isFinal: t.isFinal,
392
+ utteranceId: t.utteranceId,
393
+ speakerId: t.speakerId,
394
+ startMs,
395
+ endMs,
396
+ durationMs,
397
+ resolvedLanguage: resolved.language,
398
+ languageDetected: resolved.detected,
399
+ tokens: [],
400
+ provider: "soniox-direct",
401
+ timestamp,
402
+ };
403
+ for (const cb of this.transcriptListeners)
404
+ cb(data);
405
+ }
406
+ // ===========================================================================
407
+ // Status
408
+ // ===========================================================================
409
+ computeStatus() {
410
+ const enabled = this.isEnabled();
411
+ if (!enabled)
412
+ return { enabled: false, state: "inactive" };
413
+ if (this.slots.size === 0)
414
+ return { enabled: true, state: "inactive" };
415
+ let anyOpen = false;
416
+ let errorKind;
417
+ let anyFailed = false;
418
+ for (const slot of this.slots.values()) {
419
+ if (slot.open)
420
+ anyOpen = true;
421
+ if (slot.failed)
422
+ anyFailed = true;
423
+ // invalid_key > quota > unreachable, so the UI surfaces the actionable one.
424
+ if (slot.errorKind === "invalid_key" || (slot.errorKind && errorKind !== "invalid_key")) {
425
+ errorKind = errorKind === "quota" && slot.errorKind === "unreachable" ? errorKind : slot.errorKind;
426
+ }
427
+ }
428
+ if (anyOpen)
429
+ return { enabled: true, state: "active" };
430
+ if (anyFailed)
431
+ return { enabled: true, state: "error", errorKind, lastErrorAt: this.lastErrorAt };
432
+ return { enabled: true, state: "connecting" };
433
+ }
434
+ publishStatus() {
435
+ const next = this.computeStatus();
436
+ const prev = this.lastStatus;
437
+ const changed = next.enabled !== prev.enabled || next.state !== prev.state || next.errorKind !== prev.errorKind;
438
+ this.lastStatus = next;
439
+ if (!changed)
440
+ return;
441
+ console.log(`${LOG_TAG}: status -> ${next.state}${next.errorKind ? ` (${next.errorKind})` : ""}`);
442
+ localSttFallbackCoordinator.onSonioxDirectStateChange(this.isEnabled(), this.isHealthy());
443
+ for (const cb of this.statusListeners)
444
+ cb(next);
445
+ }
446
+ }
447
+ const sonioxDirectService = SonioxDirectService.getInstance();
448
+ export default sonioxDirectService;
449
+ //# sourceMappingURL=SonioxDirectService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SonioxDirectService.js","sourceRoot":"","sources":["../../../src/services/soniox/SonioxDirectService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,YAAY,MAAM,iCAAiC,CAAA;AAG1D,OAAO,EAAC,QAAQ,EAAE,gBAAgB,EAAC,MAAM,uBAAuB,CAAA;AAChE,OAAO,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAA;AAC1C,OAAO,2BAA2B,MAAM,gCAAgC,CAAA;AACxE,OAAO,EAEL,oBAAoB,EACpB,oBAAoB,GAErB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAA;AAE3D,MAAM,OAAO,GAAG,eAAe,CAAA;AAE/B,MAAM,iBAAiB,GAAG,GAAG,CAAA;AAC7B,MAAM,gBAAgB,GAAG,KAAK,CAAA;AAC9B,MAAM,sBAAsB,GAAG,EAAE,CAAA;AACjC,MAAM,sBAAsB,GAAG,MAAM,CAAA;AA0BrC,SAAS,WAAW,CAAC,GAAsB;IACzC,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAA;IACvE,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,EAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAC,CAAA;IAC9D,OAAO,EAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAC,CAAA;AAChD,CAAC;AAED,SAAS,aAAa,CAAC,GAAsB;IAC3C,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG;QAAE,OAAO,aAAa,CAAA;IAC9D,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB;QAAE,OAAO,OAAO,CAAA;IACzF,OAAO,aAAa,CAAA;AACtB,CAAC;AAED,MAAM,mBAAmB;IACf,MAAM,CAAC,QAAQ,GAA+B,IAAI,CAAA;IAElD,OAAO,GAAG,KAAK,CAAA;IACf,MAAM,GAAG,EAAE,CAAA;IACX,WAAW,GAAwB,EAAE,CAAA;IACrC,kBAAkB,GAAa,EAAE,CAAA;IACjC,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAA;IAEtC,MAAM,GAAgC,IAAI,CAAA;IAC1C,mBAAmB,GAAwB,IAAI,CAAA;IAE/C,mBAAmB,GAAG,IAAI,GAAG,EAAkC,CAAA;IAC/D,oBAAoB,GAAG,IAAI,GAAG,EAAgC,CAAA;IAC9D,eAAe,GAAG,IAAI,GAAG,EAAmC,CAAA;IAC5D,UAAU,GAAuB,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAC,CAAA;IACpE,WAAW,CAAoB;IAEvC,gBAAuB,CAAC;IAExB;mEAC+D;IACvD,aAAa,GAAyD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAA;IACtH,wBAAwB,CAAC,OAAsE;QAC7F,IAAI,CAAC,aAAa,GAAG,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAA;IAC5E,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC;YAClC,mBAAmB,CAAC,QAAQ,GAAG,IAAI,mBAAmB,EAAE,CAAA;QAC1D,CAAC;QACD,OAAO,mBAAmB,CAAC,QAAQ,CAAA;IACrC,CAAC;IAED,8EAA8E;IAC9E,YAAY;IACZ,8EAA8E;IAE9E,KAAK;QACH,IAAI,IAAI,CAAC,OAAO;YAAE,OAAM;QACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;QAC/B,IAAI,CAAC,mBAAmB,GAAG,gBAAgB,CAAC,SAAS,CACnD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAuB,EACpE,GAAG,EAAE;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;YAC9B,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM;gBAAE,OAAM;YAChC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAA;YAC/C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;YAClB,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,aAAa,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAA;YAC9D,gEAAgE;YAChE,IAAI,CAAC,gBAAgB,EAAE,CAAA;YACvB,IAAI,CAAC,SAAS,EAAE,CAAA;YAChB,IAAI,cAAc,EAAE,CAAC;gBACnB,gEAAgE;gBAChE,gEAAgE;gBAChE,IAAI,CAAC,sBAAsB,EAAE,EAAE,CAAA;YACjC,CAAC;QACH,CAAC,CACF,CAAA;QACD,IAAI,CAAC,SAAS,EAAE,CAAA;IAClB,CAAC;IAED,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAM;QACzB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QACpB,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAA;QAC5B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAA;QAC/B,IAAI,CAAC,gBAAgB,EAAE,CAAA;QACvB,IAAI,CAAC,SAAS,EAAE,CAAA;IAClB,CAAC;IAEO,UAAU;QAChB,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;QAC/E,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAClD,CAAC;IAED,8EAA8E;IAC9E,iBAAiB;IACjB,8EAA8E;IAE9E,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;IAC/C,CAAC;IAED;;;;;OAKG;IACH,SAAS;QACP,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YAAE,OAAO,IAAI,CAAA;QAClC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;QACtC,IAAI,OAAO,GAAG,KAAK,CAAA;QACnB,IAAI,SAAS,GAAG,KAAK,CAAA;QACrB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO,GAAG,IAAI,CAAA;YAC7B,IAAI,IAAI,CAAC,MAAM;gBAAE,SAAS,GAAG,IAAI,CAAA;QACnC,CAAC;QACD,OAAO,OAAO,IAAI,CAAC,SAAS,CAAA;IAC9B,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,UAAU,CAAA;IACxB,CAAC;IAED,YAAY,CAAC,EAAkC;QAC7C,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAChC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAClD,CAAC;IAED,aAAa,CAAC,EAAgC;QAC5C,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACjC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACnD,CAAC;IAED,eAAe,CAAC,EAAmC;QACjD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC5B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAC9C,CAAC;IAED;;2DAEuD;IAC/C,sBAAsB,GAAwB,IAAI,CAAA;IAC1D,yBAAyB,CAAC,EAAuB;QAC/C,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAA;IAClC,CAAC;IAED;;;;;OAKG;IACH,uBAAuB,CAAC,IAAyB,EAAE,qBAA+B,EAAE;QAClF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;QACvB,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAA;QAC5C,IAAI,CAAC,SAAS,EAAE,CAAA;IAClB,CAAC;IAED,cAAc,CAAC,GAAW;QACxB,OAAO,oBAAoB,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;IACzC,CAAC;IAED,8EAA8E;IAC9E,yBAAyB;IACzB,8EAA8E;IAEtE,MAAM,CAAC,GAAsB;QACnC,OAAO,GAAG,CAAC,IAAI,KAAK,eAAe;YACjC,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YACtC,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAA;IACtD,CAAC;IAEO,SAAS;QACf,MAAM,OAAO,GAAG,IAAI,GAAG,EAA6B,CAAA;QACpD,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YACrB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;QACxE,CAAC;QAED,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACrC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;gBACvB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACxB,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;YAChD,CAAC;QACH,CAAC;QAED,IAAI,CAAC,eAAe,EAAE,CAAA;QACtB,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC;IAEO,UAAU,CAAC,GAAW,EAAE,GAAsB;QACpD,MAAM,EAAC,QAAQ,EAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;QACnC,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,KAAK,aAAa,CAAA;QAChD,MAAM,IAAI,GAAgB;YACxB,GAAG;YACH,GAAG;YACH,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAuC;YAClD,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,CAAC;YACX,YAAY,EAAE,KAAK;YACnB,UAAU,EAAE,IAAI;SACjB,CAAA;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,oBAAoB,CAAC;YACxC,KAAK,EAAE,GAAG;YACV,aAAa;YACb,gBAAgB,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;YAC5D,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;SAC3C,CAAC,CAAA;QACF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QACtB,OAAO,IAAI,CAAA;IACb,CAAC;IAEO,WAAW,CAAC,IAAiB;QACnC,MAAM,EAAC,QAAQ,EAAE,KAAK,EAAC,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;YAChC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ;YACR,aAAa,EAAE,KAAK,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC;YACnF,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YAC7E,MAAM,EAAE,GAAG,EAAE;gBACX,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;gBAChB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;gBACnB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;gBACjB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;gBACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;gBAC1B,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,kBAAkB,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;gBACnD,IAAI,CAAC,aAAa,EAAE,CAAA;YACtB,CAAC;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC;YACzD,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE;YACjD,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE;YACnD,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC;YACjD,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;SAC3C,CAAC,CAAA;QACF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,MAAM,CAAC,OAAO,EAAE,CAAA;IAClB,CAAC;IAEO,eAAe,CAAC,IAAiB,EAAE,GAAsB;QAC/D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAM;QACrC,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;QACnC,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY,CAAA;QACpC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC7B,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,mBAAmB,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;QAC5F,uEAAuE;QACvE,yEAAyE;QACzE,6BAA6B;QAC7B,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAA;QACpB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;IAEO,gBAAgB,CAAC,IAAiB;QACxC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAM;QACrC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;IAEO,iBAAiB,CAAC,IAAiB;QACzC,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;YAAE,OAAM;QACpC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAA;QACjB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QAClB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QAElB,IAAI,KAAa,CAAA;QACjB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;YACjB,KAAK,GAAG,sBAAsB,CAAA;QAChC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAA;YAClB,IAAI,IAAI,CAAC,QAAQ,GAAG,sBAAsB,EAAE,CAAC;gBAC3C,qEAAqE;gBACrE,mEAAmE;gBACnE,8CAA8C;gBAC9C,KAAK,GAAG,sBAAsB,CAAA;YAChC,CAAC;iBAAM,CAAC;gBACN,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,iBAAiB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAA;YAClF,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,eAAe,IAAI,CAAC,GAAG,YAAY,IAAI,CAAC,QAAQ,YAAY,KAAK,EAAE,CAAC,CAAA;QAC1F,IAAI,CAAC,aAAa,EAAE,CAAA;QAEpB,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE;YACxC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;YACtB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBAAE,OAAM;YAC1D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QACxB,CAAC,EAAE,KAAK,CAAC,CAAA;IACX,CAAC;IAEO,YAAY,CAAC,IAAiB;QACpC,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC7B,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YACrC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;QACxB,CAAC;QACD,uEAAuE;QACvE,wDAAwD;QACxD,IAAI,CAAC;YACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAA;QACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QAClB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAA;IACnB,CAAC;IAEO,gBAAgB;QACtB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QAC/D,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAED,8EAA8E;IAC9E,aAAa;IACb,8EAA8E;IAEtE,eAAe;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAA;QACnC,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,KAAyB,EAAE,EAAE;gBAC9E,IAAI,CAAC,KAAK,EAAE,GAAG;oBAAE,OAAM;gBACvB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;oBACvC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBACnC,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;aAAM,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;YACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QACpB,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,sBAAsB;IACtB,8EAA8E;IAE9E;;;;;OAKG;IACK,OAAO,CACb,IAAiB,EACjB,CAUC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC5B,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAA;QAC9B,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAA;QAC1B,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAA;QAEzF,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAA;YAC9B,MAAM,QAAQ,GACZ,MAAM,CAAC,IAAI,KAAK,UAAU;gBACxB,CAAC,CAAC,EAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAC;gBAC1C,CAAC,CAAC,EAAC,QAAQ,EAAE,CAAC,CAAC,cAAc,IAAI,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAA;YAC5D,MAAM,IAAI,GAAoB;gBAC5B,MAAM,EAAE,OAAO;gBACf,YAAY,EAAE,IAAI,CAAC,GAAG;gBACtB,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,YAAY,EAAE,CAAC,CAAC,YAAY;gBAC5B,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,OAAO;gBACP,KAAK;gBACL,UAAU;gBACV,MAAM,EAAE,EAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAC;gBAClE,MAAM,EAAE,EAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAC;gBACnC,QAAQ,EAAE,eAAe;gBACzB,SAAS;aACV,CAAA;YACD,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,oBAAoB;gBAAE,EAAE,CAAC,IAAI,CAAC,CAAA;YACpD,OAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAA;QAChC,MAAM,QAAQ,GACZ,MAAM,CAAC,IAAI,KAAK,UAAU;YACxB,CAAC,CAAC,EAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAC;YAC1C,CAAC,CAAC,EAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAA;QACtD,MAAM,IAAI,GAAsB;YAC9B,MAAM,EAAE,OAAO;YACf,YAAY,EAAE,IAAI,CAAC,GAAG;YACtB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,OAAO;YACP,KAAK;YACL,UAAU;YACV,gBAAgB,EAAE,QAAQ,CAAC,QAAQ;YACnC,gBAAgB,EAAE,QAAQ,CAAC,QAAQ;YACnC,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,eAAe;YACzB,SAAS;SACV,CAAA;QACD,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,mBAAmB;YAAE,EAAE,CAAC,IAAI,CAAC,CAAA;IACrD,CAAC;IAED,8EAA8E;IAC9E,SAAS;IACT,8EAA8E;IAEtE,aAAa;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;QAChC,IAAI,CAAC,OAAO;YAAE,OAAO,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAC,CAAA;QACxD,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAC,CAAA;QAEpE,IAAI,OAAO,GAAG,KAAK,CAAA;QACnB,IAAI,SAA4C,CAAA;QAChD,IAAI,SAAS,GAAG,KAAK,CAAA;QACrB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO,GAAG,IAAI,CAAA;YAC7B,IAAI,IAAI,CAAC,MAAM;gBAAE,SAAS,GAAG,IAAI,CAAA;YACjC,4EAA4E;YAC5E,IAAI,IAAI,CAAC,SAAS,KAAK,aAAa,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,aAAa,CAAC,EAAE,CAAC;gBACxF,SAAS,GAAG,SAAS,KAAK,OAAO,IAAI,IAAI,CAAC,SAAS,KAAK,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAA;YACpG,CAAC;QACH,CAAC;QACD,IAAI,OAAO;YAAE,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAC,CAAA;QACpD,IAAI,SAAS;YAAE,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAC,CAAA;QAC/F,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAC,CAAA;IAC7C,CAAC;IAEO,aAAa;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAA;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAA;QAC/G,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;QACtB,IAAI,CAAC,OAAO;YAAE,OAAM;QACpB,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,eAAe,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QACjG,2BAA2B,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;QACzF,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,eAAe;YAAE,EAAE,CAAC,IAAI,CAAC,CAAA;IACjD,CAAC;;AAGH,MAAM,mBAAmB,GAAG,mBAAmB,CAAC,WAAW,EAAE,CAAA;AAC7D,eAAe,mBAAmB,CAAA","sourcesContent":["/**\n * SonioxDirectService\n *\n * Phone → Soniox direct transcription with a user-supplied API key\n * (Settings > Keys). Enabled iff the `soniox_api_key` setting is non-empty.\n *\n * While enabled, LocalMiniappRuntime routes transcription/translation\n * subscriptions HERE instead of to the cloud (and pushes an empty cloud\n * subscription set, which also silences the LC3 audio uplink) — audio for\n * transcription never touches the Glassly cloud. This service opens one\n * Soniox realtime WebSocket session per subscription, feeds it decoded PCM\n * from the glasses mic (`mic_pcm`), assembles tokens into utterances, and\n * emits the same TranscriptionData / TranslationData shapes the cloud client\n * emits so the miniapp fan-out is provider-agnostic.\n *\n * Failure policy (per product decision): a failing key degrades to on-device\n * sherpa STT via LocalSttFallbackCoordinator — never back to the cloud.\n * Reconnect semantics mirror the cloud provider: transient errors back off\n * 500ms → 8s for 10 attempts, billing/auth (non-transient) errors retry on a\n * slow 60s cadence forever; after transient attempts are exhausted the slow\n * cadence takes over too (the phone has no worker-recreate path of last\n * resort, so it must self-recover).\n */\n\nimport BluetoothSdk from \"@glassly/bluetooth-sdk/internal\"\nimport type {AudioSubscription, TranscriptionData, TranslationData} from \"@glassly/cloud-protocol\"\n\nimport {SETTINGS, useSettingsStore} from \"../../stores/settings\"\nimport {BgTimer} from \"../../utils/timers\"\nimport localSttFallbackCoordinator from \"../LocalSttFallbackCoordinator\"\nimport {\n SonioxClientError,\n SonioxRealtimeClient,\n validateSonioxApiKey,\n type SonioxSessionOptions,\n} from \"./SonioxRealtimeClient\"\nimport {SonioxTokenAssembler} from \"./SonioxTokenAssembler\"\n\nconst LOG_TAG = \"SONIOX_DIRECT\"\n\nconst RECONNECT_BASE_MS = 500\nconst RECONNECT_MAX_MS = 8_000\nconst RECONNECT_MAX_ATTEMPTS = 10\nconst NON_TRANSIENT_RETRY_MS = 60_000\n\nexport type SonioxDirectState = \"inactive\" | \"connecting\" | \"active\" | \"error\"\nexport type SonioxDirectErrorKind = \"invalid_key\" | \"quota\" | \"unreachable\"\n\nexport interface SonioxDirectStatus {\n enabled: boolean\n state: SonioxDirectState\n errorKind?: SonioxDirectErrorKind\n lastErrorAt?: number\n}\n\ninterface SessionSlot {\n key: string\n sub: AudioSubscription\n client: SonioxRealtimeClient | null\n assembler: SonioxTokenAssembler\n open: boolean\n /** ≥1 failed connect/drop since the last successful open. */\n failed: boolean\n attempts: number\n nonTransient: boolean\n errorKind?: SonioxDirectErrorKind\n retryTimer: number | null\n}\n\nfunction subLanguage(sub: AudioSubscription): {language: string; hints?: string[]} {\n const source = sub.kind === \"transcription\" ? sub.language : sub.source\n if (source.mode === \"specific\") return {language: source.code}\n return {language: \"auto\", hints: source.hints}\n}\n\nfunction classifyError(err: SonioxClientError): SonioxDirectErrorKind {\n if (err.code === 401 || err.code === 403) return \"invalid_key\"\n if (err.code === 402 || err.code === 429 || err.code === \"quota_exceeded\") return \"quota\"\n return \"unreachable\"\n}\n\nclass SonioxDirectService {\n private static instance: SonioxDirectService | null = null\n\n private started = false\n private apiKey = \"\"\n private desiredSubs: AudioSubscription[] = []\n private transcriptionHints: string[] = []\n private slots = new Map<string, SessionSlot>()\n\n private micSub: {remove: () => void} | null = null\n private unsubscribeSettings: (() => void) | null = null\n\n private transcriptListeners = new Set<(d: TranscriptionData) => void>()\n private translationListeners = new Set<(d: TranslationData) => void>()\n private statusListeners = new Set<(s: SonioxDirectStatus) => void>()\n private lastStatus: SonioxDirectStatus = {enabled: false, state: \"inactive\"}\n private lastErrorAt: number | undefined\n\n private constructor() {}\n\n /** Test seam: swap the realtime-client constructor (bun module mocks leak\n * across test files, so injection beats mock.module here). */\n private clientFactory: (opts: SonioxSessionOptions) => SonioxRealtimeClient = (opts) => new SonioxRealtimeClient(opts)\n setClientFactoryForTests(factory: ((opts: SonioxSessionOptions) => SonioxRealtimeClient) | null): void {\n this.clientFactory = factory ?? ((opts) => new SonioxRealtimeClient(opts))\n }\n\n static getInstance(): SonioxDirectService {\n if (!SonioxDirectService.instance) {\n SonioxDirectService.instance = new SonioxDirectService()\n }\n return SonioxDirectService.instance\n }\n\n // ===========================================================================\n // Lifecycle\n // ===========================================================================\n\n start(): void {\n if (this.started) return\n this.started = true\n this.apiKey = this.readApiKey()\n this.unsubscribeSettings = useSettingsStore.subscribe(\n (s) => s.settings[SETTINGS.soniox_api_key.key] as string | undefined,\n () => {\n const next = this.readApiKey()\n if (next === this.apiKey) return\n const enabledChanged = !!next !== !!this.apiKey\n this.apiKey = next\n console.log(`${LOG_TAG}: api key ${next ? \"set\" : \"cleared\"}`)\n // Existing sessions carry the old key in their config; rebuild.\n this.teardownAllSlots()\n this.reconcile()\n if (enabledChanged) {\n // Subscriptions must move between cloud and direct; the runtime\n // re-partitions and calls setDesiredSubscriptions back into us.\n this.routingChangedListener?.()\n }\n },\n )\n this.reconcile()\n }\n\n stop(): void {\n if (!this.started) return\n this.started = false\n this.unsubscribeSettings?.()\n this.unsubscribeSettings = null\n this.teardownAllSlots()\n this.reconcile()\n }\n\n private readApiKey(): string {\n const raw = useSettingsStore.getState().getSetting(SETTINGS.soniox_api_key.key)\n return typeof raw === \"string\" ? raw.trim() : \"\"\n }\n\n // ===========================================================================\n // Public surface\n // ===========================================================================\n\n isEnabled(): boolean {\n return this.started && this.apiKey.length > 0\n }\n\n /**\n * Whether the primary (Soniox-direct) transcription path is believed usable.\n * False once any desired session has failed and none are open — that is the\n * signal for the sherpa fallback. While disabled this is vacuously true\n * (callers should gate on isEnabled()).\n */\n isHealthy(): boolean {\n if (!this.isEnabled()) return true\n if (this.slots.size === 0) return true\n let anyOpen = false\n let anyFailed = false\n for (const slot of this.slots.values()) {\n if (slot.open) anyOpen = true\n if (slot.failed) anyFailed = true\n }\n return anyOpen || !anyFailed\n }\n\n getStatus(): SonioxDirectStatus {\n return this.lastStatus\n }\n\n onTranscript(cb: (d: TranscriptionData) => void): () => void {\n this.transcriptListeners.add(cb)\n return () => this.transcriptListeners.delete(cb)\n }\n\n onTranslation(cb: (d: TranslationData) => void): () => void {\n this.translationListeners.add(cb)\n return () => this.translationListeners.delete(cb)\n }\n\n onStatusChanged(cb: (s: SonioxDirectStatus) => void): () => void {\n this.statusListeners.add(cb)\n return () => this.statusListeners.delete(cb)\n }\n\n /** Registered by LocalMiniappRuntime; invoked when enablement flips so the\n * runtime re-partitions subscriptions between cloud and direct. A callback\n * (not an import) to avoid a service import cycle. */\n private routingChangedListener: (() => void) | null = null\n setRoutingChangedListener(cb: (() => void) | null): void {\n this.routingChangedListener = cb\n }\n\n /**\n * The full transcription/translation subscription set this service should\n * serve (same AudioSubscription[] the cloud would otherwise get), plus the\n * union of auto-mode detection hints. Called by LocalMiniappRuntime on every\n * subscription recompute; an empty array tears everything down.\n */\n setDesiredSubscriptions(subs: AudioSubscription[], transcriptionHints: string[] = []): void {\n this.desiredSubs = subs\n this.transcriptionHints = transcriptionHints\n this.reconcile()\n }\n\n validateApiKey(key: string): Promise<{ok: true} | {ok: false; reason: \"invalid_key\" | \"network\"}> {\n return validateSonioxApiKey(key.trim())\n }\n\n // ===========================================================================\n // Session reconciliation\n // ===========================================================================\n\n private subKey(sub: AudioSubscription): string {\n return sub.kind === \"transcription\"\n ? `tx:${JSON.stringify(sub.language)}`\n : `tr:${JSON.stringify(sub.source)}:${sub.target}`\n }\n\n private reconcile(): void {\n const desired = new Map<string, AudioSubscription>()\n if (this.isEnabled()) {\n for (const sub of this.desiredSubs) desired.set(this.subKey(sub), sub)\n }\n\n for (const [key, slot] of this.slots) {\n if (!desired.has(key)) {\n this.teardownSlot(slot)\n this.slots.delete(key)\n }\n }\n for (const [key, sub] of desired) {\n if (!this.slots.has(key)) {\n this.slots.set(key, this.createSlot(key, sub))\n }\n }\n\n this.syncMicListener()\n this.publishStatus()\n }\n\n private createSlot(key: string, sub: AudioSubscription): SessionSlot {\n const {language} = subLanguage(sub)\n const isTranslation = sub.kind === \"translation\"\n const slot: SessionSlot = {\n key,\n sub,\n client: null,\n assembler: null as unknown as SonioxTokenAssembler,\n open: false,\n failed: false,\n attempts: 0,\n nonTransient: false,\n retryTimer: null,\n }\n slot.assembler = new SonioxTokenAssembler({\n scope: key,\n isTranslation,\n fallbackLanguage: language === \"auto\" ? undefined : language,\n onTranscript: (t) => this.deliver(slot, t),\n })\n this.connectSlot(slot)\n return slot\n }\n\n private connectSlot(slot: SessionSlot): void {\n const {language, hints} = subLanguage(slot.sub)\n const client = this.clientFactory({\n apiKey: this.apiKey,\n language,\n languageHints: hints ?? (language === \"auto\" ? this.transcriptionHints : undefined),\n targetLanguage: slot.sub.kind === \"translation\" ? slot.sub.target : undefined,\n onOpen: () => {\n slot.open = true\n slot.failed = false\n slot.attempts = 0\n slot.nonTransient = false\n slot.errorKind = undefined\n console.log(`${LOG_TAG}: session open ${slot.key}`)\n this.publishStatus()\n },\n onResult: (result) => slot.assembler.handleResult(result),\n onEndpoint: () => slot.assembler.handleEndpoint(),\n onFinalized: () => slot.assembler.handleFinalized(),\n onError: (err) => this.handleSlotError(slot, err),\n onClose: () => this.handleSlotClosed(slot),\n })\n slot.client = client\n client.connect()\n }\n\n private handleSlotError(slot: SessionSlot, err: SonioxClientError): void {\n if (!this.slots.has(slot.key)) return\n slot.errorKind = classifyError(err)\n slot.nonTransient = err.nonTransient\n this.lastErrorAt = Date.now()\n console.warn(`${LOG_TAG}: session error ${slot.key} code=${err.code ?? \"?\"} ${err.message}`)\n // A server-side error message usually precedes the socket dying; close\n // proactively (close() suppresses the client's own onClose callback) and\n // drive the retry from here.\n slot.client?.close()\n this.scheduleReconnect(slot)\n }\n\n private handleSlotClosed(slot: SessionSlot): void {\n if (!this.slots.has(slot.key)) return\n this.scheduleReconnect(slot)\n }\n\n private scheduleReconnect(slot: SessionSlot): void {\n if (slot.retryTimer !== null) return\n slot.open = false\n slot.failed = true\n slot.client = null\n\n let delay: number\n if (slot.nonTransient) {\n slot.attempts = 0\n delay = NON_TRANSIENT_RETRY_MS\n } else {\n slot.attempts += 1\n if (slot.attempts > RECONNECT_MAX_ATTEMPTS) {\n // Unlike the cloud worker (whose detach/attach recreates providers),\n // nothing else will ever rebuild these sessions — fall back to the\n // slow cadence instead of giving up outright.\n delay = NON_TRANSIENT_RETRY_MS\n } else {\n delay = Math.min(RECONNECT_MAX_MS, RECONNECT_BASE_MS * 2 ** (slot.attempts - 1))\n }\n }\n console.log(`${LOG_TAG}: reconnect ${slot.key} attempt=${slot.attempts} delayMs=${delay}`)\n this.publishStatus()\n\n slot.retryTimer = BgTimer.setTimeout(() => {\n slot.retryTimer = null\n if (!this.slots.has(slot.key) || !this.isEnabled()) return\n this.connectSlot(slot)\n }, delay)\n }\n\n private teardownSlot(slot: SessionSlot): void {\n if (slot.retryTimer !== null) {\n BgTimer.clearTimeout(slot.retryTimer)\n slot.retryTimer = null\n }\n // Flush the in-flight utterance so a mid-update caption commits rather\n // than dangling (mirrors the cloud provider's close()).\n try {\n slot.assembler.flush()\n } catch {\n /* best-effort */\n }\n slot.client?.close()\n slot.client = null\n slot.open = false\n }\n\n private teardownAllSlots(): void {\n for (const slot of this.slots.values()) this.teardownSlot(slot)\n this.slots.clear()\n }\n\n // ===========================================================================\n // Audio feed\n // ===========================================================================\n\n private syncMicListener(): void {\n const wantMic = this.slots.size > 0\n if (wantMic && !this.micSub) {\n this.micSub = BluetoothSdk.addListener(\"mic_pcm\", (event: {pcm: ArrayBuffer}) => {\n if (!event?.pcm) return\n for (const slot of this.slots.values()) {\n slot.client?.sendAudio(event.pcm)\n }\n })\n } else if (!wantMic && this.micSub) {\n this.micSub.remove()\n this.micSub = null\n }\n }\n\n // ===========================================================================\n // Transcript delivery\n // ===========================================================================\n\n /**\n * Map an assembled utterance to the cloud wire shapes. Language resolution\n * mirrors cloud result.ts: a specific-language subscription's code WINS over\n * the provider-detected code (miniapp handlers key on the exact stream, and\n * Soniox reports bare ISO codes while subscriptions carry BCP-47 tags).\n */\n private deliver(\n slot: SessionSlot,\n t: {\n text: string\n isFinal: boolean\n utteranceId?: string\n speakerId?: string\n language?: string\n originalText?: string\n sourceLanguage?: string\n startMs?: number\n endMs?: number\n },\n ): void {\n const timestamp = Date.now()\n const startMs = t.startMs ?? 0\n const endMs = t.endMs ?? 0\n const durationMs = t.startMs != null && t.endMs != null ? t.endMs - t.startMs : undefined\n\n if (slot.sub.kind === \"translation\") {\n const source = slot.sub.source\n const resolved =\n source.mode === \"specific\"\n ? {language: source.code, detected: false}\n : {language: t.sourceLanguage ?? \"auto\", detected: true}\n const data: TranslationData = {\n userId: \"local\",\n subscription: slot.sub,\n text: t.text,\n originalText: t.originalText,\n isFinal: t.isFinal,\n utteranceId: t.utteranceId,\n speakerId: t.speakerId,\n startMs,\n endMs,\n durationMs,\n source: {language: resolved.language, detected: resolved.detected},\n target: {language: slot.sub.target},\n provider: \"soniox-direct\",\n timestamp,\n }\n for (const cb of this.translationListeners) cb(data)\n return\n }\n\n const source = slot.sub.language\n const resolved =\n source.mode === \"specific\"\n ? {language: source.code, detected: false}\n : {language: t.language ?? \"auto\", detected: true}\n const data: TranscriptionData = {\n userId: \"local\",\n subscription: slot.sub,\n text: t.text,\n isFinal: t.isFinal,\n utteranceId: t.utteranceId,\n speakerId: t.speakerId,\n startMs,\n endMs,\n durationMs,\n resolvedLanguage: resolved.language,\n languageDetected: resolved.detected,\n tokens: [],\n provider: \"soniox-direct\",\n timestamp,\n }\n for (const cb of this.transcriptListeners) cb(data)\n }\n\n // ===========================================================================\n // Status\n // ===========================================================================\n\n private computeStatus(): SonioxDirectStatus {\n const enabled = this.isEnabled()\n if (!enabled) return {enabled: false, state: \"inactive\"}\n if (this.slots.size === 0) return {enabled: true, state: \"inactive\"}\n\n let anyOpen = false\n let errorKind: SonioxDirectErrorKind | undefined\n let anyFailed = false\n for (const slot of this.slots.values()) {\n if (slot.open) anyOpen = true\n if (slot.failed) anyFailed = true\n // invalid_key > quota > unreachable, so the UI surfaces the actionable one.\n if (slot.errorKind === \"invalid_key\" || (slot.errorKind && errorKind !== \"invalid_key\")) {\n errorKind = errorKind === \"quota\" && slot.errorKind === \"unreachable\" ? errorKind : slot.errorKind\n }\n }\n if (anyOpen) return {enabled: true, state: \"active\"}\n if (anyFailed) return {enabled: true, state: \"error\", errorKind, lastErrorAt: this.lastErrorAt}\n return {enabled: true, state: \"connecting\"}\n }\n\n private publishStatus(): void {\n const next = this.computeStatus()\n const prev = this.lastStatus\n const changed = next.enabled !== prev.enabled || next.state !== prev.state || next.errorKind !== prev.errorKind\n this.lastStatus = next\n if (!changed) return\n console.log(`${LOG_TAG}: status -> ${next.state}${next.errorKind ? ` (${next.errorKind})` : \"\"}`)\n localSttFallbackCoordinator.onSonioxDirectStateChange(this.isEnabled(), this.isHealthy())\n for (const cb of this.statusListeners) cb(next)\n }\n}\n\nconst sonioxDirectService = SonioxDirectService.getInstance()\nexport default sonioxDirectService\n"]}