@onlive.ai/common-121 0.2.227 → 0.2.228

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 (500) hide show
  1. package/{audi-dark.theme-CmBU76BS.d.cts → audi-dark.theme-C92mx6HX.d.cts} +1 -1
  2. package/{audi-dark.theme-CmBU76BS.d.ts → audi-dark.theme-C92mx6HX.d.ts} +1 -1
  3. package/{audi.theme-Dv00cyiq.d.cts → audi.theme-b5_HO8i0.d.cts} +1 -1
  4. package/{audi.theme-Dv00cyiq.d.ts → audi.theme-b5_HO8i0.d.ts} +1 -1
  5. package/{australia.theme-MBhnmXS4.d.cts → australia.theme-Cr_KZr4r.d.cts} +1 -1
  6. package/{australia.theme-MBhnmXS4.d.ts → australia.theme-Cr_KZr4r.d.ts} +1 -1
  7. package/{chunk-QP5HM4T4.js → chunk-JB6NDWSG.js} +1 -1
  8. package/components/asset/asset-modal-portal.cjs +1 -1
  9. package/components/asset/asset-modal-portal.d.cts +1 -1
  10. package/components/asset/asset-modal-portal.d.ts +1 -1
  11. package/components/asset/asset-modal-portal.js +1 -1
  12. package/components/asset/asset.cjs +1 -1
  13. package/components/asset/asset.d.cts +1 -1
  14. package/components/asset/asset.d.ts +1 -1
  15. package/components/asset/asset.js +1 -1
  16. package/components/asset/asset.loaders.cjs +1 -1
  17. package/components/asset/asset.loaders.d.cts +1 -1
  18. package/components/asset/asset.loaders.d.ts +1 -1
  19. package/components/asset/asset.loaders.js +1 -1
  20. package/components/asset/asset.renderer.cjs +1 -1
  21. package/components/asset/asset.renderer.d.cts +1 -1
  22. package/components/asset/asset.renderer.d.ts +1 -1
  23. package/components/asset/asset.renderer.js +1 -1
  24. package/components/asset/asset.styles.cjs +1 -1
  25. package/components/asset/asset.styles.d.cts +1 -1
  26. package/components/asset/asset.styles.d.ts +1 -1
  27. package/components/asset/asset.styles.js +1 -1
  28. package/components/asset/asset.types.cjs +1 -1
  29. package/components/asset/asset.types.d.cts +1 -1
  30. package/components/asset/asset.types.d.ts +1 -1
  31. package/components/asset/asset.types.js +1 -1
  32. package/components/asset/index.cjs +1 -1
  33. package/components/asset/index.d.cts +1 -1
  34. package/components/asset/index.d.ts +1 -1
  35. package/components/asset/index.js +1 -1
  36. package/components/player/player.cjs +1 -1
  37. package/components/player/player.d.cts +1 -1
  38. package/components/player/player.d.ts +1 -1
  39. package/components/player/player.js +1 -1
  40. package/components/player/player.styles.cjs +1 -1
  41. package/components/player/player.styles.d.cts +1 -1
  42. package/components/player/player.styles.d.ts +1 -1
  43. package/components/player/player.styles.js +1 -1
  44. package/components/side-bar/index.cjs +1 -1
  45. package/components/side-bar/index.d.cts +1 -1
  46. package/components/side-bar/index.d.ts +1 -1
  47. package/components/side-bar/index.js +1 -1
  48. package/components/side-bar/side-bar.cjs +1 -1
  49. package/components/side-bar/side-bar.d.cts +1 -1
  50. package/components/side-bar/side-bar.d.ts +1 -1
  51. package/components/side-bar/side-bar.js +1 -1
  52. package/components/side-bar/side-bar.styles.cjs +1 -1
  53. package/components/side-bar/side-bar.styles.d.cts +1 -1
  54. package/components/side-bar/side-bar.styles.d.ts +1 -1
  55. package/components/side-bar/side-bar.styles.js +1 -1
  56. package/components/side-bar/side-bar.types.cjs +1 -1
  57. package/components/side-bar/side-bar.types.d.cts +1 -1
  58. package/components/side-bar/side-bar.types.d.ts +1 -1
  59. package/components/side-bar/side-bar.types.js +1 -1
  60. package/components/upload/index.cjs +1 -1
  61. package/components/upload/index.d.cts +1 -1
  62. package/components/upload/index.d.ts +1 -1
  63. package/components/upload/index.js +1 -1
  64. package/components/upload/upload.cjs +1 -1
  65. package/components/upload/upload.d.cts +1 -1
  66. package/components/upload/upload.d.ts +1 -1
  67. package/components/upload/upload.js +1 -1
  68. package/components/upload/upload.styles.cjs +1 -1
  69. package/components/upload/upload.styles.d.cts +1 -1
  70. package/components/upload/upload.styles.d.ts +1 -1
  71. package/components/upload/upload.styles.js +1 -1
  72. package/components/upload/upload.types.cjs +1 -1
  73. package/components/upload/upload.types.d.cts +1 -1
  74. package/components/upload/upload.types.d.ts +1 -1
  75. package/components/upload/upload.types.js +1 -1
  76. package/{cuernavaca.theme-CUjrY9Xc.d.cts → cuernavaca.theme-gwX4a0qX.d.cts} +1 -1
  77. package/{cuernavaca.theme-CUjrY9Xc.d.ts → cuernavaca.theme-gwX4a0qX.d.ts} +1 -1
  78. package/{cupra-diagonal.theme-CpQckNhJ.d.cts → cupra-diagonal.theme-YeEq5NNx.d.cts} +1 -1
  79. package/{cupra-diagonal.theme-CpQckNhJ.d.ts → cupra-diagonal.theme-YeEq5NNx.d.ts} +1 -1
  80. package/{cupra-events.theme-cVqmX62Y.d.cts → cupra-events.theme-CZsQUILE.d.cts} +1 -1
  81. package/{cupra-events.theme-cVqmX62Y.d.ts → cupra-events.theme-CZsQUILE.d.ts} +1 -1
  82. package/{cupra.theme-DKaGh_O3.d.cts → cupra.theme-Dwf_KC9c.d.cts} +1 -1
  83. package/{cupra.theme-DKaGh_O3.d.ts → cupra.theme-Dwf_KC9c.d.ts} +1 -1
  84. package/{dark-BxHAJ7kM.d.cts → dark-DSX5vBCc.d.cts} +1 -1
  85. package/{dark-BxHAJ7kM.d.ts → dark-DSX5vBCc.d.ts} +1 -1
  86. package/{germany.theme-nFG04X6c.d.cts → germany.theme-BZHEis96.d.cts} +1 -1
  87. package/{germany.theme-nFG04X6c.d.ts → germany.theme-BZHEis96.d.ts} +1 -1
  88. package/{hyundai.theme-Dxmi6-Jk.d.cts → hyundai.theme-CZ3-e75P.d.cts} +1 -1
  89. package/{hyundai.theme-Dxmi6-Jk.d.ts → hyundai.theme-CZ3-e75P.d.ts} +1 -1
  90. package/index.cjs +92 -91
  91. package/index.d.cts +2 -2
  92. package/index.d.ts +2 -2
  93. package/index.iife.js +1 -1
  94. package/index.js +41 -40
  95. package/{italy.theme-ghaT8KXg.d.cts → italy.theme-e_NIp9gB.d.cts} +1 -1
  96. package/{italy.theme-ghaT8KXg.d.ts → italy.theme-e_NIp9gB.d.ts} +1 -1
  97. package/{jac-dark.theme-DdqAsf4f.d.cts → jac-dark.theme-CID5X7cE.d.cts} +1 -1
  98. package/{jac-dark.theme-DdqAsf4f.d.ts → jac-dark.theme-CID5X7cE.d.ts} +1 -1
  99. package/{jac.theme-Di6EpMHt.d.cts → jac.theme-C7kaj89z.d.cts} +1 -1
  100. package/{jac.theme-Di6EpMHt.d.ts → jac.theme-C7kaj89z.d.ts} +1 -1
  101. package/{light-BlLrq4kY.d.cts → light-DNobHysW.d.cts} +1 -1
  102. package/{light-BlLrq4kY.d.ts → light-DNobHysW.d.ts} +1 -1
  103. package/{magimix.theme-BPqGCjtn.d.cts → magimix.theme-_PJhrflU.d.cts} +1 -1
  104. package/{magimix.theme-BPqGCjtn.d.ts → magimix.theme-_PJhrflU.d.ts} +1 -1
  105. package/{media-PYNZP2A2.js → media-Z2KW3VEA.js} +2 -2
  106. package/{onlive-ai.theme-DhO68-0D.d.cts → onlive-ai.theme-DQYkXql5.d.cts} +1 -1
  107. package/{onlive-ai.theme-DhO68-0D.d.ts → onlive-ai.theme-DQYkXql5.d.ts} +1 -1
  108. package/{onlive.theme-DLBUb-9X.d.cts → onlive.theme-D_SLBReG.d.cts} +1 -1
  109. package/{onlive.theme-DLBUb-9X.d.ts → onlive.theme-D_SLBReG.d.ts} +1 -1
  110. package/package.json +2 -2
  111. package/react/components/asset/Asset.cjs +1 -1
  112. package/react/components/asset/Asset.jsx +1 -1
  113. package/react/components/side-bar/SideBar.cjs +1 -1
  114. package/react/components/side-bar/SideBar.jsx +1 -1
  115. package/react/components/upload/Upload.cjs +1 -1
  116. package/react/components/upload/Upload.jsx +1 -1
  117. package/{seat-cupra.theme-qDT2y1oc.d.cts → seat-cupra.theme-DaKdJYyc.d.cts} +1 -1
  118. package/{seat-cupra.theme-qDT2y1oc.d.ts → seat-cupra.theme-DaKdJYyc.d.ts} +1 -1
  119. package/{seat.theme-CLUnSkVY.d.cts → seat.theme-BkE3lDxJ.d.cts} +1 -1
  120. package/{seat.theme-CLUnSkVY.d.ts → seat.theme-BkE3lDxJ.d.ts} +1 -1
  121. package/services/audio.service.cjs +1 -1
  122. package/services/audio.service.d.cts +1 -1
  123. package/services/audio.service.d.ts +1 -1
  124. package/services/audio.service.js +1 -1
  125. package/services/conversation/conversation.service.cjs +1 -1
  126. package/services/conversation/conversation.service.d.cts +1 -1
  127. package/services/conversation/conversation.service.d.ts +1 -1
  128. package/services/conversation/conversation.service.js +1 -1
  129. package/services/conversation/conversation.types.cjs +1 -1
  130. package/services/conversation/conversation.types.d.cts +1 -1
  131. package/services/conversation/conversation.types.d.ts +1 -1
  132. package/services/conversation/conversation.types.js +1 -1
  133. package/services/conversation/index.cjs +1 -1
  134. package/services/conversation/index.d.cts +1 -1
  135. package/services/conversation/index.d.ts +1 -1
  136. package/services/conversation/index.js +1 -1
  137. package/services/conversation/mock/actor/agent.cjs +1 -1
  138. package/services/conversation/mock/actor/agent.d.cts +1 -1
  139. package/services/conversation/mock/actor/agent.d.ts +1 -1
  140. package/services/conversation/mock/actor/agent.js +1 -1
  141. package/services/conversation/mock/actor/index.cjs +1 -1
  142. package/services/conversation/mock/actor/index.d.cts +1 -1
  143. package/services/conversation/mock/actor/index.d.ts +1 -1
  144. package/services/conversation/mock/actor/index.js +1 -1
  145. package/services/conversation/mock/actor/strategies.cjs +1 -1
  146. package/services/conversation/mock/actor/strategies.d.cts +1 -1
  147. package/services/conversation/mock/actor/strategies.d.ts +1 -1
  148. package/services/conversation/mock/actor/strategies.js +1 -1
  149. package/services/conversation/mock/errors.cjs +1 -1
  150. package/services/conversation/mock/errors.d.cts +1 -1
  151. package/services/conversation/mock/errors.d.ts +1 -1
  152. package/services/conversation/mock/errors.js +1 -1
  153. package/services/conversation/mock/events.cjs +1 -1
  154. package/services/conversation/mock/events.d.cts +1 -1
  155. package/services/conversation/mock/events.d.ts +1 -1
  156. package/services/conversation/mock/events.js +1 -1
  157. package/services/conversation/mock/factory.cjs +1 -1
  158. package/services/conversation/mock/factory.d.cts +1 -1
  159. package/services/conversation/mock/factory.d.ts +1 -1
  160. package/services/conversation/mock/factory.js +1 -1
  161. package/services/conversation/mock/fixtures.cjs +1 -1
  162. package/services/conversation/mock/fixtures.d.cts +1 -1
  163. package/services/conversation/mock/fixtures.d.ts +1 -1
  164. package/services/conversation/mock/fixtures.js +1 -1
  165. package/services/conversation/mock/generators.cjs +1 -1
  166. package/services/conversation/mock/generators.d.cts +1 -1
  167. package/services/conversation/mock/generators.d.ts +1 -1
  168. package/services/conversation/mock/generators.js +1 -1
  169. package/services/conversation/mock/index.cjs +1 -1
  170. package/services/conversation/mock/index.d.cts +1 -1
  171. package/services/conversation/mock/index.d.ts +1 -1
  172. package/services/conversation/mock/index.js +1 -1
  173. package/services/conversation/mock/livekit/index.cjs +1 -1
  174. package/services/conversation/mock/livekit/index.d.cts +1 -1
  175. package/services/conversation/mock/livekit/index.d.ts +1 -1
  176. package/services/conversation/mock/livekit/index.js +1 -1
  177. package/services/conversation/mock/livekit/local-participant.cjs +1 -1
  178. package/services/conversation/mock/livekit/local-participant.d.cts +1 -1
  179. package/services/conversation/mock/livekit/local-participant.d.ts +1 -1
  180. package/services/conversation/mock/livekit/local-participant.js +1 -1
  181. package/services/conversation/mock/livekit/participant.cjs +1 -1
  182. package/services/conversation/mock/livekit/participant.d.cts +1 -1
  183. package/services/conversation/mock/livekit/participant.d.ts +1 -1
  184. package/services/conversation/mock/livekit/participant.js +1 -1
  185. package/services/conversation/mock/livekit/room.cjs +1 -1
  186. package/services/conversation/mock/livekit/room.d.cts +1 -1
  187. package/services/conversation/mock/livekit/room.d.ts +1 -1
  188. package/services/conversation/mock/livekit/room.js +1 -1
  189. package/services/conversation/mock/livekit/streams.cjs +1 -1
  190. package/services/conversation/mock/livekit/streams.d.cts +1 -1
  191. package/services/conversation/mock/livekit/streams.d.ts +1 -1
  192. package/services/conversation/mock/livekit/streams.js +1 -1
  193. package/services/conversation/mock/livekit/tracks.cjs +1 -1
  194. package/services/conversation/mock/livekit/tracks.d.cts +1 -1
  195. package/services/conversation/mock/livekit/tracks.d.ts +1 -1
  196. package/services/conversation/mock/livekit/tracks.js +1 -1
  197. package/services/conversation/mock/media.cjs +1 -1
  198. package/services/conversation/mock/media.d.cts +1 -1
  199. package/services/conversation/mock/media.d.ts +1 -1
  200. package/services/conversation/mock/media.js +1 -1
  201. package/services/conversation/mock/service.cjs +1 -1
  202. package/services/conversation/mock/service.d.cts +1 -1
  203. package/services/conversation/mock/service.d.ts +1 -1
  204. package/services/conversation/mock/service.js +1 -1
  205. package/services/conversation/mock/service.test.cjs +1 -1
  206. package/services/conversation/mock/service.test.d.cts +1 -1
  207. package/services/conversation/mock/service.test.d.ts +1 -1
  208. package/services/conversation/mock/service.test.js +1 -1
  209. package/services/conversation/mock/state.cjs +1 -1
  210. package/services/conversation/mock/state.d.cts +1 -1
  211. package/services/conversation/mock/state.d.ts +1 -1
  212. package/services/conversation/mock/state.js +1 -1
  213. package/services/conversation/mock/storybook.cjs +1 -1
  214. package/services/conversation/mock/storybook.d.cts +1 -1
  215. package/services/conversation/mock/storybook.d.ts +1 -1
  216. package/services/conversation/mock/storybook.js +1 -1
  217. package/services/conversation/mock/types.cjs +1 -1
  218. package/services/conversation/mock/types.d.cts +1 -1
  219. package/services/conversation/mock/types.d.ts +1 -1
  220. package/services/conversation/mock/types.js +1 -1
  221. package/services/deep-link.service.cjs +1 -1
  222. package/services/deep-link.service.d.cts +1 -1
  223. package/services/deep-link.service.d.ts +1 -1
  224. package/services/deep-link.service.js +1 -1
  225. package/services/faqs/faqs.service.cjs +1 -1
  226. package/services/faqs/faqs.service.d.cts +1 -1
  227. package/services/faqs/faqs.service.d.ts +1 -1
  228. package/services/faqs/faqs.service.js +1 -1
  229. package/services/faqs/faqs.types.cjs +1 -1
  230. package/services/faqs/faqs.types.d.cts +1 -1
  231. package/services/faqs/faqs.types.d.ts +1 -1
  232. package/services/faqs/faqs.types.js +1 -1
  233. package/services/faqs/index.cjs +1 -1
  234. package/services/faqs/index.d.cts +1 -1
  235. package/services/faqs/index.d.ts +1 -1
  236. package/services/faqs/index.js +1 -1
  237. package/services/file/file.service.cjs +1 -1
  238. package/services/file/file.service.d.cts +1 -1
  239. package/services/file/file.service.d.ts +1 -1
  240. package/services/file/file.service.js +1 -1
  241. package/services/file/file.types.cjs +1 -1
  242. package/services/file/file.types.d.cts +1 -1
  243. package/services/file/file.types.d.ts +1 -1
  244. package/services/file/file.types.js +1 -1
  245. package/services/file/index.cjs +1 -1
  246. package/services/file/index.d.cts +1 -1
  247. package/services/file/index.d.ts +1 -1
  248. package/services/file/index.js +1 -1
  249. package/services/firebase/firebase-api.cjs +1 -1
  250. package/services/firebase/firebase-api.d.cts +1 -1
  251. package/services/firebase/firebase-api.d.ts +1 -1
  252. package/services/firebase/firebase-api.js +1 -1
  253. package/services/multimedia/config.example.cjs +1 -1
  254. package/services/multimedia/config.example.d.cts +1 -1
  255. package/services/multimedia/config.example.d.ts +1 -1
  256. package/services/multimedia/config.example.js +1 -1
  257. package/services/multimedia/index.cjs +1 -1
  258. package/services/multimedia/index.d.cts +1 -1
  259. package/services/multimedia/index.d.ts +1 -1
  260. package/services/multimedia/index.js +1 -1
  261. package/services/multimedia/multimedia.service.cjs +1 -1
  262. package/services/multimedia/multimedia.service.d.cts +1 -1
  263. package/services/multimedia/multimedia.service.d.ts +1 -1
  264. package/services/multimedia/multimedia.service.js +1 -1
  265. package/services/multimedia/multimedia.types.cjs +1 -1
  266. package/services/multimedia/multimedia.types.d.cts +1 -1
  267. package/services/multimedia/multimedia.types.d.ts +1 -1
  268. package/services/multimedia/multimedia.types.js +1 -1
  269. package/services/product/index.cjs +1 -1
  270. package/services/product/index.d.cts +1 -1
  271. package/services/product/index.d.ts +1 -1
  272. package/services/product/index.js +1 -1
  273. package/services/product/product.service.cjs +1 -1
  274. package/services/product/product.service.d.cts +1 -1
  275. package/services/product/product.service.d.ts +1 -1
  276. package/services/product/product.service.js +1 -1
  277. package/services/product/product.types.cjs +1 -1
  278. package/services/product/product.types.d.cts +1 -1
  279. package/services/product/product.types.d.ts +1 -1
  280. package/services/product/product.types.js +1 -1
  281. package/services/request.provider.cjs +1 -1
  282. package/services/request.provider.d.cts +1 -1
  283. package/services/request.provider.d.ts +1 -1
  284. package/services/request.provider.js +1 -1
  285. package/services/session.service.cjs +1 -1
  286. package/services/session.service.d.cts +1 -1
  287. package/services/session.service.d.ts +1 -1
  288. package/services/session.service.js +1 -1
  289. package/services/sessions-api.service.cjs +1 -1
  290. package/services/sessions-api.service.d.cts +1 -1
  291. package/services/sessions-api.service.d.ts +1 -1
  292. package/services/sessions-api.service.js +1 -1
  293. package/services/sessions.controller.cjs +1 -1
  294. package/services/sessions.controller.d.cts +1 -1
  295. package/services/sessions.controller.d.ts +1 -1
  296. package/services/sessions.controller.js +1 -1
  297. package/services/sessions.types.cjs +1 -1
  298. package/services/sessions.types.d.cts +1 -1
  299. package/services/sessions.types.d.ts +1 -1
  300. package/services/sessions.types.js +1 -1
  301. package/services/upload/index.cjs +1 -1
  302. package/services/upload/index.d.cts +1 -1
  303. package/services/upload/index.d.ts +1 -1
  304. package/services/upload/index.js +1 -1
  305. package/services/upload/upload.service.cjs +1 -1
  306. package/services/upload/upload.service.d.cts +1 -1
  307. package/services/upload/upload.service.d.ts +1 -1
  308. package/services/upload/upload.service.js +1 -1
  309. package/{skoda.theme-ChGMp526.d.cts → skoda.theme-BhoWwnaO.d.cts} +1 -1
  310. package/{skoda.theme-ChGMp526.d.ts → skoda.theme-BhoWwnaO.d.ts} +1 -1
  311. package/themes/custom/audi-dark.theme.cjs +1 -1
  312. package/themes/custom/audi-dark.theme.d.cts +2 -2
  313. package/themes/custom/audi-dark.theme.d.ts +2 -2
  314. package/themes/custom/audi-dark.theme.js +1 -1
  315. package/themes/custom/audi.theme.cjs +1 -1
  316. package/themes/custom/audi.theme.d.cts +2 -2
  317. package/themes/custom/audi.theme.d.ts +2 -2
  318. package/themes/custom/audi.theme.js +1 -1
  319. package/themes/custom/australia.theme.cjs +1 -1
  320. package/themes/custom/australia.theme.d.cts +2 -2
  321. package/themes/custom/australia.theme.d.ts +2 -2
  322. package/themes/custom/australia.theme.js +1 -1
  323. package/themes/custom/cuernavaca.theme.cjs +1 -1
  324. package/themes/custom/cuernavaca.theme.d.cts +2 -2
  325. package/themes/custom/cuernavaca.theme.d.ts +2 -2
  326. package/themes/custom/cuernavaca.theme.js +1 -1
  327. package/themes/custom/cupra-diagonal.theme.cjs +1 -1
  328. package/themes/custom/cupra-diagonal.theme.d.cts +2 -2
  329. package/themes/custom/cupra-diagonal.theme.d.ts +2 -2
  330. package/themes/custom/cupra-diagonal.theme.js +1 -1
  331. package/themes/custom/cupra-events.theme.cjs +1 -1
  332. package/themes/custom/cupra-events.theme.d.cts +2 -2
  333. package/themes/custom/cupra-events.theme.d.ts +2 -2
  334. package/themes/custom/cupra-events.theme.js +1 -1
  335. package/themes/custom/cupra.theme.cjs +1 -1
  336. package/themes/custom/cupra.theme.d.cts +2 -2
  337. package/themes/custom/cupra.theme.d.ts +2 -2
  338. package/themes/custom/cupra.theme.js +1 -1
  339. package/themes/custom/germany.theme.cjs +1 -1
  340. package/themes/custom/germany.theme.d.cts +2 -2
  341. package/themes/custom/germany.theme.d.ts +2 -2
  342. package/themes/custom/germany.theme.js +1 -1
  343. package/themes/custom/glass.theme.cjs +1 -1
  344. package/themes/custom/glass.theme.d.cts +1 -1
  345. package/themes/custom/glass.theme.d.ts +1 -1
  346. package/themes/custom/glass.theme.js +1 -1
  347. package/themes/custom/hyundai.theme.cjs +1 -1
  348. package/themes/custom/hyundai.theme.d.cts +2 -2
  349. package/themes/custom/hyundai.theme.d.ts +2 -2
  350. package/themes/custom/hyundai.theme.js +1 -1
  351. package/themes/custom/italy.theme.cjs +1 -1
  352. package/themes/custom/italy.theme.d.cts +2 -2
  353. package/themes/custom/italy.theme.d.ts +2 -2
  354. package/themes/custom/italy.theme.js +1 -1
  355. package/themes/custom/jac-dark.theme.cjs +1 -1
  356. package/themes/custom/jac-dark.theme.d.cts +2 -2
  357. package/themes/custom/jac-dark.theme.d.ts +2 -2
  358. package/themes/custom/jac-dark.theme.js +1 -1
  359. package/themes/custom/jac.theme.cjs +1 -1
  360. package/themes/custom/jac.theme.d.cts +2 -2
  361. package/themes/custom/jac.theme.d.ts +2 -2
  362. package/themes/custom/jac.theme.js +1 -1
  363. package/themes/custom/magimix.theme.cjs +1 -1
  364. package/themes/custom/magimix.theme.d.cts +2 -2
  365. package/themes/custom/magimix.theme.d.ts +2 -2
  366. package/themes/custom/magimix.theme.js +1 -1
  367. package/themes/custom/onlive-ai.theme.cjs +1 -1
  368. package/themes/custom/onlive-ai.theme.d.cts +2 -2
  369. package/themes/custom/onlive-ai.theme.d.ts +2 -2
  370. package/themes/custom/onlive-ai.theme.js +1 -1
  371. package/themes/custom/onlive.theme.cjs +1 -1
  372. package/themes/custom/onlive.theme.d.cts +2 -2
  373. package/themes/custom/onlive.theme.d.ts +2 -2
  374. package/themes/custom/onlive.theme.js +1 -1
  375. package/themes/custom/seat-cupra.theme.cjs +1 -1
  376. package/themes/custom/seat-cupra.theme.d.cts +2 -2
  377. package/themes/custom/seat-cupra.theme.d.ts +2 -2
  378. package/themes/custom/seat-cupra.theme.js +1 -1
  379. package/themes/custom/seat.theme.cjs +1 -1
  380. package/themes/custom/seat.theme.d.cts +2 -2
  381. package/themes/custom/seat.theme.d.ts +2 -2
  382. package/themes/custom/seat.theme.js +1 -1
  383. package/themes/custom/skoda.theme.cjs +1 -1
  384. package/themes/custom/skoda.theme.d.cts +2 -2
  385. package/themes/custom/skoda.theme.d.ts +2 -2
  386. package/themes/custom/skoda.theme.js +1 -1
  387. package/themes/custom/transparency.theme.cjs +1 -1
  388. package/themes/custom/transparency.theme.d.cts +2 -2
  389. package/themes/custom/transparency.theme.d.ts +2 -2
  390. package/themes/custom/transparency.theme.js +1 -1
  391. package/themes/dark.cjs +1 -1
  392. package/themes/dark.d.cts +2 -2
  393. package/themes/dark.d.ts +2 -2
  394. package/themes/dark.js +1 -1
  395. package/themes/light.cjs +1 -1
  396. package/themes/light.d.cts +2 -2
  397. package/themes/light.d.ts +2 -2
  398. package/themes/light.js +1 -1
  399. package/{transparency.theme-GZeoSWwI.d.cts → transparency.theme-CbIjRfrj.d.cts} +1 -1
  400. package/{transparency.theme-GZeoSWwI.d.ts → transparency.theme-CbIjRfrj.d.ts} +1 -1
  401. package/types/deep-link.types.cjs +1 -1
  402. package/types/deep-link.types.d.cts +1 -1
  403. package/types/deep-link.types.d.ts +1 -1
  404. package/types/deep-link.types.js +1 -1
  405. package/types/globals.cjs +1 -1
  406. package/types/globals.d.cts +1 -1
  407. package/types/globals.d.ts +1 -1
  408. package/types/globals.js +1 -1
  409. package/types/tracking-options.cjs +1 -1
  410. package/types/tracking-options.d.cts +1 -1
  411. package/types/tracking-options.d.ts +1 -1
  412. package/types/tracking-options.js +1 -1
  413. package/utils/adopt-styles.cjs +1 -1
  414. package/utils/adopt-styles.d.cts +1 -1
  415. package/utils/adopt-styles.d.ts +1 -1
  416. package/utils/adopt-styles.js +1 -1
  417. package/utils/apply-optional-styles.cjs +1 -1
  418. package/utils/apply-optional-styles.d.cts +22 -22
  419. package/utils/apply-optional-styles.d.ts +22 -22
  420. package/utils/apply-optional-styles.js +1 -1
  421. package/utils/browser-preferences.cjs +1 -1
  422. package/utils/browser-preferences.d.cts +1 -1
  423. package/utils/browser-preferences.d.ts +1 -1
  424. package/utils/browser-preferences.js +1 -1
  425. package/utils/classify-media.cjs +1 -1
  426. package/utils/classify-media.d.cts +1 -1
  427. package/utils/classify-media.d.ts +1 -1
  428. package/utils/classify-media.js +1 -1
  429. package/utils/decorators.cjs +1 -1
  430. package/utils/decorators.d.cts +1 -1
  431. package/utils/decorators.d.ts +1 -1
  432. package/utils/decorators.js +1 -1
  433. package/utils/detected-lang.cjs +1 -1
  434. package/utils/detected-lang.d.cts +1 -1
  435. package/utils/detected-lang.d.ts +1 -1
  436. package/utils/detected-lang.js +1 -1
  437. package/utils/fullscreen.cjs +1 -1
  438. package/utils/fullscreen.d.cts +1 -1
  439. package/utils/fullscreen.d.ts +1 -1
  440. package/utils/fullscreen.js +1 -1
  441. package/utils/insert-script.cjs +1 -1
  442. package/utils/insert-script.d.cts +1 -1
  443. package/utils/insert-script.d.ts +1 -1
  444. package/utils/insert-script.js +1 -1
  445. package/utils/is-map-compatible.cjs +1 -1
  446. package/utils/is-map-compatible.d.cts +1 -1
  447. package/utils/is-map-compatible.d.ts +1 -1
  448. package/utils/is-map-compatible.js +1 -1
  449. package/utils/markdown.cjs +1 -1
  450. package/utils/markdown.d.cts +1 -1
  451. package/utils/markdown.d.ts +1 -1
  452. package/utils/markdown.js +1 -1
  453. package/utils/merge.cjs +1 -1
  454. package/utils/merge.d.cts +1 -1
  455. package/utils/merge.d.ts +1 -1
  456. package/utils/merge.js +1 -1
  457. package/utils/multiband-track-volume.cjs +1 -1
  458. package/utils/multiband-track-volume.d.cts +1 -1
  459. package/utils/multiband-track-volume.d.ts +1 -1
  460. package/utils/multiband-track-volume.js +1 -1
  461. package/utils/onlive-url-params.cjs +1 -1
  462. package/utils/onlive-url-params.d.cts +1 -1
  463. package/utils/onlive-url-params.d.ts +1 -1
  464. package/utils/onlive-url-params.js +1 -1
  465. package/utils/pretty-distance.cjs +1 -1
  466. package/utils/pretty-distance.d.cts +1 -1
  467. package/utils/pretty-distance.d.ts +1 -1
  468. package/utils/pretty-distance.js +1 -1
  469. package/utils/pretty-time.cjs +1 -1
  470. package/utils/pretty-time.d.cts +1 -1
  471. package/utils/pretty-time.d.ts +1 -1
  472. package/utils/pretty-time.js +1 -1
  473. package/utils/random-string.cjs +1 -1
  474. package/utils/random-string.d.cts +1 -1
  475. package/utils/random-string.d.ts +1 -1
  476. package/utils/random-string.js +1 -1
  477. package/utils/resource-type.cjs +1 -1
  478. package/utils/resource-type.d.cts +1 -1
  479. package/utils/resource-type.d.ts +1 -1
  480. package/utils/resource-type.js +1 -1
  481. package/utils/round-number.cjs +1 -1
  482. package/utils/round-number.d.cts +1 -1
  483. package/utils/round-number.d.ts +1 -1
  484. package/utils/round-number.js +1 -1
  485. package/utils/safe-html.cjs +1 -1
  486. package/utils/safe-html.d.cts +1 -1
  487. package/utils/safe-html.d.ts +1 -1
  488. package/utils/safe-html.js +1 -1
  489. package/utils/sanitize.cjs +1 -1
  490. package/utils/sanitize.d.cts +1 -1
  491. package/utils/sanitize.d.ts +1 -1
  492. package/utils/sanitize.js +1 -1
  493. package/utils/spread.cjs +1 -1
  494. package/utils/spread.d.cts +1 -1
  495. package/utils/spread.d.ts +1 -1
  496. package/utils/spread.js +1 -1
  497. package/utils/watch.cjs +1 -1
  498. package/utils/watch.d.cts +1 -1
  499. package/utils/watch.d.ts +1 -1
  500. package/utils/watch.js +1 -1
