@onlive.ai/common-121 0.2.187 → 0.2.190

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 (467) hide show
  1. package/README.md +300 -89
  2. package/{audi-dark.theme-aO_Pa27x.d.cts → audi-dark.theme-a2WmOyVS.d.cts} +1 -1
  3. package/{audi-dark.theme-aO_Pa27x.d.ts → audi-dark.theme-a2WmOyVS.d.ts} +1 -1
  4. package/{audi.theme-BP7nboRq.d.cts → audi.theme-DkdflnT8.d.cts} +1 -1
  5. package/{audi.theme-BP7nboRq.d.ts → audi.theme-DkdflnT8.d.ts} +1 -1
  6. package/{australia.theme-BkfhMf1z.d.cts → australia.theme-B5n8F3QH.d.cts} +1 -1
  7. package/{australia.theme-BkfhMf1z.d.ts → australia.theme-B5n8F3QH.d.ts} +1 -1
  8. package/{chunk-V7XHRWMT.js → chunk-4DKWCKNT.js} +1 -1
  9. package/components/asset/asset-modal-portal.cjs +1 -1
  10. package/components/asset/asset-modal-portal.d.cts +1 -1
  11. package/components/asset/asset-modal-portal.d.ts +1 -1
  12. package/components/asset/asset-modal-portal.js +1 -1
  13. package/components/asset/asset.cjs +1 -1
  14. package/components/asset/asset.d.cts +1 -1
  15. package/components/asset/asset.d.ts +1 -1
  16. package/components/asset/asset.js +1 -1
  17. package/components/asset/asset.loaders.cjs +1 -1
  18. package/components/asset/asset.loaders.d.cts +1 -1
  19. package/components/asset/asset.loaders.d.ts +1 -1
  20. package/components/asset/asset.loaders.js +1 -1
  21. package/components/asset/asset.renderer.cjs +1 -1
  22. package/components/asset/asset.renderer.d.cts +1 -1
  23. package/components/asset/asset.renderer.d.ts +1 -1
  24. package/components/asset/asset.renderer.js +1 -1
  25. package/components/asset/asset.styles.cjs +1 -1
  26. package/components/asset/asset.styles.d.cts +1 -1
  27. package/components/asset/asset.styles.d.ts +1 -1
  28. package/components/asset/asset.styles.js +1 -1
  29. package/components/asset/asset.types.cjs +1 -1
  30. package/components/asset/asset.types.d.cts +1 -1
  31. package/components/asset/asset.types.d.ts +1 -1
  32. package/components/asset/asset.types.js +1 -1
  33. package/components/asset/index.cjs +1 -1
  34. package/components/asset/index.d.cts +1 -1
  35. package/components/asset/index.d.ts +1 -1
  36. package/components/asset/index.js +1 -1
  37. package/components/player/player.cjs +1 -1
  38. package/components/player/player.d.cts +1 -1
  39. package/components/player/player.d.ts +1 -1
  40. package/components/player/player.js +1 -1
  41. package/components/player/player.styles.cjs +1 -1
  42. package/components/player/player.styles.d.cts +1 -1
  43. package/components/player/player.styles.d.ts +1 -1
  44. package/components/player/player.styles.js +1 -1
  45. package/components/side-bar/index.cjs +1 -1
  46. package/components/side-bar/index.d.cts +1 -1
  47. package/components/side-bar/index.d.ts +1 -1
  48. package/components/side-bar/index.js +1 -1
  49. package/components/side-bar/side-bar.cjs +1 -1
  50. package/components/side-bar/side-bar.d.cts +1 -1
  51. package/components/side-bar/side-bar.d.ts +1 -1
  52. package/components/side-bar/side-bar.js +1 -1
  53. package/components/side-bar/side-bar.styles.cjs +1 -1
  54. package/components/side-bar/side-bar.styles.d.cts +1 -1
  55. package/components/side-bar/side-bar.styles.d.ts +1 -1
  56. package/components/side-bar/side-bar.styles.js +1 -1
  57. package/components/side-bar/side-bar.types.cjs +1 -1
  58. package/components/side-bar/side-bar.types.d.cts +1 -1
  59. package/components/side-bar/side-bar.types.d.ts +1 -1
  60. package/components/side-bar/side-bar.types.js +1 -1
  61. package/components/upload/index.cjs +1 -1
  62. package/components/upload/index.d.cts +1 -1
  63. package/components/upload/index.d.ts +1 -1
  64. package/components/upload/index.js +1 -1
  65. package/components/upload/upload.cjs +1 -1
  66. package/components/upload/upload.d.cts +1 -1
  67. package/components/upload/upload.d.ts +1 -1
  68. package/components/upload/upload.js +1 -1
  69. package/components/upload/upload.styles.cjs +1 -1
  70. package/components/upload/upload.styles.d.cts +1 -1
  71. package/components/upload/upload.styles.d.ts +1 -1
  72. package/components/upload/upload.styles.js +1 -1
  73. package/components/upload/upload.types.cjs +1 -1
  74. package/components/upload/upload.types.d.cts +1 -1
  75. package/components/upload/upload.types.d.ts +1 -1
  76. package/components/upload/upload.types.js +1 -1
  77. package/{cuernavaca.theme-Bez8yPGT.d.cts → cuernavaca.theme-BzcZX1EJ.d.cts} +1 -1
  78. package/{cuernavaca.theme-Bez8yPGT.d.ts → cuernavaca.theme-BzcZX1EJ.d.ts} +1 -1
  79. package/{cupra-diagonal.theme-CvdXkM9K.d.cts → cupra-diagonal.theme-CKxsGYdb.d.cts} +1 -1
  80. package/{cupra-diagonal.theme-CvdXkM9K.d.ts → cupra-diagonal.theme-CKxsGYdb.d.ts} +1 -1
  81. package/{cupra-events.theme-ln2vh1C0.d.cts → cupra-events.theme-kGaXJptG.d.cts} +1 -1
  82. package/{cupra-events.theme-ln2vh1C0.d.ts → cupra-events.theme-kGaXJptG.d.ts} +1 -1
  83. package/{cupra.theme-xa6yZhYo.d.cts → cupra.theme-C-oFRdQw.d.cts} +1 -1
  84. package/{cupra.theme-xa6yZhYo.d.ts → cupra.theme-C-oFRdQw.d.ts} +1 -1
  85. package/{germany.theme-Dra_5Jz0.d.cts → germany.theme-Cxz60Lv5.d.cts} +1 -1
  86. package/{germany.theme-Dra_5Jz0.d.ts → germany.theme-Cxz60Lv5.d.ts} +1 -1
  87. package/{hyundai.theme-BATWnkTl.d.cts → hyundai.theme-DNFeBfk4.d.cts} +1 -1
  88. package/{hyundai.theme-BATWnkTl.d.ts → hyundai.theme-DNFeBfk4.d.ts} +1 -1
  89. package/index.cjs +33 -33
  90. package/index.css +1 -0
  91. package/index.d.cts +4 -2
  92. package/index.d.ts +4 -2
  93. package/index.js +140 -139
  94. package/{italy.theme-YukqsD2q.d.cts → italy.theme-YKt3PHQM.d.cts} +1 -1
  95. package/{italy.theme-YukqsD2q.d.ts → italy.theme-YKt3PHQM.d.ts} +1 -1
  96. package/{magimix.theme-C7eoXRAA.d.cts → magimix.theme-lIo3UAYh.d.cts} +1 -1
  97. package/{magimix.theme-C7eoXRAA.d.ts → magimix.theme-lIo3UAYh.d.ts} +1 -1
  98. package/{media-MWJPMNO2.js → media-BU4KDZMS.js} +2 -2
  99. package/{onlive-ai.theme-CMYahnHv.d.cts → onlive-ai.theme-Dk4K7dnu.d.cts} +1 -1
  100. package/{onlive-ai.theme-CMYahnHv.d.ts → onlive-ai.theme-Dk4K7dnu.d.ts} +1 -1
  101. package/{onlive.theme-B7tNdG9s.d.cts → onlive.theme-BU4h4zKz.d.cts} +1 -1
  102. package/{onlive.theme-B7tNdG9s.d.ts → onlive.theme-BU4h4zKz.d.ts} +1 -1
  103. package/package.json +4 -2
  104. package/react/components/asset/Asset.cjs +1 -1
  105. package/react/components/asset/Asset.jsx +1 -1
  106. package/react/components/side-bar/SideBar.cjs +1 -1
  107. package/react/components/side-bar/SideBar.jsx +1 -1
  108. package/react/components/upload/Upload.cjs +1 -1
  109. package/react/components/upload/Upload.jsx +1 -1
  110. package/{seat-cupra.theme-CzvloqhA.d.cts → seat-cupra.theme-C-PJk0pi.d.cts} +1 -1
  111. package/{seat-cupra.theme-CzvloqhA.d.ts → seat-cupra.theme-C-PJk0pi.d.ts} +1 -1
  112. package/services/audio.service.cjs +1 -1
  113. package/services/audio.service.d.cts +1 -1
  114. package/services/audio.service.d.ts +1 -1
  115. package/services/audio.service.js +1 -1
  116. package/services/conversation/conversation.service.cjs +1 -1
  117. package/services/conversation/conversation.service.d.cts +1 -1
  118. package/services/conversation/conversation.service.d.ts +1 -1
  119. package/services/conversation/conversation.service.js +1 -1
  120. package/services/conversation/conversation.types.cjs +2 -2
  121. package/services/conversation/conversation.types.d.cts +3 -1
  122. package/services/conversation/conversation.types.d.ts +3 -1
  123. package/services/conversation/conversation.types.js +1 -1
  124. package/services/conversation/index.cjs +2 -2
  125. package/services/conversation/index.d.cts +1 -1
  126. package/services/conversation/index.d.ts +1 -1
  127. package/services/conversation/index.js +2 -2
  128. package/services/conversation/mock/actor/agent.cjs +1 -1
  129. package/services/conversation/mock/actor/agent.d.cts +1 -1
  130. package/services/conversation/mock/actor/agent.d.ts +1 -1
  131. package/services/conversation/mock/actor/agent.js +1 -1
  132. package/services/conversation/mock/actor/index.cjs +1 -1
  133. package/services/conversation/mock/actor/index.d.cts +1 -1
  134. package/services/conversation/mock/actor/index.d.ts +1 -1
  135. package/services/conversation/mock/actor/index.js +1 -1
  136. package/services/conversation/mock/actor/strategies.cjs +1 -1
  137. package/services/conversation/mock/actor/strategies.d.cts +1 -1
  138. package/services/conversation/mock/actor/strategies.d.ts +1 -1
  139. package/services/conversation/mock/actor/strategies.js +1 -1
  140. package/services/conversation/mock/errors.cjs +1 -1
  141. package/services/conversation/mock/errors.d.cts +1 -1
  142. package/services/conversation/mock/errors.d.ts +1 -1
  143. package/services/conversation/mock/errors.js +1 -1
  144. package/services/conversation/mock/events.cjs +1 -1
  145. package/services/conversation/mock/events.d.cts +1 -1
  146. package/services/conversation/mock/events.d.ts +1 -1
  147. package/services/conversation/mock/events.js +1 -1
  148. package/services/conversation/mock/factory.cjs +2 -2
  149. package/services/conversation/mock/factory.d.cts +1 -1
  150. package/services/conversation/mock/factory.d.ts +1 -1
  151. package/services/conversation/mock/factory.js +2 -2
  152. package/services/conversation/mock/fixtures.cjs +1 -1
  153. package/services/conversation/mock/fixtures.d.cts +1 -1
  154. package/services/conversation/mock/fixtures.d.ts +1 -1
  155. package/services/conversation/mock/fixtures.js +1 -1
  156. package/services/conversation/mock/generators.cjs +1 -1
  157. package/services/conversation/mock/generators.d.cts +1 -1
  158. package/services/conversation/mock/generators.d.ts +1 -1
  159. package/services/conversation/mock/generators.js +1 -1
  160. package/services/conversation/mock/index.cjs +2 -2
  161. package/services/conversation/mock/index.d.cts +1 -1
  162. package/services/conversation/mock/index.d.ts +1 -1
  163. package/services/conversation/mock/index.js +2 -2
  164. package/services/conversation/mock/livekit/index.cjs +1 -1
  165. package/services/conversation/mock/livekit/index.d.cts +1 -1
  166. package/services/conversation/mock/livekit/index.d.ts +1 -1
  167. package/services/conversation/mock/livekit/index.js +1 -1
  168. package/services/conversation/mock/livekit/local-participant.cjs +1 -1
  169. package/services/conversation/mock/livekit/local-participant.d.cts +1 -1
  170. package/services/conversation/mock/livekit/local-participant.d.ts +1 -1
  171. package/services/conversation/mock/livekit/local-participant.js +1 -1
  172. package/services/conversation/mock/livekit/participant.cjs +1 -1
  173. package/services/conversation/mock/livekit/participant.d.cts +1 -1
  174. package/services/conversation/mock/livekit/participant.d.ts +1 -1
  175. package/services/conversation/mock/livekit/participant.js +1 -1
  176. package/services/conversation/mock/livekit/room.cjs +1 -1
  177. package/services/conversation/mock/livekit/room.d.cts +1 -1
  178. package/services/conversation/mock/livekit/room.d.ts +1 -1
  179. package/services/conversation/mock/livekit/room.js +1 -1
  180. package/services/conversation/mock/livekit/streams.cjs +1 -1
  181. package/services/conversation/mock/livekit/streams.d.cts +1 -1
  182. package/services/conversation/mock/livekit/streams.d.ts +1 -1
  183. package/services/conversation/mock/livekit/streams.js +1 -1
  184. package/services/conversation/mock/livekit/tracks.cjs +1 -1
  185. package/services/conversation/mock/livekit/tracks.d.cts +1 -1
  186. package/services/conversation/mock/livekit/tracks.d.ts +1 -1
  187. package/services/conversation/mock/livekit/tracks.js +1 -1
  188. package/services/conversation/mock/media.cjs +1 -1
  189. package/services/conversation/mock/media.d.cts +1 -1
  190. package/services/conversation/mock/media.d.ts +1 -1
  191. package/services/conversation/mock/media.js +1 -1
  192. package/services/conversation/mock/service.cjs +2 -2
  193. package/services/conversation/mock/service.d.cts +1 -1
  194. package/services/conversation/mock/service.d.ts +1 -1
  195. package/services/conversation/mock/service.js +2 -2
  196. package/services/conversation/mock/service.test.cjs +2 -2
  197. package/services/conversation/mock/service.test.d.cts +1 -1
  198. package/services/conversation/mock/service.test.d.ts +1 -1
  199. package/services/conversation/mock/service.test.js +2 -2
  200. package/services/conversation/mock/state.cjs +1 -1
  201. package/services/conversation/mock/state.d.cts +1 -1
  202. package/services/conversation/mock/state.d.ts +1 -1
  203. package/services/conversation/mock/state.js +1 -1
  204. package/services/conversation/mock/storybook.cjs +2 -2
  205. package/services/conversation/mock/storybook.d.cts +1 -1
  206. package/services/conversation/mock/storybook.d.ts +1 -1
  207. package/services/conversation/mock/storybook.js +2 -2
  208. package/services/conversation/mock/types.cjs +1 -1
  209. package/services/conversation/mock/types.d.cts +1 -1
  210. package/services/conversation/mock/types.d.ts +1 -1
  211. package/services/conversation/mock/types.js +1 -1
  212. package/services/deep-link.service.cjs +1 -1
  213. package/services/deep-link.service.d.cts +1 -1
  214. package/services/deep-link.service.d.ts +1 -1
  215. package/services/deep-link.service.js +1 -1
  216. package/services/faqs/faqs.service.cjs +1 -1
  217. package/services/faqs/faqs.service.d.cts +1 -1
  218. package/services/faqs/faqs.service.d.ts +1 -1
  219. package/services/faqs/faqs.service.js +1 -1
  220. package/services/faqs/faqs.types.cjs +1 -1
  221. package/services/faqs/faqs.types.d.cts +1 -1
  222. package/services/faqs/faqs.types.d.ts +1 -1
  223. package/services/faqs/faqs.types.js +1 -1
  224. package/services/faqs/index.cjs +1 -1
  225. package/services/faqs/index.d.cts +1 -1
  226. package/services/faqs/index.d.ts +1 -1
  227. package/services/faqs/index.js +1 -1
  228. package/services/file/file.service.cjs +1 -1
  229. package/services/file/file.service.d.cts +1 -1
  230. package/services/file/file.service.d.ts +1 -1
  231. package/services/file/file.service.js +1 -1
  232. package/services/file/file.types.cjs +1 -1
  233. package/services/file/file.types.d.cts +1 -1
  234. package/services/file/file.types.d.ts +1 -1
  235. package/services/file/file.types.js +1 -1
  236. package/services/file/index.cjs +1 -1
  237. package/services/file/index.d.cts +1 -1
  238. package/services/file/index.d.ts +1 -1
  239. package/services/file/index.js +1 -1
  240. package/services/firebase/firebase-api.cjs +1 -1
  241. package/services/firebase/firebase-api.d.cts +1 -1
  242. package/services/firebase/firebase-api.d.ts +1 -1
  243. package/services/firebase/firebase-api.js +1 -1
  244. package/services/multimedia/config.example.cjs +1 -1
  245. package/services/multimedia/config.example.d.cts +1 -1
  246. package/services/multimedia/config.example.d.ts +1 -1
  247. package/services/multimedia/config.example.js +1 -1
  248. package/services/multimedia/index.cjs +1 -1
  249. package/services/multimedia/index.d.cts +1 -1
  250. package/services/multimedia/index.d.ts +1 -1
  251. package/services/multimedia/index.js +1 -1
  252. package/services/multimedia/multimedia.service.cjs +1 -1
  253. package/services/multimedia/multimedia.service.d.cts +1 -1
  254. package/services/multimedia/multimedia.service.d.ts +1 -1
  255. package/services/multimedia/multimedia.service.js +1 -1
  256. package/services/multimedia/multimedia.types.cjs +1 -1
  257. package/services/multimedia/multimedia.types.d.cts +1 -1
  258. package/services/multimedia/multimedia.types.d.ts +1 -1
  259. package/services/multimedia/multimedia.types.js +1 -1
  260. package/services/product/index.cjs +1 -1
  261. package/services/product/index.d.cts +1 -1
  262. package/services/product/index.d.ts +1 -1
  263. package/services/product/index.js +1 -1
  264. package/services/product/product.service.cjs +1 -1
  265. package/services/product/product.service.d.cts +1 -1
  266. package/services/product/product.service.d.ts +1 -1
  267. package/services/product/product.service.js +1 -1
  268. package/services/product/product.types.cjs +1 -1
  269. package/services/product/product.types.d.cts +1 -1
  270. package/services/product/product.types.d.ts +1 -1
  271. package/services/product/product.types.js +1 -1
  272. package/services/request.provider.cjs +1 -1
  273. package/services/request.provider.d.cts +1 -1
  274. package/services/request.provider.d.ts +1 -1
  275. package/services/request.provider.js +1 -1
  276. package/services/session.service.cjs +1 -1
  277. package/services/session.service.d.cts +1 -1
  278. package/services/session.service.d.ts +1 -1
  279. package/services/session.service.js +1 -1
  280. package/services/upload/index.cjs +1 -1
  281. package/services/upload/index.d.cts +1 -1
  282. package/services/upload/index.d.ts +1 -1
  283. package/services/upload/index.js +1 -1
  284. package/services/upload/upload.service.cjs +1 -1
  285. package/services/upload/upload.service.d.cts +1 -1
  286. package/services/upload/upload.service.d.ts +1 -1
  287. package/services/upload/upload.service.js +1 -1
  288. package/themes/custom/audi-dark.theme.cjs +7 -3
  289. package/themes/custom/audi-dark.theme.css +921 -0
  290. package/themes/custom/audi-dark.theme.d.cts +2 -2
  291. package/themes/custom/audi-dark.theme.d.ts +2 -2
  292. package/themes/custom/audi-dark.theme.js +6 -2
  293. package/themes/custom/audi.theme.cjs +1 -1
  294. package/themes/custom/audi.theme.css +774 -0
  295. package/themes/custom/audi.theme.d.cts +2 -2
  296. package/themes/custom/audi.theme.d.ts +2 -2
  297. package/themes/custom/audi.theme.js +1 -1
  298. package/themes/custom/australia.theme.cjs +1 -1
  299. package/themes/custom/australia.theme.css +383 -0
  300. package/themes/custom/australia.theme.d.cts +2 -2
  301. package/themes/custom/australia.theme.d.ts +2 -2
  302. package/themes/custom/australia.theme.js +1 -1
  303. package/themes/custom/cuernavaca.theme.cjs +1 -1
  304. package/themes/custom/cuernavaca.theme.css +193 -0
  305. package/themes/custom/cuernavaca.theme.d.cts +2 -2
  306. package/themes/custom/cuernavaca.theme.d.ts +2 -2
  307. package/themes/custom/cuernavaca.theme.js +1 -1
  308. package/themes/custom/cupra-diagonal.theme.cjs +3 -22
  309. package/themes/custom/cupra-diagonal.theme.css +1009 -0
  310. package/themes/custom/cupra-diagonal.theme.d.cts +2 -2
  311. package/themes/custom/cupra-diagonal.theme.d.ts +2 -2
  312. package/themes/custom/cupra-diagonal.theme.js +3 -22
  313. package/themes/custom/cupra-events.theme.cjs +1 -1
  314. package/themes/custom/cupra-events.theme.css +552 -0
  315. package/themes/custom/cupra-events.theme.d.cts +2 -2
  316. package/themes/custom/cupra-events.theme.d.ts +2 -2
  317. package/themes/custom/cupra-events.theme.js +1 -1
  318. package/themes/custom/cupra.theme.cjs +1 -1
  319. package/themes/custom/cupra.theme.css +144 -0
  320. package/themes/custom/cupra.theme.d.cts +2 -2
  321. package/themes/custom/cupra.theme.d.ts +2 -2
  322. package/themes/custom/cupra.theme.js +1 -1
  323. package/themes/custom/germany.theme.cjs +5 -5
  324. package/themes/custom/germany.theme.css +713 -0
  325. package/themes/custom/germany.theme.d.cts +2 -2
  326. package/themes/custom/germany.theme.d.ts +2 -2
  327. package/themes/custom/germany.theme.js +4 -4
  328. package/themes/custom/hyundai.theme.cjs +1 -1
  329. package/themes/custom/hyundai.theme.css +291 -0
  330. package/themes/custom/hyundai.theme.d.cts +2 -2
  331. package/themes/custom/hyundai.theme.d.ts +2 -2
  332. package/themes/custom/hyundai.theme.js +1 -1
  333. package/themes/custom/italy.theme.cjs +3 -23
  334. package/themes/custom/italy.theme.css +827 -0
  335. package/themes/custom/italy.theme.d.cts +2 -2
  336. package/themes/custom/italy.theme.d.ts +2 -2
  337. package/themes/custom/italy.theme.js +3 -23
  338. package/themes/custom/magimix.theme.cjs +1 -1
  339. package/themes/custom/magimix.theme.css +116 -0
  340. package/themes/custom/magimix.theme.d.cts +2 -2
  341. package/themes/custom/magimix.theme.d.ts +2 -2
  342. package/themes/custom/magimix.theme.js +1 -1
  343. package/themes/custom/onlive-ai.theme.cjs +1 -1
  344. package/themes/custom/onlive-ai.theme.css +71 -0
  345. package/themes/custom/onlive-ai.theme.d.cts +2 -2
  346. package/themes/custom/onlive-ai.theme.d.ts +2 -2
  347. package/themes/custom/onlive-ai.theme.js +1 -1
  348. package/themes/custom/onlive.theme.cjs +1 -1
  349. package/themes/custom/onlive.theme.css +30 -0
  350. package/themes/custom/onlive.theme.d.cts +2 -2
  351. package/themes/custom/onlive.theme.d.ts +2 -2
  352. package/themes/custom/onlive.theme.js +1 -1
  353. package/themes/custom/seat-cupra.theme.cjs +1 -1
  354. package/themes/custom/seat-cupra.theme.css +475 -0
  355. package/themes/custom/seat-cupra.theme.d.cts +2 -2
  356. package/themes/custom/seat-cupra.theme.d.ts +2 -2
  357. package/themes/custom/seat-cupra.theme.js +1 -1
  358. package/themes/dark.cjs +367 -369
  359. package/themes/dark.css +413 -0
  360. package/themes/dark.d.cts +1 -1
  361. package/themes/dark.d.ts +1 -1
  362. package/themes/dark.js +367 -369
  363. package/themes/light.cjs +365 -366
  364. package/themes/light.css +411 -0
  365. package/themes/light.d.cts +1 -1
  366. package/themes/light.d.ts +1 -1
  367. package/themes/light.js +365 -366
  368. package/types/deep-link.types.cjs +1 -1
  369. package/types/deep-link.types.d.cts +1 -1
  370. package/types/deep-link.types.d.ts +1 -1
  371. package/types/deep-link.types.js +1 -1
  372. package/types/globals.cjs +1 -1
  373. package/types/globals.d.cts +1 -1
  374. package/types/globals.d.ts +1 -1
  375. package/types/globals.js +1 -1
  376. package/types/tracking-options.cjs +1 -1
  377. package/types/tracking-options.d.cts +1 -1
  378. package/types/tracking-options.d.ts +1 -1
  379. package/types/tracking-options.js +1 -1
  380. package/utils/adopt-styles.cjs +1 -1
  381. package/utils/adopt-styles.d.cts +1 -1
  382. package/utils/adopt-styles.d.ts +1 -1
  383. package/utils/adopt-styles.js +1 -1
  384. package/utils/apply-optional-styles.cjs +28 -63
  385. package/utils/apply-optional-styles.d.cts +15 -15
  386. package/utils/apply-optional-styles.d.ts +15 -15
  387. package/utils/apply-optional-styles.js +28 -63
  388. package/utils/browser-preferences.cjs +1 -1
  389. package/utils/browser-preferences.d.cts +1 -1
  390. package/utils/browser-preferences.d.ts +1 -1
  391. package/utils/browser-preferences.js +1 -1
  392. package/utils/classify-media.cjs +1 -1
  393. package/utils/classify-media.d.cts +1 -1
  394. package/utils/classify-media.d.ts +1 -1
  395. package/utils/classify-media.js +1 -1
  396. package/utils/decorators.cjs +1 -1
  397. package/utils/decorators.d.cts +1 -1
  398. package/utils/decorators.d.ts +1 -1
  399. package/utils/decorators.js +1 -1
  400. package/utils/detected-lang.cjs +1 -1
  401. package/utils/detected-lang.d.cts +1 -1
  402. package/utils/detected-lang.d.ts +1 -1
  403. package/utils/detected-lang.js +1 -1
  404. package/utils/fullscreen.cjs +1 -1
  405. package/utils/fullscreen.d.cts +1 -1
  406. package/utils/fullscreen.d.ts +1 -1
  407. package/utils/fullscreen.js +1 -1
  408. package/utils/insert-script.cjs +1 -1
  409. package/utils/insert-script.d.cts +1 -1
  410. package/utils/insert-script.d.ts +1 -1
  411. package/utils/insert-script.js +1 -1
  412. package/utils/is-map-compatible.cjs +1 -1
  413. package/utils/is-map-compatible.d.cts +1 -1
  414. package/utils/is-map-compatible.d.ts +1 -1
  415. package/utils/is-map-compatible.js +1 -1
  416. package/utils/markdown.cjs +1 -1
  417. package/utils/markdown.d.cts +1 -1
  418. package/utils/markdown.d.ts +1 -1
  419. package/utils/markdown.js +1 -1
  420. package/utils/merge.cjs +1 -1
  421. package/utils/merge.d.cts +1 -1
  422. package/utils/merge.d.ts +1 -1
  423. package/utils/merge.js +1 -1
  424. package/utils/multiband-track-volume.cjs +1 -1
  425. package/utils/multiband-track-volume.d.cts +1 -1
  426. package/utils/multiband-track-volume.d.ts +1 -1
  427. package/utils/multiband-track-volume.js +1 -1
  428. package/utils/onlive-url-params.cjs +1 -1
  429. package/utils/onlive-url-params.d.cts +1 -1
  430. package/utils/onlive-url-params.d.ts +1 -1
  431. package/utils/onlive-url-params.js +1 -1
  432. package/utils/pretty-distance.cjs +1 -1
  433. package/utils/pretty-distance.d.cts +1 -1
  434. package/utils/pretty-distance.d.ts +1 -1
  435. package/utils/pretty-distance.js +1 -1
  436. package/utils/pretty-time.cjs +1 -1
  437. package/utils/pretty-time.d.cts +1 -1
  438. package/utils/pretty-time.d.ts +1 -1
  439. package/utils/pretty-time.js +1 -1
  440. package/utils/random-string.cjs +1 -1
  441. package/utils/random-string.d.cts +1 -1
  442. package/utils/random-string.d.ts +1 -1
  443. package/utils/random-string.js +1 -1
  444. package/utils/resource-type.cjs +1 -1
  445. package/utils/resource-type.d.cts +1 -1
  446. package/utils/resource-type.d.ts +1 -1
  447. package/utils/resource-type.js +1 -1
  448. package/utils/round-number.cjs +1 -1
  449. package/utils/round-number.d.cts +1 -1
  450. package/utils/round-number.d.ts +1 -1
  451. package/utils/round-number.js +1 -1
  452. package/utils/safe-html.cjs +1 -1
  453. package/utils/safe-html.d.cts +1 -1
  454. package/utils/safe-html.d.ts +1 -1
  455. package/utils/safe-html.js +1 -1
  456. package/utils/sanitize.cjs +1 -1
  457. package/utils/sanitize.d.cts +1 -1
  458. package/utils/sanitize.d.ts +1 -1
  459. package/utils/sanitize.js +1 -1
  460. package/utils/spread.cjs +1 -1
  461. package/utils/spread.d.cts +1 -1
  462. package/utils/spread.d.ts +1 -1
  463. package/utils/spread.js +1 -1
  464. package/utils/watch.cjs +1 -1
  465. package/utils/watch.d.cts +1 -1
  466. package/utils/watch.d.ts +1 -1
  467. package/utils/watch.js +1 -1
