@d-id/client-sdk 1.1.11 → 1.1.12-staging.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/index.js +546 -670
  2. package/dist/index.umd.cjs +1 -1
  3. package/dist/src/api/agents.d.ts +1 -0
  4. package/dist/src/api/apiClient.d.ts +4 -3
  5. package/dist/src/api/knowledge.d.ts +1 -0
  6. package/dist/src/api/streams/streamApi.d.ts +1 -0
  7. package/dist/src/api/streams/streamsApiV2.d.ts +5 -0
  8. package/dist/src/auth/get-auth-header.d.ts +1 -0
  9. package/dist/src/errors/chat/chat-creation-failed.d.ts +1 -0
  10. package/dist/src/errors/chat/chat-mode-downgraded.d.ts +1 -0
  11. package/dist/src/errors/validation-error.d.ts +1 -0
  12. package/dist/src/errors/ws-error.d.ts +1 -0
  13. package/dist/src/services/agent-manager/connect-to-manager.d.ts +1 -0
  14. package/dist/src/services/agent-manager/connect-to-manager.test.d.ts +1 -0
  15. package/dist/src/services/agent-manager/index.d.ts +1 -0
  16. package/dist/src/services/agent-manager/index.test.d.ts +1 -0
  17. package/dist/src/services/analytics/mixpanel.d.ts +1 -0
  18. package/dist/src/services/chat/index.d.ts +2 -2
  19. package/dist/src/services/chat/intial-messages.d.ts +1 -0
  20. package/dist/src/services/interrupt/index.d.ts +1 -0
  21. package/dist/src/services/socket-manager/index.d.ts +1 -0
  22. package/dist/src/services/socket-manager/message-queue.d.ts +1 -0
  23. package/dist/src/services/streaming-manager/advanced.test.d.ts +5 -0
  24. package/dist/src/services/streaming-manager/business-flows.test.d.ts +5 -0
  25. package/dist/src/services/streaming-manager/common.d.ts +43 -0
  26. package/dist/src/services/streaming-manager/disconnect.test.d.ts +5 -0
  27. package/dist/src/services/streaming-manager/edge-cases.test.d.ts +5 -0
  28. package/dist/src/services/streaming-manager/factory.d.ts +3 -0
  29. package/dist/src/services/streaming-manager/factory.test.d.ts +1 -0
  30. package/dist/src/services/streaming-manager/index.d.ts +3 -27
  31. package/dist/src/services/streaming-manager/livekit-manager.d.ts +5 -0
  32. package/dist/src/services/streaming-manager/stats/poll.d.ts +1 -1
  33. package/dist/src/services/streaming-manager/stats/report.d.ts +1 -0
  34. package/dist/src/services/streaming-manager/webrtc-core.test.d.ts +5 -0
  35. package/dist/src/services/streaming-manager/webrtc-manager.d.ts +12 -0
  36. package/dist/src/services/streaming-manager/webrtc-utils.test.d.ts +5 -0
  37. package/dist/src/test-utils/factories/agent-manager.factory.d.ts +3 -0
  38. package/dist/src/test-utils/factories/agent.factory.d.ts +4 -0
  39. package/dist/src/test-utils/factories/agents-api.factory.d.ts +1 -0
  40. package/dist/src/test-utils/factories/analytics.factory.d.ts +1 -0
  41. package/dist/src/test-utils/factories/chat.factory.d.ts +1 -0
  42. package/dist/src/test-utils/factories/index.d.ts +8 -0
  43. package/dist/src/test-utils/factories/socket-manager.factory.d.ts +1 -0
  44. package/dist/src/test-utils/factories/stream-api.factory.d.ts +1 -0
  45. package/dist/src/test-utils/factories/streaming-manager.factory.d.ts +4 -0
  46. package/dist/src/types/entities/agents/agent.d.ts +1 -0
  47. package/dist/src/types/entities/agents/manager.d.ts +7 -1
  48. package/dist/src/types/entities/agents/presenter.d.ts +6 -2
  49. package/dist/src/types/entities/knowledge/document.d.ts +1 -0
  50. package/dist/src/types/entities/knowledge/record.d.ts +1 -0
  51. package/dist/src/types/entities/video.d.ts +2 -1
  52. package/dist/src/types/stream/api/clip.d.ts +1 -0
  53. package/dist/src/types/stream/api/talk.d.ts +1 -0
  54. package/dist/src/types/stream/index.d.ts +1 -0
  55. package/dist/src/types/stream/rtc.d.ts +1 -0
  56. package/dist/src/types/stream/stream.d.ts +1 -0
  57. package/dist/src/types/stream/streams-v2.d.ts +12 -0
  58. package/dist/src/types/stream-script.d.ts +1 -0
  59. package/dist/src/utils/agent.d.ts +2 -1
  60. package/dist/src/utils/analytics.d.ts +3 -2
  61. package/dist/src/utils/chat.d.ts +1 -0
  62. package/package.json +21 -2