package/index.js CHANGED
@@ -1,6 +1,6 @@
1
- /*! @onlive.ai/common-121 v0.2.227 | © 2026 Onlive.ai */
2
- import{a as m,b as Ge,c as Ye,d as Qe,e as We,f as Xe}from"./chunk-QP5HM4T4.js";import{html as fe,LitElement as di}from"lit";import{property as be,state as G}from"lit/decorators.js";import{classMap as pi}from"lit/directives/class-map.js";var Yt=(s,e)=>(customElements.get(s)?console.debug(`Custom element <${s}> is already defined, skipping definition of ${e.name}.`):window.customElements.define(s,e),e),Qt=(s,e)=>{let{kind:t,elements:i}=e;return{kind:t,elements:i,finisher(o){customElements.get(s)||window.customElements.define(s,o)}}},L=s=>e=>typeof e=="function"?Yt(s,e):Qt(s,e);var J=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(),a=`${this.getBaseUrl()}/settings/organization/${e}${o?`?${o}`:""}`,r=await fetch(a,{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[a,r]of Object.entries(e.extraFilters))if(r&&(Array.isArray(r)?r.length>0:r.toString().trim()!=="")){let n=Array.isArray(r)?r.join(","):r.toString();t.append(`extra_${a}`,n)}}let i=t.toString(),o=`/faqs${i?`?${i}`:""}`;return this.makeRequest(o)}async getFaqById(e){return this.makeRequest(`/faqs/${e}`,{})}};var g=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 B=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 a=1;a<=i;a++)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"),a===i)break;let n=2**a*1e3;await new Promise(l=>setTimeout(l,n))}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),g(e,{...t,headers:i})}updateConfig(e){this.config={...this.config,...e}}getConfig(){return{...this.config}}};var K=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,a,r]=await Promise.all([this.getImages(i),this.getVideos(i),this.getPresentations(i)]),n=[...o.items,...a.items,...r.items];return{items:n,total:n.length,count:n.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 a=Array.isArray(o)?o.join(","):o.toString();e.append(`extra_${i}`,a)}}}async makeRequest(e,t=!0){let i={"Content-Type":"application/json","X-Onlive-Organization-Id":this.config.organizationId};return g(e,{method:"GET",headers:i,credentials:t?"include":void 0})}updateConfig(e){this.config={...this.config,...e}}getConfig(){return{...this.config}}};var N=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 g(e,{method:"GET",headers:i,credentials:t?"include":"same-origin"})}updateConfig(e){this.config={...this.config,...e}}getConfig(){return{...this.config}}};var ge=class{constructor(e){e?.multimediaService&&(this.multimediaService=K.initialize(e.multimediaService)),e?.faqsService&&(this.faqsService=J.initialize(e.faqsService)),e?.productService&&(this.productService=N.initialize(e.productService)),e?.fileService&&(this.fileService=B.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/"),a=i.startsWith("image/");return{id:t.id,name:t.name,description:t.description||"",url:t.url,thumbnail:a?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}}}};import{html as c}from"lit";import{classMap as li}from"lit/directives/class-map.js";import{ifDefined as te}from"lit/directives/if-defined.js";import{when as D}from"lit/directives/when.js";import{unsafeHTML as Xt}from"lit/directives/unsafe-html.js";import Ze from"dompurify";var Wt={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};Ze.addHook("afterSanitizeAttributes",s=>{"target"in s&&s.target==="_blank"&&s.setAttribute("rel","noopener noreferrer")});var et=(s,e=Wt)=>Ze.sanitize(s,e);function tt(s=""){return Xt(Zt(s))}function Zt(s=""){return et(s,{ADD_ATTR:["target","rel","content","variant","size"],ADD_TAGS:["ol-"],CUSTOM_ELEMENT_HANDLING:{tagNameCheck:/^ol-/,attributeNameCheck:null,allowCustomizedBuiltInElements:!0}})}import"@onlive.ai/ui/dist/components/button/button.js";import"@onlive.ai/ui/dist/components/icon/icon.js";import{html as ot,LitElement as oi}from"lit";import{property as si,query as ai}from"lit/decorators.js";import{repeat as ri}from"lit/directives/repeat.js";import ni from"video.js";import{css as ei,unsafeCSS as ti}from"lit";import ii from"video.js/dist/video-js.min.css?inline";var it=ei`
3
- ${ti(ii)}
1
+ /*! @onlive.ai/common-121 v0.2.228 | © 2026 Onlive.ai */
2
+ import{a as u,b as Ge,c as Ye,d as Qe,e as We,f as Xe}from"./chunk-JB6NDWSG.js";import{html as fe,LitElement as hi}from"lit";import{property as be,state as K}from"lit/decorators.js";import{classMap as fi}from"lit/directives/class-map.js";var Yt=(s,e)=>(customElements.get(s)?console.debug(`Custom element <${s}> is already defined, skipping definition of ${e.name}.`):window.customElements.define(s,e),e),Qt=(s,e)=>{let{kind:t,elements:i}=e;return{kind:t,elements:i,finisher(o){customElements.get(s)||window.customElements.define(s,o)}}},H=s=>e=>typeof e=="function"?Yt(s,e):Qt(s,e);var V=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(),a=`${this.getBaseUrl()}/settings/organization/${e}${o?`?${o}`:""}`,r=await fetch(a,{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[a,r]of Object.entries(e.extraFilters))if(r&&(Array.isArray(r)?r.length>0:r.toString().trim()!=="")){let n=Array.isArray(r)?r.join(","):r.toString();t.append(`extra_${a}`,n)}}let i=t.toString(),o=`/faqs${i?`?${i}`:""}`;return this.makeRequest(o)}async getFaqById(e){return this.makeRequest(`/faqs/${e}`,{})}};var g=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 J=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 a=1;a<=i;a++)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"),a===i)break;let n=2**a*1e3;await new Promise(l=>setTimeout(l,n))}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),g(e,{...t,headers:i})}updateConfig(e){this.config={...this.config,...e}}getConfig(){return{...this.config}}};var B=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,a,r]=await Promise.all([this.getImages(i),this.getVideos(i),this.getPresentations(i)]),n=[...o.items,...a.items,...r.items];return{items:n,total:n.length,count:n.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 a=Array.isArray(o)?o.join(","):o.toString();e.append(`extra_${i}`,a)}}}async makeRequest(e,t=!0){let i={"Content-Type":"application/json","X-Onlive-Organization-Id":this.config.organizationId};return g(e,{method:"GET",headers:i,credentials:t?"include":void 0})}updateConfig(e){this.config={...this.config,...e}}getConfig(){return{...this.config}}};var q=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 g(e,{method:"GET",headers:i,credentials:t?"include":"same-origin"})}updateConfig(e){this.config={...this.config,...e}}getConfig(){return{...this.config}}};var ge=class{constructor(e){e?.multimediaService&&(this.multimediaService=B.initialize(e.multimediaService)),e?.faqsService&&(this.faqsService=V.initialize(e.faqsService)),e?.productService&&(this.productService=q.initialize(e.productService)),e?.fileService&&(this.fileService=J.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/"),a=i.startsWith("image/");return{id:t.id,name:t.name,description:t.description||"",url:t.url,thumbnail:a?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}}}};import{html as c}from"lit";import{classMap as gi}from"lit/directives/class-map.js";import{ifDefined as te}from"lit/directives/if-defined.js";import{when as L}from"lit/directives/when.js";import{unsafeHTML as Xt}from"lit/directives/unsafe-html.js";import Ze from"dompurify";var Wt={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};Ze.addHook("afterSanitizeAttributes",s=>{"target"in s&&s.target==="_blank"&&s.setAttribute("rel","noopener noreferrer")});var et=(s,e=Wt)=>Ze.sanitize(s,e);function tt(s=""){return Xt(Zt(s))}function Zt(s=""){return et(s,{ADD_ATTR:["target","rel","content","variant","size"],ADD_TAGS:["ol-"],CUSTOM_ELEMENT_HANDLING:{tagNameCheck:/^ol-/,attributeNameCheck:null,allowCustomizedBuiltInElements:!0}})}import"@onlive.ai/ui/dist/components/button/button.js";import"@onlive.ai/ui/dist/components/icon/icon.js";import{html as it,LitElement as ai}from"lit";import{property as ri,query as ni}from"lit/decorators.js";import{repeat as li}from"lit/directives/repeat.js";import ci from"video.js";import{css as di,unsafeCSS as pi}from"lit";import mi from"video.js/dist/video-js.min.css?inline";var ei=Object.defineProperty,ti=Object.getOwnPropertyDescriptor,Ee=(s,e,t,i)=>{for(var o=i>1?void 0:i?ti(e,t):e,a=s.length-1,r;a>=0;a--)(r=s[a])&&(o=(i?r(e,t,o):r(o))||o);return i&&o&&ei(e,t,o),o},ii=(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)}}},si=s=>e=>typeof e=="function"?ii(s,e):oi(s,e),ui=di`
3
+ ${pi(mi)}
4
4
  .och__player {
5
5
  width: 100%;
6
6
  height: auto;
@@ -13,18 +13,18 @@ import{a as m,b as Ge,c as Ye,d as Qe,e as We,f as Xe}from"./chunk-QP5HM4T4.js";
13
13
  background: transparent;
14
14
  transition: all 0.2s ease;
15
15
  }
