@onlive.ai/common-121 0.2.179 → 0.2.187

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 (449) hide show
  1. package/audi-dark.theme-aO_Pa27x.d.cts +11 -0
  2. package/audi-dark.theme-aO_Pa27x.d.ts +11 -0
  3. package/audi.theme-BP7nboRq.d.cts +11 -0
  4. package/audi.theme-BP7nboRq.d.ts +11 -0
  5. package/australia.theme-BkfhMf1z.d.cts +11 -0
  6. package/australia.theme-BkfhMf1z.d.ts +11 -0
  7. package/{chunk-CHMR2I4G.js → chunk-V7XHRWMT.js} +1 -1
  8. package/components/asset/asset-modal-portal.cjs +1 -1
  9. package/components/asset/asset-modal-portal.d.cts +1 -1
  10. package/components/asset/asset-modal-portal.d.ts +1 -1
  11. package/components/asset/asset-modal-portal.js +1 -1
  12. package/components/asset/asset.cjs +1 -1
  13. package/components/asset/asset.d.cts +1 -1
  14. package/components/asset/asset.d.ts +1 -1
  15. package/components/asset/asset.js +1 -1
  16. package/components/asset/asset.loaders.cjs +1 -1
  17. package/components/asset/asset.loaders.d.cts +1 -1
  18. package/components/asset/asset.loaders.d.ts +1 -1
  19. package/components/asset/asset.loaders.js +1 -1
  20. package/components/asset/asset.renderer.cjs +1 -1
  21. package/components/asset/asset.renderer.d.cts +1 -1
  22. package/components/asset/asset.renderer.d.ts +1 -1
  23. package/components/asset/asset.renderer.js +1 -1
  24. package/components/asset/asset.styles.cjs +1 -1
  25. package/components/asset/asset.styles.d.cts +1 -1
  26. package/components/asset/asset.styles.d.ts +1 -1
  27. package/components/asset/asset.styles.js +1 -1
  28. package/components/asset/asset.types.cjs +1 -1
  29. package/components/asset/asset.types.d.cts +1 -1
  30. package/components/asset/asset.types.d.ts +1 -1
  31. package/components/asset/asset.types.js +1 -1
  32. package/components/asset/index.cjs +1 -1
  33. package/components/asset/index.d.cts +1 -1
  34. package/components/asset/index.d.ts +1 -1
  35. package/components/asset/index.js +1 -1
  36. package/components/player/player.cjs +1 -1
  37. package/components/player/player.d.cts +1 -1
  38. package/components/player/player.d.ts +1 -1
  39. package/components/player/player.js +1 -1
  40. package/components/player/player.styles.cjs +1 -1
  41. package/components/player/player.styles.d.cts +1 -1
  42. package/components/player/player.styles.d.ts +1 -1
  43. package/components/player/player.styles.js +1 -1
  44. package/components/side-bar/index.cjs +1 -1
  45. package/components/side-bar/index.d.cts +1 -1
  46. package/components/side-bar/index.d.ts +1 -1
  47. package/components/side-bar/index.js +1 -1
  48. package/components/side-bar/side-bar.cjs +1 -1
  49. package/components/side-bar/side-bar.d.cts +1 -1
  50. package/components/side-bar/side-bar.d.ts +1 -1
  51. package/components/side-bar/side-bar.js +1 -1
  52. package/components/side-bar/side-bar.styles.cjs +1 -1
  53. package/components/side-bar/side-bar.styles.d.cts +1 -1
  54. package/components/side-bar/side-bar.styles.d.ts +1 -1
  55. package/components/side-bar/side-bar.styles.js +1 -1
  56. package/components/side-bar/side-bar.types.cjs +1 -1
  57. package/components/side-bar/side-bar.types.d.cts +1 -1
  58. package/components/side-bar/side-bar.types.d.ts +1 -1
  59. package/components/side-bar/side-bar.types.js +1 -1
  60. package/components/upload/index.cjs +1 -1
  61. package/components/upload/index.d.cts +1 -1
  62. package/components/upload/index.d.ts +1 -1
  63. package/components/upload/index.js +1 -1
  64. package/components/upload/upload.cjs +1 -1
  65. package/components/upload/upload.d.cts +1 -1
  66. package/components/upload/upload.d.ts +1 -1
  67. package/components/upload/upload.js +1 -1
  68. package/components/upload/upload.styles.cjs +1 -1
  69. package/components/upload/upload.styles.d.cts +1 -1
  70. package/components/upload/upload.styles.d.ts +1 -1
  71. package/components/upload/upload.styles.js +1 -1
  72. package/components/upload/upload.types.cjs +1 -1
  73. package/components/upload/upload.types.d.cts +1 -1
  74. package/components/upload/upload.types.d.ts +1 -1
  75. package/components/upload/upload.types.js +1 -1
  76. package/cuernavaca.theme-Bez8yPGT.d.cts +11 -0
  77. package/cuernavaca.theme-Bez8yPGT.d.ts +11 -0
  78. package/cupra-diagonal.theme-CvdXkM9K.d.cts +11 -0
  79. package/cupra-diagonal.theme-CvdXkM9K.d.ts +11 -0
  80. package/cupra-events.theme-ln2vh1C0.d.cts +11 -0
  81. package/cupra-events.theme-ln2vh1C0.d.ts +11 -0
  82. package/cupra.theme-xa6yZhYo.d.cts +11 -0
  83. package/cupra.theme-xa6yZhYo.d.ts +11 -0
  84. package/germany.theme-Dra_5Jz0.d.cts +11 -0
  85. package/germany.theme-Dra_5Jz0.d.ts +11 -0
  86. package/hyundai.theme-BATWnkTl.d.cts +11 -0
  87. package/hyundai.theme-BATWnkTl.d.ts +11 -0
  88. package/index.cjs +13 -13
  89. package/index.d.cts +178 -3
  90. package/index.d.ts +178 -3
  91. package/index.js +139 -139
  92. package/italy.theme-YukqsD2q.d.cts +11 -0
  93. package/italy.theme-YukqsD2q.d.ts +11 -0
  94. package/magimix.theme-C7eoXRAA.d.cts +11 -0
  95. package/magimix.theme-C7eoXRAA.d.ts +11 -0
  96. package/{media-TFGJGBU2.js → media-MWJPMNO2.js} +2 -2
  97. package/onlive-ai.theme-CMYahnHv.d.cts +11 -0
  98. package/onlive-ai.theme-CMYahnHv.d.ts +11 -0
  99. package/onlive.theme-B7tNdG9s.d.cts +11 -0
  100. package/onlive.theme-B7tNdG9s.d.ts +11 -0
  101. package/package.json +7 -6
  102. package/react/components/asset/Asset.cjs +1 -1
  103. package/react/components/asset/Asset.jsx +1 -1
  104. package/react/components/side-bar/SideBar.cjs +1 -1
  105. package/react/components/side-bar/SideBar.jsx +1 -1
  106. package/react/components/upload/Upload.cjs +1 -1
  107. package/react/components/upload/Upload.jsx +1 -1
  108. package/seat-cupra.theme-CzvloqhA.d.cts +11 -0
  109. package/seat-cupra.theme-CzvloqhA.d.ts +11 -0
  110. package/services/audio.service.cjs +1 -1
  111. package/services/audio.service.d.cts +1 -1
  112. package/services/audio.service.d.ts +1 -1
  113. package/services/audio.service.js +1 -1
  114. package/services/conversation/conversation.service.cjs +2 -2
  115. package/services/conversation/conversation.service.d.cts +15 -2
  116. package/services/conversation/conversation.service.d.ts +15 -2
  117. package/services/conversation/conversation.service.js +2 -2
  118. package/services/conversation/conversation.types.cjs +2 -2
  119. package/services/conversation/conversation.types.d.cts +112 -2
  120. package/services/conversation/conversation.types.d.ts +112 -2
  121. package/services/conversation/conversation.types.js +2 -2
  122. package/services/conversation/index.cjs +2 -2
  123. package/services/conversation/index.d.cts +2 -2
  124. package/services/conversation/index.d.ts +2 -2
  125. package/services/conversation/index.js +2 -2
  126. package/services/conversation/mock/actor/agent.cjs +1 -1
  127. package/services/conversation/mock/actor/agent.d.cts +1 -1
  128. package/services/conversation/mock/actor/agent.d.ts +1 -1
  129. package/services/conversation/mock/actor/agent.js +1 -1
  130. package/services/conversation/mock/actor/index.cjs +1 -1
  131. package/services/conversation/mock/actor/index.d.cts +1 -1
  132. package/services/conversation/mock/actor/index.d.ts +1 -1
  133. package/services/conversation/mock/actor/index.js +1 -1
  134. package/services/conversation/mock/actor/strategies.cjs +1 -1
  135. package/services/conversation/mock/actor/strategies.d.cts +1 -1
  136. package/services/conversation/mock/actor/strategies.d.ts +1 -1
  137. package/services/conversation/mock/actor/strategies.js +1 -1
  138. package/services/conversation/mock/errors.cjs +1 -1
  139. package/services/conversation/mock/errors.d.cts +1 -1
  140. package/services/conversation/mock/errors.d.ts +1 -1
  141. package/services/conversation/mock/errors.js +1 -1
  142. package/services/conversation/mock/events.cjs +1 -1
  143. package/services/conversation/mock/events.d.cts +1 -1
  144. package/services/conversation/mock/events.d.ts +1 -1
  145. package/services/conversation/mock/events.js +1 -1
  146. package/services/conversation/mock/factory.cjs +2 -2
  147. package/services/conversation/mock/factory.d.cts +1 -1
  148. package/services/conversation/mock/factory.d.ts +1 -1
  149. package/services/conversation/mock/factory.js +2 -2
  150. package/services/conversation/mock/fixtures.cjs +1 -1
  151. package/services/conversation/mock/fixtures.d.cts +1 -1
  152. package/services/conversation/mock/fixtures.d.ts +1 -1
  153. package/services/conversation/mock/fixtures.js +1 -1
  154. package/services/conversation/mock/generators.cjs +1 -1
  155. package/services/conversation/mock/generators.d.cts +1 -1
  156. package/services/conversation/mock/generators.d.ts +1 -1
  157. package/services/conversation/mock/generators.js +1 -1
  158. package/services/conversation/mock/index.cjs +2 -2
  159. package/services/conversation/mock/index.d.cts +1 -1
  160. package/services/conversation/mock/index.d.ts +1 -1
  161. package/services/conversation/mock/index.js +2 -2
  162. package/services/conversation/mock/livekit/index.cjs +1 -1
  163. package/services/conversation/mock/livekit/index.d.cts +1 -1
  164. package/services/conversation/mock/livekit/index.d.ts +1 -1
  165. package/services/conversation/mock/livekit/index.js +1 -1
  166. package/services/conversation/mock/livekit/local-participant.cjs +1 -1
  167. package/services/conversation/mock/livekit/local-participant.d.cts +1 -1
  168. package/services/conversation/mock/livekit/local-participant.d.ts +1 -1
  169. package/services/conversation/mock/livekit/local-participant.js +1 -1
  170. package/services/conversation/mock/livekit/participant.cjs +1 -1
  171. package/services/conversation/mock/livekit/participant.d.cts +1 -1
  172. package/services/conversation/mock/livekit/participant.d.ts +1 -1
  173. package/services/conversation/mock/livekit/participant.js +1 -1
  174. package/services/conversation/mock/livekit/room.cjs +1 -1
  175. package/services/conversation/mock/livekit/room.d.cts +1 -1
  176. package/services/conversation/mock/livekit/room.d.ts +1 -1
  177. package/services/conversation/mock/livekit/room.js +1 -1
  178. package/services/conversation/mock/livekit/streams.cjs +1 -1
  179. package/services/conversation/mock/livekit/streams.d.cts +1 -1
  180. package/services/conversation/mock/livekit/streams.d.ts +1 -1
  181. package/services/conversation/mock/livekit/streams.js +1 -1
  182. package/services/conversation/mock/livekit/tracks.cjs +1 -1
  183. package/services/conversation/mock/livekit/tracks.d.cts +1 -1
  184. package/services/conversation/mock/livekit/tracks.d.ts +1 -1
  185. package/services/conversation/mock/livekit/tracks.js +1 -1
  186. package/services/conversation/mock/media.cjs +1 -1
  187. package/services/conversation/mock/media.d.cts +1 -1
  188. package/services/conversation/mock/media.d.ts +1 -1
  189. package/services/conversation/mock/media.js +1 -1
  190. package/services/conversation/mock/service.cjs +2 -2
  191. package/services/conversation/mock/service.d.cts +7 -2
  192. package/services/conversation/mock/service.d.ts +7 -2
  193. package/services/conversation/mock/service.js +2 -2
  194. package/services/conversation/mock/service.test.cjs +2 -2
  195. package/services/conversation/mock/service.test.d.cts +1 -1
  196. package/services/conversation/mock/service.test.d.ts +1 -1
  197. package/services/conversation/mock/service.test.js +2 -2
  198. package/services/conversation/mock/state.cjs +1 -1
  199. package/services/conversation/mock/state.d.cts +1 -1
  200. package/services/conversation/mock/state.d.ts +1 -1
  201. package/services/conversation/mock/state.js +1 -1
  202. package/services/conversation/mock/storybook.cjs +2 -2
  203. package/services/conversation/mock/storybook.d.cts +1 -1
  204. package/services/conversation/mock/storybook.d.ts +1 -1
  205. package/services/conversation/mock/storybook.js +2 -2
  206. package/services/conversation/mock/types.cjs +1 -1
  207. package/services/conversation/mock/types.d.cts +1 -1
  208. package/services/conversation/mock/types.d.ts +1 -1
  209. package/services/conversation/mock/types.js +1 -1
  210. package/services/deep-link.service.cjs +2 -0
  211. package/services/deep-link.service.d.cts +77 -0
  212. package/services/deep-link.service.d.ts +77 -0
  213. package/services/deep-link.service.js +2 -0
  214. package/services/faqs/faqs.service.cjs +1 -1
  215. package/services/faqs/faqs.service.d.cts +1 -1
  216. package/services/faqs/faqs.service.d.ts +1 -1
  217. package/services/faqs/faqs.service.js +1 -1
  218. package/services/faqs/faqs.types.cjs +1 -1
  219. package/services/faqs/faqs.types.d.cts +1 -1
  220. package/services/faqs/faqs.types.d.ts +1 -1
  221. package/services/faqs/faqs.types.js +1 -1
  222. package/services/faqs/index.cjs +1 -1
  223. package/services/faqs/index.d.cts +1 -1
  224. package/services/faqs/index.d.ts +1 -1
  225. package/services/faqs/index.js +1 -1
  226. package/services/file/file.service.cjs +1 -1
  227. package/services/file/file.service.d.cts +1 -1
  228. package/services/file/file.service.d.ts +1 -1
  229. package/services/file/file.service.js +1 -1
  230. package/services/file/file.types.cjs +1 -1
  231. package/services/file/file.types.d.cts +1 -1
  232. package/services/file/file.types.d.ts +1 -1
  233. package/services/file/file.types.js +1 -1
  234. package/services/file/index.cjs +1 -1
  235. package/services/file/index.d.cts +1 -1
  236. package/services/file/index.d.ts +1 -1
  237. package/services/file/index.js +1 -1
  238. package/services/firebase/firebase-api.cjs +1 -1
  239. package/services/firebase/firebase-api.d.cts +1 -1
  240. package/services/firebase/firebase-api.d.ts +1 -1
  241. package/services/firebase/firebase-api.js +1 -1
  242. package/services/multimedia/config.example.cjs +1 -1
  243. package/services/multimedia/config.example.d.cts +1 -1
  244. package/services/multimedia/config.example.d.ts +1 -1
  245. package/services/multimedia/config.example.js +1 -1
  246. package/services/multimedia/index.cjs +1 -1
  247. package/services/multimedia/index.d.cts +1 -1
  248. package/services/multimedia/index.d.ts +1 -1
  249. package/services/multimedia/index.js +1 -1
  250. package/services/multimedia/multimedia.service.cjs +1 -1
  251. package/services/multimedia/multimedia.service.d.cts +1 -1
  252. package/services/multimedia/multimedia.service.d.ts +1 -1
  253. package/services/multimedia/multimedia.service.js +1 -1
  254. package/services/multimedia/multimedia.types.cjs +1 -1
  255. package/services/multimedia/multimedia.types.d.cts +1 -1
  256. package/services/multimedia/multimedia.types.d.ts +1 -1
  257. package/services/multimedia/multimedia.types.js +1 -1
  258. package/services/product/index.cjs +1 -1
  259. package/services/product/index.d.cts +1 -1
  260. package/services/product/index.d.ts +1 -1
  261. package/services/product/index.js +1 -1
  262. package/services/product/product.service.cjs +1 -1
  263. package/services/product/product.service.d.cts +1 -1
  264. package/services/product/product.service.d.ts +1 -1
  265. package/services/product/product.service.js +1 -1
  266. package/services/product/product.types.cjs +1 -1
  267. package/services/product/product.types.d.cts +1 -1
  268. package/services/product/product.types.d.ts +1 -1
  269. package/services/product/product.types.js +1 -1
  270. package/services/request.provider.cjs +1 -1
  271. package/services/request.provider.d.cts +1 -1
  272. package/services/request.provider.d.ts +1 -1
  273. package/services/request.provider.js +1 -1
  274. package/services/session.service.cjs +2 -2
  275. package/services/session.service.d.cts +1 -1
  276. package/services/session.service.d.ts +1 -1
  277. package/services/session.service.js +2 -2
  278. package/services/upload/index.cjs +1 -1
  279. package/services/upload/index.d.cts +1 -1
  280. package/services/upload/index.d.ts +1 -1
  281. package/services/upload/index.js +1 -1
  282. package/services/upload/upload.service.cjs +1 -1
  283. package/services/upload/upload.service.d.cts +1 -1
  284. package/services/upload/upload.service.d.ts +1 -1
  285. package/services/upload/upload.service.js +1 -1
  286. package/themes/custom/audi-dark.theme.cjs +920 -0
  287. package/themes/custom/audi-dark.theme.d.cts +3 -0
  288. package/themes/custom/audi-dark.theme.d.ts +3 -0
  289. package/themes/custom/audi-dark.theme.js +920 -0
  290. package/themes/custom/audi.theme.cjs +777 -0
  291. package/themes/custom/audi.theme.d.cts +3 -0
  292. package/themes/custom/audi.theme.d.ts +3 -0
  293. package/themes/custom/audi.theme.js +777 -0
  294. package/themes/custom/australia.theme.cjs +386 -0
  295. package/themes/custom/australia.theme.d.cts +3 -0
  296. package/themes/custom/australia.theme.d.ts +3 -0
  297. package/themes/custom/australia.theme.js +386 -0
  298. package/themes/custom/cuernavaca.theme.cjs +196 -0
  299. package/themes/custom/cuernavaca.theme.d.cts +3 -0
  300. package/themes/custom/cuernavaca.theme.d.ts +3 -0
  301. package/themes/custom/cuernavaca.theme.js +196 -0
  302. package/themes/custom/cupra-diagonal.theme.cjs +1031 -0
  303. package/themes/custom/cupra-diagonal.theme.d.cts +3 -0
  304. package/themes/custom/cupra-diagonal.theme.d.ts +3 -0
  305. package/themes/custom/cupra-diagonal.theme.js +1031 -0
  306. package/themes/custom/cupra-events.theme.cjs +555 -0
  307. package/themes/custom/cupra-events.theme.d.cts +3 -0
  308. package/themes/custom/cupra-events.theme.d.ts +3 -0
  309. package/themes/custom/cupra-events.theme.js +555 -0
  310. package/themes/custom/cupra.theme.cjs +147 -0
  311. package/themes/custom/cupra.theme.d.cts +3 -0
  312. package/themes/custom/cupra.theme.d.ts +3 -0
  313. package/themes/custom/cupra.theme.js +147 -0
  314. package/themes/custom/germany.theme.cjs +716 -0
  315. package/themes/custom/germany.theme.d.cts +3 -0
  316. package/themes/custom/germany.theme.d.ts +3 -0
  317. package/themes/custom/germany.theme.js +716 -0
  318. package/themes/custom/hyundai.theme.cjs +294 -0
  319. package/themes/custom/hyundai.theme.d.cts +3 -0
  320. package/themes/custom/hyundai.theme.d.ts +3 -0
  321. package/themes/custom/hyundai.theme.js +294 -0
  322. package/themes/custom/italy.theme.cjs +850 -0
  323. package/themes/custom/italy.theme.d.cts +3 -0
  324. package/themes/custom/italy.theme.d.ts +3 -0
  325. package/themes/custom/italy.theme.js +850 -0
  326. package/themes/custom/magimix.theme.cjs +119 -0
  327. package/themes/custom/magimix.theme.d.cts +3 -0
  328. package/themes/custom/magimix.theme.d.ts +3 -0
  329. package/themes/custom/magimix.theme.js +119 -0
  330. package/themes/custom/onlive-ai.theme.cjs +74 -0
  331. package/themes/custom/onlive-ai.theme.d.cts +3 -0
  332. package/themes/custom/onlive-ai.theme.d.ts +3 -0
  333. package/themes/custom/onlive-ai.theme.js +74 -0
  334. package/themes/custom/onlive.theme.cjs +33 -0
  335. package/themes/custom/onlive.theme.d.cts +3 -0
  336. package/themes/custom/onlive.theme.d.ts +3 -0
  337. package/themes/custom/onlive.theme.js +33 -0
  338. package/themes/custom/seat-cupra.theme.cjs +478 -0
  339. package/themes/custom/seat-cupra.theme.d.cts +3 -0
  340. package/themes/custom/seat-cupra.theme.d.ts +3 -0
  341. package/themes/custom/seat-cupra.theme.js +478 -0
  342. package/themes/dark.cjs +1 -1
  343. package/themes/dark.d.cts +1 -1
  344. package/themes/dark.d.ts +1 -1
  345. package/themes/dark.js +1 -1
  346. package/themes/light.cjs +1 -1
  347. package/themes/light.d.cts +1 -1
  348. package/themes/light.d.ts +1 -1
  349. package/themes/light.js +1 -1
  350. package/types/deep-link.types.cjs +2 -0
  351. package/types/deep-link.types.d.cts +32 -0
  352. package/types/deep-link.types.d.ts +32 -0
  353. package/types/deep-link.types.js +2 -0
  354. package/types/globals.cjs +1 -1
  355. package/types/globals.d.cts +1 -1
  356. package/types/globals.d.ts +1 -1
  357. package/types/globals.js +1 -1
  358. package/types/tracking-options.cjs +1 -1
  359. package/types/tracking-options.d.cts +1 -1
  360. package/types/tracking-options.d.ts +1 -1
  361. package/types/tracking-options.js +1 -1
  362. package/utils/adopt-styles.cjs +1 -1
  363. package/utils/adopt-styles.d.cts +1 -1
  364. package/utils/adopt-styles.d.ts +1 -1
  365. package/utils/adopt-styles.js +1 -1
  366. package/utils/apply-optional-styles.cjs +6550 -0
  367. package/utils/apply-optional-styles.d.cts +47 -0
  368. package/utils/apply-optional-styles.d.ts +47 -0
  369. package/utils/apply-optional-styles.js +6550 -0
  370. package/utils/browser-preferences.cjs +1 -1
  371. package/utils/browser-preferences.d.cts +1 -1
  372. package/utils/browser-preferences.d.ts +1 -1
  373. package/utils/browser-preferences.js +1 -1
  374. package/utils/classify-media.cjs +1 -1
  375. package/utils/classify-media.d.cts +1 -1
  376. package/utils/classify-media.d.ts +1 -1
  377. package/utils/classify-media.js +1 -1
  378. package/utils/decorators.cjs +1 -1
  379. package/utils/decorators.d.cts +1 -1
  380. package/utils/decorators.d.ts +1 -1
  381. package/utils/decorators.js +1 -1
  382. package/utils/detected-lang.cjs +1 -1
  383. package/utils/detected-lang.d.cts +1 -1
  384. package/utils/detected-lang.d.ts +1 -1
  385. package/utils/detected-lang.js +1 -1
  386. package/utils/fullscreen.cjs +1 -1
  387. package/utils/fullscreen.d.cts +1 -1
  388. package/utils/fullscreen.d.ts +1 -1
  389. package/utils/fullscreen.js +1 -1
  390. package/utils/insert-script.cjs +1 -1
  391. package/utils/insert-script.d.cts +1 -1
  392. package/utils/insert-script.d.ts +1 -1
  393. package/utils/insert-script.js +1 -1
  394. package/utils/is-map-compatible.cjs +1 -1
  395. package/utils/is-map-compatible.d.cts +1 -1
  396. package/utils/is-map-compatible.d.ts +1 -1
  397. package/utils/is-map-compatible.js +1 -1
  398. package/utils/markdown.cjs +1 -1
  399. package/utils/markdown.d.cts +1 -1
  400. package/utils/markdown.d.ts +1 -1
  401. package/utils/markdown.js +1 -1
  402. package/utils/merge.cjs +1 -1
  403. package/utils/merge.d.cts +1 -1
  404. package/utils/merge.d.ts +1 -1
  405. package/utils/merge.js +1 -1
  406. package/utils/multiband-track-volume.cjs +1 -1
  407. package/utils/multiband-track-volume.d.cts +1 -1
  408. package/utils/multiband-track-volume.d.ts +1 -1
  409. package/utils/multiband-track-volume.js +1 -1
  410. package/utils/onlive-url-params.cjs +1 -1
  411. package/utils/onlive-url-params.d.cts +1 -1
  412. package/utils/onlive-url-params.d.ts +1 -1
  413. package/utils/onlive-url-params.js +1 -1
  414. package/utils/pretty-distance.cjs +1 -1
  415. package/utils/pretty-distance.d.cts +1 -1
  416. package/utils/pretty-distance.d.ts +1 -1
  417. package/utils/pretty-distance.js +1 -1
  418. package/utils/pretty-time.cjs +1 -1
  419. package/utils/pretty-time.d.cts +1 -1
  420. package/utils/pretty-time.d.ts +1 -1
  421. package/utils/pretty-time.js +1 -1
  422. package/utils/random-string.cjs +1 -1
  423. package/utils/random-string.d.cts +1 -1
  424. package/utils/random-string.d.ts +1 -1
  425. package/utils/random-string.js +1 -1
  426. package/utils/resource-type.cjs +1 -1
  427. package/utils/resource-type.d.cts +1 -1
  428. package/utils/resource-type.d.ts +1 -1
  429. package/utils/resource-type.js +1 -1
  430. package/utils/round-number.cjs +1 -1
  431. package/utils/round-number.d.cts +1 -1
  432. package/utils/round-number.d.ts +1 -1
  433. package/utils/round-number.js +1 -1
  434. package/utils/safe-html.cjs +1 -1
  435. package/utils/safe-html.d.cts +1 -1
  436. package/utils/safe-html.d.ts +1 -1
  437. package/utils/safe-html.js +1 -1
  438. package/utils/sanitize.cjs +1 -1
  439. package/utils/sanitize.d.cts +1 -1
  440. package/utils/sanitize.d.ts +1 -1
  441. package/utils/sanitize.js +1 -1
  442. package/utils/spread.cjs +1 -1
  443. package/utils/spread.d.cts +1 -1
  444. package/utils/spread.d.ts +1 -1
  445. package/utils/spread.js +1 -1
  446. package/utils/watch.cjs +1 -1
  447. package/utils/watch.d.cts +1 -1
  448. package/utils/watch.d.ts +1 -1
  449. package/utils/watch.js +1 -1