package/index.cjs CHANGED
@@ -1,5 +1,5 @@
1
- /*! @onlive.ai/common-121 v0.2.187 | © 2026 Onlive.ai */
2
- "use strict";var Ai=Object.create;var Te=Object.defineProperty;var Jt=Object.getOwnPropertyDescriptor;var Ci=Object.getOwnPropertyNames;var Ti=Object.getPrototypeOf,Pi=Object.prototype.hasOwnProperty;var Ri=(s,e)=>()=>(s&&(e=s(s=0)),e);var Bt=(s,e)=>{for(var t in e)Te(s,t,{get:e[t],enumerable:!0})},Kt=(s,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Ci(e))!Pi.call(s,o)&&o!==t&&Te(s,o,{get:()=>e[o],enumerable:!(i=Jt(e,o))||i.enumerable});return s};var A=(s,e,t)=>(t=s!=null?Ai(Ti(s)):{},Kt(e||!s||!s.__esModule?Te(t,"default",{value:s,enumerable:!0}):t,s)),Ii=s=>Kt(Te({},"__esModule",{value:!0}),s),v=(s,e,t,i)=>{for(var o=i>1?void 0:i?Jt(e,t):e,r=s.length-1,n;r>=0;r--)(n=s[r])&&(o=(i?n(e,t,o):n(o))||o);return i&&o&&Te(e,t,o),o};var xe={};Bt(xe,{SYNTHETIC_MEDIA_PRESETS:()=>ze,createSyntheticAudioTrack:()=>Ee,createSyntheticMedia:()=>Oe,createSyntheticMediaFromPreset:()=>Ze,createSyntheticVideoTrack:()=>Ie});function Ie(s={}){let{width:e=640,height:t=480,fps:i=30,backgroundColor:o="#1a1a2e",foregroundColor:r="#4361ee",label:n="Mock Video",animation:a="wave"}=s,l=document.createElement("canvas");l.width=e,l.height=t;let d=l.getContext("2d"),m,V=Date.now(),J={wave:I=>{d.fillStyle=o,d.fillRect(0,0,e,t),d.strokeStyle=r,d.lineWidth=3,d.beginPath();for(let S=0;S<e;S++){let T=t/2+Math.sin(S/e*4*Math.PI+I*.002)*(t/4);S===0?d.moveTo(S,T):d.lineTo(S,T)}d.stroke()},pulse:I=>{d.fillStyle=o,d.fillRect(0,0,e,t);let S=Math.sin(I*.003)*.3+.7,T=Math.min(e,t)*.3*S;d.beginPath(),d.arc(e/2,t/2,T,0,Math.PI*2),d.fillStyle=r,d.fill()},bars:I=>{d.fillStyle=o,d.fillRect(0,0,e,t);let S=20,T=e/S,W=t*.7;d.fillStyle=r;for(let Ce=0;Ce<S;Ce++){let Vt=Math.abs(Math.sin(Ce/S*Math.PI*2+I*.004))*W,xi=Ce*T,_i=t-Vt;d.fillRect(xi+2,_i,T-4,Vt)}},avatar:I=>{d.fillStyle=o,d.fillRect(0,0,e,t);let S=e/2,T=t/2-20,W=Math.min(e,t)*.15;d.beginPath(),d.arc(S,T,W,0,Math.PI*2),d.fillStyle=r,d.fill(),d.beginPath(),d.ellipse(S,T+W*2.2,W*1.5,W,0,Math.PI,0),d.fill(),Math.sin(I*.01)>0&&(d.beginPath(),d.arc(S,T+W*3,5+Math.sin(I*.02)*3,0,Math.PI*2),d.fillStyle="#22c55e",d.fill())},none:()=>{d.fillStyle=o,d.fillRect(0,0,e,t)}},B=()=>{d.fillStyle="rgba(255, 255, 255, 0.8)",d.font=`${Math.floor(t*.04)}px system-ui, sans-serif`,d.textAlign="center",d.fillText(n,e/2,t-20)},ae=()=>{let I=Date.now()-V;J[a](I),B(),m=requestAnimationFrame(ae)};ae();let Nt=l.captureStream(i),Ht=Nt.getVideoTracks()[0];return{track:Ht,stream:Nt,cleanup:()=>{cancelAnimationFrame(m),Ht.stop()}}}function Ee(s={}){let{frequency:e=440,volume:t=.1,waveType:i="sine",addVariation:o=!0,enabled:r=!1}=s,n=new AudioContext,a=n.createMediaStreamDestination(),l=n.createOscillator();l.type=i,l.frequency.value=e;let d=n.createGain();d.gain.value=r?t:0;let m=null,V=null;o&&(m=n.createOscillator(),m.frequency.value=.5,V=n.createGain(),V.gain.value=10,m.connect(V),V.connect(l.frequency),m.start()),l.connect(d),d.connect(a),l.start();let J=a.stream,B=J.getAudioTracks()[0];return{track:B,stream:J,setVolume:ae=>{d.gain.value=Math.max(0,Math.min(1,ae))},setEnabled:ae=>{d.gain.value=ae?t:0},cleanup:()=>{l.stop(),m?.stop(),n.close(),B.stop()}}}function Oe(s,e){let t=Ie(s),i=Ee(e),o=new MediaStream([t.track,i.track]);return{videoTrack:t.track,audioTrack:i.track,combinedStream:o,setAudioVolume:i.setVolume,setAudioEnabled:i.setEnabled,cleanup:()=>{t.cleanup(),i.cleanup()}}}function Ze(s){let e=ze[s];return Oe(e.video,e.audio)}var ze,re=Ri(()=>{"use strict";ze={localCamera:{video:{width:640,height:480,animation:"avatar",label:"You",foregroundColor:"#4361ee"},audio:{enabled:!1}},agentCamera:{video:{width:640,height:480,animation:"avatar",label:"AI Agent",foregroundColor:"#22c55e",backgroundColor:"#0f172a"},audio:{enabled:!1,frequency:300}},screenShare:{video:{width:1920,height:1080,animation:"bars",label:"Screen Share",backgroundColor:"#0a0a0a",foregroundColor:"#f59e0b"},audio:{enabled:!1}},voiceOnly:{video:{width:320,height:240,animation:"wave",label:"Voice Call"},audio:{enabled:!1,volume:.05}}}});var Ki={};Bt(Ki,{AgentNotFoundError:()=>ye,Asset:()=>pi,ConversationServiceFactory:()=>H,DeepLinkAction:()=>at,DeepLinkService:()=>lt,InvalidOperationError:()=>we,MockConversationService:()=>F,MockEventEmitter:()=>se,MockLiveKitError:()=>b,MockLocalParticipant:()=>Y,MockParticipant:()=>L,MockRoom:()=>D,MockServiceActions:()=>nt,MockState:()=>ne,MockTextStreamReader:()=>Ae,MockTrack:()=>C,MockTrackPublication:()=>_,NetworkError:()=>je,OSBAsset:()=>j,OSBSideBar:()=>f,OSBUpload:()=>R,ParticipantAlreadyJoinedError:()=>he,ParticipantNotFoundError:()=>fe,RoomEndedError:()=>ve,RoomNotFoundError:()=>O,SYNTHETIC_MEDIA_PRESETS:()=>ze,SideBar:()=>gi,StorybookScenarios:()=>Ut,TimeoutError:()=>Se,TrackNotFoundError:()=>be,UnauthorizedError:()=>ke,Upload:()=>fi,createAgentFixture:()=>$e,createAgentWithCannedResponses:()=>Ct,createChatScenario:()=>Ot,createConversationFixture:()=>st,createConversationService:()=>Mt,createDefaultConfig:()=>_e,createDefaultRoomFixture:()=>De,createDeterministicConfig:()=>Et,createErrorFromMockError:()=>oe,createLatencyConfig:()=>It,createMessageFixture:()=>Pt,createMockConversationService:()=>Le,createMockServiceFactory:()=>$t,createParticipantBatch:()=>At,createParticipantFixture:()=>ot,createRoomWithAgent:()=>Ue,createRoomWithAgentAndDataTrack:()=>xt,createRoomWithLocalParticipant:()=>Fe,createRoomWithMediaTracks:()=>_t,createRoomWithTwoParticipants:()=>it,createSequentialAgent:()=>Tt,createStrictConfig:()=>Rt,createSyntheticAudioTrack:()=>Ee,createSyntheticMedia:()=>Oe,createSyntheticMediaFromPreset:()=>Ze,createSyntheticVideoTrack:()=>Ie,createVideoCallScenario:()=>zt,decodeMockToken:()=>mt,destroyStorybookMockService:()=>Lt,generateMockApiResponseId:()=>bt,generateMockExternalId:()=>yt,generateMockId:()=>g,generateMockIdBatch:()=>kt,generateMockMessageId:()=>ft,generateMockParticipantIdentity:()=>gt,generateMockRoomName:()=>vt,generateMockToken:()=>E,generateMockTrackSid:()=>ht,generateMockWsUrl:()=>ie,generateSeededMockId:()=>ut,getStorybookMockService:()=>y,isMockConversationService:()=>Ft,isMockError:()=>z,isMockLiveKitError:()=>jt,resetIdCounter:()=>Re,resetStorybookMockService:()=>rt,setIdCounter:()=>pt,withMockConversationService:()=>Dt});module.exports=Ii(Ki);var ee=require("lit"),P=require("lit/decorators.js"),si=require("lit/directives/class-map.js");var Ei=(s,e)=>(customElements.get(s)?console.debug(`Custom element <${s}> is already defined, skipping definition of ${e.name}.`):window.customElements.define(s,e),e),Oi=(s,e)=>{let{kind:t,elements:i}=e;return{kind:t,elements:i,finisher(o){customElements.get(s)||window.customElements.define(s,o)}}},K=s=>e=>typeof e=="function"?Ei(s,e):Oi(s,e);var le=class s{constructor(e){this.config=e}static initialize(e){return new s(e)}getBaseUrl(){return`${this.config.baseUrl}`}getHeaders(){return{"Content-Type":"application/json"}}async makeRequest(e,t={}){let i=`${this.getBaseUrl()}${e}`,o=await fetch(i,{...t,headers:{...this.getHeaders(),...t.headers}});if(!o.ok)throw new Error(`FAQs API error: ${o.status} ${o.statusText}`);return o.json()}async getSettingsByOrganization(e,t){try{let i=new URLSearchParams;t&&i.append("userGroupId",t);let o=i.toString(),r=`${this.getBaseUrl()}/settings/organization/${e}${o?`?${o}`:""}`,n=await fetch(r,{method:"GET",headers:this.getHeaders(),credentials:"include"});if(n.status===404)return null;if(!n.ok)throw new Error(`Failed to fetch settings: ${n.statusText}`);return await n.json()}catch(i){return console.error("Error fetching settings:",i),null}}async getFaqs(e={}){let t=new URLSearchParams;if(e.search&&t.append("search",e.search),e.organizationId&&t.append("organizationId",e.organizationId),e.groupId&&t.append("groupId",e.groupId),e.isActive!==void 0&&t.append("isActive",e.isActive.toString()),e.page&&t.append("page",e.page.toString()),e.limit&&t.append("limit",e.limit.toString()),e.sortBy&&t.append("sortBy",e.sortBy),e.sortOrder&&t.append("sortOrder",e.sortOrder),e.extraFilters){for(let[r,n]of Object.entries(e.extraFilters))if(n&&(Array.isArray(n)?n.length>0:n.toString().trim()!=="")){let a=Array.isArray(n)?n.join(","):n.toString();t.append(`extra_${r}`,a)}}let i=t.toString(),o=`/faqs${i?`?${i}`:""}`;return this.makeRequest(o)}async getFaqById(e){return this.makeRequest(`/faqs/${e}`,{})}};var h=async(s,e)=>{let t=await fetch(s,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 ce=class s{constructor(e){this.config=e,this.enableUpload=e.enableUpload||!1}static getInstance(e){if(!s.instance&&e&&(s.instance=new s(e)),!s.instance)throw new Error("FileService must be initialized with config first");return s.instance}static initialize(e){return s.instance=new s(e),s.instance}async uploadFile(e,t={}){try{let i=await this.requestSignedUrl({filename:e.name,description:t.description,loadDirection:"up",bucketType:t.bucketType||"conversations",path:t.path||".temp",mimeType:e.type});return await this.uploadToSignedUrl(i.data.signedUrlData.signedUrl,e),{success:!0,id:i.data.file.id,name:i.data.file.name,url:i.data.file.url,type:i.data.file.type}}catch(i){return console.error("Error uploading file:",i),{success:!1,error:i instanceof Error?i.message:"Unknown error"}}}async requestSignedUrl(e){let t=`${this.config.baseUrl}/files/upload-url`;return this.makeRequest(t,{method:"POST",body:JSON.stringify(e)})}async uploadToSignedUrl(e,t){let i=await fetch(e,{method:"PUT",body:t,headers:{"Content-Type":t.type}});if(!i.ok){let o=await i.text().catch(()=>"No response");throw new Error(`Upload failed with status: ${i.status}. Response: ${o}`)}}async uploadFileWithRetry(e,t={}){let i=t.maxRetries||3,o=null;for(let r=1;r<=i;r++)try{let n=await this.uploadFile(e,t);if(n.success)return n;throw new Error(n.error||"Upload failed")}catch(n){if(o=n instanceof Error?n:new Error("Unknown error"),r===i)break;let a=2**r*1e3;await new Promise(l=>setTimeout(l,a))}return{success:!1,error:o?.message||"Upload failed after retries"}}async getFileById(e){let t=`${this.config.baseUrl}/files/${e}`,i=await this.makeRequest(t);if(!i.success)throw new Error("Failed to get file");return i.data}async makeRequest(e,t){let i={"Content-Type":"application/json"};return this.config.organizationId&&(i["X-Onlive-Organization-Id"]=this.config.organizationId),t?.headers&&Object.assign(i,t.headers),h(e,{...t,headers:i})}updateConfig(e){this.config={...this.config,...e}}getConfig(){return{...this.config}}};var de=class s{constructor(e){this.config=e}static getInstance(e){if(!s.instance&&e&&(s.instance=new s(e)),!s.instance)throw new Error("MultimediaService must be initialized with config first");return s.instance}static initialize(e){return s.instance=new s(e),s.instance}async getImages(e={}){let t=new URLSearchParams({type:"image",page:(e.page||1).toString(),limit:(e.limit||12).toString(),...e.search&&{search:e.search},...e.labels&&{labels:e.labels.join(",")},...e.includeSecureToken&&{includeSecureToken:e.includeSecureToken.toString()}});this.appendExtraFilters(t,e.extraFilters);let i=`${this.config.baseUrl}/multimedia?${t}`;return this.makeRequest(i)}async getVideos(e={}){let t=new URLSearchParams({type:"video",page:(e.page||1).toString(),limit:(e.limit||12).toString(),...e.search&&{search:e.search},...e.labels&&{labels:e.labels.join(",")},...e.includeSecureToken&&{includeSecureToken:e.includeSecureToken.toString()}});this.appendExtraFilters(t,e.extraFilters);let i=`${this.config.baseUrl}/multimedia?${t}`;return this.makeRequest(i)}async getPresentations(e={}){let t=new URLSearchParams({type:"presentation",page:(e.page||1).toString(),limit:(e.limit||12).toString(),...e.search&&{search:e.search},...e.labels&&{labels:e.labels.join(",")},...e.includeSecureToken&&{includeSecureToken:e.includeSecureToken.toString()}});this.appendExtraFilters(t,e.extraFilters);let i=`${this.config.baseUrl}/multimedia?${t}`;return this.makeRequest(i)}async getAllMultimedia(e={}){let[t,i,o]=await Promise.all([this.getImages(e),this.getVideos(e),this.getPresentations(e)]);return{images:t,videos:i,presentations:o}}async getMultimediaByToken(e){let t=`${this.config.baseUrl}/multimedia/secure-token/${e}`;return this.makeRequest(t,!1)}async searchMultimedia(e,t){let i={search:e,page:1,limit:50,includeSecureToken:!0};if(t)return this.getMultimediaByType(t,i);let[o,r,n]=await Promise.all([this.getImages(i),this.getVideos(i),this.getPresentations(i)]),a=[...o.items,...r.items,...n.items];return{items:a,total:a.length,count:a.length,currentPage:1,totalPages:1}}async getMultimediaByType(e,t){switch(e){case"image":return this.getImages(t);case"video":return this.getVideos(t);case"presentation":return this.getPresentations(t);default:throw new Error(`Invalid multimedia type: ${e}`)}}appendExtraFilters(e,t){if(t){for(let[i,o]of Object.entries(t))if(o&&(Array.isArray(o)?o.length>0:o.toString().trim()!=="")){let r=Array.isArray(o)?o.join(","):o.toString();e.append(`extra_${i}`,r)}}}async makeRequest(e,t=!0){let i={"Content-Type":"application/json","X-Onlive-Organization-Id":this.config.organizationId};return h(e,{method:"GET",headers:i,credentials:t?"include":void 0})}updateConfig(e){this.config={...this.config,...e}}getConfig(){return{...this.config}}};var X=class s{constructor(e){this.config=e}static getInstance(e){if(!s.instance&&e&&(s.instance=new s(e)),!s.instance)throw new Error("ProductService must be initialized with config first");return s.instance}static initialize(e){return s.instance=new s(e),s.instance}async getProducts(e={}){let t=new URLSearchParams({...e.title&&{title:e.title},...e.search&&{search:e.search},...e.category&&{category:e.category},...e.tags&&{tags:e.tags.join(",")},...e.sortBy&&{sortBy:e.sortBy},...e.sortOrder&&{sortOrder:e.sortOrder},...e.minPrice&&{minPrice:e.minPrice.toString()},...e.maxPrice&&{maxPrice:e.maxPrice.toString()},...e.inStock!==void 0&&{inStock:e.inStock.toString()},...e.offset&&{offset:e.offset.toString()},...e.includeSecureToken&&{includeSecureToken:e.includeSecureToken.toString()}});e.extraFields&&Object.keys(e.extraFields).length>0&&t.append("extraFields",JSON.stringify(e.extraFields));let i=`${this.config.baseUrl}/products?${t}`;return this.makeRequest(i,!0)}async getProductByToken(e){let t=`${this.config.baseUrl}/products/secure-token/${e}`;return this.makeRequest(t)}async searchProducts(e,t={}){return this.getProducts({...t,search:e})}async makeRequest(e,t=!1){let i={"Content-Type":"application/json","X-Onlive-Organization-Id":this.config.organizationId};return h(e,{method:"GET",headers:i,credentials:t?"include":"same-origin"})}updateConfig(e){this.config={...this.config,...e}}getConfig(){return{...this.config}}};var qe=class{constructor(e){e?.multimediaService&&(this.multimediaService=de.initialize(e.multimediaService)),e?.faqsService&&(this.faqsService=le.initialize(e.faqsService)),e?.productService&&(this.productService=X.initialize(e.productService)),e?.fileService&&(this.fileService=ce.initialize(e.fileService))}async loadAsset(e,t){switch(e){case"multimedia":return this.loadMultimediaAsset(t);case"product":return this.loadProductAsset(t);case"faq":return this.loadFaqAsset(t);case"file":return this.loadFileAsset(t);default:throw new Error(`Unsupported asset type: ${e}`)}}async loadMultimediaAsset(e){if(!this.multimediaService)throw new Error("MultimediaService not configured");let t=await this.multimediaService.getMultimediaByToken(e);if(!t)throw new Error("Multimedia not found");return{id:t.id,name:t.name,description:t.description||"",url:t.url,thumbnail:t.animatedCoverUrl||t.url,type:"multimedia",externalId:t.id,format:t.format,size:t.size||void 0,duration:t.duration||void 0,vodUrl:t.vodUrl||void 0,slides:t.slides||[],labels:t.labels,animatedCoverUrl:t.animatedCoverUrl||void 0,metadata:{organizationId:t.organizationId,status:t.status,createdAt:t.createdAt,updatedAt:t.updatedAt}}}async loadProductAsset(e){if(!this.productService)throw new Error("MultimediaService not configured");let t=await this.productService.getProductByToken(e);if(!t)throw new Error("Product not found");return{id:t.id,name:t.name,description:t.description,url:t.url,thumbnail:t.images?.[0],type:"product",externalId:t.externalId,price:t.price,currency:t.currency,category:t.category,tags:t.tags,images:t.images,variants:t.variants?.map(i=>({id:i.id,externalId:i.externalId,price:i.price,currency:i.currency,images:i.images})),options:t.options,metadata:{providerType:t.providerType,providerId:t.providerId,discountType:t.discountType,discount:t.discount,stock:t.stock,broken:t.broken}}}async loadFaqAsset(e){if(!this.faqsService)throw new Error("FaqsService not configured");let t=await this.faqsService.getFaqById(e);return{id:t.id,name:t.question,description:t.answer,url:`#faq-${t.id}`,type:"faq",externalId:t.id,question:t.question,answer:t.answer,priority:t.priority,isActive:t.isActive,metadata:{organizationId:t.organizationId,createdAt:t.createdAt,updatedAt:t.updatedAt}}}async loadFileAsset(e){if(!this.fileService)throw new Error("FileService not configured");let t=await this.fileService.getFileById(e),i=t.type||"",o=i.startsWith("video/"),r=i.startsWith("image/");return{id:t.id,name:t.name,description:t.description||"",url:t.url,thumbnail:r?t.url:void 0,type:"file",externalId:t.id,format:i,size:t.metadata?.size,duration:void 0,vodUrl:o?t.url:void 0,labels:[],animatedCoverUrl:o?t.url:void 0,metadata:{path:t.metadata?.path,bucketType:t.metadata?.bucketType,loadDirection:t.metadata?.loadDirection,createdAt:t.createdAt,updatedAt:t.updatedAt}}}};var c=require("lit"),ti=require("lit/directives/class-map.js"),pe=require("lit/directives/if-defined.js"),U=require("lit/directives/when.js");var Yt=require("lit/directives/unsafe-html.js");var ct=A(require("dompurify"),1),zi={ALLOWED_TAGS:["p","br","span","b","strong","i","em","u","s","del","ul","ol","li","code","pre","a","h1","h2","h3","h4","table","thead","tbody","tr","th","td"],ALLOWED_ATTR:["href","target","rel","title","aria-label","role","colspan","rowspan"],FORCE_HTTPS:!0,ALLOW_DATA_ATTR:!1};ct.default.addHook("afterSanitizeAttributes",s=>{"target"in s&&s.target==="_blank"&&s.setAttribute("rel","noopener noreferrer")});var Gt=(s,e=zi)=>ct.default.sanitize(s,e);function Qt(s=""){return(0,Yt.unsafeHTML)(Li(s))}function Li(s=""){return Gt(s,{ADD_ATTR:["target","rel"],ADD_TAGS:["ol-"],CUSTOM_ELEMENT_HANDLING:{tagNameCheck:/^ol-/,attributeNameCheck:null,allowCustomizedBuiltInElements:!0}})}var bo=require("@onlive.ai/ui/dist/components/button/button.js"),yo=require("@onlive.ai/ui/dist/components/icon/icon.js"),Pe=require("lit"),He=require("lit/decorators.js"),Zt=require("lit/directives/repeat.js"),ei=A(require("video.js"),1);var Ne=require("lit"),Wt=A(require("video.js/dist/video-js.min.css?inline"),1),Xt=Ne.css`
1
+ /*! @onlive.ai/common-121 v0.2.190 | © 2026 Onlive.ai */
2
+ "use strict";var Ai=Object.create;var Te=Object.defineProperty;var Jt=Object.getOwnPropertyDescriptor;var Ci=Object.getOwnPropertyNames;var Ti=Object.getPrototypeOf,Pi=Object.prototype.hasOwnProperty;var Ri=(s,e)=>()=>(s&&(e=s(s=0)),e);var Bt=(s,e)=>{for(var t in e)Te(s,t,{get:e[t],enumerable:!0})},Kt=(s,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Ci(e))!Pi.call(s,o)&&o!==t&&Te(s,o,{get:()=>e[o],enumerable:!(i=Jt(e,o))||i.enumerable});return s};var A=(s,e,t)=>(t=s!=null?Ai(Ti(s)):{},Kt(e||!s||!s.__esModule?Te(t,"default",{value:s,enumerable:!0}):t,s)),Ii=s=>Kt(Te({},"__esModule",{value:!0}),s),v=(s,e,t,i)=>{for(var o=i>1?void 0:i?Jt(e,t):e,n=s.length-1,r;n>=0;n--)(r=s[n])&&(o=(i?r(e,t,o):r(o))||o);return i&&o&&Te(e,t,o),o};var xe={};Bt(xe,{SYNTHETIC_MEDIA_PRESETS:()=>ze,createSyntheticAudioTrack:()=>Ee,createSyntheticMedia:()=>Oe,createSyntheticMediaFromPreset:()=>Ze,createSyntheticVideoTrack:()=>Ie});function Ie(s={}){let{width:e=640,height:t=480,fps:i=30,backgroundColor:o="#1a1a2e",foregroundColor:n="#4361ee",label:r="Mock Video",animation:a="wave"}=s,l=document.createElement("canvas");l.width=e,l.height=t;let d=l.getContext("2d"),m,V=Date.now(),J={wave:I=>{d.fillStyle=o,d.fillRect(0,0,e,t),d.strokeStyle=n,d.lineWidth=3,d.beginPath();for(let S=0;S<e;S++){let T=t/2+Math.sin(S/e*4*Math.PI+I*.002)*(t/4);S===0?d.moveTo(S,T):d.lineTo(S,T)}d.stroke()},pulse:I=>{d.fillStyle=o,d.fillRect(0,0,e,t);let S=Math.sin(I*.003)*.3+.7,T=Math.min(e,t)*.3*S;d.beginPath(),d.arc(e/2,t/2,T,0,Math.PI*2),d.fillStyle=n,d.fill()},bars:I=>{d.fillStyle=o,d.fillRect(0,0,e,t);let S=20,T=e/S,W=t*.7;d.fillStyle=n;for(let Ce=0;Ce<S;Ce++){let Vt=Math.abs(Math.sin(Ce/S*Math.PI*2+I*.004))*W,xi=Ce*T,_i=t-Vt;d.fillRect(xi+2,_i,T-4,Vt)}},avatar:I=>{d.fillStyle=o,d.fillRect(0,0,e,t);let S=e/2,T=t/2-20,W=Math.min(e,t)*.15;d.beginPath(),d.arc(S,T,W,0,Math.PI*2),d.fillStyle=n,d.fill(),d.beginPath(),d.ellipse(S,T+W*2.2,W*1.5,W,0,Math.PI,0),d.fill(),Math.sin(I*.01)>0&&(d.beginPath(),d.arc(S,T+W*3,5+Math.sin(I*.02)*3,0,Math.PI*2),d.fillStyle="#22c55e",d.fill())},none:()=>{d.fillStyle=o,d.fillRect(0,0,e,t)}},B=()=>{d.fillStyle="rgba(255, 255, 255, 0.8)",d.font=`${Math.floor(t*.04)}px system-ui, sans-serif`,d.textAlign="center",d.fillText(r,e/2,t-20)},ae=()=>{let I=Date.now()-V;J[a](I),B(),m=requestAnimationFrame(ae)};ae();let Nt=l.captureStream(i),Ht=Nt.getVideoTracks()[0];return{track:Ht,stream:Nt,cleanup:()=>{cancelAnimationFrame(m),Ht.stop()}}}function Ee(s={}){let{frequency:e=440,volume:t=.1,waveType:i="sine",addVariation:o=!0,enabled:n=!1}=s,r=new AudioContext,a=r.createMediaStreamDestination(),l=r.createOscillator();l.type=i,l.frequency.value=e;let d=r.createGain();d.gain.value=n?t:0;let m=null,V=null;o&&(m=r.createOscillator(),m.frequency.value=.5,V=r.createGain(),V.gain.value=10,m.connect(V),V.connect(l.frequency),m.start()),l.connect(d),d.connect(a),l.start();let J=a.stream,B=J.getAudioTracks()[0];return{track:B,stream:J,setVolume:ae=>{d.gain.value=Math.max(0,Math.min(1,ae))},setEnabled:ae=>{d.gain.value=ae?t:0},cleanup:()=>{l.stop(),m?.stop(),r.close(),B.stop()}}}function Oe(s,e){let t=Ie(s),i=Ee(e),o=new MediaStream([t.track,i.track]);return{videoTrack:t.track,audioTrack:i.track,combinedStream:o,setAudioVolume:i.setVolume,setAudioEnabled:i.setEnabled,cleanup:()=>{t.cleanup(),i.cleanup()}}}function Ze(s){let e=ze[s];return Oe(e.video,e.audio)}var ze,ne=Ri(()=>{"use strict";ze={localCamera:{video:{width:640,height:480,animation:"avatar",label:"You",foregroundColor:"#4361ee"},audio:{enabled:!1}},agentCamera:{video:{width:640,height:480,animation:"avatar",label:"AI Agent",foregroundColor:"#22c55e",backgroundColor:"#0f172a"},audio:{enabled:!1,frequency:300}},screenShare:{video:{width:1920,height:1080,animation:"bars",label:"Screen Share",backgroundColor:"#0a0a0a",foregroundColor:"#f59e0b"},audio:{enabled:!1}},voiceOnly:{video:{width:320,height:240,animation:"wave",label:"Voice Call"},audio:{enabled:!1,volume:.05}}}});var Ki={};Bt(Ki,{AgentNotFoundError:()=>ye,Asset:()=>pi,ConversationServiceFactory:()=>H,DeepLinkAction:()=>at,DeepLinkService:()=>lt,InvalidOperationError:()=>we,MockConversationService:()=>F,MockEventEmitter:()=>se,MockLiveKitError:()=>b,MockLocalParticipant:()=>Y,MockParticipant:()=>L,MockRoom:()=>D,MockServiceActions:()=>rt,MockState:()=>re,MockTextStreamReader:()=>Ae,MockTrack:()=>C,MockTrackPublication:()=>_,NetworkError:()=>je,OSBAsset:()=>j,OSBSideBar:()=>f,OSBUpload:()=>R,ParticipantAlreadyJoinedError:()=>he,ParticipantNotFoundError:()=>fe,RoomEndedError:()=>ve,RoomNotFoundError:()=>O,SYNTHETIC_MEDIA_PRESETS:()=>ze,SideBar:()=>gi,StorybookScenarios:()=>Ut,TimeoutError:()=>Se,TrackNotFoundError:()=>be,UnauthorizedError:()=>ke,Upload:()=>fi,createAgentFixture:()=>$e,createAgentWithCannedResponses:()=>Ct,createChatScenario:()=>Ot,createConversationFixture:()=>st,createConversationService:()=>Mt,createDefaultConfig:()=>_e,createDefaultRoomFixture:()=>De,createDeterministicConfig:()=>Et,createErrorFromMockError:()=>oe,createLatencyConfig:()=>It,createMessageFixture:()=>Pt,createMockConversationService:()=>Le,createMockServiceFactory:()=>$t,createParticipantBatch:()=>At,createParticipantFixture:()=>ot,createRoomWithAgent:()=>Ue,createRoomWithAgentAndDataTrack:()=>xt,createRoomWithLocalParticipant:()=>Fe,createRoomWithMediaTracks:()=>_t,createRoomWithTwoParticipants:()=>it,createSequentialAgent:()=>Tt,createStrictConfig:()=>Rt,createSyntheticAudioTrack:()=>Ee,createSyntheticMedia:()=>Oe,createSyntheticMediaFromPreset:()=>Ze,createSyntheticVideoTrack:()=>Ie,createVideoCallScenario:()=>zt,decodeMockToken:()=>mt,destroyStorybookMockService:()=>Lt,generateMockApiResponseId:()=>bt,generateMockExternalId:()=>yt,generateMockId:()=>g,generateMockIdBatch:()=>kt,generateMockMessageId:()=>ft,generateMockParticipantIdentity:()=>gt,generateMockRoomName:()=>vt,generateMockToken:()=>E,generateMockTrackSid:()=>ht,generateMockWsUrl:()=>ie,generateSeededMockId:()=>ut,getStorybookMockService:()=>y,isMockConversationService:()=>Ft,isMockError:()=>z,isMockLiveKitError:()=>jt,resetIdCounter:()=>Re,resetStorybookMockService:()=>nt,setIdCounter:()=>pt,withMockConversationService:()=>Dt});module.exports=Ii(Ki);var ee=require("lit"),P=require("lit/decorators.js"),si=require("lit/directives/class-map.js");var Ei=(s,e)=>(customElements.get(s)?console.debug(`Custom element <${s}> is already defined, skipping definition of ${e.name}.`):window.customElements.define(s,e),e),Oi=(s,e)=>{let{kind:t,elements:i}=e;return{kind:t,elements:i,finisher(o){customElements.get(s)||window.customElements.define(s,o)}}},K=s=>e=>typeof e=="function"?Ei(s,e):Oi(s,e);var le=class s{constructor(e){this.config=e}static initialize(e){return new s(e)}getBaseUrl(){return`${this.config.baseUrl}`}getHeaders(){return{"Content-Type":"application/json"}}async makeRequest(e,t={}){let i=`${this.getBaseUrl()}${e}`,o=await fetch(i,{...t,headers:{...this.getHeaders(),...t.headers}});if(!o.ok)throw new Error(`FAQs API error: ${o.status} ${o.statusText}`);return o.json()}async getSettingsByOrganization(e,t){try{let i=new URLSearchParams;t&&i.append("userGroupId",t);let o=i.toString(),n=`${this.getBaseUrl()}/settings/organization/${e}${o?`?${o}`:""}`,r=await fetch(n,{method:"GET",headers:this.getHeaders(),credentials:"include"});if(r.status===404)return null;if(!r.ok)throw new Error(`Failed to fetch settings: ${r.statusText}`);return await r.json()}catch(i){return console.error("Error fetching settings:",i),null}}async getFaqs(e={}){let t=new URLSearchParams;if(e.search&&t.append("search",e.search),e.organizationId&&t.append("organizationId",e.organizationId),e.groupId&&t.append("groupId",e.groupId),e.isActive!==void 0&&t.append("isActive",e.isActive.toString()),e.page&&t.append("page",e.page.toString()),e.limit&&t.append("limit",e.limit.toString()),e.sortBy&&t.append("sortBy",e.sortBy),e.sortOrder&&t.append("sortOrder",e.sortOrder),e.extraFilters){for(let[n,r]of Object.entries(e.extraFilters))if(r&&(Array.isArray(r)?r.length>0:r.toString().trim()!=="")){let a=Array.isArray(r)?r.join(","):r.toString();t.append(`extra_${n}`,a)}}let i=t.toString(),o=`/faqs${i?`?${i}`:""}`;return this.makeRequest(o)}async getFaqById(e){return this.makeRequest(`/faqs/${e}`,{})}};var h=async(s,e)=>{let t=await fetch(s,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 ce=class s{constructor(e){this.config=e,this.enableUpload=e.enableUpload||!1}static getInstance(e){if(!s.instance&&e&&(s.instance=new s(e)),!s.instance)throw new Error("FileService must be initialized with config first");return s.instance}static initialize(e){return s.instance=new s(e),s.instance}async uploadFile(e,t={}){try{let i=await this.requestSignedUrl({filename:e.name,description:t.description,loadDirection:"up",bucketType:t.bucketType||"conversations",path:t.path||".temp",mimeType:e.type});return await this.uploadToSignedUrl(i.data.signedUrlData.signedUrl,e),{success:!0,id:i.data.file.id,name:i.data.file.name,url:i.data.file.url,type:i.data.file.type}}catch(i){return console.error("Error uploading file:",i),{success:!1,error:i instanceof Error?i.message:"Unknown error"}}}async requestSignedUrl(e){let t=`${this.config.baseUrl}/files/upload-url`;return this.makeRequest(t,{method:"POST",body:JSON.stringify(e)})}async uploadToSignedUrl(e,t){let i=await fetch(e,{method:"PUT",body:t,headers:{"Content-Type":t.type}});if(!i.ok){let o=await i.text().catch(()=>"No response");throw new Error(`Upload failed with status: ${i.status}. Response: ${o}`)}}async uploadFileWithRetry(e,t={}){let i=t.maxRetries||3,o=null;for(let n=1;n<=i;n++)try{let r=await this.uploadFile(e,t);if(r.success)return r;throw new Error(r.error||"Upload failed")}catch(r){if(o=r instanceof Error?r:new Error("Unknown error"),n===i)break;let a=2**n*1e3;await new Promise(l=>setTimeout(l,a))}return{success:!1,error:o?.message||"Upload failed after retries"}}async getFileById(e){let t=`${this.config.baseUrl}/files/${e}`,i=await this.makeRequest(t);if(!i.success)throw new Error("Failed to get file");return i.data}async makeRequest(e,t){let i={"Content-Type":"application/json"};return this.config.organizationId&&(i["X-Onlive-Organization-Id"]=this.config.organizationId),t?.headers&&Object.assign(i,t.headers),h(e,{...t,headers:i})}updateConfig(e){this.config={...this.config,...e}}getConfig(){return{...this.config}}};var de=class s{constructor(e){this.config=e}static getInstance(e){if(!s.instance&&e&&(s.instance=new s(e)),!s.instance)throw new Error("MultimediaService must be initialized with config first");return s.instance}static initialize(e){return s.instance=new s(e),s.instance}async getImages(e={}){let t=new URLSearchParams({type:"image",page:(e.page||1).toString(),limit:(e.limit||12).toString(),...e.search&&{search:e.search},...e.labels&&{labels:e.labels.join(",")},...e.includeSecureToken&&{includeSecureToken:e.includeSecureToken.toString()}});this.appendExtraFilters(t,e.extraFilters);let i=`${this.config.baseUrl}/multimedia?${t}`;return this.makeRequest(i)}async getVideos(e={}){let t=new URLSearchParams({type:"video",page:(e.page||1).toString(),limit:(e.limit||12).toString(),...e.search&&{search:e.search},...e.labels&&{labels:e.labels.join(",")},...e.includeSecureToken&&{includeSecureToken:e.includeSecureToken.toString()}});this.appendExtraFilters(t,e.extraFilters);let i=`${this.config.baseUrl}/multimedia?${t}`;return this.makeRequest(i)}async getPresentations(e={}){let t=new URLSearchParams({type:"presentation",page:(e.page||1).toString(),limit:(e.limit||12).toString(),...e.search&&{search:e.search},...e.labels&&{labels:e.labels.join(",")},...e.includeSecureToken&&{includeSecureToken:e.includeSecureToken.toString()}});this.appendExtraFilters(t,e.extraFilters);let i=`${this.config.baseUrl}/multimedia?${t}`;return this.makeRequest(i)}async getAllMultimedia(e={}){let[t,i,o]=await Promise.all([this.getImages(e),this.getVideos(e),this.getPresentations(e)]);return{images:t,videos:i,presentations:o}}async getMultimediaByToken(e){let t=`${this.config.baseUrl}/multimedia/secure-token/${e}`;return this.makeRequest(t,!1)}async searchMultimedia(e,t){let i={search:e,page:1,limit:50,includeSecureToken:!0};if(t)return this.getMultimediaByType(t,i);let[o,n,r]=await Promise.all([this.getImages(i),this.getVideos(i),this.getPresentations(i)]),a=[...o.items,...n.items,...r.items];return{items:a,total:a.length,count:a.length,currentPage:1,totalPages:1}}async getMultimediaByType(e,t){switch(e){case"image":return this.getImages(t);case"video":return this.getVideos(t);case"presentation":return this.getPresentations(t);default:throw new Error(`Invalid multimedia type: ${e}`)}}appendExtraFilters(e,t){if(t){for(let[i,o]of Object.entries(t))if(o&&(Array.isArray(o)?o.length>0:o.toString().trim()!=="")){let n=Array.isArray(o)?o.join(","):o.toString();e.append(`extra_${i}`,n)}}}async makeRequest(e,t=!0){let i={"Content-Type":"application/json","X-Onlive-Organization-Id":this.config.organizationId};return h(e,{method:"GET",headers:i,credentials:t?"include":void 0})}updateConfig(e){this.config={...this.config,...e}}getConfig(){return{...this.config}}};var X=class s{constructor(e){this.config=e}static getInstance(e){if(!s.instance&&e&&(s.instance=new s(e)),!s.instance)throw new Error("ProductService must be initialized with config first");return s.instance}static initialize(e){return s.instance=new s(e),s.instance}async getProducts(e={}){let t=new URLSearchParams({...e.title&&{title:e.title},...e.search&&{search:e.search},...e.category&&{category:e.category},...e.tags&&{tags:e.tags.join(",")},...e.sortBy&&{sortBy:e.sortBy},...e.sortOrder&&{sortOrder:e.sortOrder},...e.minPrice&&{minPrice:e.minPrice.toString()},...e.maxPrice&&{maxPrice:e.maxPrice.toString()},...e.inStock!==void 0&&{inStock:e.inStock.toString()},...e.offset&&{offset:e.offset.toString()},...e.includeSecureToken&&{includeSecureToken:e.includeSecureToken.toString()}});e.extraFields&&Object.keys(e.extraFields).length>0&&t.append("extraFields",JSON.stringify(e.extraFields));let i=`${this.config.baseUrl}/products?${t}`;return this.makeRequest(i,!0)}async getProductByToken(e){let t=`${this.config.baseUrl}/products/secure-token/${e}`;return this.makeRequest(t)}async searchProducts(e,t={}){return this.getProducts({...t,search:e})}async makeRequest(e,t=!1){let i={"Content-Type":"application/json","X-Onlive-Organization-Id":this.config.organizationId};return h(e,{method:"GET",headers:i,credentials:t?"include":"same-origin"})}updateConfig(e){this.config={...this.config,...e}}getConfig(){return{...this.config}}};var qe=class{constructor(e){e?.multimediaService&&(this.multimediaService=de.initialize(e.multimediaService)),e?.faqsService&&(this.faqsService=le.initialize(e.faqsService)),e?.productService&&(this.productService=X.initialize(e.productService)),e?.fileService&&(this.fileService=ce.initialize(e.fileService))}async loadAsset(e,t){switch(e){case"multimedia":return this.loadMultimediaAsset(t);case"product":return this.loadProductAsset(t);case"faq":return this.loadFaqAsset(t);case"file":return this.loadFileAsset(t);default:throw new Error(`Unsupported asset type: ${e}`)}}async loadMultimediaAsset(e){if(!this.multimediaService)throw new Error("MultimediaService not configured");let t=await this.multimediaService.getMultimediaByToken(e);if(!t)throw new Error("Multimedia not found");return{id:t.id,name:t.name,description:t.description||"",url:t.url,thumbnail:t.animatedCoverUrl||t.url,type:"multimedia",externalId:t.id,format:t.format,size:t.size||void 0,duration:t.duration||void 0,vodUrl:t.vodUrl||void 0,slides:t.slides||[],labels:t.labels,animatedCoverUrl:t.animatedCoverUrl||void 0,metadata:{organizationId:t.organizationId,status:t.status,createdAt:t.createdAt,updatedAt:t.updatedAt}}}async loadProductAsset(e){if(!this.productService)throw new Error("MultimediaService not configured");let t=await this.productService.getProductByToken(e);if(!t)throw new Error("Product not found");return{id:t.id,name:t.name,description:t.description,url:t.url,thumbnail:t.images?.[0],type:"product",externalId:t.externalId,price:t.price,currency:t.currency,category:t.category,tags:t.tags,images:t.images,variants:t.variants?.map(i=>({id:i.id,externalId:i.externalId,price:i.price,currency:i.currency,images:i.images})),options:t.options,metadata:{providerType:t.providerType,providerId:t.providerId,discountType:t.discountType,discount:t.discount,stock:t.stock,broken:t.broken}}}async loadFaqAsset(e){if(!this.faqsService)throw new Error("FaqsService not configured");let t=await this.faqsService.getFaqById(e);return{id:t.id,name:t.question,description:t.answer,url:`#faq-${t.id}`,type:"faq",externalId:t.id,question:t.question,answer:t.answer,priority:t.priority,isActive:t.isActive,metadata:{organizationId:t.organizationId,createdAt:t.createdAt,updatedAt:t.updatedAt}}}async loadFileAsset(e){if(!this.fileService)throw new Error("FileService not configured");let t=await this.fileService.getFileById(e),i=t.type||"",o=i.startsWith("video/"),n=i.startsWith("image/");return{id:t.id,name:t.name,description:t.description||"",url:t.url,thumbnail:n?t.url:void 0,type:"file",externalId:t.id,format:i,size:t.metadata?.size,duration:void 0,vodUrl:o?t.url:void 0,labels:[],animatedCoverUrl:o?t.url:void 0,metadata:{path:t.metadata?.path,bucketType:t.metadata?.bucketType,loadDirection:t.metadata?.loadDirection,createdAt:t.createdAt,updatedAt:t.updatedAt}}}};var c=require("lit"),ti=require("lit/directives/class-map.js"),pe=require("lit/directives/if-defined.js"),U=require("lit/directives/when.js");var Yt=require("lit/directives/unsafe-html.js");var ct=A(require("dompurify"),1),zi={ALLOWED_TAGS:["p","br","span","b","strong","i","em","u","s","del","ul","ol","li","code","pre","a","h1","h2","h3","h4","table","thead","tbody","tr","th","td"],ALLOWED_ATTR:["href","target","rel","title","aria-label","role","colspan","rowspan"],FORCE_HTTPS:!0,ALLOW_DATA_ATTR:!1};ct.default.addHook("afterSanitizeAttributes",s=>{"target"in s&&s.target==="_blank"&&s.setAttribute("rel","noopener noreferrer")});var Gt=(s,e=zi)=>ct.default.sanitize(s,e);function Qt(s=""){return(0,Yt.unsafeHTML)(Li(s))}function Li(s=""){return Gt(s,{ADD_ATTR:["target","rel"],ADD_TAGS:["ol-"],CUSTOM_ELEMENT_HANDLING:{tagNameCheck:/^ol-/,attributeNameCheck:null,allowCustomizedBuiltInElements:!0}})}var bo=require("@onlive.ai/ui/dist/components/button/button.js"),yo=require("@onlive.ai/ui/dist/components/icon/icon.js"),Pe=require("lit"),He=require("lit/decorators.js"),Zt=require("lit/directives/repeat.js"),ei=A(require("video.js"),1);var Ne=require("lit"),Wt=A(require("video.js/dist/video-js.min.css?inline"),1),Xt=Ne.css`
3
3
  ${(0,Ne.unsafeCSS)(Wt.default)}
4
4
  .och__player {
5
5
  width: 100%;
@@ -2041,12 +2041,12 @@ video::-webkit-media-text-track-display {
2041
2041
  transition: all 0.2s ease;
2042
2042
  }
2043
2043
  </style>
2044
- `}};Z.styles=[Xt],v([(0,He.property)({type:Array})],Z.prototype,"sources",2),v([(0,He.query)("#player")],Z.prototype,"$player",2),Z=v([K("och-player")],Z);var Ve=class{formatFileSize(e){let t=["B","KB","MB","GB"];if(e===0)return"0 B";let i=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/1024**i*100)/100+" "+t[i]}formatDuration(e){let t=Math.floor(e/60),i=Math.floor(e%60);return`${t}:${i.toString().padStart(2,"0")}`}getMultimediaSubtype(e){let t=e.format||"";return t.startsWith("video/")?"video":t.startsWith("image/")?"image":t.includes("presentation")||t.includes("pdf")||t.includes("powerpoint")||t.includes("slides")||t.includes("application/vnd.ms-powerpoint")||t.includes("application/vnd.openxmlformats-officedocument.presentationml")||e.slides&&e.slides.length>0?"presentation":e.duration||e.vodUrl?"video":"image"}renderThumbnail(e,t,i,o,r){return!t.showThumbnail||e.type==="faq"?c.html``:c.html`
2044
+ `}};Z.styles=[Xt],v([(0,He.property)({type:Array})],Z.prototype,"sources",2),v([(0,He.query)("#player")],Z.prototype,"$player",2),Z=v([K("och-player")],Z);var Ve=class{formatFileSize(e){let t=["B","KB","MB","GB"];if(e===0)return"0 B";let i=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/1024**i*100)/100+" "+t[i]}formatDuration(e){let t=Math.floor(e/60),i=Math.floor(e%60);return`${t}:${i.toString().padStart(2,"0")}`}getMultimediaSubtype(e){let t=e.format||"";return t.startsWith("video/")?"video":t.startsWith("image/")?"image":t.includes("presentation")||t.includes("pdf")||t.includes("powerpoint")||t.includes("slides")||t.includes("application/vnd.ms-powerpoint")||t.includes("application/vnd.openxmlformats-officedocument.presentationml")||e.slides&&e.slides.length>0?"presentation":e.duration||e.vodUrl?"video":"image"}renderThumbnail(e,t,i,o,n){return!t.showThumbnail||e.type==="faq"?c.html``:c.html`
2045
2045
  <div class="ol-asset__thumbnail">
2046
2046
  ${this.renderThumbnailContent(e)}
2047
2047
  ${this.renderMetadata(e,t)}
2048
2048
  ${this.renderThumbnailOverlay(e)}
2049
- ${this.renderHoverOverlay(e,i,r,o)}
2049
+ ${this.renderHoverOverlay(e,i,n,o)}
2050
2050
  </div>
2051
2051
  `}renderThumbnailContent(e){switch(e.type){case"multimedia":{let t=e;switch(this.getMultimediaSubtype(t)){case"video":return this.renderVideoThumbnail(t);case"presentation":return this.renderPresentationThumbnail(t);default:return c.html`
2052
2052
  <img
@@ -2203,7 +2203,7 @@ video::-webkit-media-text-track-display {
2203
2203
  <h3 class="ol-asset__modal-title">${e.name}</h3>
2204
2204
  ${e.description?c.html`<p class="ol-asset__modal-description">${e.description}</p>`:c.html``}
2205
2205
  </div>
2206
- `}}renderHoverOverlay(e,t,i,o){let r=e.type==="multimedia"&&this.getMultimediaSubtype(e)==="video",n=(e.type==="multimedia"||e.type==="file")&&this.getMultimediaSubtype(e)==="presentation"&&(!e.slides||e.slides.length===0);return r?c.html`
2206
+ `}}renderHoverOverlay(e,t,i,o){let n=e.type==="multimedia"&&this.getMultimediaSubtype(e)==="video",r=(e.type==="multimedia"||e.type==="file")&&this.getMultimediaSubtype(e)==="presentation"&&(!e.slides||e.slides.length===0);return n?c.html`
2207
2207
  <div class="ol-asset__video-controls">
2208
2208
  ${(0,U.when)(i,()=>c.html`
2209
2209
  <ol-button
@@ -2254,7 +2254,7 @@ video::-webkit-media-text-track-display {
2254
2254
  </svg>
2255
2255
  </ol-button>
2256
2256
  `,()=>c.html`
2257
- ${(0,U.when)(i&&!n,()=>c.html`
2257
+ ${(0,U.when)(i&&!r,()=>c.html`
2258
2258
  <ol-button
2259
2259
  class="ol-asset__hover-btn ol-asset__hover-btn--maximize"
2260
2260
  @click=${a=>{a.stopPropagation(),i(e)}}
@@ -3311,7 +3311,7 @@ video::-webkit-media-text-track-display {
3311
3311
  max-height: 90vh;
3312
3312
  }
3313
3313
  }
3314
- `}createDialogHTML(){if(!this.asset)return"";let{name:e,description:t,url:i,type:o}=this.asset,r="";if(o==="multimedia"){let l=this.asset,d=this.getMultimediaSubtype(l);if(d==="image")r=`
3314
+ `}createDialogHTML(){if(!this.asset)return"";let{name:e,description:t,url:i,type:o}=this.asset,n="";if(o==="multimedia"){let l=this.asset,d=this.getMultimediaSubtype(l);if(d==="image")n=`
3315
3315
  <div class="ol-asset__modal-media-container">
3316
3316
  <div class="ol-asset__modal-image-container">
3317
3317
  <img
@@ -3332,7 +3332,7 @@ video::-webkit-media-text-track-display {
3332
3332
  </div>
3333
3333
  </div>
3334
3334
  </div>
3335
- `;else if(d==="video")r=`
3335
+ `;else if(d==="video")n=`
3336
3336
  <div class="ol-asset__modal-media-container">
3337
3337
  <div class="ol-asset__modal-video-container">
3338
3338
  <video
@@ -3361,7 +3361,7 @@ video::-webkit-media-text-track-display {
3361
3361
  `:""}
3362
3362
  </div>
3363
3363
  </div>
3364
- `;else if(d==="presentation")if(l.slides&&l.slides.length>0){let m=l.slides;r=`
3364
+ `;else if(d==="presentation")if(l.slides&&l.slides.length>0){let m=l.slides;n=`
3365
3365
  <div class="ol-asset__modal-media-container" data-type="presentation">
3366
3366
  <div class="ol-asset__modal-presentation">
3367
3367
  <ol-carousel pagination navigation loop class="ol-asset__modal-carousel">
@@ -3391,7 +3391,7 @@ video::-webkit-media-text-track-display {
3391
3391
  </div>
3392
3392
  </div>
3393
3393
  </div>
3394
- `}else r=`
3394
+ `}else n=`
3395
3395
  <div class="ol-asset__modal-presentation">
3396
3396
  <div class="ol-asset__modal-presentation-fallback">
3397
3397
  <div class="ol-asset__modal-presentation-icon">\u{1F4C4}</div>
@@ -3403,7 +3403,7 @@ video::-webkit-media-text-track-display {
3403
3403
  ${t?`<p class="ol-asset__modal-description">${t}</p>`:""}
3404
3404
  <p class="ol-asset__modal-type">Type: Presentation</p>
3405
3405
  </div>
3406
- `}else if(o==="file"){let l=this.asset,d=this.getMultimediaSubtype(l);if(d==="image")r=`
3406
+ `}else if(o==="file"){let l=this.asset,d=this.getMultimediaSubtype(l);if(d==="image")n=`
3407
3407
  <div class="ol-asset__modal-media-container">
3408
3408
  <div class="ol-asset__modal-image-container">
3409
3409
  <img
@@ -3424,7 +3424,7 @@ video::-webkit-media-text-track-display {
3424
3424
  </div>
3425
3425
  </div>
3426
3426
  </div>
3427
- `;else if(d==="video")r=`
3427
+ `;else if(d==="video")n=`
3428
3428
  <div class="ol-asset__modal-media-container">
3429
3429
  <div class="ol-asset__modal-video-container">
3430
3430
  <video
@@ -3453,7 +3453,7 @@ video::-webkit-media-text-track-display {
3453
3453
  `:""}
3454
3454
  </div>
3455
3455
  </div>
3456
- `;else if(d==="presentation")if(l.slides&&l.slides.length>0){let m=l.slides;r=`
3456
+ `;else if(d==="presentation")if(l.slides&&l.slides.length>0){let m=l.slides;n=`
3457
3457
  <div class="ol-asset__modal-media-container" data-type="presentation">
3458
3458
  <div class="ol-asset__modal-presentation">
3459
3459
  <ol-carousel pagination navigation loop class="ol-asset__modal-carousel">
@@ -3483,7 +3483,7 @@ video::-webkit-media-text-track-display {
3483
3483
  </div>
3484
3484
  </div>
3485
3485
  </div>
3486
- `}else r=`
3486
+ `}else n=`
3487
3487
  <div class="ol-asset__modal-presentation">
3488
3488
  <div class="ol-asset__modal-presentation-fallback">
3489
3489
  <div class="ol-asset__modal-presentation-icon">\u{1F4C4}</div>
@@ -3495,30 +3495,30 @@ video::-webkit-media-text-track-display {
3495
3495
  ${t?`<p class="ol-asset__modal-description">${t}</p>`:""}
3496
3496
  <p class="ol-asset__modal-type">Type: Presentation File</p>
3497
3497
  </div>
3498
- `}else if(o==="faq"){let l=this.asset;r=`
3498
+ `}else if(o==="faq"){let l=this.asset;n=`
3499
3499
  <div class="ol-asset__modal-faq">
3500
3500
  <h3 class="ol-asset__modal-question">${l.question||e}</h3>
3501
3501
  <div class="ol-asset__modal-answer">${l.answer||t}</div>
3502
3502
  </div>
3503
- `}else r=`
3503
+ `}else n=`
3504
3504
  <div class="ol-asset__modal-info">
3505
3505
  <h3 class="ol-asset__modal-title">${e}</h3>
3506
3506
  ${t?`<p class="ol-asset__modal-description">${t}</p>`:""}
3507
3507
  </div>
3508
- `;let n=o==="multimedia"||o==="file",a=o==="faq"&&this.asset.question||e;return`
3508
+ `;let r=o==="multimedia"||o==="file",a=o==="faq"&&this.asset.question||e;return`
3509
3509
  <ol-dialog
3510
3510
  label="${this.escapeHtml(a)}"
3511
3511
  class="ol-asset__dialog"
3512
- data-fullscreen="${n}"
3513
- ${n?'style="--width: 95vw; --max-width: 1600px;"':""}
3512
+ data-fullscreen="${r}"
3513
+ ${r?'style="--width: 95vw; --max-width: 1600px;"':""}
3514
3514
  >
3515
3515
  <div class="ol-asset__dialog-content">
3516
3516
  <div class="ol-asset__dialog-body">
3517
- ${r}
3517
+ ${n}
3518
3518
  </div>
3519
3519
  </div>
3520
3520
  </ol-dialog>
3521
- `}attachEventListeners(){this.dialog&&(this.dialog.addEventListener("ol-after-hide",()=>{this.onClose?.()}),this.dialog.addEventListener("ol-request-close",e=>{e.detail?.source==="overlay"&&e.preventDefault()}))}escapeHtml(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}};var j=class extends ee.LitElement{constructor(){super(...arguments);this.loadingState="idle";this.assetRenderer=new Ve;this.isDownloading=!1;this.defaultDisplayOptions={showThumbnail:!0,showName:!1,showDescription:!1,showMetadata:!0,showPrice:!0,showDuration:!1,showSize:!1,showTags:!1,layout:"card",size:"medium"}}connectedCallback(){super.connectedCallback(),this.initializeServices(),this.loadAsset()}disconnectedCallback(){super.disconnectedCallback(),this.closeModal()}initializeServices(){this.assetLoader=new qe(this.config)}async loadAsset(){if(!this.type||!this.externalId){this.error="Type and externalId are required",this.loadingState="error";return}this.loadingState="loading",this.error=void 0;try{let t=await this.assetLoader.loadAsset(this.type,this.externalId);this.asset=t,this.loadingState="loaded",this.dispatchEvent(new CustomEvent("asset-load",{detail:t})),console.debug("Asset loaded:",t)}catch(t){console.error(`Error loading ${this.type} asset:`,t),this.error=t instanceof Error?t.message:"Failed to load asset",this.loadingState="error",this.dispatchEvent(new CustomEvent("asset-error",{detail:{error:this.error,asset:this.asset}}))}}async onDownload(t){if(!(!t.url||this.isDownloading)){this.isDownloading=!0;try{let i=await fetch(t.url,{method:"GET",mode:"cors",cache:"no-cache"});if(i.ok){let o=await i.blob(),r=window.URL.createObjectURL(o),n=document.createElement("a");n.href=r,n.download=this.getDownloadFilename(t),n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n),setTimeout(()=>window.URL.revokeObjectURL(r),100),this.dispatchEvent(new CustomEvent("asset-download",{detail:t})),this.isDownloading=!1;return}}catch(i){console.warn("Fetch strategy failed:",i)}try{let i=await fetch(t.url,{headers:{Accept:"*/*"},mode:"no-cors"});if(i.type==="opaque")throw new Error("No-cors response, cannot access blob");let o=await i.blob(),r=window.URL.createObjectURL(o),n=document.createElement("a");n.href=r,n.download=this.getDownloadFilename(t),n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n),setTimeout(()=>window.URL.revokeObjectURL(r),100),this.dispatchEvent(new CustomEvent("asset-download",{detail:t})),this.isDownloading=!1;return}catch(i){console.warn("No-cors strategy failed:",i)}try{let i=document.createElement("a");i.href=t.url,i.download=this.getDownloadFilename(t),i.target="_blank",i.rel="noopener noreferrer",i.style.position="absolute",i.style.left="-9999px",document.body.appendChild(i),i.click(),setTimeout(()=>{document.body.removeChild(i)},100),this.dispatchEvent(new CustomEvent("asset-download",{detail:t}))}catch(i){console.error("All download strategies failed:",i),window.open(t.url,"_blank")}this.isDownloading=!1}}getDownloadFilename(t){let i=Date.now(),o=this.getFileExtension(t);return`${t.name||`asset-${t.type}-${i}`}${o}`}getFileExtension(t){if(t.url){let r=new URL(t.url).pathname,n=r.lastIndexOf(".");if(n>0)return r.substring(n)}return{multimedia:".jpg",file:".bin",product:".jpg",faq:".txt"}[t.type]||""}async openModal(){this.asset&&(this.modalPortal=new Je(this.asset,this.closeModal.bind(this)),await this.modalPortal.open())}onMaximize(){if(this.asset){if(this.asset.type==="multimedia"||this.asset.type==="file"){let t=this.asset,i=t.slides&&t.slides.length>0,o=t.format||"";if((o.includes("presentation")||o.includes("pdf")||o.includes("powerpoint")||o.includes("slides")||o.includes("application/vnd.ms-powerpoint")||o.includes("application/vnd.openxmlformats-officedocument.presentationml")||i&&t.slides.length>0)&&!i)return}this.asset.type==="multimedia"||this.asset.type==="file"||this.asset.type==="faq"?this.openModal():this.dispatchEvent(new CustomEvent("asset-click",{detail:this.asset}))}}closeModal(){this.modalPortal&&(this.modalPortal.close(),this.modalPortal=void 0)}render(){let t={...this.defaultDisplayOptions,...this.config?.assetDisplayOptions||{}};return this.loadingState==="loading"?ee.html`
3521
+ `}attachEventListeners(){this.dialog&&(this.dialog.addEventListener("ol-after-hide",()=>{this.onClose?.()}),this.dialog.addEventListener("ol-request-close",e=>{e.detail?.source==="overlay"&&e.preventDefault()}))}escapeHtml(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}};var j=class extends ee.LitElement{constructor(){super(...arguments);this.loadingState="idle";this.assetRenderer=new Ve;this.isDownloading=!1;this.defaultDisplayOptions={showThumbnail:!0,showName:!1,showDescription:!1,showMetadata:!0,showPrice:!0,showDuration:!1,showSize:!1,showTags:!1,layout:"card",size:"medium"}}connectedCallback(){super.connectedCallback(),this.initializeServices(),this.loadAsset()}disconnectedCallback(){super.disconnectedCallback(),this.closeModal()}initializeServices(){this.assetLoader=new qe(this.config)}async loadAsset(){if(!this.type||!this.externalId){this.error="Type and externalId are required",this.loadingState="error";return}this.loadingState="loading",this.error=void 0;try{let t=await this.assetLoader.loadAsset(this.type,this.externalId);this.asset=t,this.loadingState="loaded",this.dispatchEvent(new CustomEvent("asset-load",{detail:t})),console.debug("Asset loaded:",t)}catch(t){console.error(`Error loading ${this.type} asset:`,t),this.error=t instanceof Error?t.message:"Failed to load asset",this.loadingState="error",this.dispatchEvent(new CustomEvent("asset-error",{detail:{error:this.error,asset:this.asset}}))}}async onDownload(t){if(!(!t.url||this.isDownloading)){this.isDownloading=!0;try{let i=await fetch(t.url,{method:"GET",mode:"cors",cache:"no-cache"});if(i.ok){let o=await i.blob(),n=window.URL.createObjectURL(o),r=document.createElement("a");r.href=n,r.download=this.getDownloadFilename(t),r.style.display="none",document.body.appendChild(r),r.click(),document.body.removeChild(r),setTimeout(()=>window.URL.revokeObjectURL(n),100),this.dispatchEvent(new CustomEvent("asset-download",{detail:t})),this.isDownloading=!1;return}}catch(i){console.warn("Fetch strategy failed:",i)}try{let i=await fetch(t.url,{headers:{Accept:"*/*"},mode:"no-cors"});if(i.type==="opaque")throw new Error("No-cors response, cannot access blob");let o=await i.blob(),n=window.URL.createObjectURL(o),r=document.createElement("a");r.href=n,r.download=this.getDownloadFilename(t),r.style.display="none",document.body.appendChild(r),r.click(),document.body.removeChild(r),setTimeout(()=>window.URL.revokeObjectURL(n),100),this.dispatchEvent(new CustomEvent("asset-download",{detail:t})),this.isDownloading=!1;return}catch(i){console.warn("No-cors strategy failed:",i)}try{let i=document.createElement("a");i.href=t.url,i.download=this.getDownloadFilename(t),i.target="_blank",i.rel="noopener noreferrer",i.style.position="absolute",i.style.left="-9999px",document.body.appendChild(i),i.click(),setTimeout(()=>{document.body.removeChild(i)},100),this.dispatchEvent(new CustomEvent("asset-download",{detail:t}))}catch(i){console.error("All download strategies failed:",i),window.open(t.url,"_blank")}this.isDownloading=!1}}getDownloadFilename(t){let i=Date.now(),o=this.getFileExtension(t);return`${t.name||`asset-${t.type}-${i}`}${o}`}getFileExtension(t){if(t.url){let n=new URL(t.url).pathname,r=n.lastIndexOf(".");if(r>0)return n.substring(r)}return{multimedia:".jpg",file:".bin",product:".jpg",faq:".txt"}[t.type]||""}async openModal(){this.asset&&(this.modalPortal=new Je(this.asset,this.closeModal.bind(this)),await this.modalPortal.open())}onMaximize(){if(this.asset){if(this.asset.type==="multimedia"||this.asset.type==="file"){let t=this.asset,i=t.slides&&t.slides.length>0,o=t.format||"";if((o.includes("presentation")||o.includes("pdf")||o.includes("powerpoint")||o.includes("slides")||o.includes("application/vnd.ms-powerpoint")||o.includes("application/vnd.openxmlformats-officedocument.presentationml")||i&&t.slides.length>0)&&!i)return}this.asset.type==="multimedia"||this.asset.type==="file"||this.asset.type==="faq"?this.openModal():this.dispatchEvent(new CustomEvent("asset-click",{detail:this.asset}))}}closeModal(){this.modalPortal&&(this.modalPortal.close(),this.modalPortal=void 0)}render(){let t={...this.defaultDisplayOptions,...this.config?.assetDisplayOptions||{}};return this.loadingState==="loading"?ee.html`
3522
3522
  <div class="ol-asset ol-asset--loading">
3523
3523
  ${this.assetRenderer.renderLoading()}
3524
3524
  </div>
@@ -3533,7 +3533,7 @@ video::-webkit-media-text-track-display {
3533
3533
  ${this.assetRenderer.renderThumbnail(this.asset,t,this.onDownload.bind(this),this.isDownloading,this.onMaximize.bind(this))}
3534
3534
  ${this.assetRenderer.renderContent(this.asset,t)}
3535
3535
  </div>
3536
- `:ee.html``}};j.styles=[oi],v([(0,P.property)({type:String})],j.prototype,"type",2),v([(0,P.property)({type:String})],j.prototype,"externalId",2),v([(0,P.property)({type:Object})],j.prototype,"config",2),v([(0,P.state)()],j.prototype,"asset",2),v([(0,P.state)()],j.prototype,"loadingState",2),v([(0,P.state)()],j.prototype,"error",2),v([(0,P.state)()],j.prototype,"assetLoader",2),v([(0,P.state)()],j.prototype,"assetRenderer",2),v([(0,P.state)()],j.prototype,"isDownloading",2),j=v([K("osb-asset")],j);var Ko=require("@onlive.ai/ui/dist/components/button/button.js"),Go=require("@onlive.ai/ui/dist/components/details/details.js"),Yo=require("@onlive.ai/ui/dist/components/icon/icon.js"),Qo=require("@onlive.ai/ui/dist/components/input/input.js"),Wo=require("@onlive.ai/ui/dist/components/option/option.js"),Xo=require("@onlive.ai/ui/dist/components/select/select.js"),u=require("lit"),w=require("lit/decorators.js"),te=require("lit/directives/class-map.js"),me=require("lit/directives/if-defined.js"),Be=require("lit/directives/repeat.js"),k=require("lit/directives/when.js");var Lo=require("@onlive.ai/ui/dist/components/button/button.js"),Do=require("@onlive.ai/ui/dist/components/dropdown/dropdown.js"),Fo=require("@onlive.ai/ui/dist/components/icon/icon.js"),Uo=require("@onlive.ai/ui/dist/components/menu-item/menu-item.js"),$o=require("@onlive.ai/ui/dist/components/menu/menu.js"),ue=require("lit"),dt=require("lit/decorators.js");var ri=require("lit"),ni=ri.css`
3536
+ `:ee.html``}};j.styles=[oi],v([(0,P.property)({type:String})],j.prototype,"type",2),v([(0,P.property)({type:String})],j.prototype,"externalId",2),v([(0,P.property)({type:Object})],j.prototype,"config",2),v([(0,P.state)()],j.prototype,"asset",2),v([(0,P.state)()],j.prototype,"loadingState",2),v([(0,P.state)()],j.prototype,"error",2),v([(0,P.state)()],j.prototype,"assetLoader",2),v([(0,P.state)()],j.prototype,"assetRenderer",2),v([(0,P.state)()],j.prototype,"isDownloading",2),j=v([K("osb-asset")],j);var Ko=require("@onlive.ai/ui/dist/components/button/button.js"),Go=require("@onlive.ai/ui/dist/components/details/details.js"),Yo=require("@onlive.ai/ui/dist/components/icon/icon.js"),Qo=require("@onlive.ai/ui/dist/components/input/input.js"),Wo=require("@onlive.ai/ui/dist/components/option/option.js"),Xo=require("@onlive.ai/ui/dist/components/select/select.js"),u=require("lit"),w=require("lit/decorators.js"),te=require("lit/directives/class-map.js"),me=require("lit/directives/if-defined.js"),Be=require("lit/directives/repeat.js"),k=require("lit/directives/when.js");var Lo=require("@onlive.ai/ui/dist/components/button/button.js"),Do=require("@onlive.ai/ui/dist/components/dropdown/dropdown.js"),Fo=require("@onlive.ai/ui/dist/components/icon/icon.js"),Uo=require("@onlive.ai/ui/dist/components/menu-item/menu-item.js"),$o=require("@onlive.ai/ui/dist/components/menu/menu.js"),ue=require("lit"),dt=require("lit/decorators.js");var ni=require("lit"),ri=ni.css`
3537
3537
  :host {
3538
3538
  display: inline-block;
3539
3539
  }
@@ -3596,7 +3596,7 @@ video::-webkit-media-text-track-display {
3596
3596
  background: var(--ol-color-success-300, #86efac);
3597
3597
  transform: scale(1.1);
3598
3598
  }
3599
- `;var R=class extends ue.LitElement{constructor(){super(...arguments);this.defaultConfig={maxFileSize:10*1024*1024,multiple:!1,showImage:!0,showVideo:!0,showDocument:!0}}getAllowedExtensions(t){switch(t){case"image":return[".jpg",".jpeg",".png",".gif",".webp",".svg"];case"video":return[".mp4",".avi",".mov",".wmv",".flv",".webm"];case"document":return[".pdf",".doc",".docx",".txt",".rtf",".odt"];default:return[]}}getAcceptAttribute(t){return this.getAllowedExtensions(t).join(",")}getFileTypeLabel(t){switch(t){case"image":return"Imagen";case"video":return"Video";case"document":return"Documento";default:return"Archivo"}}getAvailableTypes(){let t={...this.defaultConfig,...this.config},i=[];return t.showImage&&i.push("image"),t.showVideo&&i.push("video"),t.showDocument&&i.push("document"),i}onTypeSelect(t){this.openFileDialog(t)}openFileDialog(t){let i=document.createElement("input");i.type="file",i.accept=this.getAcceptAttribute(t),i.multiple=this.config?.multiple||!1,i.onchange=o=>{let r=o.target.files?.[0];r&&this.handleFileSelection(r,t)},i.click()}handleFileSelection(t,i){let o=this.validateFile(t,i);if(!o.valid){this.dispatchEvent(new CustomEvent("osb-upload-error",{detail:{error:o.error},bubbles:!0}));return}this.dispatchEvent(new CustomEvent("osb-file-selected",{detail:{file:t,type:i},bubbles:!0})),this.events?.onFileSelected?.(t,i)}validateFile(t,i){let o={...this.defaultConfig,...this.config};if(o.maxFileSize&&t.size>o.maxFileSize)return{valid:!1,error:`El archivo es demasiado grande. Tama\xF1o m\xE1ximo: ${Math.round(o.maxFileSize/1048576)}MB`};let r=t.name.toLowerCase(),n=this.getAllowedExtensions(i);return n.some(l=>r.endsWith(l.toLowerCase()))?{valid:!0}:{valid:!1,error:`Tipo de archivo no v\xE1lido. Extensiones permitidas: ${n.join(", ")}`}}render(){let t=this.getAvailableTypes();return t.length===0?ue.html`<div class="ol-upload ol-upload--empty">No hay tipos de archivo disponibles</div>`:ue.html`
3599
+ `;var R=class extends ue.LitElement{constructor(){super(...arguments);this.defaultConfig={maxFileSize:10*1024*1024,multiple:!1,showImage:!0,showVideo:!0,showDocument:!0}}getAllowedExtensions(t){switch(t){case"image":return[".jpg",".jpeg",".png",".gif",".webp",".svg"];case"video":return[".mp4",".avi",".mov",".wmv",".flv",".webm"];case"document":return[".pdf",".doc",".docx",".txt",".rtf",".odt"];default:return[]}}getAcceptAttribute(t){return this.getAllowedExtensions(t).join(",")}getFileTypeLabel(t){switch(t){case"image":return"Imagen";case"video":return"Video";case"document":return"Documento";default:return"Archivo"}}getAvailableTypes(){let t={...this.defaultConfig,...this.config},i=[];return t.showImage&&i.push("image"),t.showVideo&&i.push("video"),t.showDocument&&i.push("document"),i}onTypeSelect(t){this.openFileDialog(t)}openFileDialog(t){let i=document.createElement("input");i.type="file",i.accept=this.getAcceptAttribute(t),i.multiple=this.config?.multiple||!1,i.onchange=o=>{let n=o.target.files?.[0];n&&this.handleFileSelection(n,t)},i.click()}handleFileSelection(t,i){let o=this.validateFile(t,i);if(!o.valid){this.dispatchEvent(new CustomEvent("osb-upload-error",{detail:{error:o.error},bubbles:!0}));return}this.dispatchEvent(new CustomEvent("osb-file-selected",{detail:{file:t,type:i},bubbles:!0})),this.events?.onFileSelected?.(t,i)}validateFile(t,i){let o={...this.defaultConfig,...this.config};if(o.maxFileSize&&t.size>o.maxFileSize)return{valid:!1,error:`El archivo es demasiado grande. Tama\xF1o m\xE1ximo: ${Math.round(o.maxFileSize/1048576)}MB`};let n=t.name.toLowerCase(),r=this.getAllowedExtensions(i);return r.some(l=>n.endsWith(l.toLowerCase()))?{valid:!0}:{valid:!1,error:`Tipo de archivo no v\xE1lido. Extensiones permitidas: ${r.join(", ")}`}}render(){let t=this.getAvailableTypes();return t.length===0?ue.html`<div class="ol-upload ol-upload--empty">No hay tipos de archivo disponibles</div>`:ue.html`
3600
3600
  <div class="ol-upload">
3601
3601
  <ol-dropdown placement="bottom-start" distance="8">
3602
3602
  <div slot="trigger">
@@ -3614,7 +3614,7 @@ video::-webkit-media-text-track-display {
3614
3614
  </ol-menu>
3615
3615
  </ol-dropdown>
3616
3616
  </div>
3617
- `}getIconName(t){switch(t){case"image":return"image";case"video":return"file-play";case"document":return"file-text";default:return"file"}}};R.styles=[ni],v([(0,dt.property)({type:Object})],R.prototype,"config",2),v([(0,dt.property)({type:Object})],R.prototype,"events",2),R=v([K("osb-upload")],R);var ai=require("lit"),li=ai.css`
3617
+ `}getIconName(t){switch(t){case"image":return"image";case"video":return"file-play";case"document":return"file-text";default:return"file"}}};R.styles=[ri],v([(0,dt.property)({type:Object})],R.prototype,"config",2),v([(0,dt.property)({type:Object})],R.prototype,"events",2),R=v([K("osb-upload")],R);var ai=require("lit"),li=ai.css`
3618
3618
  :host {
3619
3619
  display: block;
3620
3620
  position: fixed;
@@ -4413,7 +4413,7 @@ video::-webkit-media-text-track-display {
4413
4413
  height: 120px;
4414
4414
  }
4415
4415
  }
4416
- `;var $={products:{label:"PRODUCTS",icon:"shopping-bag",enabled:!0,displayOptions:{showThumbnail:!0,showDescription:!1,showPrice:!0,showTags:!1,thumbnailSize:"small",layout:"grid"}},videos:{label:"VIDEOS",icon:"video",enabled:!0,displayOptions:{showThumbnail:!0,showDescription:!1,showDuration:!0,showSize:!1,thumbnailSize:"small",layout:"grid"}},images:{label:"IMAGES",icon:"image",enabled:!0,displayOptions:{showThumbnail:!0,showDescription:!1,showSize:!1,thumbnailSize:"small",layout:"grid"}},presentations:{label:"PRESENTATIONS",icon:"file-text",enabled:!0,displayOptions:{showThumbnail:!0,showDescription:!1,showSize:!1,thumbnailSize:"small",layout:"grid"}},faqs:{label:"FAQS",icon:"help-circle",enabled:!0,displayOptions:{showThumbnail:!1,showDescription:!0,showSize:!1,thumbnailSize:"small",layout:"list"}},audios:{label:"AUDIOS",icon:"music",enabled:!1,displayOptions:{showThumbnail:!0,showDescription:!1,showDuration:!0,showSize:!1,thumbnailSize:"small",layout:"grid"}},"special-effects":{label:"SPECIAL EFFECTS",icon:"zap",enabled:!1,displayOptions:{showThumbnail:!0,showDescription:!1,showSize:!1,thumbnailSize:"small",layout:"grid"}}};var f=class extends u.LitElement{constructor(){super(...arguments);this.selectedCategory="products";this.disabled=!1;this.isUploading=!1;this.uploadProgress=0;this.categoryStates=new Map;this.unifiedSearchQuery="";this.extraFilters=[];this.activeFilters={};this.loadingFilters=!1;this.defaultSearchConfig={placeholder:"Search all assets...",debounceMs:300,minLength:2}}async firstUpdated(){this.initializeService(),this.initializeCategoryStates(),await this.loadExtraFilters()}initializeService(){this.config?.multimediaService&&(this.multimediaService=de.initialize(this.config.multimediaService)),this.config?.productService&&(this.productService=X.initialize(this.config.productService)),this.config?.faqsService&&(this.faqsService=le.initialize(this.config.faqsService)),this.config?.fileService&&(this.fileService=ce.initialize(this.config.fileService))}initializeCategoryStates(){(this.config?.customCategories||Object.keys($)).forEach(i=>{this.categoryStates.set(i,{category:i,items:[],pagination:{page:1,limit:this.config?.itemsPerPage||12,total:0,hasMore:!1,loading:!1},searchQuery:"",loading:!1})})}async loadExtraFilters(){if(!this.config?.enableExtraFilters||!this.faqsService)return;let t=this.config.faqsService?.organizationId;if(!t){console.warn("Organization ID required for loading extra filters");return}this.loadingFilters=!0;try{let i=await this.faqsService.getSettingsByOrganization(t,this.config.userGroupId);i?.extraFilters&&(this.extraFilters=i.extraFilters.filter(o=>o.enabled&&(o.entity==="all"||o.entity==="assets")).sort((o,r)=>o.order-r.order))}catch(i){console.error("Error loading extra filters:",i)}finally{this.loadingFilters=!1}}hasActiveFilters(){return Object.keys(this.activeFilters).length>0}convertToExtraFields(t){if(!t||Object.keys(t).length===0)return;let i={};for(let[o,r]of Object.entries(t))r!=null&&(Array.isArray(r)?r.length>0&&(i[o]=r.join(",")):typeof r=="string"&&r.trim()!==""&&(r==="true"?i[o]=!0:r==="false"?i[o]=!1:!isNaN(Number(r))&&r.trim()!==""?i[o]=Number(r):i[o]=r));return Object.keys(i).length>0?i:void 0}async loadCategoryData(t,i="",o=1){if(!this.multimediaService&&t!=="faqs"&&t!=="products"||!this.productService&&t==="products"||!this.faqsService&&t==="faqs")return;let r=this.categoryStates.get(t);if(!r)return;this.updateCategoryState(t,{loading:!0,error:void 0});let n=this.hasActiveFilters()?this.activeFilters:void 0;try{let a=[],l=0;switch(t){case"products":{let m=await this.productService.getProducts({title:i,limit:r.pagination.limit,includeSecureToken:!0,extraFields:this.convertToExtraFields(n)});a=this.mapProductsToAssetItems(m),l=m.length;break}case"images":{let m=await this.multimediaService.getImages({search:i,page:o,limit:r.pagination.limit,includeSecureToken:!0,extraFilters:n});a=this.mapMultimediaToAssetItems(m.items,"images"),l=m.total;break}case"videos":{let m=await this.multimediaService.getVideos({search:i,page:o,limit:r.pagination.limit,includeSecureToken:!0,extraFilters:n});a=this.mapMultimediaToAssetItems(m.items,"videos"),l=m.total;break}case"presentations":{let m=await this.multimediaService.getPresentations({search:i,page:o,limit:r.pagination.limit,includeSecureToken:!0,extraFilters:n});a=this.mapMultimediaToAssetItems(m.items,"presentations"),l=m.total;break}case"faqs":{let m=await this.faqsService.getFaqs({search:i,isActive:!0,page:o,organizationId:this.config?.faqsService?.organizationId,limit:r.pagination.limit,sortBy:"priority",sortOrder:"desc",extraFilters:n});a=this.mapFaqsToAssetItems(m.data),l=m.total;break}}let d=o===1?a:[...r.items,...a];this.updateCategoryState(t,{items:d,pagination:{...r.pagination,page:o,total:l,hasMore:d.length<l,loading:!1},searchQuery:i,loading:!1})}catch(a){console.error(`Error loading ${t} data:`,a),this.updateCategoryState(t,{loading:!1,error:a instanceof Error?a.message:"Failed to load data"})}}mapProductsToAssetItems(t){return t.map(i=>({id:i.id,name:i.name,description:i.description,url:i.url,thumbnail:i.images?.[0],type:"products",price:i.price,currency:i.currency,tags:i.tags,secureToken:i.secureToken,metadata:{externalId:i.externalId,category:i.category,providerType:i.providerType,variants:i.variants,options:i.options}}))}mapMultimediaToAssetItems(t,i){return t?.map(o=>({id:o.id,name:o.name,description:o.description,url:o.url,thumbnail:i==="images"?o.url:o.animatedCoverUrl,type:i,size:o.size,format:o.format,duration:o.duration,labels:o.labels,secureToken:o.secureToken,metadata:{organizationId:o.organizationId,status:o.status,vodUrl:o.vodUrl,slides:o.slides}}))}mapFaqsToAssetItems(t){return t.map(i=>({id:i.id,name:i.question,description:i.answer,url:`#faq-${i.id}`,type:"faqs",metadata:{organizationId:i.organizationId,groupId:i.groupId,priority:i.priority,isActive:i.isActive,createdAt:i.createdAt,updatedAt:i.updatedAt}}))}updateCategoryState(t,i){let o=this.categoryStates.get(t);o&&(this.categoryStates.set(t,{...o,...i}),this.requestUpdate())}async onCategoryToggle(t){if(this.disabled)return;let i=this.categoryStates.get(t);i&&i.items.length===0&&!i.loading&&await this.loadCategoryData(t,this.unifiedSearchQuery),this.dispatchEvent(new CustomEvent("category-change",{detail:t}))}async onUnifiedSearchInput(t){if(this.disabled)return;let o=t.target.value.trim();this.unifiedSearchQuery=o,this.searchTimeout&&clearTimeout(this.searchTimeout),this.searchTimeout=window.setTimeout(async()=>{o.length>=(this.searchConfig?.minLength||this.defaultSearchConfig.minLength)?(await this.searchAllCategories(o),this.dispatchEvent(new CustomEvent("search",{detail:{query:o,category:"all"}}))):o.length===0&&await this.clearSearchAllCategories()},this.searchConfig?.debounceMs||this.defaultSearchConfig.debounceMs)}async searchAllCategories(t){let i=this.config?.customCategories||Object.keys($);for(let o of i)this.updateCategoryState(o,{searchQuery:t}),await this.loadCategoryData(o,t,1)}async clearSearchAllCategories(){let t=this.config?.customCategories||Object.keys($);for(let i of t)this.updateCategoryState(i,{searchQuery:""}),await this.loadCategoryData(i,"",1)}async onFilterChange(t,i){if(!this.disabled){if(!i||Array.isArray(i)&&i.length===0||i===""){let{[t]:o,...r}=this.activeFilters;this.activeFilters=r}else this.activeFilters={...this.activeFilters,[t]:i};await this.reloadAllOpenCategories(),this.dispatchEvent(new CustomEvent("filter-change",{detail:{filterName:t,value:i,activeFilters:this.activeFilters}}))}}async reloadAllOpenCategories(){let t=this.config?.customCategories||Object.keys($);for(let i of t){let o=this.categoryStates.get(i);o&&o.items.length>0&&await this.loadCategoryData(i,o.searchQuery,1)}}renderExtraFilters(){return this.extraFilters.length?u.html`
4416
+ `;var $={products:{label:"PRODUCTS",icon:"shopping-bag",enabled:!0,displayOptions:{showThumbnail:!0,showDescription:!1,showPrice:!0,showTags:!1,thumbnailSize:"small",layout:"grid"}},videos:{label:"VIDEOS",icon:"video",enabled:!0,displayOptions:{showThumbnail:!0,showDescription:!1,showDuration:!0,showSize:!1,thumbnailSize:"small",layout:"grid"}},images:{label:"IMAGES",icon:"image",enabled:!0,displayOptions:{showThumbnail:!0,showDescription:!1,showSize:!1,thumbnailSize:"small",layout:"grid"}},presentations:{label:"PRESENTATIONS",icon:"file-text",enabled:!0,displayOptions:{showThumbnail:!0,showDescription:!1,showSize:!1,thumbnailSize:"small",layout:"grid"}},faqs:{label:"FAQS",icon:"help-circle",enabled:!0,displayOptions:{showThumbnail:!1,showDescription:!0,showSize:!1,thumbnailSize:"small",layout:"list"}},audios:{label:"AUDIOS",icon:"music",enabled:!1,displayOptions:{showThumbnail:!0,showDescription:!1,showDuration:!0,showSize:!1,thumbnailSize:"small",layout:"grid"}},"special-effects":{label:"SPECIAL EFFECTS",icon:"zap",enabled:!1,displayOptions:{showThumbnail:!0,showDescription:!1,showSize:!1,thumbnailSize:"small",layout:"grid"}}};var f=class extends u.LitElement{constructor(){super(...arguments);this.selectedCategory="products";this.disabled=!1;this.isUploading=!1;this.uploadProgress=0;this.categoryStates=new Map;this.unifiedSearchQuery="";this.extraFilters=[];this.activeFilters={};this.loadingFilters=!1;this.defaultSearchConfig={placeholder:"Search all assets...",debounceMs:300,minLength:2}}async firstUpdated(){this.initializeService(),this.initializeCategoryStates(),await this.loadExtraFilters()}initializeService(){this.config?.multimediaService&&(this.multimediaService=de.initialize(this.config.multimediaService)),this.config?.productService&&(this.productService=X.initialize(this.config.productService)),this.config?.faqsService&&(this.faqsService=le.initialize(this.config.faqsService)),this.config?.fileService&&(this.fileService=ce.initialize(this.config.fileService))}initializeCategoryStates(){(this.config?.customCategories||Object.keys($)).forEach(i=>{this.categoryStates.set(i,{category:i,items:[],pagination:{page:1,limit:this.config?.itemsPerPage||12,total:0,hasMore:!1,loading:!1},searchQuery:"",loading:!1})})}async loadExtraFilters(){if(!this.config?.enableExtraFilters||!this.faqsService)return;let t=this.config.faqsService?.organizationId;if(!t){console.warn("Organization ID required for loading extra filters");return}this.loadingFilters=!0;try{let i=await this.faqsService.getSettingsByOrganization(t,this.config.userGroupId);i?.extraFilters&&(this.extraFilters=i.extraFilters.filter(o=>o.enabled&&(o.entity==="all"||o.entity==="assets")).sort((o,n)=>o.order-n.order))}catch(i){console.error("Error loading extra filters:",i)}finally{this.loadingFilters=!1}}hasActiveFilters(){return Object.keys(this.activeFilters).length>0}convertToExtraFields(t){if(!t||Object.keys(t).length===0)return;let i={};for(let[o,n]of Object.entries(t))n!=null&&(Array.isArray(n)?n.length>0&&(i[o]=n.join(",")):typeof n=="string"&&n.trim()!==""&&(n==="true"?i[o]=!0:n==="false"?i[o]=!1:!isNaN(Number(n))&&n.trim()!==""?i[o]=Number(n):i[o]=n));return Object.keys(i).length>0?i:void 0}async loadCategoryData(t,i="",o=1){if(!this.multimediaService&&t!=="faqs"&&t!=="products"||!this.productService&&t==="products"||!this.faqsService&&t==="faqs")return;let n=this.categoryStates.get(t);if(!n)return;this.updateCategoryState(t,{loading:!0,error:void 0});let r=this.hasActiveFilters()?this.activeFilters:void 0;try{let a=[],l=0;switch(t){case"products":{let m=await this.productService.getProducts({title:i,limit:n.pagination.limit,includeSecureToken:!0,extraFields:this.convertToExtraFields(r)});a=this.mapProductsToAssetItems(m),l=m.length;break}case"images":{let m=await this.multimediaService.getImages({search:i,page:o,limit:n.pagination.limit,includeSecureToken:!0,extraFilters:r});a=this.mapMultimediaToAssetItems(m.items,"images"),l=m.total;break}case"videos":{let m=await this.multimediaService.getVideos({search:i,page:o,limit:n.pagination.limit,includeSecureToken:!0,extraFilters:r});a=this.mapMultimediaToAssetItems(m.items,"videos"),l=m.total;break}case"presentations":{let m=await this.multimediaService.getPresentations({search:i,page:o,limit:n.pagination.limit,includeSecureToken:!0,extraFilters:r});a=this.mapMultimediaToAssetItems(m.items,"presentations"),l=m.total;break}case"faqs":{let m=await this.faqsService.getFaqs({search:i,isActive:!0,page:o,organizationId:this.config?.faqsService?.organizationId,limit:n.pagination.limit,sortBy:"priority",sortOrder:"desc",extraFilters:r});a=this.mapFaqsToAssetItems(m.data),l=m.total;break}}let d=o===1?a:[...n.items,...a];this.updateCategoryState(t,{items:d,pagination:{...n.pagination,page:o,total:l,hasMore:d.length<l,loading:!1},searchQuery:i,loading:!1})}catch(a){console.error(`Error loading ${t} data:`,a),this.updateCategoryState(t,{loading:!1,error:a instanceof Error?a.message:"Failed to load data"})}}mapProductsToAssetItems(t){return t.map(i=>({id:i.id,name:i.name,description:i.description,url:i.url,thumbnail:i.images?.[0],type:"products",price:i.price,currency:i.currency,tags:i.tags,secureToken:i.secureToken,metadata:{externalId:i.externalId,category:i.category,providerType:i.providerType,variants:i.variants,options:i.options}}))}mapMultimediaToAssetItems(t,i){return t?.map(o=>({id:o.id,name:o.name,description:o.description,url:o.url,thumbnail:i==="images"?o.url:o.animatedCoverUrl,type:i,size:o.size,format:o.format,duration:o.duration,labels:o.labels,secureToken:o.secureToken,metadata:{organizationId:o.organizationId,status:o.status,vodUrl:o.vodUrl,slides:o.slides}}))}mapFaqsToAssetItems(t){return t.map(i=>({id:i.id,name:i.question,description:i.answer,url:`#faq-${i.id}`,type:"faqs",metadata:{organizationId:i.organizationId,groupId:i.groupId,priority:i.priority,isActive:i.isActive,createdAt:i.createdAt,updatedAt:i.updatedAt}}))}updateCategoryState(t,i){let o=this.categoryStates.get(t);o&&(this.categoryStates.set(t,{...o,...i}),this.requestUpdate())}async onCategoryToggle(t){if(this.disabled)return;let i=this.categoryStates.get(t);i&&i.items.length===0&&!i.loading&&await this.loadCategoryData(t,this.unifiedSearchQuery),this.dispatchEvent(new CustomEvent("category-change",{detail:t}))}async onUnifiedSearchInput(t){if(this.disabled)return;let o=t.target.value.trim();this.unifiedSearchQuery=o,this.searchTimeout&&clearTimeout(this.searchTimeout),this.searchTimeout=window.setTimeout(async()=>{o.length>=(this.searchConfig?.minLength||this.defaultSearchConfig.minLength)?(await this.searchAllCategories(o),this.dispatchEvent(new CustomEvent("search",{detail:{query:o,category:"all"}}))):o.length===0&&await this.clearSearchAllCategories()},this.searchConfig?.debounceMs||this.defaultSearchConfig.debounceMs)}async searchAllCategories(t){let i=this.config?.customCategories||Object.keys($);for(let o of i)this.updateCategoryState(o,{searchQuery:t}),await this.loadCategoryData(o,t,1)}async clearSearchAllCategories(){let t=this.config?.customCategories||Object.keys($);for(let i of t)this.updateCategoryState(i,{searchQuery:""}),await this.loadCategoryData(i,"",1)}async onFilterChange(t,i){if(!this.disabled){if(!i||Array.isArray(i)&&i.length===0||i===""){let{[t]:o,...n}=this.activeFilters;this.activeFilters=n}else this.activeFilters={...this.activeFilters,[t]:i};await this.reloadAllOpenCategories(),this.dispatchEvent(new CustomEvent("filter-change",{detail:{filterName:t,value:i,activeFilters:this.activeFilters}}))}}async reloadAllOpenCategories(){let t=this.config?.customCategories||Object.keys($);for(let i of t){let o=this.categoryStates.get(i);o&&o.items.length>0&&await this.loadCategoryData(i,o.searchQuery,1)}}renderExtraFilters(){return this.extraFilters.length?u.html`
4417
4417
  <div class="ol-sidebar__extra-filters">
4418
4418
  ${(0,Be.repeat)(this.extraFilters,t=>t.name,t=>this.renderFilter(t))}
4419
4419
  </div>
@@ -4427,7 +4427,7 @@ video::-webkit-media-text-track-display {
4427
4427
  size="small"
4428
4428
  ?disabled=${this.disabled}
4429
4429
  .value=${i||""}
4430
- @ol-change=${o=>{let r=o.target;this.onFilterChange(t.name,r.value)}}
4430
+ @ol-change=${o=>{let n=o.target;this.onFilterChange(t.name,n.value)}}
4431
4431
  >
4432
4432
  ${t.values?.map(o=>u.html`
4433
4433
  <ol-option value=${o}>${o}</ol-option>
@@ -4445,7 +4445,7 @@ video::-webkit-media-text-track-display {
4445
4445
  size="small"
4446
4446
  ?disabled=${this.disabled}
4447
4447
  .value=${i}
4448
- @ol-change=${o=>{let r=o.target,n=Array.isArray(r.value)?r.value:[r.value].filter(Boolean);this.onFilterChange(t.name,n)}}
4448
+ @ol-change=${o=>{let n=o.target,r=Array.isArray(n.value)?n.value:[n.value].filter(Boolean);this.onFilterChange(t.name,r)}}
4449
4449
  >
4450
4450
  ${t.values?.map(o=>u.html`
4451
4451
  <ol-option value=${o}>${o}</ol-option>
@@ -4461,15 +4461,15 @@ video::-webkit-media-text-track-display {
4461
4461
  size="small"
4462
4462
  ?disabled=${this.disabled}
4463
4463
  .value=${i}
4464
- @ol-input=${o=>{let r=o.target;this.searchTimeout&&clearTimeout(this.searchTimeout),this.searchTimeout=window.setTimeout(()=>{this.onFilterChange(t.name,r.value)},this.searchConfig?.debounceMs||this.defaultSearchConfig.debounceMs)}}
4464
+ @ol-input=${o=>{let n=o.target;this.searchTimeout&&clearTimeout(this.searchTimeout),this.searchTimeout=window.setTimeout(()=>{this.onFilterChange(t.name,n.value)},this.searchConfig?.debounceMs||this.defaultSearchConfig.debounceMs)}}
4465
4465
  ></ol-input>
4466
4466
  </div>
4467
- `}async onLoadMore(t){if(this.disabled)return;let i=this.categoryStates.get(t);!i||!i.pagination.hasMore||i.pagination.loading||(await this.loadCategoryData(t,i.searchQuery,i.pagination.page+1),this.dispatchEvent(new CustomEvent("load-more",{detail:t})))}onItemSelect(t){this.disabled||this.dispatchEvent(new CustomEvent("item-select",{detail:t}))}async onFileSelected(t){if(this.disabled)return;if(!this.fileService){console.warn("FileService not configured");return}let{file:i,type:o}=t.detail;this.isUploading=!0,this.uploadProgress=0;try{let r=await this.fileService.uploadFile(i,{bucketType:"conversations",path:"scanned",description:`${o} uploaded from sidebar`,onProgress:n=>{this.uploadProgress=n}});if(r.success)this.dispatchEvent(new CustomEvent("file-uploaded",{detail:{id:r.id,name:r.name,url:r.url,type:"file"}}));else throw new Error(r.error||"Upload failed")}catch(r){console.error("Error uploading file:",r),this.dispatchEvent(new CustomEvent("file-upload-error",{detail:{error:r instanceof Error?r.message:"Unknown error"},bubbles:!0}))}finally{this.isUploading=!1,this.uploadProgress=0}}renderCategoryHeader(t){let i=$[t],r=this.categoryStates.get(t)?.items.length||0;return u.html`
4467
+ `}async onLoadMore(t){if(this.disabled)return;let i=this.categoryStates.get(t);!i||!i.pagination.hasMore||i.pagination.loading||(await this.loadCategoryData(t,i.searchQuery,i.pagination.page+1),this.dispatchEvent(new CustomEvent("load-more",{detail:t})))}onItemSelect(t){this.disabled||this.dispatchEvent(new CustomEvent("item-select",{detail:t}))}async onFileSelected(t){if(this.disabled)return;if(!this.fileService){console.warn("FileService not configured");return}let{file:i,type:o}=t.detail;this.isUploading=!0,this.uploadProgress=0;try{let n=await this.fileService.uploadFile(i,{bucketType:"conversations",path:"scanned",description:`${o} uploaded from sidebar`,onProgress:r=>{this.uploadProgress=r}});if(n.success)this.dispatchEvent(new CustomEvent("file-uploaded",{detail:{id:n.id,name:n.name,url:n.url,type:"file"}}));else throw new Error(n.error||"Upload failed")}catch(n){console.error("Error uploading file:",n),this.dispatchEvent(new CustomEvent("file-upload-error",{detail:{error:n instanceof Error?n.message:"Unknown error"},bubbles:!0}))}finally{this.isUploading=!1,this.uploadProgress=0}}renderCategoryHeader(t){let i=$[t],n=this.categoryStates.get(t)?.items.length||0;return u.html`
4468
4468
  <div class="ol-sidebar__category-header">
4469
4469
  <div class="ol-sidebar__category-info">
4470
4470
  <span class="ol-sidebar__category-label">${i.label}</span>
4471
- ${(0,k.when)(r>0,()=>u.html`
4472
- <span class="ol-sidebar__category-count">(${r})</span>
4471
+ ${(0,k.when)(n>0,()=>u.html`
4472
+ <span class="ol-sidebar__category-count">(${n})</span>
4473
4473
  `)}
4474
4474
  </div>
4475
4475
 
@@ -4586,7 +4586,7 @@ video::-webkit-media-text-track-display {
4586
4586
 
4587
4587
  ${(0,k.when)(i.items.length>0,()=>u.html`
4588
4588
  <div class="ol-sidebar__assets ${(0,te.classMap)({"ol-sidebar__assets--list":o.displayOptions.layout==="list"})}">
4589
- ${(0,Be.repeat)(i.items,r=>r.id,r=>this.renderAssetItem(r,o.displayOptions))}
4589
+ ${(0,Be.repeat)(i.items,n=>n.id,n=>this.renderAssetItem(n,o.displayOptions))}
4590
4590
  </div>
4591
4591
  `)}
4592
4592
 
@@ -4674,4 +4674,4 @@ video::-webkit-media-text-track-display {
4674
4674
  `:u.html``)}
4675
4675
  </div>
4676
4676
  </div>
4677
- `}};f.styles=[li],v([(0,w.property)({type:Object})],f.prototype,"config",2),v([(0,w.property)({type:Object})],f.prototype,"searchConfig",2),v([(0,w.property)({type:String})],f.prototype,"selectedCategory",2),v([(0,w.property)({type:Boolean})],f.prototype,"disabled",2),v([(0,w.state)()],f.prototype,"multimediaService",2),v([(0,w.state)()],f.prototype,"productService",2),v([(0,w.state)()],f.prototype,"faqsService",2),v([(0,w.state)()],f.prototype,"fileService",2),v([(0,w.state)()],f.prototype,"isUploading",2),v([(0,w.state)()],f.prototype,"uploadProgress",2),v([(0,w.state)()],f.prototype,"categoryStates",2),v([(0,w.state)()],f.prototype,"searchTimeout",2),v([(0,w.state)()],f.prototype,"unifiedSearchQuery",2),v([(0,w.state)()],f.prototype,"extraFilters",2),v([(0,w.state)()],f.prototype,"activeFilters",2),v([(0,w.state)()],f.prototype,"loadingFilters",2),f=v([K("osb-side-bar")],f);var ci=require("@lit/react"),di=A(require("react"),1);var pi=(0,ci.createComponent)({tagName:"osb-asset",elementClass:j,react:di.default,events:{onAssetClick:"asset-click",onAssetDownload:"asset-download",onAssetLoad:"asset-load",onAssetError:"asset-error",onContentClick:"content-click"}});var ui=require("@lit/react"),mi=A(require("react"),1);var gi=(0,ui.createComponent)({tagName:"osb-side-bar",elementClass:f,react:mi.default,events:{onSearch:"search",onLoadMore:"load-more",onItemAdd:"item-add",onCategoryChange:"category-change",onItemSelect:"item-select",onFileUpload:"file-uploaded"}});var vi=require("@lit/react"),hi=A(require("react"),1);var fi=(0,vi.createComponent)({tagName:"osb-upload",elementClass:R,react:hi.default,events:{onFileSelected:"osb-file-selected",onUploadError:"osb-upload-error"}});var M=0;function Re(){M=0}function pt(s){M=s}function g(s){return M++,`mock_${s}_${M}_${Date.now().toString(36)}`}function ut(s,e){return`mock_${s}_${e.toString(36)}`}function E(s,e,t){let i=t||new Date().toISOString(),o=typeof btoa=="function"?btoa(i).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""):i.replace(/[^a-zA-Z0-9]/g,"");return`mock_token_${s}_${e}_${o}`}function mt(s){if(!s.startsWith("mock_token_"))return null;let e=s.replace("mock_token_","").split("_");if(e.length<3)return null;let t=e[e.length-1],i=e[e.length-2],o=e.slice(0,-2).join("_");try{let r=t.replace(/-/g,"+").replace(/_/g,"/"),n=typeof atob=="function"?atob(r):t;return{roomId:o,identity:i,timestamp:n}}catch{return null}}function ie(s){return`wss://mock-livekit.local/room/${s}`}function gt(s="participant",e){let t=e??M++;return`${s}_${t}_${Date.now().toString(36)}`}function vt(s="room"){return M++,`${s}_${M}_${Date.now().toString(36)}`}function ht(s,e){return M++,`TR_${s.toUpperCase()}_${e}_${M}`}function ft(){return M++,`msg_${M}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`}function bt(s){return M++,`api_${s}_${M}_${Date.now().toString(36)}`}function yt(){return[Math.random().toString(16).slice(2,10),Math.random().toString(16).slice(2,6),Math.random().toString(16).slice(2,6),Math.random().toString(16).slice(2,6),Math.random().toString(16).slice(2,14)].join("-")}function kt(s,e){let t=[];for(let i=0;i<e;i++)t.push(g(s));return t}var Ke={responseStrategy:"echo",responseDelayMs:100,cannedResponses:[],type:"text",nature:"ai",simulateTyping:!1,typingDelayPerChar:20};function Ge(s,e,t=[],i=0,o=Math.random){switch(s){case"echo":return{response:`Echo: ${e}`,nextIndex:i};case"canned":return{response:t[0]||"Default response",nextIndex:i};case"sequential":return{response:t[i]||"No more responses",nextIndex:(i+1)%Math.max(1,t.length)};case"random":{if(t.length===0)return{response:"Random response",nextIndex:i};let r=Math.floor(o()*t.length);return{response:t[r],nextIndex:i}}case"silent":return{response:"",nextIndex:i};case"error":throw new Error("Agent error");case"custom":return{response:"",nextIndex:i};default:return{response:"Default agent response",nextIndex:i}}}var ge=class{constructor(e,t,i={}){this._state="idle";this.conversationHistory=[];this.responseIndex=0;this.eventListeners=new Set;this.randomFn=Math.random;this.messageCount=0;this.id=e,this.name=t,this.config={...Ke,...i}}get state(){return this._state}get isRunning(){return this._state==="running"}get history(){return[...this.conversationHistory]}getConfig(){return{...this.config}}updateConfig(e){this.config={...this.config,...e}}setStrategy(e){this.config.responseStrategy=e}setCannedResponses(e){this.config.cannedResponses=e,this.responseIndex=0}setCustomHandler(e){this.customHandler=e,this.config.responseStrategy="custom"}setRandomFunction(e){this.randomFn=e}async start(e){this._state!=="running"&&(this._state="starting",this.roomId=e,this.conversationHistory=[],this.responseIndex=0,this.messageCount=0,await this.delay(50),this._state="running",this.emitEvent({type:"started",agentId:this.id}))}async stop(){this._state==="running"&&(this._state="stopping",await this.delay(50),this._state="stopped",this.roomId=void 0,this.emitEvent({type:"stopped",agentId:this.id}))}async processMessage(e){if(this._state!=="running")throw new Error("Agent is not running");if(this.config.maxMessages&&this.messageCount>=this.config.maxMessages)return await this.stop(),"";this.addMessage(e,"user"),this.emitEvent({type:"message_received",agentId:this.id,message:e});let t;try{if(this.config.responseStrategy==="custom"&&this.customHandler)t=await this.customHandler(this.id,e,this.conversationHistory);else{if(this.config.responseStrategy==="silent")return"";if(this.config.responseStrategy==="error"){let i=new Error("Agent error");throw this.emitEvent({type:"error",agentId:this.id,error:i}),i}else{let i=Ge(this.config.responseStrategy,e,this.config.cannedResponses,this.responseIndex,this.randomFn);t=i.response,this.responseIndex=i.nextIndex}}}catch(i){throw this._state="error",i}return this.config.simulateTyping&&this.config.typingDelayPerChar&&await this.delay(t.length*this.config.typingDelayPerChar),this.config.responseDelayMs&&await this.delay(this.config.responseDelayMs),this.addMessage(t,"agent"),this.messageCount++,this.emitEvent({type:"response_sent",agentId:this.id,response:t}),t}addEventListener(e){return this.eventListeners.add(e),()=>this.eventListeners.delete(e)}clearHistory(){this.conversationHistory=[],this.responseIndex=0}reset(){this._state="idle",this.roomId=void 0,this.conversationHistory=[],this.responseIndex=0,this.messageCount=0}toJSON(){return{id:this.id,name:this.name,state:this._state,roomId:this.roomId,config:this.config,historyLength:this.conversationHistory.length,messageCount:this.messageCount}}addMessage(e,t){let i={id:g("msg"),content:e,role:t,timestamp:Date.now()};return this.conversationHistory.push(i),i}emitEvent(e){for(let t of this.eventListeners)try{t(e)}catch(i){console.error("Error in agent event listener:",i)}}delay(e){return new Promise(t=>setTimeout(t,e))}};var b=class s extends Error{constructor(e,t,i){super(t),this.name="MockLiveKitError",this.code=e,this.details=i,typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}toMockError(){return{code:this.code,message:this.message,details:this.details}}static fromMockError(e){return new s(e.code,e.message,e.details)}},O=class extends b{constructor(e){super("ROOM_NOT_FOUND",`Room not found: ${e}`,{roomId:e}),this.name="RoomNotFoundError"}},ve=class extends b{constructor(e){super("ROOM_ENDED",`Room has ended: ${e}`,{roomId:e}),this.name="RoomEndedError"}},he=class extends b{constructor(e,t){super("PARTICIPANT_ALREADY_JOINED",`Participant ${e} is already in room ${t}`,{identity:e,roomId:t}),this.name="ParticipantAlreadyJoinedError"}},fe=class extends b{constructor(e){super("PARTICIPANT_NOT_FOUND",`Participant not found: ${e}`,{identity:e}),this.name="ParticipantNotFoundError"}},be=class extends b{constructor(e){super("TRACK_NOT_FOUND",`Track not found: ${e}`,{trackId:e}),this.name="TrackNotFoundError"}},ye=class extends b{constructor(e){super("AGENT_NOT_FOUND",`Agent not found: ${e}`,{agentId:e}),this.name="AgentNotFoundError"}},ke=class extends b{constructor(e="Unauthorized"){super("UNAUTHORIZED",e),this.name="UnauthorizedError"}},je=class extends b{constructor(e="Network error occurred"){super("NETWORK_ERROR",e),this.name="NetworkError"}},we=class extends b{constructor(e,t){super("INVALID_OPERATION",e,t),this.name="InvalidOperationError"}},Se=class extends b{constructor(e,t){super("TIMEOUT",`Operation timed out: ${e}`,{operation:e,timeoutMs:t}),this.name="TimeoutError"}};function oe(s){switch(s.code){case"ROOM_NOT_FOUND":return new O(s.details?.roomId??"unknown");case"ROOM_ENDED":return new ve(s.details?.roomId??"unknown");case"PARTICIPANT_ALREADY_JOINED":return new he(s.details?.identity??"unknown",s.details?.roomId??"unknown");case"PARTICIPANT_NOT_FOUND":return new fe(s.details?.identity??"unknown");case"TRACK_NOT_FOUND":return new be(s.details?.trackId??"unknown");case"AGENT_NOT_FOUND":return new ye(s.details?.agentId??"unknown");case"UNAUTHORIZED":return new ke(s.message);case"NETWORK_ERROR":return new je(s.message);case"INVALID_OPERATION":return new we(s.message,s.details);case"TIMEOUT":return new Se(s.details?.operation??"unknown",s.details?.timeoutMs??0);default:return b.fromMockError(s)}}function z(s){return typeof s=="object"&&s!==null&&"code"in s&&"message"in s&&typeof s.code=="string"&&typeof s.message=="string"}function jt(s){return s instanceof b}var se=class{constructor(){this.listeners={};this.wildcardListeners=new Set;this.eventHistory=[];this.maxHistorySize=1e3;this.recordHistory=!0}setMaxHistorySize(e){this.maxHistorySize=e,this.trimHistory()}setRecordHistory(e){this.recordHistory=e}on(e,t){return this.listeners[e]||(this.listeners[e]=new Set),this.listeners[e].add(t),()=>{this.off(e,t)}}once(e,t){let i=o=>{this.off(e,i),t(o)};return this.on(e,i)}off(e,t){this.listeners[e]?.delete(t)}onAny(e){return this.wildcardListeners.add(e),()=>{this.wildcardListeners.delete(e)}}offAny(e){this.wildcardListeners.delete(e)}removeAllListeners(e){e?delete this.listeners[e]:(this.listeners={},this.wildcardListeners.clear())}emit(e){this.recordHistory&&(this.eventHistory.push(e),this.trimHistory());let t=this.listeners[e.type];if(t)for(let i of t)try{i(e)}catch(o){console.error(`Error in mock event listener for ${e.type}:`,o)}for(let i of this.wildcardListeners)try{i(e)}catch(o){console.error("Error in mock wildcard event listener:",o)}}trimHistory(){this.eventHistory.length>this.maxHistorySize&&(this.eventHistory=this.eventHistory.slice(-this.maxHistorySize))}emitRoomCreated(e){let t={type:"roomCreated",timestamp:new Date().toISOString(),roomId:e.id,room:e};this.emit(t)}emitRoomEnded(e){let t={type:"roomEnded",timestamp:new Date().toISOString(),roomId:e};this.emit(t)}emitRoomConnectionStateChanged(e,t,i){let o={type:"roomConnectionStateChanged",timestamp:new Date().toISOString(),roomId:e,state:t,previousState:i};this.emit(o)}emitParticipantJoined(e,t){let i={type:"participantJoined",timestamp:new Date().toISOString(),roomId:e,participant:t};this.emit(i)}emitParticipantLeft(e,t){let i={type:"participantLeft",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t};this.emit(i)}emitParticipantAttributesChanged(e,t,i,o){let r={type:"participantAttributesChanged",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t,attributes:i,previousAttributes:o};this.emit(r)}emitTrackPublished(e,t,i){let o={type:"trackPublished",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t,track:i};this.emit(o)}emitTrackUnpublished(e,t,i){let o={type:"trackUnpublished",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t,trackId:i};this.emit(o)}emitTrackMuted(e,t){let i={type:"trackMuted",timestamp:new Date().toISOString(),roomId:e,trackId:t};this.emit(i)}emitTrackUnmuted(e,t){let i={type:"trackUnmuted",timestamp:new Date().toISOString(),roomId:e,trackId:t};this.emit(i)}emitMessageReceived(e,t){let i={type:"messageReceived",timestamp:new Date().toISOString(),roomId:e,message:t};this.emit(i)}emitMessageSent(e,t){let i={type:"messageSent",timestamp:new Date().toISOString(),roomId:e,message:t};this.emit(i)}emitTypingIndicator(e,t,i){let o={type:"typingIndicator",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t,isTyping:i};this.emit(o)}emitAgentStarted(e,t){let i={type:"agentStarted",timestamp:new Date().toISOString(),roomId:e,agent:t};this.emit(i)}emitAgentStopped(e,t){let i={type:"agentStopped",timestamp:new Date().toISOString(),roomId:e,agentId:t};this.emit(i)}emitAgentMessage(e,t,i){let o={type:"agentMessage",timestamp:new Date().toISOString(),roomId:e,agentId:t,message:i};this.emit(o)}emitDataReceived(e,t,i,o){let r={type:"dataReceived",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t,data:i,topic:o};this.emit(r)}emitError(e,t){let i={type:"error",timestamp:new Date().toISOString(),roomId:t,error:e};this.emit(i)}getHistory(e){return e?this.eventHistory.filter(t=>t.type===e):[...this.eventHistory]}getLastEvents(e,t){return(t?this.eventHistory.filter(o=>o.type===t):this.eventHistory).slice(-e)}clearHistory(){this.eventHistory=[]}listenerCount(e){return(this.listeners[e]?.size??0)+this.wildcardListeners.size}};var We=require("@onlive.ai/tracker/session"),Me=require("livekit-client");var bi=require("firebase/app"),p=require("firebase/database"),Ye=class{constructor(e){this.onChildChanged=(e,t)=>(0,p.onChildChanged)(this.ref(e),i=>t(i.key||"",i.val(),i));this.onChildRemoved=(e,t)=>(0,p.onChildRemoved)(this.ref(e),i=>t(i.key||"",i.val(),i));this.onChildChangedQuery=(e,t)=>(0,p.onChildChanged)(e,i=>t(i.key||"",i.val(),i));this.onChildRemovedQuery=(e,t)=>(0,p.onChildRemoved)(e,i=>t(i.key||"",i.val(),i));let t=(0,bi.initializeApp)(e.config);this.db=(0,p.getDatabase)(t)}ref(e){return(0,p.ref)(this.db,e)}async getOnce(e){let t=await(0,p.get)(this.ref(e));return t.exists()?t.val():null}async getOnceQuery(e){let t=await(0,p.get)(e),i=[];return t.exists()&&t.forEach(o=>{i.push({key:o.key||"",value:o.val()})}),i}onValue(e,t){return(0,p.onValue)(this.ref(e),i=>t(i.key??"",i.val(),i),i=>console.error("onValue error",i))}onValueQuery(e,t){return(0,p.onValue)(e,i=>t(i.key??"",i.val(),i),i=>console.error("onValueQuery error",i))}onChildAdded(e,t){return(0,p.onChildAdded)(this.ref(e),i=>t(i.key||"",i.val(),i),i=>console.error("onChildAdded error",i))}onChildAddedQuery(e,t){return(0,p.onChildAdded)(e,i=>t(i.key||"",i.val(),i),i=>console.error("onChildAddedQuery error",i))}write(e,t){return(0,p.set)(this.ref(e),t)}update(e,t){return(0,p.update)(this.ref(e),t)}remove(e){return(0,p.remove)(this.ref(e))}async push(e,t){let i=(0,p.push)(this.ref(e));return await(0,p.set)(i,t),i.key}onDisconnectUpdate(e,t){return(0,p.onDisconnect)(this.ref(e)).update(t)}cancelOnDisconnect(e){return(0,p.onDisconnect)(this.ref(e)).cancel()}transaction(e,t){return(0,p.runTransaction)(this.ref(e),i=>t(i))}query(e,t={}){let i=this.ref(e);return t.orderBy==="child"&&t.childKey&&(i=(0,p.query)(i,(0,p.orderByChild)(t.childKey))),t.orderBy==="key"&&(i=(0,p.query)(i,(0,p.orderByKey)())),t.orderBy==="value"&&(i=(0,p.query)(i,(0,p.orderByValue)())),t.startAt!=null&&(i=(0,p.query)(i,(0,p.startAt)(t.startAt))),t.endAt!=null&&(i=(0,p.query)(i,(0,p.endAt)(t.endAt))),t.equalTo!=null&&(i=(0,p.query)(i,(0,p.equalTo)(t.equalTo))),t.limitFirst!=null&&(i=(0,p.query)(i,(0,p.limitToFirst)(t.limitFirst))),t.limitLast!=null&&(i=(0,p.query)(i,(0,p.limitToLast)(t.limitLast))),i}};var yi=s=>{let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",t="";for(let i=0;i<s;i++)t+=e.charAt(Math.floor(Math.random()*e.length));return t};var ki=require("@onlive.ai/tracker/generator"),x=require("@onlive.ai/tracker/session"),G="chatbot",Qe=class s{static hasSession(){return!!x.Session.getCookie(G)}static getSession(e={role:"guest",regenerate:!1}){e.regenerate&&(x.Session.id=ki.Generator.uuid(),x.Session.deleteCookie(G));let t=x.Session.getCookie(G);return t&&s.isValidSession(t,e.role)?t:s.createSession(e.role)}static createSession(e){let t={externalId:e==="agent"?String(s.getUserId()||x.Session.id):x.Session.id,secret:yi(16),createdAt:new Date().toISOString()};return x.Session.setCookie(G,t,3600*24*365),t}static isValidSession(e,t){if(t==="guest")return!0;let i=s.getUserId();return!!(i&&String(i)===e.externalId)}static getUserId(){return x.Session.getCookie("user-id",{objectKey:"userId",storageKey:"user",storageType:"localStorage",ttl:3600*24*365,preserveData:!0})}static updateSessionWithRegistrationData(e){let t=x.Session.getCookie(G);if(t||(t=s.createSession("guest")),t){let i={...t,registrationData:e};x.Session.setCookie(G,i,3600*24*365)}}static hasRegistrationData(){return!!x.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 x.Session.getCookie(G)?.registrationData}};var ji="lk.chat",wi="lk.transcription",Si="lk.events",wt="typing-indicator";var St=class extends Me.Room{},Xe=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,o=e.info?.attributes?.["lk.segment_id"];o&&(this.transcriptionMap.has(o)?i=this.transcriptionMap.get(o)||"":this.transcriptionMap.set(o,i));let r=t?.identity?this.room.getParticipantByIdentity(t.identity):void 0,n="";for await(let a of e)n+=a,this.emitMessage({id:i,timestamp:Date.now(),message:n,assets:JSON.parse(e.info?.attributes?.assets||"[]"),from:r});this.messagePersistence==="client"&&this.persistMessage({roomId:this.room.id,content:n,externalId:i,identity:r?.identity,kind:r?.kind})};this.emitMessage=e=>{for(let t of this.listeners)t([e])};this.handleDataReceived=(e,t,i,o)=>{if(o===wt)try{let r=JSON.parse(new TextDecoder().decode(e));if(r.type==="typing"&&r.participantId!==this.room.localParticipant.identity){let n={type:"typing",isTyping:r.isTyping,timestamp:r.timestamp,participantId:r.participantId};this.emitTypingIndicator(n)}}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||ji,this.transcriptionTopic=e.transcriptionTopic||wi,this.eventsTopic=e.eventsTopic||Si,this.messagePersistence=e.messagePersistence||"disabled",this.room=this.createRoomInstance(),e.firebaseConfig&&this.initializeFirebase(e.firebaseConfig)}createRoomInstance(){return new St({adaptiveStream:!0,dynacast:!0})}ensureRoom(){return this.room||(this.room=this.createRoomInstance()),this.room}initializeFirebase(e){this.firebaseApi=new Ye({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(Me.RoomEvent.DataReceived,this.handleDataReceived),this.room.registerTextStreamHandler(this.channelTopic,this.handleIncomingMessage),this.room.registerTextStreamHandler(this.transcriptionTopic,this.handleIncomingMessage),this.room.on(Me.RoomEvent.DataReceived,this.handleDataReceived)}async registerUser(e,t,i,o){let r=await h(`${this.apiUrl}/users/register`,{method:"POST",body:JSON.stringify({externalId:e,secret:t,...i,metadata:o}),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=We.Session.getCookie("livekit-agent-token");if(i){if(this.decodeJwtPayload(i)?.username===t.name)return this.authToken=i,i;We.Session.deleteCookie("livekit-agent-token")}let o=await h(`${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 We.Session.setCookie("livekit-agent-token",o.token,1440*60),this.authToken=o.token,o.token}decodeJwtPayload(e){try{let t=e.split(".");if(t.length!==3)return null;let i=t[1],o=atob(i.replace(/-/g,"+").replace(/_/g,"/"));return JSON.parse(o)}catch{return null}}async quickStart(e){console.log("[ConversationService] Starting quickStart with options:",e),this.room=this.ensureRoom();let t=await h(`${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,o=await h(`${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(o),this.setupParticipantAttributesHandler(),this.room.connect(o.wsURL,o.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,o){let r=await h(`${this.apiUrl}/rooms/${e}/join`,{method:"POST",body:JSON.stringify({timezone:t,language:i,...o??{}}),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(Me.RoomEvent.ParticipantAttributesChanged,e=>{e.identity===this.room.localParticipant.identity&&Qe.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 h(`${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 h(`${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 o=i.track;if(o)try{await e.unpublishTrack(o,!0)}catch{o.stop()}}))}async disconnectAndCloseRoom(){await this.closeRoom(),await this.disconnect()}async readRoom(e){return h(`${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()),h(`${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 h(`${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 h(`${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 h(`${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 h(`${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 h(`${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:wt})}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 h(`${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 h(`${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 h(`${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 h(`${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,(o,r)=>e(o,r))}onPresenceAgentChange(e,t){let{api:i}=this.getFirebase();return i.onValue(this.buildAgentPresencePath(e),(o,r)=>t(o,r))}async createCallRequest(e){let{api:t,callsPath:i}=this.getFirebase(),r=(await h(`${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,(o,r)=>e(o,{...r,id:o}))}onCallRequestChange(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildChanged(i,(o,r)=>e(o,{...r,id:o}))}onCallRequestRemoved(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildRemoved(i,o=>e(o))}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 h(`${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:o}=this.getFirebase();t.resetSeen&&this.seenRequestIds.clear(),this.firebaseUnsubscribers["pending-requests"]?.();let r=i.query(o,{orderBy:"child",childKey:"status",equalTo:"pending"}),n=i.onChildAddedQuery(r,(a,l)=>{if(!a||this.seenRequestIds.has(a))return;let d={...l,id:a};this.seenRequestIds.add(a),e(a,d)});return this.firebaseUnsubscribers["pending-requests"]=n,()=>{n?.(),delete this.firebaseUnsubscribers["pending-requests"]}}subscribeRequestChanges(e){let{api:t,callsPath:i}=this.getFirebase();this.firebaseUnsubscribers["request-changes"]?.();let o=t.onChildChanged(i,(r,n)=>{if(!r)return;let a=JSON.stringify(n);this.lastSnapshotById.get(r)!==a&&(this.lastSnapshotById.set(r,a),e(r,{...n,id:r}))});return this.firebaseUnsubscribers["request-changes"]=o,()=>{o?.(),delete this.firebaseUnsubscribers["request-changes"]}}async tryAcceptRequest(e){let{api:t,callsPath:i}=this.getFirebase(),o=`${i}/${e}`;return await t.transaction(o,n=>n&&(n.status==="pending"?{...n,status:"accepted"}:n)),(await t.getOnce(o))?.status==="accepted"}onRoomSync(e,t){let{api:i}=this.getFirebase(),o=`orgs/${this.organizationId}/rooms/${e}/sync`;return i.onValue(o,(r,n)=>{t(n)})}async clearRoomSync(e,t){let{api:i}=this.getFirebase(),o=`orgs/${this.organizationId}/rooms/${e}/sync`;await i.write(o,{needsSync:!1,reason:t||null,timestamp:Date.now()})}onNewRoomRequest(e,t){let{api:i}=this.getFirebase(),o=`orgs/${this.organizationId}/rooms/${e}/call`;return i.onValue(o,(r,n)=>{t(n)})}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()}};var C=class{constructor(e,t,i,o){this.muted=!1;this.enabled=!0;this.attachedElements=new Set;this.kind=e,this.source=t,this.sid=g("TR"),this.mediaStreamTrack=i,this.mediaCleanup=o}get mediaTrack(){return this.mediaStreamTrack}attach(e){let t=e||document.createElement(this.kind==="video"?"video":"audio");if(this.mediaStreamTrack){let i=new MediaStream([this.mediaStreamTrack]);t.srcObject=i,t.autoplay=!0,this.kind==="video"&&(t.playsInline=!0,t.muted=!0)}return this.attachedElements.add(t),t}detach(e){if(e)return e.srcObject=null,this.attachedElements.delete(e),[e];let t=Array.from(this.attachedElements);for(let i of t)i.srcObject=null;return this.attachedElements.clear(),t}stop(){this.detach(),this.mediaCleanup&&this.mediaCleanup(),this.mediaStreamTrack&&this.mediaStreamTrack.stop(),this.enabled=!1}setMuted(e){this.muted=e,this.mediaStreamTrack&&(this.mediaStreamTrack.enabled=!e)}setEnabled(e){this.enabled=e,this.mediaStreamTrack&&(this.mediaStreamTrack.enabled=e)}},_=class{constructor(e,t){this.subscribed=!0;this.isEnabled=!0;this.track=e,this.trackSid=e.sid,this.trackName=t||`${e.kind}_${e.source}`,this.source=e.source,this.kind=e.kind}get isMuted(){return this.track?.muted??!1}get isSubscribed(){return this.subscribed&&this.track!==null}setSubscribed(e){this.subscribed=e}setEnabled(e){this.isEnabled=e,this.track&&(this.track.enabled=e)}setMuted(e){this.track&&this.track.setMuted(e)}};var Y=class{constructor(e){this.identity="";this.sid="";this.name="";this.attributes={};this.kind="standard";this.trackPublications=new Map;this.audioTrackPublications=new Map;this.videoTrackPublications=new Map;this._cameraEnabled=!1;this._microphoneEnabled=!1;this._screenShareEnabled=!1;this.room=e,this.sid=g("PA"),this.joinedAt=new Date}get isCameraEnabled(){return this._cameraEnabled}get isMicrophoneEnabled(){return this._microphoneEnabled}get isScreenShareEnabled(){return this._screenShareEnabled}getTrackPublications(){return Array.from(this.trackPublications.values())}getTrackPublication(e){let i={camera:"camera",Camera:"camera",microphone:"microphone",Microphone:"microphone",screen_share:"screen_share",ScreenShare:"screen_share",screen_share_audio:"screen_share_audio",ScreenShareAudio:"screen_share_audio"}[e]||e;return this.trackPublications.get(i)}getTrackPublicationBySid(e){for(let t of this.trackPublications.values())if(t.trackSid===e)return t}setAttributes(e){this.attributes={...this.attributes,...e}}async setCameraEnabled(e,t){if(this._cameraEnabled=e,e){let{createSyntheticVideoTrack:o}=await Promise.resolve().then(()=>(re(),xe)),{track:r,cleanup:n}=o({animation:"avatar",label:this.name||"Local Camera"}),a=new C("video","camera",r,n),l=new _(a,t?.name);return this.trackPublications.set("camera",l),this.videoTrackPublications.set(a.sid,l),this.room.emit("localTrackPublished",l,this),l}let i=this.trackPublications.get("camera");i&&(i.track?.stop(),this.trackPublications.delete("camera"),this.videoTrackPublications.delete(i.trackSid),this.room.emit("localTrackUnpublished",i,this))}async setMicrophoneEnabled(e,t){if(this._microphoneEnabled=e,e){let{createSyntheticAudioTrack:o}=await Promise.resolve().then(()=>(re(),xe)),{track:r,cleanup:n}=o({enabled:!1}),a=new C("audio","microphone",r,n),l=new _(a,t?.name);return this.trackPublications.set("microphone",l),this.audioTrackPublications.set(a.sid,l),this.room.emit("localTrackPublished",l,this),l}let i=this.trackPublications.get("microphone");i&&(i.track?.stop(),this.trackPublications.delete("microphone"),this.audioTrackPublications.delete(i.trackSid),this.room.emit("localTrackUnpublished",i,this))}async setScreenShareEnabled(e,t){if(this._screenShareEnabled=e,e){let{createSyntheticVideoTrack:o}=await Promise.resolve().then(()=>(re(),xe)),{track:r,cleanup:n}=o({animation:"bars",label:"Screen Share",width:1920,height:1080}),a=new C("video","screen_share",r,n),l=new _(a,t?.name||"screen");return this.trackPublications.set("screen_share",l),this.videoTrackPublications.set(a.sid,l),this.room.emit("localTrackPublished",l,this),l}let i=this.trackPublications.get("screen_share");i&&(i.track?.stop(),this.trackPublications.delete("screen_share"),this.videoTrackPublications.delete(i.trackSid),this.room.emit("localTrackUnpublished",i,this))}async publishTrack(e,t){let i=new _(e,t?.name),o=t?.source||e.source;return this.trackPublications.set(o,i),e.kind==="audio"?this.audioTrackPublications.set(e.sid,i):e.kind==="video"&&this.videoTrackPublications.set(e.sid,i),this.room.emit("localTrackPublished",i,this),i}async unpublishTrack(e){e.stop();for(let[t,i]of this.trackPublications)if(i.track===e){this.trackPublications.delete(t),e.kind==="audio"?this.audioTrackPublications.delete(e.sid):e.kind==="video"&&this.videoTrackPublications.delete(e.sid),this.room.emit("localTrackUnpublished",i,this);break}}async sendText(e,t){return{id:g("msg")}}async publishData(e,t){}async setMetadata(e){this.attributes.metadata=e}async setName(e){this.name=e}cleanup(){for(let e of this.trackPublications.values())e.track?.stop();this.trackPublications.clear(),this.audioTrackPublications.clear(),this.videoTrackPublications.clear(),this._cameraEnabled=!1,this._microphoneEnabled=!1,this._screenShareEnabled=!1}};function Fi(s){switch(s){case"standard":return 0;case"ingress":return 1;case"egress":return 2;case"sip":return 3;case"agent":return 4;default:return 0}}var L=class{constructor(e,t,i={},o="standard"){this.connectionQuality="excellent";this.isSpeaking=!1;this.audioLevel=0;this.trackPublications=new Map;this.identity=e,this.sid=g("PA"),this.name=t,this.attributes=i,this._kindString=o,this.kind=Fi(o),this.joinedAt=new Date}get isAgent(){return this.kind===4||this.attributes["lk.agent.name"]!==void 0}get kindString(){return this._kindString}get isCameraEnabled(){let e=this.getTrackPublication("camera");return!!(e?.track&&!e.isMuted)}get isMicrophoneEnabled(){let e=this.getTrackPublication("microphone");return!!(e?.track&&!e.isMuted)}getTrackPublication(e){for(let t of this.trackPublications.values())if(t.source===e)return t}getTrackPublicationBySid(e){return this.trackPublications.get(e)}getTrackPublications(){return Array.from(this.trackPublications.values())}getAudioTracks(){return this.getTrackPublications().filter(e=>e.kind==="audio")}getVideoTracks(){return this.getTrackPublications().filter(e=>e.kind==="video")}addTrackPublication(e){this.trackPublications.set(e.trackSid,e)}removeTrackPublication(e){let t=this.trackPublications.get(e);return t&&(this.trackPublications.delete(e),t.track?.stop()),t}setAttributes(e){this.attributes={...this.attributes,...e}}getAttribute(e){return this.attributes[e]}startSpeaking(e=.5){this.isSpeaking=!0,this.audioLevel=e}stopSpeaking(){this.isSpeaking=!1,this.audioLevel=0}setConnectionQuality(e){this.connectionQuality=e}cleanup(){for(let e of this.trackPublications.values())e.track?.stop();this.trackPublications.clear()}};var D=class{constructor(e){this.remoteParticipants=new Map;this._state="disconnected";this.eventHandlers=new Map;this.textStreamHandlers=new Map;this.rpcHandlers=new Map;this.mockService=e,this.localParticipant=new Y(this),this.sid=g("RM")}get state(){return this._state}set state(e){let t=this._state;this._state=e,t!==e&&this.emit("connectionStateChanged",e,t)}get numParticipants(){return this.remoteParticipants.size+1}get isConnected(){return this._state==="connected"}async connect(e,t){this._state="connecting",this.emit("connectionStateChanged","connecting","disconnected"),await this.mockService.simulateLatency(),this._state="connected",this.connectedAt=new Date().toISOString(),this.emit("connectionStateChanged","connected","connecting"),this.emit("connected")}async disconnect(){for(let t of this.remoteParticipants.values())t.cleanup();this.remoteParticipants.clear(),this.localParticipant.cleanup();let e=this._state;this._state="disconnected",this.emit("connectionStateChanged","disconnected",e),this.emit("disconnected"),this.eventHandlers.clear()}async reconnect(){this._state="reconnecting",this.emit("connectionStateChanged","reconnecting","connected"),await this.mockService.simulateLatency(),this._state="connected",this.emit("connectionStateChanged","connected","reconnecting"),this.emit("reconnected")}on(e,t){return this.eventHandlers.has(e)||this.eventHandlers.set(e,new Set),this.eventHandlers.get(e).add(t),this}once(e,t){let i=(...o)=>{this.off(e,i),t(...o)};return this.on(e,i)}off(e,t){return this.eventHandlers.get(e)?.delete(t),this}removeAllListeners(){this.eventHandlers.clear()}emit(e,...t){let i=this.eventHandlers.get(e);if(i)for(let o of i)try{o(...t)}catch(r){console.error(`Error in mock room event handler for ${e}:`,r)}}registerRpcMethod(e,t){this.rpcHandlers.set(e,t)}unregisterRpcMethod(e){this.rpcHandlers.delete(e)}async callRpc(e,t,i,o=1e4){let r=this.rpcHandlers.get(e);if(!r)throw new Error(`RPC method not found: ${e}`);return r({callerIdentity:t,payload:i,responseTimeout:o})}registerTextStreamHandler(e,t){this.textStreamHandlers.set(e,t)}unregisterTextStreamHandler(e){this.textStreamHandlers.delete(e)}simulateTextStream(e,t){let i=this.textStreamHandlers.get(e);i&&i(t,{identity:t.participantIdentity})}getParticipantByIdentity(e){return e===this.localParticipant.identity?new L(this.localParticipant.identity,this.localParticipant.name,this.localParticipant.attributes):this.remoteParticipants.get(e)}getParticipantBySid(e){if(e===this.localParticipant.sid)return new L(this.localParticipant.identity,this.localParticipant.name,this.localParticipant.attributes);for(let t of this.remoteParticipants.values())if(t.sid===e)return t}async simulateParticipantJoin(e,t){let i=new L(e,t?.name,t?.attributes||{},t?.kind||"standard");return this.remoteParticipants.set(e,i),this.emit("participantConnected",i),t?.withCamera&&await this.simulateRemoteTrack(e,"video","camera"),t?.withMicrophone&&await this.simulateRemoteTrack(e,"audio","microphone"),i}simulateParticipantLeave(e){let t=this.remoteParticipants.get(e);if(t){for(let i of t.getTrackPublications())i.track?.stop(),this.emit("trackUnsubscribed",i.track,i,t);this.remoteParticipants.delete(e),this.emit("participantDisconnected",t)}}async simulateRemoteTrack(e,t,i){let o=this.remoteParticipants.get(e);if(!o)return;let r,n;if(t==="video"){let{createSyntheticVideoTrack:d}=await Promise.resolve().then(()=>(re(),xe)),m=d({animation:o.isAgent?"avatar":"pulse",label:o.name||e,foregroundColor:o.isAgent?"#22c55e":"#4361ee"});r=m.track,n=m.cleanup}else if(t==="audio"){let{createSyntheticAudioTrack:d}=await Promise.resolve().then(()=>(re(),xe)),m=d({enabled:!1});r=m.track,n=m.cleanup}let a=new C(t,i,r,n),l=new _(a);return o.addTrackPublication(l),this.emit("trackSubscribed",a,l,o),this.emit("trackPublished",l,o),a}simulateTrackUnpublished(e,t){let i=this.remoteParticipants.get(e);if(!i)return;let o=i.getTrackPublication(t);o&&(i.removeTrackPublication(o.trackSid),this.emit("trackUnpublished",o,i),this.emit("trackUnsubscribed",o.track,o,i))}async simulateAgentJoin(e,t="AI Agent"){return this.simulateParticipantJoin(e,{name:t,kind:"agent",withCamera:!0,withMicrophone:!0,attributes:{"lk.agent.name":t,"lk.agent.state":"active"}})}simulateAttributeChange(e,t){let i=this.remoteParticipants.get(e);if(i){let o={...i.attributes};i.setAttributes(t),this.emit("participantAttributesChanged",t,o,i)}}simulateTrackMuted(e,t,i){let o=this.remoteParticipants.get(e);if(!o)return;let r=o.getTrackPublication(t);r?.track&&(r.track.setMuted(i),this.emit(i?"trackMuted":"trackUnmuted",r,o))}simulateActiveSpeakersChanged(e){let t=[];for(let i of e){let o=this.remoteParticipants.get(i);o&&(o.startSpeaking(),t.push(o))}this.emit("activeSpeakersChanged",t)}simulateDataReceived(e,t,i,o){let r=this.remoteParticipants.get(t);this.emit("dataReceived",e,r,i,o)}};var ne=class{constructor(e={}){this.rooms=new Map;this.participants=new Map;this.tracks=new Map;this.agents=new Map;this.messages=new Map;this.config=e,this.randomState=e.seed??Date.now()}updateConfig(e){this.config={...this.config,...e},e.seed!==void 0&&(this.randomState=e.seed)}getConfig(){return{...this.config}}random(){return this.randomState=(this.randomState*1103515245+12345)%2147483648,this.randomState/2147483648}createRoom(e,t,i){let o=g("room"),r=new Date().toISOString(),n={id:o,name:e,groupId:t||g("group"),createdAt:r,metadata:i,isActive:!0,participantIds:[],connectionState:"disconnected",wsURL:ie(o),token:E(o,"pending",r)};return this.rooms.set(o,n),this.messages.set(o,[]),n}getRoom(e){return this.rooms.get(e)}getRoomByName(e){for(let t of this.rooms.values())if(t.name===e)return t}listRooms(e=!1){let t=Array.from(this.rooms.values());return e?t.filter(i=>i.isActive):t}updateRoomConnectionState(e,t){let i=this.rooms.get(e);if(!i)return;let o=i.connectionState;return i.connectionState=t,o}endRoom(e){let t=this.rooms.get(e);if(!t||!t.isActive)return!1;t.isActive=!1,t.endedAt=new Date().toISOString(),t.connectionState="disconnected";for(let i of t.participantIds){let o=this.participants.get(i);o&&(o.isConnected=!1)}for(let i of this.agents.values())i.roomId===e&&i.status==="running"&&(i.status="stopped",i.stoppedAt=new Date().toISOString());return!0}deleteRoom(e){let t=this.rooms.get(e);if(!t)return!1;for(let i of t.participantIds)this.participants.delete(i);for(let[i,o]of this.tracks)o.roomId===e&&this.tracks.delete(i);for(let[i,o]of this.agents)o.roomId===e&&this.agents.delete(i);return this.messages.delete(e),this.rooms.delete(e),!0}addParticipant(e,t,i,o="user",r="standard",n=!1){let a=this.rooms.get(e);if(!a)return this.createError("ROOM_NOT_FOUND",`Room ${e} not found`);if(!a.isActive)return this.createError("ROOM_ENDED",`Room ${e} has ended`);let l=this.participants.get(t);if(l&&l.roomId===e&&l.isConnected)return this.config.strictMode?this.createError("PARTICIPANT_ALREADY_JOINED",`Participant ${t} is already in room ${e}`):l;let d={identity:t,name:i||t,roomId:e,joinedAt:new Date().toISOString(),isConnected:!0,trackIds:[],role:o,attributes:{},kind:r,isLocal:n};return this.participants.set(t,d),a.participantIds.push(t),d}getParticipant(e){return this.participants.get(e)}listParticipants(e,t=!0){let i=this.rooms.get(e);if(!i)return[];let o=[];for(let r of i.participantIds){let n=this.participants.get(r);n&&(!t||n.isConnected)&&o.push(n)}return o}updateParticipantAttributes(e,t){let i=this.participants.get(e);if(!i)return;let o={...i.attributes};return i.attributes={...i.attributes,...t},o}removeParticipant(e){let t=this.participants.get(e);if(!t)return;t.isConnected=!1;for(let o of t.trackIds)this.tracks.delete(o);t.trackIds=[];let i=this.rooms.get(t.roomId);if(i){let o=i.participantIds.indexOf(e);o!==-1&&i.participantIds.splice(o,1)}return t}publishTrack(e,t,i="unknown",o){let r=this.participants.get(e);if(!r)return this.createError("PARTICIPANT_NOT_FOUND",`Participant ${e} not found`);if(!r.isConnected)return this.createError("INVALID_OPERATION",`Participant ${e} is not connected`);let n=this.rooms.get(r.roomId);if(!n||!n.isActive)return this.createError("ROOM_ENDED","Room is not active");let a=g("track"),l={id:a,kind:t,source:i,participantIdentity:e,roomId:r.roomId,publishedAt:new Date().toISOString(),muted:!1,metadata:o};return this.tracks.set(a,l),r.trackIds.push(a),l}getTrack(e){return this.tracks.get(e)}listTracks(e,t){let i=[];for(let o of this.tracks.values())e&&o.roomId!==e||t&&o.participantIdentity!==t||i.push(o);return i}unpublishTrack(e){let t=this.tracks.get(e);if(!t)return;let i=this.participants.get(t.participantIdentity);if(i){let o=i.trackIds.indexOf(e);o!==-1&&i.trackIds.splice(o,1)}return this.tracks.delete(e),t}setTrackMuted(e,t){let i=this.tracks.get(e);return i?(i.muted=t,!0):!1}startAgent(e,t,i={}){let o=this.rooms.get(e);if(!o)return this.createError("ROOM_NOT_FOUND",`Room ${e} not found`);if(!o.isActive)return this.createError("ROOM_ENDED",`Room ${e} has ended`);let r=g("agent"),n={id:r,roomId:e,name:t,status:"running",startedAt:new Date().toISOString(),config:{responseStrategy:"echo",...i},messageHistory:[]};return this.agents.set(r,n),this.addParticipant(e,`agent_${r}`,t,"agent","agent",!1),n}getAgent(e){return this.agents.get(e)}listAgents(e){let t=[];for(let i of this.agents.values())i.roomId===e&&t.push(i);return t}stopAgent(e){let t=this.agents.get(e);if(t)return t.status="stopped",t.stoppedAt=new Date().toISOString(),this.removeParticipant(`agent_${e}`),t}updateAgentStatus(e,t){let i=this.agents.get(e);return i?(i.status=t,t==="stopped"&&(i.stoppedAt=new Date().toISOString()),!0):!1}addAgentMessage(e,t,i){let o=this.agents.get(e);if(!o)return;let r={id:g("msg"),content:t,role:i,timestamp:new Date().toISOString()};return o.messageHistory.push(r),r}addMessage(e,t,i,o="standard",r){if(!this.rooms.get(e))return this.createError("ROOM_NOT_FOUND",`Room ${e} not found`);let a={id:g("msg"),roomId:e,content:i,participantIdentity:t,createdAt:new Date().toISOString(),type:o,attributes:r},l=this.messages.get(e)||[];return l.push(a),this.messages.set(e,l),a}getMessages(e,t){let i=this.messages.get(e)||[];return t?i.slice(-t):i}createError(e,t,i){return{code:e,message:t,details:i}}isError(e){return typeof e=="object"&&e!==null&&"code"in e&&"message"in e}reset(){this.rooms.clear(),this.participants.clear(),this.tracks.clear(),this.agents.clear(),this.messages.clear(),this.randomState=this.config.seed??Date.now()}getSnapshot(){return{rooms:new Map(this.rooms),participants:new Map(this.participants),tracks:new Map(this.tracks),agents:new Map(this.agents),messages:new Map(this.messages),config:{...this.config},eventHistory:[]}}toJSON(){return{rooms:Object.fromEntries(this.rooms),participants:Object.fromEntries(this.participants),tracks:Object.fromEntries(this.tracks),agents:Object.fromEntries(this.agents),messages:Object.fromEntries(this.messages),config:this.config,eventHistory:[],exportedAt:new Date().toISOString()}}fromJSON(e){this.rooms=new Map(Object.entries(e.rooms)),this.participants=new Map(Object.entries(e.participants)),this.tracks=new Map(Object.entries(e.tracks)),this.agents=new Map(Object.entries(e.agents)),this.messages=new Map(Object.entries(e.messages).map(([t,i])=>[t,i])),this.config=e.config}};var F=class{constructor(e={}){this.messageListeners=new Set;this.typingListeners=new Set;this.callRequestListeners=new Map;this._authToken=null;this._registeredUser=null;this.agents=new Map;this.config={latencyMs:e.latencyMs??0,strictMode:e.strictMode??!1,seed:e.seed,scenario:e.scenario,errorConfig:e.errorConfig,autoEmitEvents:e.autoEmitEvents??!0,organizationId:e.organizationId??"mock_org",apiUrl:e.apiUrl??"https://mock-livekit.local"},this.state=new ne(this.config),this.events=new se,this.room=new D(this),this.config.scenario&&this.applyScenario(this.config.scenario)}get authToken(){return this._authToken}get registeredUser(){return this._registeredUser}getState(){return this.state}getEvents(){return this.events}updateConfig(e){this.config={...this.config,...e},this.state.updateConfig(e)}getConfig(){return{...this.config}}async simulateLatency(){this.config.latencyMs&&this.config.latencyMs>0&&await new Promise(e=>setTimeout(e,this.config.latencyMs))}applyScenario(e){switch(e){case"happy_path":this.config.errorConfig={},this.config.latencyMs=0;break;case"slow_network":this.config.latencyMs=500;break;case"network_unstable":this.config.errorConfig={errorRate:30};break;default:break}}shouldThrowError(){return this.config.errorConfig?.errorRate?this.state.random()*100<this.config.errorConfig.errorRate:!1}ensureRoom(){return this.room||(this.room=new D(this)),this.room}async registerUser(e,t,i,o){if(await this.simulateLatency(),this.config.errorConfig?.unauthorized)throw new b("UNAUTHORIZED","Registration failed");let r={id:g("user"),externalId:e,organizationId:this.config.organizationId,role:"user",token:E("pending",e,new Date().toISOString())};return this._authToken=r.token,this._registeredUser=r,this.room.localParticipant.identity=e,this.room.localParticipant.name=i?.name||e,r}async registerAgent(e,t){if(await this.simulateLatency(),this.config.errorConfig?.unauthorized)throw new b("UNAUTHORIZED","Agent registration failed");let i=E("agent",e,new Date().toISOString());return this._authToken=i,this.room.localParticipant.identity=e,this.room.localParticipant.name=t.name,i}async quickStart(e){return await this.registerUser(e.user.externalId,e.user.secret,{name:e.user.name,email:e.user.email,phone:e.user.phone,avatar:e.user.avatar,userGroupId:e.user.userGroupId},e.user.metadata),this.createRoom({language:e.room.language,timezone:e.room.timezone,affinity:e.room.affinity,metadata:e.room.metadata,disablePersistence:e.room.disablePersistence,contextualEvents:e.room.contextualEvents,userGroupId:e.room.userGroupId??void 0})}async createRoom(e,t={}){if(await this.simulateLatency(),this.config.errorConfig?.networkError||this.shouldThrowError())throw new b("NETWORK_ERROR","Failed to create room");let i=this.state.createRoom(`room_${Date.now()}`,e.affinity?.agentId,e.metadata);this.room.id=i.id,this.room.groupId=i.groupId,this.room.createdAt=i.createdAt,this.room.connectedAt=new Date().toISOString();let o=this.room.localParticipant.identity||"local_user";return this.state.addParticipant(i.id,o,this.room.localParticipant.name,"user","standard",!0),Object.keys(t).length>0&&(this.state.updateParticipantAttributes(o,t),this.room.localParticipant.setAttributes(t)),this.state.updateRoomConnectionState(i.id,"connected"),this.config.autoEmitEvents&&(this.events.emitRoomCreated(i),this.events.emitRoomConnectionStateChanged(i.id,"connected","disconnected")),(e.affinity?.agentId||e.affinity?.agentType)&&await this.startMockAgent(i.id,{type:e.affinity?.agentType,nature:e.affinity?.nature??"ai"}),await this.room.connect(i.wsURL,i.token),this.room}async joinRoom(e,t,i,o){await this.simulateLatency();let r=this.state.getRoom(e);if(!r)throw new O(e);if(!r.isActive)throw new b("ROOM_ENDED",`Room ${e} has ended`);this.room.id=r.id,this.room.groupId=r.groupId,this.room.createdAt=r.createdAt,this.room.connectedAt=new Date().toISOString();let n=this.room.localParticipant.identity||"local_user",a=this.state.addParticipant(e,n,this.room.localParticipant.name,"user","standard",!0);if(z(a))throw oe(a);if(o){let l={};for(let[d,m]of Object.entries(o))l[d]=String(m);this.state.updateParticipantAttributes(n,l)}return this.state.updateRoomConnectionState(e,"connected"),this.config.autoEmitEvents&&(this.events.emitParticipantJoined(e,a),this.events.emitRoomConnectionStateChanged(e,"connected","disconnected")),await this.room.connect(r.wsURL,r.token),this.room}async evaluateRoom(e){await this.simulateLatency();let t=e.roomId||this.room?.id;if(!t)throw new b("ROOM_NOT_FOUND","No room to evaluate");let i=this.state.getRoom(t);if(!i)throw new O(t);i.metadata||(i.metadata={}),i.metadata.evaluation={rating:e.rating,comment:e.comment,evaluatedAt:new Date().toISOString()}}async closeRoom(){await this.simulateLatency(),this.room?.id&&(this.state.endRoom(this.room.id),await this.stopLocalTracks(),this.config.autoEmitEvents&&this.events.emitRoomEnded(this.room.id))}async disconnect(){if(this.room){let e=this.room.id,t=this.room.localParticipant.identity;await this.stopLocalTracks(),this.state.removeParticipant(t),this.config.autoEmitEvents&&e&&this.events.emitParticipantLeft(e,t),this.room.removeAllListeners(),await this.room.disconnect()}}async stopLocalTracks(){let e=this.room?.localParticipant;e&&await Promise.all([e.setCameraEnabled(!1),e.setMicrophoneEnabled(!1),e.setScreenShareEnabled(!1)])}async disconnectAndCloseRoom(){await this.closeRoom(),await this.disconnect()}async readRoom(e){await this.simulateLatency();let t=this.state.getRoom(e);if(!t)throw new O(e);t.metadata||(t.metadata={}),t.metadata.lastReadAt=new Date().toISOString()}async getRooms(e){await this.simulateLatency();let t=this.state.listRooms();e.roomStatus==="active"?t=t.filter(a=>a.isActive):e.roomStatus==="closed"&&(t=t.filter(a=>!a.isActive)),e.ids?.length&&(t=t.filter(a=>e.ids.includes(a.id))),e.groupId&&(t=t.filter(a=>a.groupId===e.groupId));let i=e.offset??0,o=e.limit??20;return{items:t.slice(i,i+o).map(a=>({id:a.id,name:a.name,groupId:a.groupId,organizationId:this.config.organizationId,endedAt:a.endedAt??null,createdAt:a.createdAt,updatedAt:a.createdAt,status:a.isActive?"active":"ended",participants:this.state.listParticipants(a.id).map(l=>({id:l.identity,name:l.name||l.identity,role:l.role,isLocal:l.isLocal})),evaluations:[],_count:{messages:this.state.getMessages(a.id).length,participants:a.participantIds.length}})),count:t.length,limit:o,offset:i}}async sendMessage(e,t){if(await this.simulateLatency(),!this.room?.id)throw new b("INVALID_OPERATION","Not connected to a room");let i=this.state.addMessage(this.room.id,this.room.localParticipant.identity,e,"standard",t);if(z(i))throw oe(i);let o={id:i.id,timestamp:Date.now(),message:e,content:e,createdAt:i.createdAt,from:{identity:this.room.localParticipant.identity,name:this.room.localParticipant.name,id:this.room.localParticipant.identity,role:"user"}};for(let r of this.messageListeners)r([o]);this.config.autoEmitEvents&&this.events.emitMessageSent(this.room.id,i);for(let r of this.agents.values())r.isRunning&&r.roomId===this.room.id&&this.triggerAgentResponse(r,e)}async persistMessage(e){await this.simulateLatency();let t=this.state.addMessage(e.roomId,e.identity||"system",e.content);if(z(t))throw oe(t);return{items:[{id:t.id,timestamp:Date.now(),message:t.content,content:t.content,createdAt:t.createdAt}],count:1,limit:1,offset:0}}async getMessages(e){await this.simulateLatency();let t=e.roomId||this.room?.id;return t?this.state.getMessages(t,e.limit).map(o=>({id:o.id,timestamp:Date.parse(o.createdAt),message:o.content,content:o.content,createdAt:o.createdAt,from:{identity:o.participantIdentity,id:o.participantIdentity,role:"user"}})):[]}async sendMessageReport(e){await this.simulateLatency()}async deleteMessageReport(e){await this.simulateLatency()}async updateMessageReactions(e){await this.simulateLatency()}subscribeMessages(e){return this.messageListeners.add(e),()=>{this.messageListeners.delete(e)}}async sendTypingIndicator(e){if(!this.room?.id)return;let t={type:"typing",isTyping:e,timestamp:Date.now(),participantId:this.room.localParticipant.identity};for(let i of this.typingListeners)i(t);this.config.autoEmitEvents&&this.events.emitTypingIndicator(this.room.id,this.room.localParticipant.identity,e)}subscribeTypingIndicators(e){return this.typingListeners.add(e),()=>this.typingListeners.delete(e)}unsubscribeTypingIndicators(e){this.typingListeners.delete(e)}async sendContextualEvent(e){await this.simulateLatency()}async requestNewRoom(e){await this.simulateLatency();let t=this.state.createRoom(`transfer_${Date.now()}`,void 0,{originRoom:e.originRoom});return{id:t.id,groupId:t.groupId,token:t.token,wsURL:t.wsURL,createdAt:t.createdAt}}async confirmRoomRequest(e){return await this.simulateLatency(),{success:!0,message:"Request confirmed",roomId:e}}async cancelRoomRequest(e){return await this.simulateLatency(),{success:!0,message:"Request cancelled",roomId:e}}async finishCall(){await this.simulateLatency(),this.room?.id&&this.state.endRoom(this.room.id)}isFirebaseEnabled(){return!0}onPresenceChange(e){return()=>{}}onPresenceAgentChange(e,t){return()=>{}}async createCallRequest(e){return await this.simulateLatency(),g("call")}onNewCallRequest(e){return this.callRequestListeners.has("new")||this.callRequestListeners.set("new",new Set),this.callRequestListeners.get("new").add(e),()=>this.callRequestListeners.get("new")?.delete(e)}onCallRequestChange(e){return this.callRequestListeners.has("change")||this.callRequestListeners.set("change",new Set),this.callRequestListeners.get("change").add(e),()=>this.callRequestListeners.get("change")?.delete(e)}onCallRequestRemoved(e){return()=>{}}async acceptCallRequest(e){await this.simulateLatency()}async cancelCallRequest(e){await this.simulateLatency()}async cancelOnDisconnect(e){await this.simulateLatency()}subscribePendingRequests(e,t={}){return()=>{}}subscribeRequestChanges(e){return()=>{}}async tryAcceptRequest(e){return await this.simulateLatency(),!0}onRoomSync(e,t){return()=>{}}async clearRoomSync(e,t){await this.simulateLatency()}onNewRoomRequest(e,t){return()=>{}}unsubscribeAllFirebase(){this.callRequestListeners.clear()}async destroy(){this.unsubscribeAllFirebase(),this.messageListeners.clear(),this.typingListeners.clear(),await this.disconnect(),this.state.reset()}async startMockAgent(e,t){let i=t?.name||"AI Assistant",o=new ge(g("agent"),i,{responseStrategy:t?.responseStrategy||"echo",responseDelayMs:t?.responseDelayMs||100,cannedResponses:t?.cannedResponses||[],type:t?.type,nature:t?.nature});await o.start(e),this.agents.set(o.id,o),this.customAgentHandler&&o.setCustomHandler((d,m)=>this.customAgentHandler(d,m));let r=t?.type,n=Array.isArray(r)?r:[r].filter(Boolean),a=n.includes("video"),l=n.includes("voice");return(a||l)&&this.room.isConnected&&await this.room.simulateParticipantJoin(o.id,{name:i,kind:"agent",withCamera:a,withMicrophone:l||a,attributes:{"lk.agent.name":i,"lk.agent.state":"active",role:"agent"}}),this.config.autoEmitEvents&&this.events.emitAgentStarted(e,{id:o.id,name:o.name,roomId:e,status:"running",config:o.getConfig(),startedAt:new Date().toISOString(),messageHistory:[]}),o.id}async stopMockAgent(e){let t=this.agents.get(e);if(t){let i=t.roomId;await t.stop(),this.agents.delete(e),this.config.autoEmitEvents&&i&&this.events.emitAgentStopped(i,e)}}setAgentResponseHandler(e){this.customAgentHandler=e;for(let t of this.agents.values())t.setCustomHandler((i,o)=>e(i,o))}async triggerAgentResponse(e,t){if(this.config.scenario!=="agent_timeout")try{let i=await e.processMessage(t);if(!i)return;let o=this.state.addMessage(e.roomId,`agent_${e.id}`,i);if(!z(o)){let r={id:o.id,timestamp:Date.now(),message:i,content:i,createdAt:o.createdAt,from:{identity:`agent_${e.id}`,name:e.name,id:e.id,role:"agent"}};for(let n of this.messageListeners)n([r]);this.config.autoEmitEvents&&this.events.emitMessageReceived(e.roomId,o)}}catch(i){console.error("Agent response error:",i)}}simulateCallRequest(e){let t={id:g("call"),guestId:e.guestId||"guest_user",name:e.name||"Guest User",createdAt:new Date().toISOString(),status:e.status||"pending",...e},i=this.callRequestListeners.get("new");if(i)for(let o of i)o(t.id,t)}simulateParticipantJoin(e,t,i="user"){if(!this.room?.id)return;let o=this.state.addParticipant(this.room.id,e,t,i,"standard",!1);!z(o)&&this.config.autoEmitEvents&&this.events.emitParticipantJoined(this.room.id,o)}simulateParticipantLeave(e){if(!this.room?.id)return;this.state.removeParticipant(e)&&this.config.autoEmitEvents&&this.events.emitParticipantLeft(this.room.id,e)}simulateIncomingMessage(e,t){if(!this.room?.id)return;let i=this.state.addMessage(this.room.id,e,t);if(z(i))return;let o={id:i.id,timestamp:Date.now(),message:t,content:t,createdAt:i.createdAt,from:{identity:e,id:e,role:"user"}};for(let r of this.messageListeners)r([o]);this.config.autoEmitEvents&&this.events.emitMessageReceived(this.room.id,i)}async simulateDisconnect(){if(!this.room?.id)return;let e=this.room.state;this.room.state="disconnected",this.config.autoEmitEvents&&this.events.emitRoomConnectionStateChanged(this.room.id,"disconnected",e),this.room.emit("connectionStateChanged","disconnected")}reset(){this.state.reset(),this.events.clearHistory(),this.messageListeners.clear(),this.typingListeners.clear(),this.callRequestListeners.clear(),this.agents.clear(),this._authToken=null,this._registeredUser=null,this.room=new D(this),Re()}seed(e){this.config.seed=e,this.state.updateConfig({seed:e})}setScenario(e){this.config.scenario=e,this.applyScenario(e)}exportState(){return{...this.state.toJSON(),eventHistory:this.events.getHistory()}}getEventHistory(e){return this.events.getHistory(e)}};var tt={},q={MODE:"LIVEKIT_MODE",USE_MOCK:"USE_LIVEKIT_MOCK",MOCK_LATENCY:"MOCK_LIVEKIT_LATENCY_MS",MOCK_STRICT:"MOCK_LIVEKIT_STRICT",MOCK_SCENARIO:"MOCK_LIVEKIT_SCENARIO",MOCK_SEED:"MOCK_LIVEKIT_SEED",API_URL:"LIVEKIT_API_URL",AUTH_URL:"LIVEKIT_AUTH_URL",ORG_ID:"LIVEKIT_ORGANIZATION_ID"};function et(){let s=N(q.MODE);if(s==="mock"||s==="real")return s;let e=N(q.USE_MOCK);return e==="true"||e==="1"||qi()?"mock":"real"}function Ui(){let s={},e=N(q.MOCK_LATENCY);e&&(s.latencyMs=parseInt(e,10));let t=N(q.MOCK_STRICT);(t==="true"||t==="1")&&(s.strictMode=!0);let i=N(q.MOCK_SCENARIO);i&&(s.scenario=i);let o=N(q.MOCK_SEED);return o&&(s.seed=parseInt(o,10)),s}function $i(){let s={},e=N(q.API_URL);e&&(s.apiUrl=e);let t=N(q.AUTH_URL);t&&(s.authUrl=t);let i=N(q.ORG_ID);return i&&(s.organizationId=i),s}function N(s){if(typeof process<"u"&&process.env)return process.env[s];if(typeof tt<"u"&&tt.env)return tt.env[`VITE_${s}`]||tt.env[s];if(typeof window<"u"&&window.__ENV__)return window.__ENV__[s]}function qi(){return!!(typeof process<"u"&&process.env&&(process.env.NODE_ENV==="test"||process.env.VITEST||process.env.JEST_WORKER_ID)||typeof globalThis.__vitest_index__<"u")}var H=class s{static create(e){if((e.mode??et())==="mock"){let i={...Ui(),...e.mockConfig,organizationId:e.organizationId,apiUrl:e.apiUrl};return new F(i)}if(!e.organizationId||!e.apiUrl)throw new Error("ConversationService requires organizationId and apiUrl. Provide them in options or set LIVEKIT_ORGANIZATION_ID and LIVEKIT_API_URL environment variables.");return new Xe(e)}static createFromEnv(e){let t=e?.mode??et(),i=$i();return s.create({...i,...e,mode:t})}static createMock(e){return new F({organizationId:"mock_org",apiUrl:"https://mock-livekit.local",...e})}static createDeterministicMock(e=12345){return new F({organizationId:"mock_org",apiUrl:"https://mock-livekit.local",seed:e,strictMode:!0})}static getCurrentMode(){return et()}static isMockMode(){return et()==="mock"}static isMockService(e){return e instanceof F}};function Mt(s){return H.createFromEnv(s)}function Le(s){return H.createMock(s)}function De(s){let e=s?.id??g("room"),t=new Date().toISOString();return{id:e,name:`Test Room ${e}`,groupId:g("group"),createdAt:t,isActive:!0,participantIds:[],connectionState:"connected",wsURL:ie(e),token:E(e,"local_user",t),...s}}function Fe(s="local_user",e){let t=De(e);t.participantIds.push(s);let i={identity:s,name:"Local User",roomId:t.id,joinedAt:new Date().toISOString(),isConnected:!0,trackIds:[],role:"user",attributes:{},kind:"standard",isLocal:!0};return{room:t,localParticipant:i}}function it(s){let e=De(s),t=new Date().toISOString(),i={identity:"user_1",name:"User One",roomId:e.id,joinedAt:t,isConnected:!0,trackIds:[],role:"user",attributes:{},kind:"standard",isLocal:!0},o={identity:"user_2",name:"User Two",roomId:e.id,joinedAt:t,isConnected:!0,trackIds:[],role:"user",attributes:{},kind:"standard",isLocal:!1};return e.participantIds.push(i.identity,o.identity),{room:e,participant1:i,participant2:o}}function Ue(s,e){let{room:t,localParticipant:i}=Fe("local_user",e),o=new Date().toISOString(),r=g("agent"),n={id:r,roomId:t.id,name:"AI Assistant",status:"running",startedAt:o,config:{responseStrategy:"echo",nature:"ai",...s},messageHistory:[]},a={identity:`agent_${r}`,name:"AI Assistant",roomId:t.id,joinedAt:o,isConnected:!0,trackIds:[],role:"agent",attributes:{},kind:"agent",isLocal:!1};return t.participantIds.push(a.identity),{room:t,localParticipant:i,agent:n,agentParticipant:a}}function xt(s){let{room:e,localParticipant:t,agent:i,agentParticipant:o}=Ue(void 0,s),r={id:g("track"),kind:"data",source:"unknown",participantIdentity:o.identity,roomId:e.id,publishedAt:new Date().toISOString(),muted:!1};return o.trackIds.push(r.id),{room:e,localParticipant:t,agent:i,dataTrack:r}}function _t(s){let{room:e,localParticipant:t}=Fe("local_user",s),i=new Date().toISOString(),o={id:g("track"),kind:"audio",source:"microphone",participantIdentity:t.identity,roomId:e.id,publishedAt:i,muted:!1},r={id:g("track"),kind:"video",source:"camera",participantIdentity:t.identity,roomId:e.id,publishedAt:i,muted:!1};return t.trackIds.push(o.id,r.id),{room:e,participant:t,audioTrack:o,videoTrack:r}}function ot(s,e){let t=e?.identity??g("participant");return{identity:t,name:`Participant ${t}`,roomId:s,joinedAt:new Date().toISOString(),isConnected:!0,trackIds:[],role:"user",attributes:{},kind:"standard",isLocal:!1,...e}}function At(s,e){let t=[];for(let i=0;i<e;i++)t.push(ot(s,{identity:`participant_${i+1}`,name:`Participant ${i+1}`,isLocal:i===0}));return t}function $e(s,e){return{id:e?.id??g("agent"),roomId:s,name:"AI Assistant",status:"running",startedAt:new Date().toISOString(),config:{responseStrategy:"echo",nature:"ai",...e?.config},messageHistory:[],...e}}function Ct(s,e){return $e(s,{config:{responseStrategy:"canned",cannedResponses:e}})}function Tt(s,e){return $e(s,{config:{responseStrategy:"sequential",cannedResponses:e}})}function Pt(s,e,t){return{id:g("msg"),roomId:s,content:"Test message",participantIdentity:e,createdAt:new Date().toISOString(),type:"standard",...t}}function st(s,e){return e.map((t,i)=>({id:g("msg"),roomId:s,content:t.content,participantIdentity:t.identity,createdAt:new Date(Date.now()+i*1e3).toISOString(),type:"standard"}))}function _e(s){return{latencyMs:0,strictMode:!1,autoEmitEvents:!0,organizationId:"test_org",apiUrl:"https://mock-api.local",...s}}function Rt(s){return _e({strictMode:!0,...s})}function It(s,e){return _e({latencyMs:s,...e})}function Et(s,e){return _e({seed:s,...e})}function Ot(){let{room:s,localParticipant:e,agent:t,agentParticipant:i}=Ue(),o=st(s.id,[{identity:e.identity,content:"Hello, I need help"},{identity:i.identity,content:"Hi! How can I assist you today?"},{identity:e.identity,content:"I have a question about my order"},{identity:i.identity,content:"Of course! Please provide your order number."}]);return{room:s,user:e,agent:t,agentParticipant:i,messages:o}}function zt(){let{room:s,participant1:e,participant2:t}=it(),i=new Date().toISOString(),o=[{id:g("track"),kind:"audio",source:"microphone",participantIdentity:e.identity,roomId:s.id,publishedAt:i,muted:!1},{id:g("track"),kind:"video",source:"camera",participantIdentity:e.identity,roomId:s.id,publishedAt:i,muted:!1},{id:g("track"),kind:"audio",source:"microphone",participantIdentity:t.identity,roomId:s.id,publishedAt:i,muted:!1},{id:g("track"),kind:"video",source:"camera",participantIdentity:t.identity,roomId:s.id,publishedAt:i,muted:!1}];return e.trackIds.push(o[0].id,o[1].id),t.trackIds.push(o[2].id,o[3].id),{room:s,participant1:e,participant2:t,tracks:o}}var Ae=class{constructor(e,t,i,o,r){this.index=0;this._complete=!1;this.info={id:e,attributes:o,topic:r,timestamp:Date.now()},this.participantIdentity=t,this.topic=r,this.chunks=Array.isArray(i)?i:[i],this.info.totalSize=this.chunks.reduce((n,a)=>n+a.length,0)}get isComplete(){return this._complete}async*[Symbol.asyncIterator](){for(let e of this.chunks)yield e;this._complete=!0}async read(){return this.index>=this.chunks.length?(this._complete=!0,null):this.chunks[this.index++]}async readAll(){let e=this.chunks.slice(this.index).join("");return this.index=this.chunks.length,this._complete=!0,e}cancel(){this._complete=!0}};re();var Q=null;function y(s){return Q||(Q=Le({organizationId:"storybook_org",apiUrl:"https://storybook.mock",latencyMs:50,autoEmitEvents:!0,...s})),Q}function rt(){Q&&Q.reset()}async function Lt(){Q&&(await Q.destroy(),Q=null)}function Dt(s={}){return(e,t)=>{rt();let i={default:void 0,slow_network:"slow_network",unreliable:"unreliable",agent_timeout:"agent_timeout"},o=y({organizationId:s.organizationId,latencyMs:s.latencyMs??50,scenario:s.scenario?i[s.scenario]:void 0});return(async()=>{try{if(s.autoRegisterUser&&await o.registerUser(s.autoRegisterUser.identity,s.autoRegisterUser.secret||"storybook_secret",{name:s.autoRegisterUser.name||"Storybook User"}),s.autoCreateRoom){if(await o.createRoom({language:s.autoCreateRoom.language||"en",timezone:s.autoCreateRoom.timezone||"UTC"}),s.seedMessages)for(let r of s.seedMessages)o.simulateIncomingMessage(r.from,r.content);s.autoStartAgent&&o.room?.id&&await o.startMockAgent(o.room.id,s.autoStartAgent)}}catch(r){console.error("[Storybook Mock] Setup error:",r)}})(),window.__mockConversationService=o,e()}}function Ft(s){return H.isMockService(s)}var Ut={basicChat:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},autoStartAgent:{responseStrategy:"echo"}},aiAssistant:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},autoStartAgent:{responseStrategy:"canned",cannedResponses:["Hello! How can I help you today?","I understand. Let me look into that for you.","Is there anything else you'd like to know?","Thank you for your patience!"]}},videoCall:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},autoStartAgent:{responseStrategy:"canned",type:["text","video"],nature:"ai",name:"Video Agent",cannedResponses:["I can see you! The video quality looks great.","Let me share my screen to show you what I mean.","Is the audio coming through clearly?"]},simulateVideo:!0},multiParticipantCall:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},autoStartAgent:{responseStrategy:"echo",type:["text","video"],name:"Video Agent"},simulateVideo:!0},multiTurnConversation:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},autoStartAgent:{responseStrategy:"sequential",cannedResponses:["Welcome! I'm your virtual assistant.","I can help you with product information, orders, and support.","What would you like to know?"]},seedMessages:[{from:"agent",content:"Welcome! I'm your virtual assistant."}]},slowNetwork:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},autoStartAgent:{responseStrategy:"echo",responseDelayMs:2e3},latencyMs:500,scenario:"slow_network"},unreliable:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},scenario:"unreliable"}};function $t(s){return()=>y(s)}var nt={async receiveMessage(s,e){y().simulateIncomingMessage(s,e)},simulateJoin(s,e){y().simulateParticipantJoin(s,e)},simulateLeave(s){y().simulateParticipantLeave(s)},async simulateVideoParticipant(s,e,t){let o=y().room;o&&await o.simulateParticipantJoin(s,{name:e||s,kind:"standard",withCamera:t?.withCamera??!0,withMicrophone:t?.withMicrophone??!0})},async simulateVideoAgent(s,e){let i=y().room;i&&await i.simulateAgentJoin(s,e||"AI Agent")},async enableLocalCamera(){let e=y().room;e&&await e.localParticipant.setCameraEnabled(!0)},async disableLocalCamera(){let e=y().room;e&&await e.localParticipant.setCameraEnabled(!1)},async enableLocalMicrophone(){let e=y().room;e&&await e.localParticipant.setMicrophoneEnabled(!0)},async simulateMultipleParticipants(s){let e=["Alice","Bob","Carol","David","Eve","Frank","Grace","Henry","Ivy","Jack"],i=y().room;if(i)for(let o=0;o<Math.min(s,e.length);o++)await i.simulateParticipantJoin(`participant_${o+1}`,{name:e[o],kind:"standard",withCamera:!0,withMicrophone:!0}),await new Promise(r=>setTimeout(r,100))},clearParticipants(){let e=y().room;if(e)for(let t of e.remoteParticipants.keys())e.simulateParticipantLeave(t)},simulateCallRequest(s,e){y().simulateCallRequest({name:s,guestId:e||`guest_${Date.now()}`})},async simulateDisconnect(){await y().simulateDisconnect()},getEventHistory(){return y().getEventHistory()},exportState(){return y().exportState()},getRoom(){return y().room}};typeof window<"u"&&(window.MockServiceActions=nt);var at={OpenWidget:"openWidget",InitialStep:"initialStep"};var qt="ol",Mi={Action:"action",Message:"message",StepId:"stepId",InstallationId:"installationId"},Bi=new Set(Object.values(at)),lt=class s{constructor(){this.params=s.parse()}get hasParams(){return Object.keys(this.params).length>0}getParams(){return{...this.params}}matchesInstallation(e){return this.params.installationId?this.params.installationId===e:!0}cleanUrl(){let e=new URL(window.location.href),t=!1;for(let i of Array.from(e.searchParams.keys()))i.startsWith(qt)&&i.substring(qt.length)in Mi&&(e.searchParams.delete(i),t=!0);t&&window.history.replaceState(window.history.state,"",e.toString())}static parse(){let e={},t=new URLSearchParams(window.location.search);for(let[i,o]of Object.entries(Mi)){let r=`${qt}${i}`,n=t.get(r);if(n!==null){if(o==="action"){Bi.has(n)&&(e.action=n);continue}e[o]=n}}return e}};0&&(module.exports={AgentNotFoundError,Asset,ConversationServiceFactory,DeepLinkAction,DeepLinkService,InvalidOperationError,MockConversationService,MockEventEmitter,MockLiveKitError,MockLocalParticipant,MockParticipant,MockRoom,MockServiceActions,MockState,MockTextStreamReader,MockTrack,MockTrackPublication,NetworkError,OSBAsset,OSBSideBar,OSBUpload,ParticipantAlreadyJoinedError,ParticipantNotFoundError,RoomEndedError,RoomNotFoundError,SYNTHETIC_MEDIA_PRESETS,SideBar,StorybookScenarios,TimeoutError,TrackNotFoundError,UnauthorizedError,Upload,createAgentFixture,createAgentWithCannedResponses,createChatScenario,createConversationFixture,createConversationService,createDefaultConfig,createDefaultRoomFixture,createDeterministicConfig,createErrorFromMockError,createLatencyConfig,createMessageFixture,createMockConversationService,createMockServiceFactory,createParticipantBatch,createParticipantFixture,createRoomWithAgent,createRoomWithAgentAndDataTrack,createRoomWithLocalParticipant,createRoomWithMediaTracks,createRoomWithTwoParticipants,createSequentialAgent,createStrictConfig,createSyntheticAudioTrack,createSyntheticMedia,createSyntheticMediaFromPreset,createSyntheticVideoTrack,createVideoCallScenario,decodeMockToken,destroyStorybookMockService,generateMockApiResponseId,generateMockExternalId,generateMockId,generateMockIdBatch,generateMockMessageId,generateMockParticipantIdentity,generateMockRoomName,generateMockToken,generateMockTrackSid,generateMockWsUrl,generateSeededMockId,getStorybookMockService,isMockConversationService,isMockError,isMockLiveKitError,resetIdCounter,resetStorybookMockService,setIdCounter,withMockConversationService});
4677
+ `}};f.styles=[li],v([(0,w.property)({type:Object})],f.prototype,"config",2),v([(0,w.property)({type:Object})],f.prototype,"searchConfig",2),v([(0,w.property)({type:String})],f.prototype,"selectedCategory",2),v([(0,w.property)({type:Boolean})],f.prototype,"disabled",2),v([(0,w.state)()],f.prototype,"multimediaService",2),v([(0,w.state)()],f.prototype,"productService",2),v([(0,w.state)()],f.prototype,"faqsService",2),v([(0,w.state)()],f.prototype,"fileService",2),v([(0,w.state)()],f.prototype,"isUploading",2),v([(0,w.state)()],f.prototype,"uploadProgress",2),v([(0,w.state)()],f.prototype,"categoryStates",2),v([(0,w.state)()],f.prototype,"searchTimeout",2),v([(0,w.state)()],f.prototype,"unifiedSearchQuery",2),v([(0,w.state)()],f.prototype,"extraFilters",2),v([(0,w.state)()],f.prototype,"activeFilters",2),v([(0,w.state)()],f.prototype,"loadingFilters",2),f=v([K("osb-side-bar")],f);var ci=require("@lit/react"),di=A(require("react"),1);var pi=(0,ci.createComponent)({tagName:"osb-asset",elementClass:j,react:di.default,events:{onAssetClick:"asset-click",onAssetDownload:"asset-download",onAssetLoad:"asset-load",onAssetError:"asset-error",onContentClick:"content-click"}});var ui=require("@lit/react"),mi=A(require("react"),1);var gi=(0,ui.createComponent)({tagName:"osb-side-bar",elementClass:f,react:mi.default,events:{onSearch:"search",onLoadMore:"load-more",onItemAdd:"item-add",onCategoryChange:"category-change",onItemSelect:"item-select",onFileUpload:"file-uploaded"}});var vi=require("@lit/react"),hi=A(require("react"),1);var fi=(0,vi.createComponent)({tagName:"osb-upload",elementClass:R,react:hi.default,events:{onFileSelected:"osb-file-selected",onUploadError:"osb-upload-error"}});var M=0;function Re(){M=0}function pt(s){M=s}function g(s){return M++,`mock_${s}_${M}_${Date.now().toString(36)}`}function ut(s,e){return`mock_${s}_${e.toString(36)}`}function E(s,e,t){let i=t||new Date().toISOString(),o=typeof btoa=="function"?btoa(i).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""):i.replace(/[^a-zA-Z0-9]/g,"");return`mock_token_${s}_${e}_${o}`}function mt(s){if(!s.startsWith("mock_token_"))return null;let e=s.replace("mock_token_","").split("_");if(e.length<3)return null;let t=e[e.length-1],i=e[e.length-2],o=e.slice(0,-2).join("_");try{let n=t.replace(/-/g,"+").replace(/_/g,"/"),r=typeof atob=="function"?atob(n):t;return{roomId:o,identity:i,timestamp:r}}catch{return null}}function ie(s){return`wss://mock-livekit.local/room/${s}`}function gt(s="participant",e){let t=e??M++;return`${s}_${t}_${Date.now().toString(36)}`}function vt(s="room"){return M++,`${s}_${M}_${Date.now().toString(36)}`}function ht(s,e){return M++,`TR_${s.toUpperCase()}_${e}_${M}`}function ft(){return M++,`msg_${M}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`}function bt(s){return M++,`api_${s}_${M}_${Date.now().toString(36)}`}function yt(){return[Math.random().toString(16).slice(2,10),Math.random().toString(16).slice(2,6),Math.random().toString(16).slice(2,6),Math.random().toString(16).slice(2,6),Math.random().toString(16).slice(2,14)].join("-")}function kt(s,e){let t=[];for(let i=0;i<e;i++)t.push(g(s));return t}var Ke={responseStrategy:"echo",responseDelayMs:100,cannedResponses:[],type:"text",nature:"ai",simulateTyping:!1,typingDelayPerChar:20};function Ge(s,e,t=[],i=0,o=Math.random){switch(s){case"echo":return{response:`Echo: ${e}`,nextIndex:i};case"canned":return{response:t[0]||"Default response",nextIndex:i};case"sequential":return{response:t[i]||"No more responses",nextIndex:(i+1)%Math.max(1,t.length)};case"random":{if(t.length===0)return{response:"Random response",nextIndex:i};let n=Math.floor(o()*t.length);return{response:t[n],nextIndex:i}}case"silent":return{response:"",nextIndex:i};case"error":throw new Error("Agent error");case"custom":return{response:"",nextIndex:i};default:return{response:"Default agent response",nextIndex:i}}}var ge=class{constructor(e,t,i={}){this._state="idle";this.conversationHistory=[];this.responseIndex=0;this.eventListeners=new Set;this.randomFn=Math.random;this.messageCount=0;this.id=e,this.name=t,this.config={...Ke,...i}}get state(){return this._state}get isRunning(){return this._state==="running"}get history(){return[...this.conversationHistory]}getConfig(){return{...this.config}}updateConfig(e){this.config={...this.config,...e}}setStrategy(e){this.config.responseStrategy=e}setCannedResponses(e){this.config.cannedResponses=e,this.responseIndex=0}setCustomHandler(e){this.customHandler=e,this.config.responseStrategy="custom"}setRandomFunction(e){this.randomFn=e}async start(e){this._state!=="running"&&(this._state="starting",this.roomId=e,this.conversationHistory=[],this.responseIndex=0,this.messageCount=0,await this.delay(50),this._state="running",this.emitEvent({type:"started",agentId:this.id}))}async stop(){this._state==="running"&&(this._state="stopping",await this.delay(50),this._state="stopped",this.roomId=void 0,this.emitEvent({type:"stopped",agentId:this.id}))}async processMessage(e){if(this._state!=="running")throw new Error("Agent is not running");if(this.config.maxMessages&&this.messageCount>=this.config.maxMessages)return await this.stop(),"";this.addMessage(e,"user"),this.emitEvent({type:"message_received",agentId:this.id,message:e});let t;try{if(this.config.responseStrategy==="custom"&&this.customHandler)t=await this.customHandler(this.id,e,this.conversationHistory);else{if(this.config.responseStrategy==="silent")return"";if(this.config.responseStrategy==="error"){let i=new Error("Agent error");throw this.emitEvent({type:"error",agentId:this.id,error:i}),i}else{let i=Ge(this.config.responseStrategy,e,this.config.cannedResponses,this.responseIndex,this.randomFn);t=i.response,this.responseIndex=i.nextIndex}}}catch(i){throw this._state="error",i}return this.config.simulateTyping&&this.config.typingDelayPerChar&&await this.delay(t.length*this.config.typingDelayPerChar),this.config.responseDelayMs&&await this.delay(this.config.responseDelayMs),this.addMessage(t,"agent"),this.messageCount++,this.emitEvent({type:"response_sent",agentId:this.id,response:t}),t}addEventListener(e){return this.eventListeners.add(e),()=>this.eventListeners.delete(e)}clearHistory(){this.conversationHistory=[],this.responseIndex=0}reset(){this._state="idle",this.roomId=void 0,this.conversationHistory=[],this.responseIndex=0,this.messageCount=0}toJSON(){return{id:this.id,name:this.name,state:this._state,roomId:this.roomId,config:this.config,historyLength:this.conversationHistory.length,messageCount:this.messageCount}}addMessage(e,t){let i={id:g("msg"),content:e,role:t,timestamp:Date.now()};return this.conversationHistory.push(i),i}emitEvent(e){for(let t of this.eventListeners)try{t(e)}catch(i){console.error("Error in agent event listener:",i)}}delay(e){return new Promise(t=>setTimeout(t,e))}};var b=class s extends Error{constructor(e,t,i){super(t),this.name="MockLiveKitError",this.code=e,this.details=i,typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}toMockError(){return{code:this.code,message:this.message,details:this.details}}static fromMockError(e){return new s(e.code,e.message,e.details)}},O=class extends b{constructor(e){super("ROOM_NOT_FOUND",`Room not found: ${e}`,{roomId:e}),this.name="RoomNotFoundError"}},ve=class extends b{constructor(e){super("ROOM_ENDED",`Room has ended: ${e}`,{roomId:e}),this.name="RoomEndedError"}},he=class extends b{constructor(e,t){super("PARTICIPANT_ALREADY_JOINED",`Participant ${e} is already in room ${t}`,{identity:e,roomId:t}),this.name="ParticipantAlreadyJoinedError"}},fe=class extends b{constructor(e){super("PARTICIPANT_NOT_FOUND",`Participant not found: ${e}`,{identity:e}),this.name="ParticipantNotFoundError"}},be=class extends b{constructor(e){super("TRACK_NOT_FOUND",`Track not found: ${e}`,{trackId:e}),this.name="TrackNotFoundError"}},ye=class extends b{constructor(e){super("AGENT_NOT_FOUND",`Agent not found: ${e}`,{agentId:e}),this.name="AgentNotFoundError"}},ke=class extends b{constructor(e="Unauthorized"){super("UNAUTHORIZED",e),this.name="UnauthorizedError"}},je=class extends b{constructor(e="Network error occurred"){super("NETWORK_ERROR",e),this.name="NetworkError"}},we=class extends b{constructor(e,t){super("INVALID_OPERATION",e,t),this.name="InvalidOperationError"}},Se=class extends b{constructor(e,t){super("TIMEOUT",`Operation timed out: ${e}`,{operation:e,timeoutMs:t}),this.name="TimeoutError"}};function oe(s){switch(s.code){case"ROOM_NOT_FOUND":return new O(s.details?.roomId??"unknown");case"ROOM_ENDED":return new ve(s.details?.roomId??"unknown");case"PARTICIPANT_ALREADY_JOINED":return new he(s.details?.identity??"unknown",s.details?.roomId??"unknown");case"PARTICIPANT_NOT_FOUND":return new fe(s.details?.identity??"unknown");case"TRACK_NOT_FOUND":return new be(s.details?.trackId??"unknown");case"AGENT_NOT_FOUND":return new ye(s.details?.agentId??"unknown");case"UNAUTHORIZED":return new ke(s.message);case"NETWORK_ERROR":return new je(s.message);case"INVALID_OPERATION":return new we(s.message,s.details);case"TIMEOUT":return new Se(s.details?.operation??"unknown",s.details?.timeoutMs??0);default:return b.fromMockError(s)}}function z(s){return typeof s=="object"&&s!==null&&"code"in s&&"message"in s&&typeof s.code=="string"&&typeof s.message=="string"}function jt(s){return s instanceof b}var se=class{constructor(){this.listeners={};this.wildcardListeners=new Set;this.eventHistory=[];this.maxHistorySize=1e3;this.recordHistory=!0}setMaxHistorySize(e){this.maxHistorySize=e,this.trimHistory()}setRecordHistory(e){this.recordHistory=e}on(e,t){return this.listeners[e]||(this.listeners[e]=new Set),this.listeners[e].add(t),()=>{this.off(e,t)}}once(e,t){let i=o=>{this.off(e,i),t(o)};return this.on(e,i)}off(e,t){this.listeners[e]?.delete(t)}onAny(e){return this.wildcardListeners.add(e),()=>{this.wildcardListeners.delete(e)}}offAny(e){this.wildcardListeners.delete(e)}removeAllListeners(e){e?delete this.listeners[e]:(this.listeners={},this.wildcardListeners.clear())}emit(e){this.recordHistory&&(this.eventHistory.push(e),this.trimHistory());let t=this.listeners[e.type];if(t)for(let i of t)try{i(e)}catch(o){console.error(`Error in mock event listener for ${e.type}:`,o)}for(let i of this.wildcardListeners)try{i(e)}catch(o){console.error("Error in mock wildcard event listener:",o)}}trimHistory(){this.eventHistory.length>this.maxHistorySize&&(this.eventHistory=this.eventHistory.slice(-this.maxHistorySize))}emitRoomCreated(e){let t={type:"roomCreated",timestamp:new Date().toISOString(),roomId:e.id,room:e};this.emit(t)}emitRoomEnded(e){let t={type:"roomEnded",timestamp:new Date().toISOString(),roomId:e};this.emit(t)}emitRoomConnectionStateChanged(e,t,i){let o={type:"roomConnectionStateChanged",timestamp:new Date().toISOString(),roomId:e,state:t,previousState:i};this.emit(o)}emitParticipantJoined(e,t){let i={type:"participantJoined",timestamp:new Date().toISOString(),roomId:e,participant:t};this.emit(i)}emitParticipantLeft(e,t){let i={type:"participantLeft",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t};this.emit(i)}emitParticipantAttributesChanged(e,t,i,o){let n={type:"participantAttributesChanged",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t,attributes:i,previousAttributes:o};this.emit(n)}emitTrackPublished(e,t,i){let o={type:"trackPublished",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t,track:i};this.emit(o)}emitTrackUnpublished(e,t,i){let o={type:"trackUnpublished",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t,trackId:i};this.emit(o)}emitTrackMuted(e,t){let i={type:"trackMuted",timestamp:new Date().toISOString(),roomId:e,trackId:t};this.emit(i)}emitTrackUnmuted(e,t){let i={type:"trackUnmuted",timestamp:new Date().toISOString(),roomId:e,trackId:t};this.emit(i)}emitMessageReceived(e,t){let i={type:"messageReceived",timestamp:new Date().toISOString(),roomId:e,message:t};this.emit(i)}emitMessageSent(e,t){let i={type:"messageSent",timestamp:new Date().toISOString(),roomId:e,message:t};this.emit(i)}emitTypingIndicator(e,t,i){let o={type:"typingIndicator",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t,isTyping:i};this.emit(o)}emitAgentStarted(e,t){let i={type:"agentStarted",timestamp:new Date().toISOString(),roomId:e,agent:t};this.emit(i)}emitAgentStopped(e,t){let i={type:"agentStopped",timestamp:new Date().toISOString(),roomId:e,agentId:t};this.emit(i)}emitAgentMessage(e,t,i){let o={type:"agentMessage",timestamp:new Date().toISOString(),roomId:e,agentId:t,message:i};this.emit(o)}emitDataReceived(e,t,i,o){let n={type:"dataReceived",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t,data:i,topic:o};this.emit(n)}emitError(e,t){let i={type:"error",timestamp:new Date().toISOString(),roomId:t,error:e};this.emit(i)}getHistory(e){return e?this.eventHistory.filter(t=>t.type===e):[...this.eventHistory]}getLastEvents(e,t){return(t?this.eventHistory.filter(o=>o.type===t):this.eventHistory).slice(-e)}clearHistory(){this.eventHistory=[]}listenerCount(e){return(this.listeners[e]?.size??0)+this.wildcardListeners.size}};var We=require("@onlive.ai/tracker/session"),Me=require("livekit-client");var bi=require("firebase/app"),p=require("firebase/database"),Ye=class{constructor(e){this.onChildChanged=(e,t)=>(0,p.onChildChanged)(this.ref(e),i=>t(i.key||"",i.val(),i));this.onChildRemoved=(e,t)=>(0,p.onChildRemoved)(this.ref(e),i=>t(i.key||"",i.val(),i));this.onChildChangedQuery=(e,t)=>(0,p.onChildChanged)(e,i=>t(i.key||"",i.val(),i));this.onChildRemovedQuery=(e,t)=>(0,p.onChildRemoved)(e,i=>t(i.key||"",i.val(),i));let t=(0,bi.initializeApp)(e.config);this.db=(0,p.getDatabase)(t)}ref(e){return(0,p.ref)(this.db,e)}async getOnce(e){let t=await(0,p.get)(this.ref(e));return t.exists()?t.val():null}async getOnceQuery(e){let t=await(0,p.get)(e),i=[];return t.exists()&&t.forEach(o=>{i.push({key:o.key||"",value:o.val()})}),i}onValue(e,t){return(0,p.onValue)(this.ref(e),i=>t(i.key??"",i.val(),i),i=>console.error("onValue error",i))}onValueQuery(e,t){return(0,p.onValue)(e,i=>t(i.key??"",i.val(),i),i=>console.error("onValueQuery error",i))}onChildAdded(e,t){return(0,p.onChildAdded)(this.ref(e),i=>t(i.key||"",i.val(),i),i=>console.error("onChildAdded error",i))}onChildAddedQuery(e,t){return(0,p.onChildAdded)(e,i=>t(i.key||"",i.val(),i),i=>console.error("onChildAddedQuery error",i))}write(e,t){return(0,p.set)(this.ref(e),t)}update(e,t){return(0,p.update)(this.ref(e),t)}remove(e){return(0,p.remove)(this.ref(e))}async push(e,t){let i=(0,p.push)(this.ref(e));return await(0,p.set)(i,t),i.key}onDisconnectUpdate(e,t){return(0,p.onDisconnect)(this.ref(e)).update(t)}cancelOnDisconnect(e){return(0,p.onDisconnect)(this.ref(e)).cancel()}transaction(e,t){return(0,p.runTransaction)(this.ref(e),i=>t(i))}query(e,t={}){let i=this.ref(e);return t.orderBy==="child"&&t.childKey&&(i=(0,p.query)(i,(0,p.orderByChild)(t.childKey))),t.orderBy==="key"&&(i=(0,p.query)(i,(0,p.orderByKey)())),t.orderBy==="value"&&(i=(0,p.query)(i,(0,p.orderByValue)())),t.startAt!=null&&(i=(0,p.query)(i,(0,p.startAt)(t.startAt))),t.endAt!=null&&(i=(0,p.query)(i,(0,p.endAt)(t.endAt))),t.equalTo!=null&&(i=(0,p.query)(i,(0,p.equalTo)(t.equalTo))),t.limitFirst!=null&&(i=(0,p.query)(i,(0,p.limitToFirst)(t.limitFirst))),t.limitLast!=null&&(i=(0,p.query)(i,(0,p.limitToLast)(t.limitLast))),i}};var yi=s=>{let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",t="";for(let i=0;i<s;i++)t+=e.charAt(Math.floor(Math.random()*e.length));return t};var ki=require("@onlive.ai/tracker/generator"),x=require("@onlive.ai/tracker/session"),G="chatbot",Qe=class s{static hasSession(){return!!x.Session.getCookie(G)}static getSession(e={role:"guest",regenerate:!1}){e.regenerate&&(x.Session.id=ki.Generator.uuid(),x.Session.deleteCookie(G));let t=x.Session.getCookie(G);return t&&s.isValidSession(t,e.role)?t:s.createSession(e.role)}static createSession(e){let t={externalId:e==="agent"?String(s.getUserId()||x.Session.id):x.Session.id,secret:yi(16),createdAt:new Date().toISOString()};return x.Session.setCookie(G,t,3600*24*365),t}static isValidSession(e,t){if(t==="guest")return!0;let i=s.getUserId();return!!(i&&String(i)===e.externalId)}static getUserId(){return x.Session.getCookie("user-id",{objectKey:"userId",storageKey:"user",storageType:"localStorage",ttl:3600*24*365,preserveData:!0})}static updateSessionWithRegistrationData(e){let t=x.Session.getCookie(G);if(t||(t=s.createSession("guest")),t){let i={...t,registrationData:e};x.Session.setCookie(G,i,3600*24*365)}}static hasRegistrationData(){return!!x.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 x.Session.getCookie(G)?.registrationData}};var ji="lk.chat",wi="lk.transcription",Si="lk.events",wt="typing-indicator";var St=class extends Me.Room{},Xe=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,o=e.info?.attributes?.["lk.segment_id"];o&&(this.transcriptionMap.has(o)?i=this.transcriptionMap.get(o)||"":this.transcriptionMap.set(o,i));let n=t?.identity?this.room.getParticipantByIdentity(t.identity):void 0,r="";for await(let a of e)r+=a,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,o)=>{if(o===wt)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||ji,this.transcriptionTopic=e.transcriptionTopic||wi,this.eventsTopic=e.eventsTopic||Si,this.messagePersistence=e.messagePersistence||"disabled",this.room=this.createRoomInstance(),e.firebaseConfig&&this.initializeFirebase(e.firebaseConfig)}createRoomInstance(){return new St({adaptiveStream:!0,dynacast:!0})}ensureRoom(){return this.room||(this.room=this.createRoomInstance()),this.room}initializeFirebase(e){this.firebaseApi=new Ye({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(Me.RoomEvent.DataReceived,this.handleDataReceived),this.room.registerTextStreamHandler(this.channelTopic,this.handleIncomingMessage),this.room.registerTextStreamHandler(this.transcriptionTopic,this.handleIncomingMessage),this.room.on(Me.RoomEvent.DataReceived,this.handleDataReceived)}async registerUser(e,t,i,o){let n=await h(`${this.apiUrl}/users/register`,{method:"POST",body:JSON.stringify({externalId:e,secret:t,...i,metadata:o}),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=We.Session.getCookie("livekit-agent-token");if(i){if(this.decodeJwtPayload(i)?.username===t.name)return this.authToken=i,i;We.Session.deleteCookie("livekit-agent-token")}let o=await h(`${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 We.Session.setCookie("livekit-agent-token",o.token,1440*60),this.authToken=o.token,o.token}decodeJwtPayload(e){try{let t=e.split(".");if(t.length!==3)return null;let i=t[1],o=atob(i.replace(/-/g,"+").replace(/_/g,"/"));return JSON.parse(o)}catch{return null}}async quickStart(e){console.log("[ConversationService] Starting quickStart with options:",e),this.room=this.ensureRoom();let t=await h(`${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,o=await h(`${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(o),this.setupParticipantAttributesHandler(),this.room.connect(o.wsURL,o.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,o){let n=await h(`${this.apiUrl}/rooms/${e}/join`,{method:"POST",body:JSON.stringify({timezone:t,language:i,...o??{}}),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(Me.RoomEvent.ParticipantAttributesChanged,e=>{e.identity===this.room.localParticipant.identity&&Qe.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 h(`${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 h(`${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 o=i.track;if(o)try{await e.unpublishTrack(o,!0)}catch{o.stop()}}))}async disconnectAndCloseRoom(){await this.closeRoom(),await this.disconnect()}async readRoom(e){return h(`${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()),h(`${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 h(`${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 h(`${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 h(`${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 h(`${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 h(`${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:wt})}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 h(`${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 h(`${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 h(`${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 h(`${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,(o,n)=>e(o,n))}onPresenceAgentChange(e,t){let{api:i}=this.getFirebase();return i.onValue(this.buildAgentPresencePath(e),(o,n)=>t(o,n))}async createCallRequest(e){let{api:t,callsPath:i}=this.getFirebase(),n=(await h(`${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,(o,n)=>e(o,{...n,id:o}))}onCallRequestChange(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildChanged(i,(o,n)=>e(o,{...n,id:o}))}onCallRequestRemoved(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildRemoved(i,o=>e(o))}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 h(`${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:o}=this.getFirebase();t.resetSeen&&this.seenRequestIds.clear(),this.firebaseUnsubscribers["pending-requests"]?.();let n=i.query(o,{orderBy:"child",childKey:"status",equalTo:"pending"}),r=i.onChildAddedQuery(n,(a,l)=>{if(!a||this.seenRequestIds.has(a))return;let d={...l,id:a};this.seenRequestIds.add(a),e(a,d)});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 o=t.onChildChanged(i,(n,r)=>{if(!n)return;let a=JSON.stringify(r);this.lastSnapshotById.get(n)!==a&&(this.lastSnapshotById.set(n,a),e(n,{...r,id:n}))});return this.firebaseUnsubscribers["request-changes"]=o,()=>{o?.(),delete this.firebaseUnsubscribers["request-changes"]}}async tryAcceptRequest(e){let{api:t,callsPath:i}=this.getFirebase(),o=`${i}/${e}`;return await t.transaction(o,r=>r&&(r.status==="pending"?{...r,status:"accepted"}:r)),(await t.getOnce(o))?.status==="accepted"}onRoomSync(e,t){let{api:i}=this.getFirebase(),o=`orgs/${this.organizationId}/rooms/${e}/sync`;return i.onValue(o,(n,r)=>{t(r)})}async clearRoomSync(e,t){let{api:i}=this.getFirebase(),o=`orgs/${this.organizationId}/rooms/${e}/sync`;await i.write(o,{needsSync:!1,reason:t||null,timestamp:Date.now()})}onNewRoomRequest(e,t){let{api:i}=this.getFirebase(),o=`orgs/${this.organizationId}/rooms/${e}/call`;return i.onValue(o,(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()}};var C=class{constructor(e,t,i,o){this.muted=!1;this.enabled=!0;this.attachedElements=new Set;this.kind=e,this.source=t,this.sid=g("TR"),this.mediaStreamTrack=i,this.mediaCleanup=o}get mediaTrack(){return this.mediaStreamTrack}attach(e){let t=e||document.createElement(this.kind==="video"?"video":"audio");if(this.mediaStreamTrack){let i=new MediaStream([this.mediaStreamTrack]);t.srcObject=i,t.autoplay=!0,this.kind==="video"&&(t.playsInline=!0,t.muted=!0)}return this.attachedElements.add(t),t}detach(e){if(e)return e.srcObject=null,this.attachedElements.delete(e),[e];let t=Array.from(this.attachedElements);for(let i of t)i.srcObject=null;return this.attachedElements.clear(),t}stop(){this.detach(),this.mediaCleanup&&this.mediaCleanup(),this.mediaStreamTrack&&this.mediaStreamTrack.stop(),this.enabled=!1}setMuted(e){this.muted=e,this.mediaStreamTrack&&(this.mediaStreamTrack.enabled=!e)}setEnabled(e){this.enabled=e,this.mediaStreamTrack&&(this.mediaStreamTrack.enabled=e)}},_=class{constructor(e,t){this.subscribed=!0;this.isEnabled=!0;this.track=e,this.trackSid=e.sid,this.trackName=t||`${e.kind}_${e.source}`,this.source=e.source,this.kind=e.kind}get isMuted(){return this.track?.muted??!1}get isSubscribed(){return this.subscribed&&this.track!==null}setSubscribed(e){this.subscribed=e}setEnabled(e){this.isEnabled=e,this.track&&(this.track.enabled=e)}setMuted(e){this.track&&this.track.setMuted(e)}};var Y=class{constructor(e){this.identity="";this.sid="";this.name="";this.attributes={};this.kind="standard";this.trackPublications=new Map;this.audioTrackPublications=new Map;this.videoTrackPublications=new Map;this._cameraEnabled=!1;this._microphoneEnabled=!1;this._screenShareEnabled=!1;this.room=e,this.sid=g("PA"),this.joinedAt=new Date}get isCameraEnabled(){return this._cameraEnabled}get isMicrophoneEnabled(){return this._microphoneEnabled}get isScreenShareEnabled(){return this._screenShareEnabled}getTrackPublications(){return Array.from(this.trackPublications.values())}getTrackPublication(e){let i={camera:"camera",Camera:"camera",microphone:"microphone",Microphone:"microphone",screen_share:"screen_share",ScreenShare:"screen_share",screen_share_audio:"screen_share_audio",ScreenShareAudio:"screen_share_audio"}[e]||e;return this.trackPublications.get(i)}getTrackPublicationBySid(e){for(let t of this.trackPublications.values())if(t.trackSid===e)return t}setAttributes(e){this.attributes={...this.attributes,...e}}async setCameraEnabled(e,t){if(this._cameraEnabled=e,e){let{createSyntheticVideoTrack:o}=await Promise.resolve().then(()=>(ne(),xe)),{track:n,cleanup:r}=o({animation:"avatar",label:this.name||"Local Camera"}),a=new C("video","camera",n,r),l=new _(a,t?.name);return this.trackPublications.set("camera",l),this.videoTrackPublications.set(a.sid,l),this.room.emit("localTrackPublished",l,this),l}let i=this.trackPublications.get("camera");i&&(i.track?.stop(),this.trackPublications.delete("camera"),this.videoTrackPublications.delete(i.trackSid),this.room.emit("localTrackUnpublished",i,this))}async setMicrophoneEnabled(e,t){if(this._microphoneEnabled=e,e){let{createSyntheticAudioTrack:o}=await Promise.resolve().then(()=>(ne(),xe)),{track:n,cleanup:r}=o({enabled:!1}),a=new C("audio","microphone",n,r),l=new _(a,t?.name);return this.trackPublications.set("microphone",l),this.audioTrackPublications.set(a.sid,l),this.room.emit("localTrackPublished",l,this),l}let i=this.trackPublications.get("microphone");i&&(i.track?.stop(),this.trackPublications.delete("microphone"),this.audioTrackPublications.delete(i.trackSid),this.room.emit("localTrackUnpublished",i,this))}async setScreenShareEnabled(e,t){if(this._screenShareEnabled=e,e){let{createSyntheticVideoTrack:o}=await Promise.resolve().then(()=>(ne(),xe)),{track:n,cleanup:r}=o({animation:"bars",label:"Screen Share",width:1920,height:1080}),a=new C("video","screen_share",n,r),l=new _(a,t?.name||"screen");return this.trackPublications.set("screen_share",l),this.videoTrackPublications.set(a.sid,l),this.room.emit("localTrackPublished",l,this),l}let i=this.trackPublications.get("screen_share");i&&(i.track?.stop(),this.trackPublications.delete("screen_share"),this.videoTrackPublications.delete(i.trackSid),this.room.emit("localTrackUnpublished",i,this))}async publishTrack(e,t){let i=new _(e,t?.name),o=t?.source||e.source;return this.trackPublications.set(o,i),e.kind==="audio"?this.audioTrackPublications.set(e.sid,i):e.kind==="video"&&this.videoTrackPublications.set(e.sid,i),this.room.emit("localTrackPublished",i,this),i}async unpublishTrack(e){e.stop();for(let[t,i]of this.trackPublications)if(i.track===e){this.trackPublications.delete(t),e.kind==="audio"?this.audioTrackPublications.delete(e.sid):e.kind==="video"&&this.videoTrackPublications.delete(e.sid),this.room.emit("localTrackUnpublished",i,this);break}}async sendText(e,t){return{id:g("msg")}}async publishData(e,t){}async setMetadata(e){this.attributes.metadata=e}async setName(e){this.name=e}cleanup(){for(let e of this.trackPublications.values())e.track?.stop();this.trackPublications.clear(),this.audioTrackPublications.clear(),this.videoTrackPublications.clear(),this._cameraEnabled=!1,this._microphoneEnabled=!1,this._screenShareEnabled=!1}};function Fi(s){switch(s){case"standard":return 0;case"ingress":return 1;case"egress":return 2;case"sip":return 3;case"agent":return 4;default:return 0}}var L=class{constructor(e,t,i={},o="standard"){this.connectionQuality="excellent";this.isSpeaking=!1;this.audioLevel=0;this.trackPublications=new Map;this.identity=e,this.sid=g("PA"),this.name=t,this.attributes=i,this._kindString=o,this.kind=Fi(o),this.joinedAt=new Date}get isAgent(){return this.kind===4||this.attributes["lk.agent.name"]!==void 0}get kindString(){return this._kindString}get isCameraEnabled(){let e=this.getTrackPublication("camera");return!!(e?.track&&!e.isMuted)}get isMicrophoneEnabled(){let e=this.getTrackPublication("microphone");return!!(e?.track&&!e.isMuted)}getTrackPublication(e){for(let t of this.trackPublications.values())if(t.source===e)return t}getTrackPublicationBySid(e){return this.trackPublications.get(e)}getTrackPublications(){return Array.from(this.trackPublications.values())}getAudioTracks(){return this.getTrackPublications().filter(e=>e.kind==="audio")}getVideoTracks(){return this.getTrackPublications().filter(e=>e.kind==="video")}addTrackPublication(e){this.trackPublications.set(e.trackSid,e)}removeTrackPublication(e){let t=this.trackPublications.get(e);return t&&(this.trackPublications.delete(e),t.track?.stop()),t}setAttributes(e){this.attributes={...this.attributes,...e}}getAttribute(e){return this.attributes[e]}startSpeaking(e=.5){this.isSpeaking=!0,this.audioLevel=e}stopSpeaking(){this.isSpeaking=!1,this.audioLevel=0}setConnectionQuality(e){this.connectionQuality=e}cleanup(){for(let e of this.trackPublications.values())e.track?.stop();this.trackPublications.clear()}};var D=class{constructor(e){this.remoteParticipants=new Map;this._state="disconnected";this.eventHandlers=new Map;this.textStreamHandlers=new Map;this.rpcHandlers=new Map;this.mockService=e,this.localParticipant=new Y(this),this.sid=g("RM")}get state(){return this._state}set state(e){let t=this._state;this._state=e,t!==e&&this.emit("connectionStateChanged",e,t)}get numParticipants(){return this.remoteParticipants.size+1}get isConnected(){return this._state==="connected"}async connect(e,t){this._state="connecting",this.emit("connectionStateChanged","connecting","disconnected"),await this.mockService.simulateLatency(),this._state="connected",this.connectedAt=new Date().toISOString(),this.emit("connectionStateChanged","connected","connecting"),this.emit("connected")}async disconnect(){for(let t of this.remoteParticipants.values())t.cleanup();this.remoteParticipants.clear(),this.localParticipant.cleanup();let e=this._state;this._state="disconnected",this.emit("connectionStateChanged","disconnected",e),this.emit("disconnected"),this.eventHandlers.clear()}async reconnect(){this._state="reconnecting",this.emit("connectionStateChanged","reconnecting","connected"),await this.mockService.simulateLatency(),this._state="connected",this.emit("connectionStateChanged","connected","reconnecting"),this.emit("reconnected")}on(e,t){return this.eventHandlers.has(e)||this.eventHandlers.set(e,new Set),this.eventHandlers.get(e).add(t),this}once(e,t){let i=(...o)=>{this.off(e,i),t(...o)};return this.on(e,i)}off(e,t){return this.eventHandlers.get(e)?.delete(t),this}removeAllListeners(){this.eventHandlers.clear()}emit(e,...t){let i=this.eventHandlers.get(e);if(i)for(let o of i)try{o(...t)}catch(n){console.error(`Error in mock room event handler for ${e}:`,n)}}registerRpcMethod(e,t){this.rpcHandlers.set(e,t)}unregisterRpcMethod(e){this.rpcHandlers.delete(e)}async callRpc(e,t,i,o=1e4){let n=this.rpcHandlers.get(e);if(!n)throw new Error(`RPC method not found: ${e}`);return n({callerIdentity:t,payload:i,responseTimeout:o})}registerTextStreamHandler(e,t){this.textStreamHandlers.set(e,t)}unregisterTextStreamHandler(e){this.textStreamHandlers.delete(e)}simulateTextStream(e,t){let i=this.textStreamHandlers.get(e);i&&i(t,{identity:t.participantIdentity})}getParticipantByIdentity(e){return e===this.localParticipant.identity?new L(this.localParticipant.identity,this.localParticipant.name,this.localParticipant.attributes):this.remoteParticipants.get(e)}getParticipantBySid(e){if(e===this.localParticipant.sid)return new L(this.localParticipant.identity,this.localParticipant.name,this.localParticipant.attributes);for(let t of this.remoteParticipants.values())if(t.sid===e)return t}async simulateParticipantJoin(e,t){let i=new L(e,t?.name,t?.attributes||{},t?.kind||"standard");return this.remoteParticipants.set(e,i),this.emit("participantConnected",i),t?.withCamera&&await this.simulateRemoteTrack(e,"video","camera"),t?.withMicrophone&&await this.simulateRemoteTrack(e,"audio","microphone"),i}simulateParticipantLeave(e){let t=this.remoteParticipants.get(e);if(t){for(let i of t.getTrackPublications())i.track?.stop(),this.emit("trackUnsubscribed",i.track,i,t);this.remoteParticipants.delete(e),this.emit("participantDisconnected",t)}}async simulateRemoteTrack(e,t,i){let o=this.remoteParticipants.get(e);if(!o)return;let n,r;if(t==="video"){let{createSyntheticVideoTrack:d}=await Promise.resolve().then(()=>(ne(),xe)),m=d({animation:o.isAgent?"avatar":"pulse",label:o.name||e,foregroundColor:o.isAgent?"#22c55e":"#4361ee"});n=m.track,r=m.cleanup}else if(t==="audio"){let{createSyntheticAudioTrack:d}=await Promise.resolve().then(()=>(ne(),xe)),m=d({enabled:!1});n=m.track,r=m.cleanup}let a=new C(t,i,n,r),l=new _(a);return o.addTrackPublication(l),this.emit("trackSubscribed",a,l,o),this.emit("trackPublished",l,o),a}simulateTrackUnpublished(e,t){let i=this.remoteParticipants.get(e);if(!i)return;let o=i.getTrackPublication(t);o&&(i.removeTrackPublication(o.trackSid),this.emit("trackUnpublished",o,i),this.emit("trackUnsubscribed",o.track,o,i))}async simulateAgentJoin(e,t="AI Agent"){return this.simulateParticipantJoin(e,{name:t,kind:"agent",withCamera:!0,withMicrophone:!0,attributes:{"lk.agent.name":t,"lk.agent.state":"active"}})}simulateAttributeChange(e,t){let i=this.remoteParticipants.get(e);if(i){let o={...i.attributes};i.setAttributes(t),this.emit("participantAttributesChanged",t,o,i)}}simulateTrackMuted(e,t,i){let o=this.remoteParticipants.get(e);if(!o)return;let n=o.getTrackPublication(t);n?.track&&(n.track.setMuted(i),this.emit(i?"trackMuted":"trackUnmuted",n,o))}simulateActiveSpeakersChanged(e){let t=[];for(let i of e){let o=this.remoteParticipants.get(i);o&&(o.startSpeaking(),t.push(o))}this.emit("activeSpeakersChanged",t)}simulateDataReceived(e,t,i,o){let n=this.remoteParticipants.get(t);this.emit("dataReceived",e,n,i,o)}};var re=class{constructor(e={}){this.rooms=new Map;this.participants=new Map;this.tracks=new Map;this.agents=new Map;this.messages=new Map;this.config=e,this.randomState=e.seed??Date.now()}updateConfig(e){this.config={...this.config,...e},e.seed!==void 0&&(this.randomState=e.seed)}getConfig(){return{...this.config}}random(){return this.randomState=(this.randomState*1103515245+12345)%2147483648,this.randomState/2147483648}createRoom(e,t,i){let o=g("room"),n=new Date().toISOString(),r={id:o,name:e,groupId:t||g("group"),createdAt:n,metadata:i,isActive:!0,participantIds:[],connectionState:"disconnected",wsURL:ie(o),token:E(o,"pending",n)};return this.rooms.set(o,r),this.messages.set(o,[]),r}getRoom(e){return this.rooms.get(e)}getRoomByName(e){for(let t of this.rooms.values())if(t.name===e)return t}listRooms(e=!1){let t=Array.from(this.rooms.values());return e?t.filter(i=>i.isActive):t}updateRoomConnectionState(e,t){let i=this.rooms.get(e);if(!i)return;let o=i.connectionState;return i.connectionState=t,o}endRoom(e){let t=this.rooms.get(e);if(!t||!t.isActive)return!1;t.isActive=!1,t.endedAt=new Date().toISOString(),t.connectionState="disconnected";for(let i of t.participantIds){let o=this.participants.get(i);o&&(o.isConnected=!1)}for(let i of this.agents.values())i.roomId===e&&i.status==="running"&&(i.status="stopped",i.stoppedAt=new Date().toISOString());return!0}deleteRoom(e){let t=this.rooms.get(e);if(!t)return!1;for(let i of t.participantIds)this.participants.delete(i);for(let[i,o]of this.tracks)o.roomId===e&&this.tracks.delete(i);for(let[i,o]of this.agents)o.roomId===e&&this.agents.delete(i);return this.messages.delete(e),this.rooms.delete(e),!0}addParticipant(e,t,i,o="user",n="standard",r=!1){let a=this.rooms.get(e);if(!a)return this.createError("ROOM_NOT_FOUND",`Room ${e} not found`);if(!a.isActive)return this.createError("ROOM_ENDED",`Room ${e} has ended`);let l=this.participants.get(t);if(l&&l.roomId===e&&l.isConnected)return this.config.strictMode?this.createError("PARTICIPANT_ALREADY_JOINED",`Participant ${t} is already in room ${e}`):l;let d={identity:t,name:i||t,roomId:e,joinedAt:new Date().toISOString(),isConnected:!0,trackIds:[],role:o,attributes:{},kind:n,isLocal:r};return this.participants.set(t,d),a.participantIds.push(t),d}getParticipant(e){return this.participants.get(e)}listParticipants(e,t=!0){let i=this.rooms.get(e);if(!i)return[];let o=[];for(let n of i.participantIds){let r=this.participants.get(n);r&&(!t||r.isConnected)&&o.push(r)}return o}updateParticipantAttributes(e,t){let i=this.participants.get(e);if(!i)return;let o={...i.attributes};return i.attributes={...i.attributes,...t},o}removeParticipant(e){let t=this.participants.get(e);if(!t)return;t.isConnected=!1;for(let o of t.trackIds)this.tracks.delete(o);t.trackIds=[];let i=this.rooms.get(t.roomId);if(i){let o=i.participantIds.indexOf(e);o!==-1&&i.participantIds.splice(o,1)}return t}publishTrack(e,t,i="unknown",o){let n=this.participants.get(e);if(!n)return this.createError("PARTICIPANT_NOT_FOUND",`Participant ${e} not found`);if(!n.isConnected)return this.createError("INVALID_OPERATION",`Participant ${e} is not connected`);let r=this.rooms.get(n.roomId);if(!r||!r.isActive)return this.createError("ROOM_ENDED","Room is not active");let a=g("track"),l={id:a,kind:t,source:i,participantIdentity:e,roomId:n.roomId,publishedAt:new Date().toISOString(),muted:!1,metadata:o};return this.tracks.set(a,l),n.trackIds.push(a),l}getTrack(e){return this.tracks.get(e)}listTracks(e,t){let i=[];for(let o of this.tracks.values())e&&o.roomId!==e||t&&o.participantIdentity!==t||i.push(o);return i}unpublishTrack(e){let t=this.tracks.get(e);if(!t)return;let i=this.participants.get(t.participantIdentity);if(i){let o=i.trackIds.indexOf(e);o!==-1&&i.trackIds.splice(o,1)}return this.tracks.delete(e),t}setTrackMuted(e,t){let i=this.tracks.get(e);return i?(i.muted=t,!0):!1}startAgent(e,t,i={}){let o=this.rooms.get(e);if(!o)return this.createError("ROOM_NOT_FOUND",`Room ${e} not found`);if(!o.isActive)return this.createError("ROOM_ENDED",`Room ${e} has ended`);let n=g("agent"),r={id:n,roomId:e,name:t,status:"running",startedAt:new Date().toISOString(),config:{responseStrategy:"echo",...i},messageHistory:[]};return this.agents.set(n,r),this.addParticipant(e,`agent_${n}`,t,"agent","agent",!1),r}getAgent(e){return this.agents.get(e)}listAgents(e){let t=[];for(let i of this.agents.values())i.roomId===e&&t.push(i);return t}stopAgent(e){let t=this.agents.get(e);if(t)return t.status="stopped",t.stoppedAt=new Date().toISOString(),this.removeParticipant(`agent_${e}`),t}updateAgentStatus(e,t){let i=this.agents.get(e);return i?(i.status=t,t==="stopped"&&(i.stoppedAt=new Date().toISOString()),!0):!1}addAgentMessage(e,t,i){let o=this.agents.get(e);if(!o)return;let n={id:g("msg"),content:t,role:i,timestamp:new Date().toISOString()};return o.messageHistory.push(n),n}addMessage(e,t,i,o="standard",n){if(!this.rooms.get(e))return this.createError("ROOM_NOT_FOUND",`Room ${e} not found`);let a={id:g("msg"),roomId:e,content:i,participantIdentity:t,createdAt:new Date().toISOString(),type:o,attributes:n},l=this.messages.get(e)||[];return l.push(a),this.messages.set(e,l),a}getMessages(e,t){let i=this.messages.get(e)||[];return t?i.slice(-t):i}createError(e,t,i){return{code:e,message:t,details:i}}isError(e){return typeof e=="object"&&e!==null&&"code"in e&&"message"in e}reset(){this.rooms.clear(),this.participants.clear(),this.tracks.clear(),this.agents.clear(),this.messages.clear(),this.randomState=this.config.seed??Date.now()}getSnapshot(){return{rooms:new Map(this.rooms),participants:new Map(this.participants),tracks:new Map(this.tracks),agents:new Map(this.agents),messages:new Map(this.messages),config:{...this.config},eventHistory:[]}}toJSON(){return{rooms:Object.fromEntries(this.rooms),participants:Object.fromEntries(this.participants),tracks:Object.fromEntries(this.tracks),agents:Object.fromEntries(this.agents),messages:Object.fromEntries(this.messages),config:this.config,eventHistory:[],exportedAt:new Date().toISOString()}}fromJSON(e){this.rooms=new Map(Object.entries(e.rooms)),this.participants=new Map(Object.entries(e.participants)),this.tracks=new Map(Object.entries(e.tracks)),this.agents=new Map(Object.entries(e.agents)),this.messages=new Map(Object.entries(e.messages).map(([t,i])=>[t,i])),this.config=e.config}};var F=class{constructor(e={}){this.messageListeners=new Set;this.typingListeners=new Set;this.callRequestListeners=new Map;this._authToken=null;this._registeredUser=null;this.agents=new Map;this.config={latencyMs:e.latencyMs??0,strictMode:e.strictMode??!1,seed:e.seed,scenario:e.scenario,errorConfig:e.errorConfig,autoEmitEvents:e.autoEmitEvents??!0,organizationId:e.organizationId??"mock_org",apiUrl:e.apiUrl??"https://mock-livekit.local"},this.state=new re(this.config),this.events=new se,this.room=new D(this),this.config.scenario&&this.applyScenario(this.config.scenario)}get authToken(){return this._authToken}get registeredUser(){return this._registeredUser}getState(){return this.state}getEvents(){return this.events}updateConfig(e){this.config={...this.config,...e},this.state.updateConfig(e)}getConfig(){return{...this.config}}async simulateLatency(){this.config.latencyMs&&this.config.latencyMs>0&&await new Promise(e=>setTimeout(e,this.config.latencyMs))}applyScenario(e){switch(e){case"happy_path":this.config.errorConfig={},this.config.latencyMs=0;break;case"slow_network":this.config.latencyMs=500;break;case"network_unstable":this.config.errorConfig={errorRate:30};break;default:break}}shouldThrowError(){return this.config.errorConfig?.errorRate?this.state.random()*100<this.config.errorConfig.errorRate:!1}ensureRoom(){return this.room||(this.room=new D(this)),this.room}async registerUser(e,t,i,o){if(await this.simulateLatency(),this.config.errorConfig?.unauthorized)throw new b("UNAUTHORIZED","Registration failed");let n={id:g("user"),externalId:e,organizationId:this.config.organizationId,role:"user",token:E("pending",e,new Date().toISOString())};return this._authToken=n.token,this._registeredUser=n,this.room.localParticipant.identity=e,this.room.localParticipant.name=i?.name||e,n}async registerAgent(e,t){if(await this.simulateLatency(),this.config.errorConfig?.unauthorized)throw new b("UNAUTHORIZED","Agent registration failed");let i=E("agent",e,new Date().toISOString());return this._authToken=i,this.room.localParticipant.identity=e,this.room.localParticipant.name=t.name,i}async quickStart(e){let{externalId:t,secret:i,metadata:o,...n}=e.user;return await this.registerUser(t,i,n,o),this.createRoom({language:e.room.language,timezone:e.room.timezone,affinity:e.room.affinity,metadata:e.room.metadata,disablePersistence:e.room.disablePersistence,contextualEvents:e.room.contextualEvents,userGroupId:e.room.userGroupId??void 0})}async createRoom(e,t={}){if(await this.simulateLatency(),this.config.errorConfig?.networkError||this.shouldThrowError())throw new b("NETWORK_ERROR","Failed to create room");let i=this.state.createRoom(`room_${Date.now()}`,e.affinity?.agentId,e.metadata);this.room.id=i.id,this.room.groupId=i.groupId,this.room.createdAt=i.createdAt,this.room.connectedAt=new Date().toISOString();let o=this.room.localParticipant.identity||"local_user";return this.state.addParticipant(i.id,o,this.room.localParticipant.name,"user","standard",!0),Object.keys(t).length>0&&(this.state.updateParticipantAttributes(o,t),this.room.localParticipant.setAttributes(t)),this.state.updateRoomConnectionState(i.id,"connected"),this.config.autoEmitEvents&&(this.events.emitRoomCreated(i),this.events.emitRoomConnectionStateChanged(i.id,"connected","disconnected")),(e.affinity?.agentId||e.affinity?.agentType)&&await this.startMockAgent(i.id,{type:e.affinity?.agentType,nature:e.affinity?.nature??"ai"}),await this.room.connect(i.wsURL,i.token),this.room}async joinRoom(e,t,i,o){await this.simulateLatency();let n=this.state.getRoom(e);if(!n)throw new O(e);if(!n.isActive)throw new b("ROOM_ENDED",`Room ${e} has ended`);this.room.id=n.id,this.room.groupId=n.groupId,this.room.createdAt=n.createdAt,this.room.connectedAt=new Date().toISOString();let r=this.room.localParticipant.identity||"local_user",a=this.state.addParticipant(e,r,this.room.localParticipant.name,"user","standard",!0);if(z(a))throw oe(a);if(o){let l={};for(let[d,m]of Object.entries(o))l[d]=String(m);this.state.updateParticipantAttributes(r,l)}return this.state.updateRoomConnectionState(e,"connected"),this.config.autoEmitEvents&&(this.events.emitParticipantJoined(e,a),this.events.emitRoomConnectionStateChanged(e,"connected","disconnected")),await this.room.connect(n.wsURL,n.token),this.room}async evaluateRoom(e){await this.simulateLatency();let t=e.roomId||this.room?.id;if(!t)throw new b("ROOM_NOT_FOUND","No room to evaluate");let i=this.state.getRoom(t);if(!i)throw new O(t);i.metadata||(i.metadata={}),i.metadata.evaluation={rating:e.rating,comment:e.comment,evaluatedAt:new Date().toISOString()}}async closeRoom(){await this.simulateLatency(),this.room?.id&&(this.state.endRoom(this.room.id),await this.stopLocalTracks(),this.config.autoEmitEvents&&this.events.emitRoomEnded(this.room.id))}async disconnect(){if(this.room){let e=this.room.id,t=this.room.localParticipant.identity;await this.stopLocalTracks(),this.state.removeParticipant(t),this.config.autoEmitEvents&&e&&this.events.emitParticipantLeft(e,t),this.room.removeAllListeners(),await this.room.disconnect()}}async stopLocalTracks(){let e=this.room?.localParticipant;e&&await Promise.all([e.setCameraEnabled(!1),e.setMicrophoneEnabled(!1),e.setScreenShareEnabled(!1)])}async disconnectAndCloseRoom(){await this.closeRoom(),await this.disconnect()}async readRoom(e){await this.simulateLatency();let t=this.state.getRoom(e);if(!t)throw new O(e);t.metadata||(t.metadata={}),t.metadata.lastReadAt=new Date().toISOString()}async getRooms(e){await this.simulateLatency();let t=this.state.listRooms();e.roomStatus==="active"?t=t.filter(a=>a.isActive):e.roomStatus==="closed"&&(t=t.filter(a=>!a.isActive)),e.ids?.length&&(t=t.filter(a=>e.ids.includes(a.id))),e.groupId&&(t=t.filter(a=>a.groupId===e.groupId));let i=e.offset??0,o=e.limit??20;return{items:t.slice(i,i+o).map(a=>({id:a.id,name:a.name,groupId:a.groupId,organizationId:this.config.organizationId,endedAt:a.endedAt??null,createdAt:a.createdAt,updatedAt:a.createdAt,status:a.isActive?"active":"ended",participants:this.state.listParticipants(a.id).map(l=>({id:l.identity,name:l.name||l.identity,role:l.role,isLocal:l.isLocal})),evaluations:[],_count:{messages:this.state.getMessages(a.id).length,participants:a.participantIds.length}})),count:t.length,limit:o,offset:i}}async sendMessage(e,t){if(await this.simulateLatency(),!this.room?.id)throw new b("INVALID_OPERATION","Not connected to a room");let i=this.state.addMessage(this.room.id,this.room.localParticipant.identity,e,"standard",t);if(z(i))throw oe(i);let o={id:i.id,timestamp:Date.now(),message:e,content:e,createdAt:i.createdAt,from:{identity:this.room.localParticipant.identity,name:this.room.localParticipant.name,id:this.room.localParticipant.identity,role:"user"}};for(let n of this.messageListeners)n([o]);this.config.autoEmitEvents&&this.events.emitMessageSent(this.room.id,i);for(let n of this.agents.values())n.isRunning&&n.roomId===this.room.id&&this.triggerAgentResponse(n,e)}async persistMessage(e){await this.simulateLatency();let t=this.state.addMessage(e.roomId,e.identity||"system",e.content);if(z(t))throw oe(t);return{items:[{id:t.id,timestamp:Date.now(),message:t.content,content:t.content,createdAt:t.createdAt}],count:1,limit:1,offset:0}}async getMessages(e){await this.simulateLatency();let t=e.roomId||this.room?.id;return t?this.state.getMessages(t,e.limit).map(o=>({id:o.id,timestamp:Date.parse(o.createdAt),message:o.content,content:o.content,createdAt:o.createdAt,from:{identity:o.participantIdentity,id:o.participantIdentity,role:"user"}})):[]}async sendMessageReport(e){await this.simulateLatency()}async deleteMessageReport(e){await this.simulateLatency()}async updateMessageReactions(e){await this.simulateLatency()}subscribeMessages(e){return this.messageListeners.add(e),()=>{this.messageListeners.delete(e)}}async sendTypingIndicator(e){if(!this.room?.id)return;let t={type:"typing",isTyping:e,timestamp:Date.now(),participantId:this.room.localParticipant.identity};for(let i of this.typingListeners)i(t);this.config.autoEmitEvents&&this.events.emitTypingIndicator(this.room.id,this.room.localParticipant.identity,e)}subscribeTypingIndicators(e){return this.typingListeners.add(e),()=>this.typingListeners.delete(e)}unsubscribeTypingIndicators(e){this.typingListeners.delete(e)}async sendContextualEvent(e){await this.simulateLatency()}async requestNewRoom(e){await this.simulateLatency();let t=this.state.createRoom(`transfer_${Date.now()}`,void 0,{originRoom:e.originRoom});return{id:t.id,groupId:t.groupId,token:t.token,wsURL:t.wsURL,createdAt:t.createdAt}}async confirmRoomRequest(e){return await this.simulateLatency(),{success:!0,message:"Request confirmed",roomId:e}}async cancelRoomRequest(e){return await this.simulateLatency(),{success:!0,message:"Request cancelled",roomId:e}}async finishCall(){await this.simulateLatency(),this.room?.id&&this.state.endRoom(this.room.id)}isFirebaseEnabled(){return!0}onPresenceChange(e){return()=>{}}onPresenceAgentChange(e,t){return()=>{}}async createCallRequest(e){return await this.simulateLatency(),g("call")}onNewCallRequest(e){return this.callRequestListeners.has("new")||this.callRequestListeners.set("new",new Set),this.callRequestListeners.get("new").add(e),()=>this.callRequestListeners.get("new")?.delete(e)}onCallRequestChange(e){return this.callRequestListeners.has("change")||this.callRequestListeners.set("change",new Set),this.callRequestListeners.get("change").add(e),()=>this.callRequestListeners.get("change")?.delete(e)}onCallRequestRemoved(e){return()=>{}}async acceptCallRequest(e){await this.simulateLatency()}async cancelCallRequest(e){await this.simulateLatency()}async cancelOnDisconnect(e){await this.simulateLatency()}subscribePendingRequests(e,t={}){return()=>{}}subscribeRequestChanges(e){return()=>{}}async tryAcceptRequest(e){return await this.simulateLatency(),!0}onRoomSync(e,t){return()=>{}}async clearRoomSync(e,t){await this.simulateLatency()}onNewRoomRequest(e,t){return()=>{}}unsubscribeAllFirebase(){this.callRequestListeners.clear()}async destroy(){this.unsubscribeAllFirebase(),this.messageListeners.clear(),this.typingListeners.clear(),await this.disconnect(),this.state.reset()}async startMockAgent(e,t){let i=t?.name||"AI Assistant",o=new ge(g("agent"),i,{responseStrategy:t?.responseStrategy||"echo",responseDelayMs:t?.responseDelayMs||100,cannedResponses:t?.cannedResponses||[],type:t?.type,nature:t?.nature});await o.start(e),this.agents.set(o.id,o),this.customAgentHandler&&o.setCustomHandler((d,m)=>this.customAgentHandler(d,m));let n=t?.type,r=Array.isArray(n)?n:[n].filter(Boolean),a=r.includes("video"),l=r.includes("voice");return(a||l)&&this.room.isConnected&&await this.room.simulateParticipantJoin(o.id,{name:i,kind:"agent",withCamera:a,withMicrophone:l||a,attributes:{"lk.agent.name":i,"lk.agent.state":"active",role:"agent"}}),this.config.autoEmitEvents&&this.events.emitAgentStarted(e,{id:o.id,name:o.name,roomId:e,status:"running",config:o.getConfig(),startedAt:new Date().toISOString(),messageHistory:[]}),o.id}async stopMockAgent(e){let t=this.agents.get(e);if(t){let i=t.roomId;await t.stop(),this.agents.delete(e),this.config.autoEmitEvents&&i&&this.events.emitAgentStopped(i,e)}}setAgentResponseHandler(e){this.customAgentHandler=e;for(let t of this.agents.values())t.setCustomHandler((i,o)=>e(i,o))}async triggerAgentResponse(e,t){if(this.config.scenario!=="agent_timeout")try{let i=await e.processMessage(t);if(!i)return;let o=this.state.addMessage(e.roomId,`agent_${e.id}`,i);if(!z(o)){let n={id:o.id,timestamp:Date.now(),message:i,content:i,createdAt:o.createdAt,from:{identity:`agent_${e.id}`,name:e.name,id:e.id,role:"agent"}};for(let r of this.messageListeners)r([n]);this.config.autoEmitEvents&&this.events.emitMessageReceived(e.roomId,o)}}catch(i){console.error("Agent response error:",i)}}simulateCallRequest(e){let t={id:g("call"),guestId:e.guestId||"guest_user",name:e.name||"Guest User",createdAt:new Date().toISOString(),status:e.status||"pending",...e},i=this.callRequestListeners.get("new");if(i)for(let o of i)o(t.id,t)}simulateParticipantJoin(e,t,i="user"){if(!this.room?.id)return;let o=this.state.addParticipant(this.room.id,e,t,i,"standard",!1);!z(o)&&this.config.autoEmitEvents&&this.events.emitParticipantJoined(this.room.id,o)}simulateParticipantLeave(e){if(!this.room?.id)return;this.state.removeParticipant(e)&&this.config.autoEmitEvents&&this.events.emitParticipantLeft(this.room.id,e)}simulateIncomingMessage(e,t){if(!this.room?.id)return;let i=this.state.addMessage(this.room.id,e,t);if(z(i))return;let o={id:i.id,timestamp:Date.now(),message:t,content:t,createdAt:i.createdAt,from:{identity:e,id:e,role:"user"}};for(let n of this.messageListeners)n([o]);this.config.autoEmitEvents&&this.events.emitMessageReceived(this.room.id,i)}async simulateDisconnect(){if(!this.room?.id)return;let e=this.room.state;this.room.state="disconnected",this.config.autoEmitEvents&&this.events.emitRoomConnectionStateChanged(this.room.id,"disconnected",e),this.room.emit("connectionStateChanged","disconnected")}reset(){this.state.reset(),this.events.clearHistory(),this.messageListeners.clear(),this.typingListeners.clear(),this.callRequestListeners.clear(),this.agents.clear(),this._authToken=null,this._registeredUser=null,this.room=new D(this),Re()}seed(e){this.config.seed=e,this.state.updateConfig({seed:e})}setScenario(e){this.config.scenario=e,this.applyScenario(e)}exportState(){return{...this.state.toJSON(),eventHistory:this.events.getHistory()}}getEventHistory(e){return this.events.getHistory(e)}};var tt={},q={MODE:"LIVEKIT_MODE",USE_MOCK:"USE_LIVEKIT_MOCK",MOCK_LATENCY:"MOCK_LIVEKIT_LATENCY_MS",MOCK_STRICT:"MOCK_LIVEKIT_STRICT",MOCK_SCENARIO:"MOCK_LIVEKIT_SCENARIO",MOCK_SEED:"MOCK_LIVEKIT_SEED",API_URL:"LIVEKIT_API_URL",AUTH_URL:"LIVEKIT_AUTH_URL",ORG_ID:"LIVEKIT_ORGANIZATION_ID"};function et(){let s=N(q.MODE);if(s==="mock"||s==="real")return s;let e=N(q.USE_MOCK);return e==="true"||e==="1"||qi()?"mock":"real"}function Ui(){let s={},e=N(q.MOCK_LATENCY);e&&(s.latencyMs=parseInt(e,10));let t=N(q.MOCK_STRICT);(t==="true"||t==="1")&&(s.strictMode=!0);let i=N(q.MOCK_SCENARIO);i&&(s.scenario=i);let o=N(q.MOCK_SEED);return o&&(s.seed=parseInt(o,10)),s}function $i(){let s={},e=N(q.API_URL);e&&(s.apiUrl=e);let t=N(q.AUTH_URL);t&&(s.authUrl=t);let i=N(q.ORG_ID);return i&&(s.organizationId=i),s}function N(s){if(typeof process<"u"&&process.env)return process.env[s];if(typeof tt<"u"&&tt.env)return tt.env[`VITE_${s}`]||tt.env[s];if(typeof window<"u"&&window.__ENV__)return window.__ENV__[s]}function qi(){return!!(typeof process<"u"&&process.env&&(process.env.NODE_ENV==="test"||process.env.VITEST||process.env.JEST_WORKER_ID)||typeof globalThis.__vitest_index__<"u")}var H=class s{static create(e){if((e.mode??et())==="mock"){let i={...Ui(),...e.mockConfig,organizationId:e.organizationId,apiUrl:e.apiUrl};return new F(i)}if(!e.organizationId||!e.apiUrl)throw new Error("ConversationService requires organizationId and apiUrl. Provide them in options or set LIVEKIT_ORGANIZATION_ID and LIVEKIT_API_URL environment variables.");return new Xe(e)}static createFromEnv(e){let t=e?.mode??et(),i=$i();return s.create({...i,...e,mode:t})}static createMock(e){return new F({organizationId:"mock_org",apiUrl:"https://mock-livekit.local",...e})}static createDeterministicMock(e=12345){return new F({organizationId:"mock_org",apiUrl:"https://mock-livekit.local",seed:e,strictMode:!0})}static getCurrentMode(){return et()}static isMockMode(){return et()==="mock"}static isMockService(e){return e instanceof F}};function Mt(s){return H.createFromEnv(s)}function Le(s){return H.createMock(s)}function De(s){let e=s?.id??g("room"),t=new Date().toISOString();return{id:e,name:`Test Room ${e}`,groupId:g("group"),createdAt:t,isActive:!0,participantIds:[],connectionState:"connected",wsURL:ie(e),token:E(e,"local_user",t),...s}}function Fe(s="local_user",e){let t=De(e);t.participantIds.push(s);let i={identity:s,name:"Local User",roomId:t.id,joinedAt:new Date().toISOString(),isConnected:!0,trackIds:[],role:"user",attributes:{},kind:"standard",isLocal:!0};return{room:t,localParticipant:i}}function it(s){let e=De(s),t=new Date().toISOString(),i={identity:"user_1",name:"User One",roomId:e.id,joinedAt:t,isConnected:!0,trackIds:[],role:"user",attributes:{},kind:"standard",isLocal:!0},o={identity:"user_2",name:"User Two",roomId:e.id,joinedAt:t,isConnected:!0,trackIds:[],role:"user",attributes:{},kind:"standard",isLocal:!1};return e.participantIds.push(i.identity,o.identity),{room:e,participant1:i,participant2:o}}function Ue(s,e){let{room:t,localParticipant:i}=Fe("local_user",e),o=new Date().toISOString(),n=g("agent"),r={id:n,roomId:t.id,name:"AI Assistant",status:"running",startedAt:o,config:{responseStrategy:"echo",nature:"ai",...s},messageHistory:[]},a={identity:`agent_${n}`,name:"AI Assistant",roomId:t.id,joinedAt:o,isConnected:!0,trackIds:[],role:"agent",attributes:{},kind:"agent",isLocal:!1};return t.participantIds.push(a.identity),{room:t,localParticipant:i,agent:r,agentParticipant:a}}function xt(s){let{room:e,localParticipant:t,agent:i,agentParticipant:o}=Ue(void 0,s),n={id:g("track"),kind:"data",source:"unknown",participantIdentity:o.identity,roomId:e.id,publishedAt:new Date().toISOString(),muted:!1};return o.trackIds.push(n.id),{room:e,localParticipant:t,agent:i,dataTrack:n}}function _t(s){let{room:e,localParticipant:t}=Fe("local_user",s),i=new Date().toISOString(),o={id:g("track"),kind:"audio",source:"microphone",participantIdentity:t.identity,roomId:e.id,publishedAt:i,muted:!1},n={id:g("track"),kind:"video",source:"camera",participantIdentity:t.identity,roomId:e.id,publishedAt:i,muted:!1};return t.trackIds.push(o.id,n.id),{room:e,participant:t,audioTrack:o,videoTrack:n}}function ot(s,e){let t=e?.identity??g("participant");return{identity:t,name:`Participant ${t}`,roomId:s,joinedAt:new Date().toISOString(),isConnected:!0,trackIds:[],role:"user",attributes:{},kind:"standard",isLocal:!1,...e}}function At(s,e){let t=[];for(let i=0;i<e;i++)t.push(ot(s,{identity:`participant_${i+1}`,name:`Participant ${i+1}`,isLocal:i===0}));return t}function $e(s,e){return{id:e?.id??g("agent"),roomId:s,name:"AI Assistant",status:"running",startedAt:new Date().toISOString(),config:{responseStrategy:"echo",nature:"ai",...e?.config},messageHistory:[],...e}}function Ct(s,e){return $e(s,{config:{responseStrategy:"canned",cannedResponses:e}})}function Tt(s,e){return $e(s,{config:{responseStrategy:"sequential",cannedResponses:e}})}function Pt(s,e,t){return{id:g("msg"),roomId:s,content:"Test message",participantIdentity:e,createdAt:new Date().toISOString(),type:"standard",...t}}function st(s,e){return e.map((t,i)=>({id:g("msg"),roomId:s,content:t.content,participantIdentity:t.identity,createdAt:new Date(Date.now()+i*1e3).toISOString(),type:"standard"}))}function _e(s){return{latencyMs:0,strictMode:!1,autoEmitEvents:!0,organizationId:"test_org",apiUrl:"https://mock-api.local",...s}}function Rt(s){return _e({strictMode:!0,...s})}function It(s,e){return _e({latencyMs:s,...e})}function Et(s,e){return _e({seed:s,...e})}function Ot(){let{room:s,localParticipant:e,agent:t,agentParticipant:i}=Ue(),o=st(s.id,[{identity:e.identity,content:"Hello, I need help"},{identity:i.identity,content:"Hi! How can I assist you today?"},{identity:e.identity,content:"I have a question about my order"},{identity:i.identity,content:"Of course! Please provide your order number."}]);return{room:s,user:e,agent:t,agentParticipant:i,messages:o}}function zt(){let{room:s,participant1:e,participant2:t}=it(),i=new Date().toISOString(),o=[{id:g("track"),kind:"audio",source:"microphone",participantIdentity:e.identity,roomId:s.id,publishedAt:i,muted:!1},{id:g("track"),kind:"video",source:"camera",participantIdentity:e.identity,roomId:s.id,publishedAt:i,muted:!1},{id:g("track"),kind:"audio",source:"microphone",participantIdentity:t.identity,roomId:s.id,publishedAt:i,muted:!1},{id:g("track"),kind:"video",source:"camera",participantIdentity:t.identity,roomId:s.id,publishedAt:i,muted:!1}];return e.trackIds.push(o[0].id,o[1].id),t.trackIds.push(o[2].id,o[3].id),{room:s,participant1:e,participant2:t,tracks:o}}var Ae=class{constructor(e,t,i,o,n){this.index=0;this._complete=!1;this.info={id:e,attributes:o,topic:n,timestamp:Date.now()},this.participantIdentity=t,this.topic=n,this.chunks=Array.isArray(i)?i:[i],this.info.totalSize=this.chunks.reduce((r,a)=>r+a.length,0)}get isComplete(){return this._complete}async*[Symbol.asyncIterator](){for(let e of this.chunks)yield e;this._complete=!0}async read(){return this.index>=this.chunks.length?(this._complete=!0,null):this.chunks[this.index++]}async readAll(){let e=this.chunks.slice(this.index).join("");return this.index=this.chunks.length,this._complete=!0,e}cancel(){this._complete=!0}};ne();var Q=null;function y(s){return Q||(Q=Le({organizationId:"storybook_org",apiUrl:"https://storybook.mock",latencyMs:50,autoEmitEvents:!0,...s})),Q}function nt(){Q&&Q.reset()}async function Lt(){Q&&(await Q.destroy(),Q=null)}function Dt(s={}){return(e,t)=>{nt();let i={default:void 0,slow_network:"slow_network",unreliable:"unreliable",agent_timeout:"agent_timeout"},o=y({organizationId:s.organizationId,latencyMs:s.latencyMs??50,scenario:s.scenario?i[s.scenario]:void 0});return(async()=>{try{if(s.autoRegisterUser&&await o.registerUser(s.autoRegisterUser.identity,s.autoRegisterUser.secret||"storybook_secret",{name:s.autoRegisterUser.name||"Storybook User"}),s.autoCreateRoom){if(await o.createRoom({language:s.autoCreateRoom.language||"en",timezone:s.autoCreateRoom.timezone||"UTC"}),s.seedMessages)for(let n of s.seedMessages)o.simulateIncomingMessage(n.from,n.content);s.autoStartAgent&&o.room?.id&&await o.startMockAgent(o.room.id,s.autoStartAgent)}}catch(n){console.error("[Storybook Mock] Setup error:",n)}})(),window.__mockConversationService=o,e()}}function Ft(s){return H.isMockService(s)}var Ut={basicChat:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},autoStartAgent:{responseStrategy:"echo"}},aiAssistant:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},autoStartAgent:{responseStrategy:"canned",cannedResponses:["Hello! How can I help you today?","I understand. Let me look into that for you.","Is there anything else you'd like to know?","Thank you for your patience!"]}},videoCall:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},autoStartAgent:{responseStrategy:"canned",type:["text","video"],nature:"ai",name:"Video Agent",cannedResponses:["I can see you! The video quality looks great.","Let me share my screen to show you what I mean.","Is the audio coming through clearly?"]},simulateVideo:!0},multiParticipantCall:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},autoStartAgent:{responseStrategy:"echo",type:["text","video"],name:"Video Agent"},simulateVideo:!0},multiTurnConversation:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},autoStartAgent:{responseStrategy:"sequential",cannedResponses:["Welcome! I'm your virtual assistant.","I can help you with product information, orders, and support.","What would you like to know?"]},seedMessages:[{from:"agent",content:"Welcome! I'm your virtual assistant."}]},slowNetwork:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},autoStartAgent:{responseStrategy:"echo",responseDelayMs:2e3},latencyMs:500,scenario:"slow_network"},unreliable:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},scenario:"unreliable"}};function $t(s){return()=>y(s)}var rt={async receiveMessage(s,e){y().simulateIncomingMessage(s,e)},simulateJoin(s,e){y().simulateParticipantJoin(s,e)},simulateLeave(s){y().simulateParticipantLeave(s)},async simulateVideoParticipant(s,e,t){let o=y().room;o&&await o.simulateParticipantJoin(s,{name:e||s,kind:"standard",withCamera:t?.withCamera??!0,withMicrophone:t?.withMicrophone??!0})},async simulateVideoAgent(s,e){let i=y().room;i&&await i.simulateAgentJoin(s,e||"AI Agent")},async enableLocalCamera(){let e=y().room;e&&await e.localParticipant.setCameraEnabled(!0)},async disableLocalCamera(){let e=y().room;e&&await e.localParticipant.setCameraEnabled(!1)},async enableLocalMicrophone(){let e=y().room;e&&await e.localParticipant.setMicrophoneEnabled(!0)},async simulateMultipleParticipants(s){let e=["Alice","Bob","Carol","David","Eve","Frank","Grace","Henry","Ivy","Jack"],i=y().room;if(i)for(let o=0;o<Math.min(s,e.length);o++)await i.simulateParticipantJoin(`participant_${o+1}`,{name:e[o],kind:"standard",withCamera:!0,withMicrophone:!0}),await new Promise(n=>setTimeout(n,100))},clearParticipants(){let e=y().room;if(e)for(let t of e.remoteParticipants.keys())e.simulateParticipantLeave(t)},simulateCallRequest(s,e){y().simulateCallRequest({name:s,guestId:e||`guest_${Date.now()}`})},async simulateDisconnect(){await y().simulateDisconnect()},getEventHistory(){return y().getEventHistory()},exportState(){return y().exportState()},getRoom(){return y().room}};typeof window<"u"&&(window.MockServiceActions=rt);var at={OpenWidget:"openWidget",InitialStep:"initialStep"};var qt="ol",Mi={Action:"action",Message:"message",StepId:"stepId",InstallationId:"installationId"},Bi=new Set(Object.values(at)),lt=class s{constructor(){this.params=s.parse()}get hasParams(){return Object.keys(this.params).length>0}getParams(){return{...this.params}}matchesInstallation(e){return this.params.installationId?this.params.installationId===e:!0}cleanUrl(){let e=new URL(window.location.href),t=!1;for(let i of Array.from(e.searchParams.keys()))i.startsWith(qt)&&i.substring(qt.length)in Mi&&(e.searchParams.delete(i),t=!0);t&&window.history.replaceState(window.history.state,"",e.toString())}static parse(){let e={},t=new URLSearchParams(window.location.search);for(let[i,o]of Object.entries(Mi)){let n=`${qt}${i}`,r=t.get(n);if(r!==null){if(o==="action"){Bi.has(r)&&(e.action=r);continue}e[o]=r}}return e}};0&&(module.exports={AgentNotFoundError,Asset,ConversationServiceFactory,DeepLinkAction,DeepLinkService,InvalidOperationError,MockConversationService,MockEventEmitter,MockLiveKitError,MockLocalParticipant,MockParticipant,MockRoom,MockServiceActions,MockState,MockTextStreamReader,MockTrack,MockTrackPublication,NetworkError,OSBAsset,OSBSideBar,OSBUpload,ParticipantAlreadyJoinedError,ParticipantNotFoundError,RoomEndedError,RoomNotFoundError,SYNTHETIC_MEDIA_PRESETS,SideBar,StorybookScenarios,TimeoutError,TrackNotFoundError,UnauthorizedError,Upload,createAgentFixture,createAgentWithCannedResponses,createChatScenario,createConversationFixture,createConversationService,createDefaultConfig,createDefaultRoomFixture,createDeterministicConfig,createErrorFromMockError,createLatencyConfig,createMessageFixture,createMockConversationService,createMockServiceFactory,createParticipantBatch,createParticipantFixture,createRoomWithAgent,createRoomWithAgentAndDataTrack,createRoomWithLocalParticipant,createRoomWithMediaTracks,createRoomWithTwoParticipants,createSequentialAgent,createStrictConfig,createSyntheticAudioTrack,createSyntheticMedia,createSyntheticMediaFromPreset,createSyntheticVideoTrack,createVideoCallScenario,decodeMockToken,destroyStorybookMockService,generateMockApiResponseId,generateMockExternalId,generateMockId,generateMockIdBatch,generateMockMessageId,generateMockParticipantIdentity,generateMockRoomName,generateMockToken,generateMockTrackSid,generateMockWsUrl,generateSeededMockId,getStorybookMockService,isMockConversationService,isMockError,isMockLiveKitError,resetIdCounter,resetStorybookMockService,setIdCounter,withMockConversationService});