@onlive.ai/common-121 0.2.227 → 0.2.230
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.
- package/{audi-dark.theme-CmBU76BS.d.cts → audi-dark.theme-BDa-xEbe.d.cts} +1 -1
- package/{audi-dark.theme-CmBU76BS.d.ts → audi-dark.theme-BDa-xEbe.d.ts} +1 -1
- package/{audi.theme-Dv00cyiq.d.cts → audi.theme-B-t6TJ4Q.d.cts} +1 -1
- package/{audi.theme-Dv00cyiq.d.ts → audi.theme-B-t6TJ4Q.d.ts} +1 -1
- package/{australia.theme-MBhnmXS4.d.cts → australia.theme-Do8ilkFN.d.cts} +1 -1
- package/{australia.theme-MBhnmXS4.d.ts → australia.theme-Do8ilkFN.d.ts} +1 -1
- package/{chunk-QP5HM4T4.js → chunk-5KMLMQ5U.js} +1 -1
- package/components/asset/asset-modal-portal.cjs +1 -1
- package/components/asset/asset-modal-portal.d.cts +1 -1
- package/components/asset/asset-modal-portal.d.ts +1 -1
- package/components/asset/asset-modal-portal.js +1 -1
- package/components/asset/asset.cjs +38 -39
- package/components/asset/asset.d.cts +1 -1
- package/components/asset/asset.d.ts +1 -1
- package/components/asset/asset.js +28 -29
- package/components/asset/asset.loaders.cjs +1 -1
- package/components/asset/asset.loaders.d.cts +1 -1
- package/components/asset/asset.loaders.d.ts +1 -1
- package/components/asset/asset.loaders.js +1 -1
- package/components/asset/asset.renderer.cjs +77 -78
- package/components/asset/asset.renderer.d.cts +1 -1
- package/components/asset/asset.renderer.d.ts +1 -1
- package/components/asset/asset.renderer.js +20 -21
- package/components/asset/asset.styles.cjs +1 -1
- package/components/asset/asset.styles.d.cts +1 -1
- package/components/asset/asset.styles.d.ts +1 -1
- package/components/asset/asset.styles.js +1 -1
- package/components/asset/asset.types.cjs +1 -1
- package/components/asset/asset.types.d.cts +1 -1
- package/components/asset/asset.types.d.ts +1 -1
- package/components/asset/asset.types.js +1 -1
- package/components/asset/index.cjs +38 -39
- package/components/asset/index.d.cts +1 -1
- package/components/asset/index.d.ts +1 -1
- package/components/asset/index.js +28 -29
- package/components/player/player.cjs +5 -6
- package/components/player/player.d.cts +6 -1
- package/components/player/player.d.ts +6 -1
- package/components/player/player.js +6 -7
- package/components/player/player.styles.cjs +1 -1
- package/components/player/player.styles.d.cts +1 -1
- package/components/player/player.styles.d.ts +1 -1
- package/components/player/player.styles.js +1 -1
- package/components/side-bar/index.cjs +15 -16
- package/components/side-bar/index.d.cts +1 -1
- package/components/side-bar/index.d.ts +1 -1
- package/components/side-bar/index.js +9 -10
- package/components/side-bar/side-bar.cjs +9 -10
- package/components/side-bar/side-bar.d.cts +1 -1
- package/components/side-bar/side-bar.d.ts +1 -1
- package/components/side-bar/side-bar.js +9 -10
- package/components/side-bar/side-bar.styles.cjs +1 -1
- package/components/side-bar/side-bar.styles.d.cts +1 -1
- package/components/side-bar/side-bar.styles.d.ts +1 -1
- package/components/side-bar/side-bar.styles.js +1 -1
- package/components/side-bar/side-bar.types.cjs +1 -1
- package/components/side-bar/side-bar.types.d.cts +1 -1
- package/components/side-bar/side-bar.types.d.ts +1 -1
- package/components/side-bar/side-bar.types.js +1 -1
- package/components/upload/index.cjs +1 -1
- package/components/upload/index.d.cts +1 -1
- package/components/upload/index.d.ts +1 -1
- package/components/upload/index.js +1 -1
- package/components/upload/upload.cjs +1 -1
- package/components/upload/upload.d.cts +1 -1
- package/components/upload/upload.d.ts +1 -1
- package/components/upload/upload.js +1 -1
- package/components/upload/upload.styles.cjs +1 -1
- package/components/upload/upload.styles.d.cts +1 -1
- package/components/upload/upload.styles.d.ts +1 -1
- package/components/upload/upload.styles.js +1 -1
- package/components/upload/upload.types.cjs +1 -1
- package/components/upload/upload.types.d.cts +1 -1
- package/components/upload/upload.types.d.ts +1 -1
- package/components/upload/upload.types.js +1 -1
- package/{cuernavaca.theme-CUjrY9Xc.d.cts → cuernavaca.theme-C7eI43Ti.d.cts} +1 -1
- package/{cuernavaca.theme-CUjrY9Xc.d.ts → cuernavaca.theme-C7eI43Ti.d.ts} +1 -1
- package/{cupra-diagonal.theme-CpQckNhJ.d.cts → cupra-diagonal.theme-CTnux7Xn.d.cts} +1 -1
- package/{cupra-diagonal.theme-CpQckNhJ.d.ts → cupra-diagonal.theme-CTnux7Xn.d.ts} +1 -1
- package/{cupra-events.theme-cVqmX62Y.d.cts → cupra-events.theme-DVzhEs0S.d.cts} +1 -1
- package/{cupra-events.theme-cVqmX62Y.d.ts → cupra-events.theme-DVzhEs0S.d.ts} +1 -1
- package/{cupra.theme-DKaGh_O3.d.cts → cupra.theme-DGD1gXAe.d.cts} +1 -1
- package/{cupra.theme-DKaGh_O3.d.ts → cupra.theme-DGD1gXAe.d.ts} +1 -1
- package/{dark-BxHAJ7kM.d.cts → dark-Bp5g8THy.d.cts} +1 -1
- package/{dark-BxHAJ7kM.d.ts → dark-Bp5g8THy.d.ts} +1 -1
- package/{germany.theme-nFG04X6c.d.cts → germany.theme-Dr2KwHjU.d.cts} +1 -1
- package/{germany.theme-nFG04X6c.d.ts → germany.theme-Dr2KwHjU.d.ts} +1 -1
- package/{hyundai.theme-Dxmi6-Jk.d.cts → hyundai.theme-a4zB1THd.d.cts} +1 -1
- package/{hyundai.theme-Dxmi6-Jk.d.ts → hyundai.theme-a4zB1THd.d.ts} +1 -1
- package/index.cjs +13 -14
- package/index.d.cts +7 -2
- package/index.d.ts +7 -2
- package/index.iife.js +99 -100
- package/index.js +114 -115
- package/{italy.theme-ghaT8KXg.d.cts → italy.theme-jr09Vs7Z.d.cts} +1 -1
- package/{italy.theme-ghaT8KXg.d.ts → italy.theme-jr09Vs7Z.d.ts} +1 -1
- package/{jac-dark.theme-DdqAsf4f.d.cts → jac-dark.theme-CnuWig-V.d.cts} +1 -1
- package/{jac-dark.theme-DdqAsf4f.d.ts → jac-dark.theme-CnuWig-V.d.ts} +1 -1
- package/{jac.theme-Di6EpMHt.d.cts → jac.theme-CLx_Lx9m.d.cts} +1 -1
- package/{jac.theme-Di6EpMHt.d.ts → jac.theme-CLx_Lx9m.d.ts} +1 -1
- package/{light-BlLrq4kY.d.cts → light-SRZLDwc5.d.cts} +1 -1
- package/{light-BlLrq4kY.d.ts → light-SRZLDwc5.d.ts} +1 -1
- package/{magimix.theme-BPqGCjtn.d.cts → magimix.theme-BBI5gGGE.d.cts} +1 -1
- package/{magimix.theme-BPqGCjtn.d.ts → magimix.theme-BBI5gGGE.d.ts} +1 -1
- package/{media-PYNZP2A2.js → media-SMLGLG2N.js} +2 -2
- package/{onlive-ai.theme-DhO68-0D.d.cts → onlive-ai.theme-BzWL7xq-.d.cts} +1 -1
- package/{onlive-ai.theme-DhO68-0D.d.ts → onlive-ai.theme-BzWL7xq-.d.ts} +1 -1
- package/{onlive.theme-DLBUb-9X.d.cts → onlive.theme-wChpAYgO.d.cts} +1 -1
- package/{onlive.theme-DLBUb-9X.d.ts → onlive.theme-wChpAYgO.d.ts} +1 -1
- package/package.json +2 -2
- package/peugeot.theme-2goyfg2G.d.cts +11 -0
- package/peugeot.theme-2goyfg2G.d.ts +11 -0
- package/react/components/asset/Asset.cjs +1 -1
- package/react/components/asset/Asset.jsx +1 -1
- package/react/components/side-bar/SideBar.cjs +1 -1
- package/react/components/side-bar/SideBar.jsx +1 -1
- package/react/components/upload/Upload.cjs +1 -1
- package/react/components/upload/Upload.jsx +1 -1
- package/{seat-cupra.theme-qDT2y1oc.d.cts → seat-cupra.theme-CmR-q7Xu.d.cts} +1 -1
- package/{seat-cupra.theme-qDT2y1oc.d.ts → seat-cupra.theme-CmR-q7Xu.d.ts} +1 -1
- package/{seat.theme-CLUnSkVY.d.cts → seat.theme-BCvHF65K.d.cts} +1 -1
- package/{seat.theme-CLUnSkVY.d.ts → seat.theme-BCvHF65K.d.ts} +1 -1
- package/services/audio.service.cjs +1 -1
- package/services/audio.service.d.cts +1 -1
- package/services/audio.service.d.ts +1 -1
- package/services/audio.service.js +1 -1
- package/services/conversation/conversation.service.cjs +1 -1
- package/services/conversation/conversation.service.d.cts +1 -1
- package/services/conversation/conversation.service.d.ts +1 -1
- package/services/conversation/conversation.service.js +1 -1
- package/services/conversation/conversation.types.cjs +1 -1
- package/services/conversation/conversation.types.d.cts +1 -1
- package/services/conversation/conversation.types.d.ts +1 -1
- package/services/conversation/conversation.types.js +1 -1
- package/services/conversation/index.cjs +1 -1
- package/services/conversation/index.d.cts +1 -1
- package/services/conversation/index.d.ts +1 -1
- package/services/conversation/index.js +1 -1
- package/services/conversation/mock/actor/agent.cjs +1 -1
- package/services/conversation/mock/actor/agent.d.cts +1 -1
- package/services/conversation/mock/actor/agent.d.ts +1 -1
- package/services/conversation/mock/actor/agent.js +1 -1
- package/services/conversation/mock/actor/index.cjs +1 -1
- package/services/conversation/mock/actor/index.d.cts +1 -1
- package/services/conversation/mock/actor/index.d.ts +1 -1
- package/services/conversation/mock/actor/index.js +1 -1
- package/services/conversation/mock/actor/strategies.cjs +1 -1
- package/services/conversation/mock/actor/strategies.d.cts +1 -1
- package/services/conversation/mock/actor/strategies.d.ts +1 -1
- package/services/conversation/mock/actor/strategies.js +1 -1
- package/services/conversation/mock/errors.cjs +1 -1
- package/services/conversation/mock/errors.d.cts +1 -1
- package/services/conversation/mock/errors.d.ts +1 -1
- package/services/conversation/mock/errors.js +1 -1
- package/services/conversation/mock/events.cjs +1 -1
- package/services/conversation/mock/events.d.cts +1 -1
- package/services/conversation/mock/events.d.ts +1 -1
- package/services/conversation/mock/events.js +1 -1
- package/services/conversation/mock/factory.cjs +1 -1
- package/services/conversation/mock/factory.d.cts +1 -1
- package/services/conversation/mock/factory.d.ts +1 -1
- package/services/conversation/mock/factory.js +1 -1
- package/services/conversation/mock/fixtures.cjs +1 -1
- package/services/conversation/mock/fixtures.d.cts +1 -1
- package/services/conversation/mock/fixtures.d.ts +1 -1
- package/services/conversation/mock/fixtures.js +1 -1
- package/services/conversation/mock/generators.cjs +1 -1
- package/services/conversation/mock/generators.d.cts +1 -1
- package/services/conversation/mock/generators.d.ts +1 -1
- package/services/conversation/mock/generators.js +1 -1
- package/services/conversation/mock/index.cjs +1 -1
- package/services/conversation/mock/index.d.cts +1 -1
- package/services/conversation/mock/index.d.ts +1 -1
- package/services/conversation/mock/index.js +1 -1
- package/services/conversation/mock/livekit/index.cjs +1 -1
- package/services/conversation/mock/livekit/index.d.cts +1 -1
- package/services/conversation/mock/livekit/index.d.ts +1 -1
- package/services/conversation/mock/livekit/index.js +1 -1
- package/services/conversation/mock/livekit/local-participant.cjs +1 -1
- package/services/conversation/mock/livekit/local-participant.d.cts +1 -1
- package/services/conversation/mock/livekit/local-participant.d.ts +1 -1
- package/services/conversation/mock/livekit/local-participant.js +1 -1
- package/services/conversation/mock/livekit/participant.cjs +1 -1
- package/services/conversation/mock/livekit/participant.d.cts +1 -1
- package/services/conversation/mock/livekit/participant.d.ts +1 -1
- package/services/conversation/mock/livekit/participant.js +1 -1
- package/services/conversation/mock/livekit/room.cjs +1 -1
- package/services/conversation/mock/livekit/room.d.cts +1 -1
- package/services/conversation/mock/livekit/room.d.ts +1 -1
- package/services/conversation/mock/livekit/room.js +1 -1
- package/services/conversation/mock/livekit/streams.cjs +1 -1
- package/services/conversation/mock/livekit/streams.d.cts +1 -1
- package/services/conversation/mock/livekit/streams.d.ts +1 -1
- package/services/conversation/mock/livekit/streams.js +1 -1
- package/services/conversation/mock/livekit/tracks.cjs +1 -1
- package/services/conversation/mock/livekit/tracks.d.cts +1 -1
- package/services/conversation/mock/livekit/tracks.d.ts +1 -1
- package/services/conversation/mock/livekit/tracks.js +1 -1
- package/services/conversation/mock/media.cjs +1 -1
- package/services/conversation/mock/media.d.cts +1 -1
- package/services/conversation/mock/media.d.ts +1 -1
- package/services/conversation/mock/media.js +1 -1
- package/services/conversation/mock/service.cjs +1 -1
- package/services/conversation/mock/service.d.cts +1 -1
- package/services/conversation/mock/service.d.ts +1 -1
- package/services/conversation/mock/service.js +1 -1
- package/services/conversation/mock/service.test.cjs +1 -1
- package/services/conversation/mock/service.test.d.cts +1 -1
- package/services/conversation/mock/service.test.d.ts +1 -1
- package/services/conversation/mock/service.test.js +1 -1
- package/services/conversation/mock/state.cjs +1 -1
- package/services/conversation/mock/state.d.cts +1 -1
- package/services/conversation/mock/state.d.ts +1 -1
- package/services/conversation/mock/state.js +1 -1
- package/services/conversation/mock/storybook.cjs +1 -1
- package/services/conversation/mock/storybook.d.cts +1 -1
- package/services/conversation/mock/storybook.d.ts +1 -1
- package/services/conversation/mock/storybook.js +1 -1
- package/services/conversation/mock/types.cjs +1 -1
- package/services/conversation/mock/types.d.cts +1 -1
- package/services/conversation/mock/types.d.ts +1 -1
- package/services/conversation/mock/types.js +1 -1
- package/services/deep-link.service.cjs +1 -1
- package/services/deep-link.service.d.cts +1 -1
- package/services/deep-link.service.d.ts +1 -1
- package/services/deep-link.service.js +1 -1
- package/services/faqs/faqs.service.cjs +1 -1
- package/services/faqs/faqs.service.d.cts +1 -1
- package/services/faqs/faqs.service.d.ts +1 -1
- package/services/faqs/faqs.service.js +1 -1
- package/services/faqs/faqs.types.cjs +1 -1
- package/services/faqs/faqs.types.d.cts +1 -1
- package/services/faqs/faqs.types.d.ts +1 -1
- package/services/faqs/faqs.types.js +1 -1
- package/services/faqs/index.cjs +1 -1
- package/services/faqs/index.d.cts +1 -1
- package/services/faqs/index.d.ts +1 -1
- package/services/faqs/index.js +1 -1
- package/services/file/file.service.cjs +1 -1
- package/services/file/file.service.d.cts +1 -1
- package/services/file/file.service.d.ts +1 -1
- package/services/file/file.service.js +1 -1
- package/services/file/file.types.cjs +1 -1
- package/services/file/file.types.d.cts +1 -1
- package/services/file/file.types.d.ts +1 -1
- package/services/file/file.types.js +1 -1
- package/services/file/index.cjs +1 -1
- package/services/file/index.d.cts +1 -1
- package/services/file/index.d.ts +1 -1
- package/services/file/index.js +1 -1
- package/services/firebase/firebase-api.cjs +1 -1
- package/services/firebase/firebase-api.d.cts +1 -1
- package/services/firebase/firebase-api.d.ts +1 -1
- package/services/firebase/firebase-api.js +1 -1
- package/services/multimedia/config.example.cjs +1 -1
- package/services/multimedia/config.example.d.cts +1 -1
- package/services/multimedia/config.example.d.ts +1 -1
- package/services/multimedia/config.example.js +1 -1
- package/services/multimedia/index.cjs +1 -1
- package/services/multimedia/index.d.cts +1 -1
- package/services/multimedia/index.d.ts +1 -1
- package/services/multimedia/index.js +1 -1
- package/services/multimedia/multimedia.service.cjs +1 -1
- package/services/multimedia/multimedia.service.d.cts +1 -1
- package/services/multimedia/multimedia.service.d.ts +1 -1
- package/services/multimedia/multimedia.service.js +1 -1
- package/services/multimedia/multimedia.types.cjs +1 -1
- package/services/multimedia/multimedia.types.d.cts +1 -1
- package/services/multimedia/multimedia.types.d.ts +1 -1
- package/services/multimedia/multimedia.types.js +1 -1
- package/services/product/index.cjs +1 -1
- package/services/product/index.d.cts +1 -1
- package/services/product/index.d.ts +1 -1
- package/services/product/index.js +1 -1
- package/services/product/product.service.cjs +1 -1
- package/services/product/product.service.d.cts +1 -1
- package/services/product/product.service.d.ts +1 -1
- package/services/product/product.service.js +1 -1
- package/services/product/product.types.cjs +1 -1
- package/services/product/product.types.d.cts +1 -1
- package/services/product/product.types.d.ts +1 -1
- package/services/product/product.types.js +1 -1
- package/services/request.provider.cjs +1 -1
- package/services/request.provider.d.cts +1 -1
- package/services/request.provider.d.ts +1 -1
- package/services/request.provider.js +1 -1
- package/services/session.service.cjs +1 -1
- package/services/session.service.d.cts +1 -1
- package/services/session.service.d.ts +1 -1
- package/services/session.service.js +1 -1
- package/services/sessions-api.service.cjs +1 -1
- package/services/sessions-api.service.d.cts +1 -1
- package/services/sessions-api.service.d.ts +1 -1
- package/services/sessions-api.service.js +1 -1
- package/services/sessions.controller.cjs +1 -1
- package/services/sessions.controller.d.cts +1 -1
- package/services/sessions.controller.d.ts +1 -1
- package/services/sessions.controller.js +1 -1
- package/services/sessions.types.cjs +1 -1
- package/services/sessions.types.d.cts +1 -1
- package/services/sessions.types.d.ts +1 -1
- package/services/sessions.types.js +1 -1
- package/services/upload/index.cjs +1 -1
- package/services/upload/index.d.cts +1 -1
- package/services/upload/index.d.ts +1 -1
- package/services/upload/index.js +1 -1
- package/services/upload/upload.service.cjs +1 -1
- package/services/upload/upload.service.d.cts +1 -1
- package/services/upload/upload.service.d.ts +1 -1
- package/services/upload/upload.service.js +1 -1
- package/{skoda.theme-ChGMp526.d.cts → skoda.theme-BCNfnrlu.d.cts} +1 -1
- package/{skoda.theme-ChGMp526.d.ts → skoda.theme-BCNfnrlu.d.ts} +1 -1
- package/themes/custom/audi-dark.theme.cjs +1 -1
- package/themes/custom/audi-dark.theme.d.cts +2 -2
- package/themes/custom/audi-dark.theme.d.ts +2 -2
- package/themes/custom/audi-dark.theme.js +1 -1
- package/themes/custom/audi.theme.cjs +1 -1
- package/themes/custom/audi.theme.d.cts +2 -2
- package/themes/custom/audi.theme.d.ts +2 -2
- package/themes/custom/audi.theme.js +1 -1
- package/themes/custom/australia.theme.cjs +1 -1
- package/themes/custom/australia.theme.d.cts +2 -2
- package/themes/custom/australia.theme.d.ts +2 -2
- package/themes/custom/australia.theme.js +1 -1
- package/themes/custom/cuernavaca.theme.cjs +1 -1
- package/themes/custom/cuernavaca.theme.d.cts +2 -2
- package/themes/custom/cuernavaca.theme.d.ts +2 -2
- package/themes/custom/cuernavaca.theme.js +1 -1
- package/themes/custom/cupra-diagonal.theme.cjs +1 -1
- package/themes/custom/cupra-diagonal.theme.d.cts +2 -2
- package/themes/custom/cupra-diagonal.theme.d.ts +2 -2
- package/themes/custom/cupra-diagonal.theme.js +1 -1
- package/themes/custom/cupra-events.theme.cjs +1 -1
- package/themes/custom/cupra-events.theme.d.cts +2 -2
- package/themes/custom/cupra-events.theme.d.ts +2 -2
- package/themes/custom/cupra-events.theme.js +1 -1
- package/themes/custom/cupra.theme.cjs +1 -1
- package/themes/custom/cupra.theme.d.cts +2 -2
- package/themes/custom/cupra.theme.d.ts +2 -2
- package/themes/custom/cupra.theme.js +1 -1
- package/themes/custom/germany.theme.cjs +1 -1
- package/themes/custom/germany.theme.d.cts +2 -2
- package/themes/custom/germany.theme.d.ts +2 -2
- package/themes/custom/germany.theme.js +1 -1
- package/themes/custom/glass.theme.cjs +1 -1
- package/themes/custom/glass.theme.d.cts +1 -1
- package/themes/custom/glass.theme.d.ts +1 -1
- package/themes/custom/glass.theme.js +1 -1
- package/themes/custom/hyundai.theme.cjs +1 -1
- package/themes/custom/hyundai.theme.d.cts +2 -2
- package/themes/custom/hyundai.theme.d.ts +2 -2
- package/themes/custom/hyundai.theme.js +1 -1
- package/themes/custom/italy.theme.cjs +1 -1
- package/themes/custom/italy.theme.d.cts +2 -2
- package/themes/custom/italy.theme.d.ts +2 -2
- package/themes/custom/italy.theme.js +1 -1
- package/themes/custom/jac-dark.theme.cjs +1 -1
- package/themes/custom/jac-dark.theme.d.cts +2 -2
- package/themes/custom/jac-dark.theme.d.ts +2 -2
- package/themes/custom/jac-dark.theme.js +1 -1
- package/themes/custom/jac.theme.cjs +1 -1
- package/themes/custom/jac.theme.d.cts +2 -2
- package/themes/custom/jac.theme.d.ts +2 -2
- package/themes/custom/jac.theme.js +1 -1
- package/themes/custom/magimix.theme.cjs +1 -1
- package/themes/custom/magimix.theme.d.cts +2 -2
- package/themes/custom/magimix.theme.d.ts +2 -2
- package/themes/custom/magimix.theme.js +1 -1
- package/themes/custom/onlive-ai.theme.cjs +1 -1
- package/themes/custom/onlive-ai.theme.d.cts +2 -2
- package/themes/custom/onlive-ai.theme.d.ts +2 -2
- package/themes/custom/onlive-ai.theme.js +1 -1
- package/themes/custom/onlive.theme.cjs +1 -1
- package/themes/custom/onlive.theme.d.cts +2 -2
- package/themes/custom/onlive.theme.d.ts +2 -2
- package/themes/custom/onlive.theme.js +1 -1
- package/themes/custom/peugeot.theme.cjs +372 -0
- package/themes/custom/peugeot.theme.css +369 -0
- package/themes/custom/peugeot.theme.d.cts +3 -0
- package/themes/custom/peugeot.theme.d.ts +3 -0
- package/themes/custom/peugeot.theme.js +372 -0
- package/themes/custom/seat-cupra.theme.cjs +1 -1
- package/themes/custom/seat-cupra.theme.d.cts +2 -2
- package/themes/custom/seat-cupra.theme.d.ts +2 -2
- package/themes/custom/seat-cupra.theme.js +1 -1
- package/themes/custom/seat.theme.cjs +36 -31
- package/themes/custom/seat.theme.css +36 -31
- package/themes/custom/seat.theme.d.cts +2 -2
- package/themes/custom/seat.theme.d.ts +2 -2
- package/themes/custom/seat.theme.js +36 -31
- package/themes/custom/skoda.theme.cjs +1 -1
- package/themes/custom/skoda.theme.d.cts +2 -2
- package/themes/custom/skoda.theme.d.ts +2 -2
- package/themes/custom/skoda.theme.js +1 -1
- package/themes/custom/transparency.theme.cjs +1 -1
- package/themes/custom/transparency.theme.d.cts +2 -2
- package/themes/custom/transparency.theme.d.ts +2 -2
- package/themes/custom/transparency.theme.js +1 -1
- package/themes/dark.cjs +1 -1
- package/themes/dark.d.cts +2 -2
- package/themes/dark.d.ts +2 -2
- package/themes/dark.js +1 -1
- package/themes/light.cjs +1 -1
- package/themes/light.d.cts +2 -2
- package/themes/light.d.ts +2 -2
- package/themes/light.js +1 -1
- package/{transparency.theme-GZeoSWwI.d.cts → transparency.theme-CGmZFrjm.d.cts} +1 -1
- package/{transparency.theme-GZeoSWwI.d.ts → transparency.theme-CGmZFrjm.d.ts} +1 -1
- package/types/deep-link.types.cjs +1 -1
- package/types/deep-link.types.d.cts +1 -1
- package/types/deep-link.types.d.ts +1 -1
- package/types/deep-link.types.js +1 -1
- package/types/globals.cjs +1 -1
- package/types/globals.d.cts +1 -1
- package/types/globals.d.ts +1 -1
- package/types/globals.js +1 -1
- package/types/tracking-options.cjs +1 -1
- package/types/tracking-options.d.cts +1 -1
- package/types/tracking-options.d.ts +1 -1
- package/types/tracking-options.js +1 -1
- package/utils/adopt-styles.cjs +1 -1
- package/utils/adopt-styles.d.cts +1 -1
- package/utils/adopt-styles.d.ts +1 -1
- package/utils/adopt-styles.js +1 -1
- package/utils/apply-optional-styles.cjs +428 -53
- package/utils/apply-optional-styles.d.cts +25 -23
- package/utils/apply-optional-styles.d.ts +25 -23
- package/utils/apply-optional-styles.js +428 -53
- package/utils/browser-preferences.cjs +1 -1
- package/utils/browser-preferences.d.cts +1 -1
- package/utils/browser-preferences.d.ts +1 -1
- package/utils/browser-preferences.js +1 -1
- package/utils/classify-media.cjs +1 -1
- package/utils/classify-media.d.cts +1 -1
- package/utils/classify-media.d.ts +1 -1
- package/utils/classify-media.js +1 -1
- package/utils/decorators.cjs +1 -1
- package/utils/decorators.d.cts +1 -1
- package/utils/decorators.d.ts +1 -1
- package/utils/decorators.js +1 -1
- package/utils/detected-lang.cjs +1 -1
- package/utils/detected-lang.d.cts +1 -1
- package/utils/detected-lang.d.ts +1 -1
- package/utils/detected-lang.js +1 -1
- package/utils/fullscreen.cjs +1 -1
- package/utils/fullscreen.d.cts +1 -1
- package/utils/fullscreen.d.ts +1 -1
- package/utils/fullscreen.js +1 -1
- package/utils/insert-script.cjs +1 -1
- package/utils/insert-script.d.cts +1 -1
- package/utils/insert-script.d.ts +1 -1
- package/utils/insert-script.js +1 -1
- package/utils/is-map-compatible.cjs +1 -1
- package/utils/is-map-compatible.d.cts +1 -1
- package/utils/is-map-compatible.d.ts +1 -1
- package/utils/is-map-compatible.js +1 -1
- package/utils/markdown.cjs +1 -1
- package/utils/markdown.d.cts +1 -1
- package/utils/markdown.d.ts +1 -1
- package/utils/markdown.js +1 -1
- package/utils/merge.cjs +1 -1
- package/utils/merge.d.cts +1 -1
- package/utils/merge.d.ts +1 -1
- package/utils/merge.js +1 -1
- package/utils/multiband-track-volume.cjs +1 -1
- package/utils/multiband-track-volume.d.cts +1 -1
- package/utils/multiband-track-volume.d.ts +1 -1
- package/utils/multiband-track-volume.js +1 -1
- package/utils/onlive-url-params.cjs +1 -1
- package/utils/onlive-url-params.d.cts +1 -1
- package/utils/onlive-url-params.d.ts +1 -1
- package/utils/onlive-url-params.js +1 -1
- package/utils/pretty-distance.cjs +1 -1
- package/utils/pretty-distance.d.cts +1 -1
- package/utils/pretty-distance.d.ts +1 -1
- package/utils/pretty-distance.js +1 -1
- package/utils/pretty-time.cjs +1 -1
- package/utils/pretty-time.d.cts +1 -1
- package/utils/pretty-time.d.ts +1 -1
- package/utils/pretty-time.js +1 -1
- package/utils/random-string.cjs +1 -1
- package/utils/random-string.d.cts +1 -1
- package/utils/random-string.d.ts +1 -1
- package/utils/random-string.js +1 -1
- package/utils/resource-type.cjs +1 -1
- package/utils/resource-type.d.cts +1 -1
- package/utils/resource-type.d.ts +1 -1
- package/utils/resource-type.js +1 -1
- package/utils/round-number.cjs +1 -1
- package/utils/round-number.d.cts +1 -1
- package/utils/round-number.d.ts +1 -1
- package/utils/round-number.js +1 -1
- package/utils/safe-html.cjs +1 -1
- package/utils/safe-html.d.cts +1 -1
- package/utils/safe-html.d.ts +1 -1
- package/utils/safe-html.js +1 -1
- package/utils/sanitize.cjs +1 -1
- package/utils/sanitize.d.cts +1 -1
- package/utils/sanitize.d.ts +1 -1
- package/utils/sanitize.js +1 -1
- package/utils/spread.cjs +1 -1
- package/utils/spread.d.cts +1 -1
- package/utils/spread.d.ts +1 -1
- package/utils/spread.js +1 -1
- package/utils/watch.cjs +1 -1
- package/utils/watch.d.cts +1 -1
- package/utils/watch.d.ts +1 -1
- package/utils/watch.js +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @onlive.ai/common-121 v0.2.
|
|
1
|
+
/*! @onlive.ai/common-121 v0.2.230 | © 2026 Onlive.ai */
|
|
2
2
|
var a={responseStrategy:"echo",responseDelayMs:100,cannedResponses:[],type:"text",nature:"ai",simulateTyping:!1,typingDelayPerChar:20};function g(n,o,t=[],e=0,s=Math.random){switch(n){case"echo":return{response:`Echo: ${o}`,nextIndex:e};case"canned":return{response:t[0]||"Default response",nextIndex:e};case"sequential":return{response:t[e]||"No more responses",nextIndex:(e+1)%Math.max(1,t.length)};case"random":{if(t.length===0)return{response:"Random response",nextIndex:e};let r=Math.floor(s()*t.length);return{response:t[r],nextIndex:e}}case"silent":return{response:"",nextIndex:e};case"error":throw new Error("Agent error");case"custom":return{response:"",nextIndex:e};default:return{response:"Default agent response",nextIndex:e}}}export{a as DEFAULT_AGENT_CONFIG,g as generateStrategyResponse};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @onlive.ai/common-121 v0.2.
|
|
1
|
+
/*! @onlive.ai/common-121 v0.2.230 | © 2026 Onlive.ai */
|
|
2
2
|
"use strict";var T=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var R=(s,t)=>{for(var e in t)T(s,e,{get:t[e],enumerable:!0})},w=(s,t,e,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of m(t))!l.call(s,r)&&r!==e&&T(s,r,{get:()=>t[r],enumerable:!(o=g(t,r))||o.enumerable});return s};var M=s=>w(T({},"__esModule",{value:!0}),s);var h={};R(h,{AgentNotFoundError:()=>E,InvalidOperationError:()=>k,MockLiveKitError:()=>n,NetworkError:()=>p,ParticipantAlreadyJoinedError:()=>i,ParticipantNotFoundError:()=>u,RoomEndedError:()=>a,RoomNotFoundError:()=>c,TimeoutError:()=>N,TrackNotFoundError:()=>d,UnauthorizedError:()=>O,createErrorFromMockError:()=>x,isMockError:()=>_,isMockLiveKitError:()=>A});module.exports=M(h);var n=class s extends Error{constructor(t,e,o){super(e),this.name="MockLiveKitError",this.code=t,this.details=o,typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}toMockError(){return{code:this.code,message:this.message,details:this.details}}static fromMockError(t){return new s(t.code,t.message,t.details)}},c=class extends n{constructor(t){super("ROOM_NOT_FOUND",`Room not found: ${t}`,{roomId:t}),this.name="RoomNotFoundError"}},a=class extends n{constructor(t){super("ROOM_ENDED",`Room has ended: ${t}`,{roomId:t}),this.name="RoomEndedError"}},i=class extends n{constructor(t,e){super("PARTICIPANT_ALREADY_JOINED",`Participant ${t} is already in room ${e}`,{identity:t,roomId:e}),this.name="ParticipantAlreadyJoinedError"}},u=class extends n{constructor(t){super("PARTICIPANT_NOT_FOUND",`Participant not found: ${t}`,{identity:t}),this.name="ParticipantNotFoundError"}},d=class extends n{constructor(t){super("TRACK_NOT_FOUND",`Track not found: ${t}`,{trackId:t}),this.name="TrackNotFoundError"}},E=class extends n{constructor(t){super("AGENT_NOT_FOUND",`Agent not found: ${t}`,{agentId:t}),this.name="AgentNotFoundError"}},O=class extends n{constructor(t="Unauthorized"){super("UNAUTHORIZED",t),this.name="UnauthorizedError"}},p=class extends n{constructor(t="Network error occurred"){super("NETWORK_ERROR",t),this.name="NetworkError"}},k=class extends n{constructor(t,e){super("INVALID_OPERATION",t,e),this.name="InvalidOperationError"}},N=class extends n{constructor(t,e){super("TIMEOUT",`Operation timed out: ${t}`,{operation:t,timeoutMs:e}),this.name="TimeoutError"}};function x(s){switch(s.code){case"ROOM_NOT_FOUND":return new c(s.details?.roomId??"unknown");case"ROOM_ENDED":return new a(s.details?.roomId??"unknown");case"PARTICIPANT_ALREADY_JOINED":return new i(s.details?.identity??"unknown",s.details?.roomId??"unknown");case"PARTICIPANT_NOT_FOUND":return new u(s.details?.identity??"unknown");case"TRACK_NOT_FOUND":return new d(s.details?.trackId??"unknown");case"AGENT_NOT_FOUND":return new E(s.details?.agentId??"unknown");case"UNAUTHORIZED":return new O(s.message);case"NETWORK_ERROR":return new p(s.message);case"INVALID_OPERATION":return new k(s.message,s.details);case"TIMEOUT":return new N(s.details?.operation??"unknown",s.details?.timeoutMs??0);default:return n.fromMockError(s)}}function _(s){return typeof s=="object"&&s!==null&&"code"in s&&"message"in s&&typeof s.code=="string"&&typeof s.message=="string"}function A(s){return s instanceof n}0&&(module.exports={AgentNotFoundError,InvalidOperationError,MockLiveKitError,NetworkError,ParticipantAlreadyJoinedError,ParticipantNotFoundError,RoomEndedError,RoomNotFoundError,TimeoutError,TrackNotFoundError,UnauthorizedError,createErrorFromMockError,isMockError,isMockLiveKitError});
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @onlive.ai/common-121 v0.2.
|
|
1
|
+
/*! @onlive.ai/common-121 v0.2.230 | © 2026 Onlive.ai */
|
|
2
2
|
var n=class s extends Error{constructor(t,e,k){super(e),this.name="MockLiveKitError",this.code=t,this.details=k,typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}toMockError(){return{code:this.code,message:this.message,details:this.details}}static fromMockError(t){return new s(t.code,t.message,t.details)}},r=class extends n{constructor(t){super("ROOM_NOT_FOUND",`Room not found: ${t}`,{roomId:t}),this.name="RoomNotFoundError"}},o=class extends n{constructor(t){super("ROOM_ENDED",`Room has ended: ${t}`,{roomId:t}),this.name="RoomEndedError"}},c=class extends n{constructor(t,e){super("PARTICIPANT_ALREADY_JOINED",`Participant ${t} is already in room ${e}`,{identity:t,roomId:e}),this.name="ParticipantAlreadyJoinedError"}},a=class extends n{constructor(t){super("PARTICIPANT_NOT_FOUND",`Participant not found: ${t}`,{identity:t}),this.name="ParticipantNotFoundError"}},i=class extends n{constructor(t){super("TRACK_NOT_FOUND",`Track not found: ${t}`,{trackId:t}),this.name="TrackNotFoundError"}},u=class extends n{constructor(t){super("AGENT_NOT_FOUND",`Agent not found: ${t}`,{agentId:t}),this.name="AgentNotFoundError"}},d=class extends n{constructor(t="Unauthorized"){super("UNAUTHORIZED",t),this.name="UnauthorizedError"}},E=class extends n{constructor(t="Network error occurred"){super("NETWORK_ERROR",t),this.name="NetworkError"}},O=class extends n{constructor(t,e){super("INVALID_OPERATION",t,e),this.name="InvalidOperationError"}},p=class extends n{constructor(t,e){super("TIMEOUT",`Operation timed out: ${t}`,{operation:t,timeoutMs:e}),this.name="TimeoutError"}};function N(s){switch(s.code){case"ROOM_NOT_FOUND":return new r(s.details?.roomId??"unknown");case"ROOM_ENDED":return new o(s.details?.roomId??"unknown");case"PARTICIPANT_ALREADY_JOINED":return new c(s.details?.identity??"unknown",s.details?.roomId??"unknown");case"PARTICIPANT_NOT_FOUND":return new a(s.details?.identity??"unknown");case"TRACK_NOT_FOUND":return new i(s.details?.trackId??"unknown");case"AGENT_NOT_FOUND":return new u(s.details?.agentId??"unknown");case"UNAUTHORIZED":return new d(s.message);case"NETWORK_ERROR":return new E(s.message);case"INVALID_OPERATION":return new O(s.message,s.details);case"TIMEOUT":return new p(s.details?.operation??"unknown",s.details?.timeoutMs??0);default:return n.fromMockError(s)}}function T(s){return typeof s=="object"&&s!==null&&"code"in s&&"message"in s&&typeof s.code=="string"&&typeof s.message=="string"}function g(s){return s instanceof n}export{u as AgentNotFoundError,O as InvalidOperationError,n as MockLiveKitError,E as NetworkError,c as ParticipantAlreadyJoinedError,a as ParticipantNotFoundError,o as RoomEndedError,r as RoomNotFoundError,p as TimeoutError,i as TrackNotFoundError,d as UnauthorizedError,N as createErrorFromMockError,T as isMockError,g as isMockLiveKitError};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @onlive.ai/common-121 v0.2.
|
|
1
|
+
/*! @onlive.ai/common-121 v0.2.230 | © 2026 Onlive.ai */
|
|
2
2
|
"use strict";var r=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var m=(o,t)=>{for(var e in t)r(o,e,{get:t[e],enumerable:!0})},g=(o,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of v(t))!d.call(o,n)&&n!==e&&r(o,n,{get:()=>t[n],enumerable:!(i=c(t,n))||i.enumerable});return o};var M=o=>g(r({},"__esModule",{value:!0}),o);var k={};m(k,{MockEventEmitter:()=>a});module.exports=M(k);var a=class{constructor(){this.listeners={};this.wildcardListeners=new Set;this.eventHistory=[];this.maxHistorySize=1e3;this.recordHistory=!0}setMaxHistorySize(t){this.maxHistorySize=t,this.trimHistory()}setRecordHistory(t){this.recordHistory=t}on(t,e){return this.listeners[t]||(this.listeners[t]=new Set),this.listeners[t].add(e),()=>{this.off(t,e)}}once(t,e){let i=n=>{this.off(t,i),e(n)};return this.on(t,i)}off(t,e){this.listeners[t]?.delete(e)}onAny(t){return this.wildcardListeners.add(t),()=>{this.wildcardListeners.delete(t)}}offAny(t){this.wildcardListeners.delete(t)}removeAllListeners(t){t?delete this.listeners[t]:(this.listeners={},this.wildcardListeners.clear())}emit(t){this.recordHistory&&(this.eventHistory.push(t),this.trimHistory());let e=this.listeners[t.type];if(e)for(let i of e)try{i(t)}catch(n){console.error(`Error in mock event listener for ${t.type}:`,n)}for(let i of this.wildcardListeners)try{i(t)}catch(n){console.error("Error in mock wildcard event listener:",n)}}trimHistory(){this.eventHistory.length>this.maxHistorySize&&(this.eventHistory=this.eventHistory.slice(-this.maxHistorySize))}emitRoomCreated(t){let e={type:"roomCreated",timestamp:new Date().toISOString(),roomId:t.id,room:t};this.emit(e)}emitRoomEnded(t){let e={type:"roomEnded",timestamp:new Date().toISOString(),roomId:t};this.emit(e)}emitRoomConnectionStateChanged(t,e,i){let n={type:"roomConnectionStateChanged",timestamp:new Date().toISOString(),roomId:t,state:e,previousState:i};this.emit(n)}emitParticipantJoined(t,e){let i={type:"participantJoined",timestamp:new Date().toISOString(),roomId:t,participant:e};this.emit(i)}emitParticipantLeft(t,e){let i={type:"participantLeft",timestamp:new Date().toISOString(),roomId:t,participantIdentity:e};this.emit(i)}emitParticipantAttributesChanged(t,e,i,n){let s={type:"participantAttributesChanged",timestamp:new Date().toISOString(),roomId:t,participantIdentity:e,attributes:i,previousAttributes:n};this.emit(s)}emitTrackPublished(t,e,i){let n={type:"trackPublished",timestamp:new Date().toISOString(),roomId:t,participantIdentity:e,track:i};this.emit(n)}emitTrackUnpublished(t,e,i){let n={type:"trackUnpublished",timestamp:new Date().toISOString(),roomId:t,participantIdentity:e,trackId:i};this.emit(n)}emitTrackMuted(t,e){let i={type:"trackMuted",timestamp:new Date().toISOString(),roomId:t,trackId:e};this.emit(i)}emitTrackUnmuted(t,e){let i={type:"trackUnmuted",timestamp:new Date().toISOString(),roomId:t,trackId:e};this.emit(i)}emitMessageReceived(t,e){let i={type:"messageReceived",timestamp:new Date().toISOString(),roomId:t,message:e};this.emit(i)}emitMessageSent(t,e){let i={type:"messageSent",timestamp:new Date().toISOString(),roomId:t,message:e};this.emit(i)}emitTypingIndicator(t,e,i){let n={type:"typingIndicator",timestamp:new Date().toISOString(),roomId:t,participantIdentity:e,isTyping:i};this.emit(n)}emitAgentStarted(t,e){let i={type:"agentStarted",timestamp:new Date().toISOString(),roomId:t,agent:e};this.emit(i)}emitAgentStopped(t,e){let i={type:"agentStopped",timestamp:new Date().toISOString(),roomId:t,agentId:e};this.emit(i)}emitAgentMessage(t,e,i){let n={type:"agentMessage",timestamp:new Date().toISOString(),roomId:t,agentId:e,message:i};this.emit(n)}emitDataReceived(t,e,i,n){let s={type:"dataReceived",timestamp:new Date().toISOString(),roomId:t,participantIdentity:e,data:i,topic:n};this.emit(s)}emitError(t,e){let i={type:"error",timestamp:new Date().toISOString(),roomId:e,error:t};this.emit(i)}getHistory(t){return t?this.eventHistory.filter(e=>e.type===t):[...this.eventHistory]}getLastEvents(t,e){return(e?this.eventHistory.filter(n=>n.type===e):this.eventHistory).slice(-t)}clearHistory(){this.eventHistory=[]}listenerCount(t){return(this.listeners[t]?.size??0)+this.wildcardListeners.size}};0&&(module.exports={MockEventEmitter});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @onlive.ai/common-121 v0.2.
|
|
1
|
+
/*! @onlive.ai/common-121 v0.2.230 | © 2026 Onlive.ai */
|
|
2
2
|
import { MockEventType, MockEventListener, MockEvent, MockRoomState, MockConnectionState, MockParticipantState, MockTrackState, MockMessageState, MockAgentState, MockAgentMessage, MockError } from './types.cjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @onlive.ai/common-121 v0.2.
|
|
1
|
+
/*! @onlive.ai/common-121 v0.2.230 | © 2026 Onlive.ai */
|
|
2
2
|
import { MockEventType, MockEventListener, MockEvent, MockRoomState, MockConnectionState, MockParticipantState, MockTrackState, MockMessageState, MockAgentState, MockAgentMessage, MockError } from './types.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @onlive.ai/common-121 v0.2.
|
|
1
|
+
/*! @onlive.ai/common-121 v0.2.230 | © 2026 Onlive.ai */
|
|
2
2
|
var s=class{constructor(){this.listeners={};this.wildcardListeners=new Set;this.eventHistory=[];this.maxHistorySize=1e3;this.recordHistory=!0}setMaxHistorySize(t){this.maxHistorySize=t,this.trimHistory()}setRecordHistory(t){this.recordHistory=t}on(t,e){return this.listeners[t]||(this.listeners[t]=new Set),this.listeners[t].add(e),()=>{this.off(t,e)}}once(t,e){let i=n=>{this.off(t,i),e(n)};return this.on(t,i)}off(t,e){this.listeners[t]?.delete(e)}onAny(t){return this.wildcardListeners.add(t),()=>{this.wildcardListeners.delete(t)}}offAny(t){this.wildcardListeners.delete(t)}removeAllListeners(t){t?delete this.listeners[t]:(this.listeners={},this.wildcardListeners.clear())}emit(t){this.recordHistory&&(this.eventHistory.push(t),this.trimHistory());let e=this.listeners[t.type];if(e)for(let i of e)try{i(t)}catch(n){console.error(`Error in mock event listener for ${t.type}:`,n)}for(let i of this.wildcardListeners)try{i(t)}catch(n){console.error("Error in mock wildcard event listener:",n)}}trimHistory(){this.eventHistory.length>this.maxHistorySize&&(this.eventHistory=this.eventHistory.slice(-this.maxHistorySize))}emitRoomCreated(t){let e={type:"roomCreated",timestamp:new Date().toISOString(),roomId:t.id,room:t};this.emit(e)}emitRoomEnded(t){let e={type:"roomEnded",timestamp:new Date().toISOString(),roomId:t};this.emit(e)}emitRoomConnectionStateChanged(t,e,i){let n={type:"roomConnectionStateChanged",timestamp:new Date().toISOString(),roomId:t,state:e,previousState:i};this.emit(n)}emitParticipantJoined(t,e){let i={type:"participantJoined",timestamp:new Date().toISOString(),roomId:t,participant:e};this.emit(i)}emitParticipantLeft(t,e){let i={type:"participantLeft",timestamp:new Date().toISOString(),roomId:t,participantIdentity:e};this.emit(i)}emitParticipantAttributesChanged(t,e,i,n){let o={type:"participantAttributesChanged",timestamp:new Date().toISOString(),roomId:t,participantIdentity:e,attributes:i,previousAttributes:n};this.emit(o)}emitTrackPublished(t,e,i){let n={type:"trackPublished",timestamp:new Date().toISOString(),roomId:t,participantIdentity:e,track:i};this.emit(n)}emitTrackUnpublished(t,e,i){let n={type:"trackUnpublished",timestamp:new Date().toISOString(),roomId:t,participantIdentity:e,trackId:i};this.emit(n)}emitTrackMuted(t,e){let i={type:"trackMuted",timestamp:new Date().toISOString(),roomId:t,trackId:e};this.emit(i)}emitTrackUnmuted(t,e){let i={type:"trackUnmuted",timestamp:new Date().toISOString(),roomId:t,trackId:e};this.emit(i)}emitMessageReceived(t,e){let i={type:"messageReceived",timestamp:new Date().toISOString(),roomId:t,message:e};this.emit(i)}emitMessageSent(t,e){let i={type:"messageSent",timestamp:new Date().toISOString(),roomId:t,message:e};this.emit(i)}emitTypingIndicator(t,e,i){let n={type:"typingIndicator",timestamp:new Date().toISOString(),roomId:t,participantIdentity:e,isTyping:i};this.emit(n)}emitAgentStarted(t,e){let i={type:"agentStarted",timestamp:new Date().toISOString(),roomId:t,agent:e};this.emit(i)}emitAgentStopped(t,e){let i={type:"agentStopped",timestamp:new Date().toISOString(),roomId:t,agentId:e};this.emit(i)}emitAgentMessage(t,e,i){let n={type:"agentMessage",timestamp:new Date().toISOString(),roomId:t,agentId:e,message:i};this.emit(n)}emitDataReceived(t,e,i,n){let o={type:"dataReceived",timestamp:new Date().toISOString(),roomId:t,participantIdentity:e,data:i,topic:n};this.emit(o)}emitError(t,e){let i={type:"error",timestamp:new Date().toISOString(),roomId:e,error:t};this.emit(i)}getHistory(t){return t?this.eventHistory.filter(e=>e.type===t):[...this.eventHistory]}getLastEvents(t,e){return(e?this.eventHistory.filter(n=>n.type===e):this.eventHistory).slice(-t)}clearHistory(){this.eventHistory=[]}listenerCount(t){return(this.listeners[t]?.size??0)+this.wildcardListeners.size}};export{s as MockEventEmitter};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @onlive.ai/common-121 v0.2.
|
|
1
|
+
/*! @onlive.ai/common-121 v0.2.230 | © 2026 Onlive.ai */
|
|
2
2
|
"use strict";var Y=Object.defineProperty;var Et=Object.getOwnPropertyDescriptor;var Ot=Object.getOwnPropertyNames;var _t=Object.prototype.hasOwnProperty;var xt=(r,t)=>()=>(r&&(t=r(r=0)),t);var ht=(r,t)=>{for(var e in t)Y(r,e,{get:t[e],enumerable:!0})},Lt=(r,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Ot(t))!_t.call(r,n)&&n!==e&&Y(r,n,{get:()=>t[n],enumerable:!(i=Et(t,n))||i.enumerable});return r};var Dt=r=>Lt(Y({},"__esModule",{value:!0}),r);var O={};ht(O,{SYNTHETIC_MEDIA_PRESETS:()=>wt,createSyntheticAudioTrack:()=>Pt,createSyntheticMedia:()=>At,createSyntheticMediaFromPreset:()=>Ut,createSyntheticVideoTrack:()=>Tt});function Tt(r={}){let{width:t=640,height:e=480,fps:i=30,backgroundColor:n="#1a1a2e",foregroundColor:s="#4361ee",label:o="Mock Video",animation:a="wave"}=r,g=document.createElement("canvas");g.width=t,g.height=e;let d=g.getContext("2d"),m,I=Date.now(),H={wave:v=>{d.fillStyle=n,d.fillRect(0,0,t,e),d.strokeStyle=s,d.lineWidth=3,d.beginPath();for(let h=0;h<t;h++){let k=e/2+Math.sin(h/t*4*Math.PI+v*.002)*(e/4);h===0?d.moveTo(h,k):d.lineTo(h,k)}d.stroke()},pulse:v=>{d.fillStyle=n,d.fillRect(0,0,t,e);let h=Math.sin(v*.003)*.3+.7,k=Math.min(t,e)*.3*h;d.beginPath(),d.arc(t/2,e/2,k,0,Math.PI*2),d.fillStyle=s,d.fill()},bars:v=>{d.fillStyle=n,d.fillRect(0,0,t,e);let h=20,k=t/h,T=e*.7;d.fillStyle=s;for(let D=0;D<h;D++){let mt=Math.abs(Math.sin(D/h*Math.PI*2+v*.004))*T,It=D*k,Ct=e-mt;d.fillRect(It+2,Ct,k-4,mt)}},avatar:v=>{d.fillStyle=n,d.fillRect(0,0,t,e);let h=t/2,k=e/2-20,T=Math.min(t,e)*.15;d.beginPath(),d.arc(h,k,T,0,Math.PI*2),d.fillStyle=s,d.fill(),d.beginPath(),d.ellipse(h,k+T*2.2,T*1.5,T,0,Math.PI,0),d.fill(),Math.sin(v*.01)>0&&(d.beginPath(),d.arc(h,k+T*3,5+Math.sin(v*.02)*3,0,Math.PI*2),d.fillStyle="#22c55e",d.fill())},none:()=>{d.fillStyle=n,d.fillRect(0,0,t,e)}},$=()=>{d.fillStyle="rgba(255, 255, 255, 0.8)",d.font=`${Math.floor(e*.04)}px system-ui, sans-serif`,d.textAlign="center",d.fillText(o,t/2,e-20)},C=()=>{let v=Date.now()-I;H[a](v),$(),m=requestAnimationFrame(C)};C();let ut=g.captureStream(i),pt=ut.getVideoTracks()[0];return{track:pt,stream:ut,cleanup:()=>{cancelAnimationFrame(m),pt.stop()}}}function Pt(r={}){let{frequency:t=440,volume:e=.1,waveType:i="sine",addVariation:n=!0,enabled:s=!1}=r,o=new AudioContext,a=o.createMediaStreamDestination(),g=o.createOscillator();g.type=i,g.frequency.value=t;let d=o.createGain();d.gain.value=s?e:0;let m=null,I=null;n&&(m=o.createOscillator(),m.frequency.value=.5,I=o.createGain(),I.gain.value=10,m.connect(I),I.connect(g.frequency),m.start()),g.connect(d),d.connect(a),g.start();let H=a.stream,$=H.getAudioTracks()[0];return{track:$,stream:H,setVolume:C=>{d.gain.value=Math.max(0,Math.min(1,C))},setEnabled:C=>{d.gain.value=C?e:0},cleanup:()=>{g.stop(),m?.stop(),o.close(),$.stop()}}}function At(r,t){let e=Tt(r),i=Pt(t),n=new MediaStream([e.track,i.track]);return{videoTrack:e.track,audioTrack:i.track,combinedStream:n,setAudioVolume:i.setVolume,setAudioEnabled:i.setEnabled,cleanup:()=>{e.cleanup(),i.cleanup()}}}function Ut(r){let t=wt[r];return At(t.video,t.audio)}var wt,_=xt(()=>{"use strict";wt={localCamera:{video:{width:640,height:480,animation:"avatar",label:"You",foregroundColor:"#4361ee"},audio:{enabled:!1}},agentCamera:{video:{width:640,height:480,animation:"avatar",label:"AI Agent",foregroundColor:"#22c55e",backgroundColor:"#0f172a"},audio:{enabled:!1,frequency:300}},screenShare:{video:{width:1920,height:1080,animation:"bars",label:"Screen Share",backgroundColor:"#0a0a0a",foregroundColor:"#f59e0b"},audio:{enabled:!1}},voiceOnly:{video:{width:320,height:240,animation:"wave",label:"Voice Call"},audio:{enabled:!1,volume:.05}}}});var Ft={};ht(Ft,{ConversationServiceFactory:()=>q,createConversationService:()=>zt,createMockConversationService:()=>jt});module.exports=Dt(Ft);var F=require("@onlive.ai/tracker/session"),E=require("livekit-client");var ft=require("firebase/app"),c=require("firebase/database"),z=class{constructor(t){this.onChildChanged=(t,e)=>(0,c.onChildChanged)(this.ref(t),i=>e(i.key||"",i.val(),i));this.onChildRemoved=(t,e)=>(0,c.onChildRemoved)(this.ref(t),i=>e(i.key||"",i.val(),i));this.onChildChangedQuery=(t,e)=>(0,c.onChildChanged)(t,i=>e(i.key||"",i.val(),i));this.onChildRemovedQuery=(t,e)=>(0,c.onChildRemoved)(t,i=>e(i.key||"",i.val(),i));let e=(0,ft.initializeApp)(t.config);this.db=(0,c.getDatabase)(e)}ref(t){return(0,c.ref)(this.db,t)}async getOnce(t){let e=await(0,c.get)(this.ref(t));return e.exists()?e.val():null}async getOnceQuery(t){let e=await(0,c.get)(t),i=[];return e.exists()&&e.forEach(n=>{i.push({key:n.key||"",value:n.val()})}),i}onValue(t,e){return(0,c.onValue)(this.ref(t),i=>e(i.key??"",i.val(),i),i=>console.error("onValue error",i))}onValueQuery(t,e){return(0,c.onValue)(t,i=>e(i.key??"",i.val(),i),i=>console.error("onValueQuery error",i))}onChildAdded(t,e){return(0,c.onChildAdded)(this.ref(t),i=>e(i.key||"",i.val(),i),i=>console.error("onChildAdded error",i))}onChildAddedQuery(t,e){return(0,c.onChildAdded)(t,i=>e(i.key||"",i.val(),i),i=>console.error("onChildAddedQuery error",i))}write(t,e){return(0,c.set)(this.ref(t),e)}update(t,e){return(0,c.update)(this.ref(t),e)}remove(t){return(0,c.remove)(this.ref(t))}async push(t,e){let i=(0,c.push)(this.ref(t));return await(0,c.set)(i,e),i.key}onDisconnectUpdate(t,e){return(0,c.onDisconnect)(this.ref(t)).update(e)}cancelOnDisconnect(t){return(0,c.onDisconnect)(this.ref(t)).cancel()}transaction(t,e){return(0,c.runTransaction)(this.ref(t),i=>e(i))}query(t,e={}){let i=this.ref(t);return e.orderBy==="child"&&e.childKey&&(i=(0,c.query)(i,(0,c.orderByChild)(e.childKey))),e.orderBy==="key"&&(i=(0,c.query)(i,(0,c.orderByKey)())),e.orderBy==="value"&&(i=(0,c.query)(i,(0,c.orderByValue)())),e.startAt!=null&&(i=(0,c.query)(i,(0,c.startAt)(e.startAt))),e.endAt!=null&&(i=(0,c.query)(i,(0,c.endAt)(e.endAt))),e.equalTo!=null&&(i=(0,c.query)(i,(0,c.equalTo)(e.equalTo))),e.limitFirst!=null&&(i=(0,c.query)(i,(0,c.limitToFirst)(e.limitFirst))),e.limitLast!=null&&(i=(0,c.query)(i,(0,c.limitToLast)(e.limitLast))),i}};var u=async(r,t)=>{let e=await fetch(r,t);if(!e.ok){let i=await e.json().catch(()=>({}));throw new Error(JSON.stringify({status:e.status,statusText:e.statusText,...i}))}return e&&e.json()};var kt=r=>{let t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",e="";for(let i=0;i<r;i++)e+=t.charAt(Math.floor(Math.random()*t.length));return e};var vt=require("@onlive.ai/tracker/generator"),f=require("@onlive.ai/tracker/session"),S="chatbot",j=class r{static hasSession(){return!!f.Session.getCookie(S)}static getSession(t={role:"guest",regenerate:!1}){t.regenerate&&(f.Session.id=vt.Generator.uuid(),f.Session.deleteCookie(S));let e=f.Session.getCookie(S);return e&&r.isValidSession(e,t.role)?e:r.createSession(t.role)}static createSession(t){let e={externalId:t==="agent"?String(r.getUserId()||f.Session.id):f.Session.id,secret:kt(16),createdAt:new Date().toISOString()};return f.Session.setCookie(S,e,3600*24*365),e}static isValidSession(t,e){if(e==="guest")return!0;let i=r.getUserId();return!!(i&&String(i)===t.externalId)}static getUserId(){return f.Session.getCookie("user-id",{objectKey:"userId",storageKey:"user",storageType:"localStorage",ttl:3600*24*365,preserveData:!0})}static updateSessionWithRegistrationData(t){let e=f.Session.getCookie(S);if(e||(e=r.createSession("guest")),e){let i={...e,registrationData:t};f.Session.setCookie(S,i,3600*24*365)}}static hasRegistrationData(){return!!f.Session.getCookie(S)?.registrationData}static async getAgentInfo(t){return fetch(`${t}/api/v1/auth/user-info`,{credentials:"include"}).then(e=>e.json())}static getRegistrationData(){return f.Session.getCookie(S)?.registrationData}};var yt="lk.chat",Mt="lk.transcription",bt="lk.events",W="typing-indicator";var Z=class extends E.Room{},K=class{constructor(t){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(t,e)=>{let i=t?.info?.id,n=t.info?.attributes?.["lk.segment_id"];n&&(this.transcriptionMap.has(n)?i=this.transcriptionMap.get(n)||"":this.transcriptionMap.set(n,i));let s=e?.identity?this.room.getParticipantByIdentity(e.identity):void 0,o="";for await(let a of t)o+=a,this.emitMessage({id:i,timestamp:Date.now(),message:o,assets:JSON.parse(t.info?.attributes?.assets||"[]"),from:s});this.messagePersistence==="client"&&this.persistMessage({roomId:this.room.id,content:o,externalId:i,identity:s?.identity,kind:s?.kind})};this.emitMessage=t=>{for(let e of this.listeners)e([t])};this.handleDataReceived=(t,e,i,n)=>{if(n===W)try{let s=JSON.parse(new TextDecoder().decode(t));if(s.type==="typing"&&s.participantId!==this.room.localParticipant.identity){let o={type:"typing",isTyping:s.isTyping,timestamp:s.timestamp,participantId:s.participantId};this.emitTypingIndicator(o)}}catch(s){console.warn("Failed to parse typing indicator:",s)}};this.emitTypingIndicator=t=>{for(let e of this.typingListeners)e(t)};this.apiUrl=t.apiUrl,this.authUrl=t.authUrl,this.organizationId=t.organizationId,this.channelTopic=t.channelTopic||yt,this.transcriptionTopic=t.transcriptionTopic||Mt,this.eventsTopic=t.eventsTopic||bt,this.messagePersistence=t.messagePersistence||"disabled",this.agentInitialModalities=t.agentInitialModalities,this.agentModalities=t.agentModalities,this.room=this.createRoomInstance(),t.firebaseConfig&&this.initializeFirebase(t.firebaseConfig)}createRoomInstance(){return new Z({adaptiveStream:!0,dynacast:!0})}ensureRoom(){return this.room||(this.room=this.createRoomInstance()),this.room}initializeFirebase(t){this.firebaseApi=new z({config:t}),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(E.RoomEvent.DataReceived,this.handleDataReceived),this.room.registerTextStreamHandler(this.channelTopic,this.handleIncomingMessage),this.room.registerTextStreamHandler(this.transcriptionTopic,this.handleIncomingMessage),this.room.on(E.RoomEvent.DataReceived,this.handleDataReceived)}async registerUser(t,e,i,n){let s=await u(`${this.apiUrl}/users/register`,{method:"POST",body:JSON.stringify({externalId:t,secret:e,...i,metadata:n}),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.register.signal});if(!s.token)throw new Error("Registration failed: No token received from server");return this.authToken=s.token,s}async registerAgent(t,e){let i=F.Session.getCookie("livekit-agent-token");if(i){if(this.decodeJwtPayload(i)?.username===e.name)return this.authToken=i,i;F.Session.deleteCookie("livekit-agent-token")}let n=await u(`${this.authUrl}/admins/register`,{method:"POST",body:JSON.stringify({externalId:t,name:e.name,email:e.email,avatar:e.avatar}),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},credentials:"include",signal:this.abortControllers.register.signal});return F.Session.setCookie("livekit-agent-token",n.token,1440*60),this.authToken=n.token,n.token}decodeJwtPayload(t){try{let e=t.split(".");if(e.length!==3)return null;let i=e[1],n=atob(i.replace(/-/g,"+").replace(/_/g,"/"));return JSON.parse(n)}catch{return null}}async quickStart(t){let e=t;console.log("[ConversationService] Starting quickStart with options:",e),this.room=this.ensureRoom(),(this.agentInitialModalities||this.agentModalities)&&(e={...e,room:{...e.room,metadata:{...this.agentInitialModalities&&{agentInitialModalities:this.agentInitialModalities},...this.agentModalities&&{agentModalities:this.agentModalities},...e.room.metadata}}});let i=await u(`${this.apiUrl}/rooms/quick-start`,{method:"POST",body:JSON.stringify(e),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.quickStart.signal});if(!i.user?.token)throw new Error("Quick start failed: No user token received from server");this.authToken=i.user.token;let n={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(n),this.setupParticipantAttributesHandler(),this.room.connect(n.wsURL,n.token),this.initializeRoomHandlers(),this.room}async createRoom(t){if(!this.authToken)throw new Error("Cannot create room: No authentication token. Call registerUser() first.");this.room=this.ensureRoom();let{initialMessage:e,...i}=t;(this.agentInitialModalities||this.agentModalities)&&(i.metadata={...this.agentInitialModalities&&{agentInitialModalities:this.agentInitialModalities},...this.agentModalities&&{agentModalities:this.agentModalities},...i.metadata});let n=await u(`${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(n),this.setupParticipantAttributesHandler(),this.room.connect(n.wsURL,n.token).then(async()=>{if(e)try{await this.sendMessage(e)}catch(s){console.error("[ConversationService] Failed to send initial message:",s)}}),this.initializeRoomHandlers(),this.room}async joinRoom(t,e,i,n){let s=await u(`${this.apiUrl}/rooms/${t}/join`,{method:"POST",body:JSON.stringify({timezone:e,language:i,...n??{}}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.createRoom.signal});return this.setRoomMetadata(s),this.setupParticipantAttributesHandler(),await this.room.connect(s.wsURL,s.token),this.initializeRoomHandlers(),this.room}setRoomMetadata(t){this.room.id=t.id,this.room.groupId=t.groupId,this.room.createdAt=t.createdAt,this.room.connectedAt=new Date().toISOString(),this.room.affinity=t.affinity}setupParticipantAttributesHandler(){this.room.on(E.RoomEvent.ParticipantAttributesChanged,t=>{t.identity===this.room.localParticipant.identity&&j.updateSessionWithRegistrationData(t.attributes)})}async evaluateRoom(t){let e=t.roomId||this.room?.id;if(!e)throw new Error("Room ID is required for evaluation");return u(`${this.apiUrl}/rooms/${e}/evaluate`,{method:"POST",body:JSON.stringify({rating:t.rating,comment:t.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 u(`${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 t=this.room?.localParticipant;if(!t)return;await Promise.allSettled([t.setMicrophoneEnabled(!1),t.setCameraEnabled(!1),t.setScreenShareEnabled(!1)]);let e=Array.from(t.trackPublications.values());await Promise.all(e.map(async i=>{let n=i.track;if(n)try{await t.unpublishTrack(n,!0)}catch{n.stop()}}))}async disconnectAndCloseRoom(){await this.closeRoom(),await this.disconnect()}async readRoom(t){return u(`${this.apiUrl}/rooms/${t}/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(t){let e=new URLSearchParams;return t.page&&e.append("page",t.page.toString()),t.limit&&e.append("limit",t.limit.toString()),t.offset&&e.append("offset",t.offset.toString()),t.orderBy&&e.append("orderBy",t.orderBy),t.orderDir&&e.append("orderDir",t.orderDir),t.ids?.length&&e.append("ids",t.ids.join(",")),t.with?.length&&e.append("with",t.with.join(",")),t.count?.length&&e.append("count",t.count.join(",")),t.latestOnly&&e.append("latestOnly",t.latestOnly.toString()),t.includeUnread&&e.append("includeUnread",t.includeUnread.toString()),t.roomStatus&&e.append("roomStatus",t.roomStatus),t.archived&&e.append("archived",t.archived.toString()),t.participantIds?.length&&e.append("participantIds",t.participantIds.join(",")),t.participantExternalIds?.length&&e.append("participantExternalIds",t.participantExternalIds.join(",")),t.groupId&&e.append("groupId",t.groupId),t.hasMessages!==void 0&&e.append("hasMessages",t.hasMessages.toString()),u(`${this.authUrl}/rooms?${e}`,{method:"GET",headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},credentials:"include",signal:this.abortControllers.getRooms.signal})}async sendMessage(t,e){let i=await this.room.localParticipant.sendText(t,{topic:this.channelTopic,attributes:e});this.emitMessage({id:i.id,timestamp:Date.now(),message:t,assets:JSON.parse(e?.assets||"[]"),from:this.room.localParticipant}),this.messagePersistence==="client"&&this.persistMessage({roomId:this.room.id,content:t,externalId:i.id,identity:this.room.localParticipant?.identity,kind:this.room.localParticipant?.kind})}async persistMessage(t){return u(`${this.apiUrl}/messages/create`,{method:"POST",body:JSON.stringify(t),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.persistMessage.signal})}async getMessages(t){let e=new URLSearchParams;return t.limit&&e.append("limit",t.limit.toString()),t.with&&e.append("with",t.with.join(",")),(await u(`${this.apiUrl}/messages/search${e.size?`?${e.toString()}`:""}`,{method:"POST",body:JSON.stringify(t),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.createRoom.signal})).items}async sendMessageReport(t){try{return u(`${this.apiUrl}/messages/${t.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(e){console.error("Error sending message report:",e)}}async deleteMessageReport(t){try{return u(`${this.apiUrl}/messages/${t.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(e){console.error("Error deleting message report:",e)}}async updateMessageReactions(t){try{return u(`${this.apiUrl}/messages/${t.messageId}/reactions`,{method:"PATCH",body:JSON.stringify({add:t.add||[],remove:t.remove||[]}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.updateMessageReactions.signal})}catch(e){console.error("Error updating message reactions:",e)}}subscribeMessages(t){return this.listeners.add(t),()=>{this.listeners.delete(t)}}async sendTypingIndicator(t){if(!(!this.room||this.room.state!=="connected"))try{let e=new TextEncoder().encode(JSON.stringify({type:"typing",isTyping:t,timestamp:Date.now(),participantId:this.room.localParticipant.identity}));await this.room.localParticipant.publishData(e,{reliable:!1,topic:W})}catch(e){console.warn("Failed to send typing indicator:",e)}}subscribeTypingIndicators(t){return this.typingListeners.add(t),()=>{this.typingListeners.delete(t)}}unsubscribeTypingIndicators(t){this.typingListeners.delete(t)}async sendContextualEvent(t){try{let e=JSON.stringify(t);await this.room.localParticipant.sendText(e,{topic:this.eventsTopic})}catch(e){console.warn("Failed to send event:",e)}}async requestNewRoom(t){return u(`${this.apiUrl}/rooms/request-new`,{method:"POST",body:JSON.stringify(t),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}async confirmRoomRequest(t){return u(`${this.apiUrl}/rooms/confirm-call`,{method:"POST",body:JSON.stringify({roomId:t}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}async cancelRoomRequest(t){return u(`${this.apiUrl}/rooms/cancel-call`,{method:"POST",body:JSON.stringify({roomId:t}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}async finishCall(){if(this.room?.id)return u(`${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(t){return`${this.presencePath}/${t}`}onPresenceChange(t){let{api:e,presencePath:i}=this.getFirebase();return e.onChildChanged(i,(n,s)=>t(n,s))}onPresenceAgentChange(t,e){let{api:i}=this.getFirebase();return i.onValue(this.buildAgentPresencePath(t),(n,s)=>e(n,s))}async createCallRequest(t){let{api:e,callsPath:i}=this.getFirebase(),s=(await u(`${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(t)})).id;return e.onDisconnectUpdate(`${i}/${s}`,{status:"disconnected"}),s}onNewCallRequest(t){let{api:e,callsPath:i}=this.getFirebase();return e.onChildAdded(i,(n,s)=>t(n,{...s,id:n}))}onCallRequestChange(t){let{api:e,callsPath:i}=this.getFirebase();return e.onChildChanged(i,(n,s)=>t(n,{...s,id:n}))}onCallRequestRemoved(t){let{api:e,callsPath:i}=this.getFirebase();return e.onChildRemoved(i,n=>t(n))}async acceptCallRequest(t){let{api:e,callsPath:i}=this.getFirebase();return await e.cancelOnDisconnect(`${i}/${t}`),e.update(`${i}/${t}`,{status:"accepted"})}async cancelCallRequest(t){let{api:e,callsPath:i}=this.getFirebase();await e.cancelOnDisconnect(`${i}/${t}`),await u(`${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:t})})}async cancelOnDisconnect(t){let{api:e,callsPath:i}=this.getFirebase();await e.cancelOnDisconnect(`${i}/${t}`)}subscribePendingRequests(t,e={}){let{api:i,callsPath:n}=this.getFirebase();e.resetSeen&&this.seenRequestIds.clear(),this.firebaseUnsubscribers["pending-requests"]?.();let s=i.query(n,{orderBy:"child",childKey:"status",equalTo:"pending"}),o=i.onChildAddedQuery(s,(a,g)=>{if(!a||this.seenRequestIds.has(a))return;let d={...g,id:a};this.seenRequestIds.add(a),t(a,d)});return this.firebaseUnsubscribers["pending-requests"]=o,()=>{o?.(),delete this.firebaseUnsubscribers["pending-requests"]}}subscribeRequestChanges(t){let{api:e,callsPath:i}=this.getFirebase();this.firebaseUnsubscribers["request-changes"]?.();let n=e.onChildChanged(i,(s,o)=>{if(!s)return;let a=JSON.stringify(o);this.lastSnapshotById.get(s)!==a&&(this.lastSnapshotById.set(s,a),t(s,{...o,id:s}))});return this.firebaseUnsubscribers["request-changes"]=n,()=>{n?.(),delete this.firebaseUnsubscribers["request-changes"]}}async tryAcceptRequest(t){let{api:e,callsPath:i}=this.getFirebase(),n=`${i}/${t}`;return await e.transaction(n,o=>o&&(o.status==="pending"?{...o,status:"accepted"}:o)),(await e.getOnce(n))?.status==="accepted"}onRoomSync(t,e){let{api:i}=this.getFirebase(),n=`orgs/${this.organizationId}/rooms/${t}/sync`;return i.onValue(n,(s,o)=>{e(o)})}async clearRoomSync(t,e){let{api:i}=this.getFirebase(),n=`orgs/${this.organizationId}/rooms/${t}/sync`;await i.write(n,{needsSync:!1,reason:e||null,timestamp:Date.now()})}onNewRoomRequest(t,e){let{api:i}=this.getFirebase(),n=`orgs/${this.organizationId}/rooms/${t}/call`;return i.onValue(n,(s,o)=>{e(o)})}unsubscribeAllFirebase(){Object.values(this.firebaseUnsubscribers).forEach(t=>t?.()),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(t=>t.abort()),await this.disconnect()}};var tt=0;function St(){tt=0}function l(r){return tt++,`mock_${r}_${tt}_${Date.now().toString(36)}`}function U(r,t,e){let i=e||new Date().toISOString(),n=typeof btoa=="function"?btoa(i).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""):i.replace(/[^a-zA-Z0-9]/g,"");return`mock_token_${r}_${t}_${n}`}function Rt(r){return`wss://mock-livekit.local/room/${r}`}var et={responseStrategy:"echo",responseDelayMs:100,cannedResponses:[],type:"text",nature:"ai",simulateTyping:!1,typingDelayPerChar:20};function it(r,t,e=[],i=0,n=Math.random){switch(r){case"echo":return{response:`Echo: ${t}`,nextIndex:i};case"canned":return{response:e[0]||"Default response",nextIndex:i};case"sequential":return{response:e[i]||"No more responses",nextIndex:(i+1)%Math.max(1,e.length)};case"random":{if(e.length===0)return{response:"Random response",nextIndex:i};let s=Math.floor(n()*e.length);return{response:e[s],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 N=class{constructor(t,e,i={}){this._state="idle";this.conversationHistory=[];this.responseIndex=0;this.eventListeners=new Set;this.randomFn=Math.random;this.messageCount=0;this.id=t,this.name=e,this.config={...et,...i}}get state(){return this._state}get isRunning(){return this._state==="running"}get history(){return[...this.conversationHistory]}getConfig(){return{...this.config}}updateConfig(t){this.config={...this.config,...t}}setStrategy(t){this.config.responseStrategy=t}setCannedResponses(t){this.config.cannedResponses=t,this.responseIndex=0}setCustomHandler(t){this.customHandler=t,this.config.responseStrategy="custom"}setRandomFunction(t){this.randomFn=t}async start(t){this._state!=="running"&&(this._state="starting",this.roomId=t,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(t){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(t,"user"),this.emitEvent({type:"message_received",agentId:this.id,message:t});let e;try{if(this.config.responseStrategy==="custom"&&this.customHandler)e=await this.customHandler(this.id,t,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=it(this.config.responseStrategy,t,this.config.cannedResponses,this.responseIndex,this.randomFn);e=i.response,this.responseIndex=i.nextIndex}}}catch(i){throw this._state="error",i}return this.config.simulateTyping&&this.config.typingDelayPerChar&&await this.delay(e.length*this.config.typingDelayPerChar),this.config.responseDelayMs&&await this.delay(this.config.responseDelayMs),this.addMessage(e,"agent"),this.messageCount++,this.emitEvent({type:"response_sent",agentId:this.id,response:e}),e}addEventListener(t){return this.eventListeners.add(t),()=>this.eventListeners.delete(t)}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(t,e){let i={id:l("msg"),content:t,role:e,timestamp:Date.now()};return this.conversationHistory.push(i),i}emitEvent(t){for(let e of this.eventListeners)try{e(t)}catch(i){console.error("Error in agent event listener:",i)}}delay(t){return new Promise(e=>setTimeout(e,t))}};var p=class r extends Error{constructor(t,e,i){super(e),this.name="MockLiveKitError",this.code=t,this.details=i,typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,r)}toMockError(){return{code:this.code,message:this.message,details:this.details}}static fromMockError(t){return new r(t.code,t.message,t.details)}},P=class extends p{constructor(t){super("ROOM_NOT_FOUND",`Room not found: ${t}`,{roomId:t}),this.name="RoomNotFoundError"}},nt=class extends p{constructor(t){super("ROOM_ENDED",`Room has ended: ${t}`,{roomId:t}),this.name="RoomEndedError"}},st=class extends p{constructor(t,e){super("PARTICIPANT_ALREADY_JOINED",`Participant ${t} is already in room ${e}`,{identity:t,roomId:e}),this.name="ParticipantAlreadyJoinedError"}},rt=class extends p{constructor(t){super("PARTICIPANT_NOT_FOUND",`Participant not found: ${t}`,{identity:t}),this.name="ParticipantNotFoundError"}},at=class extends p{constructor(t){super("TRACK_NOT_FOUND",`Track not found: ${t}`,{trackId:t}),this.name="TrackNotFoundError"}},ot=class extends p{constructor(t){super("AGENT_NOT_FOUND",`Agent not found: ${t}`,{agentId:t}),this.name="AgentNotFoundError"}},ct=class extends p{constructor(t="Unauthorized"){super("UNAUTHORIZED",t),this.name="UnauthorizedError"}},dt=class extends p{constructor(t="Network error occurred"){super("NETWORK_ERROR",t),this.name="NetworkError"}},gt=class extends p{constructor(t,e){super("INVALID_OPERATION",t,e),this.name="InvalidOperationError"}},lt=class extends p{constructor(t,e){super("TIMEOUT",`Operation timed out: ${t}`,{operation:t,timeoutMs:e}),this.name="TimeoutError"}};function V(r){switch(r.code){case"ROOM_NOT_FOUND":return new P(r.details?.roomId??"unknown");case"ROOM_ENDED":return new nt(r.details?.roomId??"unknown");case"PARTICIPANT_ALREADY_JOINED":return new st(r.details?.identity??"unknown",r.details?.roomId??"unknown");case"PARTICIPANT_NOT_FOUND":return new rt(r.details?.identity??"unknown");case"TRACK_NOT_FOUND":return new at(r.details?.trackId??"unknown");case"AGENT_NOT_FOUND":return new ot(r.details?.agentId??"unknown");case"UNAUTHORIZED":return new ct(r.message);case"NETWORK_ERROR":return new dt(r.message);case"INVALID_OPERATION":return new gt(r.message,r.details);case"TIMEOUT":return new lt(r.details?.operation??"unknown",r.details?.timeoutMs??0);default:return p.fromMockError(r)}}function A(r){return typeof r=="object"&&r!==null&&"code"in r&&"message"in r&&typeof r.code=="string"&&typeof r.message=="string"}var J=class{constructor(){this.listeners={};this.wildcardListeners=new Set;this.eventHistory=[];this.maxHistorySize=1e3;this.recordHistory=!0}setMaxHistorySize(t){this.maxHistorySize=t,this.trimHistory()}setRecordHistory(t){this.recordHistory=t}on(t,e){return this.listeners[t]||(this.listeners[t]=new Set),this.listeners[t].add(e),()=>{this.off(t,e)}}once(t,e){let i=n=>{this.off(t,i),e(n)};return this.on(t,i)}off(t,e){this.listeners[t]?.delete(e)}onAny(t){return this.wildcardListeners.add(t),()=>{this.wildcardListeners.delete(t)}}offAny(t){this.wildcardListeners.delete(t)}removeAllListeners(t){t?delete this.listeners[t]:(this.listeners={},this.wildcardListeners.clear())}emit(t){this.recordHistory&&(this.eventHistory.push(t),this.trimHistory());let e=this.listeners[t.type];if(e)for(let i of e)try{i(t)}catch(n){console.error(`Error in mock event listener for ${t.type}:`,n)}for(let i of this.wildcardListeners)try{i(t)}catch(n){console.error("Error in mock wildcard event listener:",n)}}trimHistory(){this.eventHistory.length>this.maxHistorySize&&(this.eventHistory=this.eventHistory.slice(-this.maxHistorySize))}emitRoomCreated(t){let e={type:"roomCreated",timestamp:new Date().toISOString(),roomId:t.id,room:t};this.emit(e)}emitRoomEnded(t){let e={type:"roomEnded",timestamp:new Date().toISOString(),roomId:t};this.emit(e)}emitRoomConnectionStateChanged(t,e,i){let n={type:"roomConnectionStateChanged",timestamp:new Date().toISOString(),roomId:t,state:e,previousState:i};this.emit(n)}emitParticipantJoined(t,e){let i={type:"participantJoined",timestamp:new Date().toISOString(),roomId:t,participant:e};this.emit(i)}emitParticipantLeft(t,e){let i={type:"participantLeft",timestamp:new Date().toISOString(),roomId:t,participantIdentity:e};this.emit(i)}emitParticipantAttributesChanged(t,e,i,n){let s={type:"participantAttributesChanged",timestamp:new Date().toISOString(),roomId:t,participantIdentity:e,attributes:i,previousAttributes:n};this.emit(s)}emitTrackPublished(t,e,i){let n={type:"trackPublished",timestamp:new Date().toISOString(),roomId:t,participantIdentity:e,track:i};this.emit(n)}emitTrackUnpublished(t,e,i){let n={type:"trackUnpublished",timestamp:new Date().toISOString(),roomId:t,participantIdentity:e,trackId:i};this.emit(n)}emitTrackMuted(t,e){let i={type:"trackMuted",timestamp:new Date().toISOString(),roomId:t,trackId:e};this.emit(i)}emitTrackUnmuted(t,e){let i={type:"trackUnmuted",timestamp:new Date().toISOString(),roomId:t,trackId:e};this.emit(i)}emitMessageReceived(t,e){let i={type:"messageReceived",timestamp:new Date().toISOString(),roomId:t,message:e};this.emit(i)}emitMessageSent(t,e){let i={type:"messageSent",timestamp:new Date().toISOString(),roomId:t,message:e};this.emit(i)}emitTypingIndicator(t,e,i){let n={type:"typingIndicator",timestamp:new Date().toISOString(),roomId:t,participantIdentity:e,isTyping:i};this.emit(n)}emitAgentStarted(t,e){let i={type:"agentStarted",timestamp:new Date().toISOString(),roomId:t,agent:e};this.emit(i)}emitAgentStopped(t,e){let i={type:"agentStopped",timestamp:new Date().toISOString(),roomId:t,agentId:e};this.emit(i)}emitAgentMessage(t,e,i){let n={type:"agentMessage",timestamp:new Date().toISOString(),roomId:t,agentId:e,message:i};this.emit(n)}emitDataReceived(t,e,i,n){let s={type:"dataReceived",timestamp:new Date().toISOString(),roomId:t,participantIdentity:e,data:i,topic:n};this.emit(s)}emitError(t,e){let i={type:"error",timestamp:new Date().toISOString(),roomId:e,error:t};this.emit(i)}getHistory(t){return t?this.eventHistory.filter(e=>e.type===t):[...this.eventHistory]}getLastEvents(t,e){return(e?this.eventHistory.filter(n=>n.type===e):this.eventHistory).slice(-t)}clearHistory(){this.eventHistory=[]}listenerCount(t){return(this.listeners[t]?.size??0)+this.wildcardListeners.size}};var R=class{constructor(t,e,i,n){this.muted=!1;this.enabled=!0;this.attachedElements=new Set;this.kind=t,this.source=e,this.sid=l("TR"),this.mediaStreamTrack=i,this.mediaCleanup=n}get mediaTrack(){return this.mediaStreamTrack}attach(t){let e=t||document.createElement(this.kind==="video"?"video":"audio");if(this.mediaStreamTrack){let i=new MediaStream([this.mediaStreamTrack]);e.srcObject=i,e.autoplay=!0,this.kind==="video"&&(e.playsInline=!0,e.muted=!0)}return this.attachedElements.add(e),e}detach(t){if(t)return t.srcObject=null,this.attachedElements.delete(t),[t];let e=Array.from(this.attachedElements);for(let i of e)i.srcObject=null;return this.attachedElements.clear(),e}stop(){this.detach(),this.mediaCleanup&&this.mediaCleanup(),this.mediaStreamTrack&&this.mediaStreamTrack.stop(),this.enabled=!1}setMuted(t){this.muted=t,this.mediaStreamTrack&&(this.mediaStreamTrack.enabled=!t)}setEnabled(t){this.enabled=t,this.mediaStreamTrack&&(this.mediaStreamTrack.enabled=t)}},y=class{constructor(t,e){this.subscribed=!0;this.isEnabled=!0;this.track=t,this.trackSid=t.sid,this.trackName=e||`${t.kind}_${t.source}`,this.source=t.source,this.kind=t.kind}get isMuted(){return this.track?.muted??!1}get isSubscribed(){return this.subscribed&&this.track!==null}setSubscribed(t){this.subscribed=t}setEnabled(t){this.isEnabled=t,this.track&&(this.track.enabled=t)}setMuted(t){this.track&&this.track.setMuted(t)}};var B=class{constructor(t){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=t,this.sid=l("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(t){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"}[t]||t;return this.trackPublications.get(i)}getTrackPublicationBySid(t){for(let e of this.trackPublications.values())if(e.trackSid===t)return e}setAttributes(t){this.attributes={...this.attributes,...t}}async setCameraEnabled(t,e){if(this._cameraEnabled=t,t){let{createSyntheticVideoTrack:n}=await Promise.resolve().then(()=>(_(),O)),{track:s,cleanup:o}=n({animation:"avatar",label:this.name||"Local Camera"}),a=new R("video","camera",s,o),g=new y(a,e?.name);return this.trackPublications.set("camera",g),this.videoTrackPublications.set(a.sid,g),this.room.emit("localTrackPublished",g,this),g}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(t,e){if(this._microphoneEnabled=t,t){let{createSyntheticAudioTrack:n}=await Promise.resolve().then(()=>(_(),O)),{track:s,cleanup:o}=n({enabled:!1}),a=new R("audio","microphone",s,o),g=new y(a,e?.name);return this.trackPublications.set("microphone",g),this.audioTrackPublications.set(a.sid,g),this.room.emit("localTrackPublished",g,this),g}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(t,e){if(this._screenShareEnabled=t,t){let{createSyntheticVideoTrack:n}=await Promise.resolve().then(()=>(_(),O)),{track:s,cleanup:o}=n({animation:"bars",label:"Screen Share",width:1920,height:1080}),a=new R("video","screen_share",s,o),g=new y(a,e?.name||"screen");return this.trackPublications.set("screen_share",g),this.videoTrackPublications.set(a.sid,g),this.room.emit("localTrackPublished",g,this),g}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(t,e){let i=new y(t,e?.name),n=e?.source||t.source;return this.trackPublications.set(n,i),t.kind==="audio"?this.audioTrackPublications.set(t.sid,i):t.kind==="video"&&this.videoTrackPublications.set(t.sid,i),this.room.emit("localTrackPublished",i,this),i}async unpublishTrack(t){t.stop();for(let[e,i]of this.trackPublications)if(i.track===t){this.trackPublications.delete(e),t.kind==="audio"?this.audioTrackPublications.delete(t.sid):t.kind==="video"&&this.videoTrackPublications.delete(t.sid),this.room.emit("localTrackUnpublished",i,this);break}}async sendText(t,e){return{id:l("msg")}}async publishData(t,e){}async setMetadata(t){this.attributes.metadata=t}async setName(t){this.name=t}cleanup(){for(let t of this.trackPublications.values())t.track?.stop();this.trackPublications.clear(),this.audioTrackPublications.clear(),this.videoTrackPublications.clear(),this._cameraEnabled=!1,this._microphoneEnabled=!1,this._screenShareEnabled=!1}};function Nt(r){switch(r){case"standard":return 0;case"ingress":return 1;case"egress":return 2;case"sip":return 3;case"agent":return 4;default:return 0}}var x=class{constructor(t,e,i={},n="standard"){this.connectionQuality="excellent";this.isSpeaking=!1;this.audioLevel=0;this.trackPublications=new Map;this.identity=t,this.sid=l("PA"),this.name=e,this.attributes=i,this._kindString=n,this.kind=Nt(n),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 t=this.getTrackPublication("camera");return!!(t?.track&&!t.isMuted)}get isMicrophoneEnabled(){let t=this.getTrackPublication("microphone");return!!(t?.track&&!t.isMuted)}getTrackPublication(t){for(let e of this.trackPublications.values())if(e.source===t)return e}getTrackPublicationBySid(t){return this.trackPublications.get(t)}getTrackPublications(){return Array.from(this.trackPublications.values())}getAudioTracks(){return this.getTrackPublications().filter(t=>t.kind==="audio")}getVideoTracks(){return this.getTrackPublications().filter(t=>t.kind==="video")}addTrackPublication(t){this.trackPublications.set(t.trackSid,t)}removeTrackPublication(t){let e=this.trackPublications.get(t);return e&&(this.trackPublications.delete(t),e.track?.stop()),e}setAttributes(t){this.attributes={...this.attributes,...t}}getAttribute(t){return this.attributes[t]}startSpeaking(t=.5){this.isSpeaking=!0,this.audioLevel=t}stopSpeaking(){this.isSpeaking=!1,this.audioLevel=0}setConnectionQuality(t){this.connectionQuality=t}cleanup(){for(let t of this.trackPublications.values())t.track?.stop();this.trackPublications.clear()}};var L=class{constructor(t){this.remoteParticipants=new Map;this._state="disconnected";this.eventHandlers=new Map;this.textStreamHandlers=new Map;this.rpcHandlers=new Map;this.mockService=t,this.localParticipant=new B(this),this.sid=l("RM")}get state(){return this._state}set state(t){let e=this._state;this._state=t,e!==t&&this.emit("connectionStateChanged",t,e)}get numParticipants(){return this.remoteParticipants.size+1}get isConnected(){return this._state==="connected"}async connect(t,e){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 e of this.remoteParticipants.values())e.cleanup();this.remoteParticipants.clear(),this.localParticipant.cleanup();let t=this._state;this._state="disconnected",this.emit("connectionStateChanged","disconnected",t),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(t,e){return this.eventHandlers.has(t)||this.eventHandlers.set(t,new Set),this.eventHandlers.get(t).add(e),this}once(t,e){let i=(...n)=>{this.off(t,i),e(...n)};return this.on(t,i)}off(t,e){return this.eventHandlers.get(t)?.delete(e),this}removeAllListeners(){this.eventHandlers.clear()}emit(t,...e){let i=this.eventHandlers.get(t);if(i)for(let n of i)try{n(...e)}catch(s){console.error(`Error in mock room event handler for ${t}:`,s)}}registerRpcMethod(t,e){this.rpcHandlers.set(t,e)}unregisterRpcMethod(t){this.rpcHandlers.delete(t)}async callRpc(t,e,i,n=1e4){let s=this.rpcHandlers.get(t);if(!s)throw new Error(`RPC method not found: ${t}`);return s({callerIdentity:e,payload:i,responseTimeout:n})}registerTextStreamHandler(t,e){this.textStreamHandlers.set(t,e)}unregisterTextStreamHandler(t){this.textStreamHandlers.delete(t)}simulateTextStream(t,e){let i=this.textStreamHandlers.get(t);i&&i(e,{identity:e.participantIdentity})}getParticipantByIdentity(t){return t===this.localParticipant.identity?new x(this.localParticipant.identity,this.localParticipant.name,this.localParticipant.attributes):this.remoteParticipants.get(t)}getParticipantBySid(t){if(t===this.localParticipant.sid)return new x(this.localParticipant.identity,this.localParticipant.name,this.localParticipant.attributes);for(let e of this.remoteParticipants.values())if(e.sid===t)return e}async simulateParticipantJoin(t,e){let i=new x(t,e?.name,e?.attributes||{},e?.kind||"standard");return this.remoteParticipants.set(t,i),this.emit("participantConnected",i),e?.withCamera&&await this.simulateRemoteTrack(t,"video","camera"),e?.withMicrophone&&await this.simulateRemoteTrack(t,"audio","microphone"),i}simulateParticipantLeave(t){let e=this.remoteParticipants.get(t);if(e){for(let i of e.getTrackPublications())i.track?.stop(),this.emit("trackUnsubscribed",i.track,i,e);this.remoteParticipants.delete(t),this.emit("participantDisconnected",e)}}async simulateRemoteTrack(t,e,i){let n=this.remoteParticipants.get(t);if(!n)return;let s,o;if(e==="video"){let{createSyntheticVideoTrack:d}=await Promise.resolve().then(()=>(_(),O)),m=d({animation:n.isAgent?"avatar":"pulse",label:n.name||t,foregroundColor:n.isAgent?"#22c55e":"#4361ee"});s=m.track,o=m.cleanup}else if(e==="audio"){let{createSyntheticAudioTrack:d}=await Promise.resolve().then(()=>(_(),O)),m=d({enabled:!1});s=m.track,o=m.cleanup}let a=new R(e,i,s,o),g=new y(a);return n.addTrackPublication(g),this.emit("trackSubscribed",a,g,n),this.emit("trackPublished",g,n),a}simulateTrackUnpublished(t,e){let i=this.remoteParticipants.get(t);if(!i)return;let n=i.getTrackPublication(e);n&&(i.removeTrackPublication(n.trackSid),this.emit("trackUnpublished",n,i),this.emit("trackUnsubscribed",n.track,n,i))}async simulateAgentJoin(t,e="AI Agent"){return this.simulateParticipantJoin(t,{name:e,kind:"agent",withCamera:!0,withMicrophone:!0,attributes:{"lk.agent.name":e,"lk.agent.state":"active"}})}simulateAttributeChange(t,e){let i=this.remoteParticipants.get(t);if(i){let n={...i.attributes};i.setAttributes(e),this.emit("participantAttributesChanged",e,n,i)}}simulateTrackMuted(t,e,i){let n=this.remoteParticipants.get(t);if(!n)return;let s=n.getTrackPublication(e);s?.track&&(s.track.setMuted(i),this.emit(i?"trackMuted":"trackUnmuted",s,n))}simulateActiveSpeakersChanged(t){let e=[];for(let i of t){let n=this.remoteParticipants.get(i);n&&(n.startSpeaking(),e.push(n))}this.emit("activeSpeakersChanged",e)}simulateDataReceived(t,e,i,n){let s=this.remoteParticipants.get(e);this.emit("dataReceived",t,s,i,n)}};var G=class{constructor(t={}){this.rooms=new Map;this.participants=new Map;this.tracks=new Map;this.agents=new Map;this.messages=new Map;this.config=t,this.randomState=t.seed??Date.now()}updateConfig(t){this.config={...this.config,...t},t.seed!==void 0&&(this.randomState=t.seed)}getConfig(){return{...this.config}}random(){return this.randomState=(this.randomState*1103515245+12345)%2147483648,this.randomState/2147483648}createRoom(t,e,i){let n=l("room"),s=new Date().toISOString(),o={id:n,name:t,groupId:e||l("group"),createdAt:s,metadata:i,isActive:!0,participantIds:[],connectionState:"disconnected",wsURL:Rt(n),token:U(n,"pending",s)};return this.rooms.set(n,o),this.messages.set(n,[]),o}getRoom(t){return this.rooms.get(t)}getRoomByName(t){for(let e of this.rooms.values())if(e.name===t)return e}listRooms(t=!1){let e=Array.from(this.rooms.values());return t?e.filter(i=>i.isActive):e}updateRoomConnectionState(t,e){let i=this.rooms.get(t);if(!i)return;let n=i.connectionState;return i.connectionState=e,n}endRoom(t){let e=this.rooms.get(t);if(!e||!e.isActive)return!1;e.isActive=!1,e.endedAt=new Date().toISOString(),e.connectionState="disconnected";for(let i of e.participantIds){let n=this.participants.get(i);n&&(n.isConnected=!1)}for(let i of this.agents.values())i.roomId===t&&i.status==="running"&&(i.status="stopped",i.stoppedAt=new Date().toISOString());return!0}deleteRoom(t){let e=this.rooms.get(t);if(!e)return!1;for(let i of e.participantIds)this.participants.delete(i);for(let[i,n]of this.tracks)n.roomId===t&&this.tracks.delete(i);for(let[i,n]of this.agents)n.roomId===t&&this.agents.delete(i);return this.messages.delete(t),this.rooms.delete(t),!0}addParticipant(t,e,i,n="user",s="standard",o=!1){let a=this.rooms.get(t);if(!a)return this.createError("ROOM_NOT_FOUND",`Room ${t} not found`);if(!a.isActive)return this.createError("ROOM_ENDED",`Room ${t} has ended`);let g=this.participants.get(e);if(g&&g.roomId===t&&g.isConnected)return this.config.strictMode?this.createError("PARTICIPANT_ALREADY_JOINED",`Participant ${e} is already in room ${t}`):g;let d={identity:e,name:i||e,roomId:t,joinedAt:new Date().toISOString(),isConnected:!0,trackIds:[],role:n,attributes:{},kind:s,isLocal:o};return this.participants.set(e,d),a.participantIds.push(e),d}getParticipant(t){return this.participants.get(t)}listParticipants(t,e=!0){let i=this.rooms.get(t);if(!i)return[];let n=[];for(let s of i.participantIds){let o=this.participants.get(s);o&&(!e||o.isConnected)&&n.push(o)}return n}updateParticipantAttributes(t,e){let i=this.participants.get(t);if(!i)return;let n={...i.attributes};return i.attributes={...i.attributes,...e},n}removeParticipant(t){let e=this.participants.get(t);if(!e)return;e.isConnected=!1;for(let n of e.trackIds)this.tracks.delete(n);e.trackIds=[];let i=this.rooms.get(e.roomId);if(i){let n=i.participantIds.indexOf(t);n!==-1&&i.participantIds.splice(n,1)}return e}publishTrack(t,e,i="unknown",n){let s=this.participants.get(t);if(!s)return this.createError("PARTICIPANT_NOT_FOUND",`Participant ${t} not found`);if(!s.isConnected)return this.createError("INVALID_OPERATION",`Participant ${t} is not connected`);let o=this.rooms.get(s.roomId);if(!o||!o.isActive)return this.createError("ROOM_ENDED","Room is not active");let a=l("track"),g={id:a,kind:e,source:i,participantIdentity:t,roomId:s.roomId,publishedAt:new Date().toISOString(),muted:!1,metadata:n};return this.tracks.set(a,g),s.trackIds.push(a),g}getTrack(t){return this.tracks.get(t)}listTracks(t,e){let i=[];for(let n of this.tracks.values())t&&n.roomId!==t||e&&n.participantIdentity!==e||i.push(n);return i}unpublishTrack(t){let e=this.tracks.get(t);if(!e)return;let i=this.participants.get(e.participantIdentity);if(i){let n=i.trackIds.indexOf(t);n!==-1&&i.trackIds.splice(n,1)}return this.tracks.delete(t),e}setTrackMuted(t,e){let i=this.tracks.get(t);return i?(i.muted=e,!0):!1}startAgent(t,e,i={}){let n=this.rooms.get(t);if(!n)return this.createError("ROOM_NOT_FOUND",`Room ${t} not found`);if(!n.isActive)return this.createError("ROOM_ENDED",`Room ${t} has ended`);let s=l("agent"),o={id:s,roomId:t,name:e,status:"running",startedAt:new Date().toISOString(),config:{responseStrategy:"echo",...i},messageHistory:[]};return this.agents.set(s,o),this.addParticipant(t,`agent_${s}`,e,"agent","agent",!1),o}getAgent(t){return this.agents.get(t)}listAgents(t){let e=[];for(let i of this.agents.values())i.roomId===t&&e.push(i);return e}stopAgent(t){let e=this.agents.get(t);if(e)return e.status="stopped",e.stoppedAt=new Date().toISOString(),this.removeParticipant(`agent_${t}`),e}updateAgentStatus(t,e){let i=this.agents.get(t);return i?(i.status=e,e==="stopped"&&(i.stoppedAt=new Date().toISOString()),!0):!1}addAgentMessage(t,e,i){let n=this.agents.get(t);if(!n)return;let s={id:l("msg"),content:e,role:i,timestamp:new Date().toISOString()};return n.messageHistory.push(s),s}addMessage(t,e,i,n="standard",s){if(!this.rooms.get(t))return this.createError("ROOM_NOT_FOUND",`Room ${t} not found`);let a={id:l("msg"),roomId:t,content:i,participantIdentity:e,createdAt:new Date().toISOString(),type:n,attributes:s},g=this.messages.get(t)||[];return g.push(a),this.messages.set(t,g),a}getMessages(t,e){let i=this.messages.get(t)||[];return e?i.slice(-e):i}createError(t,e,i){return{code:t,message:e,details:i}}isError(t){return typeof t=="object"&&t!==null&&"code"in t&&"message"in t}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(t){this.rooms=new Map(Object.entries(t.rooms)),this.participants=new Map(Object.entries(t.participants)),this.tracks=new Map(Object.entries(t.tracks)),this.agents=new Map(Object.entries(t.agents)),this.messages=new Map(Object.entries(t.messages).map(([e,i])=>[e,i])),this.config=t.config}};var w=class{constructor(t={}){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:t.latencyMs??0,strictMode:t.strictMode??!1,seed:t.seed,scenario:t.scenario,errorConfig:t.errorConfig,autoEmitEvents:t.autoEmitEvents??!0,organizationId:t.organizationId??"mock_org",apiUrl:t.apiUrl??"https://mock-livekit.local"},this.state=new G(this.config),this.events=new J,this.room=new L(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(t){this.config={...this.config,...t},this.state.updateConfig(t)}getConfig(){return{...this.config}}async simulateLatency(){this.config.latencyMs&&this.config.latencyMs>0&&await new Promise(t=>setTimeout(t,this.config.latencyMs))}applyScenario(t){switch(t){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 L(this)),this.room}async registerUser(t,e,i,n){if(await this.simulateLatency(),this.config.errorConfig?.unauthorized)throw new p("UNAUTHORIZED","Registration failed");let s={id:l("user"),externalId:t,organizationId:this.config.organizationId,role:"user",token:U("pending",t,new Date().toISOString())};return this._authToken=s.token,this._registeredUser=s,this.room.localParticipant.identity=t,this.room.localParticipant.name=i?.name||t,s}async registerAgent(t,e){if(await this.simulateLatency(),this.config.errorConfig?.unauthorized)throw new p("UNAUTHORIZED","Agent registration failed");let i=U("agent",t,new Date().toISOString());return this._authToken=i,this.room.localParticipant.identity=t,this.room.localParticipant.name=e.name,i}async quickStart(t){let{externalId:e,secret:i,metadata:n,...s}=t.user;return await this.registerUser(e,i,s,n),this.createRoom({language:t.room.language,timezone:t.room.timezone,affinity:t.room.affinity,metadata:t.room.metadata,disablePersistence:t.room.disablePersistence,contextualEvents:t.room.contextualEvents,userGroupId:t.room.userGroupId??void 0})}async createRoom(t,e={}){if(await this.simulateLatency(),this.config.errorConfig?.networkError||this.shouldThrowError())throw new p("NETWORK_ERROR","Failed to create room");let i=this.state.createRoom(`room_${Date.now()}`,t.affinity?.agentId,t.metadata);this.room.id=i.id,this.room.groupId=i.groupId,this.room.createdAt=i.createdAt,this.room.connectedAt=new Date().toISOString();let n=this.room.localParticipant.identity||"local_user";return this.state.addParticipant(i.id,n,this.room.localParticipant.name,"user","standard",!0),Object.keys(e).length>0&&(this.state.updateParticipantAttributes(n,e),this.room.localParticipant.setAttributes(e)),this.state.updateRoomConnectionState(i.id,"connected"),this.config.autoEmitEvents&&(this.events.emitRoomCreated(i),this.events.emitRoomConnectionStateChanged(i.id,"connected","disconnected")),(t.affinity?.agentId||t.affinity?.agentType)&&await this.startMockAgent(i.id,{type:t.affinity?.agentType,nature:t.affinity?.nature??"ai"}),await this.room.connect(i.wsURL,i.token),this.room}async joinRoom(t,e,i,n){await this.simulateLatency();let s=this.state.getRoom(t);if(!s)throw new P(t);if(!s.isActive)throw new p("ROOM_ENDED",`Room ${t} has ended`);this.room.id=s.id,this.room.groupId=s.groupId,this.room.createdAt=s.createdAt,this.room.connectedAt=new Date().toISOString();let o=this.room.localParticipant.identity||"local_user",a=this.state.addParticipant(t,o,this.room.localParticipant.name,"user","standard",!0);if(A(a))throw V(a);if(n){let g={};for(let[d,m]of Object.entries(n))g[d]=String(m);this.state.updateParticipantAttributes(o,g)}return this.state.updateRoomConnectionState(t,"connected"),this.config.autoEmitEvents&&(this.events.emitParticipantJoined(t,a),this.events.emitRoomConnectionStateChanged(t,"connected","disconnected")),await this.room.connect(s.wsURL,s.token),this.room}async evaluateRoom(t){await this.simulateLatency();let e=t.roomId||this.room?.id;if(!e)throw new p("ROOM_NOT_FOUND","No room to evaluate");let i=this.state.getRoom(e);if(!i)throw new P(e);i.metadata||(i.metadata={}),i.metadata.evaluation={rating:t.rating,comment:t.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 t=this.room.id,e=this.room.localParticipant.identity;await this.stopLocalTracks(),this.state.removeParticipant(e),this.config.autoEmitEvents&&t&&this.events.emitParticipantLeft(t,e),this.room.removeAllListeners(),await this.room.disconnect()}}async stopLocalTracks(){let t=this.room?.localParticipant;t&&await Promise.all([t.setCameraEnabled(!1),t.setMicrophoneEnabled(!1),t.setScreenShareEnabled(!1)])}async disconnectAndCloseRoom(){await this.closeRoom(),await this.disconnect()}async readRoom(t){await this.simulateLatency();let e=this.state.getRoom(t);if(!e)throw new P(t);e.metadata||(e.metadata={}),e.metadata.lastReadAt=new Date().toISOString()}async getRooms(t){await this.simulateLatency();let e=this.state.listRooms();t.roomStatus==="active"?e=e.filter(a=>a.isActive):t.roomStatus==="closed"&&(e=e.filter(a=>!a.isActive)),t.ids?.length&&(e=e.filter(a=>t.ids.includes(a.id))),t.groupId&&(e=e.filter(a=>a.groupId===t.groupId));let i=t.offset??0,n=t.limit??20;return{items:e.slice(i,i+n).map(a=>({id:a.id,name:a.name,groupId:a.groupId,organizationId:this.config.organizationId,endedAt:a.endedAt??null,createdAt:a.createdAt,updatedAt:a.createdAt,status:a.isActive?"active":"ended",participants:this.state.listParticipants(a.id).map(g=>({id:g.identity,name:g.name||g.identity,role:g.role,isLocal:g.isLocal})),evaluations:[],_count:{messages:this.state.getMessages(a.id).length,participants:a.participantIds.length}})),count:e.length,limit:n,offset:i}}async sendMessage(t,e){if(await this.simulateLatency(),!this.room?.id)throw new p("INVALID_OPERATION","Not connected to a room");let i=this.state.addMessage(this.room.id,this.room.localParticipant.identity,t,"standard",e);if(A(i))throw V(i);let n={id:i.id,timestamp:Date.now(),message:t,content:t,createdAt:i.createdAt,from:{identity:this.room.localParticipant.identity,name:this.room.localParticipant.name,id:this.room.localParticipant.identity,role:"user"}};for(let s of this.messageListeners)s([n]);this.config.autoEmitEvents&&this.events.emitMessageSent(this.room.id,i);for(let s of this.agents.values())s.isRunning&&s.roomId===this.room.id&&this.triggerAgentResponse(s,t)}async persistMessage(t){await this.simulateLatency();let e=this.state.addMessage(t.roomId,t.identity||"system",t.content);if(A(e))throw V(e);return{items:[{id:e.id,timestamp:Date.now(),message:e.content,content:e.content,createdAt:e.createdAt}],count:1,limit:1,offset:0}}async getMessages(t){await this.simulateLatency();let e=t.roomId||this.room?.id;return e?this.state.getMessages(e,t.limit).map(n=>({id:n.id,timestamp:Date.parse(n.createdAt),message:n.content,content:n.content,createdAt:n.createdAt,from:{identity:n.participantIdentity,id:n.participantIdentity,role:"user"}})):[]}async sendMessageReport(t){await this.simulateLatency()}async deleteMessageReport(t){await this.simulateLatency()}async updateMessageReactions(t){await this.simulateLatency()}subscribeMessages(t){return this.messageListeners.add(t),()=>{this.messageListeners.delete(t)}}async sendTypingIndicator(t){if(!this.room?.id)return;let e={type:"typing",isTyping:t,timestamp:Date.now(),participantId:this.room.localParticipant.identity};for(let i of this.typingListeners)i(e);this.config.autoEmitEvents&&this.events.emitTypingIndicator(this.room.id,this.room.localParticipant.identity,t)}subscribeTypingIndicators(t){return this.typingListeners.add(t),()=>this.typingListeners.delete(t)}unsubscribeTypingIndicators(t){this.typingListeners.delete(t)}async sendContextualEvent(t){await this.simulateLatency()}async requestNewRoom(t){await this.simulateLatency();let e=this.state.createRoom(`transfer_${Date.now()}`,void 0,{originRoom:t.originRoom});return{id:e.id,groupId:e.groupId,token:e.token,wsURL:e.wsURL,createdAt:e.createdAt}}async confirmRoomRequest(t){return await this.simulateLatency(),{success:!0,message:"Request confirmed",roomId:t}}async cancelRoomRequest(t){return await this.simulateLatency(),{success:!0,message:"Request cancelled",roomId:t}}async finishCall(){await this.simulateLatency(),this.room?.id&&this.state.endRoom(this.room.id)}isFirebaseEnabled(){return!0}onPresenceChange(t){return()=>{}}onPresenceAgentChange(t,e){return()=>{}}async createCallRequest(t){return await this.simulateLatency(),l("call")}onNewCallRequest(t){return this.callRequestListeners.has("new")||this.callRequestListeners.set("new",new Set),this.callRequestListeners.get("new").add(t),()=>this.callRequestListeners.get("new")?.delete(t)}onCallRequestChange(t){return this.callRequestListeners.has("change")||this.callRequestListeners.set("change",new Set),this.callRequestListeners.get("change").add(t),()=>this.callRequestListeners.get("change")?.delete(t)}onCallRequestRemoved(t){return()=>{}}async acceptCallRequest(t){await this.simulateLatency()}async cancelCallRequest(t){await this.simulateLatency()}async cancelOnDisconnect(t){await this.simulateLatency()}subscribePendingRequests(t,e={}){return()=>{}}subscribeRequestChanges(t){return()=>{}}async tryAcceptRequest(t){return await this.simulateLatency(),!0}onRoomSync(t,e){return()=>{}}async clearRoomSync(t,e){await this.simulateLatency()}onNewRoomRequest(t,e){return()=>{}}unsubscribeAllFirebase(){this.callRequestListeners.clear()}async destroy(){this.unsubscribeAllFirebase(),this.messageListeners.clear(),this.typingListeners.clear(),await this.disconnect(),this.state.reset()}async startMockAgent(t,e){let i=e?.name||"AI Assistant",n=new N(l("agent"),i,{responseStrategy:e?.responseStrategy||"echo",responseDelayMs:e?.responseDelayMs||100,cannedResponses:e?.cannedResponses||[],type:e?.type,nature:e?.nature});await n.start(t),this.agents.set(n.id,n),this.customAgentHandler&&n.setCustomHandler((d,m)=>this.customAgentHandler(d,m));let s=e?.type,o=Array.isArray(s)?s:[s].filter(Boolean),a=o.includes("video"),g=o.includes("voice");return(a||g)&&this.room.isConnected&&await this.room.simulateParticipantJoin(n.id,{name:i,kind:"agent",withCamera:a,withMicrophone:g||a,attributes:{"lk.agent.name":i,"lk.agent.state":"active",role:"agent"}}),this.config.autoEmitEvents&&this.events.emitAgentStarted(t,{id:n.id,name:n.name,roomId:t,status:"running",config:n.getConfig(),startedAt:new Date().toISOString(),messageHistory:[]}),n.id}async stopMockAgent(t){let e=this.agents.get(t);if(e){let i=e.roomId;await e.stop(),this.agents.delete(t),this.config.autoEmitEvents&&i&&this.events.emitAgentStopped(i,t)}}setAgentResponseHandler(t){this.customAgentHandler=t;for(let e of this.agents.values())e.setCustomHandler((i,n)=>t(i,n))}async triggerAgentResponse(t,e){if(this.config.scenario!=="agent_timeout")try{let i=await t.processMessage(e);if(!i)return;let n=this.state.addMessage(t.roomId,`agent_${t.id}`,i);if(!A(n)){let s={id:n.id,timestamp:Date.now(),message:i,content:i,createdAt:n.createdAt,from:{identity:`agent_${t.id}`,name:t.name,id:t.id,role:"agent"}};for(let o of this.messageListeners)o([s]);this.config.autoEmitEvents&&this.events.emitMessageReceived(t.roomId,n)}}catch(i){console.error("Agent response error:",i)}}simulateCallRequest(t){let e={id:l("call"),guestId:t.guestId||"guest_user",name:t.name||"Guest User",createdAt:new Date().toISOString(),status:t.status||"pending",...t},i=this.callRequestListeners.get("new");if(i)for(let n of i)n(e.id,e)}simulateParticipantJoin(t,e,i="user"){if(!this.room?.id)return;let n=this.state.addParticipant(this.room.id,t,e,i,"standard",!1);!A(n)&&this.config.autoEmitEvents&&this.events.emitParticipantJoined(this.room.id,n)}simulateParticipantLeave(t){if(!this.room?.id)return;this.state.removeParticipant(t)&&this.config.autoEmitEvents&&this.events.emitParticipantLeft(this.room.id,t)}simulateIncomingMessage(t,e){if(!this.room?.id)return;let i=this.state.addMessage(this.room.id,t,e);if(A(i))return;let n={id:i.id,timestamp:Date.now(),message:e,content:e,createdAt:i.createdAt,from:{identity:t,id:t,role:"user"}};for(let s of this.messageListeners)s([n]);this.config.autoEmitEvents&&this.events.emitMessageReceived(this.room.id,i)}async simulateDisconnect(){if(!this.room?.id)return;let t=this.room.state;this.room.state="disconnected",this.config.autoEmitEvents&&this.events.emitRoomConnectionStateChanged(this.room.id,"disconnected",t),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 L(this),St()}seed(t){this.config.seed=t,this.state.updateConfig({seed:t})}setScenario(t){this.config.scenario=t,this.applyScenario(t)}exportState(){return{...this.state.toJSON(),eventHistory:this.events.getHistory()}}getEventHistory(t){return this.events.getHistory(t)}};var X={},M={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 Q(){let r=b(M.MODE);if(r==="mock"||r==="real")return r;let t=b(M.USE_MOCK);return t==="true"||t==="1"||$t()?"mock":"real"}function qt(){let r={},t=b(M.MOCK_LATENCY);t&&(r.latencyMs=parseInt(t,10));let e=b(M.MOCK_STRICT);(e==="true"||e==="1")&&(r.strictMode=!0);let i=b(M.MOCK_SCENARIO);i&&(r.scenario=i);let n=b(M.MOCK_SEED);return n&&(r.seed=parseInt(n,10)),r}function Ht(){let r={},t=b(M.API_URL);t&&(r.apiUrl=t);let e=b(M.AUTH_URL);e&&(r.authUrl=e);let i=b(M.ORG_ID);return i&&(r.organizationId=i),r}function b(r){if(typeof process<"u"&&process.env)return process.env[r];if(typeof X<"u"&&X.env)return X.env[`VITE_${r}`]||X.env[r];if(typeof window<"u"&&window.__ENV__)return window.__ENV__[r]}function $t(){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 q=class r{static create(t){if((t.mode??Q())==="mock"){let i={...qt(),...t.mockConfig,organizationId:t.organizationId,apiUrl:t.apiUrl};return new w(i)}if(!t.organizationId||!t.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 K(t)}static createFromEnv(t){let e=t?.mode??Q(),i=Ht();return r.create({...i,...t,mode:e})}static createMock(t){return new w({organizationId:"mock_org",apiUrl:"https://mock-livekit.local",...t})}static createDeterministicMock(t=12345){return new w({organizationId:"mock_org",apiUrl:"https://mock-livekit.local",seed:t,strictMode:!0})}static getCurrentMode(){return Q()}static isMockMode(){return Q()==="mock"}static isMockService(t){return t instanceof w}};function zt(r){return q.createFromEnv(r)}function jt(r){return q.createMock(r)}0&&(module.exports={ConversationServiceFactory,createConversationService,createMockConversationService});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @onlive.ai/common-121 v0.2.
|
|
1
|
+
/*! @onlive.ai/common-121 v0.2.230 | © 2026 Onlive.ai */
|
|
2
2
|
import { ConversationService } from '../conversation.service.cjs';
|
|
3
3
|
import { ConversationServiceOptions } from '../conversation.types.cjs';
|
|
4
4
|
import { MockConversationService } from './service.cjs';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @onlive.ai/common-121 v0.2.
|
|
1
|
+
/*! @onlive.ai/common-121 v0.2.230 | © 2026 Onlive.ai */
|
|
2
2
|
import { ConversationService } from '../conversation.service.js';
|
|
3
3
|
import { ConversationServiceOptions } from '../conversation.types.js';
|
|
4
4
|
import { MockConversationService } from './service.js';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @onlive.ai/common-121 v0.2.
|
|
1
|
+
/*! @onlive.ai/common-121 v0.2.230 | © 2026 Onlive.ai */
|
|
2
2
|
var _t=Object.defineProperty;var xt=(r,t)=>()=>(r&&(t=r(r=0)),t);var Lt=(r,t)=>{for(var e in t)_t(r,e,{get:t[e],enumerable:!0})};var E={};Lt(E,{SYNTHETIC_MEDIA_PRESETS:()=>Ct,createSyntheticAudioTrack:()=>wt,createSyntheticMedia:()=>It,createSyntheticMediaFromPreset:()=>Wt,createSyntheticVideoTrack:()=>At});function At(r={}){let{width:t=640,height:e=480,fps:i=30,backgroundColor:n="#1a1a2e",foregroundColor:s="#4361ee",label:o="Mock Video",animation:a="wave"}=r,d=document.createElement("canvas");d.width=t,d.height=e;let c=d.getContext("2d"),p,I=Date.now(),N={wave:k=>{c.fillStyle=n,c.fillRect(0,0,t,e),c.strokeStyle=s,c.lineWidth=3,c.beginPath();for(let m=0;m<t;m++){let f=e/2+Math.sin(m/t*4*Math.PI+k*.002)*(e/4);m===0?c.moveTo(m,f):c.lineTo(m,f)}c.stroke()},pulse:k=>{c.fillStyle=n,c.fillRect(0,0,t,e);let m=Math.sin(k*.003)*.3+.7,f=Math.min(t,e)*.3*m;c.beginPath(),c.arc(t/2,e/2,f,0,Math.PI*2),c.fillStyle=s,c.fill()},bars:k=>{c.fillStyle=n,c.fillRect(0,0,t,e);let m=20,f=t/m,T=e*.7;c.fillStyle=s;for(let L=0;L<m;L++){let ut=Math.abs(Math.sin(L/m*Math.PI*2+k*.004))*T,Et=L*f,Ot=e-ut;c.fillRect(Et+2,Ot,f-4,ut)}},avatar:k=>{c.fillStyle=n,c.fillRect(0,0,t,e);let m=t/2,f=e/2-20,T=Math.min(t,e)*.15;c.beginPath(),c.arc(m,f,T,0,Math.PI*2),c.fillStyle=s,c.fill(),c.beginPath(),c.ellipse(m,f+T*2.2,T*1.5,T,0,Math.PI,0),c.fill(),Math.sin(k*.01)>0&&(c.beginPath(),c.arc(m,f+T*3,5+Math.sin(k*.02)*3,0,Math.PI*2),c.fillStyle="#22c55e",c.fill())},none:()=>{c.fillStyle=n,c.fillRect(0,0,t,e)}},q=()=>{c.fillStyle="rgba(255, 255, 255, 0.8)",c.font=`${Math.floor(e*.04)}px system-ui, sans-serif`,c.textAlign="center",c.fillText(o,t/2,e-20)},C=()=>{let k=Date.now()-I;N[a](k),q(),p=requestAnimationFrame(C)};C();let gt=d.captureStream(i),lt=gt.getVideoTracks()[0];return{track:lt,stream:gt,cleanup:()=>{cancelAnimationFrame(p),lt.stop()}}}function wt(r={}){let{frequency:t=440,volume:e=.1,waveType:i="sine",addVariation:n=!0,enabled:s=!1}=r,o=new AudioContext,a=o.createMediaStreamDestination(),d=o.createOscillator();d.type=i,d.frequency.value=t;let c=o.createGain();c.gain.value=s?e:0;let p=null,I=null;n&&(p=o.createOscillator(),p.frequency.value=.5,I=o.createGain(),I.gain.value=10,p.connect(I),I.connect(d.frequency),p.start()),d.connect(c),c.connect(a),d.start();let N=a.stream,q=N.getAudioTracks()[0];return{track:q,stream:N,setVolume:C=>{c.gain.value=Math.max(0,Math.min(1,C))},setEnabled:C=>{c.gain.value=C?e:0},cleanup:()=>{d.stop(),p?.stop(),o.close(),q.stop()}}}function It(r,t){let e=At(r),i=wt(t),n=new MediaStream([e.track,i.track]);return{videoTrack:e.track,audioTrack:i.track,combinedStream:n,setAudioVolume:i.setVolume,setAudioEnabled:i.setEnabled,cleanup:()=>{e.cleanup(),i.cleanup()}}}function Wt(r){let t=Ct[r];return It(t.video,t.audio)}var Ct,O=xt(()=>{"use strict";Ct={localCamera:{video:{width:640,height:480,animation:"avatar",label:"You",foregroundColor:"#4361ee"},audio:{enabled:!1}},agentCamera:{video:{width:640,height:480,animation:"avatar",label:"AI Agent",foregroundColor:"#22c55e",backgroundColor:"#0f172a"},audio:{enabled:!1,frequency:300}},screenShare:{video:{width:1920,height:1080,animation:"bars",label:"Screen Share",backgroundColor:"#0a0a0a",foregroundColor:"#f59e0b"},audio:{enabled:!1}},voiceOnly:{video:{width:320,height:240,animation:"wave",label:"Voice Call"},audio:{enabled:!1,volume:.05}}}});import{Session as Q}from"@onlive.ai/tracker/session";import{Room as Yt,RoomEvent as X}from"livekit-client";import{initializeApp as Dt}from"firebase/app";import{query as b,endAt as Ut,equalTo as Nt,get as pt,getDatabase as qt,limitToFirst as Ht,limitToLast as $t,onChildAdded as mt,onChildChanged as ht,onChildRemoved as ft,onDisconnect as kt,onValue as vt,orderByChild as zt,orderByKey as jt,orderByValue as Ft,push as Kt,ref as Vt,remove as Jt,runTransaction as Bt,set as yt,startAt as Gt,update as Qt}from"firebase/database";var H=class{constructor(t){this.onChildChanged=(t,e)=>ht(this.ref(t),i=>e(i.key||"",i.val(),i));this.onChildRemoved=(t,e)=>ft(this.ref(t),i=>e(i.key||"",i.val(),i));this.onChildChangedQuery=(t,e)=>ht(t,i=>e(i.key||"",i.val(),i));this.onChildRemovedQuery=(t,e)=>ft(t,i=>e(i.key||"",i.val(),i));let e=Dt(t.config);this.db=qt(e)}ref(t){return Vt(this.db,t)}async getOnce(t){let e=await pt(this.ref(t));return e.exists()?e.val():null}async getOnceQuery(t){let e=await pt(t),i=[];return e.exists()&&e.forEach(n=>{i.push({key:n.key||"",value:n.val()})}),i}onValue(t,e){return vt(this.ref(t),i=>e(i.key??"",i.val(),i),i=>console.error("onValue error",i))}onValueQuery(t,e){return vt(t,i=>e(i.key??"",i.val(),i),i=>console.error("onValueQuery error",i))}onChildAdded(t,e){return mt(this.ref(t),i=>e(i.key||"",i.val(),i),i=>console.error("onChildAdded error",i))}onChildAddedQuery(t,e){return mt(t,i=>e(i.key||"",i.val(),i),i=>console.error("onChildAddedQuery error",i))}write(t,e){return yt(this.ref(t),e)}update(t,e){return Qt(this.ref(t),e)}remove(t){return Jt(this.ref(t))}async push(t,e){let i=Kt(this.ref(t));return await yt(i,e),i.key}onDisconnectUpdate(t,e){return kt(this.ref(t)).update(e)}cancelOnDisconnect(t){return kt(this.ref(t)).cancel()}transaction(t,e){return Bt(this.ref(t),i=>e(i))}query(t,e={}){let i=this.ref(t);return e.orderBy==="child"&&e.childKey&&(i=b(i,zt(e.childKey))),e.orderBy==="key"&&(i=b(i,jt())),e.orderBy==="value"&&(i=b(i,Ft())),e.startAt!=null&&(i=b(i,Gt(e.startAt))),e.endAt!=null&&(i=b(i,Ut(e.endAt))),e.equalTo!=null&&(i=b(i,Nt(e.equalTo))),e.limitFirst!=null&&(i=b(i,Ht(e.limitFirst))),e.limitLast!=null&&(i=b(i,$t(e.limitLast))),i}};var l=async(r,t)=>{let e=await fetch(r,t);if(!e.ok){let i=await e.json().catch(()=>({}));throw new Error(JSON.stringify({status:e.status,statusText:e.statusText,...i}))}return e&&e.json()};var Mt=r=>{let t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",e="";for(let i=0;i<r;i++)e+=t.charAt(Math.floor(Math.random()*t.length));return e};import{Generator as Xt}from"@onlive.ai/tracker/generator";import{Session as h}from"@onlive.ai/tracker/session";var S="chatbot",$=class r{static hasSession(){return!!h.getCookie(S)}static getSession(t={role:"guest",regenerate:!1}){t.regenerate&&(h.id=Xt.uuid(),h.deleteCookie(S));let e=h.getCookie(S);return e&&r.isValidSession(e,t.role)?e:r.createSession(t.role)}static createSession(t){let e={externalId:t==="agent"?String(r.getUserId()||h.id):h.id,secret:Mt(16),createdAt:new Date().toISOString()};return h.setCookie(S,e,3600*24*365),e}static isValidSession(t,e){if(e==="guest")return!0;let i=r.getUserId();return!!(i&&String(i)===t.externalId)}static getUserId(){return h.getCookie("user-id",{objectKey:"userId",storageKey:"user",storageType:"localStorage",ttl:3600*24*365,preserveData:!0})}static updateSessionWithRegistrationData(t){let e=h.getCookie(S);if(e||(e=r.createSession("guest")),e){let i={...e,registrationData:t};h.setCookie(S,i,3600*24*365)}}static hasRegistrationData(){return!!h.getCookie(S)?.registrationData}static async getAgentInfo(t){return fetch(`${t}/api/v1/auth/user-info`,{credentials:"include"}).then(e=>e.json())}static getRegistrationData(){return h.getCookie(S)?.registrationData}};var bt="lk.chat",St="lk.transcription",Rt="lk.events",G="typing-indicator";var Y=class extends Yt{},z=class{constructor(t){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(t,e)=>{let i=t?.info?.id,n=t.info?.attributes?.["lk.segment_id"];n&&(this.transcriptionMap.has(n)?i=this.transcriptionMap.get(n)||"":this.transcriptionMap.set(n,i));let s=e?.identity?this.room.getParticipantByIdentity(e.identity):void 0,o="";for await(let a of t)o+=a,this.emitMessage({id:i,timestamp:Date.now(),message:o,assets:JSON.parse(t.info?.attributes?.assets||"[]"),from:s});this.messagePersistence==="client"&&this.persistMessage({roomId:this.room.id,content:o,externalId:i,identity:s?.identity,kind:s?.kind})};this.emitMessage=t=>{for(let e of this.listeners)e([t])};this.handleDataReceived=(t,e,i,n)=>{if(n===G)try{let s=JSON.parse(new TextDecoder().decode(t));if(s.type==="typing"&&s.participantId!==this.room.localParticipant.identity){let o={type:"typing",isTyping:s.isTyping,timestamp:s.timestamp,participantId:s.participantId};this.emitTypingIndicator(o)}}catch(s){console.warn("Failed to parse typing indicator:",s)}};this.emitTypingIndicator=t=>{for(let e of this.typingListeners)e(t)};this.apiUrl=t.apiUrl,this.authUrl=t.authUrl,this.organizationId=t.organizationId,this.channelTopic=t.channelTopic||bt,this.transcriptionTopic=t.transcriptionTopic||St,this.eventsTopic=t.eventsTopic||Rt,this.messagePersistence=t.messagePersistence||"disabled",this.agentInitialModalities=t.agentInitialModalities,this.agentModalities=t.agentModalities,this.room=this.createRoomInstance(),t.firebaseConfig&&this.initializeFirebase(t.firebaseConfig)}createRoomInstance(){return new Y({adaptiveStream:!0,dynacast:!0})}ensureRoom(){return this.room||(this.room=this.createRoomInstance()),this.room}initializeFirebase(t){this.firebaseApi=new H({config:t}),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(X.DataReceived,this.handleDataReceived),this.room.registerTextStreamHandler(this.channelTopic,this.handleIncomingMessage),this.room.registerTextStreamHandler(this.transcriptionTopic,this.handleIncomingMessage),this.room.on(X.DataReceived,this.handleDataReceived)}async registerUser(t,e,i,n){let s=await l(`${this.apiUrl}/users/register`,{method:"POST",body:JSON.stringify({externalId:t,secret:e,...i,metadata:n}),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.register.signal});if(!s.token)throw new Error("Registration failed: No token received from server");return this.authToken=s.token,s}async registerAgent(t,e){let i=Q.getCookie("livekit-agent-token");if(i){if(this.decodeJwtPayload(i)?.username===e.name)return this.authToken=i,i;Q.deleteCookie("livekit-agent-token")}let n=await l(`${this.authUrl}/admins/register`,{method:"POST",body:JSON.stringify({externalId:t,name:e.name,email:e.email,avatar:e.avatar}),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},credentials:"include",signal:this.abortControllers.register.signal});return Q.setCookie("livekit-agent-token",n.token,1440*60),this.authToken=n.token,n.token}decodeJwtPayload(t){try{let e=t.split(".");if(e.length!==3)return null;let i=e[1],n=atob(i.replace(/-/g,"+").replace(/_/g,"/"));return JSON.parse(n)}catch{return null}}async quickStart(t){let e=t;console.log("[ConversationService] Starting quickStart with options:",e),this.room=this.ensureRoom(),(this.agentInitialModalities||this.agentModalities)&&(e={...e,room:{...e.room,metadata:{...this.agentInitialModalities&&{agentInitialModalities:this.agentInitialModalities},...this.agentModalities&&{agentModalities:this.agentModalities},...e.room.metadata}}});let i=await l(`${this.apiUrl}/rooms/quick-start`,{method:"POST",body:JSON.stringify(e),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.quickStart.signal});if(!i.user?.token)throw new Error("Quick start failed: No user token received from server");this.authToken=i.user.token;let n={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(n),this.setupParticipantAttributesHandler(),this.room.connect(n.wsURL,n.token),this.initializeRoomHandlers(),this.room}async createRoom(t){if(!this.authToken)throw new Error("Cannot create room: No authentication token. Call registerUser() first.");this.room=this.ensureRoom();let{initialMessage:e,...i}=t;(this.agentInitialModalities||this.agentModalities)&&(i.metadata={...this.agentInitialModalities&&{agentInitialModalities:this.agentInitialModalities},...this.agentModalities&&{agentModalities:this.agentModalities},...i.metadata});let n=await l(`${this.apiUrl}/rooms`,{method:"POST",body:JSON.stringify(i),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.createRoom.signal});return this.setRoomMetadata(n),this.setupParticipantAttributesHandler(),this.room.connect(n.wsURL,n.token).then(async()=>{if(e)try{await this.sendMessage(e)}catch(s){console.error("[ConversationService] Failed to send initial message:",s)}}),this.initializeRoomHandlers(),this.room}async joinRoom(t,e,i,n){let s=await l(`${this.apiUrl}/rooms/${t}/join`,{method:"POST",body:JSON.stringify({timezone:e,language:i,...n??{}}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.createRoom.signal});return this.setRoomMetadata(s),this.setupParticipantAttributesHandler(),await this.room.connect(s.wsURL,s.token),this.initializeRoomHandlers(),this.room}setRoomMetadata(t){this.room.id=t.id,this.room.groupId=t.groupId,this.room.createdAt=t.createdAt,this.room.connectedAt=new Date().toISOString(),this.room.affinity=t.affinity}setupParticipantAttributesHandler(){this.room.on(X.ParticipantAttributesChanged,t=>{t.identity===this.room.localParticipant.identity&&$.updateSessionWithRegistrationData(t.attributes)})}async evaluateRoom(t){let e=t.roomId||this.room?.id;if(!e)throw new Error("Room ID is required for evaluation");return l(`${this.apiUrl}/rooms/${e}/evaluate`,{method:"POST",body:JSON.stringify({rating:t.rating,comment:t.comment}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.evaluateRoom.signal})}async closeRoom(){this.room&&(await l(`${this.apiUrl}/rooms/${this.room.id}/close`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.closeRoom.signal}),await this.stopAndUnpublishLocalTracks())}async disconnect(){this.room&&(await this.stopAndUnpublishLocalTracks(),this.room.removeAllListeners(),await this.room.disconnect(),this.room=null)}async stopAndUnpublishLocalTracks(){let t=this.room?.localParticipant;if(!t)return;await Promise.allSettled([t.setMicrophoneEnabled(!1),t.setCameraEnabled(!1),t.setScreenShareEnabled(!1)]);let e=Array.from(t.trackPublications.values());await Promise.all(e.map(async i=>{let n=i.track;if(n)try{await t.unpublishTrack(n,!0)}catch{n.stop()}}))}async disconnectAndCloseRoom(){await this.closeRoom(),await this.disconnect()}async readRoom(t){return l(`${this.apiUrl}/rooms/${t}/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(t){let e=new URLSearchParams;return t.page&&e.append("page",t.page.toString()),t.limit&&e.append("limit",t.limit.toString()),t.offset&&e.append("offset",t.offset.toString()),t.orderBy&&e.append("orderBy",t.orderBy),t.orderDir&&e.append("orderDir",t.orderDir),t.ids?.length&&e.append("ids",t.ids.join(",")),t.with?.length&&e.append("with",t.with.join(",")),t.count?.length&&e.append("count",t.count.join(",")),t.latestOnly&&e.append("latestOnly",t.latestOnly.toString()),t.includeUnread&&e.append("includeUnread",t.includeUnread.toString()),t.roomStatus&&e.append("roomStatus",t.roomStatus),t.archived&&e.append("archived",t.archived.toString()),t.participantIds?.length&&e.append("participantIds",t.participantIds.join(",")),t.participantExternalIds?.length&&e.append("participantExternalIds",t.participantExternalIds.join(",")),t.groupId&&e.append("groupId",t.groupId),t.hasMessages!==void 0&&e.append("hasMessages",t.hasMessages.toString()),l(`${this.authUrl}/rooms?${e}`,{method:"GET",headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},credentials:"include",signal:this.abortControllers.getRooms.signal})}async sendMessage(t,e){let i=await this.room.localParticipant.sendText(t,{topic:this.channelTopic,attributes:e});this.emitMessage({id:i.id,timestamp:Date.now(),message:t,assets:JSON.parse(e?.assets||"[]"),from:this.room.localParticipant}),this.messagePersistence==="client"&&this.persistMessage({roomId:this.room.id,content:t,externalId:i.id,identity:this.room.localParticipant?.identity,kind:this.room.localParticipant?.kind})}async persistMessage(t){return l(`${this.apiUrl}/messages/create`,{method:"POST",body:JSON.stringify(t),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.persistMessage.signal})}async getMessages(t){let e=new URLSearchParams;return t.limit&&e.append("limit",t.limit.toString()),t.with&&e.append("with",t.with.join(",")),(await l(`${this.apiUrl}/messages/search${e.size?`?${e.toString()}`:""}`,{method:"POST",body:JSON.stringify(t),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.createRoom.signal})).items}async sendMessageReport(t){try{return l(`${this.apiUrl}/messages/${t.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(e){console.error("Error sending message report:",e)}}async deleteMessageReport(t){try{return l(`${this.apiUrl}/messages/${t.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(e){console.error("Error deleting message report:",e)}}async updateMessageReactions(t){try{return l(`${this.apiUrl}/messages/${t.messageId}/reactions`,{method:"PATCH",body:JSON.stringify({add:t.add||[],remove:t.remove||[]}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.updateMessageReactions.signal})}catch(e){console.error("Error updating message reactions:",e)}}subscribeMessages(t){return this.listeners.add(t),()=>{this.listeners.delete(t)}}async sendTypingIndicator(t){if(!(!this.room||this.room.state!=="connected"))try{let e=new TextEncoder().encode(JSON.stringify({type:"typing",isTyping:t,timestamp:Date.now(),participantId:this.room.localParticipant.identity}));await this.room.localParticipant.publishData(e,{reliable:!1,topic:G})}catch(e){console.warn("Failed to send typing indicator:",e)}}subscribeTypingIndicators(t){return this.typingListeners.add(t),()=>{this.typingListeners.delete(t)}}unsubscribeTypingIndicators(t){this.typingListeners.delete(t)}async sendContextualEvent(t){try{let e=JSON.stringify(t);await this.room.localParticipant.sendText(e,{topic:this.eventsTopic})}catch(e){console.warn("Failed to send event:",e)}}async requestNewRoom(t){return l(`${this.apiUrl}/rooms/request-new`,{method:"POST",body:JSON.stringify(t),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}async confirmRoomRequest(t){return l(`${this.apiUrl}/rooms/confirm-call`,{method:"POST",body:JSON.stringify({roomId:t}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}async cancelRoomRequest(t){return l(`${this.apiUrl}/rooms/cancel-call`,{method:"POST",body:JSON.stringify({roomId:t}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}async finishCall(){if(this.room?.id)return l(`${this.apiUrl}/rooms/finish-call`,{method:"POST",body:JSON.stringify({roomId:this.room.id}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}isFirebaseEnabled(){return!!(this.firebaseApi&&this.presencePath&&this.callsPath)}getFirebase(){if(!this.firebaseApi||!this.presencePath||!this.callsPath)throw new Error("Firebase is not initialized. Provide firebaseConfig in constructor.");return{api:this.firebaseApi,presencePath:this.presencePath,callsPath:this.callsPath}}buildAgentPresencePath(t){return`${this.presencePath}/${t}`}onPresenceChange(t){let{api:e,presencePath:i}=this.getFirebase();return e.onChildChanged(i,(n,s)=>t(n,s))}onPresenceAgentChange(t,e){let{api:i}=this.getFirebase();return i.onValue(this.buildAgentPresencePath(t),(n,s)=>e(n,s))}async createCallRequest(t){let{api:e,callsPath:i}=this.getFirebase(),s=(await l(`${this.apiUrl}/rooms/call-request`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},body:JSON.stringify(t)})).id;return e.onDisconnectUpdate(`${i}/${s}`,{status:"disconnected"}),s}onNewCallRequest(t){let{api:e,callsPath:i}=this.getFirebase();return e.onChildAdded(i,(n,s)=>t(n,{...s,id:n}))}onCallRequestChange(t){let{api:e,callsPath:i}=this.getFirebase();return e.onChildChanged(i,(n,s)=>t(n,{...s,id:n}))}onCallRequestRemoved(t){let{api:e,callsPath:i}=this.getFirebase();return e.onChildRemoved(i,n=>t(n))}async acceptCallRequest(t){let{api:e,callsPath:i}=this.getFirebase();return await e.cancelOnDisconnect(`${i}/${t}`),e.update(`${i}/${t}`,{status:"accepted"})}async cancelCallRequest(t){let{api:e,callsPath:i}=this.getFirebase();await e.cancelOnDisconnect(`${i}/${t}`),await l(`${this.apiUrl}/rooms/call-request/cancel`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},body:JSON.stringify({callId:t})})}async cancelOnDisconnect(t){let{api:e,callsPath:i}=this.getFirebase();await e.cancelOnDisconnect(`${i}/${t}`)}subscribePendingRequests(t,e={}){let{api:i,callsPath:n}=this.getFirebase();e.resetSeen&&this.seenRequestIds.clear(),this.firebaseUnsubscribers["pending-requests"]?.();let s=i.query(n,{orderBy:"child",childKey:"status",equalTo:"pending"}),o=i.onChildAddedQuery(s,(a,d)=>{if(!a||this.seenRequestIds.has(a))return;let c={...d,id:a};this.seenRequestIds.add(a),t(a,c)});return this.firebaseUnsubscribers["pending-requests"]=o,()=>{o?.(),delete this.firebaseUnsubscribers["pending-requests"]}}subscribeRequestChanges(t){let{api:e,callsPath:i}=this.getFirebase();this.firebaseUnsubscribers["request-changes"]?.();let n=e.onChildChanged(i,(s,o)=>{if(!s)return;let a=JSON.stringify(o);this.lastSnapshotById.get(s)!==a&&(this.lastSnapshotById.set(s,a),t(s,{...o,id:s}))});return this.firebaseUnsubscribers["request-changes"]=n,()=>{n?.(),delete this.firebaseUnsubscribers["request-changes"]}}async tryAcceptRequest(t){let{api:e,callsPath:i}=this.getFirebase(),n=`${i}/${t}`;return await e.transaction(n,o=>o&&(o.status==="pending"?{...o,status:"accepted"}:o)),(await e.getOnce(n))?.status==="accepted"}onRoomSync(t,e){let{api:i}=this.getFirebase(),n=`orgs/${this.organizationId}/rooms/${t}/sync`;return i.onValue(n,(s,o)=>{e(o)})}async clearRoomSync(t,e){let{api:i}=this.getFirebase(),n=`orgs/${this.organizationId}/rooms/${t}/sync`;await i.write(n,{needsSync:!1,reason:e||null,timestamp:Date.now()})}onNewRoomRequest(t,e){let{api:i}=this.getFirebase(),n=`orgs/${this.organizationId}/rooms/${t}/call`;return i.onValue(n,(s,o)=>{e(o)})}unsubscribeAllFirebase(){Object.values(this.firebaseUnsubscribers).forEach(t=>t?.()),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(t=>t.abort()),await this.disconnect()}};var W=0;function Tt(){W=0}function g(r){return W++,`mock_${r}_${W}_${Date.now().toString(36)}`}function D(r,t,e){let i=e||new Date().toISOString(),n=typeof btoa=="function"?btoa(i).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""):i.replace(/[^a-zA-Z0-9]/g,"");return`mock_token_${r}_${t}_${n}`}function Pt(r){return`wss://mock-livekit.local/room/${r}`}var Z={responseStrategy:"echo",responseDelayMs:100,cannedResponses:[],type:"text",nature:"ai",simulateTyping:!1,typingDelayPerChar:20};function tt(r,t,e=[],i=0,n=Math.random){switch(r){case"echo":return{response:`Echo: ${t}`,nextIndex:i};case"canned":return{response:e[0]||"Default response",nextIndex:i};case"sequential":return{response:e[i]||"No more responses",nextIndex:(i+1)%Math.max(1,e.length)};case"random":{if(e.length===0)return{response:"Random response",nextIndex:i};let s=Math.floor(n()*e.length);return{response:e[s],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 U=class{constructor(t,e,i={}){this._state="idle";this.conversationHistory=[];this.responseIndex=0;this.eventListeners=new Set;this.randomFn=Math.random;this.messageCount=0;this.id=t,this.name=e,this.config={...Z,...i}}get state(){return this._state}get isRunning(){return this._state==="running"}get history(){return[...this.conversationHistory]}getConfig(){return{...this.config}}updateConfig(t){this.config={...this.config,...t}}setStrategy(t){this.config.responseStrategy=t}setCannedResponses(t){this.config.cannedResponses=t,this.responseIndex=0}setCustomHandler(t){this.customHandler=t,this.config.responseStrategy="custom"}setRandomFunction(t){this.randomFn=t}async start(t){this._state!=="running"&&(this._state="starting",this.roomId=t,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(t){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(t,"user"),this.emitEvent({type:"message_received",agentId:this.id,message:t});let e;try{if(this.config.responseStrategy==="custom"&&this.customHandler)e=await this.customHandler(this.id,t,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=tt(this.config.responseStrategy,t,this.config.cannedResponses,this.responseIndex,this.randomFn);e=i.response,this.responseIndex=i.nextIndex}}}catch(i){throw this._state="error",i}return this.config.simulateTyping&&this.config.typingDelayPerChar&&await this.delay(e.length*this.config.typingDelayPerChar),this.config.responseDelayMs&&await this.delay(this.config.responseDelayMs),this.addMessage(e,"agent"),this.messageCount++,this.emitEvent({type:"response_sent",agentId:this.id,response:e}),e}addEventListener(t){return this.eventListeners.add(t),()=>this.eventListeners.delete(t)}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(t,e){let i={id:g("msg"),content:t,role:e,timestamp:Date.now()};return this.conversationHistory.push(i),i}emitEvent(t){for(let e of this.eventListeners)try{e(t)}catch(i){console.error("Error in agent event listener:",i)}}delay(t){return new Promise(e=>setTimeout(e,t))}};var u=class r extends Error{constructor(t,e,i){super(e),this.name="MockLiveKitError",this.code=t,this.details=i,typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,r)}toMockError(){return{code:this.code,message:this.message,details:this.details}}static fromMockError(t){return new r(t.code,t.message,t.details)}},P=class extends u{constructor(t){super("ROOM_NOT_FOUND",`Room not found: ${t}`,{roomId:t}),this.name="RoomNotFoundError"}},et=class extends u{constructor(t){super("ROOM_ENDED",`Room has ended: ${t}`,{roomId:t}),this.name="RoomEndedError"}},it=class extends u{constructor(t,e){super("PARTICIPANT_ALREADY_JOINED",`Participant ${t} is already in room ${e}`,{identity:t,roomId:e}),this.name="ParticipantAlreadyJoinedError"}},nt=class extends u{constructor(t){super("PARTICIPANT_NOT_FOUND",`Participant not found: ${t}`,{identity:t}),this.name="ParticipantNotFoundError"}},st=class extends u{constructor(t){super("TRACK_NOT_FOUND",`Track not found: ${t}`,{trackId:t}),this.name="TrackNotFoundError"}},rt=class extends u{constructor(t){super("AGENT_NOT_FOUND",`Agent not found: ${t}`,{agentId:t}),this.name="AgentNotFoundError"}},at=class extends u{constructor(t="Unauthorized"){super("UNAUTHORIZED",t),this.name="UnauthorizedError"}},ot=class extends u{constructor(t="Network error occurred"){super("NETWORK_ERROR",t),this.name="NetworkError"}},ct=class extends u{constructor(t,e){super("INVALID_OPERATION",t,e),this.name="InvalidOperationError"}},dt=class extends u{constructor(t,e){super("TIMEOUT",`Operation timed out: ${t}`,{operation:t,timeoutMs:e}),this.name="TimeoutError"}};function j(r){switch(r.code){case"ROOM_NOT_FOUND":return new P(r.details?.roomId??"unknown");case"ROOM_ENDED":return new et(r.details?.roomId??"unknown");case"PARTICIPANT_ALREADY_JOINED":return new it(r.details?.identity??"unknown",r.details?.roomId??"unknown");case"PARTICIPANT_NOT_FOUND":return new nt(r.details?.identity??"unknown");case"TRACK_NOT_FOUND":return new st(r.details?.trackId??"unknown");case"AGENT_NOT_FOUND":return new rt(r.details?.agentId??"unknown");case"UNAUTHORIZED":return new at(r.message);case"NETWORK_ERROR":return new ot(r.message);case"INVALID_OPERATION":return new ct(r.message,r.details);case"TIMEOUT":return new dt(r.details?.operation??"unknown",r.details?.timeoutMs??0);default:return u.fromMockError(r)}}function A(r){return typeof r=="object"&&r!==null&&"code"in r&&"message"in r&&typeof r.code=="string"&&typeof r.message=="string"}var F=class{constructor(){this.listeners={};this.wildcardListeners=new Set;this.eventHistory=[];this.maxHistorySize=1e3;this.recordHistory=!0}setMaxHistorySize(t){this.maxHistorySize=t,this.trimHistory()}setRecordHistory(t){this.recordHistory=t}on(t,e){return this.listeners[t]||(this.listeners[t]=new Set),this.listeners[t].add(e),()=>{this.off(t,e)}}once(t,e){let i=n=>{this.off(t,i),e(n)};return this.on(t,i)}off(t,e){this.listeners[t]?.delete(e)}onAny(t){return this.wildcardListeners.add(t),()=>{this.wildcardListeners.delete(t)}}offAny(t){this.wildcardListeners.delete(t)}removeAllListeners(t){t?delete this.listeners[t]:(this.listeners={},this.wildcardListeners.clear())}emit(t){this.recordHistory&&(this.eventHistory.push(t),this.trimHistory());let e=this.listeners[t.type];if(e)for(let i of e)try{i(t)}catch(n){console.error(`Error in mock event listener for ${t.type}:`,n)}for(let i of this.wildcardListeners)try{i(t)}catch(n){console.error("Error in mock wildcard event listener:",n)}}trimHistory(){this.eventHistory.length>this.maxHistorySize&&(this.eventHistory=this.eventHistory.slice(-this.maxHistorySize))}emitRoomCreated(t){let e={type:"roomCreated",timestamp:new Date().toISOString(),roomId:t.id,room:t};this.emit(e)}emitRoomEnded(t){let e={type:"roomEnded",timestamp:new Date().toISOString(),roomId:t};this.emit(e)}emitRoomConnectionStateChanged(t,e,i){let n={type:"roomConnectionStateChanged",timestamp:new Date().toISOString(),roomId:t,state:e,previousState:i};this.emit(n)}emitParticipantJoined(t,e){let i={type:"participantJoined",timestamp:new Date().toISOString(),roomId:t,participant:e};this.emit(i)}emitParticipantLeft(t,e){let i={type:"participantLeft",timestamp:new Date().toISOString(),roomId:t,participantIdentity:e};this.emit(i)}emitParticipantAttributesChanged(t,e,i,n){let s={type:"participantAttributesChanged",timestamp:new Date().toISOString(),roomId:t,participantIdentity:e,attributes:i,previousAttributes:n};this.emit(s)}emitTrackPublished(t,e,i){let n={type:"trackPublished",timestamp:new Date().toISOString(),roomId:t,participantIdentity:e,track:i};this.emit(n)}emitTrackUnpublished(t,e,i){let n={type:"trackUnpublished",timestamp:new Date().toISOString(),roomId:t,participantIdentity:e,trackId:i};this.emit(n)}emitTrackMuted(t,e){let i={type:"trackMuted",timestamp:new Date().toISOString(),roomId:t,trackId:e};this.emit(i)}emitTrackUnmuted(t,e){let i={type:"trackUnmuted",timestamp:new Date().toISOString(),roomId:t,trackId:e};this.emit(i)}emitMessageReceived(t,e){let i={type:"messageReceived",timestamp:new Date().toISOString(),roomId:t,message:e};this.emit(i)}emitMessageSent(t,e){let i={type:"messageSent",timestamp:new Date().toISOString(),roomId:t,message:e};this.emit(i)}emitTypingIndicator(t,e,i){let n={type:"typingIndicator",timestamp:new Date().toISOString(),roomId:t,participantIdentity:e,isTyping:i};this.emit(n)}emitAgentStarted(t,e){let i={type:"agentStarted",timestamp:new Date().toISOString(),roomId:t,agent:e};this.emit(i)}emitAgentStopped(t,e){let i={type:"agentStopped",timestamp:new Date().toISOString(),roomId:t,agentId:e};this.emit(i)}emitAgentMessage(t,e,i){let n={type:"agentMessage",timestamp:new Date().toISOString(),roomId:t,agentId:e,message:i};this.emit(n)}emitDataReceived(t,e,i,n){let s={type:"dataReceived",timestamp:new Date().toISOString(),roomId:t,participantIdentity:e,data:i,topic:n};this.emit(s)}emitError(t,e){let i={type:"error",timestamp:new Date().toISOString(),roomId:e,error:t};this.emit(i)}getHistory(t){return t?this.eventHistory.filter(e=>e.type===t):[...this.eventHistory]}getLastEvents(t,e){return(e?this.eventHistory.filter(n=>n.type===e):this.eventHistory).slice(-t)}clearHistory(){this.eventHistory=[]}listenerCount(t){return(this.listeners[t]?.size??0)+this.wildcardListeners.size}};var R=class{constructor(t,e,i,n){this.muted=!1;this.enabled=!0;this.attachedElements=new Set;this.kind=t,this.source=e,this.sid=g("TR"),this.mediaStreamTrack=i,this.mediaCleanup=n}get mediaTrack(){return this.mediaStreamTrack}attach(t){let e=t||document.createElement(this.kind==="video"?"video":"audio");if(this.mediaStreamTrack){let i=new MediaStream([this.mediaStreamTrack]);e.srcObject=i,e.autoplay=!0,this.kind==="video"&&(e.playsInline=!0,e.muted=!0)}return this.attachedElements.add(e),e}detach(t){if(t)return t.srcObject=null,this.attachedElements.delete(t),[t];let e=Array.from(this.attachedElements);for(let i of e)i.srcObject=null;return this.attachedElements.clear(),e}stop(){this.detach(),this.mediaCleanup&&this.mediaCleanup(),this.mediaStreamTrack&&this.mediaStreamTrack.stop(),this.enabled=!1}setMuted(t){this.muted=t,this.mediaStreamTrack&&(this.mediaStreamTrack.enabled=!t)}setEnabled(t){this.enabled=t,this.mediaStreamTrack&&(this.mediaStreamTrack.enabled=t)}},v=class{constructor(t,e){this.subscribed=!0;this.isEnabled=!0;this.track=t,this.trackSid=t.sid,this.trackName=e||`${t.kind}_${t.source}`,this.source=t.source,this.kind=t.kind}get isMuted(){return this.track?.muted??!1}get isSubscribed(){return this.subscribed&&this.track!==null}setSubscribed(t){this.subscribed=t}setEnabled(t){this.isEnabled=t,this.track&&(this.track.enabled=t)}setMuted(t){this.track&&this.track.setMuted(t)}};var K=class{constructor(t){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=t,this.sid=g("PA"),this.joinedAt=new Date}get isCameraEnabled(){return this._cameraEnabled}get isMicrophoneEnabled(){return this._microphoneEnabled}get isScreenShareEnabled(){return this._screenShareEnabled}getTrackPublications(){return Array.from(this.trackPublications.values())}getTrackPublication(t){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"}[t]||t;return this.trackPublications.get(i)}getTrackPublicationBySid(t){for(let e of this.trackPublications.values())if(e.trackSid===t)return e}setAttributes(t){this.attributes={...this.attributes,...t}}async setCameraEnabled(t,e){if(this._cameraEnabled=t,t){let{createSyntheticVideoTrack:n}=await Promise.resolve().then(()=>(O(),E)),{track:s,cleanup:o}=n({animation:"avatar",label:this.name||"Local Camera"}),a=new R("video","camera",s,o),d=new v(a,e?.name);return this.trackPublications.set("camera",d),this.videoTrackPublications.set(a.sid,d),this.room.emit("localTrackPublished",d,this),d}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(t,e){if(this._microphoneEnabled=t,t){let{createSyntheticAudioTrack:n}=await Promise.resolve().then(()=>(O(),E)),{track:s,cleanup:o}=n({enabled:!1}),a=new R("audio","microphone",s,o),d=new v(a,e?.name);return this.trackPublications.set("microphone",d),this.audioTrackPublications.set(a.sid,d),this.room.emit("localTrackPublished",d,this),d}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(t,e){if(this._screenShareEnabled=t,t){let{createSyntheticVideoTrack:n}=await Promise.resolve().then(()=>(O(),E)),{track:s,cleanup:o}=n({animation:"bars",label:"Screen Share",width:1920,height:1080}),a=new R("video","screen_share",s,o),d=new v(a,e?.name||"screen");return this.trackPublications.set("screen_share",d),this.videoTrackPublications.set(a.sid,d),this.room.emit("localTrackPublished",d,this),d}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(t,e){let i=new v(t,e?.name),n=e?.source||t.source;return this.trackPublications.set(n,i),t.kind==="audio"?this.audioTrackPublications.set(t.sid,i):t.kind==="video"&&this.videoTrackPublications.set(t.sid,i),this.room.emit("localTrackPublished",i,this),i}async unpublishTrack(t){t.stop();for(let[e,i]of this.trackPublications)if(i.track===t){this.trackPublications.delete(e),t.kind==="audio"?this.audioTrackPublications.delete(t.sid):t.kind==="video"&&this.videoTrackPublications.delete(t.sid),this.room.emit("localTrackUnpublished",i,this);break}}async sendText(t,e){return{id:g("msg")}}async publishData(t,e){}async setMetadata(t){this.attributes.metadata=t}async setName(t){this.name=t}cleanup(){for(let t of this.trackPublications.values())t.track?.stop();this.trackPublications.clear(),this.audioTrackPublications.clear(),this.videoTrackPublications.clear(),this._cameraEnabled=!1,this._microphoneEnabled=!1,this._screenShareEnabled=!1}};function Zt(r){switch(r){case"standard":return 0;case"ingress":return 1;case"egress":return 2;case"sip":return 3;case"agent":return 4;default:return 0}}var _=class{constructor(t,e,i={},n="standard"){this.connectionQuality="excellent";this.isSpeaking=!1;this.audioLevel=0;this.trackPublications=new Map;this.identity=t,this.sid=g("PA"),this.name=e,this.attributes=i,this._kindString=n,this.kind=Zt(n),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 t=this.getTrackPublication("camera");return!!(t?.track&&!t.isMuted)}get isMicrophoneEnabled(){let t=this.getTrackPublication("microphone");return!!(t?.track&&!t.isMuted)}getTrackPublication(t){for(let e of this.trackPublications.values())if(e.source===t)return e}getTrackPublicationBySid(t){return this.trackPublications.get(t)}getTrackPublications(){return Array.from(this.trackPublications.values())}getAudioTracks(){return this.getTrackPublications().filter(t=>t.kind==="audio")}getVideoTracks(){return this.getTrackPublications().filter(t=>t.kind==="video")}addTrackPublication(t){this.trackPublications.set(t.trackSid,t)}removeTrackPublication(t){let e=this.trackPublications.get(t);return e&&(this.trackPublications.delete(t),e.track?.stop()),e}setAttributes(t){this.attributes={...this.attributes,...t}}getAttribute(t){return this.attributes[t]}startSpeaking(t=.5){this.isSpeaking=!0,this.audioLevel=t}stopSpeaking(){this.isSpeaking=!1,this.audioLevel=0}setConnectionQuality(t){this.connectionQuality=t}cleanup(){for(let t of this.trackPublications.values())t.track?.stop();this.trackPublications.clear()}};var x=class{constructor(t){this.remoteParticipants=new Map;this._state="disconnected";this.eventHandlers=new Map;this.textStreamHandlers=new Map;this.rpcHandlers=new Map;this.mockService=t,this.localParticipant=new K(this),this.sid=g("RM")}get state(){return this._state}set state(t){let e=this._state;this._state=t,e!==t&&this.emit("connectionStateChanged",t,e)}get numParticipants(){return this.remoteParticipants.size+1}get isConnected(){return this._state==="connected"}async connect(t,e){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 e of this.remoteParticipants.values())e.cleanup();this.remoteParticipants.clear(),this.localParticipant.cleanup();let t=this._state;this._state="disconnected",this.emit("connectionStateChanged","disconnected",t),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(t,e){return this.eventHandlers.has(t)||this.eventHandlers.set(t,new Set),this.eventHandlers.get(t).add(e),this}once(t,e){let i=(...n)=>{this.off(t,i),e(...n)};return this.on(t,i)}off(t,e){return this.eventHandlers.get(t)?.delete(e),this}removeAllListeners(){this.eventHandlers.clear()}emit(t,...e){let i=this.eventHandlers.get(t);if(i)for(let n of i)try{n(...e)}catch(s){console.error(`Error in mock room event handler for ${t}:`,s)}}registerRpcMethod(t,e){this.rpcHandlers.set(t,e)}unregisterRpcMethod(t){this.rpcHandlers.delete(t)}async callRpc(t,e,i,n=1e4){let s=this.rpcHandlers.get(t);if(!s)throw new Error(`RPC method not found: ${t}`);return s({callerIdentity:e,payload:i,responseTimeout:n})}registerTextStreamHandler(t,e){this.textStreamHandlers.set(t,e)}unregisterTextStreamHandler(t){this.textStreamHandlers.delete(t)}simulateTextStream(t,e){let i=this.textStreamHandlers.get(t);i&&i(e,{identity:e.participantIdentity})}getParticipantByIdentity(t){return t===this.localParticipant.identity?new _(this.localParticipant.identity,this.localParticipant.name,this.localParticipant.attributes):this.remoteParticipants.get(t)}getParticipantBySid(t){if(t===this.localParticipant.sid)return new _(this.localParticipant.identity,this.localParticipant.name,this.localParticipant.attributes);for(let e of this.remoteParticipants.values())if(e.sid===t)return e}async simulateParticipantJoin(t,e){let i=new _(t,e?.name,e?.attributes||{},e?.kind||"standard");return this.remoteParticipants.set(t,i),this.emit("participantConnected",i),e?.withCamera&&await this.simulateRemoteTrack(t,"video","camera"),e?.withMicrophone&&await this.simulateRemoteTrack(t,"audio","microphone"),i}simulateParticipantLeave(t){let e=this.remoteParticipants.get(t);if(e){for(let i of e.getTrackPublications())i.track?.stop(),this.emit("trackUnsubscribed",i.track,i,e);this.remoteParticipants.delete(t),this.emit("participantDisconnected",e)}}async simulateRemoteTrack(t,e,i){let n=this.remoteParticipants.get(t);if(!n)return;let s,o;if(e==="video"){let{createSyntheticVideoTrack:c}=await Promise.resolve().then(()=>(O(),E)),p=c({animation:n.isAgent?"avatar":"pulse",label:n.name||t,foregroundColor:n.isAgent?"#22c55e":"#4361ee"});s=p.track,o=p.cleanup}else if(e==="audio"){let{createSyntheticAudioTrack:c}=await Promise.resolve().then(()=>(O(),E)),p=c({enabled:!1});s=p.track,o=p.cleanup}let a=new R(e,i,s,o),d=new v(a);return n.addTrackPublication(d),this.emit("trackSubscribed",a,d,n),this.emit("trackPublished",d,n),a}simulateTrackUnpublished(t,e){let i=this.remoteParticipants.get(t);if(!i)return;let n=i.getTrackPublication(e);n&&(i.removeTrackPublication(n.trackSid),this.emit("trackUnpublished",n,i),this.emit("trackUnsubscribed",n.track,n,i))}async simulateAgentJoin(t,e="AI Agent"){return this.simulateParticipantJoin(t,{name:e,kind:"agent",withCamera:!0,withMicrophone:!0,attributes:{"lk.agent.name":e,"lk.agent.state":"active"}})}simulateAttributeChange(t,e){let i=this.remoteParticipants.get(t);if(i){let n={...i.attributes};i.setAttributes(e),this.emit("participantAttributesChanged",e,n,i)}}simulateTrackMuted(t,e,i){let n=this.remoteParticipants.get(t);if(!n)return;let s=n.getTrackPublication(e);s?.track&&(s.track.setMuted(i),this.emit(i?"trackMuted":"trackUnmuted",s,n))}simulateActiveSpeakersChanged(t){let e=[];for(let i of t){let n=this.remoteParticipants.get(i);n&&(n.startSpeaking(),e.push(n))}this.emit("activeSpeakersChanged",e)}simulateDataReceived(t,e,i,n){let s=this.remoteParticipants.get(e);this.emit("dataReceived",t,s,i,n)}};var V=class{constructor(t={}){this.rooms=new Map;this.participants=new Map;this.tracks=new Map;this.agents=new Map;this.messages=new Map;this.config=t,this.randomState=t.seed??Date.now()}updateConfig(t){this.config={...this.config,...t},t.seed!==void 0&&(this.randomState=t.seed)}getConfig(){return{...this.config}}random(){return this.randomState=(this.randomState*1103515245+12345)%2147483648,this.randomState/2147483648}createRoom(t,e,i){let n=g("room"),s=new Date().toISOString(),o={id:n,name:t,groupId:e||g("group"),createdAt:s,metadata:i,isActive:!0,participantIds:[],connectionState:"disconnected",wsURL:Pt(n),token:D(n,"pending",s)};return this.rooms.set(n,o),this.messages.set(n,[]),o}getRoom(t){return this.rooms.get(t)}getRoomByName(t){for(let e of this.rooms.values())if(e.name===t)return e}listRooms(t=!1){let e=Array.from(this.rooms.values());return t?e.filter(i=>i.isActive):e}updateRoomConnectionState(t,e){let i=this.rooms.get(t);if(!i)return;let n=i.connectionState;return i.connectionState=e,n}endRoom(t){let e=this.rooms.get(t);if(!e||!e.isActive)return!1;e.isActive=!1,e.endedAt=new Date().toISOString(),e.connectionState="disconnected";for(let i of e.participantIds){let n=this.participants.get(i);n&&(n.isConnected=!1)}for(let i of this.agents.values())i.roomId===t&&i.status==="running"&&(i.status="stopped",i.stoppedAt=new Date().toISOString());return!0}deleteRoom(t){let e=this.rooms.get(t);if(!e)return!1;for(let i of e.participantIds)this.participants.delete(i);for(let[i,n]of this.tracks)n.roomId===t&&this.tracks.delete(i);for(let[i,n]of this.agents)n.roomId===t&&this.agents.delete(i);return this.messages.delete(t),this.rooms.delete(t),!0}addParticipant(t,e,i,n="user",s="standard",o=!1){let a=this.rooms.get(t);if(!a)return this.createError("ROOM_NOT_FOUND",`Room ${t} not found`);if(!a.isActive)return this.createError("ROOM_ENDED",`Room ${t} has ended`);let d=this.participants.get(e);if(d&&d.roomId===t&&d.isConnected)return this.config.strictMode?this.createError("PARTICIPANT_ALREADY_JOINED",`Participant ${e} is already in room ${t}`):d;let c={identity:e,name:i||e,roomId:t,joinedAt:new Date().toISOString(),isConnected:!0,trackIds:[],role:n,attributes:{},kind:s,isLocal:o};return this.participants.set(e,c),a.participantIds.push(e),c}getParticipant(t){return this.participants.get(t)}listParticipants(t,e=!0){let i=this.rooms.get(t);if(!i)return[];let n=[];for(let s of i.participantIds){let o=this.participants.get(s);o&&(!e||o.isConnected)&&n.push(o)}return n}updateParticipantAttributes(t,e){let i=this.participants.get(t);if(!i)return;let n={...i.attributes};return i.attributes={...i.attributes,...e},n}removeParticipant(t){let e=this.participants.get(t);if(!e)return;e.isConnected=!1;for(let n of e.trackIds)this.tracks.delete(n);e.trackIds=[];let i=this.rooms.get(e.roomId);if(i){let n=i.participantIds.indexOf(t);n!==-1&&i.participantIds.splice(n,1)}return e}publishTrack(t,e,i="unknown",n){let s=this.participants.get(t);if(!s)return this.createError("PARTICIPANT_NOT_FOUND",`Participant ${t} not found`);if(!s.isConnected)return this.createError("INVALID_OPERATION",`Participant ${t} is not connected`);let o=this.rooms.get(s.roomId);if(!o||!o.isActive)return this.createError("ROOM_ENDED","Room is not active");let a=g("track"),d={id:a,kind:e,source:i,participantIdentity:t,roomId:s.roomId,publishedAt:new Date().toISOString(),muted:!1,metadata:n};return this.tracks.set(a,d),s.trackIds.push(a),d}getTrack(t){return this.tracks.get(t)}listTracks(t,e){let i=[];for(let n of this.tracks.values())t&&n.roomId!==t||e&&n.participantIdentity!==e||i.push(n);return i}unpublishTrack(t){let e=this.tracks.get(t);if(!e)return;let i=this.participants.get(e.participantIdentity);if(i){let n=i.trackIds.indexOf(t);n!==-1&&i.trackIds.splice(n,1)}return this.tracks.delete(t),e}setTrackMuted(t,e){let i=this.tracks.get(t);return i?(i.muted=e,!0):!1}startAgent(t,e,i={}){let n=this.rooms.get(t);if(!n)return this.createError("ROOM_NOT_FOUND",`Room ${t} not found`);if(!n.isActive)return this.createError("ROOM_ENDED",`Room ${t} has ended`);let s=g("agent"),o={id:s,roomId:t,name:e,status:"running",startedAt:new Date().toISOString(),config:{responseStrategy:"echo",...i},messageHistory:[]};return this.agents.set(s,o),this.addParticipant(t,`agent_${s}`,e,"agent","agent",!1),o}getAgent(t){return this.agents.get(t)}listAgents(t){let e=[];for(let i of this.agents.values())i.roomId===t&&e.push(i);return e}stopAgent(t){let e=this.agents.get(t);if(e)return e.status="stopped",e.stoppedAt=new Date().toISOString(),this.removeParticipant(`agent_${t}`),e}updateAgentStatus(t,e){let i=this.agents.get(t);return i?(i.status=e,e==="stopped"&&(i.stoppedAt=new Date().toISOString()),!0):!1}addAgentMessage(t,e,i){let n=this.agents.get(t);if(!n)return;let s={id:g("msg"),content:e,role:i,timestamp:new Date().toISOString()};return n.messageHistory.push(s),s}addMessage(t,e,i,n="standard",s){if(!this.rooms.get(t))return this.createError("ROOM_NOT_FOUND",`Room ${t} not found`);let a={id:g("msg"),roomId:t,content:i,participantIdentity:e,createdAt:new Date().toISOString(),type:n,attributes:s},d=this.messages.get(t)||[];return d.push(a),this.messages.set(t,d),a}getMessages(t,e){let i=this.messages.get(t)||[];return e?i.slice(-e):i}createError(t,e,i){return{code:t,message:e,details:i}}isError(t){return typeof t=="object"&&t!==null&&"code"in t&&"message"in t}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(t){this.rooms=new Map(Object.entries(t.rooms)),this.participants=new Map(Object.entries(t.participants)),this.tracks=new Map(Object.entries(t.tracks)),this.agents=new Map(Object.entries(t.agents)),this.messages=new Map(Object.entries(t.messages).map(([e,i])=>[e,i])),this.config=t.config}};var w=class{constructor(t={}){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:t.latencyMs??0,strictMode:t.strictMode??!1,seed:t.seed,scenario:t.scenario,errorConfig:t.errorConfig,autoEmitEvents:t.autoEmitEvents??!0,organizationId:t.organizationId??"mock_org",apiUrl:t.apiUrl??"https://mock-livekit.local"},this.state=new V(this.config),this.events=new F,this.room=new x(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(t){this.config={...this.config,...t},this.state.updateConfig(t)}getConfig(){return{...this.config}}async simulateLatency(){this.config.latencyMs&&this.config.latencyMs>0&&await new Promise(t=>setTimeout(t,this.config.latencyMs))}applyScenario(t){switch(t){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 x(this)),this.room}async registerUser(t,e,i,n){if(await this.simulateLatency(),this.config.errorConfig?.unauthorized)throw new u("UNAUTHORIZED","Registration failed");let s={id:g("user"),externalId:t,organizationId:this.config.organizationId,role:"user",token:D("pending",t,new Date().toISOString())};return this._authToken=s.token,this._registeredUser=s,this.room.localParticipant.identity=t,this.room.localParticipant.name=i?.name||t,s}async registerAgent(t,e){if(await this.simulateLatency(),this.config.errorConfig?.unauthorized)throw new u("UNAUTHORIZED","Agent registration failed");let i=D("agent",t,new Date().toISOString());return this._authToken=i,this.room.localParticipant.identity=t,this.room.localParticipant.name=e.name,i}async quickStart(t){let{externalId:e,secret:i,metadata:n,...s}=t.user;return await this.registerUser(e,i,s,n),this.createRoom({language:t.room.language,timezone:t.room.timezone,affinity:t.room.affinity,metadata:t.room.metadata,disablePersistence:t.room.disablePersistence,contextualEvents:t.room.contextualEvents,userGroupId:t.room.userGroupId??void 0})}async createRoom(t,e={}){if(await this.simulateLatency(),this.config.errorConfig?.networkError||this.shouldThrowError())throw new u("NETWORK_ERROR","Failed to create room");let i=this.state.createRoom(`room_${Date.now()}`,t.affinity?.agentId,t.metadata);this.room.id=i.id,this.room.groupId=i.groupId,this.room.createdAt=i.createdAt,this.room.connectedAt=new Date().toISOString();let n=this.room.localParticipant.identity||"local_user";return this.state.addParticipant(i.id,n,this.room.localParticipant.name,"user","standard",!0),Object.keys(e).length>0&&(this.state.updateParticipantAttributes(n,e),this.room.localParticipant.setAttributes(e)),this.state.updateRoomConnectionState(i.id,"connected"),this.config.autoEmitEvents&&(this.events.emitRoomCreated(i),this.events.emitRoomConnectionStateChanged(i.id,"connected","disconnected")),(t.affinity?.agentId||t.affinity?.agentType)&&await this.startMockAgent(i.id,{type:t.affinity?.agentType,nature:t.affinity?.nature??"ai"}),await this.room.connect(i.wsURL,i.token),this.room}async joinRoom(t,e,i,n){await this.simulateLatency();let s=this.state.getRoom(t);if(!s)throw new P(t);if(!s.isActive)throw new u("ROOM_ENDED",`Room ${t} has ended`);this.room.id=s.id,this.room.groupId=s.groupId,this.room.createdAt=s.createdAt,this.room.connectedAt=new Date().toISOString();let o=this.room.localParticipant.identity||"local_user",a=this.state.addParticipant(t,o,this.room.localParticipant.name,"user","standard",!0);if(A(a))throw j(a);if(n){let d={};for(let[c,p]of Object.entries(n))d[c]=String(p);this.state.updateParticipantAttributes(o,d)}return this.state.updateRoomConnectionState(t,"connected"),this.config.autoEmitEvents&&(this.events.emitParticipantJoined(t,a),this.events.emitRoomConnectionStateChanged(t,"connected","disconnected")),await this.room.connect(s.wsURL,s.token),this.room}async evaluateRoom(t){await this.simulateLatency();let e=t.roomId||this.room?.id;if(!e)throw new u("ROOM_NOT_FOUND","No room to evaluate");let i=this.state.getRoom(e);if(!i)throw new P(e);i.metadata||(i.metadata={}),i.metadata.evaluation={rating:t.rating,comment:t.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 t=this.room.id,e=this.room.localParticipant.identity;await this.stopLocalTracks(),this.state.removeParticipant(e),this.config.autoEmitEvents&&t&&this.events.emitParticipantLeft(t,e),this.room.removeAllListeners(),await this.room.disconnect()}}async stopLocalTracks(){let t=this.room?.localParticipant;t&&await Promise.all([t.setCameraEnabled(!1),t.setMicrophoneEnabled(!1),t.setScreenShareEnabled(!1)])}async disconnectAndCloseRoom(){await this.closeRoom(),await this.disconnect()}async readRoom(t){await this.simulateLatency();let e=this.state.getRoom(t);if(!e)throw new P(t);e.metadata||(e.metadata={}),e.metadata.lastReadAt=new Date().toISOString()}async getRooms(t){await this.simulateLatency();let e=this.state.listRooms();t.roomStatus==="active"?e=e.filter(a=>a.isActive):t.roomStatus==="closed"&&(e=e.filter(a=>!a.isActive)),t.ids?.length&&(e=e.filter(a=>t.ids.includes(a.id))),t.groupId&&(e=e.filter(a=>a.groupId===t.groupId));let i=t.offset??0,n=t.limit??20;return{items:e.slice(i,i+n).map(a=>({id:a.id,name:a.name,groupId:a.groupId,organizationId:this.config.organizationId,endedAt:a.endedAt??null,createdAt:a.createdAt,updatedAt:a.createdAt,status:a.isActive?"active":"ended",participants:this.state.listParticipants(a.id).map(d=>({id:d.identity,name:d.name||d.identity,role:d.role,isLocal:d.isLocal})),evaluations:[],_count:{messages:this.state.getMessages(a.id).length,participants:a.participantIds.length}})),count:e.length,limit:n,offset:i}}async sendMessage(t,e){if(await this.simulateLatency(),!this.room?.id)throw new u("INVALID_OPERATION","Not connected to a room");let i=this.state.addMessage(this.room.id,this.room.localParticipant.identity,t,"standard",e);if(A(i))throw j(i);let n={id:i.id,timestamp:Date.now(),message:t,content:t,createdAt:i.createdAt,from:{identity:this.room.localParticipant.identity,name:this.room.localParticipant.name,id:this.room.localParticipant.identity,role:"user"}};for(let s of this.messageListeners)s([n]);this.config.autoEmitEvents&&this.events.emitMessageSent(this.room.id,i);for(let s of this.agents.values())s.isRunning&&s.roomId===this.room.id&&this.triggerAgentResponse(s,t)}async persistMessage(t){await this.simulateLatency();let e=this.state.addMessage(t.roomId,t.identity||"system",t.content);if(A(e))throw j(e);return{items:[{id:e.id,timestamp:Date.now(),message:e.content,content:e.content,createdAt:e.createdAt}],count:1,limit:1,offset:0}}async getMessages(t){await this.simulateLatency();let e=t.roomId||this.room?.id;return e?this.state.getMessages(e,t.limit).map(n=>({id:n.id,timestamp:Date.parse(n.createdAt),message:n.content,content:n.content,createdAt:n.createdAt,from:{identity:n.participantIdentity,id:n.participantIdentity,role:"user"}})):[]}async sendMessageReport(t){await this.simulateLatency()}async deleteMessageReport(t){await this.simulateLatency()}async updateMessageReactions(t){await this.simulateLatency()}subscribeMessages(t){return this.messageListeners.add(t),()=>{this.messageListeners.delete(t)}}async sendTypingIndicator(t){if(!this.room?.id)return;let e={type:"typing",isTyping:t,timestamp:Date.now(),participantId:this.room.localParticipant.identity};for(let i of this.typingListeners)i(e);this.config.autoEmitEvents&&this.events.emitTypingIndicator(this.room.id,this.room.localParticipant.identity,t)}subscribeTypingIndicators(t){return this.typingListeners.add(t),()=>this.typingListeners.delete(t)}unsubscribeTypingIndicators(t){this.typingListeners.delete(t)}async sendContextualEvent(t){await this.simulateLatency()}async requestNewRoom(t){await this.simulateLatency();let e=this.state.createRoom(`transfer_${Date.now()}`,void 0,{originRoom:t.originRoom});return{id:e.id,groupId:e.groupId,token:e.token,wsURL:e.wsURL,createdAt:e.createdAt}}async confirmRoomRequest(t){return await this.simulateLatency(),{success:!0,message:"Request confirmed",roomId:t}}async cancelRoomRequest(t){return await this.simulateLatency(),{success:!0,message:"Request cancelled",roomId:t}}async finishCall(){await this.simulateLatency(),this.room?.id&&this.state.endRoom(this.room.id)}isFirebaseEnabled(){return!0}onPresenceChange(t){return()=>{}}onPresenceAgentChange(t,e){return()=>{}}async createCallRequest(t){return await this.simulateLatency(),g("call")}onNewCallRequest(t){return this.callRequestListeners.has("new")||this.callRequestListeners.set("new",new Set),this.callRequestListeners.get("new").add(t),()=>this.callRequestListeners.get("new")?.delete(t)}onCallRequestChange(t){return this.callRequestListeners.has("change")||this.callRequestListeners.set("change",new Set),this.callRequestListeners.get("change").add(t),()=>this.callRequestListeners.get("change")?.delete(t)}onCallRequestRemoved(t){return()=>{}}async acceptCallRequest(t){await this.simulateLatency()}async cancelCallRequest(t){await this.simulateLatency()}async cancelOnDisconnect(t){await this.simulateLatency()}subscribePendingRequests(t,e={}){return()=>{}}subscribeRequestChanges(t){return()=>{}}async tryAcceptRequest(t){return await this.simulateLatency(),!0}onRoomSync(t,e){return()=>{}}async clearRoomSync(t,e){await this.simulateLatency()}onNewRoomRequest(t,e){return()=>{}}unsubscribeAllFirebase(){this.callRequestListeners.clear()}async destroy(){this.unsubscribeAllFirebase(),this.messageListeners.clear(),this.typingListeners.clear(),await this.disconnect(),this.state.reset()}async startMockAgent(t,e){let i=e?.name||"AI Assistant",n=new U(g("agent"),i,{responseStrategy:e?.responseStrategy||"echo",responseDelayMs:e?.responseDelayMs||100,cannedResponses:e?.cannedResponses||[],type:e?.type,nature:e?.nature});await n.start(t),this.agents.set(n.id,n),this.customAgentHandler&&n.setCustomHandler((c,p)=>this.customAgentHandler(c,p));let s=e?.type,o=Array.isArray(s)?s:[s].filter(Boolean),a=o.includes("video"),d=o.includes("voice");return(a||d)&&this.room.isConnected&&await this.room.simulateParticipantJoin(n.id,{name:i,kind:"agent",withCamera:a,withMicrophone:d||a,attributes:{"lk.agent.name":i,"lk.agent.state":"active",role:"agent"}}),this.config.autoEmitEvents&&this.events.emitAgentStarted(t,{id:n.id,name:n.name,roomId:t,status:"running",config:n.getConfig(),startedAt:new Date().toISOString(),messageHistory:[]}),n.id}async stopMockAgent(t){let e=this.agents.get(t);if(e){let i=e.roomId;await e.stop(),this.agents.delete(t),this.config.autoEmitEvents&&i&&this.events.emitAgentStopped(i,t)}}setAgentResponseHandler(t){this.customAgentHandler=t;for(let e of this.agents.values())e.setCustomHandler((i,n)=>t(i,n))}async triggerAgentResponse(t,e){if(this.config.scenario!=="agent_timeout")try{let i=await t.processMessage(e);if(!i)return;let n=this.state.addMessage(t.roomId,`agent_${t.id}`,i);if(!A(n)){let s={id:n.id,timestamp:Date.now(),message:i,content:i,createdAt:n.createdAt,from:{identity:`agent_${t.id}`,name:t.name,id:t.id,role:"agent"}};for(let o of this.messageListeners)o([s]);this.config.autoEmitEvents&&this.events.emitMessageReceived(t.roomId,n)}}catch(i){console.error("Agent response error:",i)}}simulateCallRequest(t){let e={id:g("call"),guestId:t.guestId||"guest_user",name:t.name||"Guest User",createdAt:new Date().toISOString(),status:t.status||"pending",...t},i=this.callRequestListeners.get("new");if(i)for(let n of i)n(e.id,e)}simulateParticipantJoin(t,e,i="user"){if(!this.room?.id)return;let n=this.state.addParticipant(this.room.id,t,e,i,"standard",!1);!A(n)&&this.config.autoEmitEvents&&this.events.emitParticipantJoined(this.room.id,n)}simulateParticipantLeave(t){if(!this.room?.id)return;this.state.removeParticipant(t)&&this.config.autoEmitEvents&&this.events.emitParticipantLeft(this.room.id,t)}simulateIncomingMessage(t,e){if(!this.room?.id)return;let i=this.state.addMessage(this.room.id,t,e);if(A(i))return;let n={id:i.id,timestamp:Date.now(),message:e,content:e,createdAt:i.createdAt,from:{identity:t,id:t,role:"user"}};for(let s of this.messageListeners)s([n]);this.config.autoEmitEvents&&this.events.emitMessageReceived(this.room.id,i)}async simulateDisconnect(){if(!this.room?.id)return;let t=this.room.state;this.room.state="disconnected",this.config.autoEmitEvents&&this.events.emitRoomConnectionStateChanged(this.room.id,"disconnected",t),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 x(this),Tt()}seed(t){this.config.seed=t,this.state.updateConfig({seed:t})}setScenario(t){this.config.scenario=t,this.applyScenario(t)}exportState(){return{...this.state.toJSON(),eventHistory:this.events.getHistory()}}getEventHistory(t){return this.events.getHistory(t)}};var y={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 J(){let r=M(y.MODE);if(r==="mock"||r==="real")return r;let t=M(y.USE_MOCK);return t==="true"||t==="1"||ie()?"mock":"real"}function te(){let r={},t=M(y.MOCK_LATENCY);t&&(r.latencyMs=parseInt(t,10));let e=M(y.MOCK_STRICT);(e==="true"||e==="1")&&(r.strictMode=!0);let i=M(y.MOCK_SCENARIO);i&&(r.scenario=i);let n=M(y.MOCK_SEED);return n&&(r.seed=parseInt(n,10)),r}function ee(){let r={},t=M(y.API_URL);t&&(r.apiUrl=t);let e=M(y.AUTH_URL);e&&(r.authUrl=e);let i=M(y.ORG_ID);return i&&(r.organizationId=i),r}function M(r){if(typeof process<"u"&&process.env)return process.env[r];if(typeof import.meta<"u"&&import.meta.env)return import.meta.env[`VITE_${r}`]||import.meta.env[r];if(typeof window<"u"&&window.__ENV__)return window.__ENV__[r]}function ie(){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 B=class r{static create(t){if((t.mode??J())==="mock"){let i={...te(),...t.mockConfig,organizationId:t.organizationId,apiUrl:t.apiUrl};return new w(i)}if(!t.organizationId||!t.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 z(t)}static createFromEnv(t){let e=t?.mode??J(),i=ee();return r.create({...i,...t,mode:e})}static createMock(t){return new w({organizationId:"mock_org",apiUrl:"https://mock-livekit.local",...t})}static createDeterministicMock(t=12345){return new w({organizationId:"mock_org",apiUrl:"https://mock-livekit.local",seed:t,strictMode:!0})}static getCurrentMode(){return J()}static isMockMode(){return J()==="mock"}static isMockService(t){return t instanceof w}};function ei(r){return B.createFromEnv(r)}function ii(r){return B.createMock(r)}export{B as ConversationServiceFactory,ei as createConversationService,ii as createMockConversationService};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @onlive.ai/common-121 v0.2.
|
|
1
|
+
/*! @onlive.ai/common-121 v0.2.230 | © 2026 Onlive.ai */
|
|
2
2
|
"use strict";var s=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var A=Object.prototype.hasOwnProperty;var x=(e,t)=>{for(var n in t)s(e,n,{get:t[n],enumerable:!0})},_=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of h(t))!A.call(e,a)&&a!==n&&s(e,a,{get:()=>t[a],enumerable:!(o=P(t,a))||o.enumerable});return e};var $=e=>_(s({},"__esModule",{value:!0}),e);var U={};x(U,{createAgentFixture:()=>g,createAgentWithCannedResponses:()=>T,createChatScenario:()=>W,createConversationFixture:()=>I,createDefaultConfig:()=>c,createDefaultRoomFixture:()=>d,createDeterministicConfig:()=>L,createLatencyConfig:()=>O,createMessageFixture:()=>D,createParticipantBatch:()=>C,createParticipantFixture:()=>f,createRoomWithAgent:()=>u,createRoomWithAgentAndDataTrack:()=>w,createRoomWithLocalParticipant:()=>p,createRoomWithMediaTracks:()=>R,createRoomWithTwoParticipants:()=>M,createSequentialAgent:()=>b,createStrictConfig:()=>v,createVideoCallScenario:()=>j});module.exports=$(U);var m=0;function i(e){return m++,`mock_${e}_${m}_${Date.now().toString(36)}`}function l(e,t,n){let o=n||new Date().toISOString(),a=typeof btoa=="function"?btoa(o).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""):o.replace(/[^a-zA-Z0-9]/g,"");return`mock_token_${e}_${t}_${a}`}function S(e){return`wss://mock-livekit.local/room/${e}`}function d(e){let t=e?.id??i("room"),n=new Date().toISOString();return{id:t,name:`Test Room ${t}`,groupId:i("group"),createdAt:n,isActive:!0,participantIds:[],connectionState:"connected",wsURL:S(t),token:l(t,"local_user",n),...e}}function p(e="local_user",t){let n=d(t);n.participantIds.push(e);let o={identity:e,name:"Local User",roomId:n.id,joinedAt:new Date().toISOString(),isConnected:!0,trackIds:[],role:"user",attributes:{},kind:"standard",isLocal:!0};return{room:n,localParticipant:o}}function M(e){let t=d(e),n=new Date().toISOString(),o={identity:"user_1",name:"User One",roomId:t.id,joinedAt:n,isConnected:!0,trackIds:[],role:"user",attributes:{},kind:"standard",isLocal:!0},a={identity:"user_2",name:"User Two",roomId:t.id,joinedAt:n,isConnected:!0,trackIds:[],role:"user",attributes:{},kind:"standard",isLocal:!1};return t.participantIds.push(o.identity,a.identity),{room:t,participant1:o,participant2:a}}function u(e,t){let{room:n,localParticipant:o}=p("local_user",t),a=new Date().toISOString(),r=i("agent"),y={id:r,roomId:n.id,name:"AI Assistant",status:"running",startedAt:a,config:{responseStrategy:"echo",nature:"ai",...e},messageHistory:[]},k={identity:`agent_${r}`,name:"AI Assistant",roomId:n.id,joinedAt:a,isConnected:!0,trackIds:[],role:"agent",attributes:{},kind:"agent",isLocal:!1};return n.participantIds.push(k.identity),{room:n,localParticipant:o,agent:y,agentParticipant:k}}function w(e){let{room:t,localParticipant:n,agent:o,agentParticipant:a}=u(void 0,e),r={id:i("track"),kind:"data",source:"unknown",participantIdentity:a.identity,roomId:t.id,publishedAt:new Date().toISOString(),muted:!1};return a.trackIds.push(r.id),{room:t,localParticipant:n,agent:o,dataTrack:r}}function R(e){let{room:t,localParticipant:n}=p("local_user",e),o=new Date().toISOString(),a={id:i("track"),kind:"audio",source:"microphone",participantIdentity:n.identity,roomId:t.id,publishedAt:o,muted:!1},r={id:i("track"),kind:"video",source:"camera",participantIdentity:n.identity,roomId:t.id,publishedAt:o,muted:!1};return n.trackIds.push(a.id,r.id),{room:t,participant:n,audioTrack:a,videoTrack:r}}function f(e,t){let n=t?.identity??i("participant");return{identity:n,name:`Participant ${n}`,roomId:e,joinedAt:new Date().toISOString(),isConnected:!0,trackIds:[],role:"user",attributes:{},kind:"standard",isLocal:!1,...t}}function C(e,t){let n=[];for(let o=0;o<t;o++)n.push(f(e,{identity:`participant_${o+1}`,name:`Participant ${o+1}`,isLocal:o===0}));return n}function g(e,t){return{id:t?.id??i("agent"),roomId:e,name:"AI Assistant",status:"running",startedAt:new Date().toISOString(),config:{responseStrategy:"echo",nature:"ai",...t?.config},messageHistory:[],...t}}function T(e,t){return g(e,{config:{responseStrategy:"canned",cannedResponses:t}})}function b(e,t){return g(e,{config:{responseStrategy:"sequential",cannedResponses:t}})}function D(e,t,n){return{id:i("msg"),roomId:e,content:"Test message",participantIdentity:t,createdAt:new Date().toISOString(),type:"standard",...n}}function I(e,t){return t.map((n,o)=>({id:i("msg"),roomId:e,content:n.content,participantIdentity:n.identity,createdAt:new Date(Date.now()+o*1e3).toISOString(),type:"standard"}))}function c(e){return{latencyMs:0,strictMode:!1,autoEmitEvents:!0,organizationId:"test_org",apiUrl:"https://mock-api.local",...e}}function v(e){return c({strictMode:!0,...e})}function O(e,t){return c({latencyMs:e,...t})}function L(e,t){return c({seed:e,...t})}function W(){let{room:e,localParticipant:t,agent:n,agentParticipant:o}=u(),a=I(e.id,[{identity:t.identity,content:"Hello, I need help"},{identity:o.identity,content:"Hi! How can I assist you today?"},{identity:t.identity,content:"I have a question about my order"},{identity:o.identity,content:"Of course! Please provide your order number."}]);return{room:e,user:t,agent:n,agentParticipant:o,messages:a}}function j(){let{room:e,participant1:t,participant2:n}=M(),o=new Date().toISOString(),a=[{id:i("track"),kind:"audio",source:"microphone",participantIdentity:t.identity,roomId:e.id,publishedAt:o,muted:!1},{id:i("track"),kind:"video",source:"camera",participantIdentity:t.identity,roomId:e.id,publishedAt:o,muted:!1},{id:i("track"),kind:"audio",source:"microphone",participantIdentity:n.identity,roomId:e.id,publishedAt:o,muted:!1},{id:i("track"),kind:"video",source:"camera",participantIdentity:n.identity,roomId:e.id,publishedAt:o,muted:!1}];return t.trackIds.push(a[0].id,a[1].id),n.trackIds.push(a[2].id,a[3].id),{room:e,participant1:t,participant2:n,tracks:a}}0&&(module.exports={createAgentFixture,createAgentWithCannedResponses,createChatScenario,createConversationFixture,createDefaultConfig,createDefaultRoomFixture,createDeterministicConfig,createLatencyConfig,createMessageFixture,createParticipantBatch,createParticipantFixture,createRoomWithAgent,createRoomWithAgentAndDataTrack,createRoomWithLocalParticipant,createRoomWithMediaTracks,createRoomWithTwoParticipants,createSequentialAgent,createStrictConfig,createVideoCallScenario});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @onlive.ai/common-121 v0.2.
|
|
1
|
+
/*! @onlive.ai/common-121 v0.2.230 | © 2026 Onlive.ai */
|
|
2
2
|
import { MockAgentState, MockRoomState, MockParticipantState, MockMessageState, MockServiceConfig, MockAgentConfig, MockTrackState } from './types.cjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @onlive.ai/common-121 v0.2.
|
|
1
|
+
/*! @onlive.ai/common-121 v0.2.230 | © 2026 Onlive.ai */
|
|
2
2
|
import { MockAgentState, MockRoomState, MockParticipantState, MockMessageState, MockServiceConfig, MockAgentConfig, MockTrackState } from './types.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @onlive.ai/common-121 v0.2.
|
|
1
|
+
/*! @onlive.ai/common-121 v0.2.230 | © 2026 Onlive.ai */
|
|
2
2
|
var d=0;function i(e){return d++,`mock_${e}_${d}_${Date.now().toString(36)}`}function p(e,t,n){let o=n||new Date().toISOString(),a=typeof btoa=="function"?btoa(o).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""):o.replace(/[^a-zA-Z0-9]/g,"");return`mock_token_${e}_${t}_${a}`}function u(e){return`wss://mock-livekit.local/room/${e}`}function g(e){let t=e?.id??i("room"),n=new Date().toISOString();return{id:t,name:`Test Room ${t}`,groupId:i("group"),createdAt:n,isActive:!0,participantIds:[],connectionState:"connected",wsURL:u(t),token:p(t,"local_user",n),...e}}function k(e="local_user",t){let n=g(t);n.participantIds.push(e);let o={identity:e,name:"Local User",roomId:n.id,joinedAt:new Date().toISOString(),isConnected:!0,trackIds:[],role:"user",attributes:{},kind:"standard",isLocal:!0};return{room:n,localParticipant:o}}function M(e){let t=g(e),n=new Date().toISOString(),o={identity:"user_1",name:"User One",roomId:t.id,joinedAt:n,isConnected:!0,trackIds:[],role:"user",attributes:{},kind:"standard",isLocal:!0},a={identity:"user_2",name:"User Two",roomId:t.id,joinedAt:n,isConnected:!0,trackIds:[],role:"user",attributes:{},kind:"standard",isLocal:!1};return t.participantIds.push(o.identity,a.identity),{room:t,participant1:o,participant2:a}}function m(e,t){let{room:n,localParticipant:o}=k("local_user",t),a=new Date().toISOString(),r=i("agent"),S={id:r,roomId:n.id,name:"AI Assistant",status:"running",startedAt:a,config:{responseStrategy:"echo",nature:"ai",...e},messageHistory:[]},s={identity:`agent_${r}`,name:"AI Assistant",roomId:n.id,joinedAt:a,isConnected:!0,trackIds:[],role:"agent",attributes:{},kind:"agent",isLocal:!1};return n.participantIds.push(s.identity),{room:n,localParticipant:o,agent:S,agentParticipant:s}}function h(e){let{room:t,localParticipant:n,agent:o,agentParticipant:a}=m(void 0,e),r={id:i("track"),kind:"data",source:"unknown",participantIdentity:a.identity,roomId:t.id,publishedAt:new Date().toISOString(),muted:!1};return a.trackIds.push(r.id),{room:t,localParticipant:n,agent:o,dataTrack:r}}function A(e){let{room:t,localParticipant:n}=k("local_user",e),o=new Date().toISOString(),a={id:i("track"),kind:"audio",source:"microphone",participantIdentity:n.identity,roomId:t.id,publishedAt:o,muted:!1},r={id:i("track"),kind:"video",source:"camera",participantIdentity:n.identity,roomId:t.id,publishedAt:o,muted:!1};return n.trackIds.push(a.id,r.id),{room:t,participant:n,audioTrack:a,videoTrack:r}}function f(e,t){let n=t?.identity??i("participant");return{identity:n,name:`Participant ${n}`,roomId:e,joinedAt:new Date().toISOString(),isConnected:!0,trackIds:[],role:"user",attributes:{},kind:"standard",isLocal:!1,...t}}function x(e,t){let n=[];for(let o=0;o<t;o++)n.push(f(e,{identity:`participant_${o+1}`,name:`Participant ${o+1}`,isLocal:o===0}));return n}function l(e,t){return{id:t?.id??i("agent"),roomId:e,name:"AI Assistant",status:"running",startedAt:new Date().toISOString(),config:{responseStrategy:"echo",nature:"ai",...t?.config},messageHistory:[],...t}}function _(e,t){return l(e,{config:{responseStrategy:"canned",cannedResponses:t}})}function $(e,t){return l(e,{config:{responseStrategy:"sequential",cannedResponses:t}})}function w(e,t,n){return{id:i("msg"),roomId:e,content:"Test message",participantIdentity:t,createdAt:new Date().toISOString(),type:"standard",...n}}function I(e,t){return t.map((n,o)=>({id:i("msg"),roomId:e,content:n.content,participantIdentity:n.identity,createdAt:new Date(Date.now()+o*1e3).toISOString(),type:"standard"}))}function c(e){return{latencyMs:0,strictMode:!1,autoEmitEvents:!0,organizationId:"test_org",apiUrl:"https://mock-api.local",...e}}function R(e){return c({strictMode:!0,...e})}function C(e,t){return c({latencyMs:e,...t})}function T(e,t){return c({seed:e,...t})}function b(){let{room:e,localParticipant:t,agent:n,agentParticipant:o}=m(),a=I(e.id,[{identity:t.identity,content:"Hello, I need help"},{identity:o.identity,content:"Hi! How can I assist you today?"},{identity:t.identity,content:"I have a question about my order"},{identity:o.identity,content:"Of course! Please provide your order number."}]);return{room:e,user:t,agent:n,agentParticipant:o,messages:a}}function D(){let{room:e,participant1:t,participant2:n}=M(),o=new Date().toISOString(),a=[{id:i("track"),kind:"audio",source:"microphone",participantIdentity:t.identity,roomId:e.id,publishedAt:o,muted:!1},{id:i("track"),kind:"video",source:"camera",participantIdentity:t.identity,roomId:e.id,publishedAt:o,muted:!1},{id:i("track"),kind:"audio",source:"microphone",participantIdentity:n.identity,roomId:e.id,publishedAt:o,muted:!1},{id:i("track"),kind:"video",source:"camera",participantIdentity:n.identity,roomId:e.id,publishedAt:o,muted:!1}];return t.trackIds.push(a[0].id,a[1].id),n.trackIds.push(a[2].id,a[3].id),{room:e,participant1:t,participant2:n,tracks:a}}export{l as createAgentFixture,_ as createAgentWithCannedResponses,b as createChatScenario,I as createConversationFixture,c as createDefaultConfig,g as createDefaultRoomFixture,T as createDeterministicConfig,C as createLatencyConfig,w as createMessageFixture,x as createParticipantBatch,f as createParticipantFixture,m as createRoomWithAgent,h as createRoomWithAgentAndDataTrack,k as createRoomWithLocalParticipant,A as createRoomWithMediaTracks,M as createRoomWithTwoParticipants,$ as createSequentialAgent,R as createStrictConfig,D as createVideoCallScenario};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @onlive.ai/common-121 v0.2.
|
|
1
|
+
/*! @onlive.ai/common-121 v0.2.230 | © 2026 Onlive.ai */
|
|
2
2
|
"use strict";var s=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var l=(t,n)=>{for(var e in n)s(t,e,{get:n[e],enumerable:!0})},m=(t,n,e,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let i of p(n))!d.call(t,i)&&i!==e&&s(t,i,{get:()=>n[i],enumerable:!(o=u(n,i))||o.enumerable});return t};var _=t=>m(s({},"__esModule",{value:!0}),t);var C={};l(C,{decodeMockToken:()=>x,generateMockApiResponseId:()=>y,generateMockExternalId:()=>D,generateMockId:()=>c,generateMockIdBatch:()=>T,generateMockMessageId:()=>w,generateMockParticipantIdentity:()=>h,generateMockRoomName:()=>I,generateMockToken:()=>M,generateMockTrackSid:()=>b,generateMockWsUrl:()=>S,generateSeededMockId:()=>f,resetIdCounter:()=>$,setIdCounter:()=>k});module.exports=_(C);var r=0;function $(){r=0}function k(t){r=t}function c(t){return r++,`mock_${t}_${r}_${Date.now().toString(36)}`}function f(t,n){return`mock_${t}_${n.toString(36)}`}function M(t,n,e){let o=e||new Date().toISOString(),i=typeof btoa=="function"?btoa(o).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""):o.replace(/[^a-zA-Z0-9]/g,"");return`mock_token_${t}_${n}_${i}`}function x(t){if(!t.startsWith("mock_token_"))return null;let n=t.replace("mock_token_","").split("_");if(n.length<3)return null;let e=n[n.length-1],o=n[n.length-2],i=n.slice(0,-2).join("_");try{let g=e.replace(/-/g,"+").replace(/_/g,"/"),a=typeof atob=="function"?atob(g):e;return{roomId:i,identity:o,timestamp:a}}catch{return null}}function S(t){return`wss://mock-livekit.local/room/${t}`}function h(t="participant",n){let e=n??r++;return`${t}_${e}_${Date.now().toString(36)}`}function I(t="room"){return r++,`${t}_${r}_${Date.now().toString(36)}`}function b(t,n){return r++,`TR_${t.toUpperCase()}_${n}_${r}`}function w(){return r++,`msg_${r}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`}function y(t){return r++,`api_${t}_${r}_${Date.now().toString(36)}`}function D(){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 T(t,n){let e=[];for(let o=0;o<n;o++)e.push(c(t));return e}0&&(module.exports={decodeMockToken,generateMockApiResponseId,generateMockExternalId,generateMockId,generateMockIdBatch,generateMockMessageId,generateMockParticipantIdentity,generateMockRoomName,generateMockToken,generateMockTrackSid,generateMockWsUrl,generateSeededMockId,resetIdCounter,setIdCounter});
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @onlive.ai/common-121 v0.2.
|
|
1
|
+
/*! @onlive.ai/common-121 v0.2.230 | © 2026 Onlive.ai */
|
|
2
2
|
var e=0;function a(){e=0}function u(t){e=t}function g(t){return e++,`mock_${t}_${e}_${Date.now().toString(36)}`}function p(t,n){return`mock_${t}_${n.toString(36)}`}function d(t,n,r){let o=r||new Date().toISOString(),i=typeof btoa=="function"?btoa(o).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""):o.replace(/[^a-zA-Z0-9]/g,"");return`mock_token_${t}_${n}_${i}`}function l(t){if(!t.startsWith("mock_token_"))return null;let n=t.replace("mock_token_","").split("_");if(n.length<3)return null;let r=n[n.length-1],o=n[n.length-2],i=n.slice(0,-2).join("_");try{let s=r.replace(/-/g,"+").replace(/_/g,"/"),c=typeof atob=="function"?atob(s):r;return{roomId:i,identity:o,timestamp:c}}catch{return null}}function m(t){return`wss://mock-livekit.local/room/${t}`}function _(t="participant",n){let r=n??e++;return`${t}_${r}_${Date.now().toString(36)}`}function $(t="room"){return e++,`${t}_${e}_${Date.now().toString(36)}`}function k(t,n){return e++,`TR_${t.toUpperCase()}_${n}_${e}`}function f(){return e++,`msg_${e}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`}function M(t){return e++,`api_${t}_${e}_${Date.now().toString(36)}`}function x(){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 S(t,n){let r=[];for(let o=0;o<n;o++)r.push(g(t));return r}export{l as decodeMockToken,M as generateMockApiResponseId,x as generateMockExternalId,g as generateMockId,S as generateMockIdBatch,f as generateMockMessageId,_ as generateMockParticipantIdentity,$ as generateMockRoomName,d as generateMockToken,k as generateMockTrackSid,m as generateMockWsUrl,p as generateSeededMockId,a as resetIdCounter,u as setIdCounter};
|