@@ -0,0 +1,11 @@
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
+ import * as lit from 'lit';
3
+
4
+ declare const styles: lit.CSSResult;
5
+
6
+ declare const _onlive_ai_common_121_themes_custom_italy_theme_js_styles: typeof styles;
7
+ declare namespace _onlive_ai_common_121_themes_custom_italy_theme_js {
8
+ export { _onlive_ai_common_121_themes_custom_italy_theme_js_styles as styles };
9
+ }
10
+
11
+ export { _onlive_ai_common_121_themes_custom_italy_theme_js as _, styles as s };
@@ -0,0 +1,11 @@
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
+ import * as lit from 'lit';
3
+
4
+ declare const styles: lit.CSSResult;
5
+
6
+ declare const _onlive_ai_common_121_themes_custom_italy_theme_js_styles: typeof styles;
7
+ declare namespace _onlive_ai_common_121_themes_custom_italy_theme_js {
8
+ export { _onlive_ai_common_121_themes_custom_italy_theme_js_styles as styles };
9
+ }
10
+
11
+ export { _onlive_ai_common_121_themes_custom_italy_theme_js as _, styles as s };
@@ -0,0 +1,11 @@
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
+ import * as lit from 'lit';
3
+
4
+ declare const styles: lit.CSSResult;
5
+
6
+ declare const _onlive_ai_common_121_themes_custom_magimix_theme_js_styles: typeof styles;
7
+ declare namespace _onlive_ai_common_121_themes_custom_magimix_theme_js {
8
+ export { _onlive_ai_common_121_themes_custom_magimix_theme_js_styles as styles };
9
+ }
10
+
11
+ export { _onlive_ai_common_121_themes_custom_magimix_theme_js as _, styles as s };
@@ -0,0 +1,11 @@
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
+ import * as lit from 'lit';
3
+
4
+ declare const styles: lit.CSSResult;
5
+
6
+ declare const _onlive_ai_common_121_themes_custom_magimix_theme_js_styles: typeof styles;
7
+ declare namespace _onlive_ai_common_121_themes_custom_magimix_theme_js {
8
+ export { _onlive_ai_common_121_themes_custom_magimix_theme_js_styles as styles };
9
+ }
10
+
11
+ export { _onlive_ai_common_121_themes_custom_magimix_theme_js as _, styles as s };
@@ -1,2 +1,2 @@
1
- /*! @onlive.ai/common-121 v0.2.179 | © 2026 Onlive.ai */
2
- import{b as a,c as b,d as c,e as d,f as e}from"./chunk-CHMR2I4G.js";export{d as SYNTHETIC_MEDIA_PRESETS,b as createSyntheticAudioTrack,c as createSyntheticMedia,e as createSyntheticMediaFromPreset,a as createSyntheticVideoTrack};
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
+ import{b as a,c as b,d as c,e as d,f as e}from"./chunk-V7XHRWMT.js";export{d as SYNTHETIC_MEDIA_PRESETS,b as createSyntheticAudioTrack,c as createSyntheticMedia,e as createSyntheticMediaFromPreset,a as createSyntheticVideoTrack};
@@ -0,0 +1,11 @@
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
+ import * as lit from 'lit';
3
+
4
+ declare const styles: lit.CSSResult;
5
+
6
+ declare const _onlive_ai_common_121_themes_custom_onlive_ai_theme_js_styles: typeof styles;
7
+ declare namespace _onlive_ai_common_121_themes_custom_onlive_ai_theme_js {
8
+ export { _onlive_ai_common_121_themes_custom_onlive_ai_theme_js_styles as styles };
9
+ }
10
+
11
+ export { _onlive_ai_common_121_themes_custom_onlive_ai_theme_js as _, styles as s };
@@ -0,0 +1,11 @@
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
+ import * as lit from 'lit';
3
+
4
+ declare const styles: lit.CSSResult;
5
+
6
+ declare const _onlive_ai_common_121_themes_custom_onlive_ai_theme_js_styles: typeof styles;
7
+ declare namespace _onlive_ai_common_121_themes_custom_onlive_ai_theme_js {
8
+ export { _onlive_ai_common_121_themes_custom_onlive_ai_theme_js_styles as styles };
9
+ }
10
+
11
+ export { _onlive_ai_common_121_themes_custom_onlive_ai_theme_js as _, styles as s };
@@ -0,0 +1,11 @@
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
+ import * as lit from 'lit';
3
+
4
+ declare const styles: lit.CSSResult;
5
+
6
+ declare const _onlive_ai_common_121_themes_custom_onlive_theme_js_styles: typeof styles;
7
+ declare namespace _onlive_ai_common_121_themes_custom_onlive_theme_js {
8
+ export { _onlive_ai_common_121_themes_custom_onlive_theme_js_styles as styles };
9
+ }
10
+
11
+ export { _onlive_ai_common_121_themes_custom_onlive_theme_js as _, styles as s };
@@ -0,0 +1,11 @@
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
+ import * as lit from 'lit';
3
+
4
+ declare const styles: lit.CSSResult;
5
+
6
+ declare const _onlive_ai_common_121_themes_custom_onlive_theme_js_styles: typeof styles;
7
+ declare namespace _onlive_ai_common_121_themes_custom_onlive_theme_js {
8
+ export { _onlive_ai_common_121_themes_custom_onlive_theme_js_styles as styles };
9
+ }
10
+
11
+ export { _onlive_ai_common_121_themes_custom_onlive_theme_js as _, styles as s };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onlive.ai/common-121",
3
- "version": "0.2.179",
3
+ "version": "0.2.187",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "**/*.js",
@@ -9,7 +9,6 @@
9
9
  "**/*.d.ts",
10
10
  "**/*.d.cts",
11
11
  "!./*.iife.js",
12
- "!./themes/custom/**",
13
12
  "!./node_modules/**"
14
13
  ],
15
14
  "main": "./index.cjs",
@@ -32,11 +31,11 @@
32
31
  "@formatjs/intl-localematcher": "^0.5.10",
33
32
  "@lit/react": "^1.0.8",
34
33
  "@livekit/components-core": "^0.12.12",
35
- "@onlive.ai/tracker": "^1.0.30",
36
- "@onlive.ai/ui": "^1.9.5",
34
+ "@onlive.ai/tracker": "^1.0.45",
35
+ "@onlive.ai/ui": "^1.9.12",
37
36
  "@types/node": "^22.19.7",
