@d-id/client-sdk 1.1.0-beta.18 → 1.1.0-beta.20

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.
@@ -1 +1 @@
1
- (function(m,b){typeof exports=="object"&&typeof module<"u"?b(exports):typeof define=="function"&&define.amd?define(["exports"],b):(m=typeof globalThis<"u"?globalThis:m||self,b(m.index={}))})(this,function(m){"use strict";var Et=Object.defineProperty;var _t=(m,b,q)=>b in m?Et(m,b,{enumerable:!0,configurable:!0,writable:!0,value:q}):m[b]=q;var ee=(m,b,q)=>(_t(m,typeof b!="symbol"?b+"":b,q),q);class b extends Error{constructor({kind:a,description:r,error:s}){super(JSON.stringify({kind:a,description:r}));ee(this,"kind");ee(this,"description");ee(this,"error");this.kind=a,this.description=r,this.error=s}}class q extends b{constructor(t,a){super({kind:"ChatCreationFailed",description:`Failed to create ${a?"persistent":""} chat, mode: ${t}`})}}class ce extends b{constructor(t){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${t}`})}}class V extends b{constructor(a,r){super({kind:"ValidationError",description:a});ee(this,"key");this.key=r}}class de extends b{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||{}),le=(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))(le||{}),fe=(e=>(e.Created="created",e.Started="started",e.Done="done",e.Error="error",e.Rejected="rejected",e.Ready="ready",e))(fe||{}),me=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(me||{}),P=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e.DirectPlayback="DirectPlayback",e.Off="Off",e))(P||{}),X=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(X||{}),ge=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(ge||{}),he=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(he||{}),we=(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))(we||{}),te=(e=>(e.Clip="clip",e.Talk="talk",e))(te||{});const pe=e=>{switch(e){case"clip":return"clip";case"talk":return"talk";default:throw new Error(`Unknown video type: ${e}`)}};var y=(e=>(e.Start="START",e.Stop="STOP",e))(y||{}),O=(e=>(e.Strong="STRONG",e.Weak="WEAK",e.Unknown="UNKNOWN",e))(O||{}),Y=(e=>(e.Idle="IDLE",e.Talking="TALKING",e))(Y||{}),z=(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))(z||{}),M=(e=>(e.New="new",e.Fail="fail",e.Connected="connected",e.Connecting="connecting",e.Closed="closed",e.Completed="completed",e.Disconnected="disconnected",e))(M||{}),H=(e=>(e.Legacy="legacy",e.Fluent="fluent",e))(H||{}),ye=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(ye||{}),ve=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(ve||{});const Ae=45*1e3,$e="X-Playground-Chat",G="https://api.d-id.com",Be="wss://notifications.d-id.com",Le="79f81a83a67430be2bc0fd61042b8faa",ke=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)},ze=e=>[P.TextOnly,P.Playground,P.Maintenance].includes(e),re=e=>e&&[P.DirectPlayback,P.Off].includes(e);function Fe(e,t){let a;return{promise:new Promise((s,i)=>{a=setTimeout(()=>i(new Error(t)),e)}),clear:()=>clearTimeout(a)}}async function ne(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:i,clear:c}=Fe(a.timeout,a.timeoutErrorMessage),n=e().finally(c);return await Promise.race([n,i])}catch(i){if(r=i,!a.shouldRetryFn(i)||s>=a.limit)throw i;await ke(a.delayMs),a.onRetry(i)}throw r}function Ce(){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 Ne=Q();function De(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}.${Ce()}_${Ne}`;throw new Error(`Unknown auth type: ${e}`)}const Je=e=>ne(e,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:t=>t.status===429});function ae(e,t=G,a){const r=async(s,i)=>{const{skipErrorHandler:c,...n}=i||{},o=await Je(()=>fetch(t+(s!=null&&s.startsWith("/")?s:`/${s}`),{...n,headers:{...n.headers,Authorization:De(e),"Content-Type":"application/json"}}));if(!o.ok){let d=await o.text().catch(()=>`Failed to fetch with status ${o.status}`);const l=new Error(d);throw a&&!c&&a(l,{url:s,options:n,headers:o.headers}),l}return o.json()};return{get(s,i){return r(s,{...i,method:"GET"})},post(s,i,c){return r(s,{...c,body:JSON.stringify(i),method:"POST"})},delete(s,i,c){return r(s,{...c,body:JSON.stringify(i),method:"DELETE"})},patch(s,i,c){return r(s,{...c,body:JSON.stringify(i),method:"PATCH"})}}}function Re(e,t=G,a){const r=ae(e,`${t}/agents`,a);return{create(s,i){return r.post("/",s,i)},getAgents(s,i){return r.get(`/${s?`?tag=${s}`:""}`,i).then(c=>c??[])},getById(s,i){return r.get(`/${s}`,i)},delete(s,i){return r.delete(`/${s}`,void 0,i)},update(s,i,c){return r.patch(`/${s}`,i,c)},newChat(s,i,c){return r.post(`/${s}/chat`,i,c)},chat(s,i,c,n){return r.post(`/${s}/chat/${i}`,c,n)},createRating(s,i,c,n){return r.post(`/${s}/chat/${i}/ratings`,c,n)},updateRating(s,i,c,n,o){return r.patch(`/${s}/chat/${i}/ratings/${c}`,n,o)},deleteRating(s,i,c,n){return r.delete(`/${s}/chat/${i}/ratings/${c}`,n)},getSTTToken(s,i){return r.get(`/${s}/stt-token`,i)}}}const Se=e=>e.type==="clip"&&e.presenter_id.startsWith("v2_")?"clip_v2":e.type;function We(e){var s,i,c,n;const t=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",a=()=>{const o=navigator.platform;return o.toLowerCase().includes("win")?"Windows":o.toLowerCase().includes("mac")?"Mac OS X":o.toLowerCase().includes("linux")?"Linux":"Unknown"},r=e.presenter;return{$os:`${a()}`,isMobile:`${t()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:Se(r),agentVoice:{voiceId:(i=(s=e.presenter)==null?void 0:s.voice)==null?void 0:i.voice_id,provider:(n=(c=e.presenter)==null?void 0:c.voice)==null?void 0:n.type}}}const Ue=e=>e.reduce((t,a)=>t+a,0),Ee=e=>Ue(e)/e.length;function Ke(e,t,a){var o,d,l;const{event:r,...s}=e,{template:i}=(t==null?void 0:t.llm)||{},{language:c}=((o=t==null?void 0:t.presenter)==null?void 0:o.voice)||{};return{...s,llm:{...s.llm,template:i},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 ie={};const He="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function xe(e){var i,c,n,o,d,l;const t=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk",a=e.agent.presenter,r=(i=e.agent.llm)==null?void 0:i.prompt_customization,s={token:e.token||"testKey",distinct_id:e.distinctId||Ce(),agentId:e.agent.id,agentType:Se(a),owner_id:e.agent.owner_id??"",promptVersion:(c=e.agent.llm)==null?void 0:c.prompt_version,behavior:{role:r==null?void 0:r.role,personality:r==null?void 0:r.personality,instructions:(n=e.agent.llm)==null?void 0:n.instructions},temperature:(o=e.agent.llm)==null?void 0:o.temperature,knowledgeSource:r==null?void 0:r.knowledge_source,starterQuestionsCount:(l=(d=e.agent.knowledge)==null?void 0:d.starter_message)==null?void 0:l.length,topicsToAvoid:r==null?void 0:r.topics_to_avoid,maxResponseLength:r==null?void 0:r.max_response_length};return{...s,additionalProperties:{},isEnabled:e.isEnabled??!0,getRandom:Q,enrich(p){this.additionalProperties={...this.additionalProperties,...p}},async track(p,A){if(!this.isEnabled)return Promise.resolve();const{audioPath:S,...D}=A||{},R={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:p,properties:{...this.additionalProperties,...D,...s,source:t,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(He,R).then(C=>C.json())}catch(C){return console.error(C)}},linkTrack(p,A,S,D){ie[p]||(ie[p]={events:{},resolvedDependencies:[]}),D.includes(S)||D.push(S);const R=ie[p];if(R.events[S]={props:A},R.resolvedDependencies.push(S),D.every(J=>R.resolvedDependencies.includes(J))){const J=D.reduce((B,u)=>R.events[u]?{...B,...R.events[u].props}:B,{});this.track(p,J),R.resolvedDependencies=R.resolvedDependencies.filter(B=>!D.includes(B)),D.forEach(B=>{delete R.events[B]})}}}}function _e(){let e=0;return{reset:()=>e=0,update:()=>e=Date.now(),get:(t=!1)=>t?Date.now()-e:e}}const N=_e(),se=_e();function Ie(e){return e===P.Playground?{headers:{[$e]:"true"}}:{}}async function Me(e,t,a,r,s=!1,i){try{return!i&&!re(r)&&(i=await t.newChat(e.id,{persist:s},Ie(r)),a.track("agent-chat",{event:"created",chat_id:i.id,agent_id:e.id,mode:r})),{chat:i,chatMode:(i==null?void 0:i.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 qe(e){return e&&e.length>0?e:[]}function Ve(e,t,a,r,s){if(!e||!t)throw new Error("Please connect to the agent first");if(!e.interruptEnabled)throw new Error("Interrupt is not enabled for this stream");if(a!==H.Fluent)throw new Error("Interrupt only available for Fluent streams");if(!r&&!s)throw new Error("No active video to interrupt")}async function Te(e,t){const a={type:z.StreamInterrupt,videoId:t,timestamp:Date.now()};e.sendDataChannelMessage(JSON.stringify(a))}function Xe(e){return new Promise((t,a)=>{const{callbacks:r,host:s,auth:i}=e,{onMessage:c=null,onOpen:n=null,onClose:o=null,onError:d=null}=r||{},l=new WebSocket(`${s}?authorization=${De(i)}`);l.onmessage=c,l.onclose=o,l.onerror=p=>{console.error(p),d==null||d("Websocket failed to connect",p),a(p)},l.onopen=p=>{n==null||n(p),t(l)}})}async function Ye(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 Xe(e)}catch(s){if(r===t)throw s;await ke(r*500)}return a}async function Oe(e,t,a){const r=a!=null&&a.onMessage?[a.onMessage]:[],s=await Ye({auth:e,host:t,callbacks:{onError:i=>{var c;return(c=a.onError)==null?void 0:c.call(a,new de(i))},onMessage(i){const c=JSON.parse(i.data);r.forEach(n=>n(c.event,c))}}});return{socket:s,disconnect:()=>s.close(),subscribeToEvents:i=>r.push(i)}}function Qe(e){if(e.answer!==void 0)return e.answer;let t=0,a="";for(;t in e;)a+=e[t++];return a}function Ge(e,t,a,r,s){const i=r.messages[r.messages.length-1];if(!(e===X.Partial||e===X.Answer)||(i==null?void 0:i.role)!=="assistant")return;const{content:c,sequence:n}=t;e===X.Partial?a[n]=c:a.answer=c;const o=Qe(a);(i.content!==o||e===X.Answer)&&(i.content=o,s==null||s([...r.messages],e))}function Ze(e,t,a,r,s){let i={};return{clearQueue:()=>i={},onMessage:(c,n)=>{var o,d;if("content"in n)Ge(c,n,i,t,a.callbacks.onNewMessage),c===X.Answer&&e.track("agent-message-received",{messages:t.messages.length,mode:t.chatMode});else{const l=z,p=[l.StreamVideoDone,l.StreamVideoError,l.StreamVideoRejected],A=[l.StreamFailed,l.StreamVideoError,l.StreamVideoRejected],S=Ke(n,r,{mode:t.chatMode});if(c=c,c===l.StreamVideoCreated)e.linkTrack("agent-video",S,l.StreamVideoCreated,["start"]);else if(p.includes(c)){const D=c.split("/")[1];A.includes(c)?e.track("agent-video",{...S,event:D}):e.linkTrack("agent-video",{...S,event:D},c,["done"])}A.includes(c)&&((d=(o=a.callbacks).onError)==null||d.call(o,new Error(`Stream failed with event ${c}`),{data:n})),n.event===l.StreamDone&&s()}}}}function et(e,t,a,r){const s=ae(e,`${t}/agents/${a}`,r);return{createStream(i){return s.post("/streams",{output_resolution:i.output_resolution,compatibility_mode:i.compatibility_mode,stream_warmup:i.stream_warmup,session_timeout:i.session_timeout,fluent:i.fluent})},startConnection(i,c,n){return s.post(`/streams/${i}/sdp`,{session_id:n,answer:c})},addIceCandidate(i,c,n){return s.post(`/streams/${i}/ice`,{session_id:n,...c})},sendStreamRequest(i,c,n){return s.post(`/streams/${i}`,{session_id:c,...n})},close(i,c){return s.delete(`/streams/${i}`,{session_id:c})}}}function tt(e,t,a,r){const s=ae(e,`${t}/agents/${a}`,r);return{createStream(i,c){return s.post("/streams",{driver_url:i.driver_url,face:i.face,config:i.config,output_resolution:i.output_resolution,compatibility_mode:i.compatibility_mode,stream_warmup:i.stream_warmup,session_timeout:i.session_timeout,fluent:i.fluent},c)},startConnection(i,c,n,o){return s.post(`/streams/${i}/sdp`,{session_id:n,answer:c},o)},addIceCandidate(i,c,n,o){return s.post(`/streams/${i}/ice`,{session_id:n,...c},o)},sendStreamRequest(i,c,n,o){return s.post(`/streams/${i}`,{session_id:c,...n},o)},close(i,c,n){return s.delete(`/streams/${i}`,{session_id:c},n)}}}function rt(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 nt(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 at(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 it(e,t,a){const r=e.map((o,d)=>d===0?a?{timestamp:o.timestamp,duration:0,rtt:o.rtt,bytesReceived:o.bytesReceived-a.bytesReceived,bitrate:(o.bytesReceived-a.bytesReceived)*8/(t/1e3),packetsReceived:o.packetsReceived-a.packetsReceived,packetsLost:o.packetsLost-a.packetsLost,framesDropped:o.framesDropped-a.framesDropped,framesDecoded:o.framesDecoded-a.framesDecoded,jitter:o.jitter,jitterBufferDelay:o.jitterBufferDelay-a.jitterBufferDelay,jitterBufferEmittedCount:o.jitterBufferEmittedCount-a.jitterBufferEmittedCount,avgJitterDelayInInterval:(o.jitterBufferDelay-a.jitterBufferDelay)/(o.jitterBufferEmittedCount-a.jitterBufferEmittedCount),framesPerSecond:o.framesPerSecond,freezeCount:o.freezeCount-a.freezeCount,freezeDuration:o.freezeDuration-a.freezeDuration}:{timestamp:o.timestamp,rtt:o.rtt,duration:0,bytesReceived:o.bytesReceived,bitrate:o.bytesReceived*8/(t/1e3),packetsReceived:o.packetsReceived,packetsLost:o.packetsLost,framesDropped:o.framesDropped,framesDecoded:o.framesDecoded,jitter:o.jitter,jitterBufferDelay:o.jitterBufferDelay,jitterBufferEmittedCount:o.jitterBufferEmittedCount,avgJitterDelayInInterval:o.jitterBufferDelay/o.jitterBufferEmittedCount,framesPerSecond:o.framesPerSecond,freezeCount:o.freezeCount,freezeDuration:o.freezeDuration}:{timestamp:o.timestamp,duration:t*d/1e3,rtt:o.rtt,bytesReceived:o.bytesReceived-e[d-1].bytesReceived,bitrate:(o.bytesReceived-e[d-1].bytesReceived)*8/(t/1e3),packetsReceived:o.packetsReceived-e[d-1].packetsReceived,packetsLost:o.packetsLost-e[d-1].packetsLost,framesDropped:o.framesDropped-e[d-1].framesDropped,framesDecoded:o.framesDecoded-e[d-1].framesDecoded,jitter:o.jitter,jitterBufferDelay:o.jitterBufferDelay-e[d-1].jitterBufferDelay,jitterBufferEmittedCount:o.jitterBufferEmittedCount-e[d-1].jitterBufferEmittedCount,avgJitterDelayInInterval:(o.jitterBufferDelay-e[d-1].jitterBufferDelay)/(o.jitterBufferEmittedCount-e[d-1].jitterBufferEmittedCount),framesPerSecond:o.framesPerSecond,freezeCount:o.freezeCount-e[d-1].freezeCount,freezeDuration:o.freezeDuration-e[d-1].freezeDuration}),s=nt(r),i=s.reduce((o,d)=>o+(d.causes.includes("low fps")?1:0),0),c=r.filter(o=>!!o.avgJitterDelayInInterval).map(o=>o.avgJitterDelayInInterval),n=r.filter(o=>!!o.rtt).map(o=>o.rtt);return{webRTCStats:{anomalies:s,minRtt:Math.min(...n),avgRtt:Ee(n),maxRtt:Math.max(...n),aggregateReport:rt(e[0],e[e.length-1],i),minJitterDelayInInterval:Math.min(...c),maxJitterDelayInInterval:Math.max(...c),avgJitterDelayInInterval:Ee(c)},codec:e[0].codec,resolution:`${e[0].frameWidth}x${e[0].frameHeight}`}}const oe=100,st=Math.max(Math.ceil(400/oe),1),ot=.25,ct=.28;function dt(){let e=0,t,a,r=0;return s=>{for(const i of s.values())if(i&&i.type==="inbound-rtp"&&i.kind==="video"){const c=i.jitterBufferDelay,n=i.jitterBufferEmittedCount;if(a&&n>a){const l=c-t,p=n-a;r=l/p}t=c,a=n;const o=i.framesDecoded,d=o-e>0;return e=o,{isReceiving:d,avgJitterDelayInInterval:r,freezeCount:i.freezeCount}}return{isReceiving:!1,avgJitterDelayInInterval:r}}}function ut(e,t,a,r,s,i=!1){let c=[],n,o=0,d=!1,l=O.Unknown,p=O.Unknown,A=0,S=0;const D=dt();return setInterval(async()=>{const R=await e.getStats(),{isReceiving:C,avgJitterDelayInInterval:J,freezeCount:B}=D(R),u=at(R);if(C)o=0,A=B-S,p=J<ot?O.Strong:J>ct&&A>1?O.Weak:l,p!==l&&(s==null||s(p),l=p,S+=A,A=0),d||(r==null||r(y.Start),n=c[c.length-1],c=[],d=!0),c.push(u);else if(d&&(o++,o>=st)){const g=it(c,oe,n);r==null||r(y.Stop,g),t()||a(),S=B,d=!1}},oe)}let je=!1;const F=(e,t)=>je&&console.log(e,t),lt=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function be(e){switch(e){case"connected":return M.Connected;case"checking":return M.Connecting;case"failed":return M.Fail;case"new":return M.New;case"closed":return M.Closed;case"disconnected":return M.Disconnected;case"completed":return M.Completed;default:return M.New}}function ft(e){const[t,a=""]=e.split(/:(.+)/);try{const r=JSON.parse(a);return F("parsed data channel message",{subject:t,data:r}),{subject:t,data:r}}catch(r){return F("Failed to parse data channel message, returning data as string",{subject:t,rawData:a,error:r}),{subject:t,data:a}}}function mt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,report:r}){e===y.Start&&t===y.Start?a==null||a(y.Start):e===y.Stop&&t===y.Stop&&(a==null||a(y.Stop,r))}function gt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:r,report:s}){e===y.Start?a==null||a(y.Start):e===y.Stop&&(a==null||a(y.Stop,s)),t===y.Start?r==null||r(Y.Talking):t===y.Stop&&(r==null||r(Y.Idle))}function Pe({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:r,streamType:s,report:i}){s===H.Legacy?mt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,report:i}):s===H.Fluent&&gt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:r,report:i})}async function ht(e,t,{debug:a=!1,callbacks:r,auth:s,baseURL:i=G,analytics:c}){var x;je=a;let n=!1,o=!1,d=y.Stop,l=y.Stop;const{startConnection:p,sendStreamRequest:A,close:S,createStream:D,addIceCandidate:R}=t.videoType===te.Clip?et(s,i,e,r.onError):tt(s,i,e,r.onError),{id:C,offer:J,ice_servers:B,session_id:u,fluent:g,interrupt_enabled:k}=await D(t);(x=r.onStreamCreated)==null||x.call(r,{stream_id:C,session_id:u,agent_id:e});const h=new lt({iceServers:B}),E=h.createDataChannel("JanusDataChannel");if(!u)throw new Error("Could not create session_id");const v=g?H.Fluent:H.Legacy;c.enrich({"stream-type":v});const j=t.stream_warmup&&!g,L=()=>n,W=()=>{var f;n=!0,o&&((f=r.onConnectionStateChange)==null||f.call(r,M.Connected))},_=ut(h,L,W,(f,w)=>Pe({statsSignal:l=f,dataChannelSignal:v===H.Legacy?d:void 0,onVideoStateChange:r.onVideoStateChange,onAgentActivityStateChange:r.onAgentActivityStateChange,report:w,streamType:v}),f=>{var w;return(w=r.onConnectivityStateChange)==null?void 0:w.call(r,f)},j);h.onicecandidate=f=>{var w;F("peerConnection.onicecandidate",f);try{f.candidate&&f.candidate.sdpMid&&f.candidate.sdpMLineIndex!==null?R(C,{candidate:f.candidate.candidate,sdpMid:f.candidate.sdpMid,sdpMLineIndex:f.candidate.sdpMLineIndex},u):R(C,{candidate:null},u)}catch($){(w=r.onError)==null||w.call(r,$,{streamId:C})}},E.onopen=()=>{o=!0,(!j||n)&&W()};function I(f){d=f===z.StreamStarted?y.Start:y.Stop,Pe({statsSignal:v===H.Legacy?l:void 0,dataChannelSignal:d,onVideoStateChange:r.onVideoStateChange,onAgentActivityStateChange:r.onAgentActivityStateChange,streamType:v})}function T(f,w){const $=typeof w=="string"?w:w==null?void 0:w.metadata;$&&c.enrich({streamMetadata:$}),c.track("agent-chat",{event:"ready"})}const U={[z.StreamStarted]:I,[z.StreamDone]:I,[z.StreamReady]:T};E.onmessage=f=>{var Z;const{subject:w,data:$}=ft(f.data);(Z=U[w])==null||Z.call(U,w,$)},h.oniceconnectionstatechange=()=>{var w;F("peerConnection.oniceconnectionstatechange => "+h.iceConnectionState);const f=be(h.iceConnectionState);f!==M.Connected&&((w=r.onConnectionStateChange)==null||w.call(r,f))},h.ontrack=f=>{var w;F("peerConnection.ontrack",f),(w=r.onSrcObjectReady)==null||w.call(r,f.streams[0])},await h.setRemoteDescription(J),F("set remote description OK");const K=await h.createAnswer();return F("create answer OK"),await h.setLocalDescription(K),F("set local description OK"),await p(C,K,u),F("start connection OK"),{speak(f){return A(C,u,f)},async disconnect(){var f;if(C){const w=be(h.iceConnectionState);if(h){if(w===M.New){clearInterval(_);return}h.close(),h.oniceconnectionstatechange=null,h.onnegotiationneeded=null,h.onicecandidate=null,h.ontrack=null}try{w===M.Connected&&await S(C,u).catch($=>{})}catch($){F("Error on close stream connection",$)}(f=r.onAgentActivityStateChange)==null||f.call(r,Y.Idle),clearInterval(_)}},sendDataChannelMessage(f){var w,$;if(!n||E.readyState!=="open"){F("Data channel is not ready for sending messages"),(w=r.onError)==null||w.call(r,new Error("Data channel is not ready for sending messages"),{streamId:C});return}try{E.send(f)}catch(Z){F("Error sending data channel message",Z),($=r.onError)==null||$.call(r,Z,{streamId:C})}},sessionId:u,streamId:C,streamType:v,interruptEnabled:k}}function wt(e,t){const{streamOptions:a}=t??{};return{videoType:pe(e.presenter.type),output_resolution:a==null?void 0:a.outputResolution,session_timeout:a==null?void 0:a.sessionTimeout,stream_warmup:a==null?void 0:a.streamWarmup,compatibility_mode:a==null?void 0:a.compatibilityMode,fluent:a==null?void 0:a.fluent}}function pt(e,t,a,r,s){s===H.Fluent?yt(e,t,a,r,s):kt(e,t,a,r,s)}function yt(e,t,a,r,s){e===y.Start?r.track("stream-session",{event:"start","stream-type":s}):e===y.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 vt(e,t,a,r){N.get()<=0||(e===y.Start?a.linkTrack("agent-video",{event:"start",latency:N.get(!0),"stream-type":r},"start",[z.StreamVideoCreated]):e===y.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",[z.StreamVideoDone]))}function kt(e,t,a,r,s){N.get()<=0||(e===y.Start?r.linkTrack("agent-video",{event:"start",latency:N.get(!0),"stream-type":s},"start",[z.StreamVideoCreated]):e===y.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",[z.StreamVideoDone]))}function Ct(e,t,a){return N.reset(),new Promise(async(r,s)=>{try{const i=await ht(e.id,wt(e,t),{...t,analytics:a,callbacks:{...t.callbacks,onConnectionStateChange:c=>{var n,o;(o=(n=t.callbacks).onConnectionStateChange)==null||o.call(n,c),c===M.Connected&&r(i)},onVideoStateChange:(c,n)=>{var o,d;(d=(o=t.callbacks).onVideoStateChange)==null||d.call(o,c),pt(c,e,n,a,i.streamType)},onAgentActivityStateChange:c=>{var n,o;(o=(n=t.callbacks).onAgentActivityStateChange)==null||o.call(n,c),c===Y.Talking?se.update():se.reset(),vt(c===Y.Talking?y.Start:y.Stop,e,a,i.streamType)}}})}catch(i){s(i)}})}async function Dt(e,t,a,r,s){var o,d,l,p;const{chat:i,chatMode:c}=await Me(e,a,r,t.mode,t.persistentChat,s);if(c&&c!==t.mode&&(t.mode=c,(d=(o=t.callbacks).onModeChange)==null||d.call(o,c),c===P.TextOnly))return(p=(l=t.callbacks).onError)==null||p.call(l,new ce(c)),{chat:i};const n=await Ct(e,t,r);return{chat:i,streamingManager:n}}async function Rt(e,t){var C,J,B;let a=!0,r=!1;const s=t.mixpanelKey||Le,i=t.wsURL||Be,c=t.baseURL||G,n={messages:[],chatMode:t.mode||P.Functional},o=Re(t.auth,c,t.callbacks.onError),d=await o.getById(e),l=xe({token:s,agent:d,isEnabled:t.enableAnalitics,distinctId:t.distinctId}),{onMessage:p,clearQueue:A}=Ze(l,n,t,d,()=>{var u;return(u=n.socketManager)==null?void 0:u.disconnect()});n.messages=qe(t.initialMessages),(J=(C=t.callbacks).onNewMessage)==null||J.call(C,[...n.messages],"answer"),l.track("agent-sdk",{event:"loaded",...We(d)});async function S(u){var j,L,W,_,I,T,U;(L=(j=t.callbacks).onConnectionStateChange)==null||L.call(j,M.Connecting),N.reset(),r=!1,u&&!a&&(delete n.chat,(_=(W=t.callbacks).onNewMessage)==null||_.call(W,[...n.messages],"answer"));const g=re(t.mode)?Promise.resolve(void 0):Oe(t.auth,i,{onMessage:p,onError:t.callbacks.onError}),k=ne(()=>Dt(d,t,o,l,n.chat),{limit:3,timeout:Ae,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:K=>(K==null?void 0:K.message)!=="Could not connect"&&K.status!==429,delayMs:1e3}).catch(K=>{var x,f;throw R(P.Maintenance),(f=(x=t.callbacks).onConnectionStateChange)==null||f.call(x,M.Fail),K}),[h,{streamingManager:E,chat:v}]=await Promise.all([g,k]);v&&v.id!==((I=n.chat)==null?void 0:I.id)&&((U=(T=t.callbacks).onNewChat)==null||U.call(T,v.id)),n.streamingManager=E,n.socketManager=h,n.chat=v,a=!1,R((v==null?void 0:v.chat_mode)??t.mode??P.Functional)}async function D(){var u,g,k,h;(u=n.socketManager)==null||u.disconnect(),await((g=n.streamingManager)==null?void 0:g.disconnect()),r=!1,delete n.streamingManager,delete n.socketManager,(h=(k=t.callbacks).onConnectionStateChange)==null||h.call(k,M.Disconnected)}async function R(u){var g,k;u!==n.chatMode&&(l.track("agent-mode-change",{mode:u}),n.chatMode=u,n.chatMode!==P.Functional&&await D(),(k=(g=t.callbacks).onModeChange)==null||k.call(g,u))}return{agent:d,getStreamType:()=>{var u;return(u=n.streamingManager)==null?void 0:u.streamType},getIsInterruptEnabled:()=>{var u;return((u=n.streamingManager)==null?void 0:u.interruptEnabled)??!1},starterMessages:((B=d.knowledge)==null?void 0:B.starter_message)||[],getSTTToken:()=>o.getSTTToken(d.id),changeMode:R,enrichAnalytics:l.enrich,async connect(){var u;await S(!0),l.track("agent-chat",{event:"connect",chatId:(u=n.chat)==null?void 0:u.id,agentId:d.id,mode:n.chatMode})},async reconnect(){var u;await D(),await S(!1),l.track("agent-chat",{event:"reconnect",chatId:(u=n.chat)==null?void 0:u.id,agentId:d.id,mode:n.chatMode})},async disconnect(){var u;await D(),l.track("agent-chat",{event:"disconnect",chatId:(u=n.chat)==null?void 0:u.id,agentId:d.id,mode:n.chatMode})},async chat(u){var E,v,j,L,W;const g=()=>{if(re(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===P.Maintenance)throw new V("Chat is in maintenance mode");if(![P.TextOnly,P.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")}},k=async()=>{var _,I;if(!n.chat){const T=await Me(d,o,l,n.chatMode,t.persistentChat);if(!T.chat)throw new q(n.chatMode,!!t.persistentChat);n.chat=T.chat,(I=(_=t.callbacks).onNewChat)==null||I.call(_,n.chat.id)}return n.chat.id},h=async(_,I)=>ne(()=>{var T,U;return o.chat(d.id,I,{chatMode:n.chatMode,streamId:(T=n.streamingManager)==null?void 0:T.streamId,sessionId:(U=n.streamingManager)==null?void 0:U.sessionId,messages:_.map(({matches:K,...x})=>x)},{...Ie(n.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:T=>{var x,f,w,$;const U=(x=T==null?void 0:T.message)==null?void 0:x.includes("missing or invalid session_id");return!((f=T==null?void 0:T.message)==null?void 0:f.includes("Stream Error"))&&!U?(($=(w=t.callbacks).onError)==null||$.call(w,T),!1):!0},onRetry:async()=>{await D(),await S(!1)}});try{A(),g(),n.messages.push({id:Q(),role:"user",content:u,created_at:new Date(N.update()).toISOString()}),(v=(E=t.callbacks).onNewMessage)==null||v.call(E,[...n.messages],"user");const _=await k(),I=await h([...n.messages],_);return n.messages.push({id:Q(),role:"assistant",content:I.result||"",created_at:new Date().toISOString(),context:I.context,matches:I.matches,videoId:I.videoId}),r&&I.videoId&&n.streamingManager&&(r=!1,n.messages[n.messages.length-1].interrupted=!0,await Te(n.streamingManager,I.videoId)),l.track("agent-message-send",{event:"success",mode:n.chatMode,messages:n.messages.length+1}),I.result&&((L=(j=t.callbacks).onNewMessage)==null||L.call(j,[...n.messages],"answer"),l.track("agent-message-received",{latency:N.get(!0),mode:n.chatMode,messages:n.messages.length})),I}catch(_){throw r=!1,((W=n.messages[n.messages.length-1])==null?void 0:W.role)==="assistant"&&n.messages.pop(),l.track("agent-message-send",{event:"error",mode:n.chatMode,messages:n.messages.length}),_}},rate(u,g,k){var v,j,L,W;const h=n.messages.find(_=>_.id===u);if(n.chat){if(!h)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const E=((v=h.matches)==null?void 0:v.map(_=>[_.document_id,_.id]))??[];return l.track("agent-rate",{event:k?"update":"create",thumb:g===1?"up":"down",knowledge_id:((j=d.knowledge)==null?void 0:j.id)??"",mode:n.chatMode,matches:E,score:g}),k?o.updateRating(d.id,n.chat.id,k,{knowledge_id:((L=d.knowledge)==null?void 0:L.id)??"",message_id:u,matches:E,score:g}):o.createRating(d.id,n.chat.id,{knowledge_id:((W=d.knowledge)==null?void 0:W.id)??"",message_id:u,matches:E,score:g})},deleteRate(u){var g;if(!n.chat)throw new Error("Chat is not initialized");return l.track("agent-rate-delete",{type:"text",chat_id:(g=n.chat)==null?void 0:g.id,id:u,mode:n.chatMode}),o.deleteRating(d.id,n.chat.id,u)},async speak(u){var E,v,j;function g(){if(typeof u=="string"){if(!d.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:d.presenter.voice,input:u,ssml:!1}}if(u.type==="text"&&!u.provider){if(!d.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:d.presenter.voice,input:u.input,ssml:u.ssml}}return u}const k=g();if(l.track("agent-speak",k),N.update(),n.messages&&k.type==="text"&&(n.messages.push({id:Q(),role:"assistant",content:k.input,created_at:new Date(N.get(!0)).toISOString()}),(v=(E=t.callbacks).onNewMessage)==null||v.call(E,[...n.messages],"answer")),ze(n.chatMode))return{duration:0,status:"success"};if(!n.streamingManager)throw new Error("Please connect to the agent first");return n.streamingManager.speak({script:k,metadata:{chat_id:(j=n.chat)==null?void 0:j.id,agent_id:d.id}})},async interrupt({type:u}){var h,E,v,j,L;const g=n.messages[n.messages.length-1],k=(g==null?void 0:g.role)==="user";if(Ve(n.streamingManager,n.chat,(h=n.streamingManager)==null?void 0:h.streamType,k,!!(g!=null&&g.videoId)),l.track("agent-video-interrupt",{type:u||"click",stream_id:(E=n.streamingManager)==null?void 0:E.streamId,agent_id:d.id,owner_id:d.owner_id,video_duration_to_interrupt:se.get(!0),message_duration_to_interrupt:N.get(!0),chat_id:(v=n.chat)==null?void 0:v.id,mode:n.chatMode,queued_interrupt:k}),k){r=!0;return}g.interrupted=!0,(L=(j=t.callbacks).onNewMessage)==null||L.call(j,[...n.messages],"answer"),Te(n.streamingManager,g.videoId)}}}function St(e,t,a){const{getById:r}=Re(t,a||G);return r(e)}m.AgentActivityState=Y,m.AgentStatus=fe,m.ChatCreationFailed=q,m.ChatMode=P,m.ChatModeDowngraded=ce,m.ChatProgress=X,m.ConnectionState=M,m.ConnectivityState=O,m.DocumentType=we,m.KnowledgeType=he,m.PlanGroup=le,m.Providers=ye,m.RateState=me,m.StreamEvents=z,m.StreamType=H,m.StreamingState=y,m.Subject=ge,m.UserPlan=ue,m.ValidationError=V,m.VideoType=te,m.VoiceAccess=ve,m.WsError=de,m.createAgentManager=Rt,m.getAgent=St,m.mapVideoType=pe,Object.defineProperty(m,Symbol.toStringTag,{value:"Module"})});
1
+ (function(m,A){typeof exports=="object"&&typeof module<"u"?A(exports):typeof define=="function"&&define.amd?define(["exports"],A):(m=typeof globalThis<"u"?globalThis:m||self,A(m.index={}))})(this,function(m){"use strict";var Rt=Object.defineProperty;var St=(m,A,x)=>A in m?Rt(m,A,{enumerable:!0,configurable:!0,writable:!0,value:x}):m[A]=x;var O=(m,A,x)=>(St(m,typeof A!="symbol"?A+"":A,x),x);class A extends Error{constructor({kind:a,description:r,error:s}){super(JSON.stringify({kind:a,description:r}));O(this,"kind");O(this,"description");O(this,"error");this.kind=a,this.description=r,this.error=s}}class x extends A{constructor(t,a){super({kind:"ChatCreationFailed",description:`Failed to create ${a?"persistent":""} chat, mode: ${t}`})}}class se extends A{constructor(t){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${t}`})}}class V extends A{constructor(a,r){super({kind:"ValidationError",description:a});O(this,"key");this.key=r}}class oe extends A{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||{}),b=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e.DirectPlayback="DirectPlayback",e))(b||{}),X=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(X||{}),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||{}),ee=(e=>(e.Clip="clip",e.Talk="talk",e))(ee||{});const he=e=>{switch(e){case"clip":return"clip";case"talk":return"talk";default:throw new Error(`Unknown video type: ${e}`)}};var y=(e=>(e.Start="START",e.Stop="STOP",e))(y||{}),Q=(e=>(e.Strong="STRONG",e.Weak="WEAK",e.Unknown="UNKNOWN",e))(Q||{}),Y=(e=>(e.Idle="IDLE",e.Talking="TALKING",e))(Y||{}),z=(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))(z||{}),M=(e=>(e.New="new",e.Fail="fail",e.Connected="connected",e.Connecting="connecting",e.Closed="closed",e.Completed="completed",e.Disconnected="disconnected",e))(M||{}),H=(e=>(e.Legacy="legacy",e.Fluent="fluent",e))(H||{}),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 je=45*1e3,Ae="X-Playground-Chat",Z="https://api.d-id.com",Pe="wss://notifications.d-id.com",Be="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,a=>a.toString(16).padStart(2,"0")).join("").slice(0,13)},$e=e=>[b.TextOnly,b.Playground,b.Maintenance].includes(e);function Le(e,t){let a;return{promise:new Promise((s,i)=>{a=setTimeout(()=>i(new Error(t)),e)}),clear:()=>clearTimeout(a)}}async function te(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:i,clear:c}=Le(a.timeout,a.timeoutErrorMessage),n=e().finally(c);return await Promise.race([n,i])}catch(i){if(r=i,!a.shouldRetryFn(i)||s>=a.limit)throw i;await ye(a.delayMs),a.onRetry(i)}throw r}function ve(){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 ze=G();function ke(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}.${ve()}_${ze}`;throw new Error(`Unknown auth type: ${e}`)}const Fe=e=>te(e,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:t=>t.status===429});function re(e,t=Z,a){const r=async(s,i)=>{const{skipErrorHandler:c,...n}=i||{},o=await Fe(()=>fetch(t+(s!=null&&s.startsWith("/")?s:`/${s}`),{...n,headers:{...n.headers,Authorization:ke(e),"Content-Type":"application/json"}}));if(!o.ok){let d=await o.text().catch(()=>`Failed to fetch with status ${o.status}`);const u=new Error(d);throw a&&!c&&a(u,{url:s,options:n,headers:o.headers}),u}return o.json()};return{get(s,i){return r(s,{...i,method:"GET"})},post(s,i,c){return r(s,{...c,body:JSON.stringify(i),method:"POST"})},delete(s,i,c){return r(s,{...c,body:JSON.stringify(i),method:"DELETE"})},patch(s,i,c){return r(s,{...c,body:JSON.stringify(i),method:"PATCH"})}}}function De(e,t=Z,a){const r=re(e,`${t}/agents`,a);return{create(s,i){return r.post("/",s,i)},getAgents(s,i){return r.get(`/${s?`?tag=${s}`:""}`,i).then(c=>c??[])},getById(s,i){return r.get(`/${s}`,i)},delete(s,i){return r.delete(`/${s}`,void 0,i)},update(s,i,c){return r.patch(`/${s}`,i,c)},newChat(s,i,c){return r.post(`/${s}/chat`,i,c)},chat(s,i,c,n){return r.post(`/${s}/chat/${i}`,c,n)},createRating(s,i,c,n){return r.post(`/${s}/chat/${i}/ratings`,c,n)},updateRating(s,i,c,n,o){return r.patch(`/${s}/chat/${i}/ratings/${c}`,n,o)},deleteRating(s,i,c,n){return r.delete(`/${s}/chat/${i}/ratings/${c}`,n)},getSTTToken(s,i){return r.get(`/${s}/stt-token`,i)}}}const Ce=e=>e.type==="clip"&&e.presenter_id.startsWith("v2_")?"clip_v2":e.type;function Ne(e){var s,i,c,n;const t=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",a=()=>{const o=navigator.platform;return o.toLowerCase().includes("win")?"Windows":o.toLowerCase().includes("mac")?"Mac OS X":o.toLowerCase().includes("linux")?"Linux":"Unknown"},r=e.presenter;return{$os:`${a()}`,isMobile:`${t()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:Ce(r),agentVoice:{voiceId:(i=(s=e.presenter)==null?void 0:s.voice)==null?void 0:i.voice_id,provider:(n=(c=e.presenter)==null?void 0:c.voice)==null?void 0:n.type}}}const Je=e=>e.reduce((t,a)=>t+a,0),Re=e=>Je(e)/e.length;function We(e,t,a){var o,d,u;const{event:r,...s}=e,{template:i}=(t==null?void 0:t.llm)||{},{language:c}=((o=t==null?void 0:t.presenter)==null?void 0:o.voice)||{};return{...s,llm:{...s.llm,template:i},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"?(u=t==null?void 0:t.presenter)==null?void 0:u.stitch:void 0,...a}}let ne={};const Ue="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function Ke(e){var i,c,n,o,d,u;const t=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk",a=e.agent.presenter,r=(i=e.agent.llm)==null?void 0:i.prompt_customization,s={token:e.token||"testKey",distinct_id:e.distinctId||ve(),agentId:e.agent.id,agentType:Ce(a),owner_id:e.agent.owner_id??"",promptVersion:(c=e.agent.llm)==null?void 0:c.prompt_version,behavior:{role:r==null?void 0:r.role,personality:r==null?void 0:r.personality,instructions:(n=e.agent.llm)==null?void 0:n.instructions},temperature:(o=e.agent.llm)==null?void 0:o.temperature,knowledgeSource:r==null?void 0:r.knowledge_source,starterQuestionsCount:(u=(d=e.agent.knowledge)==null?void 0:d.starter_message)==null?void 0:u.length,topicsToAvoid:r==null?void 0:r.topics_to_avoid,maxResponseLength:r==null?void 0:r.max_response_length};return{...s,additionalProperties:{},isEnabled:e.isEnabled??!0,getRandom:G,enrich(p){this.additionalProperties={...this.additionalProperties,...p}},async track(p,P){if(!this.isEnabled)return Promise.resolve();const{audioPath:S,...D}=P||{},C={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:p,properties:{...this.additionalProperties,...D,...s,source:t,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(Ue,C).then(R=>R.json())}catch(R){return console.error(R)}},linkTrack(p,P,S,D){ne[p]||(ne[p]={events:{},resolvedDependencies:[]}),D.includes(S)||D.push(S);const C=ne[p];if(C.events[S]={props:P},C.resolvedDependencies.push(S),D.every(J=>C.resolvedDependencies.includes(J))){const J=D.reduce(($,l)=>C.events[l]?{...$,...C.events[l].props}:$,{});this.track(p,J),C.resolvedDependencies=C.resolvedDependencies.filter($=>!D.includes($)),D.forEach($=>{delete C.events[$]})}}}}function Se(){let e=0;return{reset:()=>e=0,update:()=>e=Date.now(),get:(t=!1)=>t?Date.now()-e:e}}const N=Se(),ae=Se();function Ee(e){return e===b.Playground?{headers:{[Ae]:"true"}}:{}}async function Ie(e,t,a,r,s=!1,i){try{return!i&&r!==b.DirectPlayback&&(i=await t.newChat(e.id,{persist:s},Ee(r)),a.track("agent-chat",{event:"created",chat_id:i.id,agent_id:e.id,mode:r})),{chat:i,chatMode:(i==null?void 0:i.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 He(e){return e&&e.length>0?e:[]}function xe(e,t,a,r,s){if(!e||!t)throw new Error("Please connect to the agent first");if(!e.interruptAvailable)throw new Error("Interrupt is not enabled for this stream");if(a!==H.Fluent)throw new Error("Interrupt only available for Fluent streams");if(!r&&!s)throw new Error("No active video to interrupt")}async function _e(e,t){const a={type:z.StreamInterrupt,videoId:t,timestamp:Date.now()};e.sendDataChannelMessage(JSON.stringify(a))}function qe(e){return new Promise((t,a)=>{const{callbacks:r,host:s,auth:i}=e,{onMessage:c=null,onOpen:n=null,onClose:o=null,onError:d=null}=r||{},u=new WebSocket(`${s}?authorization=${ke(i)}`);u.onmessage=c,u.onclose=o,u.onerror=p=>{console.error(p),d==null||d("Websocket failed to connect",p),a(p)},u.onopen=p=>{n==null||n(p),t(u)}})}async function Ve(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 qe(e)}catch(s){if(r===t)throw s;await ye(r*500)}return a}async function Xe(e,t,a){const r=a!=null&&a.onMessage?[a.onMessage]:[],s=await Ve({auth:e,host:t,callbacks:{onError:i=>{var c;return(c=a.onError)==null?void 0:c.call(a,new oe(i))},onMessage(i){const c=JSON.parse(i.data);r.forEach(n=>n(c.event,c))}}});return{socket:s,disconnect:()=>s.close(),subscribeToEvents:i=>r.push(i)}}function Ye(e){if(e.answer!==void 0)return e.answer;let t=0,a="";for(;t in e;)a+=e[t++];return a}function Qe(e,t,a,r,s){const i=r.messages[r.messages.length-1];if(!(e===X.Partial||e===X.Answer)||(i==null?void 0:i.role)!=="assistant")return;const{content:c,sequence:n}=t;e===X.Partial?a[n]=c:a.answer=c;const o=Ye(a);(i.content!==o||e===X.Answer)&&(i.content=o,s==null||s([...r.messages],e))}function Ge(e,t,a,r,s){let i={};return{clearQueue:()=>i={},onMessage:(c,n)=>{var o,d;if("content"in n)Qe(c,n,i,t,a.callbacks.onNewMessage),c===X.Answer&&e.track("agent-message-received",{messages:t.messages.length,mode:t.chatMode});else{const u=z,p=[u.StreamVideoDone,u.StreamVideoError,u.StreamVideoRejected],P=[u.StreamFailed,u.StreamVideoError,u.StreamVideoRejected],S=We(n,r,{mode:t.chatMode});if(c=c,c===u.StreamVideoCreated)e.linkTrack("agent-video",S,u.StreamVideoCreated,["start"]);else if(p.includes(c)){const D=c.split("/")[1];P.includes(c)?e.track("agent-video",{...S,event:D}):e.linkTrack("agent-video",{...S,event:D},c,["done"])}P.includes(c)&&((d=(o=a.callbacks).onError)==null||d.call(o,new Error(`Stream failed with event ${c}`),{data:n})),n.event===u.StreamDone&&s()}}}}function Ze(e,t,a,r){const s=re(e,`${t}/agents/${a}`,r);return{createStream(i){return s.post("/streams",{output_resolution:i.output_resolution,compatibility_mode:i.compatibility_mode,stream_warmup:i.stream_warmup,session_timeout:i.session_timeout,fluent:i.fluent})},startConnection(i,c,n){return s.post(`/streams/${i}/sdp`,{session_id:n,answer:c})},addIceCandidate(i,c,n){return s.post(`/streams/${i}/ice`,{session_id:n,...c})},sendStreamRequest(i,c,n){return s.post(`/streams/${i}`,{session_id:c,...n})},close(i,c){return s.delete(`/streams/${i}`,{session_id:c})}}}function Oe(e,t,a,r){const s=re(e,`${t}/agents/${a}`,r);return{createStream(i,c){return s.post("/streams",{driver_url:i.driver_url,face:i.face,config:i.config,output_resolution:i.output_resolution,compatibility_mode:i.compatibility_mode,stream_warmup:i.stream_warmup,session_timeout:i.session_timeout,fluent:i.fluent},c)},startConnection(i,c,n,o){return s.post(`/streams/${i}/sdp`,{session_id:n,answer:c},o)},addIceCandidate(i,c,n,o){return s.post(`/streams/${i}/ice`,{session_id:n,...c},o)},sendStreamRequest(i,c,n,o){return s.post(`/streams/${i}`,{session_id:c,...n},o)},close(i,c,n){return s.delete(`/streams/${i}`,{session_id:c},n)}}}function et(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 tt(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 rt(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 nt(e,t,a){const r=e.map((o,d)=>d===0?a?{timestamp:o.timestamp,duration:0,rtt:o.rtt,bytesReceived:o.bytesReceived-a.bytesReceived,bitrate:(o.bytesReceived-a.bytesReceived)*8/(t/1e3),packetsReceived:o.packetsReceived-a.packetsReceived,packetsLost:o.packetsLost-a.packetsLost,framesDropped:o.framesDropped-a.framesDropped,framesDecoded:o.framesDecoded-a.framesDecoded,jitter:o.jitter,jitterBufferDelay:o.jitterBufferDelay-a.jitterBufferDelay,jitterBufferEmittedCount:o.jitterBufferEmittedCount-a.jitterBufferEmittedCount,avgJitterDelayInInterval:(o.jitterBufferDelay-a.jitterBufferDelay)/(o.jitterBufferEmittedCount-a.jitterBufferEmittedCount),framesPerSecond:o.framesPerSecond,freezeCount:o.freezeCount-a.freezeCount,freezeDuration:o.freezeDuration-a.freezeDuration}:{timestamp:o.timestamp,rtt:o.rtt,duration:0,bytesReceived:o.bytesReceived,bitrate:o.bytesReceived*8/(t/1e3),packetsReceived:o.packetsReceived,packetsLost:o.packetsLost,framesDropped:o.framesDropped,framesDecoded:o.framesDecoded,jitter:o.jitter,jitterBufferDelay:o.jitterBufferDelay,jitterBufferEmittedCount:o.jitterBufferEmittedCount,avgJitterDelayInInterval:o.jitterBufferDelay/o.jitterBufferEmittedCount,framesPerSecond:o.framesPerSecond,freezeCount:o.freezeCount,freezeDuration:o.freezeDuration}:{timestamp:o.timestamp,duration:t*d/1e3,rtt:o.rtt,bytesReceived:o.bytesReceived-e[d-1].bytesReceived,bitrate:(o.bytesReceived-e[d-1].bytesReceived)*8/(t/1e3),packetsReceived:o.packetsReceived-e[d-1].packetsReceived,packetsLost:o.packetsLost-e[d-1].packetsLost,framesDropped:o.framesDropped-e[d-1].framesDropped,framesDecoded:o.framesDecoded-e[d-1].framesDecoded,jitter:o.jitter,jitterBufferDelay:o.jitterBufferDelay-e[d-1].jitterBufferDelay,jitterBufferEmittedCount:o.jitterBufferEmittedCount-e[d-1].jitterBufferEmittedCount,avgJitterDelayInInterval:(o.jitterBufferDelay-e[d-1].jitterBufferDelay)/(o.jitterBufferEmittedCount-e[d-1].jitterBufferEmittedCount),framesPerSecond:o.framesPerSecond,freezeCount:o.freezeCount-e[d-1].freezeCount,freezeDuration:o.freezeDuration-e[d-1].freezeDuration}),s=tt(r),i=s.reduce((o,d)=>o+(d.causes.includes("low fps")?1:0),0),c=r.filter(o=>!!o.avgJitterDelayInInterval).map(o=>o.avgJitterDelayInInterval),n=r.filter(o=>!!o.rtt).map(o=>o.rtt);return{webRTCStats:{anomalies:s,minRtt:Math.min(...n),avgRtt:Re(n),maxRtt:Math.max(...n),aggregateReport:et(e[0],e[e.length-1],i),minJitterDelayInInterval:Math.min(...c),maxJitterDelayInInterval:Math.max(...c),avgJitterDelayInInterval:Re(c)},codec:e[0].codec,resolution:`${e[0].frameWidth}x${e[0].frameHeight}`}}const ie=100,at=Math.max(Math.ceil(400/ie),1),it=.25,st=.28;function ot(){let e=0,t,a,r=0;return s=>{for(const i of s.values())if(i&&i.type==="inbound-rtp"&&i.kind==="video"){const c=i.jitterBufferDelay,n=i.jitterBufferEmittedCount;if(a&&n>a){const u=c-t,p=n-a;r=u/p}t=c,a=n;const o=i.framesDecoded,d=o-e>0;return e=o,{isReceiving:d,avgJitterDelayInInterval:r,freezeCount:i.freezeCount}}return{isReceiving:!1,avgJitterDelayInInterval:r}}}function ct(e,t,a,r,s,i=!1){let c=[],n,o=0,d=!1,u=Q.Unknown,p=Q.Unknown,P=0,S=0;const D=ot();return setInterval(async()=>{const C=await e.getStats(),{isReceiving:R,avgJitterDelayInInterval:J,freezeCount:$}=D(C),l=rt(C);if(R)o=0,P=$-S,p=J<it?Q.Strong:J>st&&P>1?Q.Weak:u,p!==u&&(s==null||s(p),u=p,S+=P,P=0),d||(r==null||r(y.Start),n=c[c.length-1],c=[],d=!0),c.push(l);else if(d&&(o++,o>=at)){const h=nt(c,ie,n);r==null||r(y.Stop,h),t()||a(),S=$,d=!1}},ie)}let Me=!1;const F=(e,t)=>Me&&console.log(e,t),dt=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function Te(e){switch(e){case"connected":return M.Connected;case"checking":return M.Connecting;case"failed":return M.Fail;case"new":return M.New;case"closed":return M.Closed;case"disconnected":return M.Disconnected;case"completed":return M.Completed;default:return M.New}}function lt(e){const[t,a=""]=e.split(/:(.+)/);try{const r=JSON.parse(a);return F("parsed data channel message",{subject:t,data:r}),{subject:t,data:r}}catch(r){return F("Failed to parse data channel message, returning data as string",{subject:t,rawData:a,error:r}),{subject:t,data:a}}}function ut({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,report:r}){e===y.Start&&t===y.Start?a==null||a(y.Start):e===y.Stop&&t===y.Stop&&(a==null||a(y.Stop,r))}function ft({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:r,report:s}){e===y.Start?a==null||a(y.Start):e===y.Stop&&(a==null||a(y.Stop,s)),t===y.Start?r==null||r(Y.Talking):t===y.Stop&&(r==null||r(Y.Idle))}function be({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:r,streamType:s,report:i}){s===H.Legacy?ut({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,report:i}):s===H.Fluent&&ft({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:r,report:i})}async function mt(e,t,{debug:a=!1,callbacks:r,auth:s,baseURL:i=Z,analytics:c}){Me=a;let n=!1,o=!1,d=y.Stop,u=y.Stop;const{startConnection:p,sendStreamRequest:P,close:S,createStream:D,addIceCandidate:C}=t.videoType===ee.Clip?Ze(s,i,e,r.onError):Oe(s,i,e,r.onError),{id:R,offer:J,ice_servers:$,session_id:l,fluent:h,interrupt_enabled:k}=await D(t),w=new dt({iceServers:$}),E=w.createDataChannel("JanusDataChannel");if(!l)throw new Error("Could not create session_id");const v=h?H.Fluent:H.Legacy;c.enrich({"stream-type":v});const j=t.stream_warmup&&!h,L=()=>n,W=()=>{var f;n=!0,o&&((f=r.onConnectionStateChange)==null||f.call(r,M.Connected))},I=ct(w,L,W,(f,g)=>be({statsSignal:u=f,dataChannelSignal:v===H.Legacy?d:void 0,onVideoStateChange:r.onVideoStateChange,onAgentActivityStateChange:r.onAgentActivityStateChange,report:g,streamType:v}),f=>{var g;return(g=r.onConnectivityStateChange)==null?void 0:g.call(r,f)},j);w.onicecandidate=f=>{var g;F("peerConnection.onicecandidate",f);try{f.candidate&&f.candidate.sdpMid&&f.candidate.sdpMLineIndex!==null?C(R,{candidate:f.candidate.candidate,sdpMid:f.candidate.sdpMid,sdpMLineIndex:f.candidate.sdpMLineIndex},l):C(R,{candidate:null},l)}catch(B){(g=r.onError)==null||g.call(r,B,{streamId:R})}},E.onopen=()=>{o=!0,(!j||n)&&W()};function _(f){d=f===z.StreamStarted?y.Start:y.Stop,be({statsSignal:v===H.Legacy?u:void 0,dataChannelSignal:d,onVideoStateChange:r.onVideoStateChange,onAgentActivityStateChange:r.onAgentActivityStateChange,streamType:v})}function T(f,g){const B=typeof g=="string"?g:g==null?void 0:g.metadata;B&&c.enrich({streamMetadata:B}),c.track("agent-chat",{event:"ready"})}const U={[z.StreamStarted]:_,[z.StreamDone]:_,[z.StreamReady]:T};E.onmessage=f=>{var q;const{subject:g,data:B}=lt(f.data);(q=U[g])==null||q.call(U,g,B)},w.oniceconnectionstatechange=()=>{var g;F("peerConnection.oniceconnectionstatechange => "+w.iceConnectionState);const f=Te(w.iceConnectionState);f!==M.Connected&&((g=r.onConnectionStateChange)==null||g.call(r,f))},w.ontrack=f=>{var g;F("peerConnection.ontrack",f),(g=r.onSrcObjectReady)==null||g.call(r,f.streams[0])},await w.setRemoteDescription(J),F("set remote description OK");const K=await w.createAnswer();return F("create answer OK"),await w.setLocalDescription(K),F("set local description OK"),await p(R,K,l),F("start connection OK"),{speak(f){return P(R,l,f)},async disconnect(){var f;if(R){const g=Te(w.iceConnectionState);if(w){if(g===M.New){clearInterval(I);return}w.close(),w.oniceconnectionstatechange=null,w.onnegotiationneeded=null,w.onicecandidate=null,w.ontrack=null}try{g===M.Connected&&await S(R,l).catch(B=>{})}catch(B){F("Error on close stream connection",B)}(f=r.onAgentActivityStateChange)==null||f.call(r,Y.Idle),clearInterval(I)}},sendDataChannelMessage(f){var g,B;if(!n||E.readyState!=="open"){F("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:R});return}try{E.send(f)}catch(q){F("Error sending data channel message",q),(B=r.onError)==null||B.call(r,q,{streamId:R})}},sessionId:l,streamId:R,streamType:v,interruptAvailable:k}}function gt(e,t){const{streamOptions:a}=t??{};return{videoType:he(e.presenter.type),output_resolution:a==null?void 0:a.outputResolution,session_timeout:a==null?void 0:a.sessionTimeout,stream_warmup:a==null?void 0:a.streamWarmup,compatibility_mode:a==null?void 0:a.compatibilityMode,fluent:a==null?void 0:a.fluent}}function ht(e,t,a,r,s){s===H.Fluent?wt(e,t,a,r,s):yt(e,t,a,r,s)}function wt(e,t,a,r,s){e===y.Start?r.track("stream-session",{event:"start","stream-type":s}):e===y.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 pt(e,t,a,r){N.get()<=0||(e===y.Start?a.linkTrack("agent-video",{event:"start",latency:N.get(!0),"stream-type":r},"start",[z.StreamVideoCreated]):e===y.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",[z.StreamVideoDone]))}function yt(e,t,a,r,s){N.get()<=0||(e===y.Start?r.linkTrack("agent-video",{event:"start",latency:N.get(!0),"stream-type":s},"start",[z.StreamVideoCreated]):e===y.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",[z.StreamVideoDone]))}function vt(e,t,a){return N.reset(),new Promise(async(r,s)=>{try{const i=await mt(e.id,gt(e,t),{...t,analytics:a,callbacks:{...t.callbacks,onConnectionStateChange:c=>{var n,o;(o=(n=t.callbacks).onConnectionStateChange)==null||o.call(n,c),c===M.Connected&&r(i)},onVideoStateChange:(c,n)=>{var o,d;(d=(o=t.callbacks).onVideoStateChange)==null||d.call(o,c),ht(c,e,n,a,i.streamType)},onAgentActivityStateChange:c=>{var n,o;(o=(n=t.callbacks).onAgentActivityStateChange)==null||o.call(n,c),c===Y.Talking?ae.update():ae.reset(),pt(c===Y.Talking?y.Start:y.Stop,e,a,i.streamType)}}})}catch(i){s(i)}})}async function kt(e,t,a,r,s){var o,d,u,p;const{chat:i,chatMode:c}=await Ie(e,a,r,t.mode,t.persistentChat,s);if(c&&c!==t.mode&&(t.mode=c,(d=(o=t.callbacks).onModeChange)==null||d.call(o,c),c===b.TextOnly))return(p=(u=t.callbacks).onError)==null||p.call(u,new se(c)),{chat:i};const n=await vt(e,t,r);return{chat:i,streamingManager:n}}async function Dt(e,t){var R,J,$;let a=!0,r=!1;const s=t.mixpanelKey||Be,i=t.wsURL||Pe,c=t.baseURL||Z,n={messages:[],chatMode:t.mode||b.Functional},o=De(t.auth,c,t.callbacks.onError),d=await o.getById(e),u=Ke({token:s,agent:d,isEnabled:t.enableAnalitics,distinctId:t.distinctId}),{onMessage:p,clearQueue:P}=Ge(u,n,t,d,()=>{var l;return(l=n.socketManager)==null?void 0:l.disconnect()});n.messages=He(t.initialMessages),(J=(R=t.callbacks).onNewMessage)==null||J.call(R,[...n.messages],"answer"),u.track("agent-sdk",{event:"loaded",...Ne(d)});async function S(l){var j,L,W,I,_,T,U;(L=(j=t.callbacks).onConnectionStateChange)==null||L.call(j,M.Connecting),N.reset(),r=!1,l&&!a&&(delete n.chat,(I=(W=t.callbacks).onNewMessage)==null||I.call(W,[...n.messages],"answer"));const h=t.mode===b.DirectPlayback?Promise.resolve(void 0):Xe(t.auth,i,{onMessage:p,onError:t.callbacks.onError}),k=te(()=>kt(d,t,o,u,n.chat),{limit:3,timeout:je,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:K=>(K==null?void 0:K.message)!=="Could not connect"&&K.status!==429,delayMs:1e3}).catch(K=>{var f,g;throw C(b.Maintenance),(g=(f=t.callbacks).onConnectionStateChange)==null||g.call(f,M.Fail),K}),[w,{streamingManager:E,chat:v}]=await Promise.all([h,k]);v&&v.id!==((_=n.chat)==null?void 0:_.id)&&((U=(T=t.callbacks).onNewChat)==null||U.call(T,v.id)),n.streamingManager=E,n.socketManager=w,n.chat=v,a=!1,C((v==null?void 0:v.chat_mode)??t.mode??b.Functional)}async function D(){var l,h,k,w;(l=n.socketManager)==null||l.disconnect(),await((h=n.streamingManager)==null?void 0:h.disconnect()),r=!1,delete n.streamingManager,delete n.socketManager,(w=(k=t.callbacks).onConnectionStateChange)==null||w.call(k,M.Disconnected)}async function C(l){var h,k;l!==n.chatMode&&(u.track("agent-mode-change",{mode:l}),n.chatMode=l,n.chatMode!==b.Functional&&await D(),(k=(h=t.callbacks).onModeChange)==null||k.call(h,l))}return{agent:d,getStreamType:()=>{var l;return(l=n.streamingManager)==null?void 0:l.streamType},getIsInterruptAvailable:()=>{var l;return((l=n.streamingManager)==null?void 0:l.interruptAvailable)??!1},starterMessages:(($=d.knowledge)==null?void 0:$.starter_message)||[],getSTTToken:()=>o.getSTTToken(d.id),changeMode:C,enrichAnalytics:u.enrich,async connect(){var l;await S(!0),u.track("agent-chat",{event:"connect",chatId:(l=n.chat)==null?void 0:l.id,agentId:d.id,mode:n.chatMode})},async reconnect(){var l;await D(),await S(!1),u.track("agent-chat",{event:"reconnect",chatId:(l=n.chat)==null?void 0:l.id,agentId:d.id,mode:n.chatMode})},async disconnect(){var l;await D(),u.track("agent-chat",{event:"disconnect",chatId:(l=n.chat)==null?void 0:l.id,agentId:d.id,mode:n.chatMode})},async chat(l){var E,v,j,L,W;const h=()=>{if(t.mode===b.DirectPlayback)throw new V("Direct playback is enabled, chat is disabled");if(l.length>=800)throw new V("Message cannot be more than 800 characters");if(l.length===0)throw new V("Message cannot be empty");if(n.chatMode===b.Maintenance)throw new V("Chat is in maintenance mode");if(![b.TextOnly,b.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")}},k=async()=>{var I,_;if(!n.chat){const T=await Ie(d,o,u,n.chatMode,t.persistentChat);if(!T.chat)throw new x(n.chatMode,!!t.persistentChat);n.chat=T.chat,(_=(I=t.callbacks).onNewChat)==null||_.call(I,n.chat.id)}return n.chat.id},w=async(I,_)=>te(()=>{var T,U;return o.chat(d.id,_,{chatMode:n.chatMode,streamId:(T=n.streamingManager)==null?void 0:T.streamId,sessionId:(U=n.streamingManager)==null?void 0:U.sessionId,messages:I.map(({matches:K,...f})=>f)},{...Ee(n.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:T=>{var f,g,B,q;const U=(f=T==null?void 0:T.message)==null?void 0:f.includes("missing or invalid session_id");return!((g=T==null?void 0:T.message)==null?void 0:g.includes("Stream Error"))&&!U?((q=(B=t.callbacks).onError)==null||q.call(B,T),!1):!0},onRetry:async()=>{await D(),await S(!1)}});try{P(),h(),n.messages.push({id:G(),role:"user",content:l,created_at:new Date(N.update()).toISOString()}),(v=(E=t.callbacks).onNewMessage)==null||v.call(E,[...n.messages],"user");const I=await k(),_=await w([...n.messages],I);return n.messages.push({id:G(),role:"assistant",content:_.result||"",created_at:new Date().toISOString(),context:_.context,matches:_.matches,videoId:_.videoId}),r&&_.videoId&&n.streamingManager&&(r=!1,n.messages[n.messages.length-1].interrupted=!0,await _e(n.streamingManager,_.videoId)),u.track("agent-message-send",{event:"success",mode:n.chatMode,messages:n.messages.length+1}),_.result&&((L=(j=t.callbacks).onNewMessage)==null||L.call(j,[...n.messages],"answer"),u.track("agent-message-received",{latency:N.get(!0),mode:n.chatMode,messages:n.messages.length})),_}catch(I){throw r=!1,((W=n.messages[n.messages.length-1])==null?void 0:W.role)==="assistant"&&n.messages.pop(),u.track("agent-message-send",{event:"error",mode:n.chatMode,messages:n.messages.length}),I}},rate(l,h,k){var v,j,L,W;const w=n.messages.find(I=>I.id===l);if(n.chat){if(!w)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const E=((v=w.matches)==null?void 0:v.map(I=>[I.document_id,I.id]))??[];return u.track("agent-rate",{event:k?"update":"create",thumb:h===1?"up":"down",knowledge_id:((j=d.knowledge)==null?void 0:j.id)??"",mode:n.chatMode,matches:E,score:h}),k?o.updateRating(d.id,n.chat.id,k,{knowledge_id:((L=d.knowledge)==null?void 0:L.id)??"",message_id:l,matches:E,score:h}):o.createRating(d.id,n.chat.id,{knowledge_id:((W=d.knowledge)==null?void 0:W.id)??"",message_id:l,matches:E,score:h})},deleteRate(l){var h;if(!n.chat)throw new Error("Chat is not initialized");return u.track("agent-rate-delete",{type:"text",chat_id:(h=n.chat)==null?void 0:h.id,id:l,mode:n.chatMode}),o.deleteRating(d.id,n.chat.id,l)},async speak(l){var E,v,j;function h(){if(typeof l=="string"){if(!d.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:d.presenter.voice,input:l,ssml:!1}}if(l.type==="text"&&!l.provider){if(!d.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:d.presenter.voice,input:l.input,ssml:l.ssml}}return l}const k=h();if(u.track("agent-speak",k),N.update(),n.messages&&k.type==="text"&&(n.messages.push({id:G(),role:"assistant",content:k.input,created_at:new Date(N.get(!0)).toISOString()}),(v=(E=t.callbacks).onNewMessage)==null||v.call(E,[...n.messages],"answer")),$e(n.chatMode))return{duration:0,status:"success"};if(!n.streamingManager)throw new Error("Please connect to the agent first");return n.streamingManager.speak({script:k,metadata:{chat_id:(j=n.chat)==null?void 0:j.id,agent_id:d.id}})},async interrupt({type:l}){var w,E,v,j,L;const h=n.messages[n.messages.length-1],k=(h==null?void 0:h.role)==="user";if(xe(n.streamingManager,n.chat,(w=n.streamingManager)==null?void 0:w.streamType,k,!!(h!=null&&h.videoId)),u.track("agent-video-interrupt",{type:l||"click",stream_id:(E=n.streamingManager)==null?void 0:E.streamId,agent_id:d.id,owner_id:d.owner_id,video_duration_to_interrupt:ae.get(!0),message_duration_to_interrupt:N.get(!0),chat_id:(v=n.chat)==null?void 0:v.id,mode:n.chatMode,queued_interrupt:k}),k){r=!0;return}h.interrupted=!0,(L=(j=t.callbacks).onNewMessage)==null||L.call(j,[...n.messages],"answer"),_e(n.streamingManager,h.videoId)}}}function Ct(e,t,a){const{getById:r}=De(t,a||Z);return r(e)}m.AgentActivityState=Y,m.AgentStatus=le,m.ChatCreationFailed=x,m.ChatMode=b,m.ChatModeDowngraded=se,m.ChatProgress=X,m.ConnectionState=M,m.ConnectivityState=Q,m.DocumentType=ge,m.KnowledgeType=me,m.PlanGroup=de,m.Providers=we,m.RateState=ue,m.StreamEvents=z,m.StreamType=H,m.StreamingState=y,m.Subject=fe,m.UserPlan=ce,m.ValidationError=V,m.VideoType=ee,m.VoiceAccess=pe,m.WsError=oe,m.createAgentManager=Dt,m.getAgent=Ct,m.mapVideoType=he,Object.defineProperty(m,Symbol.toStringTag,{value:"Module"})});
@@ -1,5 +1,4 @@
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';
4
3
  export declare function getRequestHeaders(chatMode?: ChatMode): Record<string, Record<string, string>>;
5
4
  export declare function createChat(agent: Agent, agentsApi: AgentsAPI, analytics: Analytics, chatMode?: ChatMode, persist?: boolean, chat?: Chat): Promise<{
@@ -22,6 +22,6 @@ export declare function createStreamingManager<T extends CreateStreamOptions>(ag
22
22
  */
23
23
  streamId: string;
24
24
  streamType: StreamType;
25
- interruptEnabled: boolean | undefined;
25
+ interruptAvailable: boolean | undefined;
26
26
  }>;
27
27
  export type StreamingManager<T extends CreateStreamOptions> = Awaited<ReturnType<typeof createStreamingManager<T>>>;
@@ -47,8 +47,7 @@ export declare enum ChatMode {
47
47
  TextOnly = "TextOnly",
48
48
  Maintenance = "Maintenance",
49
49
  Playground = "Playground",
50
- DirectPlayback = "DirectPlayback",
51
- Off = "Off"
50
+ DirectPlayback = "DirectPlayback"
52
51
  }
53
52
  export interface ChatResponse {
54
53
  result?: string;
@@ -2,7 +2,6 @@ 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';
6
5
  import { Agent } from './agent';
7
6
  import { ChatMode, ChatResponse, Interrupt, Message, RatingEntity } from './chat';
8
7
  /**
@@ -82,11 +81,6 @@ interface ManagerCallbacks {
82
81
  * @param state - AgentActivityState
83
82
  */
84
83
  onAgentActivityStateChange?(state: AgentActivityState): void;
85
- /**
86
- * Optional callback function that will be triggered each time a new stream is created
87
- * @param stream - object containing stream_id, session_id and agent_id
88
- */
89
- onStreamCreated?: StreamManagerCallbacks['onStreamCreated'];
90
84
  }
91
85
  interface StreamOptions {
92
86
  /**
@@ -153,7 +147,7 @@ export interface AgentManager {
153
147
  /**
154
148
  * Get if the stream supports interrupt
155
149
  */
156
- getIsInterruptEnabled: () => boolean;
150
+ getIsInterruptAvailable: () => boolean;
157
151
  /**
158
152
  * Array of starter messages that will be sent to the agent when the chat starts
159
153
  */
@@ -53,11 +53,6 @@ export interface ManagerCallbacks {
53
53
  onError?: (error: Error, errorData: object) => void;
54
54
  onConnectivityStateChange?: (state: ConnectivityState) => void;
55
55
  onAgentActivityStateChange?: (state: AgentActivityState) => void;
56
- onStreamCreated?: (stream: {
57
- stream_id: string;
58
- session_id: string;
59
- agent_id: string;
60
- }) => void;
61
56
  }
62
57
  export type ManagerCallbackKeys = keyof ManagerCallbacks;
63
58
  export interface TalkStreamOptions extends CreateTalkStreamRequest {
@@ -1,3 +1,2 @@
1
1
  import { ChatMode } from '../types';
2
2
  export declare const isTextualChat: (chatMode: ChatMode) => boolean;
3
- export declare const isChatModeWithoutChat: (chatMode: ChatMode | undefined) => boolean | undefined;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@d-id/client-sdk",
3
3
  "private": false,
4
- "version": "1.1.0-beta.18",
4
+ "version": "1.1.0-beta.20",
5
5
  "type": "module",
6
6
  "description": "d-id client sdk",
7
7
  "repository": {
@@ -45,4 +45,4 @@
45
45
  "vite": "^5.1.4",
46
46
  "vite-plugin-dts": "^3.7.3"
47
47
  }
48
- }
48
+ }