@@ -1 +1 @@
1
- (function(h,T){typeof exports=="object"&&typeof module<"u"?T(exports):typeof define=="function"&&define.amd?define(["exports"],T):(h=typeof globalThis<"u"?globalThis:h||self,T(h.index={}))})(this,function(h){"use strict";var It=Object.defineProperty;var Mt=(h,T,x)=>T in h?It(h,T,{enumerable:!0,configurable:!0,writable:!0,value:x}):h[T]=x;var te=(h,T,x)=>(Mt(h,typeof T!="symbol"?T+"":T,x),x);class T extends Error{constructor({kind:n,description:r,error:s}){super(JSON.stringify({kind:n,description:r}));te(this,"kind");te(this,"description");te(this,"error");this.kind=n,this.description=r,this.error=s}}class x extends T{constructor(t,n){super({kind:"ChatCreationFailed",description:`Failed to create ${n?"persistent":""} chat, mode: ${t}`})}}class se extends T{constructor(t){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${t}`})}}class V extends T{constructor(n,r){super({kind:"ValidationError",description:n});te(this,"key");this.key=r}}class oe extends T{constructor(t){super({kind:"WSError",description:t})}}var ce=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(ce||{}),de=(e=>(e.TRIAL="deid-trial",e.PRO="deid-pro",e.ENTERPRISE="deid-enterprise",e.LITE="deid-lite",e.ADVANCED="deid-advanced",e.BUILD="deid-api-build",e.LAUNCH="deid-api-launch",e.SCALE="deid-api-scale",e))(de||{}),le=(e=>(e.Created="created",e.Started="started",e.Done="done",e.Error="error",e.Rejected="rejected",e.Ready="ready",e))(le||{}),ue=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(ue||{}),E=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e.DirectPlayback="DirectPlayback",e.Off="Off",e))(E||{}),q=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(q||{}),fe=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(fe||{}),me=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(me||{}),ge=(e=>(e.Pdf="pdf",e.Text="text",e.Html="html",e.Word="word",e.Json="json",e.Markdown="markdown",e.Csv="csv",e.Excel="excel",e.Powerpoint="powerpoint",e.Archive="archive",e.Image="image",e.Audio="audio",e.Video="video",e))(ge||{}),he=(e=>(e.Clip="clip",e.Talk="talk",e))(he||{});const Pe=e=>{switch(e){case"clip":return"clip";case"talk":return"talk";default:throw new Error(`Unknown video type: ${e}`)}};var w=(e=>(e.Start="START",e.Stop="STOP",e))(w||{}),Q=(e=>(e.Strong="STRONG",e.Weak="WEAK",e.Unknown="UNKNOWN",e))(Q||{}),O=(e=>(e.Idle="IDLE",e.Talking="TALKING",e))(O||{}),j=(e=>(e.ChatAnswer="chat/answer",e.ChatPartial="chat/partial",e.StreamDone="stream/done",e.StreamStarted="stream/started",e.StreamFailed="stream/error",e.StreamReady="stream/ready",e.StreamCreated="stream/created",e.StreamInterrupt="stream/interrupt",e.StreamVideoCreated="stream-video/started",e.StreamVideoDone="stream-video/done",e.StreamVideoError="stream-video/error",e.StreamVideoRejected="stream-video/rejected",e))(j||{}),D=(e=>(e.New="new",e.Fail="fail",e.Connected="connected",e.Connecting="connecting",e.Closed="closed",e.Completed="completed",e.Disconnected="disconnected",e))(D||{}),U=(e=>(e.Legacy="legacy",e.Fluent="fluent",e))(U||{}),we=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(we||{}),pe=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(pe||{});const be=45*1e3,Be="X-Playground-Chat",Z="https://api.d-id.com",Le="wss://notifications.d-id.com",$e="79f81a83a67430be2bc0fd61042b8faa",ye=e=>new Promise(t=>setTimeout(t,e)),G=(e=16)=>{const t=new Uint8Array(e);return window.crypto.getRandomValues(t),Array.from(t,n=>n.toString(16).padStart(2,"0")).join("").slice(0,13)},ze=e=>[E.TextOnly,E.Playground,E.Maintenance].includes(e),ve=e=>e&&[E.DirectPlayback,E.Off].includes(e);function Fe(e,t){let n;return{promise:new Promise((s,o)=>{n=setTimeout(()=>o(new Error(t)),e)}),clear:()=>clearTimeout(n)}}async function re(e,t){const n={limit:(t==null?void 0:t.limit)??3,delayMs:(t==null?void 0:t.delayMs)??0,timeout:(t==null?void 0:t.timeout)??3e4,timeoutErrorMessage:(t==null?void 0:t.timeoutErrorMessage)||"Timeout error",shouldRetryFn:(t==null?void 0:t.shouldRetryFn)??(()=>!0),onRetry:(t==null?void 0:t.onRetry)??(()=>{})};let r;for(let s=1;s<=n.limit;s++)try{if(!n.timeout)return await e();const{promise:o,clear:c}=Fe(n.timeout,n.timeoutErrorMessage),a=e().finally(c);return await Promise.race([a,o])}catch(o){if(r=o,!n.shouldRetryFn(o)||s>=n.limit)throw o;await ye(n.delayMs),n.onRetry(o)}throw r}function ke(){let e=window.localStorage.getItem("did_external_key_id");if(!e){let t=G();window.localStorage.setItem("did_external_key_id",t),e=t}return e}let Ne=G();function Ce(e){if(e.type==="bearer")return`Bearer ${e.token}`;if(e.type==="basic")return`Basic ${btoa(`${e.username}:${e.password}`)}`;if(e.type==="key")return`Client-Key ${e.clientKey}.${ke()}_${Ne}`;throw new Error(`Unknown auth type: ${e}`)}const Je=e=>re(e,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:t=>t.status===429});function De(e,t=Z,n){const r=async(s,o)=>{const{skipErrorHandler:c,...a}=o||{},i=await Je(()=>fetch(t+(s!=null&&s.startsWith("/")?s:`/${s}`),{...a,headers:{...a.headers,Authorization:Ce(e),"Content-Type":"application/json"}}));if(!i.ok){let d=await i.text().catch(()=>`Failed to fetch with status ${i.status}`);const l=new Error(d);throw n&&!c&&n(l,{url:s,options:a,headers:i.headers}),l}return i.json()};return{get(s,o){return r(s,{...o,method:"GET"})},post(s,o,c){return r(s,{...c,body:JSON.stringify(o),method:"POST"})},delete(s,o,c){return r(s,{...c,body:JSON.stringify(o),method:"DELETE"})},patch(s,o,c){return r(s,{...c,body:JSON.stringify(o),method:"PATCH"})}}}function Se(e,t=Z,n){const r=De(e,`${t}/agents`,n);return{create(s,o){return r.post("/",s,o)},getAgents(s,o){return r.get(`/${s?`?tag=${s}`:""}`,o).then(c=>c??[])},getById(s,o){return r.get(`/${s}`,o)},delete(s,o){return r.delete(`/${s}`,void 0,o)},update(s,o,c){return r.patch(`/${s}`,o,c)},newChat(s,o,c){return r.post(`/${s}/chat`,o,c)},chat(s,o,c,a){return r.post(`/${s}/chat/${o}`,c,a)},createRating(s,o,c,a){return r.post(`/${s}/chat/${o}/ratings`,c,a)},updateRating(s,o,c,a,i){return r.patch(`/${s}/chat/${o}/ratings/${c}`,a,i)},deleteRating(s,o,c,a){return r.delete(`/${s}/chat/${o}/ratings/${c}`,a)},getSTTToken(s,o){return r.get(`/${s}/stt-token`,o)}}}const Re=e=>e.type==="clip"&&e.presenter_id.startsWith("v2_")?"clip_v2":e.type;function We(e){var s,o,c,a;const t=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",n=()=>{const i=navigator.platform;return i.toLowerCase().includes("win")?"Windows":i.toLowerCase().includes("mac")?"Mac OS X":i.toLowerCase().includes("linux")?"Linux":"Unknown"},r=e.presenter;return{$os:`${n()}`,isMobile:`${t()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:Re(r),agentVoice:{voiceId:(o=(s=e.presenter)==null?void 0:s.voice)==null?void 0:o.voice_id,provider:(a=(c=e.presenter)==null?void 0:c.voice)==null?void 0:a.type}}}function Ue(e){var n,r,s,o,c,a;const t=(n=e.llm)==null?void 0:n.prompt_customization;return{agentType:Re(e.presenter),owner_id:e.owner_id??"",promptVersion:(r=e.llm)==null?void 0:r.prompt_version,behavior:{role:t==null?void 0:t.role,personality:t==null?void 0:t.personality,instructions:(s=e.llm)==null?void 0:s.instructions},temperature:(o=e.llm)==null?void 0:o.temperature,knowledgeSource:t==null?void 0:t.knowledge_source,starterQuestionsCount:(a=(c=e.knowledge)==null?void 0:c.starter_message)==null?void 0:a.length,topicsToAvoid:t==null?void 0:t.topics_to_avoid,maxResponseLength:t==null?void 0:t.max_response_length,agentId:e.id,access:e.access,name:e.preview_name,...e.access==="public"?{from:"agent-template"}:{}}}const Ke=e=>e.reduce((t,n)=>t+n,0),Ee=e=>Ke(e)/e.length;function He(e,t,n){var i,d,l;const{event:r,...s}=e,{template:o}=(t==null?void 0:t.llm)||{},{language:c}=((i=t==null?void 0:t.presenter)==null?void 0:i.voice)||{};return{...s,llm:{...s.llm,template:o},script:{...s.script,provider:{...(d=s==null?void 0:s.script)==null?void 0:d.provider,language:c}},stitch:(t==null?void 0:t.presenter.type)==="talk"?(l=t==null?void 0:t.presenter)==null?void 0:l.stitch:void 0,...n}}let ne={};const xe="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function Ve(e){const t=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk";return{token:e.token||"testKey",distinct_id:e.distinctId||ke(),agentId:e.agentId,additionalProperties:{},isEnabled:e.isEnabled??!0,getRandom:G,enrich(n){this.additionalProperties={...this.additionalProperties,...n}},async track(n,r){if(!this.isEnabled)return Promise.resolve();const{audioPath:s,...o}=r||{},c={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:n,properties:{...this.additionalProperties,...o,agentId:this.agentId,source:t,token:this.token,time:Date.now(),$insert_id:this.getRandom(),origin:window.location.href,"Screen Height":window.screen.height||window.innerWidth,"Screen Width":window.screen.width||window.innerHeight,"User Agent":navigator.userAgent}}])})};try{return await fetch(xe,c).then(a=>a.json())}catch(a){return console.error(a)}},linkTrack(n,r,s,o){ne[n]||(ne[n]={events:{},resolvedDependencies:[]}),o.includes(s)||o.push(s);const c=ne[n];if(c.events[s]={props:r},c.resolvedDependencies.push(s),o.every(i=>c.resolvedDependencies.includes(i))){const i=o.reduce((d,l)=>c.events[l]?{...d,...c.events[l].props}:d,{});this.track(n,i),c.resolvedDependencies=c.resolvedDependencies.filter(d=>!o.includes(d)),o.forEach(d=>{delete c.events[d]})}}}}function Ie(){let e=0;return{reset:()=>e=0,update:()=>e=Date.now(),get:(t=!1)=>t?Date.now()-e:e}}const z=Ie(),ae=Ie();function Me(e){return e===E.Playground?{headers:{[Be]:"true"}}:{}}async function Te(e,t,n,r,s=!1,o){try{return!o&&!ve(r)&&(o=await t.newChat(e.id,{persist:s},Me(r)),n.track("agent-chat",{event:"created",chatId:o.id,mode:r})),{chat:o,chatMode:(o==null?void 0:o.chat_mode)??r}}catch(c){try{const a=JSON.parse(c.message);if((a==null?void 0:a.kind)==="InsufficientCreditsError")throw new Error("InsufficientCreditsError")}catch(a){console.error("Error parsing the error message:",a)}throw new Error("Cannot create new chat")}}function qe(e){return e&&e.length>0?e:[]}function Oe(e,t,n){if(!e)throw new Error("Please connect to the agent first");if(!e.interruptAvailable)throw new Error("Interrupt is not enabled for this stream");if(t!==U.Fluent)throw new Error("Interrupt only available for Fluent streams");if(!n)throw new Error("No active video to interrupt")}async function Xe(e,t){const n={type:j.StreamInterrupt,videoId:t,timestamp:Date.now()};e.sendDataChannelMessage(JSON.stringify(n))}function Ye(e){return new Promise((t,n)=>{const{callbacks:r,host:s,auth:o}=e,{onMessage:c=null,onOpen:a=null,onClose:i=null,onError:d=null}=r||{},l=new WebSocket(`${s}?authorization=${Ce(o)}`);l.onmessage=c,l.onclose=i,l.onerror=v=>{console.error(v),d==null||d("Websocket failed to connect",v),n(v)},l.onopen=v=>{a==null||a(v),t(l)}})}async function Qe(e){const{retries:t=1}=e;let n=null;for(let r=0;(n==null?void 0:n.readyState)!==WebSocket.OPEN;r++)try{n=await Ye(e)}catch(s){if(r===t)throw s;await ye(r*500)}return n}async function Ge(e,t,n){const r=n!=null&&n.onMessage?[n.onMessage]:[],s=await Qe({auth:e,host:t,callbacks:{onError:o=>{var c;return(c=n.onError)==null?void 0:c.call(n,new oe(o))},onMessage(o){const c=JSON.parse(o.data);r.forEach(a=>a(c.event,c))}}});return{socket:s,disconnect:()=>s.close(),subscribeToEvents:o=>r.push(o)}}function Ze(e){if(e.answer!==void 0)return e.answer;let t=0,n="";for(;t in e;)n+=e[t++];return n}function et(e,t,n,r,s){const o=r.messages[r.messages.length-1];if(!(e===q.Partial||e===q.Answer)||(o==null?void 0:o.role)!=="assistant")return;const{content:c,sequence:a}=t;e===q.Partial?n[a]=c:n.answer=c;const i=Ze(n);(o.content!==i||e===q.Answer)&&(o.content=i,s==null||s([...r.messages],e))}function tt(e,t,n,r,s){let o={};return{clearQueue:()=>o={},onMessage:(c,a)=>{var i,d;if("content"in a)et(c,a,o,t,n.callbacks.onNewMessage),c===q.Answer&&e.track("agent-message-received",{messages:t.messages.length,mode:t.chatMode});else{const l=j,v=[l.StreamVideoDone,l.StreamVideoError,l.StreamVideoRejected],A=[l.StreamFailed,l.StreamVideoError,l.StreamVideoRejected],P=He(a,r,{mode:t.chatMode});if(c=c,c===l.StreamVideoCreated)e.linkTrack("agent-video",P,l.StreamVideoCreated,["start"]);else if(v.includes(c)){const b=c.split("/")[1];A.includes(c)?e.track("agent-video",{...P,event:b}):e.linkTrack("agent-video",{...P,event:b},c,["done"])}A.includes(c)&&((d=(i=n.callbacks).onError)==null||d.call(i,new Error(`Stream failed with event ${c}`),{data:a})),a.event===l.StreamDone&&s()}}}}function rt(e,t,n,r){const s=De(e,`${t}/agents/${n}`,r);return{createStream(o){return s.post("/streams",o)},startConnection(o,c,a){return s.post(`/streams/${o}/sdp`,{session_id:a,answer:c})},addIceCandidate(o,c,a){return s.post(`/streams/${o}/ice`,{session_id:a,...c})},sendStreamRequest(o,c,a){return s.post(`/streams/${o}`,{session_id:c,...a})},close(o,c){return s.delete(`/streams/${o}`,{session_id:c})}}}function nt(e,t,n){const r=(t.timestamp-e.timestamp)/1e3;return{duration:r,bytesReceived:t.bytesReceived-e.bytesReceived,bitrate:Math.round((t.bytesReceived-e.bytesReceived)*8/r),packetsReceived:t.packetsReceived-e.packetsReceived,packetsLost:t.packetsLost-e.packetsLost,framesDropped:t.framesDropped-e.framesDropped,framesDecoded:t.framesDecoded-e.framesDecoded,jitter:t.jitter,avgJitterDelayInInterval:(t.jitterBufferDelay-e.jitterBufferDelay)/(t.jitterBufferEmittedCount-e.jitterBufferEmittedCount),jitterBufferEmittedCount:t.jitterBufferEmittedCount-e.jitterBufferEmittedCount,jitterBufferDelay:(t.jitterBufferDelay-e.jitterBufferDelay)/r,framesPerSecond:t.framesPerSecond,freezeCount:t.freezeCount-e.freezeCount,freezeDuration:t.freezeDuration-e.freezeDuration,lowFpsCount:n}}function at(e){return e.filter(t=>t.freezeCount>0||t.framesPerSecond<21||t.framesDropped>0||t.packetsLost>0).map(t=>{const{timestamp:n,...r}=t,s=[];return t.freezeCount>0&&s.push("freeze"),t.framesPerSecond<21&&s.push("low fps"),t.framesDropped>0&&s.push("frames dropped"),t.packetsLost>0&&s.push("packet loss"),{...r,causes:s}})}function it(e){let t="",n=0;for(const r of e.values())if(r&&r.type==="codec"&&r.mimeType.startsWith("video")&&(t=r.mimeType.split("/")[1]),r&&r.type==="candidate-pair"&&(n=r.currentRoundTripTime),r&&r.type==="inbound-rtp"&&r.kind==="video")return{codec:t,rtt:n,timestamp:r.timestamp,bytesReceived:r.bytesReceived,packetsReceived:r.packetsReceived,packetsLost:r.packetsLost,framesDropped:r.framesDropped,framesDecoded:r.framesDecoded,jitter:r.jitter,jitterBufferDelay:r.jitterBufferDelay,jitterBufferEmittedCount:r.jitterBufferEmittedCount,avgJitterDelayInInterval:r.jitterBufferDelay/r.jitterBufferEmittedCount,frameWidth:r.frameWidth,frameHeight:r.frameHeight,framesPerSecond:r.framesPerSecond,freezeCount:r.freezeCount,freezeDuration:r.totalFreezesDuration};return{}}function st(e,t,n){const r=e.map((i,d)=>d===0?n?{timestamp:i.timestamp,duration:0,rtt:i.rtt,bytesReceived:i.bytesReceived-n.bytesReceived,bitrate:(i.bytesReceived-n.bytesReceived)*8/(t/1e3),packetsReceived:i.packetsReceived-n.packetsReceived,packetsLost:i.packetsLost-n.packetsLost,framesDropped:i.framesDropped-n.framesDropped,framesDecoded:i.framesDecoded-n.framesDecoded,jitter:i.jitter,jitterBufferDelay:i.jitterBufferDelay-n.jitterBufferDelay,jitterBufferEmittedCount:i.jitterBufferEmittedCount-n.jitterBufferEmittedCount,avgJitterDelayInInterval:(i.jitterBufferDelay-n.jitterBufferDelay)/(i.jitterBufferEmittedCount-n.jitterBufferEmittedCount),framesPerSecond:i.framesPerSecond,freezeCount:i.freezeCount-n.freezeCount,freezeDuration:i.freezeDuration-n.freezeDuration}:{timestamp:i.timestamp,rtt:i.rtt,duration:0,bytesReceived:i.bytesReceived,bitrate:i.bytesReceived*8/(t/1e3),packetsReceived:i.packetsReceived,packetsLost:i.packetsLost,framesDropped:i.framesDropped,framesDecoded:i.framesDecoded,jitter:i.jitter,jitterBufferDelay:i.jitterBufferDelay,jitterBufferEmittedCount:i.jitterBufferEmittedCount,avgJitterDelayInInterval:i.jitterBufferDelay/i.jitterBufferEmittedCount,framesPerSecond:i.framesPerSecond,freezeCount:i.freezeCount,freezeDuration:i.freezeDuration}:{timestamp:i.timestamp,duration:t*d/1e3,rtt:i.rtt,bytesReceived:i.bytesReceived-e[d-1].bytesReceived,bitrate:(i.bytesReceived-e[d-1].bytesReceived)*8/(t/1e3),packetsReceived:i.packetsReceived-e[d-1].packetsReceived,packetsLost:i.packetsLost-e[d-1].packetsLost,framesDropped:i.framesDropped-e[d-1].framesDropped,framesDecoded:i.framesDecoded-e[d-1].framesDecoded,jitter:i.jitter,jitterBufferDelay:i.jitterBufferDelay-e[d-1].jitterBufferDelay,jitterBufferEmittedCount:i.jitterBufferEmittedCount-e[d-1].jitterBufferEmittedCount,avgJitterDelayInInterval:(i.jitterBufferDelay-e[d-1].jitterBufferDelay)/(i.jitterBufferEmittedCount-e[d-1].jitterBufferEmittedCount),framesPerSecond:i.framesPerSecond,freezeCount:i.freezeCount-e[d-1].freezeCount,freezeDuration:i.freezeDuration-e[d-1].freezeDuration}),s=at(r),o=s.reduce((i,d)=>i+(d.causes.includes("low fps")?1:0),0),c=r.filter(i=>!!i.avgJitterDelayInInterval).map(i=>i.avgJitterDelayInInterval),a=r.filter(i=>!!i.rtt).map(i=>i.rtt);return{webRTCStats:{anomalies:s,minRtt:Math.min(...a),avgRtt:Ee(a),maxRtt:Math.max(...a),aggregateReport:nt(e[0],e[e.length-1],o),minJitterDelayInInterval:Math.min(...c),maxJitterDelayInInterval:Math.max(...c),avgJitterDelayInInterval:Ee(c)},codec:e[0].codec,resolution:`${e[0].frameWidth}x${e[0].frameHeight}`}}const ie=100,ot=Math.max(Math.ceil(400/ie),1),ct=.25,dt=.28;function lt(){let e=0,t,n,r=0;return s=>{for(const o of s.values())if(o&&o.type==="inbound-rtp"&&o.kind==="video"){const c=o.jitterBufferDelay,a=o.jitterBufferEmittedCount;if(n&&a>n){const l=c-t,v=a-n;r=l/v}t=c,n=a;const i=o.framesDecoded,d=i-e>0;return e=i,{isReceiving:d,avgJitterDelayInInterval:r,freezeCount:o.freezeCount}}return{isReceiving:!1,avgJitterDelayInInterval:r}}}function ut(e,t,n,r,s,o=!1){let c=[],a,i=0,d=!1,l=Q.Unknown,v=Q.Unknown,A=0,P=0;const b=lt();return setInterval(async()=>{const K=await e.getStats(),{isReceiving:I,avgJitterDelayInInterval:X,freezeCount:Y}=b(K),B=it(K);if(I)i=0,A=Y-P,v=X<ct?Q.Strong:X>dt&&A>1?Q.Weak:l,v!==l&&(s==null||s(v),l=v,P+=A,A=0),d||(r==null||r(w.Start),a=c[c.length-1],c=[],d=!0),c.push(B);else if(d&&(i++,i>=ot)){const u=st(c,ie,a);r==null||r(w.Stop,u),t()||n(),P=Y,d=!1}},ie)}let _e=!1;const $=(e,t)=>_e&&console.log(e,t),ft=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function je(e){switch(e){case"connected":return D.Connected;case"checking":return D.Connecting;case"failed":return D.Fail;case"new":return D.New;case"closed":return D.Closed;case"disconnected":return D.Disconnected;case"completed":return D.Completed;default:return D.New}}function mt(e){const[t,n=""]=e.split(/:(.+)/);try{const r=JSON.parse(n);return $("parsed data channel message",{subject:t,data:r}),{subject:t,data:r}}catch(r){return $("Failed to parse data channel message, returning data as string",{subject:t,rawData:n,error:r}),{subject:t,data:n}}}function gt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:n,report:r}){e===w.Start&&t===w.Start?n==null||n(w.Start):e===w.Stop&&t===w.Stop&&(n==null||n(w.Stop,r))}function ht({statsSignal:e,dataChannelSignal:t,onVideoStateChange:n,onAgentActivityStateChange:r,report:s}){e===w.Start?n==null||n(w.Start):e===w.Stop&&(n==null||n(w.Stop,s)),t===w.Start?r==null||r(O.Talking):t===w.Stop&&(r==null||r(O.Idle))}function Ae({statsSignal:e,dataChannelSignal:t,onVideoStateChange:n,onAgentActivityStateChange:r,streamType:s,report:o}){s===U.Legacy?gt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:n,report:o}):s===U.Fluent&&ht({statsSignal:e,dataChannelSignal:t,onVideoStateChange:n,onAgentActivityStateChange:r,report:o})}async function wt(e,t,{debug:n=!1,callbacks:r,auth:s,baseURL:o=Z,analytics:c}){var H;_e=n;let a=!1,i=!1,d=w.Stop,l=w.Stop;const{startConnection:v,sendStreamRequest:A,close:P,createStream:b,addIceCandidate:K}=rt(s,o,e,r.onError),{id:I,offer:X,ice_servers:Y,session_id:B,fluent:u,interrupt_enabled:k}=await b(t);(H=r.onStreamCreated)==null||H.call(r,{stream_id:I,session_id:B,agent_id:e});const m=new ft({iceServers:Y}),S=m.createDataChannel("JanusDataChannel");if(!B)throw new Error("Could not create session_id");const p=u?U.Fluent:U.Legacy;c.enrich({"stream-type":p});const y=t.stream_warmup&&!u,L=()=>a,F=()=>{var f;a=!0,i&&((f=r.onConnectionStateChange)==null||f.call(r,D.Connected))},N=ut(m,L,F,(f,g)=>Ae({statsSignal:l=f,dataChannelSignal:p===U.Legacy?d:void 0,onVideoStateChange:r.onVideoStateChange,onAgentActivityStateChange:r.onAgentActivityStateChange,report:g,streamType:p}),f=>{var g;return(g=r.onConnectivityStateChange)==null?void 0:g.call(r,f)},y);m.onicecandidate=f=>{var g;$("peerConnection.onicecandidate",f);try{f.candidate&&f.candidate.sdpMid&&f.candidate.sdpMLineIndex!==null?K(I,{candidate:f.candidate.candidate,sdpMid:f.candidate.sdpMid,sdpMLineIndex:f.candidate.sdpMLineIndex},B):K(I,{candidate:null},B)}catch(M){(g=r.onError)==null||g.call(r,M,{streamId:I})}},S.onopen=()=>{i=!0,(!y||a)&&F()};const C=f=>{var g;(g=r.onVideoIdChange)==null||g.call(r,f)};function _(f,g){if(f===j.StreamStarted&&typeof g=="object"&&"metadata"in g){const M=g.metadata;C(M.videoId)}f===j.StreamDone&&C(null),d=f===j.StreamStarted?w.Start:w.Stop,Ae({statsSignal:p===U.Legacy?l:void 0,dataChannelSignal:d,onVideoStateChange:r.onVideoStateChange,onAgentActivityStateChange:r.onAgentActivityStateChange,streamType:p})}function R(f,g){const M=typeof g=="string"?g:g==null?void 0:g.metadata;M&&c.enrich({streamMetadata:M}),c.track("agent-chat",{event:"ready"})}const J={[j.StreamStarted]:_,[j.StreamDone]:_,[j.StreamReady]:R};S.onmessage=f=>{var ee;const{subject:g,data:M}=mt(f.data);(ee=J[g])==null||ee.call(J,g,M)},m.oniceconnectionstatechange=()=>{var g;$("peerConnection.oniceconnectionstatechange => "+m.iceConnectionState);const f=je(m.iceConnectionState);f!==D.Connected&&((g=r.onConnectionStateChange)==null||g.call(r,f))},m.ontrack=f=>{var g;$("peerConnection.ontrack",f),(g=r.onSrcObjectReady)==null||g.call(r,f.streams[0])},await m.setRemoteDescription(X),$("set remote description OK");const W=await m.createAnswer();return $("create answer OK"),await m.setLocalDescription(W),$("set local description OK"),await v(I,W,B),$("start connection OK"),{speak(f){return A(I,B,f)},async disconnect(){var f;if(I){const g=je(m.iceConnectionState);if(m){if(g===D.New){clearInterval(N);return}m.close(),m.oniceconnectionstatechange=null,m.onnegotiationneeded=null,m.onicecandidate=null,m.ontrack=null}try{g===D.Connected&&await P(I,B).catch(M=>{})}catch(M){$("Error on close stream connection",M)}(f=r.onAgentActivityStateChange)==null||f.call(r,O.Idle),clearInterval(N)}},sendDataChannelMessage(f){var g,M;if(!a||S.readyState!=="open"){$("Data channel is not ready for sending messages"),(g=r.onError)==null||g.call(r,new Error("Data channel is not ready for sending messages"),{streamId:I});return}try{S.send(f)}catch(ee){$("Error sending data channel message",ee),(M=r.onError)==null||M.call(r,ee,{streamId:I})}},sessionId:B,streamId:I,streamType:p,interruptAvailable:k}}function pt(e){const{streamOptions:t}=e??{};return{output_resolution:t==null?void 0:t.outputResolution,session_timeout:t==null?void 0:t.sessionTimeout,stream_warmup:t==null?void 0:t.streamWarmup,compatibility_mode:t==null?void 0:t.compatibilityMode,fluent:t==null?void 0:t.fluent}}function yt(e,t,n,r,s){s===U.Fluent?vt(e,t,n,r,s):Ct(e,t,n,r,s)}function vt(e,t,n,r,s){e===w.Start?r.track("stream-session",{event:"start","stream-type":s}):e===w.Stop&&r.track("stream-session",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":s,...n})}function kt(e,t,n,r){z.get()<=0||(e===w.Start?n.linkTrack("agent-video",{event:"start",latency:z.get(!0),"stream-type":r},"start",[j.StreamVideoCreated]):e===w.Stop&&n.linkTrack("agent-video",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":r},"done",[j.StreamVideoDone]))}function Ct(e,t,n,r,s){z.get()<=0||(e===w.Start?r.linkTrack("agent-video",{event:"start",latency:z.get(!0),"stream-type":s},"start",[j.StreamVideoCreated]):e===w.Stop&&r.linkTrack("agent-video",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":s,...n},"done",[j.StreamVideoDone]))}function Dt(e,t,n){return z.reset(),new Promise(async(r,s)=>{try{const o=await wt(e.id,pt(t),{...t,analytics:n,callbacks:{...t.callbacks,onConnectionStateChange:c=>{var a,i;(i=(a=t.callbacks).onConnectionStateChange)==null||i.call(a,c),c===D.Connected&&r(o)},onVideoStateChange:(c,a)=>{var i,d;(d=(i=t.callbacks).onVideoStateChange)==null||d.call(i,c),yt(c,e,a,n,o.streamType)},onAgentActivityStateChange:c=>{var a,i;(i=(a=t.callbacks).onAgentActivityStateChange)==null||i.call(a,c),c===O.Talking?ae.update():ae.reset(),kt(c===O.Talking?w.Start:w.Stop,e,n,o.streamType)}}})}catch(o){s(o)}})}async function St(e,t,n,r,s){var v,A,P,b;const o=Te(e,n,r,t.mode,t.persistentChat,s),c=Dt(e,t,r),[a,i]=await Promise.all([o,c]),{chat:d,chatMode:l}=a;return l&&l!==t.mode&&(t.mode=l,(A=(v=t.callbacks).onModeChange)==null||A.call(v,l),l!==E.Functional)?((b=(P=t.callbacks).onError)==null||b.call(P,new se(l)),i==null||i.disconnect(),{chat:d}):{chat:d,streamingManager:i}}async function Rt(e,t){var X,Y,B;let n=!0,r=null;const s=t.mixpanelKey||$e,o=t.wsURL||Le,c=t.baseURL||Z,a={messages:[],chatMode:t.mode||E.Functional},i=Ve({token:s,agentId:e,isEnabled:t.enableAnalitics,distinctId:t.distinctId});i.track("agent-sdk",{event:"init"});const d=Se(t.auth,c,t.callbacks.onError),l=await d.getById(e);i.enrich(Ue(l));const{onMessage:v,clearQueue:A}=tt(i,a,t,l,()=>{var u;return(u=a.socketManager)==null?void 0:u.disconnect()});a.messages=qe(t.initialMessages),(Y=(X=t.callbacks).onNewMessage)==null||Y.call(X,[...a.messages],"answer");const P=u=>{r=u};i.track("agent-sdk",{event:"loaded",...We(l)});async function b(u){var L,F,N,C,_,R,J;(F=(L=t.callbacks).onConnectionStateChange)==null||F.call(L,D.Connecting),z.reset(),u&&!n&&(delete a.chat,(C=(N=t.callbacks).onNewMessage)==null||C.call(N,[...a.messages],"answer"));const k=t.mode===E.DirectPlayback?Promise.resolve(void 0):Ge(t.auth,o,{onMessage:v,onError:t.callbacks.onError}),m=re(()=>St(l,{...t,callbacks:{...t.callbacks,onVideoIdChange:P}},d,i,a.chat),{limit:3,timeout:be,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:W=>(W==null?void 0:W.message)!=="Could not connect"&&W.status!==429,delayMs:1e3}).catch(W=>{var H,f;throw I(E.Maintenance),(f=(H=t.callbacks).onConnectionStateChange)==null||f.call(H,D.Fail),W}),[S,{streamingManager:p,chat:y}]=await Promise.all([k,m]);y&&y.id!==((_=a.chat)==null?void 0:_.id)&&((J=(R=t.callbacks).onNewChat)==null||J.call(R,y.id)),a.streamingManager=p,a.socketManager=S,a.chat=y,n=!1,i.enrich({chatId:y==null?void 0:y.id,streamId:p==null?void 0:p.streamId,mode:a.chatMode}),I((y==null?void 0:y.chat_mode)??t.mode??E.Functional)}async function K(){var u,k,m,S;(u=a.socketManager)==null||u.disconnect(),await((k=a.streamingManager)==null?void 0:k.disconnect()),delete a.streamingManager,delete a.socketManager,(S=(m=t.callbacks).onConnectionStateChange)==null||S.call(m,D.Disconnected)}async function I(u){var k,m;u!==a.chatMode&&(i.track("agent-mode-change",{mode:u}),a.chatMode=u,a.chatMode!==E.Functional&&await K(),(m=(k=t.callbacks).onModeChange)==null||m.call(k,u))}return{agent:l,getStreamType:()=>{var u;return(u=a.streamingManager)==null?void 0:u.streamType},getIsInterruptAvailable:()=>{var u;return((u=a.streamingManager)==null?void 0:u.interruptAvailable)??!1},starterMessages:((B=l.knowledge)==null?void 0:B.starter_message)||[],getSTTToken:()=>d.getSTTToken(l.id),changeMode:I,enrichAnalytics:i.enrich,async connect(){await b(!0),i.track("agent-chat",{event:"connect",mode:a.chatMode})},async reconnect(){await K(),await b(!1),i.track("agent-chat",{event:"reconnect",mode:a.chatMode})},async disconnect(){await K(),i.track("agent-chat",{event:"disconnect",mode:a.chatMode})},async chat(u){var p,y,L,F,N;const k=()=>{if(ve(t.mode))throw new V(`${t.mode} is enabled, chat is disabled`);if(u.length>=800)throw new V("Message cannot be more than 800 characters");if(u.length===0)throw new V("Message cannot be empty");if(a.chatMode===E.Maintenance)throw new V("Chat is in maintenance mode");if(![E.TextOnly,E.Playground].includes(a.chatMode)){if(!a.streamingManager)throw new V("Streaming manager is not initialized");if(!a.chat)throw new V("Chat is not initialized")}},m=async()=>{var C,_;if(!a.chat){const R=await Te(l,d,i,a.chatMode,t.persistentChat);if(!R.chat)throw new x(a.chatMode,!!t.persistentChat);a.chat=R.chat,(_=(C=t.callbacks).onNewChat)==null||_.call(C,a.chat.id)}return a.chat.id},S=async(C,_)=>re(()=>{var R,J;return d.chat(l.id,_,{chatMode:a.chatMode,streamId:(R=a.streamingManager)==null?void 0:R.streamId,sessionId:(J=a.streamingManager)==null?void 0:J.sessionId,messages:C.map(({matches:W,...H})=>H)},{...Me(a.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:R=>{var H,f,g,M;const J=(H=R==null?void 0:R.message)==null?void 0:H.includes("missing or invalid session_id");return!((f=R==null?void 0:R.message)==null?void 0:f.includes("Stream Error"))&&!J?((M=(g=t.callbacks).onError)==null||M.call(g,R),!1):!0},onRetry:async()=>{await K(),await b(!1)}});try{A(),k(),a.messages.push({id:G(),role:"user",content:u,created_at:new Date(z.update()).toISOString()}),(y=(p=t.callbacks).onNewMessage)==null||y.call(p,[...a.messages],"user");const C=await m(),_=await S([...a.messages],C);return a.messages.push({id:G(),role:"assistant",content:_.result||"",created_at:new Date().toISOString(),context:_.context,matches:_.matches}),i.track("agent-message-send",{event:"success",messages:a.messages.length+1}),_.result&&((F=(L=t.callbacks).onNewMessage)==null||F.call(L,[...a.messages],"answer"),i.track("agent-message-received",{latency:z.get(!0),messages:a.messages.length})),_}catch(C){throw((N=a.messages[a.messages.length-1])==null?void 0:N.role)==="assistant"&&a.messages.pop(),i.track("agent-message-send",{event:"error",messages:a.messages.length}),C}},rate(u,k,m){var y,L,F,N;const S=a.messages.find(C=>C.id===u);if(a.chat){if(!S)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const p=((y=S.matches)==null?void 0:y.map(C=>[C.document_id,C.id]))??[];return i.track("agent-rate",{event:m?"update":"create",thumb:k===1?"up":"down",knowledge_id:((L=l.knowledge)==null?void 0:L.id)??"",matches:p,score:k}),m?d.updateRating(l.id,a.chat.id,m,{knowledge_id:((F=l.knowledge)==null?void 0:F.id)??"",message_id:u,matches:p,score:k}):d.createRating(l.id,a.chat.id,{knowledge_id:((N=l.knowledge)==null?void 0:N.id)??"",message_id:u,matches:p,score:k})},deleteRate(u){if(!a.chat)throw new Error("Chat is not initialized");return i.track("agent-rate-delete",{type:"text"}),d.deleteRating(l.id,a.chat.id,u)},async speak(u){var p,y,L;function k(){if(typeof u=="string"){if(!l.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:l.presenter.voice,input:u,ssml:!1}}if(u.type==="text"&&!u.provider){if(!l.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:l.presenter.voice,input:u.input,ssml:u.ssml}}return u}const m=k();if(i.track("agent-speak",m),z.update(),a.messages&&m.type==="text"&&(a.messages.push({id:G(),role:"assistant",content:m.input,created_at:new Date(z.get(!0)).toISOString()}),(y=(p=t.callbacks).onNewMessage)==null||y.call(p,[...a.messages],"answer")),ze(a.chatMode))return{duration:0,video_id:"",status:"success"};if(!a.streamingManager)throw new Error("Please connect to the agent first");return a.streamingManager.speak({script:m,metadata:{chat_id:(L=a.chat)==null?void 0:L.id,agent_id:l.id}})},async interrupt({type:u}){var m,S,p;Oe(a.streamingManager,(m=a.streamingManager)==null?void 0:m.streamType,r);const k=a.messages[a.messages.length-1];i.track("agent-video-interrupt",{type:u||"click",video_duration_to_interrupt:ae.get(!0),message_duration_to_interrupt:z.get(!0)}),k.interrupted=!0,(p=(S=t.callbacks).onNewMessage)==null||p.call(S,[...a.messages],"answer"),Xe(a.streamingManager,r)}}}function Et(e,t,n){const{getById:r}=Se(t,n||Z);return r(e)}h.AgentActivityState=O,h.AgentStatus=le,h.ChatCreationFailed=x,h.ChatMode=E,h.ChatModeDowngraded=se,h.ChatProgress=q,h.ConnectionState=D,h.ConnectivityState=Q,h.DocumentType=ge,h.KnowledgeType=me,h.PlanGroup=de,h.Providers=we,h.RateState=ue,h.StreamEvents=j,h.StreamType=U,h.StreamingState=w,h.Subject=fe,h.UserPlan=ce,h.ValidationError=V,h.VideoType=he,h.VoiceAccess=pe,h.WsError=oe,h.createAgentManager=Rt,h.getAgent=Et,h.mapVideoType=Pe,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"})});
1
+ (function(f,I){typeof exports=="object"&&typeof module<"u"?I(exports):typeof define=="function"&&define.amd?define(["exports"],I):(f=typeof globalThis<"u"?globalThis:f||self,I(f.index={}))})(this,function(f){"use strict";var jt=Object.defineProperty;var bt=(f,I,H)=>I in f?jt(f,I,{enumerable:!0,configurable:!0,writable:!0,value:H}):f[I]=H;var ne=(f,I,H)=>bt(f,typeof I!="symbol"?I+"":I,H);class I extends Error{constructor({kind:a,description:r,error:s}){super(JSON.stringify({kind:a,description:r}));ne(this,"kind");ne(this,"description");ne(this,"error");this.kind=a,this.description=r,this.error=s}}class H extends I{constructor(t,a){super({kind:"ChatCreationFailed",description:`Failed to create ${a?"persistent":""} chat, mode: ${t}`})}}class de extends I{constructor(t){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${t}`})}}class V extends I{constructor(a,r){super({kind:"ValidationError",description:a});ne(this,"key");this.key=r}}class le extends I{constructor(t){super({kind:"WSError",description:t})}}var ue=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(ue||{}),fe=(e=>(e.TRIAL="deid-trial",e.PRO="deid-pro",e.ENTERPRISE="deid-enterprise",e.LITE="deid-lite",e.ADVANCED="deid-advanced",e.BUILD="deid-api-build",e.LAUNCH="deid-api-launch",e.SCALE="deid-api-scale",e))(fe||{}),me=(e=>(e.Created="created",e.Started="started",e.Done="done",e.Error="error",e.Rejected="rejected",e.Ready="ready",e))(me||{}),ge=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(ge||{}),R=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e.DirectPlayback="DirectPlayback",e.Off="Off",e))(R||{}),q=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(q||{}),he=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(he||{}),we=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(we||{}),pe=(e=>(e.Pdf="pdf",e.Text="text",e.Html="html",e.Word="word",e.Json="json",e.Markdown="markdown",e.Csv="csv",e.Excel="excel",e.Powerpoint="powerpoint",e.Archive="archive",e.Image="image",e.Audio="audio",e.Video="video",e))(pe||{}),ae=(e=>(e.Clip="clip",e.Talk="talk",e.Expressive="expressive",e))(ae||{});const Le=e=>{switch(e){case"clip":return"clip";case"talk":return"talk";default:throw new Error(`Unknown video type: ${e}`)}};var w=(e=>(e.Start="START",e.Stop="STOP",e))(w||{}),Y=(e=>(e.Strong="STRONG",e.Weak="WEAK",e.Unknown="UNKNOWN",e))(Y||{}),O=(e=>(e.Idle="IDLE",e.Talking="TALKING",e))(O||{}),b=(e=>(e.ChatAnswer="chat/answer",e.ChatPartial="chat/partial",e.StreamDone="stream/done",e.StreamStarted="stream/started",e.StreamFailed="stream/error",e.StreamReady="stream/ready",e.StreamCreated="stream/created",e.StreamInterrupt="stream/interrupt",e.StreamVideoCreated="stream-video/started",e.StreamVideoDone="stream-video/done",e.StreamVideoError="stream-video/error",e.StreamVideoRejected="stream-video/rejected",e))(b||{}),D=(e=>(e.New="new",e.Fail="fail",e.Connected="connected",e.Connecting="connecting",e.Closed="closed",e.Completed="completed",e.Disconnected="disconnected",e))(D||{}),N=(e=>(e.Legacy="legacy",e.Fluent="fluent",e))(N||{}),ye=(e=>(e.Livekit="livekit",e))(ye||{}),ve=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(ve||{}),ke=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(ke||{});const Be=45*1e3,$e="X-Playground-Chat",Z="https://api.d-id.com",ze="wss://notifications.d-id.com",Fe="79f81a83a67430be2bc0fd61042b8faa",Ce=e=>new Promise(t=>setTimeout(t,e)),Q=(e=16)=>{const t=new Uint8Array(e);return window.crypto.getRandomValues(t),Array.from(t,a=>a.toString(16).padStart(2,"0")).join("").slice(0,13)},Ne=e=>[R.TextOnly,R.Playground,R.Maintenance].includes(e),De=e=>e&&[R.DirectPlayback,R.Off].includes(e);function Je(e,t){let a;return{promise:new Promise((s,o)=>{a=setTimeout(()=>o(new Error(t)),e)}),clear:()=>clearTimeout(a)}}async function ie(e,t){const a={limit:(t==null?void 0:t.limit)??3,delayMs:(t==null?void 0:t.delayMs)??0,timeout:(t==null?void 0:t.timeout)??3e4,timeoutErrorMessage:(t==null?void 0:t.timeoutErrorMessage)||"Timeout error",shouldRetryFn:(t==null?void 0:t.shouldRetryFn)??(()=>!0),onRetry:(t==null?void 0:t.onRetry)??(()=>{})};let r;for(let s=1;s<=a.limit;s++)try{if(!a.timeout)return await e();const{promise:o,clear:c}=Je(a.timeout,a.timeoutErrorMessage),n=e().finally(c);return await Promise.race([n,o])}catch(o){if(r=o,!a.shouldRetryFn(o)||s>=a.limit)throw o;await Ce(a.delayMs),a.onRetry(o)}throw r}function Se(){let e=window.localStorage.getItem("did_external_key_id");if(!e){let t=Q();window.localStorage.setItem("did_external_key_id",t),e=t}return e}let We=Q();function Re(e){if(e.type==="bearer")return`Bearer ${e.token}`;if(e.type==="basic")return`Basic ${btoa(`${e.username}:${e.password}`)}`;if(e.type==="key")return`Client-Key ${e.clientKey}.${Se()}_${We}`;throw new Error(`Unknown auth type: ${e}`)}const Ue=e=>ie(e,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:t=>t.status===429});function Ee(e,t=Z,a){const r=async(s,o)=>{const{skipErrorHandler:c,...n}=o||{},i=await Ue(()=>fetch(t+(s!=null&&s.startsWith("/")?s:`/${s}`),{...n,headers:{...n.headers,Authorization:Re(e),"Content-Type":"application/json"}}));if(!i.ok){let d=await i.text().catch(()=>`Failed to fetch with status ${i.status}`);const l=new Error(d);throw a&&!c&&a(l,{url:s,options:n,headers:i.headers}),l}return i.json()};return{get(s,o){return r(s,{...o,method:"GET"})},post(s,o,c){return r(s,{...c,body:JSON.stringify(o),method:"POST"})},delete(s,o,c){return r(s,{...c,body:JSON.stringify(o),method:"DELETE"})},patch(s,o,c){return r(s,{...c,body:JSON.stringify(o),method:"PATCH"})}}}function Ie(e,t=Z,a){const r=Ee(e,`${t}/agents`,a);return{create(s,o){return r.post("/",s,o)},getAgents(s,o){return r.get(`/${s?`?tag=${s}`:""}`,o).then(c=>c??[])},getById(s,o){return r.get(`/${s}`,o)},delete(s,o){return r.delete(`/${s}`,void 0,o)},update(s,o,c){return r.patch(`/${s}`,o,c)},newChat(s,o,c){return r.post(`/${s}/chat`,o,c)},chat(s,o,c,n){return r.post(`/${s}/chat/${o}`,c,n)},createRating(s,o,c,n){return r.post(`/${s}/chat/${o}/ratings`,c,n)},updateRating(s,o,c,n,i){return r.patch(`/${s}/chat/${o}/ratings/${c}`,n,i)},deleteRating(s,o,c,n){return r.delete(`/${s}/chat/${o}/ratings/${c}`,n)},getSTTToken(s,o){return r.get(`/${s}/stt-token`,o)}}}const Me=e=>e.type==="clip"&&e.presenter_id.startsWith("v2_")?"clip_v2":e.type;function Ke(e){var s,o,c,n;const t=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",a=()=>{const i=navigator.platform;return i.toLowerCase().includes("win")?"Windows":i.toLowerCase().includes("mac")?"Mac OS X":i.toLowerCase().includes("linux")?"Linux":"Unknown"},r=e.presenter;return{$os:`${a()}`,isMobile:`${t()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:Me(r),agentVoice:{voiceId:(o=(s=e.presenter)==null?void 0:s.voice)==null?void 0:o.voice_id,provider:(n=(c=e.presenter)==null?void 0:c.voice)==null?void 0:n.type}}}function xe(e){var a,r,s,o,c,n;const t=(a=e.llm)==null?void 0:a.prompt_customization;return{agentType:Me(e.presenter),owner_id:e.owner_id??"",promptVersion:(r=e.llm)==null?void 0:r.prompt_version,behavior:{role:t==null?void 0:t.role,personality:t==null?void 0:t.personality,instructions:(s=e.llm)==null?void 0:s.instructions},temperature:(o=e.llm)==null?void 0:o.temperature,knowledgeSource:t==null?void 0:t.knowledge_source,starterQuestionsCount:(n=(c=e.knowledge)==null?void 0:c.starter_message)==null?void 0:n.length,topicsToAvoid:t==null?void 0:t.topics_to_avoid,maxResponseLength:t==null?void 0:t.max_response_length,agentId:e.id,access:e.access,name:e.preview_name,...e.access==="public"?{from:"agent-template"}:{}}}const He=e=>e.reduce((t,a)=>t+a,0),Te=e=>He(e)/e.length;function Ve(e,t,a){var i,d,l;const{event:r,...s}=e,{template:o}=(t==null?void 0:t.llm)||{},{language:c}=((i=t==null?void 0:t.presenter)==null?void 0:i.voice)||{};return{...s,llm:{...s.llm,template:o},script:{...s.script,provider:{...(d=s==null?void 0:s.script)==null?void 0:d.provider,language:c}},stitch:(t==null?void 0:t.presenter.type)==="talk"?(l=t==null?void 0:t.presenter)==null?void 0:l.stitch:void 0,...a}}let se={};const qe="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function Oe(e){const t=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk";return{token:e.token||"testKey",distinct_id:e.distinctId||Se(),agentId:e.agentId,additionalProperties:{id:e.distinctId,...e.mixpanelAdditionalProperties||{}},isEnabled:e.isEnabled??!0,getRandom:Q,enrich(a){this.additionalProperties={...this.additionalProperties,...a}},async track(a,r){if(!this.isEnabled)return Promise.resolve();const{audioPath:s,...o}=r||{},c={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:a,properties:{...this.additionalProperties,...o,agentId:this.agentId,source:t,token:this.token,time:Date.now(),$insert_id:this.getRandom(),origin:window.location.href,"Screen Height":window.screen.height||window.innerWidth,"Screen Width":window.screen.width||window.innerHeight,"User Agent":navigator.userAgent}}])})};try{return await fetch(qe,c).then(n=>n.json())}catch(n){return console.error(n)}},linkTrack(a,r,s,o){se[a]||(se[a]={events:{},resolvedDependencies:[]}),o.includes(s)||o.push(s);const c=se[a];if(c.events[s]={props:r},c.resolvedDependencies.push(s),o.every(i=>c.resolvedDependencies.includes(i))){const i=o.reduce((d,l)=>c.events[l]?{...d,...c.events[l].props}:d,{});this.track(a,i),c.resolvedDependencies=c.resolvedDependencies.filter(d=>!o.includes(d)),o.forEach(d=>{delete c.events[d]})}}}}function _e(){let e=0;return{reset:()=>e=0,update:()=>e=Date.now(),get:(t=!1)=>t?Date.now()-e:e}}const $=_e(),oe=_e();function Ae(e){return e===R.Playground?{headers:{[$e]:"true"}}:{}}async function je(e,t,a,r,s=!1,o){try{return!o&&!De(r)&&(o=await t.newChat(e.id,{persist:s},Ae(r)),a.track("agent-chat",{event:"created",chatId:o.id,mode:r})),{chat:o,chatMode:(o==null?void 0:o.chat_mode)??r}}catch(c){try{const n=JSON.parse(c.message);if((n==null?void 0:n.kind)==="InsufficientCreditsError")throw new Error("InsufficientCreditsError")}catch(n){console.error("Error parsing the error message:",n)}throw new Error("Cannot create new chat")}}function Xe(e){return e&&e.length>0?e:[]}function Ye(e,t,a){if(!e)throw new Error("Please connect to the agent first");if(!e.interruptAvailable)throw new Error("Interrupt is not enabled for this stream");if(t!==N.Fluent)throw new Error("Interrupt only available for Fluent streams");if(!a)throw new Error("No active video to interrupt")}async function Qe(e,t){const a={type:b.StreamInterrupt,videoId:t,timestamp:Date.now()};e.sendDataChannelMessage(JSON.stringify(a))}function Ge(e){return new Promise((t,a)=>{const{callbacks:r,host:s,auth:o}=e,{onMessage:c=null,onOpen:n=null,onClose:i=null,onError:d=null}=r||{},l=new WebSocket(`${s}?authorization=${Re(o)}`);l.onmessage=c,l.onclose=i,l.onerror=v=>{console.error(v),d==null||d("Websocket failed to connect",v),a(v)},l.onopen=v=>{n==null||n(v),t(l)}})}async function Ze(e){const{retries:t=1}=e;let a=null;for(let r=0;(a==null?void 0:a.readyState)!==WebSocket.OPEN;r++)try{a=await Ge(e)}catch(s){if(r===t)throw s;await Ce(r*500)}return a}async function et(e,t,a){const r=a!=null&&a.onMessage?[a.onMessage]:[],s=await Ze({auth:e,host:t,callbacks:{onError:o=>{var c;return(c=a.onError)==null?void 0:c.call(a,new le(o))},onMessage(o){const c=JSON.parse(o.data);r.forEach(n=>n(c.event,c))}}});return{socket:s,disconnect:()=>s.close(),subscribeToEvents:o=>r.push(o)}}function tt(e){if(e.answer!==void 0)return e.answer;let t=0,a="";for(;t in e;)a+=e[t++];return a}function rt(e,t,a,r,s){const o=r.messages[r.messages.length-1];if(!(e===q.Partial||e===q.Answer)||(o==null?void 0:o.role)!=="assistant")return;const{content:c,sequence:n}=t;e===q.Partial?a[n]=c:a.answer=c;const i=tt(a);(o.content!==i||e===q.Answer)&&(o.content=i,s==null||s([...r.messages],e))}function nt(e,t,a,r,s){let o={};return{clearQueue:()=>o={},onMessage:(c,n)=>{var i,d;if("content"in n)rt(c,n,o,t,a.callbacks.onNewMessage),c===q.Answer&&e.track("agent-message-received",{messages:t.messages.length,mode:t.chatMode});else{const l=b,v=[l.StreamVideoDone,l.StreamVideoError,l.StreamVideoRejected],_=[l.StreamFailed,l.StreamVideoError,l.StreamVideoRejected],P=Ve(n,r,{mode:t.chatMode});if(c=c,c===l.StreamVideoCreated)e.linkTrack("agent-video",P,l.StreamVideoCreated,["start"]);else if(v.includes(c)){const B=c.split("/")[1];_.includes(c)?e.track("agent-video",{...P,event:B}):e.linkTrack("agent-video",{...P,event:B},c,["done"])}_.includes(c)&&((d=(i=a.callbacks).onError)==null||d.call(i,new Error(`Stream failed with event ${c}`),{data:n})),n.event===l.StreamDone&&s()}}}}function at(e,t,a,r){const s=Ee(e,`${t}/agents/${a}`,r);return{createStream(o){return s.post("/streams",o)},startConnection(o,c,n){return s.post(`/streams/${o}/sdp`,{session_id:n,answer:c})},addIceCandidate(o,c,n){return s.post(`/streams/${o}/ice`,{session_id:n,...c})},sendStreamRequest(o,c,n){return s.post(`/streams/${o}`,{session_id:c,...n})},close(o,c){return s.delete(`/streams/${o}`,{session_id:c})}}}const it=(e,t)=>(a,r)=>e&&console.log(`[${t}] ${a}`,r??"");function st(e,t,a){const r=(t.timestamp-e.timestamp)/1e3;return{duration:r,bytesReceived:t.bytesReceived-e.bytesReceived,bitrate:Math.round((t.bytesReceived-e.bytesReceived)*8/r),packetsReceived:t.packetsReceived-e.packetsReceived,packetsLost:t.packetsLost-e.packetsLost,framesDropped:t.framesDropped-e.framesDropped,framesDecoded:t.framesDecoded-e.framesDecoded,jitter:t.jitter,avgJitterDelayInInterval:(t.jitterBufferDelay-e.jitterBufferDelay)/(t.jitterBufferEmittedCount-e.jitterBufferEmittedCount),jitterBufferEmittedCount:t.jitterBufferEmittedCount-e.jitterBufferEmittedCount,jitterBufferDelay:(t.jitterBufferDelay-e.jitterBufferDelay)/r,framesPerSecond:t.framesPerSecond,freezeCount:t.freezeCount-e.freezeCount,freezeDuration:t.freezeDuration-e.freezeDuration,lowFpsCount:a}}function ot(e){return e.filter(t=>t.freezeCount>0||t.framesPerSecond<21||t.framesDropped>0||t.packetsLost>0).map(t=>{const{timestamp:a,...r}=t,s=[];return t.freezeCount>0&&s.push("freeze"),t.framesPerSecond<21&&s.push("low fps"),t.framesDropped>0&&s.push("frames dropped"),t.packetsLost>0&&s.push("packet loss"),{...r,causes:s}})}function ct(e){let t="",a=0;for(const r of e.values())if(r&&r.type==="codec"&&r.mimeType.startsWith("video")&&(t=r.mimeType.split("/")[1]),r&&r.type==="candidate-pair"&&(a=r.currentRoundTripTime),r&&r.type==="inbound-rtp"&&r.kind==="video")return{codec:t,rtt:a,timestamp:r.timestamp,bytesReceived:r.bytesReceived,packetsReceived:r.packetsReceived,packetsLost:r.packetsLost,framesDropped:r.framesDropped,framesDecoded:r.framesDecoded,jitter:r.jitter,jitterBufferDelay:r.jitterBufferDelay,jitterBufferEmittedCount:r.jitterBufferEmittedCount,avgJitterDelayInInterval:r.jitterBufferDelay/r.jitterBufferEmittedCount,frameWidth:r.frameWidth,frameHeight:r.frameHeight,framesPerSecond:r.framesPerSecond,freezeCount:r.freezeCount,freezeDuration:r.totalFreezesDuration};return{}}function dt(e,t,a){const r=e.map((i,d)=>d===0?a?{timestamp:i.timestamp,duration:0,rtt:i.rtt,bytesReceived:i.bytesReceived-a.bytesReceived,bitrate:(i.bytesReceived-a.bytesReceived)*8/(t/1e3),packetsReceived:i.packetsReceived-a.packetsReceived,packetsLost:i.packetsLost-a.packetsLost,framesDropped:i.framesDropped-a.framesDropped,framesDecoded:i.framesDecoded-a.framesDecoded,jitter:i.jitter,jitterBufferDelay:i.jitterBufferDelay-a.jitterBufferDelay,jitterBufferEmittedCount:i.jitterBufferEmittedCount-a.jitterBufferEmittedCount,avgJitterDelayInInterval:(i.jitterBufferDelay-a.jitterBufferDelay)/(i.jitterBufferEmittedCount-a.jitterBufferEmittedCount),framesPerSecond:i.framesPerSecond,freezeCount:i.freezeCount-a.freezeCount,freezeDuration:i.freezeDuration-a.freezeDuration}:{timestamp:i.timestamp,rtt:i.rtt,duration:0,bytesReceived:i.bytesReceived,bitrate:i.bytesReceived*8/(t/1e3),packetsReceived:i.packetsReceived,packetsLost:i.packetsLost,framesDropped:i.framesDropped,framesDecoded:i.framesDecoded,jitter:i.jitter,jitterBufferDelay:i.jitterBufferDelay,jitterBufferEmittedCount:i.jitterBufferEmittedCount,avgJitterDelayInInterval:i.jitterBufferDelay/i.jitterBufferEmittedCount,framesPerSecond:i.framesPerSecond,freezeCount:i.freezeCount,freezeDuration:i.freezeDuration}:{timestamp:i.timestamp,duration:t*d/1e3,rtt:i.rtt,bytesReceived:i.bytesReceived-e[d-1].bytesReceived,bitrate:(i.bytesReceived-e[d-1].bytesReceived)*8/(t/1e3),packetsReceived:i.packetsReceived-e[d-1].packetsReceived,packetsLost:i.packetsLost-e[d-1].packetsLost,framesDropped:i.framesDropped-e[d-1].framesDropped,framesDecoded:i.framesDecoded-e[d-1].framesDecoded,jitter:i.jitter,jitterBufferDelay:i.jitterBufferDelay-e[d-1].jitterBufferDelay,jitterBufferEmittedCount:i.jitterBufferEmittedCount-e[d-1].jitterBufferEmittedCount,avgJitterDelayInInterval:(i.jitterBufferDelay-e[d-1].jitterBufferDelay)/(i.jitterBufferEmittedCount-e[d-1].jitterBufferEmittedCount),framesPerSecond:i.framesPerSecond,freezeCount:i.freezeCount-e[d-1].freezeCount,freezeDuration:i.freezeDuration-e[d-1].freezeDuration}),s=ot(r),o=s.reduce((i,d)=>i+(d.causes.includes("low fps")?1:0),0),c=r.filter(i=>!!i.avgJitterDelayInInterval).map(i=>i.avgJitterDelayInInterval),n=r.filter(i=>!!i.rtt).map(i=>i.rtt);return{webRTCStats:{anomalies:s,minRtt:Math.min(...n),avgRtt:Te(n),maxRtt:Math.max(...n),aggregateReport:st(e[0],e[e.length-1],o),minJitterDelayInInterval:Math.min(...c),maxJitterDelayInInterval:Math.max(...c),avgJitterDelayInInterval:Te(c)},codec:e[0].codec,resolution:`${e[0].frameWidth}x${e[0].frameHeight}`}}const ce=100,lt=Math.max(Math.ceil(400/ce),1),ut=.25,ft=.28;function mt(){let e=0,t,a,r=0;return s=>{for(const o of s.values())if(o&&o.type==="inbound-rtp"&&o.kind==="video"){const c=o.jitterBufferDelay,n=o.jitterBufferEmittedCount;if(a&&n>a){const l=c-t,v=n-a;r=l/v}t=c,a=n;const i=o.framesDecoded,d=i-e>0;return e=i,{isReceiving:d,avgJitterDelayInInterval:r,freezeCount:o.freezeCount}}return{isReceiving:!1,avgJitterDelayInInterval:r}}}function gt(e,t,a,r,s,o=!1){let c=[],n,i=0,d=!1,l=Y.Unknown,v=Y.Unknown,_=0,P=0;const B=mt();return setInterval(async()=>{const W=await e.getStats(),{isReceiving:X,avgJitterDelayInInterval:x,freezeCount:E}=B(W),G=ct(W);if(X)i=0,_=E-P,v=x<ut?Y.Strong:x>ft&&_>1?Y.Weak:l,v!==l&&(s==null||s(v),l=v,P+=_,_=0),d||(r==null||r(w.Start),n=c[c.length-1],c=[],d=!0),c.push(G);else if(d&&(i++,i>=lt)){const u=dt(c,ce,n);r==null||r(w.Stop,u),t()||a(),P=E,d=!1}},ce)}const ht=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function be(e){switch(e){case"connected":return D.Connected;case"checking":return D.Connecting;case"failed":return D.Fail;case"new":return D.New;case"closed":return D.Closed;case"disconnected":return D.Disconnected;case"completed":return D.Completed;default:return D.New}}const wt=e=>t=>{const[a,r=""]=t.split(/:(.+)/);try{const s=JSON.parse(r);return e("parsed data channel message",{subject:a,data:s}),{subject:a,data:s}}catch(s){return e("Failed to parse data channel message, returning data as string",{subject:a,rawData:r,error:s}),{subject:a,data:r}}};function pt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,report:r}){e===w.Start&&t===w.Start?a==null||a(w.Start):e===w.Stop&&t===w.Stop&&(a==null||a(w.Stop,r))}function yt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:r,report:s}){e===w.Start?a==null||a(w.Start):e===w.Stop&&(a==null||a(w.Stop,s)),t===w.Start?r==null||r(O.Talking):t===w.Stop&&(r==null||r(O.Idle))}function Pe({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:r,streamType:s,report:o}){s===N.Legacy?pt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,report:o}):s===N.Fluent&&yt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:r,report:o})}async function vt(e,t,{debug:a=!1,callbacks:r,auth:s,baseURL:o=Z,analytics:c}){var te;const n=it(a,"WebRTCStreamingManager"),i=wt(n);let d=!1,l=!1,v=w.Stop,_=w.Stop;const{startConnection:P,sendStreamRequest:B,close:W,createStream:X,addIceCandidate:x}=at(s,o,e,r.onError),{id:E,offer:G,ice_servers:u,session_id:p,fluent:y,interrupt_enabled:A,triggers_enabled:k}=await X(t);(te=r.onStreamCreated)==null||te.call(r,{stream_id:E,session_id:p,agent_id:e});const m=new ht({iceServers:u}),M=m.createDataChannel("JanusDataChannel");if(!p)throw new Error("Could not create session_id");const j=y?N.Fluent:N.Legacy;c.enrich({"stream-type":j});const z=t.stream_warmup&&!y,S=()=>d,T=()=>{var g;d=!0,l&&((g=r.onConnectionStateChange)==null||g.call(r,D.Connected))},C=gt(m,S,T,(g,h)=>Pe({statsSignal:_=g,dataChannelSignal:j===N.Legacy?v:void 0,onVideoStateChange:r.onVideoStateChange,onAgentActivityStateChange:r.onAgentActivityStateChange,report:h,streamType:j}),g=>{var h;return(h=r.onConnectivityStateChange)==null?void 0:h.call(r,g)},z);m.onicecandidate=g=>{var h;n("peerConnection.onicecandidate",g);try{g.candidate&&g.candidate.sdpMid&&g.candidate.sdpMLineIndex!==null?x(E,{candidate:g.candidate.candidate,sdpMid:g.candidate.sdpMid,sdpMLineIndex:g.candidate.sdpMLineIndex},p):x(E,{candidate:null},p)}catch(L){(h=r.onError)==null||h.call(r,L,{streamId:E})}},M.onopen=()=>{l=!0,(!z||d)&&T()};const J=g=>{var h;(h=r.onVideoIdChange)==null||h.call(r,g)};function F(g,h){if(g===b.StreamStarted&&typeof h=="object"&&"metadata"in h){const L=h.metadata;J(L.videoId)}g===b.StreamDone&&J(null),v=g===b.StreamStarted?w.Start:w.Stop,Pe({statsSignal:j===N.Legacy?_:void 0,dataChannelSignal:v,onVideoStateChange:r.onVideoStateChange,onAgentActivityStateChange:r.onAgentActivityStateChange,streamType:j})}function U(g,h){const L=typeof h=="string"?h:h==null?void 0:h.metadata;L&&c.enrich({streamMetadata:L}),c.track("agent-chat",{event:"ready"})}const K={[b.StreamStarted]:F,[b.StreamDone]:F,[b.StreamReady]:U};M.onmessage=g=>{var re;const{subject:h,data:L}=i(g.data);(re=K[h])==null||re.call(K,h,L)},m.oniceconnectionstatechange=()=>{var h;n("peerConnection.oniceconnectionstatechange => "+m.iceConnectionState);const g=be(m.iceConnectionState);g!==D.Connected&&((h=r.onConnectionStateChange)==null||h.call(r,g))},m.ontrack=g=>{var h;n("peerConnection.ontrack",g),(h=r.onSrcObjectReady)==null||h.call(r,g.streams[0])},await m.setRemoteDescription(G),n("set remote description OK");const ee=await m.createAnswer();return n("create answer OK"),await m.setLocalDescription(ee),n("set local description OK"),await P(E,ee,p),n("start connection OK"),{speak(g){return B(E,p,g)},async disconnect(){var g;if(E){const h=be(m.iceConnectionState);if(m){if(h===D.New){clearInterval(C);return}m.close(),m.oniceconnectionstatechange=null,m.onnegotiationneeded=null,m.onicecandidate=null,m.ontrack=null}try{h===D.Connected&&await W(E,p).catch(L=>{})}catch(L){n("Error on close stream connection",L)}(g=r.onAgentActivityStateChange)==null||g.call(r,O.Idle),clearInterval(C)}},sendDataChannelMessage(g){var h,L;if(!d||M.readyState!=="open"){n("Data channel is not ready for sending messages"),(h=r.onError)==null||h.call(r,new Error("Data channel is not ready for sending messages"),{streamId:E});return}try{M.send(g)}catch(re){n("Error sending data channel message",re),(L=r.onError)==null||L.call(r,re,{streamId:E})}},sessionId:p,streamId:E,streamType:j,interruptAvailable:A??!1,triggersAvailable:k??!1}}const kt=e=>e.presenter.type===ae.Expressive;async function Ct(e,t,a){const r=e.id;return kt(e)?{}:vt(r,t,a)}function Dt(e){const{streamOptions:t}=e??{};return{output_resolution:t==null?void 0:t.outputResolution,session_timeout:t==null?void 0:t.sessionTimeout,stream_warmup:t==null?void 0:t.streamWarmup,compatibility_mode:t==null?void 0:t.compatibilityMode,fluent:t==null?void 0:t.fluent}}function St(e,t,a,r,s){s===N.Fluent?Rt(e,t,a,r,s):It(e,t,a,r,s)}function Rt(e,t,a,r,s){e===w.Start?r.track("stream-session",{event:"start","stream-type":s}):e===w.Stop&&r.track("stream-session",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":s,...a})}function Et(e,t,a,r){$.get()<=0||(e===w.Start?a.linkTrack("agent-video",{event:"start",latency:$.get(!0),"stream-type":r},"start",[b.StreamVideoCreated]):e===w.Stop&&a.linkTrack("agent-video",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":r},"done",[b.StreamVideoDone]))}function It(e,t,a,r,s){$.get()<=0||(e===w.Start?r.linkTrack("agent-video",{event:"start",latency:$.get(!0),"stream-type":s},"start",[b.StreamVideoCreated]):e===w.Stop&&r.linkTrack("agent-video",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":s,...a},"done",[b.StreamVideoDone]))}function Mt(e,t,a){return $.reset(),new Promise(async(r,s)=>{try{let o;o=await Ct(e,Dt(t),{...t,analytics:a,callbacks:{...t.callbacks,onConnectionStateChange:c=>{var n,i;(i=(n=t.callbacks).onConnectionStateChange)==null||i.call(n,c),c===D.Connected&&r(o)},onVideoStateChange:(c,n)=>{var i,d;(d=(i=t.callbacks).onVideoStateChange)==null||d.call(i,c),St(c,e,n,a,o.streamType)},onAgentActivityStateChange:c=>{var n,i;(i=(n=t.callbacks).onAgentActivityStateChange)==null||i.call(n,c),c===O.Talking?oe.update():oe.reset(),Et(c===O.Talking?w.Start:w.Stop,e,a,o.streamType)}}})}catch(o){s(o)}})}async function Tt(e,t,a,r,s){var v,_,P,B;const o=je(e,a,r,t.mode,t.persistentChat,s),c=Mt(e,t,r),[n,i]=await Promise.all([o,c]),{chat:d,chatMode:l}=n;return l&&l!==t.mode&&(t.mode=l,(_=(v=t.callbacks).onModeChange)==null||_.call(v,l),l!==R.Functional)?((B=(P=t.callbacks).onError)==null||B.call(P,new de(l)),i==null||i.disconnect(),{chat:d}):{chat:d,streamingManager:i}}async function _t(e,t){var x,E,G;let a=!0,r=null;const s=t.mixpanelKey||Fe,o=t.wsURL||ze,c=t.baseURL||Z,n={messages:[],chatMode:t.mode||R.Functional},i=Oe({token:s,agentId:e,isEnabled:t.enableAnalitics,distinctId:t.distinctId,mixpanelAdditionalProperties:t.mixpanelAdditionalProperties});i.track("agent-sdk",{event:"init"});const d=Ie(t.auth,c,t.callbacks.onError),l=await d.getById(e);i.enrich(xe(l));const{onMessage:v,clearQueue:_}=nt(i,n,t,l,()=>{var u;return(u=n.socketManager)==null?void 0:u.disconnect()});n.messages=Xe(t.initialMessages),(E=(x=t.callbacks).onNewMessage)==null||E.call(x,[...n.messages],"answer");const P=u=>{r=u};i.track("agent-sdk",{event:"loaded",...Ke(l)});async function B(u){var M,j,z,S,T,C,J;(j=(M=t.callbacks).onConnectionStateChange)==null||j.call(M,D.Connecting),$.reset(),u&&!a&&(delete n.chat,(S=(z=t.callbacks).onNewMessage)==null||S.call(z,[...n.messages],"answer"));const p=t.mode===R.DirectPlayback?Promise.resolve(void 0):et(t.auth,o,{onMessage:v,onError:t.callbacks.onError}),y=ie(()=>Tt(l,{...t,callbacks:{...t.callbacks,onVideoIdChange:P}},d,i,n.chat),{limit:3,timeout:Be,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:F=>(F==null?void 0:F.message)!=="Could not connect"&&F.status!==429,delayMs:1e3}).catch(F=>{var U,K;throw X(R.Maintenance),(K=(U=t.callbacks).onConnectionStateChange)==null||K.call(U,D.Fail),F}),[A,{streamingManager:k,chat:m}]=await Promise.all([p,y]);m&&m.id!==((T=n.chat)==null?void 0:T.id)&&((J=(C=t.callbacks).onNewChat)==null||J.call(C,m.id)),n.streamingManager=k,n.socketManager=A,n.chat=m,a=!1,i.enrich({chatId:m==null?void 0:m.id,streamId:k==null?void 0:k.streamId,mode:n.chatMode}),X((m==null?void 0:m.chat_mode)??t.mode??R.Functional)}async function W(){var u,p,y,A;(u=n.socketManager)==null||u.disconnect(),await((p=n.streamingManager)==null?void 0:p.disconnect()),delete n.streamingManager,delete n.socketManager,(A=(y=t.callbacks).onConnectionStateChange)==null||A.call(y,D.Disconnected)}async function X(u){var p,y;u!==n.chatMode&&(i.track("agent-mode-change",{mode:u}),n.chatMode=u,n.chatMode!==R.Functional&&await W(),(y=(p=t.callbacks).onModeChange)==null||y.call(p,u))}return{agent:l,getStreamType:()=>{var u;return(u=n.streamingManager)==null?void 0:u.streamType},getIsInterruptAvailable:()=>{var u;return((u=n.streamingManager)==null?void 0:u.interruptAvailable)??!1},getIsTriggersAvailable:()=>{var u;return((u=n.streamingManager)==null?void 0:u.triggersAvailable)??!1},starterMessages:((G=l.knowledge)==null?void 0:G.starter_message)||[],getSTTToken:()=>d.getSTTToken(l.id),changeMode:X,enrichAnalytics:i.enrich,async connect(){await B(!0),i.track("agent-chat",{event:"connect",mode:n.chatMode})},async reconnect(){await W(),await B(!1),i.track("agent-chat",{event:"reconnect",mode:n.chatMode})},async disconnect(){await W(),i.track("agent-chat",{event:"disconnect",mode:n.chatMode})},async chat(u){var k,m,M,j,z;const p=()=>{if(De(t.mode))throw new V(`${t.mode} is enabled, chat is disabled`);if(u.length>=800)throw new V("Message cannot be more than 800 characters");if(u.length===0)throw new V("Message cannot be empty");if(n.chatMode===R.Maintenance)throw new V("Chat is in maintenance mode");if(![R.TextOnly,R.Playground].includes(n.chatMode)){if(!n.streamingManager)throw new V("Streaming manager is not initialized");if(!n.chat)throw new V("Chat is not initialized")}},y=async()=>{var S,T;if(!n.chat){const C=await je(l,d,i,n.chatMode,t.persistentChat);if(!C.chat)throw new H(n.chatMode,!!t.persistentChat);n.chat=C.chat,(T=(S=t.callbacks).onNewChat)==null||T.call(S,n.chat.id)}return n.chat.id},A=async(S,T)=>ie(()=>{var C,J;return d.chat(l.id,T,{chatMode:n.chatMode,streamId:(C=n.streamingManager)==null?void 0:C.streamId,sessionId:(J=n.streamingManager)==null?void 0:J.sessionId,messages:S.map(({matches:F,...U})=>U)},{...Ae(n.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:C=>{var U,K,ee,te;const J=(U=C==null?void 0:C.message)==null?void 0:U.includes("missing or invalid session_id");return!((K=C==null?void 0:C.message)==null?void 0:K.includes("Stream Error"))&&!J?((te=(ee=t.callbacks).onError)==null||te.call(ee,C),!1):!0},onRetry:async()=>{await W(),await B(!1)}});try{_(),p(),n.messages.push({id:Q(),role:"user",content:u,created_at:new Date($.update()).toISOString()}),(m=(k=t.callbacks).onNewMessage)==null||m.call(k,[...n.messages],"user");const S=await y(),T=await A([...n.messages],S);return n.messages.push({id:Q(),role:"assistant",content:T.result||"",created_at:new Date().toISOString(),context:T.context,matches:T.matches}),i.track("agent-message-send",{event:"success",messages:n.messages.length+1}),T.result&&((j=(M=t.callbacks).onNewMessage)==null||j.call(M,[...n.messages],"answer"),i.track("agent-message-received",{latency:$.get(!0),messages:n.messages.length})),T}catch(S){throw((z=n.messages[n.messages.length-1])==null?void 0:z.role)==="assistant"&&n.messages.pop(),i.track("agent-message-send",{event:"error",messages:n.messages.length}),S}},rate(u,p,y){var m,M,j,z;const A=n.messages.find(S=>S.id===u);if(n.chat){if(!A)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const k=((m=A.matches)==null?void 0:m.map(S=>[S.document_id,S.id]))??[];return i.track("agent-rate",{event:y?"update":"create",thumb:p===1?"up":"down",knowledge_id:((M=l.knowledge)==null?void 0:M.id)??"",matches:k,score:p}),y?d.updateRating(l.id,n.chat.id,y,{knowledge_id:((j=l.knowledge)==null?void 0:j.id)??"",message_id:u,matches:k,score:p}):d.createRating(l.id,n.chat.id,{knowledge_id:((z=l.knowledge)==null?void 0:z.id)??"",message_id:u,matches:k,score:p})},deleteRate(u){if(!n.chat)throw new Error("Chat is not initialized");return i.track("agent-rate-delete",{type:"text"}),d.deleteRating(l.id,n.chat.id,u)},async speak(u){var k,m,M;function p(){if(typeof u=="string"){if(!l.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:l.presenter.voice,input:u,ssml:!1}}if(u.type==="text"&&!u.provider){if(!l.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:l.presenter.voice,input:u.input,ssml:u.ssml}}return u}const y=p();if(i.track("agent-speak",y),$.update(),n.messages&&y.type==="text"&&(n.messages.push({id:Q(),role:"assistant",content:y.input,created_at:new Date($.get(!0)).toISOString()}),(m=(k=t.callbacks).onNewMessage)==null||m.call(k,[...n.messages],"answer")),Ne(n.chatMode))return{duration:0,video_id:"",status:"success"};if(!n.streamingManager)throw new Error("Please connect to the agent first");return n.streamingManager.speak({script:y,metadata:{chat_id:(M=n.chat)==null?void 0:M.id,agent_id:l.id}})},async interrupt({type:u}){var y,A,k;Ye(n.streamingManager,(y=n.streamingManager)==null?void 0:y.streamType,r);const p=n.messages[n.messages.length-1];i.track("agent-video-interrupt",{type:u||"click",video_duration_to_interrupt:oe.get(!0),message_duration_to_interrupt:$.get(!0)}),p.interrupted=!0,(k=(A=t.callbacks).onNewMessage)==null||k.call(A,[...n.messages],"answer"),Qe(n.streamingManager,r)}}}function At(e,t,a){const{getById:r}=Ie(t,a||Z);return r(e)}f.AgentActivityState=O,f.AgentStatus=me,f.ChatCreationFailed=H,f.ChatMode=R,f.ChatModeDowngraded=de,f.ChatProgress=q,f.ConnectionState=D,f.ConnectivityState=Y,f.DocumentType=pe,f.KnowledgeType=we,f.PlanGroup=fe,f.Providers=ve,f.RateState=ge,f.StreamEvents=b,f.StreamType=N,f.StreamingState=w,f.Subject=he,f.Transport=ye,f.UserPlan=ue,f.ValidationError=V,f.VideoType=ae,f.VoiceAccess=ke,f.WsError=le,f.createAgentManager=_t,f.getAgent=At,f.mapVideoType=Le,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})});
@@ -1,5 +1,6 @@
1
1
  import { Agent, AgentPayload, Auth, Chat, ChatPayload, ChatResponse, RatingEntity, RatingPayload, STTTokenResponse } from '../types/index';
2
2
  import { RequestOptions } from './apiClient';
3
+
3
4
  export declare function createAgentsApi(auth: Auth, host?: string, onError?: (error: Error, errorData: object) => void): {
4
5
  create(payload: AgentPayload, options?: RequestOptions): Promise<Agent>;
5
6
  getAgents(tag?: string, options?: RequestOptions): Promise<Agent[]>;
@@ -1,10 +1,11 @@
1
1
  import { Auth } from '../types/auth';
2
+
2
3
  export type RequestOptions = RequestInit & {
3
4
  skipErrorHandler?: boolean;
4
5
  };
5
6
  export declare function createClient(auth: Auth, host?: string, onError?: (error: Error, errorData: object) => void): {
6
7
  get<T = any>(url: string, options?: RequestOptions): Promise<T>;
7
- post<T_1 = any>(url: string, body?: any, options?: RequestOptions): Promise<T_1>;
8
- delete<T_2 = any>(url: string, body?: any, options?: RequestOptions): Promise<T_2>;
9
- patch<T_3 = any>(url: string, body?: any, options?: RequestOptions): Promise<T_3>;
8
+ post<T = any>(url: string, body?: any, options?: RequestOptions): Promise<T>;
9
+ delete<T = any>(url: string, body?: any, options?: RequestOptions): Promise<T>;
10
+ patch<T = any>(url: string, body?: any, options?: RequestOptions): Promise<T>;
10
11
  };
@@ -1,4 +1,5 @@
1
1
  import { Auth, CreateDocumentPayload, DocumentData, KnowledgeData, KnowledgePayload, QueryResult, RecordData } from '../types/index';
2
+
2
3
  export declare function createKnowledgeApi(auth: Auth, host?: string, onError?: (error: Error, errorData: object) => void): {
3
4
  createKnowledge(payload: KnowledgePayload, options?: RequestInit): Promise<KnowledgeData>;
4
5
  getKnowledgeBase(options?: RequestInit): Promise<KnowledgeData[]>;
@@ -1,2 +1,3 @@
1
1
  import { Auth, RtcApi } from '../../types/index';
2
+
2
3
  export declare function createStreamApi(auth: Auth, host: string, agentId: string, onError?: (error: Error, errorData: object) => void): RtcApi;
@@ -0,0 +1,5 @@
1
+ import { Auth, CreateStreamV2Options, CreateStreamV2Response } from '../../types';
2
+
3
+ export declare function createStreamApiV2(auth: Auth, host: string, agentId: string, onError?: (error: Error, errorData: object) => void): {
4
+ createStream(options: CreateStreamV2Options): Promise<CreateStreamV2Response>;
5
+ };
@@ -1,3 +1,4 @@
1
1
  import { Auth } from '../types/auth';
2
+
2
3
  export declare function getExternalId(): string;
3
4
  export declare function getAuthHeader(auth: Auth): string;
@@ -1,5 +1,6 @@
1
1
  import { ChatMode } from '../../types';
2
2
  import { BaseError } from '../base-error';
3
+
3
4
  export declare class ChatCreationFailed extends BaseError {
4
5
  constructor(mode: ChatMode, persistent: boolean);
5
6
  }
@@ -1,5 +1,6 @@
1
1
  import { ChatMode } from '../../types';
2
2
  import { BaseError } from '../base-error';
3
+
3
4
  export declare class ChatModeDowngraded extends BaseError {
4
5
  constructor(mode: ChatMode);
5
6
  }
@@ -1,4 +1,5 @@
1
1
  import { BaseError } from './base-error';
2
+
2
3
  export declare class ValidationError extends BaseError {
3
4
  key?: string;
4
5
  constructor(message: string, key?: string);
@@ -1,4 +1,5 @@
1
1
  import { BaseError } from './base-error';
2
+
2
3
  export declare class WsError extends BaseError {
3
4
  constructor(message: string);
4
5
  }
@@ -1,6 +1,7 @@
1
1
  import { StreamingManager } from '../streaming-manager';
2
2
  import { Agent, AgentManagerOptions, AgentsAPI, Chat, CreateStreamOptions } from '../../types';
3
3
  import { Analytics } from '../analytics/mixpanel';
4
+
4
5
  type ConnectToManagerOptions = AgentManagerOptions & {
5
6
  callbacks: AgentManagerOptions['callbacks'] & {
6
7
  onVideoIdChange?: (videoId: string | null) => void;
@@ -1,6 +1,7 @@
1
1
  import { Agent, AgentManager, AgentManagerOptions, Auth, Chat, ChatMode, CreateStreamOptions, Message } from '../../types';
2
2
  import { SocketManager } from '../socket-manager';
3
3
  import { StreamingManager } from '../streaming-manager';
4
+
4
5
  export interface AgentManagerItems {
5
6
  chat?: Chat;
6
7
  streamingManager?: StreamingManager<CreateStreamOptions>;
@@ -0,0 +1 @@
1
+ export {};
@@ -3,6 +3,7 @@ export interface AnalyticsOptions {
3
3
  agentId: string;
4
4
  isEnabled?: boolean;
5
5
  distinctId?: string;
6
+ mixpanelAdditionalProperties?: Record<string, any>;
6
7
  }
7
8
  export interface Analytics {
8
9
  token: string;
@@ -1,6 +1,6 @@
1
- import type { Agent, AgentsAPI, Chat } from '../../types';
2
- import { ChatMode } from '../../types';
1
+ import { Agent, AgentsAPI, Chat, ChatMode } from '../../types';
3
2
  import { Analytics } from '../analytics/mixpanel';
3
+
4
4
  export declare function getRequestHeaders(chatMode?: ChatMode): Record<string, Record<string, string>>;
5
5
  export declare function createChat(agent: Agent, agentsApi: AgentsAPI, analytics: Analytics, chatMode?: ChatMode, persist?: boolean, chat?: Chat): Promise<{
6
6
  chat: Chat | undefined;
@@ -1,2 +1,3 @@
1
1
  import { Message } from '../../types';
2
+
2
3
  export declare function getInitialMessages(initialMessages?: Message[]): Message[];
@@ -1,4 +1,5 @@
1
1
  import { CreateStreamOptions, StreamType } from '../../types';
2
2
  import { StreamingManager } from '../streaming-manager';
3
+
3
4
  export declare function validateInterrupt(streamingManager: StreamingManager<CreateStreamOptions> | undefined, streamType: StreamType | undefined, videoId: string | null): void;
4
5
  export declare function sendInterrupt(streamingManager: StreamingManager<CreateStreamOptions>, videoId: string): Promise<void>;
@@ -1,5 +1,6 @@
1
1
  import { ChatProgressCallback } from '../../types';
2
2
  import { Auth } from '../../types/auth';
3
+
3
4
  export interface SocketManager {
4
5
  socket?: WebSocket;
5
6
  disconnect: () => void;
@@ -1,6 +1,7 @@
1
1
  import { Agent, AgentManagerOptions, ChatProgress, StreamEvents } from '../../types';
2
2
  import { AgentManagerItems } from '../agent-manager';
3
3
  import { Analytics } from '../analytics/mixpanel';
4
+
4
5
  export interface ChatEventQueue {
5
6
  [sequence: number]: string;
6
7
  answer?: string;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Advanced functionality tests for streaming manager
3
+ * Tests complex scenarios, edge cases, and advanced features
4
+ */
5
+ export {};
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Business flow tests for streaming manager
3
+ * Tests critical end-to-end workflows and configurations
4
+ */
5
+ export {};
@@ -0,0 +1,43 @@
1
+ import { CreateStreamOptions, PayloadType, StreamType } from '../../types';
2
+
3
+ export declare const createStreamingLogger: (debug: boolean, prefix: string) => (message: string, extra?: any) => false | void;
4
+ /**
5
+ * Shared type for all streaming managers (LiveKit, WebRTC, etc.)
6
+ * This type represents the return value of any streaming manager implementation
7
+ */
8
+ export type StreamingManager<T extends CreateStreamOptions> = {
9
+ /**
10
+ * Method to send request to server to get clip or talk depending on payload
11
+ * @param payload The payload to send to the streaming service
12
+ */
13
+ speak(payload: PayloadType<T>): Promise<any>;
14
+ /**
15
+ * Method to close the streaming connection
16
+ */
17
+ disconnect(): Promise<void>;
18
+ /**
19
+ * Method to send data channel messages to the server
20
+ * @param payload The message payload to send
21
+ */
22
+ sendDataChannelMessage(payload: string): void;
23
+ /**
24
+ * Session identifier information, should be returned in the body of all streaming requests
25
+ */
26
+ sessionId: string;
27
+ /**
28
+ * Id of current streaming session
29
+ */
30
+ streamId: string;
31
+ /**
32
+ * Type of streaming implementation being used
33
+ */
34
+ streamType: StreamType;
35
+ /**
36
+ * Whether interrupt functionality is available for this stream
37
+ */
38
+ interruptAvailable: boolean;
39
+ /**
40
+ * Whether triggers functionality is available for this stream
41
+ */
42
+ triggersAvailable: boolean;
43
+ };
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Disconnect and cleanup tests for streaming manager
3
+ * Tests disconnection workflows, cleanup, and error handling
4
+ */
5
+ export {};
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Edge cases and branch coverage tests for streaming manager
3
+ * Tests detailed edge cases, error conditions, and branch coverage scenarios
4
+ */
5
+ export {};
@@ -0,0 +1,3 @@
1
+ import { Agent, CreateStreamOptions, StreamingManagerOptions } from '../../types';
2
+
3
+ export declare function createStreamingManager<T extends CreateStreamOptions>(agent: Agent, streamOptions: T, options: StreamingManagerOptions): Promise<any>;
@@ -1,27 +1,3 @@
1
- import { CreateStreamOptions, PayloadType, StreamType, StreamingManagerOptions } from '../../types/index';
2
- export declare function createStreamingManager<T extends CreateStreamOptions>(agentId: string, agent: T, { debug, callbacks, auth, baseURL, analytics }: StreamingManagerOptions): Promise<{
3
- /**
4
- * Method to send request to server to get clip or talk depend on you payload
5
- * @param payload
6
- */
7
- speak(payload: PayloadType<T>): Promise<import('../../types/index').SendStreamPayloadResponse>;
8
- /**
9
- * Method to close RTC connection
10
- */
11
- disconnect(): Promise<void>;
12
- /**
13
- * Method to send data channel messages to the server
14
- */
15
- sendDataChannelMessage(payload: string): void;
16
- /**
17
- * Session identifier information, should be returned in the body of all streaming requests
18
- */
19
- sessionId: string;
20
- /**
21
- * Id of current RTC stream
22
- */
23
- streamId: string;
24
- streamType: StreamType;
25
- interruptAvailable: boolean | undefined;
26
- }>;
27
- export type StreamingManager<T extends CreateStreamOptions> = Awaited<ReturnType<typeof createStreamingManager<T>>>;
1
+ export { createStreamingManager } from './factory';
2
+ export type { StreamingManager } from './common';
3
+ export * from './webrtc-manager';
@@ -0,0 +1,5 @@
1
+ import { CreateStreamOptions, StreamingManagerOptions } from '../../types';
2
+ import { StreamingManager } from './common';
3
+
4
+ export declare function createLiveKitStreamingManager<T extends CreateStreamOptions>(agentId: string, agent: T, options: StreamingManagerOptions): Promise<StreamingManager<T>>;
5
+ export type LiveKitStreamingManager<T extends CreateStreamOptions> = StreamingManager<T>;
@@ -1,4 +1,4 @@
1
- /// <reference types="node" />
2
1
  import { ConnectivityState, StreamingState } from '../../../types';
3
2
  import { VideoRTCStatsReport } from './report';
3
+
4
4
  export declare function pollStats(peerConnection: RTCPeerConnection, getIsConnected: () => boolean, onConnected: () => void, onVideoStateChange?: (state: StreamingState, statsReport?: VideoRTCStatsReport) => void, onConnectivityStateChange?: (state: ConnectivityState) => void, warmup?: boolean): NodeJS.Timeout;
@@ -1,4 +1,5 @@
1
1
  import { AnalyticsRTCStatsReport, SlimRTCStatsReport } from '../../../types';
2
+
2
3
  export interface VideoRTCStatsReport {
3
4
  webRTCStats: {
4
5
  anomalies: AnalyticsRTCStatsReport[];
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Core functionality tests for streaming manager
3
+ * Tests basic streaming manager creation, connection, and operations
4
+ */
5
+ export {};
@@ -0,0 +1,12 @@
1
+ import { ConnectionState, CreateStreamOptions, StreamEvents, StreamingManagerOptions } from '../../types';
2
+ import { createStreamingLogger, StreamingManager } from './common';
3
+
4
+ type DataChannelPayload = string | Record<string, unknown>;
5
+ export declare function mapConnectionState(state: RTCIceConnectionState): ConnectionState;
6
+ export declare const createParseDataChannelMessage: (log: ReturnType<typeof createStreamingLogger>) => (message: string) => {
7
+ subject: StreamEvents;
8
+ data: DataChannelPayload;
9
+ };
10
+ export declare function createWebRTCStreamingManager<T extends CreateStreamOptions>(agentId: string, streamOptions: T, { debug, callbacks, auth, baseURL, analytics }: StreamingManagerOptions): Promise<StreamingManager<T>>;
11
+ export type WebRTCStreamingManager<T extends CreateStreamOptions> = StreamingManager<T>;
12
+ export {};
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Utility function tests for streaming manager
3
+ * Tests helper functions like mapConnectionState and parseDataChannelMessage
4
+ */
5
+ export {};
@@ -0,0 +1,3 @@
1
+ import { AgentManagerOptions } from '../../types';
2
+
3
+ export declare const AgentManagerOptionsFactory: import('rosie').IFactory<AgentManagerOptions>;
@@ -0,0 +1,4 @@
1
+ import { Agent } from '../../types';
2
+
3
+ export declare const AgentFactory: import('rosie').IFactory<Agent>;
4
+ export declare const StreamingAgentFactory: import('rosie').IFactory<any>;
@@ -0,0 +1 @@
1
+ export declare const AgentsApiFactory: import('rosie').IFactory<any>;
@@ -0,0 +1 @@
1
+ export declare const AnalyticsFactory: import('rosie').IFactory<any>;
@@ -0,0 +1 @@
1
+ export declare const ChatFactory: import('rosie').IFactory<any>;
@@ -0,0 +1,8 @@
1
+ export { AgentManagerOptionsFactory } from './agent-manager.factory';
2
+ export { AgentFactory, StreamingAgentFactory } from './agent.factory';
3
+ export { AgentsApiFactory } from './agents-api.factory';
4
+ export { AnalyticsFactory } from './analytics.factory';
5
+ export { ChatFactory } from './chat.factory';
6
+ export { SocketManagerFactory } from './socket-manager.factory';
7
+ export { StreamApiFactory } from './stream-api.factory';
8
+ export { StreamingManagerFactory, StreamingManagerOptionsFactory } from './streaming-manager.factory';
@@ -0,0 +1 @@
1
+ export declare const SocketManagerFactory: import('rosie').IFactory<any>;
@@ -0,0 +1 @@
1
+ export declare const StreamApiFactory: import('rosie').IFactory<any>;
@@ -0,0 +1,4 @@
1
+ import { StreamingManagerOptions } from '../../types';
2
+
3
+ export declare const StreamingManagerFactory: import('rosie').IFactory<any>;
4
+ export declare const StreamingManagerOptionsFactory: import('rosie').IFactory<StreamingManagerOptions>;
@@ -2,6 +2,7 @@ import { Chat, ChatPayload, ChatResponse } from './chat';
2
2
  import { Knowledge } from './knowledge';
3
3
  import { LLM } from './llm';
4
4
  import { Presenter } from './presenter';
5
+
5
6
  export declare enum UserPlan {
6
7
  TRIAL = "trial",
7
8
  BASIC = "basic",
@@ -2,9 +2,10 @@ import { STTTokenResponse } from '../..';
2
2
  import { Auth } from '../../auth';
3
3
  import { AgentActivityState, CompatibilityMode, ConnectionState, ConnectivityState, SendStreamPayloadResponse, StreamEvents, StreamType, StreamingState } from '../../stream';
4
4
  import { SupportedStreamScript } from '../../stream-script';
5
- import type { ManagerCallbacks as StreamManagerCallbacks } from '../../stream/stream';
5
+ import { ManagerCallbacks as StreamManagerCallbacks } from '../../stream/stream';
6
6
  import { Agent } from './agent';
7
7
  import { ChatMode, ChatResponse, Interrupt, Message, RatingEntity } from './chat';
8
+
8
9
  /**
9
10
  * Types of events provided in Chat Progress Callback
10
11
  */
@@ -132,6 +133,7 @@ export interface AgentManagerOptions {
132
133
  debug?: boolean;
133
134
  enableAnalitics?: boolean;
134
135
  mixpanelKey?: string;
136
+ mixpanelAdditionalProperties?: Record<string, any>;
135
137
  /**
136
138
  * Unique ID of agent user used in analytics. Pass it to override the default way to get distinctId
137
139
  */
@@ -154,6 +156,10 @@ export interface AgentManager {
154
156
  * Get if the stream supports interrupt
155
157
  */
156
158
  getIsInterruptAvailable: () => boolean;
159
+ /**
160
+ * Get if the stream supports triggers
161
+ */
162
+ getIsTriggersAvailable: () => boolean;
157
163
  /**
158
164
  * Array of starter messages that will be sent to the agent when the chat starts
159
165
  */
@@ -1,7 +1,8 @@
1
1
  import { ExtendedTextToSpeechProviders } from '../../voice/tts';
2
2
  import { Rect } from '../../face-rect';
3
- export type videoType = 'talk' | 'clip';
4
- export type Presenter = TalkPresenter | ClipPresenter;
3
+
4
+ export type videoType = 'talk' | 'clip' | 'expressive';
5
+ export type Presenter = TalkPresenter | ClipPresenter | ExpresivePresenter;
5
6
  export interface BasePresenter {
6
7
  type: videoType;
7
8
  voice?: ExtendedTextToSpeechProviders & {
@@ -24,3 +25,6 @@ export interface ClipPresenter extends BasePresenter {
24
25
  presenter_id: string;
25
26
  is_greenscreen?: boolean;
26
27
  }
28
+ export interface ExpresivePresenter extends BasePresenter {
29
+ type: 'expressive';
30
+ }
@@ -1,4 +1,5 @@
1
1
  import { KnowledgeType } from './knowledge';
2
+
2
3
  export declare enum Subject {
3
4
  KnowledgeProcessing = "knowledge/processing",
4
5
  KnowledgeIndexing = "knowledge/indexing",
@@ -1,4 +1,5 @@
1
1
  import { KnowledgeType } from './knowledge';
2
+
2
3
  export interface RecordData {
3
4
  created_at: string;
4
5
  modified_at: string;