38
37
  "@vitest/coverage-v8": "^2.1.9",
39
- "dompurify": "^3.3.1",
38
+ "dompurify": "^3.3.3",
40
39
  "firebase": "^11.10.0",
41
40
  "lit": "^3.3.2",
42
41
  "livekit-client": "^2.17.0",
@@ -55,7 +54,9 @@
55
54
  "react": "^19.1.1"
56
55
  },
57
56
  "scripts": {
57
+ "dev": "tsx ./scripts/generate-lit-themes.ts --watch",
58
58
  "build:package": "tsup",
59
- "clean": "find . \\( -iname \"*.js\" -o -iname \"*.cjs\" -o -iname \"*.d.ts\" -o -iname \"*.d.cts\" \\) -type f -not -path \"./node_modules/*\" -delete"
59
+ "themes:build": "tsx ./scripts/generate-lit-themes.ts",
60
+ "clean": "find . \\( -iname \"*.js\" -o -iname \"*.cjs\" -o -iname \"*.d.ts\" -o -iname \"*.d.cts\" -o -iname \"index.css\" -o -iname \"themes/custom/*.theme.ts\" \\) -type f -not -path \"./node_modules/*\" -delete"
60
61
  }
61
62
  }
@@ -1,2 +1,2 @@
1
- /*! @onlive.ai/common-121 v0.2.179 | © 2026 Onlive.ai */
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
2
  "use strict";var E=Object.create;var a=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var A=Object.getPrototypeOf,C=Object.prototype.hasOwnProperty;var N=(t,e)=>{for(var s in e)a(t,s,{get:e[s],enumerable:!0})},m=(t,e,s,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of l(e))!C.call(t,o)&&o!==s&&a(t,o,{get:()=>e[o],enumerable:!(n=i(e,o))||n.enumerable});return t};var d=(t,e,s)=>(s=t!=null?E(A(t)):{},m(e||!t||!t.__esModule?a(s,"default",{value:t,enumerable:!0}):s,t)),f=t=>m(a({},"__esModule",{value:!0}),t);var I={};N(I,{Asset:()=>v,default:()=>u});module.exports=f(I);var r=require("@lit/react"),c=d(require("react"),1),p=require("../../../components/asset/asset.js"),v=(0,r.createComponent)({tagName:"osb-asset",elementClass:p.OSBAsset,react:c.default,events:{onAssetClick:"asset-click",onAssetDownload:"asset-download",onAssetLoad:"asset-load",onAssetError:"asset-error",onContentClick:"content-click"}}),u=v;0&&(module.exports={Asset});
@@ -1,2 +1,2 @@
1
- /*! @onlive.ai/common-121 v0.2.179 | © 2026 Onlive.ai */
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
2
  import{createComponent as t}from"@lit/react";import e from"react";import{OSBAsset as s}from"../../../components/asset/asset.js";var o=t({tagName:"osb-asset",elementClass:s,react:e,events:{onAssetClick:"asset-click",onAssetDownload:"asset-download",onAssetLoad:"asset-load",onAssetError:"asset-error",onContentClick:"content-click"}}),r=o;export{o as Asset,r as default};
@@ -1,2 +1,2 @@
1
- /*! @onlive.ai/common-121 v0.2.179 | © 2026 Onlive.ai */
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
2
  "use strict";var d=Object.create;var n=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var l=Object.getPrototypeOf,p=Object.prototype.hasOwnProperty;var u=(e,t)=>{for(var a in t)n(e,a,{get:t[a],enumerable:!0})},m=(e,t,a,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of E(t))!p.call(e,o)&&o!==a&&n(e,o,{get:()=>t[o],enumerable:!(r=v(t,o))||r.enumerable});return e};var y=(e,t,a)=>(a=e!=null?d(l(e)):{},m(t||!e||!e.__esModule?n(a,"default",{value:e,enumerable:!0}):a,e)),C=e=>m(n({},"__esModule",{value:!0}),e);var f={};u(f,{SideBar:()=>c,default:()=>N});module.exports=C(f);var s=require("@lit/react"),i=y(require("react"),1),g=require("../../../components/side-bar/side-bar.js"),c=(0,s.createComponent)({tagName:"osb-side-bar",elementClass:g.OSBSideBar,react:i.default,events:{onSearch:"search",onLoadMore:"load-more",onItemAdd:"item-add",onCategoryChange:"category-change",onItemSelect:"item-select",onFileUpload:"file-uploaded"}}),N=c;0&&(module.exports={SideBar});
@@ -1,2 +1,2 @@
1
- /*! @onlive.ai/common-121 v0.2.179 | © 2026 Onlive.ai */
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
2
  import{createComponent as e}from"@lit/react";import t from"react";import{OSBSideBar as a}from"../../../components/side-bar/side-bar.js";var o=e({tagName:"osb-side-bar",elementClass:a,react:t,events:{onSearch:"search",onLoadMore:"load-more",onItemAdd:"item-add",onCategoryChange:"category-change",onItemSelect:"item-select",onFileUpload:"file-uploaded"}}),s=o;export{o as SideBar,s as default};
@@ -1,2 +1,2 @@
1
- /*! @onlive.ai/common-121 v0.2.179 | © 2026 Onlive.ai */
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
2
  "use strict";var i=Object.create;var p=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var u=Object.getPrototypeOf,v=Object.prototype.hasOwnProperty;var y=(e,o)=>{for(var t in o)p(e,t,{get:o[t],enumerable:!0})},l=(e,o,t,a)=>{if(o&&typeof o=="object"||typeof o=="function")for(let r of f(o))!v.call(e,r)&&r!==t&&p(e,r,{get:()=>o[r],enumerable:!(a=c(o,r))||a.enumerable});return e};var E=(e,o,t)=>(t=e!=null?i(u(e)):{},l(o||!e||!e.__esModule?p(t,"default",{value:e,enumerable:!0}):t,e)),U=e=>l(p({},"__esModule",{value:!0}),e);var N={};y(N,{Upload:()=>d,default:()=>C});module.exports=U(N);var m=require("@lit/react"),s=E(require("react"),1),n=require("../../../components/upload/upload.js"),d=(0,m.createComponent)({tagName:"osb-upload",elementClass:n.OSBUpload,react:s.default,events:{onFileSelected:"osb-file-selected",onUploadError:"osb-upload-error"}}),C=d;0&&(module.exports={Upload});
@@ -1,2 +1,2 @@
1
- /*! @onlive.ai/common-121 v0.2.179 | © 2026 Onlive.ai */
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
2
  import{createComponent as e}from"@lit/react";import o from"react";import{OSBUpload as t}from"../../../components/upload/upload.js";var r=e({tagName:"osb-upload",elementClass:t,react:o,events:{onFileSelected:"osb-file-selected",onUploadError:"osb-upload-error"}}),m=r;export{r as Upload,m as default};
@@ -0,0 +1,11 @@
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
+ import * as lit from 'lit';
3
+
4
+ declare const styles: lit.CSSResult;
5
+
6
+ declare const _onlive_ai_common_121_themes_custom_seat_cupra_theme_js_styles: typeof styles;
7
+ declare namespace _onlive_ai_common_121_themes_custom_seat_cupra_theme_js {
8
+ export { _onlive_ai_common_121_themes_custom_seat_cupra_theme_js_styles as styles };
9
+ }
10
+
11
+ export { _onlive_ai_common_121_themes_custom_seat_cupra_theme_js as _, styles as s };
@@ -0,0 +1,11 @@
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
+ import * as lit from 'lit';
3
+
4
+ declare const styles: lit.CSSResult;
5
+
6
+ declare const _onlive_ai_common_121_themes_custom_seat_cupra_theme_js_styles: typeof styles;
7
+ declare namespace _onlive_ai_common_121_themes_custom_seat_cupra_theme_js {
8
+ export { _onlive_ai_common_121_themes_custom_seat_cupra_theme_js_styles as styles };
9
+ }
10
+
11
+ export { _onlive_ai_common_121_themes_custom_seat_cupra_theme_js as _, styles as s };
@@ -1,2 +1,2 @@
1
- /*! @onlive.ai/common-121 v0.2.179 | © 2026 Onlive.ai */
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
2
  "use strict";var s=Object.defineProperty;var r=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var d=(t,n)=>{for(var o in n)s(t,o,{get:n[o],enumerable:!0})},l=(t,n,o,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let e of a(n))!c.call(t,e)&&e!==o&&s(t,e,{get:()=>n[e],enumerable:!(i=r(n,e))||i.enumerable});return t};var p=t=>l(s({},"__esModule",{value:!0}),t);var g={};d(g,{AudioService:()=>u});module.exports=p(g);var u=class t{constructor(){this.sounds=new Map;this.currentSound=null;this.loadSound("ringing","https://a.slack-edge.com/bv1-13/flitterbug-77334dc.mp3"),this.loadSound("incoming","https://cdn.onlive.site/widget-assets/call_phone_ring_tone.mp3")}static getInstance(){return t.instance||(t.instance=new t),t.instance}loadSound(n,o){let i=new Audio(o);i.preload="auto",this.sounds.set(n,i)}playSound(n,o=!1){this.stopCurrentSound();let i=this.sounds.get(n);i&&(i.loop=o,i.currentTime=0,i.play().catch(e=>console.warn("Error playing sound:",e)),this.currentSound=i)}stopCurrentSound(){this.currentSound&&(this.currentSound.pause(),this.currentSound.currentTime=0,this.currentSound=null)}playRinging(n=!0){this.playSound("ringing",n)}playIncoming(n=!0){this.playSound("incoming",n)}};0&&(module.exports={AudioService});
