@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,366 @@
1
+ import BluetoothSdk from "@glassly/bluetooth-sdk";
2
+ import * as RNFS from "@dr.pogodin/react-native-fs";
3
+ /**
4
+ * Offline TTS via Sherpa-ONNX Supertonic 3.
5
+ *
6
+ * Supertonic 3 ships as a single multilingual model bundle (123 MB int8)
7
+ * with 31 languages and 10 preset voice styles inside one voice.bin.
8
+ *
9
+ * Speaker IDs are alphabetical by source filename, so:
10
+ * sid 0 = F1, 1 = F2, 2 = F3, 3 = F4, 4 = F5,
11
+ * sid 5 = M1, 6 = M2, 7 = M3, 8 = M4, 9 = M5.
12
+ *
13
+ * Default voice is F1 (sid 0) — a female "professional broadcast" voice.
14
+ *
15
+ * Per-call language selection is done by the native layer based on the
16
+ * languageCode set via setTtsModelDetails (Supertonic accepts e.g. "en",
17
+ * "ko", "ja", "fr", "de", "es", … — 31 codes total).
18
+ */
19
+ const SUPERTONIC_FILE = "sherpa-onnx-supertonic-3-tts-int8-2026-05-11";
20
+ const SUPERTONIC_SIZE = 128974848; // 123 MB
21
+ const SUPERTONIC_SHA256 = "82fa96f91c4ef8abaae3a14a3f4153facf88bed821d1f7331cec2700f432c427";
22
+ // Speaker IDs for Supertonic 3.
23
+ export const SUPERTONIC_VOICES = {
24
+ F1: 0,
25
+ F2: 1,
26
+ F3: 2,
27
+ F4: 3,
28
+ F5: 4,
29
+ M1: 5,
30
+ M2: 6,
31
+ M3: 7,
32
+ M4: 8,
33
+ M5: 9,
34
+ };
35
+ export const DEFAULT_SUPERTONIC_VOICE_SID = SUPERTONIC_VOICES.F1;
36
+ /** Languages Supertonic 3 supports (BCP-47-ish tags surfaced to the UI). */
37
+ const LANGUAGE_DISPLAY = {
38
+ en: { displayName: "English", bcp47: "en-US" },
39
+ fr: { displayName: "Français", bcp47: "fr-FR" },
40
+ de: { displayName: "Deutsch", bcp47: "de-DE" },
41
+ es: { displayName: "Español", bcp47: "es-ES" },
42
+ it: { displayName: "Italiano", bcp47: "it-IT" },
43
+ pt: { displayName: "Português", bcp47: "pt-PT" },
44
+ nl: { displayName: "Nederlands", bcp47: "nl-NL" },
45
+ pl: { displayName: "Polski", bcp47: "pl-PL" },
46
+ ru: { displayName: "Русский", bcp47: "ru-RU" },
47
+ uk: { displayName: "Українська", bcp47: "uk-UA" },
48
+ ko: { displayName: "한국어", bcp47: "ko-KR" },
49
+ ja: { displayName: "日本語", bcp47: "ja-JP" },
50
+ ar: { displayName: "العربية", bcp47: "ar-SA" },
51
+ hi: { displayName: "हिन्दी", bcp47: "hi-IN" },
52
+ id: { displayName: "Bahasa Indonesia", bcp47: "id-ID" },
53
+ vi: { displayName: "Tiếng Việt", bcp47: "vi-VN" },
54
+ tr: { displayName: "Türkçe", bcp47: "tr-TR" },
55
+ el: { displayName: "Ελληνικά", bcp47: "el-GR" },
56
+ bg: { displayName: "Български", bcp47: "bg-BG" },
57
+ cs: { displayName: "Čeština", bcp47: "cs-CZ" },
58
+ da: { displayName: "Dansk", bcp47: "da-DK" },
59
+ et: { displayName: "Eesti", bcp47: "et-EE" },
60
+ fi: { displayName: "Suomi", bcp47: "fi-FI" },
61
+ hr: { displayName: "Hrvatski", bcp47: "hr-HR" },
62
+ hu: { displayName: "Magyar", bcp47: "hu-HU" },
63
+ lt: { displayName: "Lietuvių", bcp47: "lt-LT" },
64
+ lv: { displayName: "Latviešu", bcp47: "lv-LV" },
65
+ ro: { displayName: "Română", bcp47: "ro-RO" },
66
+ sk: { displayName: "Slovenčina", bcp47: "sk-SK" },
67
+ sl: { displayName: "Slovenščina", bcp47: "sl-SI" },
68
+ sv: { displayName: "Svenska", bcp47: "sv-SE" },
69
+ };
70
+ const DEFAULT_LANGUAGE = "en";
71
+ /** On-disk folder name for the single Supertonic install. */
72
+ const MODEL_FOLDER = "supertonic";
73
+ /** Files inside the Supertonic 3 archive — must match TTSTools native validators. */
74
+ const SUPERTONIC_REQUIRED_FILES = [
75
+ "duration_predictor.int8.onnx",
76
+ "text_encoder.int8.onnx",
77
+ "vector_estimator.int8.onnx",
78
+ "vocoder.int8.onnx",
79
+ "tts.json",
80
+ "unicode_indexer.bin",
81
+ "voice.bin",
82
+ ];
83
+ function buildLanguageRegistry() {
84
+ const out = {};
85
+ for (const [code, meta] of Object.entries(LANGUAGE_DISPLAY)) {
86
+ out[code] = {
87
+ code,
88
+ displayName: meta.displayName,
89
+ fileName: SUPERTONIC_FILE,
90
+ size: SUPERTONIC_SIZE,
91
+ type: "supertonic",
92
+ requiredFiles: SUPERTONIC_REQUIRED_FILES,
93
+ languageCode: meta.bcp47,
94
+ };
95
+ }
96
+ return out;
97
+ }
98
+ class TTSModelManager {
99
+ static instance;
100
+ downloadJobId;
101
+ currentLanguage = DEFAULT_LANGUAGE;
102
+ // Sherpa-onnx releases page hosts the tarball.
103
+ modelBaseUrl = "https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/";
104
+ // Languages all map onto the same on-disk Supertonic install. Selecting a
105
+ // language tells the native layer which lang to pass to the model — no
106
+ // separate downloads per language.
107
+ languages = buildLanguageRegistry();
108
+ constructor() { }
109
+ static getInstance() {
110
+ if (!TTSModelManager.instance) {
111
+ TTSModelManager.instance = new TTSModelManager();
112
+ }
113
+ return TTSModelManager.instance;
114
+ }
115
+ /** Expected SHA-256 of the Supertonic 3 tarball, for downstream integrity checks. */
116
+ getExpectedSha256() {
117
+ return SUPERTONIC_SHA256;
118
+ }
119
+ async getCurrentLanguageFromPreferences() {
120
+ try {
121
+ const path = await BluetoothSdk.getTtsModelPath();
122
+ if (!path || path.length === 0) {
123
+ return "";
124
+ }
125
+ if (!(await this.isModelAvailable())) {
126
+ return "";
127
+ }
128
+ // The native side persists the BCP-47 tag (e.g. "fr-FR") that was passed
129
+ // to setTtsModelDetails. Map it back to our registry key.
130
+ const bcp47 = await BluetoothSdk.getTtsModelLanguage();
131
+ const primary = bcp47.split("-")[0].toLowerCase();
132
+ const code = this.languages[primary] ? primary : "";
133
+ if (code) {
134
+ this.currentLanguage = code;
135
+ }
136
+ return code;
137
+ }
138
+ catch (error) {
139
+ console.error("Error getting current TTS language from preferences:", error);
140
+ return "";
141
+ }
142
+ }
143
+ getCurrentLanguage() {
144
+ return this.currentLanguage;
145
+ }
146
+ setCurrentLanguage(code) {
147
+ if (this.languages[code]) {
148
+ this.currentLanguage = code;
149
+ }
150
+ }
151
+ getAvailableLanguages() {
152
+ return Object.values(this.languages);
153
+ }
154
+ getBcp47ForLanguage(code) {
155
+ const id = code || this.currentLanguage;
156
+ return this.languages[id]?.languageCode ?? "en-US";
157
+ }
158
+ getModelDirectory() {
159
+ return `${RNFS.DocumentDirectoryPath}/tts_models`;
160
+ }
161
+ /** All languages share the same on-disk Supertonic install. */
162
+ getModelPath(_code) {
163
+ return `${this.getModelDirectory()}/${MODEL_FOLDER}`;
164
+ }
165
+ /** Last path segment is "supertonic" (the on-disk install folder). */
166
+ getLanguageFromPath(path) {
167
+ return path.split("/").pop() || "";
168
+ }
169
+ async isModelAvailable(code) {
170
+ try {
171
+ const language = this.languages[code || this.currentLanguage];
172
+ if (!language)
173
+ return false;
174
+ const modelPath = this.getModelPath();
175
+ for (const file of language.requiredFiles) {
176
+ const exists = await RNFS.exists(`${modelPath}/${file}`);
177
+ if (!exists) {
178
+ console.log(`Missing required TTS file: ${file} at ${modelPath}`);
179
+ return false;
180
+ }
181
+ }
182
+ return await BluetoothSdk.validateTtsModel(modelPath);
183
+ }
184
+ catch (error) {
185
+ console.error("Error checking TTS model availability:", error);
186
+ return false;
187
+ }
188
+ }
189
+ async getLanguageInfo(code) {
190
+ const id = code || this.currentLanguage;
191
+ const language = this.languages[id];
192
+ if (!language) {
193
+ throw new Error(`TTS language ${id} not found`);
194
+ }
195
+ const downloaded = await this.isModelAvailable(id);
196
+ const path = downloaded ? this.getModelPath() : undefined;
197
+ return {
198
+ code: id,
199
+ displayName: language.displayName,
200
+ size: language.size,
201
+ language: language.languageCode,
202
+ downloaded,
203
+ path,
204
+ type: language.type,
205
+ };
206
+ }
207
+ async getAllLanguageInfo() {
208
+ const infos = [];
209
+ for (const code of Object.keys(this.languages)) {
210
+ infos.push(await this.getLanguageInfo(code));
211
+ }
212
+ return infos;
213
+ }
214
+ async downloadModel(code, onProgress, onExtractionProgress) {
215
+ const id = code || this.currentLanguage;
216
+ const language = this.languages[id];
217
+ if (!language) {
218
+ throw new Error(`TTS language ${id} not found`);
219
+ }
220
+ // All languages share the same archive — re-downloading is a no-op if
221
+ // the on-disk model is already present and valid.
222
+ if (await this.isModelAvailable(id)) {
223
+ onExtractionProgress?.({ percentage: 100 });
224
+ // Make sure the native layer has the latest language code.
225
+ await this.setNativeModelPath(this.getModelPath(), language.languageCode);
226
+ this.currentLanguage = id;
227
+ return;
228
+ }
229
+ const modelUrl = `${this.modelBaseUrl}${SUPERTONIC_FILE}.tar.bz2`;
230
+ const tempPath = `${RNFS.TemporaryDirectoryPath}/${SUPERTONIC_FILE}.tar.bz2`;
231
+ const modelDir = this.getModelDirectory();
232
+ const finalPath = this.getModelPath();
233
+ try {
234
+ await RNFS.mkdir(modelDir, { NSURLIsExcludedFromBackupKey: true });
235
+ const result = RNFS.downloadFile({
236
+ fromUrl: modelUrl,
237
+ toFile: tempPath,
238
+ progress: (res) => {
239
+ const percentage = Math.round((res.bytesWritten / res.contentLength) * 100);
240
+ onProgress?.({
241
+ jobId: res.jobId,
242
+ bytesWritten: res.bytesWritten,
243
+ contentLength: res.contentLength,
244
+ percentage,
245
+ });
246
+ },
247
+ progressDivider: 10,
248
+ connectionTimeout: 30000,
249
+ readTimeout: 30000,
250
+ });
251
+ this.downloadJobId = result.jobId;
252
+ const downloadResult = await result.promise;
253
+ if (downloadResult.statusCode !== 200) {
254
+ throw new Error(`TTS model download failed with status code: ${downloadResult.statusCode}`);
255
+ }
256
+ const subscription = BluetoothSdk.addListener("extraction_progress", (event) => {
257
+ onExtractionProgress?.({ percentage: event.percentage });
258
+ });
259
+ let extractionResult = false;
260
+ try {
261
+ extractionResult = await BluetoothSdk.extractTarBz2(tempPath, finalPath);
262
+ }
263
+ finally {
264
+ subscription.remove();
265
+ }
266
+ if (!extractionResult) {
267
+ throw new Error("Native TTS model extraction returned failure status");
268
+ }
269
+ onExtractionProgress?.({ percentage: 100 });
270
+ await RNFS.unlink(tempPath);
271
+ await this.setNativeModelPath(finalPath, language.languageCode);
272
+ this.currentLanguage = id;
273
+ }
274
+ catch (error) {
275
+ // Best-effort cleanup; never let it mask the original error.
276
+ try {
277
+ if (await RNFS.exists(tempPath))
278
+ await RNFS.unlink(tempPath);
279
+ }
280
+ catch (cleanupError) {
281
+ console.warn("TTSModelManager: temp cleanup failed:", cleanupError);
282
+ }
283
+ try {
284
+ if (await RNFS.exists(finalPath))
285
+ await RNFS.unlink(finalPath);
286
+ }
287
+ catch (cleanupError) {
288
+ console.warn("TTSModelManager: final cleanup failed:", cleanupError);
289
+ }
290
+ throw error;
291
+ }
292
+ }
293
+ async cancelDownload() {
294
+ if (this.downloadJobId !== undefined) {
295
+ await RNFS.stopDownload(this.downloadJobId);
296
+ this.downloadJobId = undefined;
297
+ }
298
+ }
299
+ async deleteModel(_code) {
300
+ const modelPath = this.getModelPath();
301
+ if (await RNFS.exists(modelPath)) {
302
+ await RNFS.unlink(modelPath);
303
+ }
304
+ }
305
+ async activateLanguage(code) {
306
+ const language = this.languages[code];
307
+ if (!language) {
308
+ throw new Error(`TTS language ${code} not found`);
309
+ }
310
+ const isAvailable = await this.isModelAvailable(code);
311
+ if (!isAvailable) {
312
+ throw new Error(`TTS language ${code} model is not downloaded`);
313
+ }
314
+ this.currentLanguage = code;
315
+ await this.setNativeModelPath(this.getModelPath(), language.languageCode);
316
+ }
317
+ async synthesizeToFile(text, options = {}) {
318
+ const id = options.languageCode || this.currentLanguage;
319
+ const language = this.languages[id];
320
+ if (!language) {
321
+ throw new Error(`TTS language ${id} not found`);
322
+ }
323
+ if (!(await this.isModelAvailable(id))) {
324
+ throw new Error(`TTS model is not downloaded`);
325
+ }
326
+ // Make sure the native layer is synced to this language before generating;
327
+ // Supertonic reads the BCP-47 tag from prefs when synthesising.
328
+ if (id !== this.currentLanguage) {
329
+ await this.activateLanguage(id);
330
+ }
331
+ const outputDir = RNFS.CachesDirectoryPath || RNFS.TemporaryDirectoryPath;
332
+ const safeId = `${Date.now()}_${Math.random().toString(36).slice(2)}`;
333
+ const outputPath = `${outputDir}/glassly_tts_${safeId}.wav`;
334
+ const ok = await BluetoothSdk.generateTtsAudio(text, this.getModelPath(), outputPath, options.speakerId ?? DEFAULT_SUPERTONIC_VOICE_SID, options.speed ?? 1.0);
335
+ if (!ok) {
336
+ throw new Error("Offline TTS synthesis failed");
337
+ }
338
+ return {
339
+ audioUrl: `file://${outputPath}`,
340
+ filePath: outputPath,
341
+ cleanup: async () => {
342
+ if (await RNFS.exists(outputPath)) {
343
+ await RNFS.unlink(outputPath);
344
+ }
345
+ },
346
+ };
347
+ }
348
+ async setNativeModelPath(path, languageCode) {
349
+ await BluetoothSdk.setTtsModelDetails(path, languageCode);
350
+ }
351
+ formatBytes(bytes) {
352
+ return TTSModelManager.formatBytes(bytes);
353
+ }
354
+ static formatBytes(bytes) {
355
+ if (bytes === 0)
356
+ return "0 Bytes";
357
+ const k = 1024;
358
+ const sizes = ["Bytes", "KB", "MB", "GB"];
359
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
360
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + " " + sizes[i];
361
+ }
362
+ }
363
+ const instance = TTSModelManager.getInstance();
364
+ export { TTSModelManager };
365
+ export default instance;
366
+ //# sourceMappingURL=TTSModelManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TTSModelManager.js","sourceRoot":"","sources":["../../src/services/TTSModelManager.ts"],"names":[],"mappings":"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","sourcesContent":["import BluetoothSdk from \"@glassly/bluetooth-sdk\"\nimport * as RNFS from \"@dr.pogodin/react-native-fs\"\n\n/**\n * Offline TTS via Sherpa-ONNX Supertonic 3.\n *\n * Supertonic 3 ships as a single multilingual model bundle (123 MB int8)\n * with 31 languages and 10 preset voice styles inside one voice.bin.\n *\n * Speaker IDs are alphabetical by source filename, so:\n * sid 0 = F1, 1 = F2, 2 = F3, 3 = F4, 4 = F5,\n * sid 5 = M1, 6 = M2, 7 = M3, 8 = M4, 9 = M5.\n *\n * Default voice is F1 (sid 0) — a female \"professional broadcast\" voice.\n *\n * Per-call language selection is done by the native layer based on the\n * languageCode set via setTtsModelDetails (Supertonic accepts e.g. \"en\",\n * \"ko\", \"ja\", \"fr\", \"de\", \"es\", … — 31 codes total).\n */\n\nconst SUPERTONIC_FILE = \"sherpa-onnx-supertonic-3-tts-int8-2026-05-11\"\nconst SUPERTONIC_SIZE = 128974848 // 123 MB\nconst SUPERTONIC_SHA256 = \"82fa96f91c4ef8abaae3a14a3f4153facf88bed821d1f7331cec2700f432c427\"\n\n// Speaker IDs for Supertonic 3.\nexport const SUPERTONIC_VOICES = {\n F1: 0,\n F2: 1,\n F3: 2,\n F4: 3,\n F5: 4,\n M1: 5,\n M2: 6,\n M3: 7,\n M4: 8,\n M5: 9,\n} as const\n\nexport const DEFAULT_SUPERTONIC_VOICE_SID = SUPERTONIC_VOICES.F1\n\nexport interface TTSLanguageInfo {\n code: string\n displayName: string\n size: number\n language: string\n downloaded: boolean\n path?: string\n type: \"supertonic\"\n}\n\nexport interface TTSDownloadProgress {\n jobId: number\n bytesWritten: number\n contentLength: number\n percentage: number\n}\n\nexport interface TTSExtractionProgress {\n percentage: number\n currentFile?: string\n}\n\nexport interface TTSLanguageConfig {\n code: string\n displayName: string\n fileName: string\n size: number\n type: \"supertonic\"\n requiredFiles: string[]\n languageCode: string\n}\n\nexport interface TTSGenerateOptions {\n /** BCP-47 language tag, e.g. \"en-US\", \"fr-FR\". Maps to Supertonic 2-letter code. */\n languageCode?: string\n /** Speaker ID (0..9). Defaults to F1 (sid 0). */\n speakerId?: number\n /** Speech rate, clamped 0.5..2.0 on native side. */\n speed?: number\n}\n\nexport interface TTSGenerateResult {\n audioUrl: string\n filePath: string\n cleanup: () => Promise<void>\n}\n\n/** Languages Supertonic 3 supports (BCP-47-ish tags surfaced to the UI). */\nconst LANGUAGE_DISPLAY: Record<string, {displayName: string; bcp47: string}> = {\n en: {displayName: \"English\", bcp47: \"en-US\"},\n fr: {displayName: \"Français\", bcp47: \"fr-FR\"},\n de: {displayName: \"Deutsch\", bcp47: \"de-DE\"},\n es: {displayName: \"Español\", bcp47: \"es-ES\"},\n it: {displayName: \"Italiano\", bcp47: \"it-IT\"},\n pt: {displayName: \"Português\", bcp47: \"pt-PT\"},\n nl: {displayName: \"Nederlands\", bcp47: \"nl-NL\"},\n pl: {displayName: \"Polski\", bcp47: \"pl-PL\"},\n ru: {displayName: \"Русский\", bcp47: \"ru-RU\"},\n uk: {displayName: \"Українська\", bcp47: \"uk-UA\"},\n ko: {displayName: \"한국어\", bcp47: \"ko-KR\"},\n ja: {displayName: \"日本語\", bcp47: \"ja-JP\"},\n ar: {displayName: \"العربية\", bcp47: \"ar-SA\"},\n hi: {displayName: \"हिन्दी\", bcp47: \"hi-IN\"},\n id: {displayName: \"Bahasa Indonesia\", bcp47: \"id-ID\"},\n vi: {displayName: \"Tiếng Việt\", bcp47: \"vi-VN\"},\n tr: {displayName: \"Türkçe\", bcp47: \"tr-TR\"},\n el: {displayName: \"Ελληνικά\", bcp47: \"el-GR\"},\n bg: {displayName: \"Български\", bcp47: \"bg-BG\"},\n cs: {displayName: \"Čeština\", bcp47: \"cs-CZ\"},\n da: {displayName: \"Dansk\", bcp47: \"da-DK\"},\n et: {displayName: \"Eesti\", bcp47: \"et-EE\"},\n fi: {displayName: \"Suomi\", bcp47: \"fi-FI\"},\n hr: {displayName: \"Hrvatski\", bcp47: \"hr-HR\"},\n hu: {displayName: \"Magyar\", bcp47: \"hu-HU\"},\n lt: {displayName: \"Lietuvių\", bcp47: \"lt-LT\"},\n lv: {displayName: \"Latviešu\", bcp47: \"lv-LV\"},\n ro: {displayName: \"Română\", bcp47: \"ro-RO\"},\n sk: {displayName: \"Slovenčina\", bcp47: \"sk-SK\"},\n sl: {displayName: \"Slovenščina\", bcp47: \"sl-SI\"},\n sv: {displayName: \"Svenska\", bcp47: \"sv-SE\"},\n}\n\nconst DEFAULT_LANGUAGE = \"en\"\n\n/** On-disk folder name for the single Supertonic install. */\nconst MODEL_FOLDER = \"supertonic\"\n\n/** Files inside the Supertonic 3 archive — must match TTSTools native validators. */\nconst SUPERTONIC_REQUIRED_FILES = [\n \"duration_predictor.int8.onnx\",\n \"text_encoder.int8.onnx\",\n \"vector_estimator.int8.onnx\",\n \"vocoder.int8.onnx\",\n \"tts.json\",\n \"unicode_indexer.bin\",\n \"voice.bin\",\n]\n\nfunction buildLanguageRegistry(): Record<string, TTSLanguageConfig> {\n const out: Record<string, TTSLanguageConfig> = {}\n for (const [code, meta] of Object.entries(LANGUAGE_DISPLAY)) {\n out[code] = {\n code,\n displayName: meta.displayName,\n fileName: SUPERTONIC_FILE,\n size: SUPERTONIC_SIZE,\n type: \"supertonic\",\n requiredFiles: SUPERTONIC_REQUIRED_FILES,\n languageCode: meta.bcp47,\n }\n }\n return out\n}\n\nclass TTSModelManager {\n private static instance: TTSModelManager\n private downloadJobId?: number\n private currentLanguage = DEFAULT_LANGUAGE\n // Sherpa-onnx releases page hosts the tarball.\n private modelBaseUrl = \"https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/\"\n\n // Languages all map onto the same on-disk Supertonic install. Selecting a\n // language tells the native layer which lang to pass to the model — no\n // separate downloads per language.\n private languages: Record<string, TTSLanguageConfig> = buildLanguageRegistry()\n\n private constructor() {}\n\n static getInstance(): TTSModelManager {\n if (!TTSModelManager.instance) {\n TTSModelManager.instance = new TTSModelManager()\n }\n return TTSModelManager.instance\n }\n\n /** Expected SHA-256 of the Supertonic 3 tarball, for downstream integrity checks. */\n getExpectedSha256(): string {\n return SUPERTONIC_SHA256\n }\n\n async getCurrentLanguageFromPreferences(): Promise<string> {\n try {\n const path = await BluetoothSdk.getTtsModelPath()\n if (!path || path.length === 0) {\n return \"\"\n }\n if (!(await this.isModelAvailable())) {\n return \"\"\n }\n // The native side persists the BCP-47 tag (e.g. \"fr-FR\") that was passed\n // to setTtsModelDetails. Map it back to our registry key.\n const bcp47 = await BluetoothSdk.getTtsModelLanguage()\n const primary = bcp47.split(\"-\")[0].toLowerCase()\n const code = this.languages[primary] ? primary : \"\"\n if (code) {\n this.currentLanguage = code\n }\n return code\n } catch (error) {\n console.error(\"Error getting current TTS language from preferences:\", error)\n return \"\"\n }\n }\n\n getCurrentLanguage(): string {\n return this.currentLanguage\n }\n\n setCurrentLanguage(code: string): void {\n if (this.languages[code]) {\n this.currentLanguage = code\n }\n }\n\n getAvailableLanguages(): TTSLanguageConfig[] {\n return Object.values(this.languages)\n }\n\n getBcp47ForLanguage(code?: string): string {\n const id = code || this.currentLanguage\n return this.languages[id]?.languageCode ?? \"en-US\"\n }\n\n getModelDirectory(): string {\n return `${RNFS.DocumentDirectoryPath}/tts_models`\n }\n\n /** All languages share the same on-disk Supertonic install. */\n getModelPath(_code?: string): string {\n return `${this.getModelDirectory()}/${MODEL_FOLDER}`\n }\n\n /** Last path segment is \"supertonic\" (the on-disk install folder). */\n getLanguageFromPath(path: string): string {\n return path.split(\"/\").pop() || \"\"\n }\n\n async isModelAvailable(code?: string): Promise<boolean> {\n try {\n const language = this.languages[code || this.currentLanguage]\n if (!language) return false\n\n const modelPath = this.getModelPath()\n for (const file of language.requiredFiles) {\n const exists = await RNFS.exists(`${modelPath}/${file}`)\n if (!exists) {\n console.log(`Missing required TTS file: ${file} at ${modelPath}`)\n return false\n }\n }\n\n return await BluetoothSdk.validateTtsModel(modelPath)\n } catch (error) {\n console.error(\"Error checking TTS model availability:\", error)\n return false\n }\n }\n\n async getLanguageInfo(code?: string): Promise<TTSLanguageInfo> {\n const id = code || this.currentLanguage\n const language = this.languages[id]\n if (!language) {\n throw new Error(`TTS language ${id} not found`)\n }\n\n const downloaded = await this.isModelAvailable(id)\n const path = downloaded ? this.getModelPath() : undefined\n\n return {\n code: id,\n displayName: language.displayName,\n size: language.size,\n language: language.languageCode,\n downloaded,\n path,\n type: language.type,\n }\n }\n\n async getAllLanguageInfo(): Promise<TTSLanguageInfo[]> {\n const infos: TTSLanguageInfo[] = []\n for (const code of Object.keys(this.languages)) {\n infos.push(await this.getLanguageInfo(code))\n }\n return infos\n }\n\n async downloadModel(\n code?: string,\n onProgress?: (progress: TTSDownloadProgress) => void,\n onExtractionProgress?: (progress: TTSExtractionProgress) => void,\n ): Promise<void> {\n const id = code || this.currentLanguage\n const language = this.languages[id]\n if (!language) {\n throw new Error(`TTS language ${id} not found`)\n }\n\n // All languages share the same archive — re-downloading is a no-op if\n // the on-disk model is already present and valid.\n if (await this.isModelAvailable(id)) {\n onExtractionProgress?.({percentage: 100})\n // Make sure the native layer has the latest language code.\n await this.setNativeModelPath(this.getModelPath(), language.languageCode)\n this.currentLanguage = id\n return\n }\n\n const modelUrl = `${this.modelBaseUrl}${SUPERTONIC_FILE}.tar.bz2`\n const tempPath = `${RNFS.TemporaryDirectoryPath}/${SUPERTONIC_FILE}.tar.bz2`\n const modelDir = this.getModelDirectory()\n const finalPath = this.getModelPath()\n\n try {\n await RNFS.mkdir(modelDir, {NSURLIsExcludedFromBackupKey: true})\n\n const result = RNFS.downloadFile({\n fromUrl: modelUrl,\n toFile: tempPath,\n progress: (res: RNFS.DownloadProgressCallbackResultT) => {\n const percentage = Math.round((res.bytesWritten / res.contentLength) * 100)\n onProgress?.({\n jobId: res.jobId,\n bytesWritten: res.bytesWritten,\n contentLength: res.contentLength,\n percentage,\n })\n },\n progressDivider: 10,\n connectionTimeout: 30000,\n readTimeout: 30000,\n })\n this.downloadJobId = result.jobId\n\n const downloadResult = await result.promise\n if (downloadResult.statusCode !== 200) {\n throw new Error(`TTS model download failed with status code: ${downloadResult.statusCode}`)\n }\n\n const subscription = BluetoothSdk.addListener(\"extraction_progress\", (event) => {\n onExtractionProgress?.({percentage: event.percentage})\n })\n\n let extractionResult = false\n try {\n extractionResult = await BluetoothSdk.extractTarBz2(tempPath, finalPath)\n } finally {\n subscription.remove()\n }\n\n if (!extractionResult) {\n throw new Error(\"Native TTS model extraction returned failure status\")\n }\n onExtractionProgress?.({percentage: 100})\n\n await RNFS.unlink(tempPath)\n\n await this.setNativeModelPath(finalPath, language.languageCode)\n this.currentLanguage = id\n } catch (error) {\n // Best-effort cleanup; never let it mask the original error.\n try {\n if (await RNFS.exists(tempPath)) await RNFS.unlink(tempPath)\n } catch (cleanupError) {\n console.warn(\"TTSModelManager: temp cleanup failed:\", cleanupError)\n }\n try {\n if (await RNFS.exists(finalPath)) await RNFS.unlink(finalPath)\n } catch (cleanupError) {\n console.warn(\"TTSModelManager: final cleanup failed:\", cleanupError)\n }\n throw error\n }\n }\n\n async cancelDownload(): Promise<void> {\n if (this.downloadJobId !== undefined) {\n await RNFS.stopDownload(this.downloadJobId)\n this.downloadJobId = undefined\n }\n }\n\n async deleteModel(_code?: string): Promise<void> {\n const modelPath = this.getModelPath()\n if (await RNFS.exists(modelPath)) {\n await RNFS.unlink(modelPath)\n }\n }\n\n async activateLanguage(code: string): Promise<void> {\n const language = this.languages[code]\n if (!language) {\n throw new Error(`TTS language ${code} not found`)\n }\n\n const isAvailable = await this.isModelAvailable(code)\n if (!isAvailable) {\n throw new Error(`TTS language ${code} model is not downloaded`)\n }\n\n this.currentLanguage = code\n await this.setNativeModelPath(this.getModelPath(), language.languageCode)\n }\n\n async synthesizeToFile(text: string, options: TTSGenerateOptions = {}): Promise<TTSGenerateResult> {\n const id = options.languageCode || this.currentLanguage\n const language = this.languages[id]\n if (!language) {\n throw new Error(`TTS language ${id} not found`)\n }\n\n if (!(await this.isModelAvailable(id))) {\n throw new Error(`TTS model is not downloaded`)\n }\n\n // Make sure the native layer is synced to this language before generating;\n // Supertonic reads the BCP-47 tag from prefs when synthesising.\n if (id !== this.currentLanguage) {\n await this.activateLanguage(id)\n }\n\n const outputDir = RNFS.CachesDirectoryPath || RNFS.TemporaryDirectoryPath\n const safeId = `${Date.now()}_${Math.random().toString(36).slice(2)}`\n const outputPath = `${outputDir}/glassly_tts_${safeId}.wav`\n const ok = await BluetoothSdk.generateTtsAudio(\n text,\n this.getModelPath(),\n outputPath,\n options.speakerId ?? DEFAULT_SUPERTONIC_VOICE_SID,\n options.speed ?? 1.0,\n )\n if (!ok) {\n throw new Error(\"Offline TTS synthesis failed\")\n }\n\n return {\n audioUrl: `file://${outputPath}`,\n filePath: outputPath,\n cleanup: async () => {\n if (await RNFS.exists(outputPath)) {\n await RNFS.unlink(outputPath)\n }\n },\n }\n }\n\n private async setNativeModelPath(path: string, languageCode: string): Promise<void> {\n await BluetoothSdk.setTtsModelDetails(path, languageCode)\n }\n\n formatBytes(bytes: number): string {\n return TTSModelManager.formatBytes(bytes)\n }\n\n static formatBytes(bytes: number): string {\n if (bytes === 0) return \"0 Bytes\"\n const k = 1024\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"]\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + \" \" + sizes[i]\n }\n}\n\nconst instance = TTSModelManager.getInstance()\nexport {TTSModelManager}\nexport default instance\n"]}
@@ -0,0 +1,22 @@
1
+ export interface TranscriptionRouteSummary {
2
+ hasCloudSubscriber: boolean;
3
+ hasForceLocalSubscriber: boolean;
4
+ }
5
+ export interface TranscriptionSubscriberRoutes {
6
+ cloud: boolean;
7
+ forceLocal: boolean;
8
+ }
9
+ export type TranscriptionDeliveryRoute = "default" | "forceLocal" | "all";
10
+ export declare function summarizeTranscriptionRoutes<T>(subscribers: Iterable<T>, routesFor: (subscriber: T) => TranscriptionSubscriberRoutes): TranscriptionRouteSummary;
11
+ /**
12
+ * Decide which subscription route(s) a transcript reaches.
13
+ *
14
+ * `source` is who produced the transcript: "cloud" is the PRIMARY provider
15
+ * (the cloud runtime, or Soniox-direct when a user API key is set — both
16
+ * deliver through the default route); "local" is on-device sherpa.
17
+ * `primaryUp` is whether that primary path is currently believed usable
18
+ * (cloud connectivity, or Soniox-direct session health) — when it is down,
19
+ * local transcripts also serve default-route subscribers.
20
+ */
21
+ export declare function transcriptionDeliveryRoute(source: "cloud" | "local", routes: TranscriptionSubscriberRoutes, primaryUp: boolean): TranscriptionDeliveryRoute | null;
22
+ //# sourceMappingURL=TranscriptionRouting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TranscriptionRouting.d.ts","sourceRoot":"","sources":["../../src/services/TranscriptionRouting.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,yBAAyB;IACxC,kBAAkB,EAAE,OAAO,CAAA;IAC3B,uBAAuB,EAAE,OAAO,CAAA;CACjC;AAED,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,OAAO,CAAA;IACd,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,MAAM,0BAA0B,GAAG,SAAS,GAAG,YAAY,GAAG,KAAK,CAAA;AAEzE,wBAAgB,4BAA4B,CAAC,CAAC,EAC5C,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,EACxB,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC,KAAK,6BAA6B,GAC1D,yBAAyB,CAS3B;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,OAAO,GAAG,OAAO,EACzB,MAAM,EAAE,6BAA6B,EACrC,SAAS,EAAE,OAAO,GACjB,0BAA0B,GAAG,IAAI,CAMnC"}
@@ -0,0 +1,34 @@
1
+ export function summarizeTranscriptionRoutes(subscribers, routesFor) {
2
+ let hasCloudSubscriber = false;
3
+ let hasForceLocalSubscriber = false;
4
+ for (const subscriber of subscribers) {
5
+ const routes = routesFor(subscriber);
6
+ if (routes.cloud)
7
+ hasCloudSubscriber = true;
8
+ if (routes.forceLocal)
9
+ hasForceLocalSubscriber = true;
10
+ }
11
+ return { hasCloudSubscriber, hasForceLocalSubscriber };
12
+ }
13
+ /**
14
+ * Decide which subscription route(s) a transcript reaches.
15
+ *
16
+ * `source` is who produced the transcript: "cloud" is the PRIMARY provider
17
+ * (the cloud runtime, or Soniox-direct when a user API key is set — both
18
+ * deliver through the default route); "local" is on-device sherpa.
19
+ * `primaryUp` is whether that primary path is currently believed usable
20
+ * (cloud connectivity, or Soniox-direct session health) — when it is down,
21
+ * local transcripts also serve default-route subscribers.
22
+ */
23
+ export function transcriptionDeliveryRoute(source, routes, primaryUp) {
24
+ if (source === "cloud")
25
+ return routes.cloud ? "default" : null;
26
+ if (primaryUp)
27
+ return routes.forceLocal ? "forceLocal" : null;
28
+ if (routes.cloud && routes.forceLocal)
29
+ return "all";
30
+ if (routes.forceLocal)
31
+ return "forceLocal";
32
+ return routes.cloud ? "default" : null;
33
+ }
34
+ //# sourceMappingURL=TranscriptionRouting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TranscriptionRouting.js","sourceRoot":"","sources":["../../src/services/TranscriptionRouting.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,4BAA4B,CAC1C,WAAwB,EACxB,SAA2D;IAE3D,IAAI,kBAAkB,GAAG,KAAK,CAAA;IAC9B,IAAI,uBAAuB,GAAG,KAAK,CAAA;IACnC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAAA;QACpC,IAAI,MAAM,CAAC,KAAK;YAAE,kBAAkB,GAAG,IAAI,CAAA;QAC3C,IAAI,MAAM,CAAC,UAAU;YAAE,uBAAuB,GAAG,IAAI,CAAA;IACvD,CAAC;IACD,OAAO,EAAC,kBAAkB,EAAE,uBAAuB,EAAC,CAAA;AACtD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,0BAA0B,CACxC,MAAyB,EACzB,MAAqC,EACrC,SAAkB;IAElB,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAA;IAC9D,IAAI,SAAS;QAAE,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAA;IAC7D,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,UAAU;QAAE,OAAO,KAAK,CAAA;IACnD,IAAI,MAAM,CAAC,UAAU;QAAE,OAAO,YAAY,CAAA;IAC1C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAA;AACxC,CAAC","sourcesContent":["export interface TranscriptionRouteSummary {\n hasCloudSubscriber: boolean\n hasForceLocalSubscriber: boolean\n}\n\nexport interface TranscriptionSubscriberRoutes {\n cloud: boolean\n forceLocal: boolean\n}\n\nexport type TranscriptionDeliveryRoute = \"default\" | \"forceLocal\" | \"all\"\n\nexport function summarizeTranscriptionRoutes<T>(\n subscribers: Iterable<T>,\n routesFor: (subscriber: T) => TranscriptionSubscriberRoutes,\n): TranscriptionRouteSummary {\n let hasCloudSubscriber = false\n let hasForceLocalSubscriber = false\n for (const subscriber of subscribers) {\n const routes = routesFor(subscriber)\n if (routes.cloud) hasCloudSubscriber = true\n if (routes.forceLocal) hasForceLocalSubscriber = true\n }\n return {hasCloudSubscriber, hasForceLocalSubscriber}\n}\n\n/**\n * Decide which subscription route(s) a transcript reaches.\n *\n * `source` is who produced the transcript: \"cloud\" is the PRIMARY provider\n * (the cloud runtime, or Soniox-direct when a user API key is set — both\n * deliver through the default route); \"local\" is on-device sherpa.\n * `primaryUp` is whether that primary path is currently believed usable\n * (cloud connectivity, or Soniox-direct session health) — when it is down,\n * local transcripts also serve default-route subscribers.\n */\nexport function transcriptionDeliveryRoute(\n source: \"cloud\" | \"local\",\n routes: TranscriptionSubscriberRoutes,\n primaryUp: boolean,\n): TranscriptionDeliveryRoute | null {\n if (source === \"cloud\") return routes.cloud ? \"default\" : null\n if (primaryUp) return routes.forceLocal ? \"forceLocal\" : null\n if (routes.cloud && routes.forceLocal) return \"all\"\n if (routes.forceLocal) return \"forceLocal\"\n return routes.cloud ? \"default\" : null\n}\n"]}
@@ -0,0 +1,5 @@
1
+ /** Convert display-oriented text into plain words before TTS synthesis. */
2
+ export declare function sanitizeTtsText(text: string): string;
3
+ /** Prepare an already-trimmed sentence list while preserving the exact-text opt-out. */
4
+ export declare function prepareTtsSentences(sentences: string[], enableSanitization?: boolean): string[];
5
+ //# sourceMappingURL=TtsTextSanitizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TtsTextSanitizer.d.ts","sourceRoot":"","sources":["../../src/services/TtsTextSanitizer.ts"],"names":[],"mappings":"AAQA,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAmCpD;AAED,wFAAwF;AACxF,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,kBAAkB,UAAO,GAAG,MAAM,EAAE,CAkB5F"}
@@ -0,0 +1,61 @@
1
+ const HTML_ENTITIES = {
2
+ "&amp;": "&",
3
+ "&lt;": "<",
4
+ "&gt;": ">",
5
+ "&quot;": '"',
6
+ "&#39;": "'",
7
+ };
8
+ /** Convert display-oriented text into plain words before TTS synthesis. */
9
+ export function sanitizeTtsText(text) {
10
+ let speech = text.replace(/&(amp|lt|gt|quot|#39);/gi, (entity) => HTML_ENTITIES[entity.toLowerCase()] ?? entity);
11
+ speech = speech
12
+ .replace(/<say-as\b[^>]*>(.*?)<\/say-as>/gis, "$1")
13
+ .replace(/<\/?[a-z][a-z0-9-]*(?:\s[^<>]*?)?\s*\/?>/gi, " ")
14
+ .replace(/\[([^\]]+)]\([^)]+\)/g, "$1")
15
+ .replace(/`([^`]*)`/g, "$1")
16
+ .replace(/(-?\d+(?:[.,]\d+)?)\s*(?:°\s*f\b|℉)/gi, "$1 degrees Fahrenheit")
17
+ .replace(/(-?\d+(?:[.,]\d+)?)\s*(?:°\s*c\b|℃)/gi, "$1 degrees Celsius")
18
+ .replace(/(-?\d+(?:[.,]\d+)?)\s*°/g, "$1 degrees")
19
+ .replace(/<=/g, " less than or equal to ")
20
+ .replace(/>=/g, " greater than or equal to ")
21
+ .replace(/</g, " less than ")
22
+ .replace(/>/g, " greater than ")
23
+ .replace(/[[\]{}()]/g, " ")
24
+ .replace(/(degrees Fahrenheit)\s+(-?\d+(?:[.,]\d+)? degrees Celsius)\b/gi, "$1 or $2")
25
+ .replace(/(degrees Celsius)\s+(-?\d+(?:[.,]\d+)? degrees Fahrenheit)\b/gi, "$1 or $2")
26
+ .replace(/&/g, " and ")
27
+ .replace(/\+/g, " plus ")
28
+ .replace(/=/g, " equals ")
29
+ .replace(/#/g, " hash ")
30
+ .replace(/@/g, " at ")
31
+ .replace(/%/g, " percent ")
32
+ .replace(/\\/g, " backslash ")
33
+ .replace(/\//g, (slash, offset, source) => {
34
+ const numericSeparator = /\d/.test(source[offset - 1] ?? "") && /\d/.test(source[offset + 1] ?? "");
35
+ return numericSeparator ? slash : " slash ";
36
+ })
37
+ .replace(/\*/g, " star ");
38
+ return speech
39
+ .replace(/\s+([,.;:!?])/g, "$1")
40
+ .replace(/\s+/g, " ")
41
+ .trim();
42
+ }
43
+ /** Prepare an already-trimmed sentence list while preserving the exact-text opt-out. */
44
+ export function prepareTtsSentences(sentences, enableSanitization = true) {
45
+ if (!enableSanitization)
46
+ return sentences;
47
+ const sanitized = sentences.map((sentence) => sanitizeTtsText(sentence)).filter(Boolean);
48
+ return sanitized.map((sentence, index) => {
49
+ const previous = sanitized[index - 1];
50
+ if (!previous)
51
+ return sentence;
52
+ const followsFahrenheit = /degrees Fahrenheit[,.;:!?]?$/i.test(previous);
53
+ const followsCelsius = /degrees Celsius[,.;:!?]?$/i.test(previous);
54
+ const startsWithFahrenheit = /^-?\d+(?:[.,]\d+)? degrees Fahrenheit\b/i.test(sentence);
55
+ const startsWithCelsius = /^-?\d+(?:[.,]\d+)? degrees Celsius\b/i.test(sentence);
56
+ return (followsFahrenheit && startsWithCelsius) || (followsCelsius && startsWithFahrenheit)
57
+ ? `or ${sentence}`
58
+ : sentence;
59
+ });
60
+ }
61
+ //# sourceMappingURL=TtsTextSanitizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TtsTextSanitizer.js","sourceRoot":"","sources":["../../src/services/TtsTextSanitizer.ts"],"names":[],"mappings":"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","sourcesContent":["const HTML_ENTITIES: Record<string, string> = {\n \"&amp;\": \"&\",\n \"&lt;\": \"<\",\n \"&gt;\": \">\",\n \"&quot;\": '\"',\n \"&#39;\": \"'\",\n}\n\n/** Convert display-oriented text into plain words before TTS synthesis. */\nexport function sanitizeTtsText(text: string): string {\n let speech = text.replace(/&(amp|lt|gt|quot|#39);/gi, (entity) => HTML_ENTITIES[entity.toLowerCase()] ?? entity)\n\n speech = speech\n .replace(/<say-as\\b[^>]*>(.*?)<\\/say-as>/gis, \"$1\")\n .replace(/<\\/?[a-z][a-z0-9-]*(?:\\s[^<>]*?)?\\s*\\/?>/gi, \" \")\n .replace(/\\[([^\\]]+)]\\([^)]+\\)/g, \"$1\")\n .replace(/`([^`]*)`/g, \"$1\")\n .replace(/(-?\\d+(?:[.,]\\d+)?)\\s*(?:°\\s*f\\b|℉)/gi, \"$1 degrees Fahrenheit\")\n .replace(/(-?\\d+(?:[.,]\\d+)?)\\s*(?:°\\s*c\\b|℃)/gi, \"$1 degrees Celsius\")\n .replace(/(-?\\d+(?:[.,]\\d+)?)\\s*°/g, \"$1 degrees\")\n .replace(/<=/g, \" less than or equal to \")\n .replace(/>=/g, \" greater than or equal to \")\n .replace(/</g, \" less than \")\n .replace(/>/g, \" greater than \")\n .replace(/[[\\]{}()]/g, \" \")\n .replace(/(degrees Fahrenheit)\\s+(-?\\d+(?:[.,]\\d+)? degrees Celsius)\\b/gi, \"$1 or $2\")\n .replace(/(degrees Celsius)\\s+(-?\\d+(?:[.,]\\d+)? degrees Fahrenheit)\\b/gi, \"$1 or $2\")\n .replace(/&/g, \" and \")\n .replace(/\\+/g, \" plus \")\n .replace(/=/g, \" equals \")\n .replace(/#/g, \" hash \")\n .replace(/@/g, \" at \")\n .replace(/%/g, \" percent \")\n .replace(/\\\\/g, \" backslash \")\n .replace(/\\//g, (slash, offset, source) => {\n const numericSeparator = /\\d/.test(source[offset - 1] ?? \"\") && /\\d/.test(source[offset + 1] ?? \"\")\n return numericSeparator ? slash : \" slash \"\n })\n .replace(/\\*/g, \" star \")\n\n return speech\n .replace(/\\s+([,.;:!?])/g, \"$1\")\n .replace(/\\s+/g, \" \")\n .trim()\n}\n\n/** Prepare an already-trimmed sentence list while preserving the exact-text opt-out. */\nexport function prepareTtsSentences(sentences: string[], enableSanitization = true): string[] {\n if (!enableSanitization) return sentences\n\n const sanitized = sentences.map((sentence) => sanitizeTtsText(sentence)).filter(Boolean)\n\n return sanitized.map((sentence, index) => {\n const previous = sanitized[index - 1]\n if (!previous) return sentence\n\n const followsFahrenheit = /degrees Fahrenheit[,.;:!?]?$/i.test(previous)\n const followsCelsius = /degrees Celsius[,.;:!?]?$/i.test(previous)\n const startsWithFahrenheit = /^-?\\d+(?:[.,]\\d+)? degrees Fahrenheit\\b/i.test(sentence)\n const startsWithCelsius = /^-?\\d+(?:[.,]\\d+)? degrees Celsius\\b/i.test(sentence)\n\n return (followsFahrenheit && startsWithCelsius) || (followsCelsius && startsWithFahrenheit)\n ? `or ${sentence}`\n : sentence\n })\n}\n"]}