16
- `;var H=class extends oi{constructor(){super(...arguments);this.sources=[];this.player=null}connectedCallback(){super.connectedCallback();let t="videojs-font-face";if(!document.head.querySelector(`#${t}`)){let i=document.createElement("style");i.id=t,i.innerHTML=`
16
+ `,ee=class extends ai{constructor(){super(...arguments),this.sources=[],this.player=null}connectedCallback(){super.connectedCallback();let s="videojs-font-face";if(!document.head.querySelector(`#${s}`)){let e=document.createElement("style");e.id=s,e.innerHTML=`
17
17
  @font-face {
18
18
  font-family: VideoJS;
19
19
  src:
20
20
  url(https://cdn.onlive.site/fonts/video-js/font/VideoJS.woff) format("woff"),
21
21
  url(https://cdn.onlive.site/fonts/video-js/font/VideoJS.ttf) format("truetype");
22
- }`,document.head.appendChild(i)}}firstUpdated(){this.$player&&(this.player=ni(this.$player,{controls:!0,controlBar:{children:["playToggle","progressControl","volumePanel","fullscreenToggle"]}}))}play(){this.player?.play()}pause(){this.player?.pause()}render(){return ot`
22
+ }`,document.head.appendChild(e)}}firstUpdated(){this.$player&&(this.player=ci(this.$player,{controls:!0,controlBar:{children:["playToggle","progressControl","volumePanel","fullscreenToggle"]}}))}play(){this.player?.play()}pause(){this.player?.pause()}render(){return it`
23
23
  <video
24
24
  id="player"
25
25
  class="och__player video-js video-js vjs-16-9 vjs-controls-enabled vjs-workinghover vjs-v8 vjs-theme-sea vjs_video_2321-dimensions vjs-has-started vjs-paused vjs-user-inactive"
26
26
  >
27
- ${ri(this.sources,t=>t.src,t=>ot`<source src=${t.src} type=${t.type}></source>`)}
27
+ ${li(this.sources,s=>s.src,s=>it`<source src=${s.src} type=${s.type}></source>`)}
28
28
  <p class="vjs-no-js">
29
29
  To view this video please enable JavaScript, and consider upgrading to a web browser that
30
30
  <a href="https://videojs.com/html5-video-support/" target="_blank"> supports HTML5 video </a>
@@ -2041,7 +2041,7 @@ video::-webkit-media-text-track-display {
2041
2041
  transition: all 0.2s ease;
2042
2042
  }
2043
2043
  </style>
2044
- `}};H.styles=[it],m([si({type:Array})],H.prototype,"sources",2),m([ai("#player")],H.prototype,"$player",2),H=m([L("och-player")],H);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,a,r){return!t.showThumbnail||e.type==="faq"?c``:c`
2044
+ `}};ee.styles=[ui],Ee([ri({type:Array})],ee.prototype,"sources",2),Ee([ni("#player")],ee.prototype,"$player",2),ee=Ee([si("och-player")],ee);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,a,r){return!t.showThumbnail||e.type==="faq"?c``:c`
2045
2045
  <div class="ol-asset__thumbnail">
2046
2046
  ${this.renderThumbnailContent(e)}
2047
2047
  ${this.renderMetadata(e,t)}
@@ -2073,7 +2073,7 @@ video::-webkit-media-text-track-display {
2073
2073
  ></och-player>
2074
2074
  `}renderPresentationThumbnail(e){return c`
2075
2075
  <div class="ol-asset__presentation-preview">
2076
- ${D(e.slides&&e.slides.length>0,()=>c`
2076
+ ${L(e.slides&&e.slides.length>0,()=>c`
2077
2077
  <img
2078
2078
  src="${e.slides[0]}"
2079
2079
  alt="Presentation preview"
@@ -2097,7 +2097,7 @@ video::-webkit-media-text-track-display {
2097
2097
  `}renderThumbnailOverlay(e){let t=[];if(e.type==="multimedia"||e.type==="file"){let i=e;this.getMultimediaSubtype(i)==="video"&&i.duration&&t.push(c`
2098
2098
  <div class="ol-asset__duration">${this.formatDuration(i.duration)}</div>
2099
2099
  `)}return c`${t}`}renderContent(e,t){let i=!t.showName&&!t.showDescription&&!t.showTags&&(e.type!=="product"||!t.showPrice);return c`
2100
- <div class=${li({"ol-asset__content":!0,"ol-asset__content--assets":!!i})}>
2100
+ <div class=${gi({"ol-asset__content":!0,"ol-asset__content--assets":!!i})}>
2101
2101
  ${this.renderName(e,t)}
2102
2102
  ${this.renderDescription(e,t)}
2103
2103
  ${this.renderPrice(e,t)}
@@ -2205,7 +2205,7 @@ video::-webkit-media-text-track-display {
2205
2205
  </div>
2206
2206
  `}}renderHoverOverlay(e,t,i,o,a){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`
2207
2207
  <div class="ol-asset__video-controls">
2208
- ${D(i,()=>c`
2208
+ ${L(i,()=>c`
2209
2209
  <ol-button
2210
2210
  class="ol-asset__video-btn ol-asset__video-btn--maximize"
2211
2211
  @click=${l=>{l.stopPropagation(),i(e)}}
@@ -2216,14 +2216,14 @@ video::-webkit-media-text-track-display {
2216
2216
  </svg>
2217
2217
  </ol-button>
2218
2218
  `)}
2219
- ${D(t,()=>c`
2219
+ ${L(t,()=>c`
2220
2220
  <ol-button
2221
2221
  class="ol-asset__video-btn ol-asset__video-btn--download ${o?"ol-asset__video-btn--downloading":""}"
2222
2222
  @click=${l=>{l.stopPropagation(),t(e)}}
2223
2223
  title="Download ${e.name}"
2224
2224
  ?disabled=${o}
2225
2225
  >
2226
- ${D(o,()=>c`
2226
+ ${L(o,()=>c`
2227
2227
  <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="ol-asset__download-spinner">
2228
2228
  <circle cx="12" cy="12" r="10"></circle>
2229
2229
  <path d="M12 2a10 10 0 0 1 10 10"></path>
@@ -2241,7 +2241,7 @@ video::-webkit-media-text-track-display {
2241
2241
  `:c`
2242
2242
  <div class="ol-asset__hover-overlay">
2243
2243
  <div class="ol-asset__hover-buttons">
2244
- ${D(e.type==="product",()=>c`
2244
+ ${L(e.type==="product",()=>c`
2245
2245
  <ol-button
2246
2246
  class="ol-asset__hover-btn ol-asset__hover-btn--external"
2247
2247
  @click=${l=>{l.stopPropagation(),e.url&&(a?a(e.url):window.open(e.url,"_blank","noopener,noreferrer"))}}
@@ -2254,7 +2254,7 @@ video::-webkit-media-text-track-display {
2254
2254
  </svg>
2255
2255
  </ol-button>
2256
2256
  `,()=>c`
2257
- ${D(i&&!n,()=>c`
2257
+ ${L(i&&!n,()=>c`
2258
2258
  <ol-button
2259
2259
  class="ol-asset__hover-btn ol-asset__hover-btn--maximize"
2260
2260
  @click=${l=>{l.stopPropagation(),i(e)}}
@@ -2265,14 +2265,14 @@ video::-webkit-media-text-track-display {
2265
2265
  </svg>
2266
2266
  </ol-button>
2267
2267
  `)}
2268
- ${D(t&&["multimedia","file"].includes(e.type),()=>c`
2268
+ ${L(t&&["multimedia","file"].includes(e.type),()=>c`
2269
2269
  <ol-button
2270
2270
  class="ol-asset__hover-btn ol-asset__hover-btn--download ${o?"ol-asset__hover-btn--downloading":""}"
2271
2271
  @click=${l=>{l.stopPropagation(),t(e)}}
2272
2272
  title="Download ${e.name}"
2273
2273
  ?disabled=${o}
2274
2274
  >
2275
- ${D(o,()=>c`
2275
+ ${L(o,()=>c`
2276
2276
  <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="ol-asset__download-spinner">
2277
2277
  <circle cx="12" cy="12" r="10"></circle>
2278
2278
  <path d="M12 2a10 10 0 0 1 10 10"></path>
@@ -2289,7 +2289,7 @@ video::-webkit-media-text-track-display {
2289
2289
  `)}
2290
2290
  </div>
2291
2291
  </div>
2292
- `}};import{css as ci}from"lit";var st=ci`
2292
+ `}};import{css as vi}from"lit";var ot=vi`
2293
2293
  :host {
2294
2294
  display: block;
2295
2295
  --asset-border-radius: 8px;
@@ -3453,15 +3453,15 @@ video::-webkit-media-text-track-display {
3453
3453
  `:""}
3454
3454
  </div>
3455
3455
  </div>
3456
- `;else if(h==="presentation")if(l.slides&&l.slides.length>0){let u=l.slides;a=`
3456
+ `;else if(h==="presentation")if(l.slides&&l.slides.length>0){let m=l.slides;a=`
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">
3460
- ${u.map((Ie,Ee)=>`
3460
+ ${m.map((Te,Ie)=>`
3461
3461
  <ol-carousel-item>
3462
3462
  <img
3463
- src="${Ie}"
3464
- alt="Slide ${Ee+1} of ${u.length}"
3463
+ src="${Te}"
3464
+ alt="Slide ${Ie+1} of ${m.length}"
3465
3465
  class="ol-asset__modal-slide-image"
3466
3466
  />
3467
3467
  </ol-carousel-item>
@@ -3479,7 +3479,7 @@ video::-webkit-media-text-track-display {
3479
3479
  </div>
3480
3480
  <div class="ol-asset__modal-metadata-item">
3481
3481
  <ol-icon name="layers"></ol-icon>
3482
- <span class="ol-asset__modal-slides">${u.length} ${u.length===1?"slide":"slides"}</span>
3482
+ <span class="ol-asset__modal-slides">${m.length} ${m.length===1?"slide":"slides"}</span>
3483
3483
  </div>
3484
3484
  </div>
3485
3485
  </div>
@@ -3545,15 +3545,15 @@ video::-webkit-media-text-track-display {
3545
3545
  `:""}
3546
3546
  </div>
3547
3547
  </div>
3548
- `;else if(h==="presentation")if(l.slides&&l.slides.length>0){let u=l.slides;a=`
3548
+ `;else if(h==="presentation")if(l.slides&&l.slides.length>0){let m=l.slides;a=`
3549
3549
  <div class="ol-asset__modal-media-container" data-type="presentation">
3550
3550
  <div class="ol-asset__modal-presentation">
3551
3551
  <ol-carousel pagination navigation loop class="ol-asset__modal-carousel">
3552
- ${u.map((Ie,Ee)=>`
3552
+ ${m.map((Te,Ie)=>`
3553
3553
  <ol-carousel-item>
3554
3554
  <img
3555
- src="${Ie}"
3556
- alt="Slide ${Ee+1} of ${u.length}"
3555
+ src="${Te}"
3556
+ alt="Slide ${Ie+1} of ${m.length}"
3557
3557
  class="ol-asset__modal-slide-image"
3558
3558
  />
3559
3559
  </ol-carousel-item>
@@ -3571,7 +3571,7 @@ video::-webkit-media-text-track-display {
3571
3571
  </div>
3572
3572
  <div class="ol-asset__modal-metadata-item">
3573
3573
  <ol-icon name="layers"></ol-icon>
3574
- <span class="ol-asset__modal-slides">${u.length} ${u.length===1?"slide":"slides"}</span>
3574
+ <span class="ol-asset__modal-slides">${m.length} ${m.length===1?"slide":"slides"}</span>
3575
3575
  </div>
3576
3576
  </div>
3577
3577
  </div>
@@ -3611,7 +3611,7 @@ video::-webkit-media-text-track-display {
3611
3611
  </div>
3612
3612
  </div>
3613
3613
  </ol-dialog>
3614
- `}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 y=class extends di{constructor(){super(...arguments);this.displayState="normal";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 ge(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(),a=window.URL.createObjectURL(o),r=document.createElement("a");r.href=a,r.download=this.getDownloadFilename(t),r.style.display="none",document.body.appendChild(r),r.click(),document.body.removeChild(r),setTimeout(()=>window.URL.revokeObjectURL(a),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(),a=window.URL.createObjectURL(o),r=document.createElement("a");r.href=a,r.download=this.getDownloadFilename(t),r.style.display="none",document.body.appendChild(r),r.click(),document.body.removeChild(r),setTimeout(()=>window.URL.revokeObjectURL(a),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 a=new URL(t.url).pathname,r=a.lastIndexOf(".");if(r>0)return a.substring(r)}return{multimedia:".jpg",file:".bin",product:".jpg",faq:".txt"}[t.type]||""}async openModal(){this.asset&&(this.modalPortal=new he(this.asset,this.closeModal.bind(this),this.displayState),await this.modalPortal.open())}onOpenLink(t){this.dispatchEvent(new CustomEvent("open-link",{detail:{url:t},bubbles:!0,composed:!0}))}onMaximize(){if(console.debug("Maximize clicked for asset:",this.asset),!!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"?fe`
3614
+ `}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 y=class extends hi{constructor(){super(...arguments);this.displayState="normal";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 ge(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(),a=window.URL.createObjectURL(o),r=document.createElement("a");r.href=a,r.download=this.getDownloadFilename(t),r.style.display="none",document.body.appendChild(r),r.click(),document.body.removeChild(r),setTimeout(()=>window.URL.revokeObjectURL(a),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(),a=window.URL.createObjectURL(o),r=document.createElement("a");r.href=a,r.download=this.getDownloadFilename(t),r.style.display="none",document.body.appendChild(r),r.click(),document.body.removeChild(r),setTimeout(()=>window.URL.revokeObjectURL(a),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 a=new URL(t.url).pathname,r=a.lastIndexOf(".");if(r>0)return a.substring(r)}return{multimedia:".jpg",file:".bin",product:".jpg",faq:".txt"}[t.type]||""}async openModal(){this.asset&&(this.modalPortal=new he(this.asset,this.closeModal.bind(this),this.displayState),await this.modalPortal.open())}onOpenLink(t){this.dispatchEvent(new CustomEvent("open-link",{detail:{url:t},bubbles:!0,composed:!0}))}onMaximize(){if(console.debug("Maximize clicked for asset:",this.asset),!!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"?fe`
3615
3615
  <div class="ol-asset ol-asset--loading">
3616
3616
  ${this.assetRenderer.renderLoading()}
3617
3617
  </div>
@@ -3621,12 +3621,12 @@ video::-webkit-media-text-track-display {
3621
3621
  </div>
3622
3622
  `:this.asset?fe`
3623
3623
  <div
3624
- class="ol-asset ${pi({"ol-asset--compact":t.layout==="compact","ol-asset--minimal":t.layout==="minimal","ol-asset--small":t.size==="small","ol-asset--medium":t.size==="medium","ol-asset--large":t.size==="large","ol-asset--faq":this.asset.type==="faq"})}"
3624
+ class="ol-asset ${fi({"ol-asset--compact":t.layout==="compact","ol-asset--minimal":t.layout==="minimal","ol-asset--small":t.size==="small","ol-asset--medium":t.size==="medium","ol-asset--large":t.size==="large","ol-asset--faq":this.asset.type==="faq"})}"
3625
3625
  >
3626
3626
  ${this.assetRenderer.renderThumbnail(this.asset,t,this.onDownload.bind(this),this.isDownloading,this.onMaximize.bind(this),this.onOpenLink.bind(this))}
3627
3627
  ${this.assetRenderer.renderContent(this.asset,t)}
3628
3628
  </div>
3629
- `:fe``}};y.styles=[st],m([be({type:String})],y.prototype,"type",2),m([be({type:String})],y.prototype,"externalId",2),m([be({type:Object})],y.prototype,"config",2),m([be({type:String,attribute:"display-state"})],y.prototype,"displayState",2),m([G()],y.prototype,"asset",2),m([G()],y.prototype,"loadingState",2),m([G()],y.prototype,"error",2),m([G()],y.prototype,"assetLoader",2),m([G()],y.prototype,"assetRenderer",2),m([G()],y.prototype,"isDownloading",2),y=m([L("osb-asset")],y);import"@onlive.ai/ui/dist/components/button/button.js";import"@onlive.ai/ui/dist/components/details/details.js";import"@onlive.ai/ui/dist/components/icon/icon.js";import"@onlive.ai/ui/dist/components/input/input.js";import"@onlive.ai/ui/dist/components/option/option.js";import"@onlive.ai/ui/dist/components/select/select.js";import{html as d,LitElement as vi}from"lit";import{property as ye,state as w}from"lit/decorators.js";import{classMap as Y}from"lit/directives/class-map.js";import{ifDefined as ie}from"lit/directives/if-defined.js";import{repeat as Oe}from"lit/directives/repeat.js";import{when as k}from"lit/directives/when.js";import"@onlive.ai/ui/dist/components/button/button.js";import"@onlive.ai/ui/dist/components/dropdown/dropdown.js";import"@onlive.ai/ui/dist/components/icon/icon.js";import"@onlive.ai/ui/dist/components/menu-item/menu-item.js";import"@onlive.ai/ui/dist/components/menu/menu.js";import{html as ze,LitElement as ui}from"lit";import{property as rt}from"lit/decorators.js";import{css as mi}from"lit";var at=mi`
3629
+ `:fe``}};y.styles=[ot],u([be({type:String})],y.prototype,"type",2),u([be({type:String})],y.prototype,"externalId",2),u([be({type:Object})],y.prototype,"config",2),u([be({type:String,attribute:"display-state"})],y.prototype,"displayState",2),u([K()],y.prototype,"asset",2),u([K()],y.prototype,"loadingState",2),u([K()],y.prototype,"error",2),u([K()],y.prototype,"assetLoader",2),u([K()],y.prototype,"assetRenderer",2),u([K()],y.prototype,"isDownloading",2),y=u([H("osb-asset")],y);import"@onlive.ai/ui/dist/components/button/button.js";import"@onlive.ai/ui/dist/components/details/details.js";import"@onlive.ai/ui/dist/components/icon/icon.js";import"@onlive.ai/ui/dist/components/input/input.js";import"@onlive.ai/ui/dist/components/option/option.js";import"@onlive.ai/ui/dist/components/select/select.js";import{html as d,LitElement as ji}from"lit";import{property as ye,state as w}from"lit/decorators.js";import{classMap as G}from"lit/directives/class-map.js";import{ifDefined as ie}from"lit/directives/if-defined.js";import{repeat as Oe}from"lit/directives/repeat.js";import{when as k}from"lit/directives/when.js";import"@onlive.ai/ui/dist/components/button/button.js";import"@onlive.ai/ui/dist/components/dropdown/dropdown.js";import"@onlive.ai/ui/dist/components/icon/icon.js";import"@onlive.ai/ui/dist/components/menu-item/menu-item.js";import"@onlive.ai/ui/dist/components/menu/menu.js";import{html as ze,LitElement as yi}from"lit";import{property as at}from"lit/decorators.js";import{css as bi}from"lit";var st=bi`
3630
3630
  :host {
3631
3631
  display: inline-block;
3632
3632
  }
@@ -3689,7 +3689,7 @@ video::-webkit-media-text-track-display {
3689
3689
  background: var(--ol-color-success-300, #86efac);
3690
3690
  transform: scale(1.1);
3691
3691
  }
3692
- `;var x=class extends ui{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 a=o.target.files?.[0];a&&this.handleFileSelection(a,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 a=t.name.toLowerCase(),r=this.getAllowedExtensions(i);return r.some(l=>a.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?ze`<div class="ol-upload ol-upload--empty">No hay tipos de archivo disponibles</div>`:ze`
3692
+ `;var x=class extends yi{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 a=o.target.files?.[0];a&&this.handleFileSelection(a,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 a=t.name.toLowerCase(),r=this.getAllowedExtensions(i);return r.some(l=>a.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?ze`<div class="ol-upload ol-upload--empty">No hay tipos de archivo disponibles</div>`:ze`
3693
3693
  <div class="ol-upload">
3694
3694
  <ol-dropdown placement="bottom-start" distance="8">
3695
3695
  <div slot="trigger">
@@ -3707,7 +3707,7 @@ video::-webkit-media-text-track-display {
3707
3707
  </ol-menu>
3708
3708
  </ol-dropdown>
3709
3709
  </div>
3710
- `}getIconName(t){switch(t){case"image":return"image";case"video":return"file-play";case"document":return"file-text";default:return"file"}}};x.styles=[at],m([rt({type:Object})],x.prototype,"config",2),m([rt({type:Object})],x.prototype,"events",2),x=m([L("osb-upload")],x);import{css as gi}from"lit";var nt=gi`
3710
+ `}getIconName(t){switch(t){case"image":return"image";case"video":return"file-play";case"document":return"file-text";default:return"file"}}};x.styles=[st],u([at({type:Object})],x.prototype,"config",2),u([at({type:Object})],x.prototype,"events",2),x=u([H("osb-upload")],x);import{css as ki}from"lit";var rt=ki`
3711
3711
  :host {
3712
3712
  display: block;
3713
3713
  position: fixed;
@@ -4506,7 +4506,7 @@ video::-webkit-media-text-track-display {
4506
4506
  height: 120px;
4507
4507
  }
4508
4508
  }
4509
- `;var A={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 v=class extends vi{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=K.initialize(this.config.multimediaService)),this.config?.productService&&(this.productService=N.initialize(this.config.productService)),this.config?.faqsService&&(this.faqsService=J.initialize(this.config.faqsService)),this.config?.fileService&&(this.fileService=B.initialize(this.config.fileService))}initializeCategoryStates(){(this.config?.customCategories||Object.keys(A)).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,a)=>o.order-a.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,a]of Object.entries(t))a!=null&&(Array.isArray(a)?a.length>0&&(i[o]=a.join(",")):typeof a=="string"&&a.trim()!==""&&(a==="true"?i[o]=!0:a==="false"?i[o]=!1:!isNaN(Number(a))&&a.trim()!==""?i[o]=Number(a):i[o]=a));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 a=this.categoryStates.get(t);if(!a)return;this.updateCategoryState(t,{loading:!0,error:void 0});let r=this.hasActiveFilters()?this.activeFilters:void 0;try{let n=[],l=0;switch(t){case"products":{let u=await this.productService.getProducts({title:i,limit:a.pagination.limit,includeSecureToken:!0,extraFields:this.convertToExtraFields(r)});n=this.mapProductsToAssetItems(u),l=u.length;break}case"images":{let u=await this.multimediaService.getImages({search:i,page:o,limit:a.pagination.limit,includeSecureToken:!0,extraFilters:r});n=this.mapMultimediaToAssetItems(u.items,"images"),l=u.total;break}case"videos":{let u=await this.multimediaService.getVideos({search:i,page:o,limit:a.pagination.limit,includeSecureToken:!0,extraFilters:r});n=this.mapMultimediaToAssetItems(u.items,"videos"),l=u.total;break}case"presentations":{let u=await this.multimediaService.getPresentations({search:i,page:o,limit:a.pagination.limit,includeSecureToken:!0,extraFilters:r});n=this.mapMultimediaToAssetItems(u.items,"presentations"),l=u.total;break}case"faqs":{let u=await this.faqsService.getFaqs({search:i,isActive:!0,page:o,organizationId:this.config?.faqsService?.organizationId,limit:a.pagination.limit,sortBy:"priority",sortOrder:"desc",extraFilters:r});n=this.mapFaqsToAssetItems(u.data),l=u.total;break}}let h=o===1?n:[...a.items,...n];this.updateCategoryState(t,{items:h,pagination:{...a.pagination,page:o,total:l,hasMore:h.length<l,loading:!1},searchQuery:i,loading:!1})}catch(n){console.error(`Error loading ${t} data:`,n),this.updateCategoryState(t,{loading:!1,error:n instanceof Error?n.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(A);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(A);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,...a}=this.activeFilters;this.activeFilters=a}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(A);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?d`
4509
+ `;var A={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 v=class extends ji{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=B.initialize(this.config.multimediaService)),this.config?.productService&&(this.productService=q.initialize(this.config.productService)),this.config?.faqsService&&(this.faqsService=V.initialize(this.config.faqsService)),this.config?.fileService&&(this.fileService=J.initialize(this.config.fileService))}initializeCategoryStates(){(this.config?.customCategories||Object.keys(A)).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,a)=>o.order-a.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,a]of Object.entries(t))a!=null&&(Array.isArray(a)?a.length>0&&(i[o]=a.join(",")):typeof a=="string"&&a.trim()!==""&&(a==="true"?i[o]=!0:a==="false"?i[o]=!1:!isNaN(Number(a))&&a.trim()!==""?i[o]=Number(a):i[o]=a));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 a=this.categoryStates.get(t);if(!a)return;this.updateCategoryState(t,{loading:!0,error:void 0});let r=this.hasActiveFilters()?this.activeFilters:void 0;try{let n=[],l=0;switch(t){case"products":{let m=await this.productService.getProducts({title:i,limit:a.pagination.limit,includeSecureToken:!0,extraFields:this.convertToExtraFields(r)});n=this.mapProductsToAssetItems(m),l=m.length;break}case"images":{let m=await this.multimediaService.getImages({search:i,page:o,limit:a.pagination.limit,includeSecureToken:!0,extraFilters:r});n=this.mapMultimediaToAssetItems(m.items,"images"),l=m.total;break}case"videos":{let m=await this.multimediaService.getVideos({search:i,page:o,limit:a.pagination.limit,includeSecureToken:!0,extraFilters:r});n=this.mapMultimediaToAssetItems(m.items,"videos"),l=m.total;break}case"presentations":{let m=await this.multimediaService.getPresentations({search:i,page:o,limit:a.pagination.limit,includeSecureToken:!0,extraFilters:r});n=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:a.pagination.limit,sortBy:"priority",sortOrder:"desc",extraFilters:r});n=this.mapFaqsToAssetItems(m.data),l=m.total;break}}let h=o===1?n:[...a.items,...n];this.updateCategoryState(t,{items:h,pagination:{...a.pagination,page:o,total:l,hasMore:h.length<l,loading:!1},searchQuery:i,loading:!1})}catch(n){console.error(`Error loading ${t} data:`,n),this.updateCategoryState(t,{loading:!1,error:n instanceof Error?n.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(A);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(A);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,...a}=this.activeFilters;this.activeFilters=a}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(A);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?d`
4510
4510
  <div class="ol-sidebar__extra-filters">
4511
4511
  ${Oe(this.extraFilters,t=>t.name,t=>this.renderFilter(t))}
4512
4512
  </div>
@@ -4569,7 +4569,7 @@ video::-webkit-media-text-track-display {
4569
4569
  </div>
4570
4570
  `}renderAssetItem(t,i){return d`
4571
4571
  <div
4572
- class="ol-sidebar__asset-item ${Y({"ol-sidebar__asset-item--grid":i.layout==="grid","ol-sidebar__asset-item--list":i.layout==="list","ol-sidebar__asset-item--faq":t.type==="faqs","ol-sidebar__asset-item--disabled":this.disabled})}"
4572
+ class="ol-sidebar__asset-item ${G({"ol-sidebar__asset-item--grid":i.layout==="grid","ol-sidebar__asset-item--list":i.layout==="list","ol-sidebar__asset-item--faq":t.type==="faqs","ol-sidebar__asset-item--disabled":this.disabled})}"
4573
4573
  @click=${()=>this.onItemSelect(t)}
4574
4574
  >
4575
4575
  ${this.renderAssetThumbnail(t)}
@@ -4605,7 +4605,7 @@ video::-webkit-media-text-track-display {
4605
4605
  ${this.renderAssetTags(t,i)}
4606
4606
  </div>
4607
4607
  `}renderAssetName(t){return d`
4608
- <div class="ol-sidebar__asset-name ${Y({"ol-sidebar__asset-name--faq":t.type==="faqs"})}">
4608
+ <div class="ol-sidebar__asset-name ${G({"ol-sidebar__asset-name--faq":t.type==="faqs"})}">
4609
4609
  ${t.name}
4610
4610
  </div>
4611
4611
  `}renderAssetPrice(t){return d`
@@ -4640,7 +4640,7 @@ video::-webkit-media-text-track-display {
4640
4640
  `)}
4641
4641
  `}renderAssetDescription(t,i){return d`
4642
4642
  ${k(i.showDescription&&t.description&&t.type!=="products",()=>d`
4643
- <div class="ol-sidebar__asset-description ${Y({"ol-sidebar__asset-description--faq":t.type==="faqs"})}">
4643
+ <div class="ol-sidebar__asset-description ${G({"ol-sidebar__asset-description--faq":t.type==="faqs"})}">
4644
4644
  ${t.description}
4645
4645
  </div>
4646
4646
  `)}
@@ -4678,7 +4678,7 @@ video::-webkit-media-text-track-display {
4678
4678
  `)}
4679
4679
 
4680
4680
  ${k(i.items.length>0,()=>d`
4681
- <div class="ol-sidebar__assets ${Y({"ol-sidebar__assets--list":o.displayOptions.layout==="list"})}">
4681
+ <div class="ol-sidebar__assets ${G({"ol-sidebar__assets--list":o.displayOptions.layout==="list"})}">
4682
4682
  ${Oe(i.items,a=>a.id,a=>this.renderAssetItem(a,o.displayOptions))}
4683
4683
  </div>
4684
4684
  `)}
@@ -4702,7 +4702,7 @@ video::-webkit-media-text-track-display {
4702
4702
  `)}
4703
4703
  </div>
4704
4704
  `:d``}formatFileSize(t){let i=["B","KB","MB","GB"];if(t===0)return"0 B";let o=Math.floor(Math.log(t)/Math.log(1024));return Math.round(t/1024**o*100)/100+" "+i[o]}getFormat(t){return t.split("/")[1]}formatDuration(t){let i=Math.floor(t/60),o=Math.floor(t%60);return`${i}:${o.toString().padStart(2,"0")}`}render(){let t=this.config?.customCategories||Object.keys(A);return d`
4705
- <div class="ol-sidebar ${Y({"ol-sidebar--disabled":this.disabled})}">
4705
+ <div class="ol-sidebar ${G({"ol-sidebar--disabled":this.disabled})}">
4706
4706
  <div class="ol-sidebar__header">
4707
4707
  <div class="ol-sidebar__header-top">
4708
4708
  <h2 class="ol-sidebar__title">Assets</h2>
@@ -4754,7 +4754,7 @@ video::-webkit-media-text-track-display {
4754
4754
  <div class="ol-sidebar__content">
4755
4755
  ${Oe(t,i=>i,i=>A[i].enabled?d`
4756
4756
  <ol-details
4757
- class="ol-sidebar__category ${Y({"ol-sidebar__category--disabled":this.disabled})}"
4757
+ class="ol-sidebar__category ${G({"ol-sidebar__category--disabled":this.disabled})}"
4758
4758
  summary=""
4759
4759
  ?disabled=${this.disabled}
4760
4760
  @ol-show=${()=>this.onCategoryToggle(i)}
@@ -4767,4 +4767,5 @@ video::-webkit-media-text-track-display {
4767
4767
  `:d``)}
4768
4768
  </div>
4769
4769
  </div>
4770
- `}};v.styles=[nt],m([ye({type:Object})],v.prototype,"config",2),m([ye({type:Object})],v.prototype,"searchConfig",2),m([ye({type:String})],v.prototype,"selectedCategory",2),m([ye({type:Boolean})],v.prototype,"disabled",2),m([w()],v.prototype,"multimediaService",2),m([w()],v.prototype,"productService",2),m([w()],v.prototype,"faqsService",2),m([w()],v.prototype,"fileService",2),m([w()],v.prototype,"isUploading",2),m([w()],v.prototype,"uploadProgress",2),m([w()],v.prototype,"categoryStates",2),m([w()],v.prototype,"searchTimeout",2),m([w()],v.prototype,"unifiedSearchQuery",2),m([w()],v.prototype,"extraFilters",2),m([w()],v.prototype,"activeFilters",2),m([w()],v.prototype,"loadingFilters",2),v=m([L("osb-side-bar")],v);import{createComponent as hi}from"@lit/react";import fi from"react";var bi=hi({tagName:"osb-asset",elementClass:y,react:fi,events:{onAssetClick:"asset-click",onAssetDownload:"asset-download",onAssetLoad:"asset-load",onAssetError:"asset-error",onContentClick:"content-click"}});import{createComponent as yi}from"@lit/react";import ki from"react";var ji=yi({tagName:"osb-side-bar",elementClass:v,react:ki,events:{onSearch:"search",onLoadMore:"load-more",onItemAdd:"item-add",onCategoryChange:"category-change",onItemSelect:"item-select",onFileUpload:"file-uploaded"}});import{createComponent as wi}from"@lit/react";import Si from"react";var _i=wi({tagName:"osb-upload",elementClass:x,react:Si,events:{onFileSelected:"osb-file-selected",onUploadError:"osb-upload-error"}});var j=0;function ke(){j=0}function lt(s){j=s}function p(s){return j++,`mock_${s}_${j}_${Date.now().toString(36)}`}function ct(s,e){return`mock_${s}_${e.toString(36)}`}function C(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 dt(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 a=t.replace(/-/g,"+").replace(/_/g,"/"),r=typeof atob=="function"?atob(a):t;return{roomId:o,identity:i,timestamp:r}}catch{return null}}function Q(s){return`wss://mock-livekit.local/room/${s}`}function pt(s="participant",e){let t=e??j++;return`${s}_${t}_${Date.now().toString(36)}`}function mt(s="room"){return j++,`${s}_${j}_${Date.now().toString(36)}`}function ut(s,e){return j++,`TR_${s.toUpperCase()}_${e}_${j}`}function gt(){return j++,`msg_${j}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`}function vt(s){return j++,`api_${s}_${j}_${Date.now().toString(36)}`}function ht(){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 ft(s,e){let t=[];for(let i=0;i<e;i++)t.push(p(s));return t}var je={responseStrategy:"echo",responseDelayMs:100,cannedResponses:[],type:"text",nature:"ai",simulateTyping:!1,typingDelayPerChar:20};function we(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 a=Math.floor(o()*t.length);return{response:t[a],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 W=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={...je,...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=we(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:p("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 f=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)}},T=class extends f{constructor(e){super("ROOM_NOT_FOUND",`Room not found: ${e}`,{roomId:e}),this.name="RoomNotFoundError"}},oe=class extends f{constructor(e){super("ROOM_ENDED",`Room has ended: ${e}`,{roomId:e}),this.name="RoomEndedError"}},se=class extends f{constructor(e,t){super("PARTICIPANT_ALREADY_JOINED",`Participant ${e} is already in room ${t}`,{identity:e,roomId:t}),this.name="ParticipantAlreadyJoinedError"}},ae=class extends f{constructor(e){super("PARTICIPANT_NOT_FOUND",`Participant not found: ${e}`,{identity:e}),this.name="ParticipantNotFoundError"}},re=class extends f{constructor(e){super("TRACK_NOT_FOUND",`Track not found: ${e}`,{trackId:e}),this.name="TrackNotFoundError"}},ne=class extends f{constructor(e){super("AGENT_NOT_FOUND",`Agent not found: ${e}`,{agentId:e}),this.name="AgentNotFoundError"}},le=class extends f{constructor(e="Unauthorized"){super("UNAUTHORIZED",e),this.name="UnauthorizedError"}},ce=class extends f{constructor(e="Network error occurred"){super("NETWORK_ERROR",e),this.name="NetworkError"}},de=class extends f{constructor(e,t){super("INVALID_OPERATION",e,t),this.name="InvalidOperationError"}},pe=class extends f{constructor(e,t){super("TIMEOUT",`Operation timed out: ${e}`,{operation:e,timeoutMs:t}),this.name="TimeoutError"}};function X(s){switch(s.code){case"ROOM_NOT_FOUND":return new T(s.details?.roomId??"unknown");case"ROOM_ENDED":return new oe(s.details?.roomId??"unknown");case"PARTICIPANT_ALREADY_JOINED":return new se(s.details?.identity??"unknown",s.details?.roomId??"unknown");case"PARTICIPANT_NOT_FOUND":return new ae(s.details?.identity??"unknown");case"TRACK_NOT_FOUND":return new re(s.details?.trackId??"unknown");case"AGENT_NOT_FOUND":return new ne(s.details?.agentId??"unknown");case"UNAUTHORIZED":return new le(s.message);case"NETWORK_ERROR":return new ce(s.message);case"INVALID_OPERATION":return new de(s.message,s.details);case"TIMEOUT":return new pe(s.details?.operation??"unknown",s.details?.timeoutMs??0);default:return f.fromMockError(s)}}function P(s){return typeof s=="object"&&s!==null&&"code"in s&&"message"in s&&typeof s.code=="string"&&typeof s.message=="string"}function bt(s){return s instanceof f}var Z=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 a={type:"participantAttributesChanged",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t,attributes:i,previousAttributes:o};this.emit(a)}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 a={type:"dataReceived",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t,data:i,topic:o};this.emit(a)}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}};import{Session as De}from"@onlive.ai/tracker/session";import{Room as Ni,RoomEvent as Fe}from"livekit-client";import{initializeApp as xi}from"firebase/app";import{query as F,endAt as Ai,equalTo as Ci,get as yt,getDatabase as Ti,limitToFirst as Pi,limitToLast as Ri,onChildAdded as kt,onChildChanged as jt,onChildRemoved as wt,onDisconnect as St,onValue as _t,orderByChild as Ii,orderByKey as Ei,orderByValue as zi,push as Oi,ref as Li,remove as Di,runTransaction as Fi,set as Mt,startAt as Ui,update as $i}from"firebase/database";var Se=class{constructor(e){this.onChildChanged=(e,t)=>jt(this.ref(e),i=>t(i.key||"",i.val(),i));this.onChildRemoved=(e,t)=>wt(this.ref(e),i=>t(i.key||"",i.val(),i));this.onChildChangedQuery=(e,t)=>jt(e,i=>t(i.key||"",i.val(),i));this.onChildRemovedQuery=(e,t)=>wt(e,i=>t(i.key||"",i.val(),i));let t=xi(e.config);this.db=Ti(t)}ref(e){return Li(this.db,e)}async getOnce(e){let t=await yt(this.ref(e));return t.exists()?t.val():null}async getOnceQuery(e){let t=await yt(e),i=[];return t.exists()&&t.forEach(o=>{i.push({key:o.key||"",value:o.val()})}),i}onValue(e,t){return _t(this.ref(e),i=>t(i.key??"",i.val(),i),i=>console.error("onValue error",i))}onValueQuery(e,t){return _t(e,i=>t(i.key??"",i.val(),i),i=>console.error("onValueQuery error",i))}onChildAdded(e,t){return kt(this.ref(e),i=>t(i.key||"",i.val(),i),i=>console.error("onChildAdded error",i))}onChildAddedQuery(e,t){return kt(e,i=>t(i.key||"",i.val(),i),i=>console.error("onChildAddedQuery error",i))}write(e,t){return Mt(this.ref(e),t)}update(e,t){return $i(this.ref(e),t)}remove(e){return Di(this.ref(e))}async push(e,t){let i=Oi(this.ref(e));return await Mt(i,t),i.key}onDisconnectUpdate(e,t){return St(this.ref(e)).update(t)}cancelOnDisconnect(e){return St(this.ref(e)).cancel()}transaction(e,t){return Fi(this.ref(e),i=>t(i))}query(e,t={}){let i=this.ref(e);return t.orderBy==="child"&&t.childKey&&(i=F(i,Ii(t.childKey))),t.orderBy==="key"&&(i=F(i,Ei())),t.orderBy==="value"&&(i=F(i,zi())),t.startAt!=null&&(i=F(i,Ui(t.startAt))),t.endAt!=null&&(i=F(i,Ai(t.endAt))),t.equalTo!=null&&(i=F(i,Ci(t.equalTo))),t.limitFirst!=null&&(i=F(i,Pi(t.limitFirst))),t.limitLast!=null&&(i=F(i,Ri(t.limitLast))),i}};var xt=s=>{let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",t="";for(let i=0;i<s;i++)t+=e.charAt(Math.floor(Math.random()*e.length));return t};import{Generator as qi}from"@onlive.ai/tracker/generator";import{Session as S}from"@onlive.ai/tracker/session";var U="chatbot",_e=class s{static hasSession(){return!!S.getCookie(U)}static getSession(e={role:"guest",regenerate:!1}){e.regenerate&&(S.id=qi.uuid(),S.deleteCookie(U));let t=S.getCookie(U);return t&&s.isValidSession(t,e.role)?t:s.createSession(e.role)}static createSession(e){let t={externalId:e==="agent"?String(s.getUserId()||S.id):S.id,secret:xt(16),createdAt:new Date().toISOString()};return S.setCookie(U,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 S.getCookie("user-id",{objectKey:"userId",storageKey:"user",storageType:"localStorage",ttl:3600*24*365,preserveData:!0})}static updateSessionWithRegistrationData(e){let t=S.getCookie(U);if(t||(t=s.createSession("guest")),t){let i={...t,registrationData:e};S.setCookie(U,i,3600*24*365)}}static hasRegistrationData(){return!!S.getCookie(U)?.registrationData}static async getAgentInfo(e){return fetch(`${e}/api/v1/auth/user-info`,{credentials:"include"}).then(t=>t.json())}static getRegistrationData(){return S.getCookie(U)?.registrationData}};var At="lk.chat",Ct="lk.transcription",Tt="lk.events",Le="typing-indicator";var Ue=class extends Ni{},Me=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 a=t?.identity?this.room.getParticipantByIdentity(t.identity):void 0,r="";for await(let n of e)r+=n,this.emitMessage({id:i,timestamp:Date.now(),message:r,assets:JSON.parse(e.info?.attributes?.assets||"[]"),from:a});this.messagePersistence==="client"&&this.persistMessage({roomId:this.room.id,content:r,externalId:i,identity:a?.identity,kind:a?.kind})};this.emitMessage=e=>{for(let t of this.listeners)t([e])};this.handleDataReceived=(e,t,i,o)=>{if(o===Le)try{let a=JSON.parse(new TextDecoder().decode(e));if(a.type==="typing"&&a.participantId!==this.room.localParticipant.identity){let r={type:"typing",isTyping:a.isTyping,timestamp:a.timestamp,participantId:a.participantId};this.emitTypingIndicator(r)}}catch(a){console.warn("Failed to parse typing indicator:",a)}};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||At,this.transcriptionTopic=e.transcriptionTopic||Ct,this.eventsTopic=e.eventsTopic||Tt,this.messagePersistence=e.messagePersistence||"disabled",this.agentInitialModalities=e.agentInitialModalities,this.agentModalities=e.agentModalities,this.room=this.createRoomInstance(),e.firebaseConfig&&this.initializeFirebase(e.firebaseConfig)}createRoomInstance(){return new Ue({adaptiveStream:!0,dynacast:!0})}ensureRoom(){return this.room||(this.room=this.createRoomInstance()),this.room}initializeFirebase(e){this.firebaseApi=new Se({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(Fe.DataReceived,this.handleDataReceived),this.room.registerTextStreamHandler(this.channelTopic,this.handleIncomingMessage),this.room.registerTextStreamHandler(this.transcriptionTopic,this.handleIncomingMessage),this.room.on(Fe.DataReceived,this.handleDataReceived)}async registerUser(e,t,i,o){let a=await g(`${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(!a.token)throw new Error("Registration failed: No token received from server");return this.authToken=a.token,a}async registerAgent(e,t){let i=De.getCookie("livekit-agent-token");if(i){if(this.decodeJwtPayload(i)?.username===t.name)return this.authToken=i,i;De.deleteCookie("livekit-agent-token")}let o=await g(`${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 De.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){let t=e;console.log("[ConversationService] Starting quickStart with options:",t),this.room=this.ensureRoom(),(this.agentInitialModalities||this.agentModalities)&&(t={...t,room:{...t.room,metadata:{...this.agentInitialModalities&&{agentInitialModalities:this.agentInitialModalities},...this.agentModalities&&{agentModalities:this.agentModalities},...t.room.metadata}}});let i=await g(`${this.apiUrl}/rooms/quick-start`,{method:"POST",body:JSON.stringify(t),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.quickStart.signal});if(!i.user?.token)throw new Error("Quick start failed: No user token received from server");this.authToken=i.user.token;let o={id:i.room.id,groupId:i.room.groupId||"",token:i.room.token,wsURL:i.room.wsURL,createdAt:i.room.createdAt||new Date().toISOString(),affinity:i.room.affinity};return this.setRoomMetadata(o),this.setupParticipantAttributesHandler(),this.room.connect(o.wsURL,o.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;(this.agentInitialModalities||this.agentModalities)&&(i.metadata={...this.agentInitialModalities&&{agentInitialModalities:this.agentInitialModalities},...this.agentModalities&&{agentModalities:this.agentModalities},...i.metadata});let o=await g(`${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(a){console.error("[ConversationService] Failed to send initial message:",a)}}),this.initializeRoomHandlers(),this.room}async joinRoom(e,t,i,o){let a=await g(`${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(a),this.setupParticipantAttributesHandler(),await this.room.connect(a.wsURL,a.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(Fe.ParticipantAttributesChanged,e=>{e.identity===this.room.localParticipant.identity&&_e.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 g(`${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 g(`${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 g(`${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()),g(`${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 g(`${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 g(`${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 g(`${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 g(`${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 g(`${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:Le})}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 g(`${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 g(`${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 g(`${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 g(`${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,a)=>e(o,a))}onPresenceAgentChange(e,t){let{api:i}=this.getFirebase();return i.onValue(this.buildAgentPresencePath(e),(o,a)=>t(o,a))}async createCallRequest(e){let{api:t,callsPath:i}=this.getFirebase(),a=(await g(`${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}/${a}`,{status:"disconnected"}),a}onNewCallRequest(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildAdded(i,(o,a)=>e(o,{...a,id:o}))}onCallRequestChange(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildChanged(i,(o,a)=>e(o,{...a,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 g(`${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 a=i.query(o,{orderBy:"child",childKey:"status",equalTo:"pending"}),r=i.onChildAddedQuery(a,(n,l)=>{if(!n||this.seenRequestIds.has(n))return;let h={...l,id:n};this.seenRequestIds.add(n),e(n,h)});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,(a,r)=>{if(!a)return;let n=JSON.stringify(r);this.lastSnapshotById.get(a)!==n&&(this.lastSnapshotById.set(a,n),e(a,{...r,id:a}))});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,(a,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,(a,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 M=class{constructor(e,t,i,o){this.muted=!1;this.enabled=!0;this.attachedElements=new Set;this.kind=e,this.source=t,this.sid=p("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 V=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=p("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 import("./media-PYNZP2A2.js"),{track:a,cleanup:r}=o({animation:"avatar",label:this.name||"Local Camera"}),n=new M("video","camera",a,r),l=new _(n,t?.name);return this.trackPublications.set("camera",l),this.videoTrackPublications.set(n.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 import("./media-PYNZP2A2.js"),{track:a,cleanup:r}=o({enabled:!1}),n=new M("audio","microphone",a,r),l=new _(n,t?.name);return this.trackPublications.set("microphone",l),this.audioTrackPublications.set(n.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 import("./media-PYNZP2A2.js"),{track:a,cleanup:r}=o({animation:"bars",label:"Screen Share",width:1920,height:1080}),n=new M("video","screen_share",a,r),l=new _(n,t?.name||"screen");return this.trackPublications.set("screen_share",l),this.videoTrackPublications.set(n.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:p("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 Hi(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 R=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=p("PA"),this.name=t,this.attributes=i,this._kindString=o,this.kind=Hi(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 I=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 V(this),this.sid=p("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(a){console.error(`Error in mock room event handler for ${e}:`,a)}}registerRpcMethod(e,t){this.rpcHandlers.set(e,t)}unregisterRpcMethod(e){this.rpcHandlers.delete(e)}async callRpc(e,t,i,o=1e4){let a=this.rpcHandlers.get(e);if(!a)throw new Error(`RPC method not found: ${e}`);return a({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 R(this.localParticipant.identity,this.localParticipant.name,this.localParticipant.attributes):this.remoteParticipants.get(e)}getParticipantBySid(e){if(e===this.localParticipant.sid)return new R(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 R(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 a,r;if(t==="video"){let{createSyntheticVideoTrack:h}=await import("./media-PYNZP2A2.js"),u=h({animation:o.isAgent?"avatar":"pulse",label:o.name||e,foregroundColor:o.isAgent?"#22c55e":"#4361ee"});a=u.track,r=u.cleanup}else if(t==="audio"){let{createSyntheticAudioTrack:h}=await import("./media-PYNZP2A2.js"),u=h({enabled:!1});a=u.track,r=u.cleanup}let n=new M(t,i,a,r),l=new _(n);return o.addTrackPublication(l),this.emit("trackSubscribed",n,l,o),this.emit("trackPublished",l,o),n}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 a=o.getTrackPublication(t);a?.track&&(a.track.setMuted(i),this.emit(i?"trackMuted":"trackUnmuted",a,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 a=this.remoteParticipants.get(t);this.emit("dataReceived",e,a,i,o)}};var ee=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=p("room"),a=new Date().toISOString(),r={id:o,name:e,groupId:t||p("group"),createdAt:a,metadata:i,isActive:!0,participantIds:[],connectionState:"disconnected",wsURL:Q(o),token:C(o,"pending",a)};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",a="standard",r=!1){let n=this.rooms.get(e);if(!n)return this.createError("ROOM_NOT_FOUND",`Room ${e} not found`);if(!n.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 h={identity:t,name:i||t,roomId:e,joinedAt:new Date().toISOString(),isConnected:!0,trackIds:[],role:o,attributes:{},kind:a,isLocal:r};return this.participants.set(t,h),n.participantIds.push(t),h}getParticipant(e){return this.participants.get(e)}listParticipants(e,t=!0){let i=this.rooms.get(e);if(!i)return[];let o=[];for(let a of i.participantIds){let r=this.participants.get(a);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 a=this.participants.get(e);if(!a)return this.createError("PARTICIPANT_NOT_FOUND",`Participant ${e} not found`);if(!a.isConnected)return this.createError("INVALID_OPERATION",`Participant ${e} is not connected`);let r=this.rooms.get(a.roomId);if(!r||!r.isActive)return this.createError("ROOM_ENDED","Room is not active");let n=p("track"),l={id:n,kind:t,source:i,participantIdentity:e,roomId:a.roomId,publishedAt:new Date().toISOString(),muted:!1,metadata:o};return this.tracks.set(n,l),a.trackIds.push(n),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 a=p("agent"),r={id:a,roomId:e,name:t,status:"running",startedAt:new Date().toISOString(),config:{responseStrategy:"echo",...i},messageHistory:[]};return this.agents.set(a,r),this.addParticipant(e,`agent_${a}`,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 a={id:p("msg"),content:t,role:i,timestamp:new Date().toISOString()};return o.messageHistory.push(a),a}addMessage(e,t,i,o="standard",a){if(!this.rooms.get(e))return this.createError("ROOM_NOT_FOUND",`Room ${e} not found`);let n={id:p("msg"),roomId:e,content:i,participantIdentity:t,createdAt:new Date().toISOString(),type:o,attributes:a},l=this.messages.get(e)||[];return l.push(n),this.messages.set(e,l),n}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 E=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 ee(this.config),this.events=new Z,this.room=new I(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 I(this)),this.room}async registerUser(e,t,i,o){if(await this.simulateLatency(),this.config.errorConfig?.unauthorized)throw new f("UNAUTHORIZED","Registration failed");let a={id:p("user"),externalId:e,organizationId:this.config.organizationId,role:"user",token:C("pending",e,new Date().toISOString())};return this._authToken=a.token,this._registeredUser=a,this.room.localParticipant.identity=e,this.room.localParticipant.name=i?.name||e,a}async registerAgent(e,t){if(await this.simulateLatency(),this.config.errorConfig?.unauthorized)throw new f("UNAUTHORIZED","Agent registration failed");let i=C("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,...a}=e.user;return await this.registerUser(t,i,a,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 f("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 a=this.state.getRoom(e);if(!a)throw new T(e);if(!a.isActive)throw new f("ROOM_ENDED",`Room ${e} has ended`);this.room.id=a.id,this.room.groupId=a.groupId,this.room.createdAt=a.createdAt,this.room.connectedAt=new Date().toISOString();let r=this.room.localParticipant.identity||"local_user",n=this.state.addParticipant(e,r,this.room.localParticipant.name,"user","standard",!0);if(P(n))throw X(n);if(o){let l={};for(let[h,u]of Object.entries(o))l[h]=String(u);this.state.updateParticipantAttributes(r,l)}return this.state.updateRoomConnectionState(e,"connected"),this.config.autoEmitEvents&&(this.events.emitParticipantJoined(e,n),this.events.emitRoomConnectionStateChanged(e,"connected","disconnected")),await this.room.connect(a.wsURL,a.token),this.room}async evaluateRoom(e){await this.simulateLatency();let t=e.roomId||this.room?.id;if(!t)throw new f("ROOM_NOT_FOUND","No room to evaluate");let i=this.state.getRoom(t);if(!i)throw new T(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 T(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(n=>n.isActive):e.roomStatus==="closed"&&(t=t.filter(n=>!n.isActive)),e.ids?.length&&(t=t.filter(n=>e.ids.includes(n.id))),e.groupId&&(t=t.filter(n=>n.groupId===e.groupId));let i=e.offset??0,o=e.limit??20;return{items:t.slice(i,i+o).map(n=>({id:n.id,name:n.name,groupId:n.groupId,organizationId:this.config.organizationId,endedAt:n.endedAt??null,createdAt:n.createdAt,updatedAt:n.createdAt,status:n.isActive?"active":"ended",participants:this.state.listParticipants(n.id).map(l=>({id:l.identity,name:l.name||l.identity,role:l.role,isLocal:l.isLocal})),evaluations:[],_count:{messages:this.state.getMessages(n.id).length,participants:n.participantIds.length}})),count:t.length,limit:o,offset:i}}async sendMessage(e,t){if(await this.simulateLatency(),!this.room?.id)throw new f("INVALID_OPERATION","Not connected to a room");let i=this.state.addMessage(this.room.id,this.room.localParticipant.identity,e,"standard",t);if(P(i))throw X(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 a of this.messageListeners)a([o]);this.config.autoEmitEvents&&this.events.emitMessageSent(this.room.id,i);for(let a of this.agents.values())a.isRunning&&a.roomId===this.room.id&&this.triggerAgentResponse(a,e)}async persistMessage(e){await this.simulateLatency();let t=this.state.addMessage(e.roomId,e.identity||"system",e.content);if(P(t))throw X(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(),p("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 W(p("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((h,u)=>this.customAgentHandler(h,u));let a=t?.type,r=Array.isArray(a)?a:[a].filter(Boolean),n=r.includes("video"),l=r.includes("voice");return(n||l)&&this.room.isConnected&&await this.room.simulateParticipantJoin(o.id,{name:i,kind:"agent",withCamera:n,withMicrophone:l||n,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(!P(o)){let a={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([a]);this.config.autoEmitEvents&&this.events.emitMessageReceived(e.roomId,o)}}catch(i){console.error("Agent response error:",i)}}simulateCallRequest(e){let t={id:p("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);!P(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(P(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 a of this.messageListeners)a([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 I(this),ke()}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 z={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 xe(){let s=O(z.MODE);if(s==="mock"||s==="real")return s;let e=O(z.USE_MOCK);return e==="true"||e==="1"||Bi()?"mock":"real"}function Vi(){let s={},e=O(z.MOCK_LATENCY);e&&(s.latencyMs=parseInt(e,10));let t=O(z.MOCK_STRICT);(t==="true"||t==="1")&&(s.strictMode=!0);let i=O(z.MOCK_SCENARIO);i&&(s.scenario=i);let o=O(z.MOCK_SEED);return o&&(s.seed=parseInt(o,10)),s}function Ji(){let s={},e=O(z.API_URL);e&&(s.apiUrl=e);let t=O(z.AUTH_URL);t&&(s.authUrl=t);let i=O(z.ORG_ID);return i&&(s.organizationId=i),s}function O(s){if(typeof process<"u"&&process.env)return process.env[s];if(typeof import.meta<"u"&&import.meta.env)return import.meta.env[`VITE_${s}`]||import.meta.env[s];if(typeof window<"u"&&window.__ENV__)return window.__ENV__[s]}function Bi(){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 $=class s{static create(e){if((e.mode??xe())==="mock"){let i={...Vi(),...e.mockConfig,organizationId:e.organizationId,apiUrl:e.apiUrl};return new E(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 Me(e)}static createFromEnv(e){let t=e?.mode??xe(),i=Ji();return s.create({...i,...e,mode:t})}static createMock(e){return new E({organizationId:"mock_org",apiUrl:"https://mock-livekit.local",...e})}static createDeterministicMock(e=12345){return new E({organizationId:"mock_org",apiUrl:"https://mock-livekit.local",seed:e,strictMode:!0})}static getCurrentMode(){return xe()}static isMockMode(){return xe()==="mock"}static isMockService(e){return e instanceof E}};function Pt(s){return $.createFromEnv(s)}function Ae(s){return $.createMock(s)}function Ce(s){let e=s?.id??p("room"),t=new Date().toISOString();return{id:e,name:`Test Room ${e}`,groupId:p("group"),createdAt:t,isActive:!0,participantIds:[],connectionState:"connected",wsURL:Q(e),token:C(e,"local_user",t),...s}}function Te(s="local_user",e){let t=Ce(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 $e(s){let e=Ce(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 Pe(s,e){let{room:t,localParticipant:i}=Te("local_user",e),o=new Date().toISOString(),a=p("agent"),r={id:a,roomId:t.id,name:"AI Assistant",status:"running",startedAt:o,config:{responseStrategy:"echo",nature:"ai",...s},messageHistory:[]},n={identity:`agent_${a}`,name:"AI Assistant",roomId:t.id,joinedAt:o,isConnected:!0,trackIds:[],role:"agent",attributes:{},kind:"agent",isLocal:!1};return t.participantIds.push(n.identity),{room:t,localParticipant:i,agent:r,agentParticipant:n}}function Rt(s){let{room:e,localParticipant:t,agent:i,agentParticipant:o}=Pe(void 0,s),a={id:p("track"),kind:"data",source:"unknown",participantIdentity:o.identity,roomId:e.id,publishedAt:new Date().toISOString(),muted:!1};return o.trackIds.push(a.id),{room:e,localParticipant:t,agent:i,dataTrack:a}}function It(s){let{room:e,localParticipant:t}=Te("local_user",s),i=new Date().toISOString(),o={id:p("track"),kind:"audio",source:"microphone",participantIdentity:t.identity,roomId:e.id,publishedAt:i,muted:!1},a={id:p("track"),kind:"video",source:"camera",participantIdentity:t.identity,roomId:e.id,publishedAt:i,muted:!1};return t.trackIds.push(o.id,a.id),{room:e,participant:t,audioTrack:o,videoTrack:a}}function qe(s,e){let t=e?.identity??p("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 Et(s,e){let t=[];for(let i=0;i<e;i++)t.push(qe(s,{identity:`participant_${i+1}`,name:`Participant ${i+1}`,isLocal:i===0}));return t}function Re(s,e){return{id:e?.id??p("agent"),roomId:s,name:"AI Assistant",status:"running",startedAt:new Date().toISOString(),config:{responseStrategy:"echo",nature:"ai",...e?.config},messageHistory:[],...e}}function zt(s,e){return Re(s,{config:{responseStrategy:"canned",cannedResponses:e}})}function Ot(s,e){return Re(s,{config:{responseStrategy:"sequential",cannedResponses:e}})}function Lt(s,e,t){return{id:p("msg"),roomId:s,content:"Test message",participantIdentity:e,createdAt:new Date().toISOString(),type:"standard",...t}}function Ne(s,e){return e.map((t,i)=>({id:p("msg"),roomId:s,content:t.content,participantIdentity:t.identity,createdAt:new Date(Date.now()+i*1e3).toISOString(),type:"standard"}))}function me(s){return{latencyMs:0,strictMode:!1,autoEmitEvents:!0,organizationId:"test_org",apiUrl:"https://mock-api.local",...s}}function Dt(s){return me({strictMode:!0,...s})}function Ft(s,e){return me({latencyMs:s,...e})}function Ut(s,e){return me({seed:s,...e})}function $t(){let{room:s,localParticipant:e,agent:t,agentParticipant:i}=Pe(),o=Ne(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 qt(){let{room:s,participant1:e,participant2:t}=$e(),i=new Date().toISOString(),o=[{id:p("track"),kind:"audio",source:"microphone",participantIdentity:e.identity,roomId:s.id,publishedAt:i,muted:!1},{id:p("track"),kind:"video",source:"camera",participantIdentity:e.identity,roomId:s.id,publishedAt:i,muted:!1},{id:p("track"),kind:"audio",source:"microphone",participantIdentity:t.identity,roomId:s.id,publishedAt:i,muted:!1},{id:p("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 ue=class{constructor(e,t,i,o,a){this.index=0;this._complete=!1;this.info={id:e,attributes:o,topic:a,timestamp:Date.now()},this.participantIdentity=t,this.topic=a,this.chunks=Array.isArray(i)?i:[i],this.info.totalSize=this.chunks.reduce((r,n)=>r+n.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}};var q=null;function b(s){return q||(q=Ae({organizationId:"storybook_org",apiUrl:"https://storybook.mock",latencyMs:50,autoEmitEvents:!0,...s})),q}function He(){q&&q.reset()}async function Nt(){q&&(await q.destroy(),q=null)}function Ht(s={}){return(e,t)=>{He();let i={default:void 0,slow_network:"slow_network",unreliable:"unreliable",agent_timeout:"agent_timeout"},o=b({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 a of s.seedMessages)o.simulateIncomingMessage(a.from,a.content);s.autoStartAgent&&o.room?.id&&await o.startMockAgent(o.room.id,s.autoStartAgent)}}catch(a){console.error("[Storybook Mock] Setup error:",a)}})(),window.__mockConversationService=o,e()}}function Vt(s){return $.isMockService(s)}var Jt={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 Bt(s){return()=>b(s)}var Ve={async receiveMessage(s,e){b().simulateIncomingMessage(s,e)},simulateJoin(s,e){b().simulateParticipantJoin(s,e)},simulateLeave(s){b().simulateParticipantLeave(s)},async simulateVideoParticipant(s,e,t){let o=b().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=b().room;i&&await i.simulateAgentJoin(s,e||"AI Agent")},async enableLocalCamera(){let e=b().room;e&&await e.localParticipant.setCameraEnabled(!0)},async disableLocalCamera(){let e=b().room;e&&await e.localParticipant.setCameraEnabled(!1)},async enableLocalMicrophone(){let e=b().room;e&&await e.localParticipant.setMicrophoneEnabled(!0)},async simulateMultipleParticipants(s){let e=["Alice","Bob","Carol","David","Eve","Frank","Grace","Henry","Ivy","Jack"],i=b().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(a=>setTimeout(a,100))},clearParticipants(){let e=b().room;if(e)for(let t of e.remoteParticipants.keys())e.simulateParticipantLeave(t)},simulateCallRequest(s,e){b().simulateCallRequest({name:s,guestId:e||`guest_${Date.now()}`})},async simulateDisconnect(){await b().simulateDisconnect()},getEventHistory(){return b().getEventHistory()},exportState(){return b().exportState()},getRoom(){return b().room}};typeof window<"u"&&(window.MockServiceActions=Ve);var Je={OpenWidget:"openWidget",InitialStep:"initialStep"};var Be="ol",Kt={Action:"action",Message:"message",StepId:"stepId",InstallationId:"installationId"},Wi=new Set(Object.values(Je)),Ke=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(Be)&&i.substring(Be.length)in Kt&&(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(Kt)){let a=`${Be}${i}`,r=t.get(a);if(r!==null){if(o==="action"){Wi.has(r)&&(e.action=r);continue}e[o]=r}}return e}};export{ne as AgentNotFoundError,bi as Asset,$ as ConversationServiceFactory,Je as DeepLinkAction,Ke as DeepLinkService,de as InvalidOperationError,E as MockConversationService,Z as MockEventEmitter,f as MockLiveKitError,V as MockLocalParticipant,R as MockParticipant,I as MockRoom,Ve as MockServiceActions,ee as MockState,ue as MockTextStreamReader,M as MockTrack,_ as MockTrackPublication,ce as NetworkError,y as OSBAsset,v as OSBSideBar,x as OSBUpload,se as ParticipantAlreadyJoinedError,ae as ParticipantNotFoundError,oe as RoomEndedError,T as RoomNotFoundError,We as SYNTHETIC_MEDIA_PRESETS,ji as SideBar,Jt as StorybookScenarios,pe as TimeoutError,re as TrackNotFoundError,le as UnauthorizedError,_i as Upload,Re as createAgentFixture,zt as createAgentWithCannedResponses,$t as createChatScenario,Ne as createConversationFixture,Pt as createConversationService,me as createDefaultConfig,Ce as createDefaultRoomFixture,Ut as createDeterministicConfig,X as createErrorFromMockError,Ft as createLatencyConfig,Lt as createMessageFixture,Ae as createMockConversationService,Bt as createMockServiceFactory,Et as createParticipantBatch,qe as createParticipantFixture,Pe as createRoomWithAgent,Rt as createRoomWithAgentAndDataTrack,Te as createRoomWithLocalParticipant,It as createRoomWithMediaTracks,$e as createRoomWithTwoParticipants,Ot as createSequentialAgent,Dt as createStrictConfig,Ye as createSyntheticAudioTrack,Qe as createSyntheticMedia,Xe as createSyntheticMediaFromPreset,Ge as createSyntheticVideoTrack,qt as createVideoCallScenario,dt as decodeMockToken,Nt as destroyStorybookMockService,vt as generateMockApiResponseId,ht as generateMockExternalId,p as generateMockId,ft as generateMockIdBatch,gt as generateMockMessageId,pt as generateMockParticipantIdentity,mt as generateMockRoomName,C as generateMockToken,ut as generateMockTrackSid,Q as generateMockWsUrl,ct as generateSeededMockId,b as getStorybookMockService,Vt as isMockConversationService,P as isMockError,bt as isMockLiveKitError,ke as resetIdCounter,He as resetStorybookMockService,lt as setIdCounter,Ht as withMockConversationService};
4770
+ `}};v.styles=[rt],u([ye({type:Object})],v.prototype,"config",2),u([ye({type:Object})],v.prototype,"searchConfig",2),u([ye({type:String})],v.prototype,"selectedCategory",2),u([ye({type:Boolean})],v.prototype,"disabled",2),u([w()],v.prototype,"multimediaService",2),u([w()],v.prototype,"productService",2),u([w()],v.prototype,"faqsService",2),u([w()],v.prototype,"fileService",2),u([w()],v.prototype,"isUploading",2),u([w()],v.prototype,"uploadProgress",2),u([w()],v.prototype,"categoryStates",2),u([w()],v.prototype,"searchTimeout",2),u([w()],v.prototype,"unifiedSearchQuery",2),u([w()],v.prototype,"extraFilters",2),u([w()],v.prototype,"activeFilters",2),u([w()],v.prototype,"loadingFilters",2),v=u([H("osb-side-bar")],v);import{createComponent as wi}from"@lit/react";import Si from"react";var _i=wi({tagName:"osb-asset",elementClass:y,react:Si,events:{onAssetClick:"asset-click",onAssetDownload:"asset-download",onAssetLoad:"asset-load",onAssetError:"asset-error",onContentClick:"content-click"}});import{createComponent as Mi}from"@lit/react";import xi from"react";var Ai=Mi({tagName:"osb-side-bar",elementClass:v,react:xi,events:{onSearch:"search",onLoadMore:"load-more",onItemAdd:"item-add",onCategoryChange:"category-change",onItemSelect:"item-select",onFileUpload:"file-uploaded"}});import{createComponent as Ci}from"@lit/react";import Pi from"react";var Ri=Ci({tagName:"osb-upload",elementClass:x,react:Pi,events:{onFileSelected:"osb-file-selected",onUploadError:"osb-upload-error"}});var j=0;function ke(){j=0}function nt(s){j=s}function p(s){return j++,`mock_${s}_${j}_${Date.now().toString(36)}`}function lt(s,e){return`mock_${s}_${e.toString(36)}`}function C(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 ct(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 a=t.replace(/-/g,"+").replace(/_/g,"/"),r=typeof atob=="function"?atob(a):t;return{roomId:o,identity:i,timestamp:r}}catch{return null}}function Y(s){return`wss://mock-livekit.local/room/${s}`}function dt(s="participant",e){let t=e??j++;return`${s}_${t}_${Date.now().toString(36)}`}function pt(s="room"){return j++,`${s}_${j}_${Date.now().toString(36)}`}function mt(s,e){return j++,`TR_${s.toUpperCase()}_${e}_${j}`}function ut(){return j++,`msg_${j}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`}function gt(s){return j++,`api_${s}_${j}_${Date.now().toString(36)}`}function vt(){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 ht(s,e){let t=[];for(let i=0;i<e;i++)t.push(p(s));return t}var je={responseStrategy:"echo",responseDelayMs:100,cannedResponses:[],type:"text",nature:"ai",simulateTyping:!1,typingDelayPerChar:20};function we(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 a=Math.floor(o()*t.length);return{response:t[a],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 Q=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={...je,...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=we(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:p("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 f=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)}},P=class extends f{constructor(e){super("ROOM_NOT_FOUND",`Room not found: ${e}`,{roomId:e}),this.name="RoomNotFoundError"}},oe=class extends f{constructor(e){super("ROOM_ENDED",`Room has ended: ${e}`,{roomId:e}),this.name="RoomEndedError"}},se=class extends f{constructor(e,t){super("PARTICIPANT_ALREADY_JOINED",`Participant ${e} is already in room ${t}`,{identity:e,roomId:t}),this.name="ParticipantAlreadyJoinedError"}},ae=class extends f{constructor(e){super("PARTICIPANT_NOT_FOUND",`Participant not found: ${e}`,{identity:e}),this.name="ParticipantNotFoundError"}},re=class extends f{constructor(e){super("TRACK_NOT_FOUND",`Track not found: ${e}`,{trackId:e}),this.name="TrackNotFoundError"}},ne=class extends f{constructor(e){super("AGENT_NOT_FOUND",`Agent not found: ${e}`,{agentId:e}),this.name="AgentNotFoundError"}},le=class extends f{constructor(e="Unauthorized"){super("UNAUTHORIZED",e),this.name="UnauthorizedError"}},ce=class extends f{constructor(e="Network error occurred"){super("NETWORK_ERROR",e),this.name="NetworkError"}},de=class extends f{constructor(e,t){super("INVALID_OPERATION",e,t),this.name="InvalidOperationError"}},pe=class extends f{constructor(e,t){super("TIMEOUT",`Operation timed out: ${e}`,{operation:e,timeoutMs:t}),this.name="TimeoutError"}};function W(s){switch(s.code){case"ROOM_NOT_FOUND":return new P(s.details?.roomId??"unknown");case"ROOM_ENDED":return new oe(s.details?.roomId??"unknown");case"PARTICIPANT_ALREADY_JOINED":return new se(s.details?.identity??"unknown",s.details?.roomId??"unknown");case"PARTICIPANT_NOT_FOUND":return new ae(s.details?.identity??"unknown");case"TRACK_NOT_FOUND":return new re(s.details?.trackId??"unknown");case"AGENT_NOT_FOUND":return new ne(s.details?.agentId??"unknown");case"UNAUTHORIZED":return new le(s.message);case"NETWORK_ERROR":return new ce(s.message);case"INVALID_OPERATION":return new de(s.message,s.details);case"TIMEOUT":return new pe(s.details?.operation??"unknown",s.details?.timeoutMs??0);default:return f.fromMockError(s)}}function R(s){return typeof s=="object"&&s!==null&&"code"in s&&"message"in s&&typeof s.code=="string"&&typeof s.message=="string"}function ft(s){return s instanceof f}var X=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 a={type:"participantAttributesChanged",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t,attributes:i,previousAttributes:o};this.emit(a)}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 a={type:"dataReceived",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t,data:i,topic:o};this.emit(a)}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}};import{Session as De}from"@onlive.ai/tracker/session";import{Room as Gi,RoomEvent as Fe}from"livekit-client";import{initializeApp as Ii}from"firebase/app";import{query as D,endAt as Ei,equalTo as zi,get as bt,getDatabase as Oi,limitToFirst as Li,limitToLast as Di,onChildAdded as yt,onChildChanged as kt,onChildRemoved as jt,onDisconnect as wt,onValue as St,orderByChild as Fi,orderByKey as Ui,orderByValue as $i,push as qi,ref as Ni,remove as Hi,runTransaction as Vi,set as _t,startAt as Ji,update as Bi}from"firebase/database";var Mt=class{constructor(s){this.onChildChanged=(t,i)=>kt(this.ref(t),o=>i(o.key||"",o.val(),o)),this.onChildRemoved=(t,i)=>jt(this.ref(t),o=>i(o.key||"",o.val(),o)),this.onChildChangedQuery=(t,i)=>kt(t,o=>i(o.key||"",o.val(),o)),this.onChildRemovedQuery=(t,i)=>jt(t,o=>i(o.key||"",o.val(),o));let e=Ii(s.config);this.db=Oi(e)}ref(s){return Ni(this.db,s)}async getOnce(s){let e=await bt(this.ref(s));return e.exists()?e.val():null}async getOnceQuery(s){let e=await bt(s),t=[];return e.exists()&&e.forEach(i=>{t.push({key:i.key||"",value:i.val()})}),t}onValue(s,e){return St(this.ref(s),t=>e(t.key??"",t.val(),t),t=>console.error("onValue error",t))}onValueQuery(s,e){return St(s,t=>e(t.key??"",t.val(),t),t=>console.error("onValueQuery error",t))}onChildAdded(s,e){return yt(this.ref(s),t=>e(t.key||"",t.val(),t),t=>console.error("onChildAdded error",t))}onChildAddedQuery(s,e){return yt(s,t=>e(t.key||"",t.val(),t),t=>console.error("onChildAddedQuery error",t))}write(s,e){return _t(this.ref(s),e)}update(s,e){return Bi(this.ref(s),e)}remove(s){return Hi(this.ref(s))}async push(s,e){let t=qi(this.ref(s));return await _t(t,e),t.key}onDisconnectUpdate(s,e){return wt(this.ref(s)).update(e)}cancelOnDisconnect(s){return wt(this.ref(s)).cancel()}transaction(s,e){return Vi(this.ref(s),t=>e(t))}query(s,e={}){let t=this.ref(s);return e.orderBy==="child"&&e.childKey&&(t=D(t,Fi(e.childKey))),e.orderBy==="key"&&(t=D(t,Ui())),e.orderBy==="value"&&(t=D(t,$i())),e.startAt!=null&&(t=D(t,Ji(e.startAt))),e.endAt!=null&&(t=D(t,Ei(e.endAt))),e.equalTo!=null&&(t=D(t,zi(e.equalTo))),e.limitFirst!=null&&(t=D(t,Li(e.limitFirst))),e.limitLast!=null&&(t=D(t,Di(e.limitLast))),t}};var xt=s=>{let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",t="";for(let i=0;i<s;i++)t+=e.charAt(Math.floor(Math.random()*e.length));return t};import{Generator as Ki}from"@onlive.ai/tracker/generator";import{Session as S}from"@onlive.ai/tracker/session";var F="chatbot",Se=class s{static hasSession(){return!!S.getCookie(F)}static getSession(e={role:"guest",regenerate:!1}){e.regenerate&&(S.id=Ki.uuid(),S.deleteCookie(F));let t=S.getCookie(F);return t&&s.isValidSession(t,e.role)?t:s.createSession(e.role)}static createSession(e){let t={externalId:e==="agent"?String(s.getUserId()||S.id):S.id,secret:xt(16),createdAt:new Date().toISOString()};return S.setCookie(F,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 S.getCookie("user-id",{objectKey:"userId",storageKey:"user",storageType:"localStorage",ttl:3600*24*365,preserveData:!0})}static updateSessionWithRegistrationData(e){let t=S.getCookie(F);if(t||(t=s.createSession("guest")),t){let i={...t,registrationData:e};S.setCookie(F,i,3600*24*365)}}static hasRegistrationData(){return!!S.getCookie(F)?.registrationData}static async getAgentInfo(e){return fetch(`${e}/api/v1/auth/user-info`,{credentials:"include"}).then(t=>t.json())}static getRegistrationData(){return S.getCookie(F)?.registrationData}};var At="lk.chat",Ct="lk.transcription",Pt="lk.events",Le="typing-indicator";var Ue=class extends Gi{},_e=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 a=t?.identity?this.room.getParticipantByIdentity(t.identity):void 0,r="";for await(let n of e)r+=n,this.emitMessage({id:i,timestamp:Date.now(),message:r,assets:JSON.parse(e.info?.attributes?.assets||"[]"),from:a});this.messagePersistence==="client"&&this.persistMessage({roomId:this.room.id,content:r,externalId:i,identity:a?.identity,kind:a?.kind})};this.emitMessage=e=>{for(let t of this.listeners)t([e])};this.handleDataReceived=(e,t,i,o)=>{if(o===Le)try{let a=JSON.parse(new TextDecoder().decode(e));if(a.type==="typing"&&a.participantId!==this.room.localParticipant.identity){let r={type:"typing",isTyping:a.isTyping,timestamp:a.timestamp,participantId:a.participantId};this.emitTypingIndicator(r)}}catch(a){console.warn("Failed to parse typing indicator:",a)}};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||At,this.transcriptionTopic=e.transcriptionTopic||Ct,this.eventsTopic=e.eventsTopic||Pt,this.messagePersistence=e.messagePersistence||"disabled",this.agentInitialModalities=e.agentInitialModalities,this.agentModalities=e.agentModalities,this.room=this.createRoomInstance(),e.firebaseConfig&&this.initializeFirebase(e.firebaseConfig)}createRoomInstance(){return new Ue({adaptiveStream:!0,dynacast:!0})}ensureRoom(){return this.room||(this.room=this.createRoomInstance()),this.room}initializeFirebase(e){this.firebaseApi=new Mt({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(Fe.DataReceived,this.handleDataReceived),this.room.registerTextStreamHandler(this.channelTopic,this.handleIncomingMessage),this.room.registerTextStreamHandler(this.transcriptionTopic,this.handleIncomingMessage),this.room.on(Fe.DataReceived,this.handleDataReceived)}async registerUser(e,t,i,o){let a=await g(`${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(!a.token)throw new Error("Registration failed: No token received from server");return this.authToken=a.token,a}async registerAgent(e,t){let i=De.getCookie("livekit-agent-token");if(i){if(this.decodeJwtPayload(i)?.username===t.name)return this.authToken=i,i;De.deleteCookie("livekit-agent-token")}let o=await g(`${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 De.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){let t=e;console.log("[ConversationService] Starting quickStart with options:",t),this.room=this.ensureRoom(),(this.agentInitialModalities||this.agentModalities)&&(t={...t,room:{...t.room,metadata:{...this.agentInitialModalities&&{agentInitialModalities:this.agentInitialModalities},...this.agentModalities&&{agentModalities:this.agentModalities},...t.room.metadata}}});let i=await g(`${this.apiUrl}/rooms/quick-start`,{method:"POST",body:JSON.stringify(t),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.quickStart.signal});if(!i.user?.token)throw new Error("Quick start failed: No user token received from server");this.authToken=i.user.token;let o={id:i.room.id,groupId:i.room.groupId||"",token:i.room.token,wsURL:i.room.wsURL,createdAt:i.room.createdAt||new Date().toISOString(),affinity:i.room.affinity};return this.setRoomMetadata(o),this.setupParticipantAttributesHandler(),this.room.connect(o.wsURL,o.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;(this.agentInitialModalities||this.agentModalities)&&(i.metadata={...this.agentInitialModalities&&{agentInitialModalities:this.agentInitialModalities},...this.agentModalities&&{agentModalities:this.agentModalities},...i.metadata});let o=await g(`${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(a){console.error("[ConversationService] Failed to send initial message:",a)}}),this.initializeRoomHandlers(),this.room}async joinRoom(e,t,i,o){let a=await g(`${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(a),this.setupParticipantAttributesHandler(),await this.room.connect(a.wsURL,a.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(Fe.ParticipantAttributesChanged,e=>{e.identity===this.room.localParticipant.identity&&Se.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 g(`${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 g(`${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 g(`${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()),g(`${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 g(`${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 g(`${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 g(`${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 g(`${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 g(`${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:Le})}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 g(`${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 g(`${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 g(`${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 g(`${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,a)=>e(o,a))}onPresenceAgentChange(e,t){let{api:i}=this.getFirebase();return i.onValue(this.buildAgentPresencePath(e),(o,a)=>t(o,a))}async createCallRequest(e){let{api:t,callsPath:i}=this.getFirebase(),a=(await g(`${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}/${a}`,{status:"disconnected"}),a}onNewCallRequest(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildAdded(i,(o,a)=>e(o,{...a,id:o}))}onCallRequestChange(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildChanged(i,(o,a)=>e(o,{...a,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 g(`${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 a=i.query(o,{orderBy:"child",childKey:"status",equalTo:"pending"}),r=i.onChildAddedQuery(a,(n,l)=>{if(!n||this.seenRequestIds.has(n))return;let h={...l,id:n};this.seenRequestIds.add(n),e(n,h)});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,(a,r)=>{if(!a)return;let n=JSON.stringify(r);this.lastSnapshotById.get(a)!==n&&(this.lastSnapshotById.set(a,n),e(a,{...r,id:a}))});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,(a,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,(a,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 M=class{constructor(e,t,i,o){this.muted=!1;this.enabled=!0;this.attachedElements=new Set;this.kind=e,this.source=t,this.sid=p("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 N=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=p("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 import("./media-Z2KW3VEA.js"),{track:a,cleanup:r}=o({animation:"avatar",label:this.name||"Local Camera"}),n=new M("video","camera",a,r),l=new _(n,t?.name);return this.trackPublications.set("camera",l),this.videoTrackPublications.set(n.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 import("./media-Z2KW3VEA.js"),{track:a,cleanup:r}=o({enabled:!1}),n=new M("audio","microphone",a,r),l=new _(n,t?.name);return this.trackPublications.set("microphone",l),this.audioTrackPublications.set(n.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 import("./media-Z2KW3VEA.js"),{track:a,cleanup:r}=o({animation:"bars",label:"Screen Share",width:1920,height:1080}),n=new M("video","screen_share",a,r),l=new _(n,t?.name||"screen");return this.trackPublications.set("screen_share",l),this.videoTrackPublications.set(n.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:p("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 Yi(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 T=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=p("PA"),this.name=t,this.attributes=i,this._kindString=o,this.kind=Yi(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 I=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 N(this),this.sid=p("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(a){console.error(`Error in mock room event handler for ${e}:`,a)}}registerRpcMethod(e,t){this.rpcHandlers.set(e,t)}unregisterRpcMethod(e){this.rpcHandlers.delete(e)}async callRpc(e,t,i,o=1e4){let a=this.rpcHandlers.get(e);if(!a)throw new Error(`RPC method not found: ${e}`);return a({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 T(this.localParticipant.identity,this.localParticipant.name,this.localParticipant.attributes):this.remoteParticipants.get(e)}getParticipantBySid(e){if(e===this.localParticipant.sid)return new T(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 T(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 a,r;if(t==="video"){let{createSyntheticVideoTrack:h}=await import("./media-Z2KW3VEA.js"),m=h({animation:o.isAgent?"avatar":"pulse",label:o.name||e,foregroundColor:o.isAgent?"#22c55e":"#4361ee"});a=m.track,r=m.cleanup}else if(t==="audio"){let{createSyntheticAudioTrack:h}=await import("./media-Z2KW3VEA.js"),m=h({enabled:!1});a=m.track,r=m.cleanup}let n=new M(t,i,a,r),l=new _(n);return o.addTrackPublication(l),this.emit("trackSubscribed",n,l,o),this.emit("trackPublished",l,o),n}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 a=o.getTrackPublication(t);a?.track&&(a.track.setMuted(i),this.emit(i?"trackMuted":"trackUnmuted",a,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 a=this.remoteParticipants.get(t);this.emit("dataReceived",e,a,i,o)}};var Z=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=p("room"),a=new Date().toISOString(),r={id:o,name:e,groupId:t||p("group"),createdAt:a,metadata:i,isActive:!0,participantIds:[],connectionState:"disconnected",wsURL:Y(o),token:C(o,"pending",a)};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",a="standard",r=!1){let n=this.rooms.get(e);if(!n)return this.createError("ROOM_NOT_FOUND",`Room ${e} not found`);if(!n.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 h={identity:t,name:i||t,roomId:e,joinedAt:new Date().toISOString(),isConnected:!0,trackIds:[],role:o,attributes:{},kind:a,isLocal:r};return this.participants.set(t,h),n.participantIds.push(t),h}getParticipant(e){return this.participants.get(e)}listParticipants(e,t=!0){let i=this.rooms.get(e);if(!i)return[];let o=[];for(let a of i.participantIds){let r=this.participants.get(a);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 a=this.participants.get(e);if(!a)return this.createError("PARTICIPANT_NOT_FOUND",`Participant ${e} not found`);if(!a.isConnected)return this.createError("INVALID_OPERATION",`Participant ${e} is not connected`);let r=this.rooms.get(a.roomId);if(!r||!r.isActive)return this.createError("ROOM_ENDED","Room is not active");let n=p("track"),l={id:n,kind:t,source:i,participantIdentity:e,roomId:a.roomId,publishedAt:new Date().toISOString(),muted:!1,metadata:o};return this.tracks.set(n,l),a.trackIds.push(n),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 a=p("agent"),r={id:a,roomId:e,name:t,status:"running",startedAt:new Date().toISOString(),config:{responseStrategy:"echo",...i},messageHistory:[]};return this.agents.set(a,r),this.addParticipant(e,`agent_${a}`,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 a={id:p("msg"),content:t,role:i,timestamp:new Date().toISOString()};return o.messageHistory.push(a),a}addMessage(e,t,i,o="standard",a){if(!this.rooms.get(e))return this.createError("ROOM_NOT_FOUND",`Room ${e} not found`);let n={id:p("msg"),roomId:e,content:i,participantIdentity:t,createdAt:new Date().toISOString(),type:o,attributes:a},l=this.messages.get(e)||[];return l.push(n),this.messages.set(e,l),n}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 E=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 Z(this.config),this.events=new X,this.room=new I(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 I(this)),this.room}async registerUser(e,t,i,o){if(await this.simulateLatency(),this.config.errorConfig?.unauthorized)throw new f("UNAUTHORIZED","Registration failed");let a={id:p("user"),externalId:e,organizationId:this.config.organizationId,role:"user",token:C("pending",e,new Date().toISOString())};return this._authToken=a.token,this._registeredUser=a,this.room.localParticipant.identity=e,this.room.localParticipant.name=i?.name||e,a}async registerAgent(e,t){if(await this.simulateLatency(),this.config.errorConfig?.unauthorized)throw new f("UNAUTHORIZED","Agent registration failed");let i=C("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,...a}=e.user;return await this.registerUser(t,i,a,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 f("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 a=this.state.getRoom(e);if(!a)throw new P(e);if(!a.isActive)throw new f("ROOM_ENDED",`Room ${e} has ended`);this.room.id=a.id,this.room.groupId=a.groupId,this.room.createdAt=a.createdAt,this.room.connectedAt=new Date().toISOString();let r=this.room.localParticipant.identity||"local_user",n=this.state.addParticipant(e,r,this.room.localParticipant.name,"user","standard",!0);if(R(n))throw W(n);if(o){let l={};for(let[h,m]of Object.entries(o))l[h]=String(m);this.state.updateParticipantAttributes(r,l)}return this.state.updateRoomConnectionState(e,"connected"),this.config.autoEmitEvents&&(this.events.emitParticipantJoined(e,n),this.events.emitRoomConnectionStateChanged(e,"connected","disconnected")),await this.room.connect(a.wsURL,a.token),this.room}async evaluateRoom(e){await this.simulateLatency();let t=e.roomId||this.room?.id;if(!t)throw new f("ROOM_NOT_FOUND","No room to evaluate");let i=this.state.getRoom(t);if(!i)throw new P(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 P(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(n=>n.isActive):e.roomStatus==="closed"&&(t=t.filter(n=>!n.isActive)),e.ids?.length&&(t=t.filter(n=>e.ids.includes(n.id))),e.groupId&&(t=t.filter(n=>n.groupId===e.groupId));let i=e.offset??0,o=e.limit??20;return{items:t.slice(i,i+o).map(n=>({id:n.id,name:n.name,groupId:n.groupId,organizationId:this.config.organizationId,endedAt:n.endedAt??null,createdAt:n.createdAt,updatedAt:n.createdAt,status:n.isActive?"active":"ended",participants:this.state.listParticipants(n.id).map(l=>({id:l.identity,name:l.name||l.identity,role:l.role,isLocal:l.isLocal})),evaluations:[],_count:{messages:this.state.getMessages(n.id).length,participants:n.participantIds.length}})),count:t.length,limit:o,offset:i}}async sendMessage(e,t){if(await this.simulateLatency(),!this.room?.id)throw new f("INVALID_OPERATION","Not connected to a room");let i=this.state.addMessage(this.room.id,this.room.localParticipant.identity,e,"standard",t);if(R(i))throw W(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 a of this.messageListeners)a([o]);this.config.autoEmitEvents&&this.events.emitMessageSent(this.room.id,i);for(let a of this.agents.values())a.isRunning&&a.roomId===this.room.id&&this.triggerAgentResponse(a,e)}async persistMessage(e){await this.simulateLatency();let t=this.state.addMessage(e.roomId,e.identity||"system",e.content);if(R(t))throw W(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(),p("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 Q(p("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((h,m)=>this.customAgentHandler(h,m));let a=t?.type,r=Array.isArray(a)?a:[a].filter(Boolean),n=r.includes("video"),l=r.includes("voice");return(n||l)&&this.room.isConnected&&await this.room.simulateParticipantJoin(o.id,{name:i,kind:"agent",withCamera:n,withMicrophone:l||n,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(!R(o)){let a={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([a]);this.config.autoEmitEvents&&this.events.emitMessageReceived(e.roomId,o)}}catch(i){console.error("Agent response error:",i)}}simulateCallRequest(e){let t={id:p("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);!R(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(R(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 a of this.messageListeners)a([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 I(this),ke()}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 z={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 Me(){let s=O(z.MODE);if(s==="mock"||s==="real")return s;let e=O(z.USE_MOCK);return e==="true"||e==="1"||Xi()?"mock":"real"}function Qi(){let s={},e=O(z.MOCK_LATENCY);e&&(s.latencyMs=parseInt(e,10));let t=O(z.MOCK_STRICT);(t==="true"||t==="1")&&(s.strictMode=!0);let i=O(z.MOCK_SCENARIO);i&&(s.scenario=i);let o=O(z.MOCK_SEED);return o&&(s.seed=parseInt(o,10)),s}function Wi(){let s={},e=O(z.API_URL);e&&(s.apiUrl=e);let t=O(z.AUTH_URL);t&&(s.authUrl=t);let i=O(z.ORG_ID);return i&&(s.organizationId=i),s}function O(s){if(typeof process<"u"&&process.env)return process.env[s];if(typeof import.meta<"u"&&import.meta.env)return import.meta.env[`VITE_${s}`]||import.meta.env[s];if(typeof window<"u"&&window.__ENV__)return window.__ENV__[s]}function Xi(){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 U=class s{static create(e){if((e.mode??Me())==="mock"){let i={...Qi(),...e.mockConfig,organizationId:e.organizationId,apiUrl:e.apiUrl};return new E(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 _e(e)}static createFromEnv(e){let t=e?.mode??Me(),i=Wi();return s.create({...i,...e,mode:t})}static createMock(e){return new E({organizationId:"mock_org",apiUrl:"https://mock-livekit.local",...e})}static createDeterministicMock(e=12345){return new E({organizationId:"mock_org",apiUrl:"https://mock-livekit.local",seed:e,strictMode:!0})}static getCurrentMode(){return Me()}static isMockMode(){return Me()==="mock"}static isMockService(e){return e instanceof E}};function Rt(s){return U.createFromEnv(s)}function xe(s){return U.createMock(s)}function Ae(s){let e=s?.id??p("room"),t=new Date().toISOString();return{id:e,name:`Test Room ${e}`,groupId:p("group"),createdAt:t,isActive:!0,participantIds:[],connectionState:"connected",wsURL:Y(e),token:C(e,"local_user",t),...s}}function Ce(s="local_user",e){let t=Ae(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 $e(s){let e=Ae(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 Pe(s,e){let{room:t,localParticipant:i}=Ce("local_user",e),o=new Date().toISOString(),a=p("agent"),r={id:a,roomId:t.id,name:"AI Assistant",status:"running",startedAt:o,config:{responseStrategy:"echo",nature:"ai",...s},messageHistory:[]},n={identity:`agent_${a}`,name:"AI Assistant",roomId:t.id,joinedAt:o,isConnected:!0,trackIds:[],role:"agent",attributes:{},kind:"agent",isLocal:!1};return t.participantIds.push(n.identity),{room:t,localParticipant:i,agent:r,agentParticipant:n}}function Tt(s){let{room:e,localParticipant:t,agent:i,agentParticipant:o}=Pe(void 0,s),a={id:p("track"),kind:"data",source:"unknown",participantIdentity:o.identity,roomId:e.id,publishedAt:new Date().toISOString(),muted:!1};return o.trackIds.push(a.id),{room:e,localParticipant:t,agent:i,dataTrack:a}}function It(s){let{room:e,localParticipant:t}=Ce("local_user",s),i=new Date().toISOString(),o={id:p("track"),kind:"audio",source:"microphone",participantIdentity:t.identity,roomId:e.id,publishedAt:i,muted:!1},a={id:p("track"),kind:"video",source:"camera",participantIdentity:t.identity,roomId:e.id,publishedAt:i,muted:!1};return t.trackIds.push(o.id,a.id),{room:e,participant:t,audioTrack:o,videoTrack:a}}function qe(s,e){let t=e?.identity??p("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 Et(s,e){let t=[];for(let i=0;i<e;i++)t.push(qe(s,{identity:`participant_${i+1}`,name:`Participant ${i+1}`,isLocal:i===0}));return t}function Re(s,e){return{id:e?.id??p("agent"),roomId:s,name:"AI Assistant",status:"running",startedAt:new Date().toISOString(),config:{responseStrategy:"echo",nature:"ai",...e?.config},messageHistory:[],...e}}function zt(s,e){return Re(s,{config:{responseStrategy:"canned",cannedResponses:e}})}function Ot(s,e){return Re(s,{config:{responseStrategy:"sequential",cannedResponses:e}})}function Lt(s,e,t){return{id:p("msg"),roomId:s,content:"Test message",participantIdentity:e,createdAt:new Date().toISOString(),type:"standard",...t}}function Ne(s,e){return e.map((t,i)=>({id:p("msg"),roomId:s,content:t.content,participantIdentity:t.identity,createdAt:new Date(Date.now()+i*1e3).toISOString(),type:"standard"}))}function me(s){return{latencyMs:0,strictMode:!1,autoEmitEvents:!0,organizationId:"test_org",apiUrl:"https://mock-api.local",...s}}function Dt(s){return me({strictMode:!0,...s})}function Ft(s,e){return me({latencyMs:s,...e})}function Ut(s,e){return me({seed:s,...e})}function $t(){let{room:s,localParticipant:e,agent:t,agentParticipant:i}=Pe(),o=Ne(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 qt(){let{room:s,participant1:e,participant2:t}=$e(),i=new Date().toISOString(),o=[{id:p("track"),kind:"audio",source:"microphone",participantIdentity:e.identity,roomId:s.id,publishedAt:i,muted:!1},{id:p("track"),kind:"video",source:"camera",participantIdentity:e.identity,roomId:s.id,publishedAt:i,muted:!1},{id:p("track"),kind:"audio",source:"microphone",participantIdentity:t.identity,roomId:s.id,publishedAt:i,muted:!1},{id:p("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 ue=class{constructor(e,t,i,o,a){this.index=0;this._complete=!1;this.info={id:e,attributes:o,topic:a,timestamp:Date.now()},this.participantIdentity=t,this.topic=a,this.chunks=Array.isArray(i)?i:[i],this.info.totalSize=this.chunks.reduce((r,n)=>r+n.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}};var $=null;function b(s){return $||($=xe({organizationId:"storybook_org",apiUrl:"https://storybook.mock",latencyMs:50,autoEmitEvents:!0,...s})),$}function He(){$&&$.reset()}async function Nt(){$&&(await $.destroy(),$=null)}function Ht(s={}){return(e,t)=>{He();let i={default:void 0,slow_network:"slow_network",unreliable:"unreliable",agent_timeout:"agent_timeout"},o=b({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 a of s.seedMessages)o.simulateIncomingMessage(a.from,a.content);s.autoStartAgent&&o.room?.id&&await o.startMockAgent(o.room.id,s.autoStartAgent)}}catch(a){console.error("[Storybook Mock] Setup error:",a)}})(),window.__mockConversationService=o,e()}}function Vt(s){return U.isMockService(s)}var Jt={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 Bt(s){return()=>b(s)}var Ve={async receiveMessage(s,e){b().simulateIncomingMessage(s,e)},simulateJoin(s,e){b().simulateParticipantJoin(s,e)},simulateLeave(s){b().simulateParticipantLeave(s)},async simulateVideoParticipant(s,e,t){let o=b().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=b().room;i&&await i.simulateAgentJoin(s,e||"AI Agent")},async enableLocalCamera(){let e=b().room;e&&await e.localParticipant.setCameraEnabled(!0)},async disableLocalCamera(){let e=b().room;e&&await e.localParticipant.setCameraEnabled(!1)},async enableLocalMicrophone(){let e=b().room;e&&await e.localParticipant.setMicrophoneEnabled(!0)},async simulateMultipleParticipants(s){let e=["Alice","Bob","Carol","David","Eve","Frank","Grace","Henry","Ivy","Jack"],i=b().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(a=>setTimeout(a,100))},clearParticipants(){let e=b().room;if(e)for(let t of e.remoteParticipants.keys())e.simulateParticipantLeave(t)},simulateCallRequest(s,e){b().simulateCallRequest({name:s,guestId:e||`guest_${Date.now()}`})},async simulateDisconnect(){await b().simulateDisconnect()},getEventHistory(){return b().getEventHistory()},exportState(){return b().exportState()},getRoom(){return b().room}};typeof window<"u"&&(window.MockServiceActions=Ve);var Je={OpenWidget:"openWidget",InitialStep:"initialStep"};var Be="ol",Kt={Action:"action",Message:"message",StepId:"stepId",InstallationId:"installationId"},oo=new Set(Object.values(Je)),Ke=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(Be)&&i.substring(Be.length)in Kt&&(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(Kt)){let a=`${Be}${i}`,r=t.get(a);if(r!==null){if(o==="action"){oo.has(r)&&(e.action=r);continue}e[o]=r}}return e}};export{ne as AgentNotFoundError,_i as Asset,U as ConversationServiceFactory,Je as DeepLinkAction,Ke as DeepLinkService,de as InvalidOperationError,E as MockConversationService,X as MockEventEmitter,f as MockLiveKitError,N as MockLocalParticipant,T as MockParticipant,I as MockRoom,Ve as MockServiceActions,Z as MockState,ue as MockTextStreamReader,M as MockTrack,_ as MockTrackPublication,ce as NetworkError,y as OSBAsset,v as OSBSideBar,x as OSBUpload,se as ParticipantAlreadyJoinedError,ae as ParticipantNotFoundError,oe as RoomEndedError,P as RoomNotFoundError,We as SYNTHETIC_MEDIA_PRESETS,Ai as SideBar,Jt as StorybookScenarios,pe as TimeoutError,re as TrackNotFoundError,le as UnauthorizedError,Ri as Upload,Re as createAgentFixture,zt as createAgentWithCannedResponses,$t as createChatScenario,Ne as createConversationFixture,Rt as createConversationService,me as createDefaultConfig,Ae as createDefaultRoomFixture,Ut as createDeterministicConfig,W as createErrorFromMockError,Ft as createLatencyConfig,Lt as createMessageFixture,xe as createMockConversationService,Bt as createMockServiceFactory,Et as createParticipantBatch,qe as createParticipantFixture,Pe as createRoomWithAgent,Tt as createRoomWithAgentAndDataTrack,Ce as createRoomWithLocalParticipant,It as createRoomWithMediaTracks,$e as createRoomWithTwoParticipants,Ot as createSequentialAgent,Dt as createStrictConfig,Ye as createSyntheticAudioTrack,Qe as createSyntheticMedia,Xe as createSyntheticMediaFromPreset,Ge as createSyntheticVideoTrack,qt as createVideoCallScenario,ct as decodeMockToken,Nt as destroyStorybookMockService,gt as generateMockApiResponseId,vt as generateMockExternalId,p as generateMockId,ht as generateMockIdBatch,ut as generateMockMessageId,dt as generateMockParticipantIdentity,pt as generateMockRoomName,C as generateMockToken,mt as generateMockTrackSid,Y as generateMockWsUrl,lt as generateSeededMockId,b as getStorybookMockService,Vt as isMockConversationService,R as isMockError,ft as isMockLiveKitError,ke as resetIdCounter,He as resetStorybookMockService,nt as setIdCounter,Ht as withMockConversationService};
4771
+ /*! @onlive.ai/common-121 v0.2.228 | © 2026 Onlive.ai */