@@ -1,4 +1,4 @@
1
- /*! @onlive.ai/common-121 v0.2.179 | © 2026 Onlive.ai */
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
2
  declare class AudioService {
3
3
  private static instance;
4
4
  private sounds;
@@ -1,4 +1,4 @@
1
- /*! @onlive.ai/common-121 v0.2.179 | © 2026 Onlive.ai */
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
2
  declare class AudioService {
3
3
  private static instance;
4
4
  private sounds;
@@ -1,2 +1,2 @@
1
- /*! @onlive.ai/common-121 v0.2.179 | © 2026 Onlive.ai */
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
2
  var e=class i{constructor(){this.sounds=new Map;this.currentSound=null;this.loadSound("ringing","https://a.slack-edge.com/bv1-13/flitterbug-77334dc.mp3"),this.loadSound("incoming","https://cdn.onlive.site/widget-assets/call_phone_ring_tone.mp3")}static getInstance(){return i.instance||(i.instance=new i),i.instance}loadSound(t,o){let n=new Audio(o);n.preload="auto",this.sounds.set(t,n)}playSound(t,o=!1){this.stopCurrentSound();let n=this.sounds.get(t);n&&(n.loop=o,n.currentTime=0,n.play().catch(s=>console.warn("Error playing sound:",s)),this.currentSound=n)}stopCurrentSound(){this.currentSound&&(this.currentSound.pause(),this.currentSound.currentTime=0,this.currentSound=null)}playRinging(t=!0){this.playSound("ringing",t)}playIncoming(t=!0){this.playSound("incoming",t)}};export{e as AudioService};
@@ -1,2 +1,2 @@
1
- /*! @onlive.ai/common-121 v0.2.179 | © 2026 Onlive.ai */
2
- "use strict";var b=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var k=Object.prototype.hasOwnProperty;var x=(o,e)=>{for(var t in e)b(o,t,{get:e[t],enumerable:!0})},M=(o,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of w(e))!k.call(o,s)&&s!==t&&b(o,s,{get:()=>e[s],enumerable:!(i=S(e,s))||i.enumerable});return o};var z=o=>M(b({},"__esModule",{value:!0}),o);var q={};x(q,{ConversationService:()=>f,Room:()=>y});module.exports=z(q);var m=require("@onlive.ai/tracker"),p=require("livekit-client");var v=require("firebase/app"),n=require("firebase/database"),u=class{constructor(e){this.onChildChanged=(e,t)=>(0,n.onChildChanged)(this.ref(e),i=>t(i.key||"",i.val(),i));this.onChildRemoved=(e,t)=>(0,n.onChildRemoved)(this.ref(e),i=>t(i.key||"",i.val(),i));this.onChildChangedQuery=(e,t)=>(0,n.onChildChanged)(e,i=>t(i.key||"",i.val(),i));this.onChildRemovedQuery=(e,t)=>(0,n.onChildRemoved)(e,i=>t(i.key||"",i.val(),i));let t=(0,v.initializeApp)(e.config);this.db=(0,n.getDatabase)(t)}ref(e){return(0,n.ref)(this.db,e)}async getOnce(e){let t=await(0,n.get)(this.ref(e));return t.exists()?t.val():null}async getOnceQuery(e){let t=await(0,n.get)(e),i=[];return t.exists()&&t.forEach(s=>{i.push({key:s.key||"",value:s.val()})}),i}onValue(e,t){return(0,n.onValue)(this.ref(e),i=>t(i.key??"",i.val(),i),i=>console.error("onValue error",i))}onValueQuery(e,t){return(0,n.onValue)(e,i=>t(i.key??"",i.val(),i),i=>console.error("onValueQuery error",i))}onChildAdded(e,t){return(0,n.onChildAdded)(this.ref(e),i=>t(i.key||"",i.val(),i),i=>console.error("onChildAdded error",i))}onChildAddedQuery(e,t){return(0,n.onChildAdded)(e,i=>t(i.key||"",i.val(),i),i=>console.error("onChildAddedQuery error",i))}write(e,t){return(0,n.set)(this.ref(e),t)}update(e,t){return(0,n.update)(this.ref(e),t)}remove(e){return(0,n.remove)(this.ref(e))}async push(e,t){let i=(0,n.push)(this.ref(e));return await(0,n.set)(i,t),i.key}onDisconnectUpdate(e,t){return(0,n.onDisconnect)(this.ref(e)).update(t)}cancelOnDisconnect(e){return(0,n.onDisconnect)(this.ref(e)).cancel()}transaction(e,t){return(0,n.runTransaction)(this.ref(e),i=>t(i))}query(e,t={}){let i=this.ref(e);return t.orderBy==="child"&&t.childKey&&(i=(0,n.query)(i,(0,n.orderByChild)(t.childKey))),t.orderBy==="key"&&(i=(0,n.query)(i,(0,n.orderByKey)())),t.orderBy==="value"&&(i=(0,n.query)(i,(0,n.orderByValue)())),t.startAt!=null&&(i=(0,n.query)(i,(0,n.startAt)(t.startAt))),t.endAt!=null&&(i=(0,n.query)(i,(0,n.endAt)(t.endAt))),t.equalTo!=null&&(i=(0,n.query)(i,(0,n.equalTo)(t.equalTo))),t.limitFirst!=null&&(i=(0,n.query)(i,(0,n.limitToFirst)(t.limitFirst))),t.limitLast!=null&&(i=(0,n.query)(i,(0,n.limitToLast)(t.limitLast))),i}};var l=async(o,e)=>{let t=await fetch(o,e);if(!t.ok){let i=await t.json().catch(()=>({}));throw new Error(JSON.stringify({status:t.status,statusText:t.statusText,...i}))}return t&&t.json()};var T=o=>{let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",t="";for(let i=0;i<o;i++)t+=e.charAt(Math.floor(Math.random()*e.length));return t};var c=require("@onlive.ai/tracker"),g="chatbot",h=class o{static hasSession(){return!!c.Session.getCookie(g)}static getSession(e={role:"guest",regenerate:!1}){e.regenerate&&(c.Session.id=c.Generator.uuid(),c.Session.deleteCookie(g));let t=c.Session.getCookie(g);return t&&o.isValidSession(t,e.role)?t:o.createSession(e.role)}static createSession(e){let t={externalId:e==="agent"?String(o.getUserId()||c.Session.id):c.Session.id,secret:T(16),createdAt:new Date().toISOString()};return c.Session.setCookie(g,t,3600*24*365),t}static isValidSession(e,t){if(t==="guest")return!0;let i=o.getUserId();return!!(i&&String(i)===e.externalId)}static getUserId(){return c.Session.getCookie("user-id",{objectKey:"userId",storageKey:"user",storageType:"localStorage",ttl:3600*24*365,preserveData:!0})}static updateSessionWithRegistrationData(e){let t=c.Session.getCookie(g);if(t||(t=o.createSession("guest")),t){let i={...t,registrationData:e};c.Session.setCookie(g,i,3600*24*365)}}static hasRegistrationData(){return!!c.Session.getCookie(g)?.registrationData}static async getAgentInfo(e){return fetch(`${e}/api/v1/auth/user-info`,{credentials:"include"}).then(t=>t.json())}static getRegistrationData(){return c.Session.getCookie(g)?.registrationData}};var C="lk.chat",I="lk.transcription",P="lk.events",R="typing-indicator";var y=class extends p.Room{},f=class{constructor(e){this.listeners=new Set;this.typingListeners=new Set;this.transcriptionMap=new Map;this.abortControllers={register:new AbortController,createRoom:new AbortController,closeRoom:new AbortController,evaluateRoom:new AbortController,persistMessage:new AbortController,sendMessageReport:new AbortController,deleteMessageReport:new AbortController,updateMessageReactions:new AbortController,getRooms:new AbortController};this.authToken=null;this.firebaseUnsubscribers={};this.seenRequestIds=new Set;this.lastSnapshotById=new Map;this.handleIncomingMessage=async(e,t)=>{let i=e?.info?.id,s=e.info?.attributes?.["lk.segment_id"];s&&(this.transcriptionMap.has(s)?i=this.transcriptionMap.get(s)||"":this.transcriptionMap.set(s,i));let r=t?.identity?this.room.getParticipantByIdentity(t.identity):void 0,a="";for await(let d of e)a+=d,this.emitMessage({id:i,timestamp:Date.now(),message:a,assets:JSON.parse(e.info?.attributes?.assets||"[]"),from:r});this.messagePersistence==="client"&&this.persistMessage({roomId:this.room.id,content:a,externalId:i,identity:r?.identity,kind:r?.kind})};this.emitMessage=e=>{for(let t of this.listeners)t([e])};this.handleDataReceived=(e,t,i,s)=>{if(s===R)try{let r=JSON.parse(new TextDecoder().decode(e));if(r.type==="typing"&&r.participantId!==this.room.localParticipant.identity){let a={type:"typing",isTyping:r.isTyping,timestamp:r.timestamp,participantId:r.participantId};this.emitTypingIndicator(a)}}catch(r){console.warn("Failed to parse typing indicator:",r)}};this.emitTypingIndicator=e=>{for(let t of this.typingListeners)t(e)};this.apiUrl=e.apiUrl,this.authUrl=e.authUrl,this.organizationId=e.organizationId,this.channelTopic=e.channelTopic||C,this.transcriptionTopic=e.transcriptionTopic||I,this.eventsTopic=e.eventsTopic||P,this.messagePersistence=e.messagePersistence||"disabled",this.room=this.createRoomInstance(),e.firebaseConfig&&this.initializeFirebase(e.firebaseConfig)}createRoomInstance(){return new y({adaptiveStream:!0,dynacast:!0})}ensureRoom(){return this.room||(this.room=this.createRoomInstance()),this.room}initializeFirebase(e){this.firebaseApi=new u({config:e}),this.presencePath=`orgs/${this.organizationId}/presence`,this.callsPath=`orgs/${this.organizationId}/calls`}initializeRoomHandlers(){try{this.room.unregisterTextStreamHandler(this.channelTopic),this.room.unregisterTextStreamHandler(this.transcriptionTopic)}catch{}this.room.off(p.RoomEvent.DataReceived,this.handleDataReceived),this.room.registerTextStreamHandler(this.channelTopic,this.handleIncomingMessage),this.room.registerTextStreamHandler(this.transcriptionTopic,this.handleIncomingMessage),this.room.on(p.RoomEvent.DataReceived,this.handleDataReceived)}async registerUser(e,t,i,s){let r=await l(`${this.apiUrl}/users/register`,{method:"POST",body:JSON.stringify({externalId:e,secret:t,...i,metadata:s}),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.register.signal});if(!r.token)throw new Error("Registration failed: No token received from server");return this.authToken=r.token,r}async registerAgent(e,t){let i=m.Session.getCookie("livekit-agent-token");if(i){if(this.decodeJwtPayload(i)?.username===t.name)return this.authToken=i,i;m.Session.deleteCookie("livekit-agent-token")}let s=await l(`${this.authUrl}/admins/register`,{method:"POST",body:JSON.stringify({externalId:e,name:t.name,email:t.email,avatar:t.avatar}),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},credentials:"include",signal:this.abortControllers.register.signal});return m.Session.setCookie("livekit-agent-token",s.token,1440*60),this.authToken=s.token,s.token}decodeJwtPayload(e){try{let t=e.split(".");if(t.length!==3)return null;let i=t[1],s=atob(i.replace(/-/g,"+").replace(/_/g,"/"));return JSON.parse(s)}catch{return null}}async createRoom(e){if(!this.authToken)throw new Error("Cannot create room: No authentication token. Call registerUser() first.");this.room=this.ensureRoom();let{initialMessage:t,...i}=e,s=await l(`${this.apiUrl}/rooms`,{method:"POST",body:JSON.stringify(i),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.createRoom.signal});return this.setRoomMetadata(s),this.setupParticipantAttributesHandler(),this.room.connect(s.wsURL,s.token).then(async()=>{if(t)try{await this.sendMessage(t)}catch(r){console.error("[ConversationService] Failed to send initial message:",r)}}),this.initializeRoomHandlers(),this.room}async joinRoom(e,t,i,s){let r=await l(`${this.apiUrl}/rooms/${e}/join`,{method:"POST",body:JSON.stringify({timezone:t,language:i,...s??{}}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.createRoom.signal});return this.setRoomMetadata(r),this.setupParticipantAttributesHandler(),await this.room.connect(r.wsURL,r.token),this.initializeRoomHandlers(),this.room}setRoomMetadata(e){this.room.id=e.id,this.room.groupId=e.groupId,this.room.createdAt=e.createdAt,this.room.connectedAt=new Date().toISOString(),this.room.affinity=e.affinity}setupParticipantAttributesHandler(){this.room.on(p.RoomEvent.ParticipantAttributesChanged,e=>{e.identity===this.room.localParticipant.identity&&h.updateSessionWithRegistrationData(e.attributes)})}async evaluateRoom(e){let t=e.roomId||this.room?.id;if(!t)throw new Error("Room ID is required for evaluation");return l(`${this.apiUrl}/rooms/${t}/evaluate`,{method:"POST",body:JSON.stringify({rating:e.rating,comment:e.comment}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.evaluateRoom.signal})}async closeRoom(){this.room&&(await l(`${this.apiUrl}/rooms/${this.room.id}/close`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.closeRoom.signal}),await this.stopAndUnpublishLocalTracks())}async disconnect(){this.room&&(await this.stopAndUnpublishLocalTracks(),this.room.removeAllListeners(),await this.room.disconnect(),this.room=null)}async stopAndUnpublishLocalTracks(){let e=this.room?.localParticipant;if(!e)return;await Promise.allSettled([e.setMicrophoneEnabled(!1),e.setCameraEnabled(!1),e.setScreenShareEnabled(!1)]);let t=Array.from(e.trackPublications.values());await Promise.all(t.map(async i=>{let s=i.track;if(s)try{await e.unpublishTrack(s,!0)}catch{s.stop()}}))}async disconnectAndCloseRoom(){await this.closeRoom(),await this.disconnect()}async readRoom(e){return l(`${this.apiUrl}/rooms/${e}/read`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.persistMessage.signal})}async getRooms(e){let t=new URLSearchParams;return e.page&&t.append("page",e.page.toString()),e.limit&&t.append("limit",e.limit.toString()),e.offset&&t.append("offset",e.offset.toString()),e.orderBy&&t.append("orderBy",e.orderBy),e.orderDir&&t.append("orderDir",e.orderDir),e.ids?.length&&t.append("ids",e.ids.join(",")),e.with?.length&&t.append("with",e.with.join(",")),e.count?.length&&t.append("count",e.count.join(",")),e.latestOnly&&t.append("latestOnly",e.latestOnly.toString()),e.includeUnread&&t.append("includeUnread",e.includeUnread.toString()),e.roomStatus&&t.append("roomStatus",e.roomStatus),e.archived&&t.append("archived",e.archived.toString()),e.participantIds?.length&&t.append("participantIds",e.participantIds.join(",")),e.participantExternalIds?.length&&t.append("participantExternalIds",e.participantExternalIds.join(",")),e.groupId&&t.append("groupId",e.groupId),e.hasMessages!==void 0&&t.append("hasMessages",e.hasMessages.toString()),l(`${this.authUrl}/rooms?${t}`,{method:"GET",headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},credentials:"include",signal:this.abortControllers.getRooms.signal})}async sendMessage(e,t){let i=await this.room.localParticipant.sendText(e,{topic:this.channelTopic,attributes:t});this.emitMessage({id:i.id,timestamp:Date.now(),message:e,assets:JSON.parse(t?.assets||"[]"),from:this.room.localParticipant}),this.messagePersistence==="client"&&this.persistMessage({roomId:this.room.id,content:e,externalId:i.id,identity:this.room.localParticipant?.identity,kind:this.room.localParticipant?.kind})}async persistMessage(e){return l(`${this.apiUrl}/messages/create`,{method:"POST",body:JSON.stringify(e),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.persistMessage.signal})}async getMessages(e){let t=new URLSearchParams;return e.limit&&t.append("limit",e.limit.toString()),e.with&&t.append("with",e.with.join(",")),(await l(`${this.apiUrl}/messages/search${t.size?`?${t.toString()}`:""}`,{method:"POST",body:JSON.stringify(e),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.createRoom.signal})).items}async sendMessageReport(e){try{return l(`${this.apiUrl}/messages/${e.messageId}/report`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.sendMessageReport.signal})}catch(t){console.error("Error sending message report:",t)}}async deleteMessageReport(e){try{return l(`${this.apiUrl}/messages/${e.messageId}/report`,{method:"DELETE",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.deleteMessageReport.signal})}catch(t){console.error("Error deleting message report:",t)}}async updateMessageReactions(e){try{return l(`${this.apiUrl}/messages/${e.messageId}/reactions`,{method:"PATCH",body:JSON.stringify({add:e.add||[],remove:e.remove||[]}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.updateMessageReactions.signal})}catch(t){console.error("Error updating message reactions:",t)}}subscribeMessages(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}async sendTypingIndicator(e){if(!(!this.room||this.room.state!=="connected"))try{let t=new TextEncoder().encode(JSON.stringify({type:"typing",isTyping:e,timestamp:Date.now(),participantId:this.room.localParticipant.identity}));await this.room.localParticipant.publishData(t,{reliable:!1,topic:R})}catch(t){console.warn("Failed to send typing indicator:",t)}}subscribeTypingIndicators(e){return this.typingListeners.add(e),()=>{this.typingListeners.delete(e)}}unsubscribeTypingIndicators(e){this.typingListeners.delete(e)}async sendContextualEvent(e){try{let t=JSON.stringify(e);await this.room.localParticipant.sendText(t,{topic:this.eventsTopic})}catch(t){console.warn("Failed to send event:",t)}}async requestNewRoom(e){return l(`${this.apiUrl}/rooms/request-new`,{method:"POST",body:JSON.stringify(e),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}async confirmRoomRequest(e){return l(`${this.apiUrl}/rooms/confirm-call`,{method:"POST",body:JSON.stringify({roomId:e}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}async cancelRoomRequest(e){return l(`${this.apiUrl}/rooms/cancel-call`,{method:"POST",body:JSON.stringify({roomId:e}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}async finishCall(){if(this.room?.id)return l(`${this.apiUrl}/rooms/finish-call`,{method:"POST",body:JSON.stringify({roomId:this.room.id}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}isFirebaseEnabled(){return!!(this.firebaseApi&&this.presencePath&&this.callsPath)}getFirebase(){if(!this.firebaseApi||!this.presencePath||!this.callsPath)throw new Error("Firebase is not initialized. Provide firebaseConfig in constructor.");return{api:this.firebaseApi,presencePath:this.presencePath,callsPath:this.callsPath}}buildAgentPresencePath(e){return`${this.presencePath}/${e}`}onPresenceChange(e){let{api:t,presencePath:i}=this.getFirebase();return t.onChildChanged(i,(s,r)=>e(s,r))}onPresenceAgentChange(e,t){let{api:i}=this.getFirebase();return i.onValue(this.buildAgentPresencePath(e),(s,r)=>t(s,r))}async createCallRequest(e){let{api:t,callsPath:i}=this.getFirebase(),r=(await l(`${this.apiUrl}/rooms/call-request`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},body:JSON.stringify(e)})).id;return t.onDisconnectUpdate(`${i}/${r}`,{status:"disconnected"}),r}onNewCallRequest(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildAdded(i,(s,r)=>e(s,{...r,id:s}))}onCallRequestChange(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildChanged(i,(s,r)=>e(s,{...r,id:s}))}onCallRequestRemoved(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildRemoved(i,s=>e(s))}async acceptCallRequest(e){let{api:t,callsPath:i}=this.getFirebase();return await t.cancelOnDisconnect(`${i}/${e}`),t.update(`${i}/${e}`,{status:"accepted"})}async cancelCallRequest(e){let{api:t,callsPath:i}=this.getFirebase();await t.cancelOnDisconnect(`${i}/${e}`),await l(`${this.apiUrl}/rooms/call-request/cancel`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},body:JSON.stringify({callId:e})})}async cancelOnDisconnect(e){let{api:t,callsPath:i}=this.getFirebase();await t.cancelOnDisconnect(`${i}/${e}`)}subscribePendingRequests(e,t={}){let{api:i,callsPath:s}=this.getFirebase();t.resetSeen&&this.seenRequestIds.clear(),this.firebaseUnsubscribers["pending-requests"]?.();let r=i.query(s,{orderBy:"child",childKey:"status",equalTo:"pending"}),a=i.onChildAddedQuery(r,(d,A)=>{if(!d||this.seenRequestIds.has(d))return;let O={...A,id:d};this.seenRequestIds.add(d),e(d,O)});return this.firebaseUnsubscribers["pending-requests"]=a,()=>{a?.(),delete this.firebaseUnsubscribers["pending-requests"]}}subscribeRequestChanges(e){let{api:t,callsPath:i}=this.getFirebase();this.firebaseUnsubscribers["request-changes"]?.();let s=t.onChildChanged(i,(r,a)=>{if(!r)return;let d=JSON.stringify(a);this.lastSnapshotById.get(r)!==d&&(this.lastSnapshotById.set(r,d),e(r,{...a,id:r}))});return this.firebaseUnsubscribers["request-changes"]=s,()=>{s?.(),delete this.firebaseUnsubscribers["request-changes"]}}async tryAcceptRequest(e){let{api:t,callsPath:i}=this.getFirebase(),s=`${i}/${e}`;return await t.transaction(s,a=>a&&(a.status==="pending"?{...a,status:"accepted"}:a)),(await t.getOnce(s))?.status==="accepted"}onRoomSync(e,t){let{api:i}=this.getFirebase(),s=`orgs/${this.organizationId}/rooms/${e}/sync`;return i.onValue(s,(r,a)=>{t(a)})}async clearRoomSync(e,t){let{api:i}=this.getFirebase(),s=`orgs/${this.organizationId}/rooms/${e}/sync`;await i.write(s,{needsSync:!1,reason:t||null,timestamp:Date.now()})}onNewRoomRequest(e,t){let{api:i}=this.getFirebase(),s=`orgs/${this.organizationId}/rooms/${e}/call`;return i.onValue(s,(r,a)=>{t(a)})}unsubscribeAllFirebase(){Object.values(this.firebaseUnsubscribers).forEach(e=>e?.()),this.firebaseUnsubscribers={}}async destroy(){this.unsubscribeAllFirebase(),this.listeners.clear(),this.typingListeners.clear(),this.transcriptionMap.clear(),this.seenRequestIds.clear(),this.lastSnapshotById.clear(),Object.values(this.abortControllers).forEach(e=>e.abort()),await this.disconnect()}};0&&(module.exports={ConversationService,Room});
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
+ "use strict";var b=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var x=Object.prototype.hasOwnProperty;var M=(l,e)=>{for(var t in e)b(l,t,{get:e[t],enumerable:!0})},z=(l,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of w(e))!x.call(l,s)&&s!==t&&b(l,s,{get:()=>e[s],enumerable:!(i=k(e,s))||i.enumerable});return l};var q=l=>z(b({},"__esModule",{value:!0}),l);var U={};M(U,{ConversationService:()=>f,Room:()=>y});module.exports=q(U);var m=require("@onlive.ai/tracker/session"),p=require("livekit-client");var v=require("firebase/app"),n=require("firebase/database"),u=class{constructor(e){this.onChildChanged=(e,t)=>(0,n.onChildChanged)(this.ref(e),i=>t(i.key||"",i.val(),i));this.onChildRemoved=(e,t)=>(0,n.onChildRemoved)(this.ref(e),i=>t(i.key||"",i.val(),i));this.onChildChangedQuery=(e,t)=>(0,n.onChildChanged)(e,i=>t(i.key||"",i.val(),i));this.onChildRemovedQuery=(e,t)=>(0,n.onChildRemoved)(e,i=>t(i.key||"",i.val(),i));let t=(0,v.initializeApp)(e.config);this.db=(0,n.getDatabase)(t)}ref(e){return(0,n.ref)(this.db,e)}async getOnce(e){let t=await(0,n.get)(this.ref(e));return t.exists()?t.val():null}async getOnceQuery(e){let t=await(0,n.get)(e),i=[];return t.exists()&&t.forEach(s=>{i.push({key:s.key||"",value:s.val()})}),i}onValue(e,t){return(0,n.onValue)(this.ref(e),i=>t(i.key??"",i.val(),i),i=>console.error("onValue error",i))}onValueQuery(e,t){return(0,n.onValue)(e,i=>t(i.key??"",i.val(),i),i=>console.error("onValueQuery error",i))}onChildAdded(e,t){return(0,n.onChildAdded)(this.ref(e),i=>t(i.key||"",i.val(),i),i=>console.error("onChildAdded error",i))}onChildAddedQuery(e,t){return(0,n.onChildAdded)(e,i=>t(i.key||"",i.val(),i),i=>console.error("onChildAddedQuery error",i))}write(e,t){return(0,n.set)(this.ref(e),t)}update(e,t){return(0,n.update)(this.ref(e),t)}remove(e){return(0,n.remove)(this.ref(e))}async push(e,t){let i=(0,n.push)(this.ref(e));return await(0,n.set)(i,t),i.key}onDisconnectUpdate(e,t){return(0,n.onDisconnect)(this.ref(e)).update(t)}cancelOnDisconnect(e){return(0,n.onDisconnect)(this.ref(e)).cancel()}transaction(e,t){return(0,n.runTransaction)(this.ref(e),i=>t(i))}query(e,t={}){let i=this.ref(e);return t.orderBy==="child"&&t.childKey&&(i=(0,n.query)(i,(0,n.orderByChild)(t.childKey))),t.orderBy==="key"&&(i=(0,n.query)(i,(0,n.orderByKey)())),t.orderBy==="value"&&(i=(0,n.query)(i,(0,n.orderByValue)())),t.startAt!=null&&(i=(0,n.query)(i,(0,n.startAt)(t.startAt))),t.endAt!=null&&(i=(0,n.query)(i,(0,n.endAt)(t.endAt))),t.equalTo!=null&&(i=(0,n.query)(i,(0,n.equalTo)(t.equalTo))),t.limitFirst!=null&&(i=(0,n.query)(i,(0,n.limitToFirst)(t.limitFirst))),t.limitLast!=null&&(i=(0,n.query)(i,(0,n.limitToLast)(t.limitLast))),i}};var o=async(l,e)=>{let t=await fetch(l,e);if(!t.ok){let i=await t.json().catch(()=>({}));throw new Error(JSON.stringify({status:t.status,statusText:t.statusText,...i}))}return t&&t.json()};var T=l=>{let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",t="";for(let i=0;i<l;i++)t+=e.charAt(Math.floor(Math.random()*e.length));return t};var I=require("@onlive.ai/tracker/generator"),c=require("@onlive.ai/tracker/session"),d="chatbot",h=class l{static hasSession(){return!!c.Session.getCookie(d)}static getSession(e={role:"guest",regenerate:!1}){e.regenerate&&(c.Session.id=I.Generator.uuid(),c.Session.deleteCookie(d));let t=c.Session.getCookie(d);return t&&l.isValidSession(t,e.role)?t:l.createSession(e.role)}static createSession(e){let t={externalId:e==="agent"?String(l.getUserId()||c.Session.id):c.Session.id,secret:T(16),createdAt:new Date().toISOString()};return c.Session.setCookie(d,t,3600*24*365),t}static isValidSession(e,t){if(t==="guest")return!0;let i=l.getUserId();return!!(i&&String(i)===e.externalId)}static getUserId(){return c.Session.getCookie("user-id",{objectKey:"userId",storageKey:"user",storageType:"localStorage",ttl:3600*24*365,preserveData:!0})}static updateSessionWithRegistrationData(e){let t=c.Session.getCookie(d);if(t||(t=l.createSession("guest")),t){let i={...t,registrationData:e};c.Session.setCookie(d,i,3600*24*365)}}static hasRegistrationData(){return!!c.Session.getCookie(d)?.registrationData}static async getAgentInfo(e){return fetch(`${e}/api/v1/auth/user-info`,{credentials:"include"}).then(t=>t.json())}static getRegistrationData(){return c.Session.getCookie(d)?.registrationData}};var C="lk.chat",A="lk.transcription",S="lk.events",R="typing-indicator";var y=class extends p.Room{},f=class{constructor(e){this.listeners=new Set;this.typingListeners=new Set;this.transcriptionMap=new Map;this.abortControllers={register:new AbortController,createRoom:new AbortController,quickStart:new AbortController,closeRoom:new AbortController,evaluateRoom:new AbortController,persistMessage:new AbortController,sendMessageReport:new AbortController,deleteMessageReport:new AbortController,updateMessageReactions:new AbortController,getRooms:new AbortController};this.authToken=null;this.firebaseUnsubscribers={};this.seenRequestIds=new Set;this.lastSnapshotById=new Map;this.handleIncomingMessage=async(e,t)=>{let i=e?.info?.id,s=e.info?.attributes?.["lk.segment_id"];s&&(this.transcriptionMap.has(s)?i=this.transcriptionMap.get(s)||"":this.transcriptionMap.set(s,i));let r=t?.identity?this.room.getParticipantByIdentity(t.identity):void 0,a="";for await(let g of e)a+=g,this.emitMessage({id:i,timestamp:Date.now(),message:a,assets:JSON.parse(e.info?.attributes?.assets||"[]"),from:r});this.messagePersistence==="client"&&this.persistMessage({roomId:this.room.id,content:a,externalId:i,identity:r?.identity,kind:r?.kind})};this.emitMessage=e=>{for(let t of this.listeners)t([e])};this.handleDataReceived=(e,t,i,s)=>{if(s===R)try{let r=JSON.parse(new TextDecoder().decode(e));if(r.type==="typing"&&r.participantId!==this.room.localParticipant.identity){let a={type:"typing",isTyping:r.isTyping,timestamp:r.timestamp,participantId:r.participantId};this.emitTypingIndicator(a)}}catch(r){console.warn("Failed to parse typing indicator:",r)}};this.emitTypingIndicator=e=>{for(let t of this.typingListeners)t(e)};this.apiUrl=e.apiUrl,this.authUrl=e.authUrl,this.organizationId=e.organizationId,this.channelTopic=e.channelTopic||C,this.transcriptionTopic=e.transcriptionTopic||A,this.eventsTopic=e.eventsTopic||S,this.messagePersistence=e.messagePersistence||"disabled",this.room=this.createRoomInstance(),e.firebaseConfig&&this.initializeFirebase(e.firebaseConfig)}createRoomInstance(){return new y({adaptiveStream:!0,dynacast:!0})}ensureRoom(){return this.room||(this.room=this.createRoomInstance()),this.room}initializeFirebase(e){this.firebaseApi=new u({config:e}),this.presencePath=`orgs/${this.organizationId}/presence`,this.callsPath=`orgs/${this.organizationId}/calls`}initializeRoomHandlers(){try{this.room.unregisterTextStreamHandler(this.channelTopic),this.room.unregisterTextStreamHandler(this.transcriptionTopic)}catch{}this.room.off(p.RoomEvent.DataReceived,this.handleDataReceived),this.room.registerTextStreamHandler(this.channelTopic,this.handleIncomingMessage),this.room.registerTextStreamHandler(this.transcriptionTopic,this.handleIncomingMessage),this.room.on(p.RoomEvent.DataReceived,this.handleDataReceived)}async registerUser(e,t,i,s){let r=await o(`${this.apiUrl}/users/register`,{method:"POST",body:JSON.stringify({externalId:e,secret:t,...i,metadata:s}),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.register.signal});if(!r.token)throw new Error("Registration failed: No token received from server");return this.authToken=r.token,r}async registerAgent(e,t){let i=m.Session.getCookie("livekit-agent-token");if(i){if(this.decodeJwtPayload(i)?.username===t.name)return this.authToken=i,i;m.Session.deleteCookie("livekit-agent-token")}let s=await o(`${this.authUrl}/admins/register`,{method:"POST",body:JSON.stringify({externalId:e,name:t.name,email:t.email,avatar:t.avatar}),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},credentials:"include",signal:this.abortControllers.register.signal});return m.Session.setCookie("livekit-agent-token",s.token,1440*60),this.authToken=s.token,s.token}decodeJwtPayload(e){try{let t=e.split(".");if(t.length!==3)return null;let i=t[1],s=atob(i.replace(/-/g,"+").replace(/_/g,"/"));return JSON.parse(s)}catch{return null}}async quickStart(e){console.log("[ConversationService] Starting quickStart with options:",e),this.room=this.ensureRoom();let t=await o(`${this.apiUrl}/rooms/quick-start`,{method:"POST",body:JSON.stringify(e),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.quickStart.signal});if(!t.user?.token)throw new Error("Quick start failed: No user token received from server");this.authToken=t.user.token;let i={id:t.room.id,groupId:t.room.groupId||"",token:t.room.token,wsURL:t.room.wsURL,createdAt:t.room.createdAt||new Date().toISOString(),affinity:t.room.affinity};return this.setRoomMetadata(i),this.setupParticipantAttributesHandler(),this.room.connect(i.wsURL,i.token),this.initializeRoomHandlers(),this.room}async createRoom(e){if(!this.authToken)throw new Error("Cannot create room: No authentication token. Call registerUser() first.");this.room=this.ensureRoom();let{initialMessage:t,...i}=e,s=await o(`${this.apiUrl}/rooms`,{method:"POST",body:JSON.stringify(i),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.createRoom.signal});return this.setRoomMetadata(s),this.setupParticipantAttributesHandler(),this.room.connect(s.wsURL,s.token).then(async()=>{if(t)try{await this.sendMessage(t)}catch(r){console.error("[ConversationService] Failed to send initial message:",r)}}),this.initializeRoomHandlers(),this.room}async joinRoom(e,t,i,s){let r=await o(`${this.apiUrl}/rooms/${e}/join`,{method:"POST",body:JSON.stringify({timezone:t,language:i,...s??{}}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.createRoom.signal});return this.setRoomMetadata(r),this.setupParticipantAttributesHandler(),await this.room.connect(r.wsURL,r.token),this.initializeRoomHandlers(),this.room}setRoomMetadata(e){this.room.id=e.id,this.room.groupId=e.groupId,this.room.createdAt=e.createdAt,this.room.connectedAt=new Date().toISOString(),this.room.affinity=e.affinity}setupParticipantAttributesHandler(){this.room.on(p.RoomEvent.ParticipantAttributesChanged,e=>{e.identity===this.room.localParticipant.identity&&h.updateSessionWithRegistrationData(e.attributes)})}async evaluateRoom(e){let t=e.roomId||this.room?.id;if(!t)throw new Error("Room ID is required for evaluation");return o(`${this.apiUrl}/rooms/${t}/evaluate`,{method:"POST",body:JSON.stringify({rating:e.rating,comment:e.comment}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.evaluateRoom.signal})}async closeRoom(){this.room&&(await o(`${this.apiUrl}/rooms/${this.room.id}/close`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.closeRoom.signal}),await this.stopAndUnpublishLocalTracks())}async disconnect(){this.room&&(await this.stopAndUnpublishLocalTracks(),this.room.removeAllListeners(),await this.room.disconnect(),this.room=null)}async stopAndUnpublishLocalTracks(){let e=this.room?.localParticipant;if(!e)return;await Promise.allSettled([e.setMicrophoneEnabled(!1),e.setCameraEnabled(!1),e.setScreenShareEnabled(!1)]);let t=Array.from(e.trackPublications.values());await Promise.all(t.map(async i=>{let s=i.track;if(s)try{await e.unpublishTrack(s,!0)}catch{s.stop()}}))}async disconnectAndCloseRoom(){await this.closeRoom(),await this.disconnect()}async readRoom(e){return o(`${this.apiUrl}/rooms/${e}/read`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.persistMessage.signal})}async getRooms(e){let t=new URLSearchParams;return e.page&&t.append("page",e.page.toString()),e.limit&&t.append("limit",e.limit.toString()),e.offset&&t.append("offset",e.offset.toString()),e.orderBy&&t.append("orderBy",e.orderBy),e.orderDir&&t.append("orderDir",e.orderDir),e.ids?.length&&t.append("ids",e.ids.join(",")),e.with?.length&&t.append("with",e.with.join(",")),e.count?.length&&t.append("count",e.count.join(",")),e.latestOnly&&t.append("latestOnly",e.latestOnly.toString()),e.includeUnread&&t.append("includeUnread",e.includeUnread.toString()),e.roomStatus&&t.append("roomStatus",e.roomStatus),e.archived&&t.append("archived",e.archived.toString()),e.participantIds?.length&&t.append("participantIds",e.participantIds.join(",")),e.participantExternalIds?.length&&t.append("participantExternalIds",e.participantExternalIds.join(",")),e.groupId&&t.append("groupId",e.groupId),e.hasMessages!==void 0&&t.append("hasMessages",e.hasMessages.toString()),o(`${this.authUrl}/rooms?${t}`,{method:"GET",headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},credentials:"include",signal:this.abortControllers.getRooms.signal})}async sendMessage(e,t){let i=await this.room.localParticipant.sendText(e,{topic:this.channelTopic,attributes:t});this.emitMessage({id:i.id,timestamp:Date.now(),message:e,assets:JSON.parse(t?.assets||"[]"),from:this.room.localParticipant}),this.messagePersistence==="client"&&this.persistMessage({roomId:this.room.id,content:e,externalId:i.id,identity:this.room.localParticipant?.identity,kind:this.room.localParticipant?.kind})}async persistMessage(e){return o(`${this.apiUrl}/messages/create`,{method:"POST",body:JSON.stringify(e),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.persistMessage.signal})}async getMessages(e){let t=new URLSearchParams;return e.limit&&t.append("limit",e.limit.toString()),e.with&&t.append("with",e.with.join(",")),(await o(`${this.apiUrl}/messages/search${t.size?`?${t.toString()}`:""}`,{method:"POST",body:JSON.stringify(e),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.createRoom.signal})).items}async sendMessageReport(e){try{return o(`${this.apiUrl}/messages/${e.messageId}/report`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.sendMessageReport.signal})}catch(t){console.error("Error sending message report:",t)}}async deleteMessageReport(e){try{return o(`${this.apiUrl}/messages/${e.messageId}/report`,{method:"DELETE",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.deleteMessageReport.signal})}catch(t){console.error("Error deleting message report:",t)}}async updateMessageReactions(e){try{return o(`${this.apiUrl}/messages/${e.messageId}/reactions`,{method:"PATCH",body:JSON.stringify({add:e.add||[],remove:e.remove||[]}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.updateMessageReactions.signal})}catch(t){console.error("Error updating message reactions:",t)}}subscribeMessages(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}async sendTypingIndicator(e){if(!(!this.room||this.room.state!=="connected"))try{let t=new TextEncoder().encode(JSON.stringify({type:"typing",isTyping:e,timestamp:Date.now(),participantId:this.room.localParticipant.identity}));await this.room.localParticipant.publishData(t,{reliable:!1,topic:R})}catch(t){console.warn("Failed to send typing indicator:",t)}}subscribeTypingIndicators(e){return this.typingListeners.add(e),()=>{this.typingListeners.delete(e)}}unsubscribeTypingIndicators(e){this.typingListeners.delete(e)}async sendContextualEvent(e){try{let t=JSON.stringify(e);await this.room.localParticipant.sendText(t,{topic:this.eventsTopic})}catch(t){console.warn("Failed to send event:",t)}}async requestNewRoom(e){return o(`${this.apiUrl}/rooms/request-new`,{method:"POST",body:JSON.stringify(e),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}async confirmRoomRequest(e){return o(`${this.apiUrl}/rooms/confirm-call`,{method:"POST",body:JSON.stringify({roomId:e}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}async cancelRoomRequest(e){return o(`${this.apiUrl}/rooms/cancel-call`,{method:"POST",body:JSON.stringify({roomId:e}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}async finishCall(){if(this.room?.id)return o(`${this.apiUrl}/rooms/finish-call`,{method:"POST",body:JSON.stringify({roomId:this.room.id}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}isFirebaseEnabled(){return!!(this.firebaseApi&&this.presencePath&&this.callsPath)}getFirebase(){if(!this.firebaseApi||!this.presencePath||!this.callsPath)throw new Error("Firebase is not initialized. Provide firebaseConfig in constructor.");return{api:this.firebaseApi,presencePath:this.presencePath,callsPath:this.callsPath}}buildAgentPresencePath(e){return`${this.presencePath}/${e}`}onPresenceChange(e){let{api:t,presencePath:i}=this.getFirebase();return t.onChildChanged(i,(s,r)=>e(s,r))}onPresenceAgentChange(e,t){let{api:i}=this.getFirebase();return i.onValue(this.buildAgentPresencePath(e),(s,r)=>t(s,r))}async createCallRequest(e){let{api:t,callsPath:i}=this.getFirebase(),r=(await o(`${this.apiUrl}/rooms/call-request`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},body:JSON.stringify(e)})).id;return t.onDisconnectUpdate(`${i}/${r}`,{status:"disconnected"}),r}onNewCallRequest(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildAdded(i,(s,r)=>e(s,{...r,id:s}))}onCallRequestChange(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildChanged(i,(s,r)=>e(s,{...r,id:s}))}onCallRequestRemoved(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildRemoved(i,s=>e(s))}async acceptCallRequest(e){let{api:t,callsPath:i}=this.getFirebase();return await t.cancelOnDisconnect(`${i}/${e}`),t.update(`${i}/${e}`,{status:"accepted"})}async cancelCallRequest(e){let{api:t,callsPath:i}=this.getFirebase();await t.cancelOnDisconnect(`${i}/${e}`),await o(`${this.apiUrl}/rooms/call-request/cancel`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},body:JSON.stringify({callId:e})})}async cancelOnDisconnect(e){let{api:t,callsPath:i}=this.getFirebase();await t.cancelOnDisconnect(`${i}/${e}`)}subscribePendingRequests(e,t={}){let{api:i,callsPath:s}=this.getFirebase();t.resetSeen&&this.seenRequestIds.clear(),this.firebaseUnsubscribers["pending-requests"]?.();let r=i.query(s,{orderBy:"child",childKey:"status",equalTo:"pending"}),a=i.onChildAddedQuery(r,(g,P)=>{if(!g||this.seenRequestIds.has(g))return;let O={...P,id:g};this.seenRequestIds.add(g),e(g,O)});return this.firebaseUnsubscribers["pending-requests"]=a,()=>{a?.(),delete this.firebaseUnsubscribers["pending-requests"]}}subscribeRequestChanges(e){let{api:t,callsPath:i}=this.getFirebase();this.firebaseUnsubscribers["request-changes"]?.();let s=t.onChildChanged(i,(r,a)=>{if(!r)return;let g=JSON.stringify(a);this.lastSnapshotById.get(r)!==g&&(this.lastSnapshotById.set(r,g),e(r,{...a,id:r}))});return this.firebaseUnsubscribers["request-changes"]=s,()=>{s?.(),delete this.firebaseUnsubscribers["request-changes"]}}async tryAcceptRequest(e){let{api:t,callsPath:i}=this.getFirebase(),s=`${i}/${e}`;return await t.transaction(s,a=>a&&(a.status==="pending"?{...a,status:"accepted"}:a)),(await t.getOnce(s))?.status==="accepted"}onRoomSync(e,t){let{api:i}=this.getFirebase(),s=`orgs/${this.organizationId}/rooms/${e}/sync`;return i.onValue(s,(r,a)=>{t(a)})}async clearRoomSync(e,t){let{api:i}=this.getFirebase(),s=`orgs/${this.organizationId}/rooms/${e}/sync`;await i.write(s,{needsSync:!1,reason:t||null,timestamp:Date.now()})}onNewRoomRequest(e,t){let{api:i}=this.getFirebase(),s=`orgs/${this.organizationId}/rooms/${e}/call`;return i.onValue(s,(r,a)=>{t(a)})}unsubscribeAllFirebase(){Object.values(this.firebaseUnsubscribers).forEach(e=>e?.()),this.firebaseUnsubscribers={}}async destroy(){this.unsubscribeAllFirebase(),this.listeners.clear(),this.typingListeners.clear(),this.transcriptionMap.clear(),this.seenRequestIds.clear(),this.lastSnapshotById.clear(),Object.values(this.abortControllers).forEach(e=>e.abort()),await this.disconnect()}};0&&(module.exports={ConversationService,Room});
@@ -1,6 +1,6 @@
1
- /*! @onlive.ai/common-121 v0.2.179 | © 2026 Onlive.ai */
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
2
  import { Room as Room$1 } from 'livekit-client';
3
- import { ConversationServiceOptions, UserApiResponse, AgentData, CreateRoomOptions, EvaluateRoomOptions, GetRoomsOptions, RoomsApiResponse, PersistMessageOptions, MessagesApiResponse, GetMessagesOptions, ApiMessage, MessageReportOptions, MessageReactionOptions, MessageListener, TypingListener, ContextualEvent, RequestNewRoomOptions, RoomApiResponse, CallRequest, CallRequestListener, RoomSyncData, NewRoomRequestData } from './conversation.types.cjs';
3
+ import { ConversationServiceOptions, UserApiResponse, AgentData, QuickStartOptions, CreateRoomOptions, EvaluateRoomOptions, GetRoomsOptions, RoomsApiResponse, PersistMessageOptions, MessagesApiResponse, GetMessagesOptions, ApiMessage, MessageReportOptions, MessageReactionOptions, MessageListener, TypingListener, ContextualEvent, RequestNewRoomOptions, RoomApiResponse, CallRequest, CallRequestListener, RoomSyncData, NewRoomRequestData } from './conversation.types.cjs';
4
4
  import '@livekit/components-core';
5
5
  import '../firebase/firebase-api.cjs';
6
6
  import 'firebase/database';
@@ -151,6 +151,19 @@ declare class ConversationService {
151
151
  * @returns {{ username?: string; sub?: string; iat?: number; exp?: number } | null} Decoded payload or null if invalid.
152
152
  */
153
153
  private decodeJwtPayload;
154
+ /**
155
+ * Performs a unified user registration and room creation in a single HTTP call.
156
+ *
157
+ * This method combines the `registerUser` and `createRoom` steps into one request,
158
+ * reducing latency by eliminating the intermediate round-trip and JWT authentication overhead.
159
+ * It does not require a prior authentication token — only the organization header.
160
+ *
161
+ * @async
162
+ * @param {QuickStartOptions} options - Combined user and room options.
163
+ * @returns {Promise<Room>} Connected room instance ready for messaging.
164
+ * @throws {Error} If the quick-start request fails or returns invalid data.
165
+ */
166
+ quickStart(options: QuickStartOptions): Promise<Room>;
154
167
  /**
155
168
  * Creates a new conversation room.
156
169
  *
@@ -1,6 +1,6 @@
1
- /*! @onlive.ai/common-121 v0.2.179 | © 2026 Onlive.ai */
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
2
  import { Room as Room$1 } from 'livekit-client';
3
- import { ConversationServiceOptions, UserApiResponse, AgentData, CreateRoomOptions, EvaluateRoomOptions, GetRoomsOptions, RoomsApiResponse, PersistMessageOptions, MessagesApiResponse, GetMessagesOptions, ApiMessage, MessageReportOptions, MessageReactionOptions, MessageListener, TypingListener, ContextualEvent, RequestNewRoomOptions, RoomApiResponse, CallRequest, CallRequestListener, RoomSyncData, NewRoomRequestData } from './conversation.types.js';
3
+ import { ConversationServiceOptions, UserApiResponse, AgentData, QuickStartOptions, CreateRoomOptions, EvaluateRoomOptions, GetRoomsOptions, RoomsApiResponse, PersistMessageOptions, MessagesApiResponse, GetMessagesOptions, ApiMessage, MessageReportOptions, MessageReactionOptions, MessageListener, TypingListener, ContextualEvent, RequestNewRoomOptions, RoomApiResponse, CallRequest, CallRequestListener, RoomSyncData, NewRoomRequestData } from './conversation.types.js';
4
4
  import '@livekit/components-core';
5
5
  import '../firebase/firebase-api.js';
6
6
  import 'firebase/database';
@@ -151,6 +151,19 @@ declare class ConversationService {
151
151
  * @returns {{ username?: string; sub?: string; iat?: number; exp?: number } | null} Decoded payload or null if invalid.
152
152
  */
153
153
  private decodeJwtPayload;
154
+ /**
155
+ * Performs a unified user registration and room creation in a single HTTP call.
156
+ *
157
+ * This method combines the `registerUser` and `createRoom` steps into one request,
158
+ * reducing latency by eliminating the intermediate round-trip and JWT authentication overhead.
159
+ * It does not require a prior authentication token — only the organization header.
160
+ *
161
+ * @async
162
+ * @param {QuickStartOptions} options - Combined user and room options.
163
+ * @returns {Promise<Room>} Connected room instance ready for messaging.
164
+ * @throws {Error} If the quick-start request fails or returns invalid data.
165
+ */
166
+ quickStart(options: QuickStartOptions): Promise<Room>;
154
167
  /**
155
168
  * Creates a new conversation room.
156
169
  *
@@ -1,2 +1,2 @@
1
- /*! @onlive.ai/common-121 v0.2.179 | © 2026 Onlive.ai */
2
- import{Session as m}from"@onlive.ai/tracker";import{Room as G,RoomEvent as y}from"livekit-client";import{initializeApp as z}from"firebase/app";import{query as d,endAt as q,equalTo as U,get as R,getDatabase as $,limitToFirst as j,limitToLast as D,onChildAdded as f,onChildChanged as v,onChildRemoved as T,onDisconnect as C,onValue as I,orderByChild as N,orderByKey as L,orderByValue as E,push as F,ref as B,remove as J,runTransaction as X,set as P,startAt as Q,update as K}from"firebase/database";var p=class{constructor(e){this.onChildChanged=(e,t)=>v(this.ref(e),i=>t(i.key||"",i.val(),i));this.onChildRemoved=(e,t)=>T(this.ref(e),i=>t(i.key||"",i.val(),i));this.onChildChangedQuery=(e,t)=>v(e,i=>t(i.key||"",i.val(),i));this.onChildRemovedQuery=(e,t)=>T(e,i=>t(i.key||"",i.val(),i));let t=z(e.config);this.db=$(t)}ref(e){return B(this.db,e)}async getOnce(e){let t=await R(this.ref(e));return t.exists()?t.val():null}async getOnceQuery(e){let t=await R(e),i=[];return t.exists()&&t.forEach(s=>{i.push({key:s.key||"",value:s.val()})}),i}onValue(e,t){return I(this.ref(e),i=>t(i.key??"",i.val(),i),i=>console.error("onValue error",i))}onValueQuery(e,t){return I(e,i=>t(i.key??"",i.val(),i),i=>console.error("onValueQuery error",i))}onChildAdded(e,t){return f(this.ref(e),i=>t(i.key||"",i.val(),i),i=>console.error("onChildAdded error",i))}onChildAddedQuery(e,t){return f(e,i=>t(i.key||"",i.val(),i),i=>console.error("onChildAddedQuery error",i))}write(e,t){return P(this.ref(e),t)}update(e,t){return K(this.ref(e),t)}remove(e){return J(this.ref(e))}async push(e,t){let i=F(this.ref(e));return await P(i,t),i.key}onDisconnectUpdate(e,t){return C(this.ref(e)).update(t)}cancelOnDisconnect(e){return C(this.ref(e)).cancel()}transaction(e,t){return X(this.ref(e),i=>t(i))}query(e,t={}){let i=this.ref(e);return t.orderBy==="child"&&t.childKey&&(i=d(i,N(t.childKey))),t.orderBy==="key"&&(i=d(i,L())),t.orderBy==="value"&&(i=d(i,E())),t.startAt!=null&&(i=d(i,Q(t.startAt))),t.endAt!=null&&(i=d(i,q(t.endAt))),t.equalTo!=null&&(i=d(i,U(t.equalTo))),t.limitFirst!=null&&(i=d(i,j(t.limitFirst))),t.limitLast!=null&&(i=d(i,D(t.limitLast))),i}};var a=async(o,e)=>{let t=await fetch(o,e);if(!t.ok){let i=await t.json().catch(()=>({}));throw new Error(JSON.stringify({status:t.status,statusText:t.statusText,...i}))}return t&&t.json()};var A=o=>{let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",t="";for(let i=0;i<o;i++)t+=e.charAt(Math.floor(Math.random()*e.length));return t};import{Generator as _,Session as l}from"@onlive.ai/tracker";var g="chatbot",u=class o{static hasSession(){return!!l.getCookie(g)}static getSession(e={role:"guest",regenerate:!1}){e.regenerate&&(l.id=_.uuid(),l.deleteCookie(g));let t=l.getCookie(g);return t&&o.isValidSession(t,e.role)?t:o.createSession(e.role)}static createSession(e){let t={externalId:e==="agent"?String(o.getUserId()||l.id):l.id,secret:A(16),createdAt:new Date().toISOString()};return l.setCookie(g,t,3600*24*365),t}static isValidSession(e,t){if(t==="guest")return!0;let i=o.getUserId();return!!(i&&String(i)===e.externalId)}static getUserId(){return l.getCookie("user-id",{objectKey:"userId",storageKey:"user",storageType:"localStorage",ttl:3600*24*365,preserveData:!0})}static updateSessionWithRegistrationData(e){let t=l.getCookie(g);if(t||(t=o.createSession("guest")),t){let i={...t,registrationData:e};l.setCookie(g,i,3600*24*365)}}static hasRegistrationData(){return!!l.getCookie(g)?.registrationData}static async getAgentInfo(e){return fetch(`${e}/api/v1/auth/user-info`,{credentials:"include"}).then(t=>t.json())}static getRegistrationData(){return l.getCookie(g)?.registrationData}};var O="lk.chat",S="lk.transcription",w="lk.events",h="typing-indicator";var b=class extends G{},k=class{constructor(e){this.listeners=new Set;this.typingListeners=new Set;this.transcriptionMap=new Map;this.abortControllers={register:new AbortController,createRoom:new AbortController,closeRoom:new AbortController,evaluateRoom:new AbortController,persistMessage:new AbortController,sendMessageReport:new AbortController,deleteMessageReport:new AbortController,updateMessageReactions:new AbortController,getRooms:new AbortController};this.authToken=null;this.firebaseUnsubscribers={};this.seenRequestIds=new Set;this.lastSnapshotById=new Map;this.handleIncomingMessage=async(e,t)=>{let i=e?.info?.id,s=e.info?.attributes?.["lk.segment_id"];s&&(this.transcriptionMap.has(s)?i=this.transcriptionMap.get(s)||"":this.transcriptionMap.set(s,i));let n=t?.identity?this.room.getParticipantByIdentity(t.identity):void 0,r="";for await(let c of e)r+=c,this.emitMessage({id:i,timestamp:Date.now(),message:r,assets:JSON.parse(e.info?.attributes?.assets||"[]"),from:n});this.messagePersistence==="client"&&this.persistMessage({roomId:this.room.id,content:r,externalId:i,identity:n?.identity,kind:n?.kind})};this.emitMessage=e=>{for(let t of this.listeners)t([e])};this.handleDataReceived=(e,t,i,s)=>{if(s===h)try{let n=JSON.parse(new TextDecoder().decode(e));if(n.type==="typing"&&n.participantId!==this.room.localParticipant.identity){let r={type:"typing",isTyping:n.isTyping,timestamp:n.timestamp,participantId:n.participantId};this.emitTypingIndicator(r)}}catch(n){console.warn("Failed to parse typing indicator:",n)}};this.emitTypingIndicator=e=>{for(let t of this.typingListeners)t(e)};this.apiUrl=e.apiUrl,this.authUrl=e.authUrl,this.organizationId=e.organizationId,this.channelTopic=e.channelTopic||O,this.transcriptionTopic=e.transcriptionTopic||S,this.eventsTopic=e.eventsTopic||w,this.messagePersistence=e.messagePersistence||"disabled",this.room=this.createRoomInstance(),e.firebaseConfig&&this.initializeFirebase(e.firebaseConfig)}createRoomInstance(){return new b({adaptiveStream:!0,dynacast:!0})}ensureRoom(){return this.room||(this.room=this.createRoomInstance()),this.room}initializeFirebase(e){this.firebaseApi=new p({config:e}),this.presencePath=`orgs/${this.organizationId}/presence`,this.callsPath=`orgs/${this.organizationId}/calls`}initializeRoomHandlers(){try{this.room.unregisterTextStreamHandler(this.channelTopic),this.room.unregisterTextStreamHandler(this.transcriptionTopic)}catch{}this.room.off(y.DataReceived,this.handleDataReceived),this.room.registerTextStreamHandler(this.channelTopic,this.handleIncomingMessage),this.room.registerTextStreamHandler(this.transcriptionTopic,this.handleIncomingMessage),this.room.on(y.DataReceived,this.handleDataReceived)}async registerUser(e,t,i,s){let n=await a(`${this.apiUrl}/users/register`,{method:"POST",body:JSON.stringify({externalId:e,secret:t,...i,metadata:s}),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.register.signal});if(!n.token)throw new Error("Registration failed: No token received from server");return this.authToken=n.token,n}async registerAgent(e,t){let i=m.getCookie("livekit-agent-token");if(i){if(this.decodeJwtPayload(i)?.username===t.name)return this.authToken=i,i;m.deleteCookie("livekit-agent-token")}let s=await a(`${this.authUrl}/admins/register`,{method:"POST",body:JSON.stringify({externalId:e,name:t.name,email:t.email,avatar:t.avatar}),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},credentials:"include",signal:this.abortControllers.register.signal});return m.setCookie("livekit-agent-token",s.token,1440*60),this.authToken=s.token,s.token}decodeJwtPayload(e){try{let t=e.split(".");if(t.length!==3)return null;let i=t[1],s=atob(i.replace(/-/g,"+").replace(/_/g,"/"));return JSON.parse(s)}catch{return null}}async createRoom(e){if(!this.authToken)throw new Error("Cannot create room: No authentication token. Call registerUser() first.");this.room=this.ensureRoom();let{initialMessage:t,...i}=e,s=await a(`${this.apiUrl}/rooms`,{method:"POST",body:JSON.stringify(i),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.createRoom.signal});return this.setRoomMetadata(s),this.setupParticipantAttributesHandler(),this.room.connect(s.wsURL,s.token).then(async()=>{if(t)try{await this.sendMessage(t)}catch(n){console.error("[ConversationService] Failed to send initial message:",n)}}),this.initializeRoomHandlers(),this.room}async joinRoom(e,t,i,s){let n=await a(`${this.apiUrl}/rooms/${e}/join`,{method:"POST",body:JSON.stringify({timezone:t,language:i,...s??{}}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.createRoom.signal});return this.setRoomMetadata(n),this.setupParticipantAttributesHandler(),await this.room.connect(n.wsURL,n.token),this.initializeRoomHandlers(),this.room}setRoomMetadata(e){this.room.id=e.id,this.room.groupId=e.groupId,this.room.createdAt=e.createdAt,this.room.connectedAt=new Date().toISOString(),this.room.affinity=e.affinity}setupParticipantAttributesHandler(){this.room.on(y.ParticipantAttributesChanged,e=>{e.identity===this.room.localParticipant.identity&&u.updateSessionWithRegistrationData(e.attributes)})}async evaluateRoom(e){let t=e.roomId||this.room?.id;if(!t)throw new Error("Room ID is required for evaluation");return a(`${this.apiUrl}/rooms/${t}/evaluate`,{method:"POST",body:JSON.stringify({rating:e.rating,comment:e.comment}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.evaluateRoom.signal})}async closeRoom(){this.room&&(await a(`${this.apiUrl}/rooms/${this.room.id}/close`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.closeRoom.signal}),await this.stopAndUnpublishLocalTracks())}async disconnect(){this.room&&(await this.stopAndUnpublishLocalTracks(),this.room.removeAllListeners(),await this.room.disconnect(),this.room=null)}async stopAndUnpublishLocalTracks(){let e=this.room?.localParticipant;if(!e)return;await Promise.allSettled([e.setMicrophoneEnabled(!1),e.setCameraEnabled(!1),e.setScreenShareEnabled(!1)]);let t=Array.from(e.trackPublications.values());await Promise.all(t.map(async i=>{let s=i.track;if(s)try{await e.unpublishTrack(s,!0)}catch{s.stop()}}))}async disconnectAndCloseRoom(){await this.closeRoom(),await this.disconnect()}async readRoom(e){return a(`${this.apiUrl}/rooms/${e}/read`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.persistMessage.signal})}async getRooms(e){let t=new URLSearchParams;return e.page&&t.append("page",e.page.toString()),e.limit&&t.append("limit",e.limit.toString()),e.offset&&t.append("offset",e.offset.toString()),e.orderBy&&t.append("orderBy",e.orderBy),e.orderDir&&t.append("orderDir",e.orderDir),e.ids?.length&&t.append("ids",e.ids.join(",")),e.with?.length&&t.append("with",e.with.join(",")),e.count?.length&&t.append("count",e.count.join(",")),e.latestOnly&&t.append("latestOnly",e.latestOnly.toString()),e.includeUnread&&t.append("includeUnread",e.includeUnread.toString()),e.roomStatus&&t.append("roomStatus",e.roomStatus),e.archived&&t.append("archived",e.archived.toString()),e.participantIds?.length&&t.append("participantIds",e.participantIds.join(",")),e.participantExternalIds?.length&&t.append("participantExternalIds",e.participantExternalIds.join(",")),e.groupId&&t.append("groupId",e.groupId),e.hasMessages!==void 0&&t.append("hasMessages",e.hasMessages.toString()),a(`${this.authUrl}/rooms?${t}`,{method:"GET",headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},credentials:"include",signal:this.abortControllers.getRooms.signal})}async sendMessage(e,t){let i=await this.room.localParticipant.sendText(e,{topic:this.channelTopic,attributes:t});this.emitMessage({id:i.id,timestamp:Date.now(),message:e,assets:JSON.parse(t?.assets||"[]"),from:this.room.localParticipant}),this.messagePersistence==="client"&&this.persistMessage({roomId:this.room.id,content:e,externalId:i.id,identity:this.room.localParticipant?.identity,kind:this.room.localParticipant?.kind})}async persistMessage(e){return a(`${this.apiUrl}/messages/create`,{method:"POST",body:JSON.stringify(e),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.persistMessage.signal})}async getMessages(e){let t=new URLSearchParams;return e.limit&&t.append("limit",e.limit.toString()),e.with&&t.append("with",e.with.join(",")),(await a(`${this.apiUrl}/messages/search${t.size?`?${t.toString()}`:""}`,{method:"POST",body:JSON.stringify(e),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.createRoom.signal})).items}async sendMessageReport(e){try{return a(`${this.apiUrl}/messages/${e.messageId}/report`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.sendMessageReport.signal})}catch(t){console.error("Error sending message report:",t)}}async deleteMessageReport(e){try{return a(`${this.apiUrl}/messages/${e.messageId}/report`,{method:"DELETE",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.deleteMessageReport.signal})}catch(t){console.error("Error deleting message report:",t)}}async updateMessageReactions(e){try{return a(`${this.apiUrl}/messages/${e.messageId}/reactions`,{method:"PATCH",body:JSON.stringify({add:e.add||[],remove:e.remove||[]}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.updateMessageReactions.signal})}catch(t){console.error("Error updating message reactions:",t)}}subscribeMessages(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}async sendTypingIndicator(e){if(!(!this.room||this.room.state!=="connected"))try{let t=new TextEncoder().encode(JSON.stringify({type:"typing",isTyping:e,timestamp:Date.now(),participantId:this.room.localParticipant.identity}));await this.room.localParticipant.publishData(t,{reliable:!1,topic:h})}catch(t){console.warn("Failed to send typing indicator:",t)}}subscribeTypingIndicators(e){return this.typingListeners.add(e),()=>{this.typingListeners.delete(e)}}unsubscribeTypingIndicators(e){this.typingListeners.delete(e)}async sendContextualEvent(e){try{let t=JSON.stringify(e);await this.room.localParticipant.sendText(t,{topic:this.eventsTopic})}catch(t){console.warn("Failed to send event:",t)}}async requestNewRoom(e){return a(`${this.apiUrl}/rooms/request-new`,{method:"POST",body:JSON.stringify(e),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}async confirmRoomRequest(e){return a(`${this.apiUrl}/rooms/confirm-call`,{method:"POST",body:JSON.stringify({roomId:e}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}async cancelRoomRequest(e){return a(`${this.apiUrl}/rooms/cancel-call`,{method:"POST",body:JSON.stringify({roomId:e}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}async finishCall(){if(this.room?.id)return a(`${this.apiUrl}/rooms/finish-call`,{method:"POST",body:JSON.stringify({roomId:this.room.id}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}isFirebaseEnabled(){return!!(this.firebaseApi&&this.presencePath&&this.callsPath)}getFirebase(){if(!this.firebaseApi||!this.presencePath||!this.callsPath)throw new Error("Firebase is not initialized. Provide firebaseConfig in constructor.");return{api:this.firebaseApi,presencePath:this.presencePath,callsPath:this.callsPath}}buildAgentPresencePath(e){return`${this.presencePath}/${e}`}onPresenceChange(e){let{api:t,presencePath:i}=this.getFirebase();return t.onChildChanged(i,(s,n)=>e(s,n))}onPresenceAgentChange(e,t){let{api:i}=this.getFirebase();return i.onValue(this.buildAgentPresencePath(e),(s,n)=>t(s,n))}async createCallRequest(e){let{api:t,callsPath:i}=this.getFirebase(),n=(await a(`${this.apiUrl}/rooms/call-request`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},body:JSON.stringify(e)})).id;return t.onDisconnectUpdate(`${i}/${n}`,{status:"disconnected"}),n}onNewCallRequest(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildAdded(i,(s,n)=>e(s,{...n,id:s}))}onCallRequestChange(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildChanged(i,(s,n)=>e(s,{...n,id:s}))}onCallRequestRemoved(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildRemoved(i,s=>e(s))}async acceptCallRequest(e){let{api:t,callsPath:i}=this.getFirebase();return await t.cancelOnDisconnect(`${i}/${e}`),t.update(`${i}/${e}`,{status:"accepted"})}async cancelCallRequest(e){let{api:t,callsPath:i}=this.getFirebase();await t.cancelOnDisconnect(`${i}/${e}`),await a(`${this.apiUrl}/rooms/call-request/cancel`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},body:JSON.stringify({callId:e})})}async cancelOnDisconnect(e){let{api:t,callsPath:i}=this.getFirebase();await t.cancelOnDisconnect(`${i}/${e}`)}subscribePendingRequests(e,t={}){let{api:i,callsPath:s}=this.getFirebase();t.resetSeen&&this.seenRequestIds.clear(),this.firebaseUnsubscribers["pending-requests"]?.();let n=i.query(s,{orderBy:"child",childKey:"status",equalTo:"pending"}),r=i.onChildAddedQuery(n,(c,x)=>{if(!c||this.seenRequestIds.has(c))return;let M={...x,id:c};this.seenRequestIds.add(c),e(c,M)});return this.firebaseUnsubscribers["pending-requests"]=r,()=>{r?.(),delete this.firebaseUnsubscribers["pending-requests"]}}subscribeRequestChanges(e){let{api:t,callsPath:i}=this.getFirebase();this.firebaseUnsubscribers["request-changes"]?.();let s=t.onChildChanged(i,(n,r)=>{if(!n)return;let c=JSON.stringify(r);this.lastSnapshotById.get(n)!==c&&(this.lastSnapshotById.set(n,c),e(n,{...r,id:n}))});return this.firebaseUnsubscribers["request-changes"]=s,()=>{s?.(),delete this.firebaseUnsubscribers["request-changes"]}}async tryAcceptRequest(e){let{api:t,callsPath:i}=this.getFirebase(),s=`${i}/${e}`;return await t.transaction(s,r=>r&&(r.status==="pending"?{...r,status:"accepted"}:r)),(await t.getOnce(s))?.status==="accepted"}onRoomSync(e,t){let{api:i}=this.getFirebase(),s=`orgs/${this.organizationId}/rooms/${e}/sync`;return i.onValue(s,(n,r)=>{t(r)})}async clearRoomSync(e,t){let{api:i}=this.getFirebase(),s=`orgs/${this.organizationId}/rooms/${e}/sync`;await i.write(s,{needsSync:!1,reason:t||null,timestamp:Date.now()})}onNewRoomRequest(e,t){let{api:i}=this.getFirebase(),s=`orgs/${this.organizationId}/rooms/${e}/call`;return i.onValue(s,(n,r)=>{t(r)})}unsubscribeAllFirebase(){Object.values(this.firebaseUnsubscribers).forEach(e=>e?.()),this.firebaseUnsubscribers={}}async destroy(){this.unsubscribeAllFirebase(),this.listeners.clear(),this.typingListeners.clear(),this.transcriptionMap.clear(),this.seenRequestIds.clear(),this.lastSnapshotById.clear(),Object.values(this.abortControllers).forEach(e=>e.abort()),await this.disconnect()}};export{k as ConversationService,b as Room};
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
+ import{Session as m}from"@onlive.ai/tracker/session";import{Room as K,RoomEvent as y}from"livekit-client";import{initializeApp as z}from"firebase/app";import{query as g,endAt as q,equalTo as U,get as R,getDatabase as $,limitToFirst as j,limitToLast as D,onChildAdded as f,onChildChanged as v,onChildRemoved as T,onDisconnect as I,onValue as C,orderByChild as N,orderByKey as L,orderByValue as E,push as F,ref as B,remove as J,runTransaction as Q,set as A,startAt as X,update as G}from"firebase/database";var p=class{constructor(e){this.onChildChanged=(e,t)=>v(this.ref(e),i=>t(i.key||"",i.val(),i));this.onChildRemoved=(e,t)=>T(this.ref(e),i=>t(i.key||"",i.val(),i));this.onChildChangedQuery=(e,t)=>v(e,i=>t(i.key||"",i.val(),i));this.onChildRemovedQuery=(e,t)=>T(e,i=>t(i.key||"",i.val(),i));let t=z(e.config);this.db=$(t)}ref(e){return B(this.db,e)}async getOnce(e){let t=await R(this.ref(e));return t.exists()?t.val():null}async getOnceQuery(e){let t=await R(e),i=[];return t.exists()&&t.forEach(s=>{i.push({key:s.key||"",value:s.val()})}),i}onValue(e,t){return C(this.ref(e),i=>t(i.key??"",i.val(),i),i=>console.error("onValue error",i))}onValueQuery(e,t){return C(e,i=>t(i.key??"",i.val(),i),i=>console.error("onValueQuery error",i))}onChildAdded(e,t){return f(this.ref(e),i=>t(i.key||"",i.val(),i),i=>console.error("onChildAdded error",i))}onChildAddedQuery(e,t){return f(e,i=>t(i.key||"",i.val(),i),i=>console.error("onChildAddedQuery error",i))}write(e,t){return A(this.ref(e),t)}update(e,t){return G(this.ref(e),t)}remove(e){return J(this.ref(e))}async push(e,t){let i=F(this.ref(e));return await A(i,t),i.key}onDisconnectUpdate(e,t){return I(this.ref(e)).update(t)}cancelOnDisconnect(e){return I(this.ref(e)).cancel()}transaction(e,t){return Q(this.ref(e),i=>t(i))}query(e,t={}){let i=this.ref(e);return t.orderBy==="child"&&t.childKey&&(i=g(i,N(t.childKey))),t.orderBy==="key"&&(i=g(i,L())),t.orderBy==="value"&&(i=g(i,E())),t.startAt!=null&&(i=g(i,X(t.startAt))),t.endAt!=null&&(i=g(i,q(t.endAt))),t.equalTo!=null&&(i=g(i,U(t.equalTo))),t.limitFirst!=null&&(i=g(i,j(t.limitFirst))),t.limitLast!=null&&(i=g(i,D(t.limitLast))),i}};var a=async(o,e)=>{let t=await fetch(o,e);if(!t.ok){let i=await t.json().catch(()=>({}));throw new Error(JSON.stringify({status:t.status,statusText:t.statusText,...i}))}return t&&t.json()};var S=o=>{let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",t="";for(let i=0;i<o;i++)t+=e.charAt(Math.floor(Math.random()*e.length));return t};import{Generator as H}from"@onlive.ai/tracker/generator";import{Session as l}from"@onlive.ai/tracker/session";var d="chatbot",u=class o{static hasSession(){return!!l.getCookie(d)}static getSession(e={role:"guest",regenerate:!1}){e.regenerate&&(l.id=H.uuid(),l.deleteCookie(d));let t=l.getCookie(d);return t&&o.isValidSession(t,e.role)?t:o.createSession(e.role)}static createSession(e){let t={externalId:e==="agent"?String(o.getUserId()||l.id):l.id,secret:S(16),createdAt:new Date().toISOString()};return l.setCookie(d,t,3600*24*365),t}static isValidSession(e,t){if(t==="guest")return!0;let i=o.getUserId();return!!(i&&String(i)===e.externalId)}static getUserId(){return l.getCookie("user-id",{objectKey:"userId",storageKey:"user",storageType:"localStorage",ttl:3600*24*365,preserveData:!0})}static updateSessionWithRegistrationData(e){let t=l.getCookie(d);if(t||(t=o.createSession("guest")),t){let i={...t,registrationData:e};l.setCookie(d,i,3600*24*365)}}static hasRegistrationData(){return!!l.getCookie(d)?.registrationData}static async getAgentInfo(e){return fetch(`${e}/api/v1/auth/user-info`,{credentials:"include"}).then(t=>t.json())}static getRegistrationData(){return l.getCookie(d)?.registrationData}};var P="lk.chat",O="lk.transcription",k="lk.events",h="typing-indicator";var b=class extends K{},w=class{constructor(e){this.listeners=new Set;this.typingListeners=new Set;this.transcriptionMap=new Map;this.abortControllers={register:new AbortController,createRoom:new AbortController,quickStart:new AbortController,closeRoom:new AbortController,evaluateRoom:new AbortController,persistMessage:new AbortController,sendMessageReport:new AbortController,deleteMessageReport:new AbortController,updateMessageReactions:new AbortController,getRooms:new AbortController};this.authToken=null;this.firebaseUnsubscribers={};this.seenRequestIds=new Set;this.lastSnapshotById=new Map;this.handleIncomingMessage=async(e,t)=>{let i=e?.info?.id,s=e.info?.attributes?.["lk.segment_id"];s&&(this.transcriptionMap.has(s)?i=this.transcriptionMap.get(s)||"":this.transcriptionMap.set(s,i));let n=t?.identity?this.room.getParticipantByIdentity(t.identity):void 0,r="";for await(let c of e)r+=c,this.emitMessage({id:i,timestamp:Date.now(),message:r,assets:JSON.parse(e.info?.attributes?.assets||"[]"),from:n});this.messagePersistence==="client"&&this.persistMessage({roomId:this.room.id,content:r,externalId:i,identity:n?.identity,kind:n?.kind})};this.emitMessage=e=>{for(let t of this.listeners)t([e])};this.handleDataReceived=(e,t,i,s)=>{if(s===h)try{let n=JSON.parse(new TextDecoder().decode(e));if(n.type==="typing"&&n.participantId!==this.room.localParticipant.identity){let r={type:"typing",isTyping:n.isTyping,timestamp:n.timestamp,participantId:n.participantId};this.emitTypingIndicator(r)}}catch(n){console.warn("Failed to parse typing indicator:",n)}};this.emitTypingIndicator=e=>{for(let t of this.typingListeners)t(e)};this.apiUrl=e.apiUrl,this.authUrl=e.authUrl,this.organizationId=e.organizationId,this.channelTopic=e.channelTopic||P,this.transcriptionTopic=e.transcriptionTopic||O,this.eventsTopic=e.eventsTopic||k,this.messagePersistence=e.messagePersistence||"disabled",this.room=this.createRoomInstance(),e.firebaseConfig&&this.initializeFirebase(e.firebaseConfig)}createRoomInstance(){return new b({adaptiveStream:!0,dynacast:!0})}ensureRoom(){return this.room||(this.room=this.createRoomInstance()),this.room}initializeFirebase(e){this.firebaseApi=new p({config:e}),this.presencePath=`orgs/${this.organizationId}/presence`,this.callsPath=`orgs/${this.organizationId}/calls`}initializeRoomHandlers(){try{this.room.unregisterTextStreamHandler(this.channelTopic),this.room.unregisterTextStreamHandler(this.transcriptionTopic)}catch{}this.room.off(y.DataReceived,this.handleDataReceived),this.room.registerTextStreamHandler(this.channelTopic,this.handleIncomingMessage),this.room.registerTextStreamHandler(this.transcriptionTopic,this.handleIncomingMessage),this.room.on(y.DataReceived,this.handleDataReceived)}async registerUser(e,t,i,s){let n=await a(`${this.apiUrl}/users/register`,{method:"POST",body:JSON.stringify({externalId:e,secret:t,...i,metadata:s}),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.register.signal});if(!n.token)throw new Error("Registration failed: No token received from server");return this.authToken=n.token,n}async registerAgent(e,t){let i=m.getCookie("livekit-agent-token");if(i){if(this.decodeJwtPayload(i)?.username===t.name)return this.authToken=i,i;m.deleteCookie("livekit-agent-token")}let s=await a(`${this.authUrl}/admins/register`,{method:"POST",body:JSON.stringify({externalId:e,name:t.name,email:t.email,avatar:t.avatar}),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},credentials:"include",signal:this.abortControllers.register.signal});return m.setCookie("livekit-agent-token",s.token,1440*60),this.authToken=s.token,s.token}decodeJwtPayload(e){try{let t=e.split(".");if(t.length!==3)return null;let i=t[1],s=atob(i.replace(/-/g,"+").replace(/_/g,"/"));return JSON.parse(s)}catch{return null}}async quickStart(e){console.log("[ConversationService] Starting quickStart with options:",e),this.room=this.ensureRoom();let t=await a(`${this.apiUrl}/rooms/quick-start`,{method:"POST",body:JSON.stringify(e),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.quickStart.signal});if(!t.user?.token)throw new Error("Quick start failed: No user token received from server");this.authToken=t.user.token;let i={id:t.room.id,groupId:t.room.groupId||"",token:t.room.token,wsURL:t.room.wsURL,createdAt:t.room.createdAt||new Date().toISOString(),affinity:t.room.affinity};return this.setRoomMetadata(i),this.setupParticipantAttributesHandler(),this.room.connect(i.wsURL,i.token),this.initializeRoomHandlers(),this.room}async createRoom(e){if(!this.authToken)throw new Error("Cannot create room: No authentication token. Call registerUser() first.");this.room=this.ensureRoom();let{initialMessage:t,...i}=e,s=await a(`${this.apiUrl}/rooms`,{method:"POST",body:JSON.stringify(i),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.createRoom.signal});return this.setRoomMetadata(s),this.setupParticipantAttributesHandler(),this.room.connect(s.wsURL,s.token).then(async()=>{if(t)try{await this.sendMessage(t)}catch(n){console.error("[ConversationService] Failed to send initial message:",n)}}),this.initializeRoomHandlers(),this.room}async joinRoom(e,t,i,s){let n=await a(`${this.apiUrl}/rooms/${e}/join`,{method:"POST",body:JSON.stringify({timezone:t,language:i,...s??{}}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.createRoom.signal});return this.setRoomMetadata(n),this.setupParticipantAttributesHandler(),await this.room.connect(n.wsURL,n.token),this.initializeRoomHandlers(),this.room}setRoomMetadata(e){this.room.id=e.id,this.room.groupId=e.groupId,this.room.createdAt=e.createdAt,this.room.connectedAt=new Date().toISOString(),this.room.affinity=e.affinity}setupParticipantAttributesHandler(){this.room.on(y.ParticipantAttributesChanged,e=>{e.identity===this.room.localParticipant.identity&&u.updateSessionWithRegistrationData(e.attributes)})}async evaluateRoom(e){let t=e.roomId||this.room?.id;if(!t)throw new Error("Room ID is required for evaluation");return a(`${this.apiUrl}/rooms/${t}/evaluate`,{method:"POST",body:JSON.stringify({rating:e.rating,comment:e.comment}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.evaluateRoom.signal})}async closeRoom(){this.room&&(await a(`${this.apiUrl}/rooms/${this.room.id}/close`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.closeRoom.signal}),await this.stopAndUnpublishLocalTracks())}async disconnect(){this.room&&(await this.stopAndUnpublishLocalTracks(),this.room.removeAllListeners(),await this.room.disconnect(),this.room=null)}async stopAndUnpublishLocalTracks(){let e=this.room?.localParticipant;if(!e)return;await Promise.allSettled([e.setMicrophoneEnabled(!1),e.setCameraEnabled(!1),e.setScreenShareEnabled(!1)]);let t=Array.from(e.trackPublications.values());await Promise.all(t.map(async i=>{let s=i.track;if(s)try{await e.unpublishTrack(s,!0)}catch{s.stop()}}))}async disconnectAndCloseRoom(){await this.closeRoom(),await this.disconnect()}async readRoom(e){return a(`${this.apiUrl}/rooms/${e}/read`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.persistMessage.signal})}async getRooms(e){let t=new URLSearchParams;return e.page&&t.append("page",e.page.toString()),e.limit&&t.append("limit",e.limit.toString()),e.offset&&t.append("offset",e.offset.toString()),e.orderBy&&t.append("orderBy",e.orderBy),e.orderDir&&t.append("orderDir",e.orderDir),e.ids?.length&&t.append("ids",e.ids.join(",")),e.with?.length&&t.append("with",e.with.join(",")),e.count?.length&&t.append("count",e.count.join(",")),e.latestOnly&&t.append("latestOnly",e.latestOnly.toString()),e.includeUnread&&t.append("includeUnread",e.includeUnread.toString()),e.roomStatus&&t.append("roomStatus",e.roomStatus),e.archived&&t.append("archived",e.archived.toString()),e.participantIds?.length&&t.append("participantIds",e.participantIds.join(",")),e.participantExternalIds?.length&&t.append("participantExternalIds",e.participantExternalIds.join(",")),e.groupId&&t.append("groupId",e.groupId),e.hasMessages!==void 0&&t.append("hasMessages",e.hasMessages.toString()),a(`${this.authUrl}/rooms?${t}`,{method:"GET",headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},credentials:"include",signal:this.abortControllers.getRooms.signal})}async sendMessage(e,t){let i=await this.room.localParticipant.sendText(e,{topic:this.channelTopic,attributes:t});this.emitMessage({id:i.id,timestamp:Date.now(),message:e,assets:JSON.parse(t?.assets||"[]"),from:this.room.localParticipant}),this.messagePersistence==="client"&&this.persistMessage({roomId:this.room.id,content:e,externalId:i.id,identity:this.room.localParticipant?.identity,kind:this.room.localParticipant?.kind})}async persistMessage(e){return a(`${this.apiUrl}/messages/create`,{method:"POST",body:JSON.stringify(e),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.persistMessage.signal})}async getMessages(e){let t=new URLSearchParams;return e.limit&&t.append("limit",e.limit.toString()),e.with&&t.append("with",e.with.join(",")),(await a(`${this.apiUrl}/messages/search${t.size?`?${t.toString()}`:""}`,{method:"POST",body:JSON.stringify(e),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.createRoom.signal})).items}async sendMessageReport(e){try{return a(`${this.apiUrl}/messages/${e.messageId}/report`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.sendMessageReport.signal})}catch(t){console.error("Error sending message report:",t)}}async deleteMessageReport(e){try{return a(`${this.apiUrl}/messages/${e.messageId}/report`,{method:"DELETE",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.deleteMessageReport.signal})}catch(t){console.error("Error deleting message report:",t)}}async updateMessageReactions(e){try{return a(`${this.apiUrl}/messages/${e.messageId}/reactions`,{method:"PATCH",body:JSON.stringify({add:e.add||[],remove:e.remove||[]}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.updateMessageReactions.signal})}catch(t){console.error("Error updating message reactions:",t)}}subscribeMessages(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}async sendTypingIndicator(e){if(!(!this.room||this.room.state!=="connected"))try{let t=new TextEncoder().encode(JSON.stringify({type:"typing",isTyping:e,timestamp:Date.now(),participantId:this.room.localParticipant.identity}));await this.room.localParticipant.publishData(t,{reliable:!1,topic:h})}catch(t){console.warn("Failed to send typing indicator:",t)}}subscribeTypingIndicators(e){return this.typingListeners.add(e),()=>{this.typingListeners.delete(e)}}unsubscribeTypingIndicators(e){this.typingListeners.delete(e)}async sendContextualEvent(e){try{let t=JSON.stringify(e);await this.room.localParticipant.sendText(t,{topic:this.eventsTopic})}catch(t){console.warn("Failed to send event:",t)}}async requestNewRoom(e){return a(`${this.apiUrl}/rooms/request-new`,{method:"POST",body:JSON.stringify(e),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}async confirmRoomRequest(e){return a(`${this.apiUrl}/rooms/confirm-call`,{method:"POST",body:JSON.stringify({roomId:e}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}async cancelRoomRequest(e){return a(`${this.apiUrl}/rooms/cancel-call`,{method:"POST",body:JSON.stringify({roomId:e}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}async finishCall(){if(this.room?.id)return a(`${this.apiUrl}/rooms/finish-call`,{method:"POST",body:JSON.stringify({roomId:this.room.id}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}isFirebaseEnabled(){return!!(this.firebaseApi&&this.presencePath&&this.callsPath)}getFirebase(){if(!this.firebaseApi||!this.presencePath||!this.callsPath)throw new Error("Firebase is not initialized. Provide firebaseConfig in constructor.");return{api:this.firebaseApi,presencePath:this.presencePath,callsPath:this.callsPath}}buildAgentPresencePath(e){return`${this.presencePath}/${e}`}onPresenceChange(e){let{api:t,presencePath:i}=this.getFirebase();return t.onChildChanged(i,(s,n)=>e(s,n))}onPresenceAgentChange(e,t){let{api:i}=this.getFirebase();return i.onValue(this.buildAgentPresencePath(e),(s,n)=>t(s,n))}async createCallRequest(e){let{api:t,callsPath:i}=this.getFirebase(),n=(await a(`${this.apiUrl}/rooms/call-request`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},body:JSON.stringify(e)})).id;return t.onDisconnectUpdate(`${i}/${n}`,{status:"disconnected"}),n}onNewCallRequest(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildAdded(i,(s,n)=>e(s,{...n,id:s}))}onCallRequestChange(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildChanged(i,(s,n)=>e(s,{...n,id:s}))}onCallRequestRemoved(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildRemoved(i,s=>e(s))}async acceptCallRequest(e){let{api:t,callsPath:i}=this.getFirebase();return await t.cancelOnDisconnect(`${i}/${e}`),t.update(`${i}/${e}`,{status:"accepted"})}async cancelCallRequest(e){let{api:t,callsPath:i}=this.getFirebase();await t.cancelOnDisconnect(`${i}/${e}`),await a(`${this.apiUrl}/rooms/call-request/cancel`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},body:JSON.stringify({callId:e})})}async cancelOnDisconnect(e){let{api:t,callsPath:i}=this.getFirebase();await t.cancelOnDisconnect(`${i}/${e}`)}subscribePendingRequests(e,t={}){let{api:i,callsPath:s}=this.getFirebase();t.resetSeen&&this.seenRequestIds.clear(),this.firebaseUnsubscribers["pending-requests"]?.();let n=i.query(s,{orderBy:"child",childKey:"status",equalTo:"pending"}),r=i.onChildAddedQuery(n,(c,x)=>{if(!c||this.seenRequestIds.has(c))return;let M={...x,id:c};this.seenRequestIds.add(c),e(c,M)});return this.firebaseUnsubscribers["pending-requests"]=r,()=>{r?.(),delete this.firebaseUnsubscribers["pending-requests"]}}subscribeRequestChanges(e){let{api:t,callsPath:i}=this.getFirebase();this.firebaseUnsubscribers["request-changes"]?.();let s=t.onChildChanged(i,(n,r)=>{if(!n)return;let c=JSON.stringify(r);this.lastSnapshotById.get(n)!==c&&(this.lastSnapshotById.set(n,c),e(n,{...r,id:n}))});return this.firebaseUnsubscribers["request-changes"]=s,()=>{s?.(),delete this.firebaseUnsubscribers["request-changes"]}}async tryAcceptRequest(e){let{api:t,callsPath:i}=this.getFirebase(),s=`${i}/${e}`;return await t.transaction(s,r=>r&&(r.status==="pending"?{...r,status:"accepted"}:r)),(await t.getOnce(s))?.status==="accepted"}onRoomSync(e,t){let{api:i}=this.getFirebase(),s=`orgs/${this.organizationId}/rooms/${e}/sync`;return i.onValue(s,(n,r)=>{t(r)})}async clearRoomSync(e,t){let{api:i}=this.getFirebase(),s=`orgs/${this.organizationId}/rooms/${e}/sync`;await i.write(s,{needsSync:!1,reason:t||null,timestamp:Date.now()})}onNewRoomRequest(e,t){let{api:i}=this.getFirebase(),s=`orgs/${this.organizationId}/rooms/${e}/call`;return i.onValue(s,(n,r)=>{t(r)})}unsubscribeAllFirebase(){Object.values(this.firebaseUnsubscribers).forEach(e=>e?.()),this.firebaseUnsubscribers={}}async destroy(){this.unsubscribeAllFirebase(),this.listeners.clear(),this.typingListeners.clear(),this.transcriptionMap.clear(),this.seenRequestIds.clear(),this.lastSnapshotById.clear(),Object.values(this.abortControllers).forEach(e=>e.abort()),await this.disconnect()}};export{w as ConversationService,b as Room};
@@ -1,2 +1,2 @@
1
- /*! @onlive.ai/common-121 v0.2.179 | © 2026 Onlive.ai */
2
- "use strict";var r=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var p=(e,t)=>{for(var s in t)r(e,s,{get:t[s],enumerable:!0})},d=(e,t,s,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of a(t))!g.call(e,n)&&n!==s&&r(e,n,{get:()=>t[n],enumerable:!(i=o(t,n))||i.enumerable});return e};var m=e=>d(r({},"__esModule",{value:!0}),e);var y={};p(y,{CHAT_TOPIC:()=>c,EVENTS_TOPIC:()=>l,TRANSCRIPTION_TOPIC:()=>u,TYPING_INDICATOR_TOPIC:()=>x});module.exports=m(y);var c="lk.chat",u="lk.transcription",l="lk.events",x="typing-indicator";0&&(module.exports={CHAT_TOPIC,EVENTS_TOPIC,TRANSCRIPTION_TOPIC,TYPING_INDICATOR_TOPIC});
1
+ /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
+ "use strict";var s=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var p=(e,t)=>{for(var r in t)s(e,r,{get:t[r],enumerable:!0})},d=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of a(t))!g.call(e,n)&&n!==r&&s(e,n,{get:()=>t[n],enumerable:!(i=o(t,n))||i.enumerable});return e};var m=e=>d(s({},"__esModule",{value:!0}),e);var R={};p(R,{CHAT_TOPIC:()=>u,EVENTS_TOPIC:()=>l,TRANSCRIPTION_TOPIC:()=>c,TYPING_INDICATOR_TOPIC:()=>x});module.exports=m(R);var u="lk.chat",c="lk.transcription",l="lk.events",x="typing-indicator";0&&(module.exports={CHAT_TOPIC,EVENTS_TOPIC,TRANSCRIPTION_TOPIC,TYPING_INDICATOR_TOPIC});