@d-id/client-sdk 1.1.0-beta.2 → 1.1.0-beta.4

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(h,_){typeof exports=="object"&&typeof module<"u"?_(exports):typeof define=="function"&&define.amd?define(["exports"],_):(h=typeof globalThis<"u"?globalThis:h||self,_(h.index={}))})(this,function(h){"use strict";var ot=Object.defineProperty;var ct=(h,_,z)=>_ in h?ot(h,_,{enumerable:!0,configurable:!0,writable:!0,value:z}):h[_]=z;var J=(h,_,z)=>(ct(h,typeof _!="symbol"?_+"":_,z),z);class _ extends Error{constructor({kind:a,description:r,error:s}){super(JSON.stringify({kind:a,description:r}));J(this,"kind");J(this,"description");J(this,"error");this.kind=a,this.description=r,this.error=s}}class z extends _{constructor(t,a){super({kind:"ChatCreationFailed",description:`Failed to create ${a?"persistent":""} chat, mode: ${t}`})}}class te extends _{constructor(t){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${t}`})}}class B extends _{constructor(a,r){super({kind:"ValidationError",description:a});J(this,"key");this.key=r}}class ne extends _{constructor(t){super({kind:"WSError",description:t})}}var re=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(re||{}),ae=(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))(ae||{}),ie=(e=>(e.Created="created",e.Started="started",e.Done="done",e.Error="error",e.Rejected="rejected",e.Ready="ready",e))(ie||{}),se=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(se||{}),P=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e.DirectPlayback="DirectPlayback",e))(P||{}),W=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(W||{}),oe=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(oe||{}),ce=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(ce||{}),de=(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))(de||{}),Y=(e=>(e.Clip="clip",e.Talk="talk",e))(Y||{});const le=e=>{switch(e){case"clip":return"clip";case"talk":return"talk";default:throw new Error(`Unknown video type: ${e}`)}};var R=(e=>(e.Start="START",e.Stop="STOP",e))(R||{}),V=(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.StreamVideoCreated="stream-video/started",e.StreamVideoDone="stream-video/done",e.StreamVideoError="stream-video/error",e.StreamVideoRejected="stream-video/rejected",e))(V||{}),S=(e=>(e.New="new",e.Fail="fail",e.Connected="connected",e.Connecting="connecting",e.Closed="closed",e.Completed="completed",e.Disconnected="disconnected",e))(S||{}),me=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(me||{}),ue=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(ue||{});const Me=45*1e3,_e="X-Playground-Chat",x="https://api.d-id.com",Ee="wss://notifications.d-id.com",be="79f81a83a67430be2bc0fd61042b8faa",fe=e=>new Promise(t=>setTimeout(t,e)),X=()=>Math.random().toString(16).slice(2);function Te(e,t){let a;return{promise:new Promise((s,i)=>{a=setTimeout(()=>i(new Error(t)),e)}),clear:()=>clearTimeout(a)}}async function Q(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:n}=Te(a.timeout,a.timeoutErrorMessage),o=e().finally(n);return await Promise.race([o,i])}catch(i){if(r=i,!a.shouldRetryFn(i)||s>=a.limit)throw i;await fe(a.delayMs),a.onRetry(i)}throw r}function ge(){let e=window.localStorage.getItem("did_external_key_id");return e||(e=Math.random().toString(16).slice(2),window.localStorage.setItem("did_external_key_id",e)),e}let Pe=X();function he(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}.${ge()}_${Pe}`;throw new Error(`Unknown auth type: ${e}`)}const Ie=e=>Q(e,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:t=>t.status===429});function Z(e,t=x,a){const r=async(s,i)=>{const{skipErrorHandler:n,...o}=i||{},c=await Ie(()=>fetch(t+(s!=null&&s.startsWith("/")?s:`/${s}`),{...o,headers:{...o.headers,Authorization:he(e),"Content-Type":"application/json"}}));if(!c.ok){let u=await c.text().catch(()=>`Failed to fetch with status ${c.status}`);const d=new Error(u);throw a&&!n&&a(d,{url:s,options:o,headers:c.headers}),d}return c.json()};return{get(s,i){return r(s,{...i,method:"GET"})},post(s,i,n){return r(s,{...n,body:JSON.stringify(i),method:"POST"})},delete(s,i,n){return r(s,{...n,body:JSON.stringify(i),method:"DELETE"})},patch(s,i,n){return r(s,{...n,body:JSON.stringify(i),method:"PATCH"})}}}function we(e,t=x,a){const r=Z(e,`${t}/agents`,a);return{create(s,i){return r.post("/",s,i)},getAgents(s,i){return r.get(`/${s?`?tag=${s}`:""}`,i).then(n=>n??[])},getById(s,i){return r.get(`/${s}`,i)},delete(s,i){return r.delete(`/${s}`,void 0,i)},update(s,i,n){return r.patch(`/${s}`,i,n)},newChat(s,i,n){return r.post(`/${s}/chat`,i,n)},chat(s,i,n,o){return r.post(`/${s}/chat/${i}`,n,o)},createRating(s,i,n,o){return r.post(`/${s}/chat/${i}/ratings`,n,o)},updateRating(s,i,n,o,c){return r.patch(`/${s}/chat/${i}/ratings/${n}`,o,c)},deleteRating(s,i,n,o){return r.delete(`/${s}/chat/${i}/ratings/${n}`,o)},getSTTToken(s,i){return r.get(`/${s}/stt-token`,i)}}}const G=e=>e.type==="clip"&&e.presenter_id.startsWith("v2_")?"clip_v2":e.type;function Ae(e){var s,i,n,o;const t=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",a=()=>{const c=navigator.platform;return c.toLowerCase().includes("win")?"Windows":c.toLowerCase().includes("mac")?"Mac OS X":c.toLowerCase().includes("linux")?"Linux":"Unknown"},r=e.presenter;return{$os:`${a()}`,isMobile:`${t()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:G(r),agentVoice:{voiceId:(i=(s=e.presenter)==null?void 0:s.voice)==null?void 0:i.voice_id,provider:(o=(n=e.presenter)==null?void 0:n.voice)==null?void 0:o.type}}}function $e(e,t,a){var c,u,d;const{event:r,...s}=e,{template:i}=(t==null?void 0:t.llm)||{},{language:n}=((c=t==null?void 0:t.presenter)==null?void 0:c.voice)||{};return{...s,llm:{...s.llm,template:i},script:{...s.script,provider:{...(u=s==null?void 0:s.script)==null?void 0:u.provider,language:n}},stitch:(t==null?void 0:t.presenter.type)==="talk"?(d=t==null?void 0:t.presenter)==null?void 0:d.stitch:void 0,...a}}let O={};const je="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function ze(e){var i,n,o,c,u,d;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||ge(),agentId:e.agent.id,agentType:G(a),owner_id:e.agent.owner_id??"",promptVersion:(n=e.agent.llm)==null?void 0:n.prompt_version,behavior:{role:r==null?void 0:r.role,personality:r==null?void 0:r.personality,instructions:(o=e.agent.llm)==null?void 0:o.instructions},temperature:(c=e.agent.llm)==null?void 0:c.temperature,knowledgeSource:r==null?void 0:r.knowledge_source,starterQuestionsCount:(d=(u=e.agent.knowledge)==null?void 0:u.starter_message)==null?void 0:d.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:()=>Math.random().toString(16).slice(2),enrich(g){const D={};if(g&&typeof g!="object")throw new Error("properties must be a flat json object");for(let w in g)(typeof g[w]=="string"||typeof g[w]=="number")&&(D[w]=g[w]);this.additionalProperties={...this.additionalProperties,...D}},async track(g,D){if(!this.isEnabled)return Promise.resolve();const{audioPath:w,...v}=D||{},k={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:g,properties:{...this.additionalProperties,...v,...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(je,k).then(M=>M.json())}catch(M){return console.error(M)}},linkTrack(g,D,w,v){O[g]||(O[g]={events:{},resolvedDependencies:[]}),v.includes(w)||v.push(w);const k=O[g];if(k.events[w]={props:D},k.resolvedDependencies.push(w),v.every(N=>k.resolvedDependencies.includes(N))){const N=v.reduce((A,l)=>k.events[l]?{...A,...k.events[l].props}:A,{});this.track(g,N),k.resolvedDependencies=k.resolvedDependencies.filter(A=>!v.includes(A)),v.forEach(A=>{delete k.events[A]})}}}}function Le(){let e=0;return{reset:()=>e=0,update:()=>e=Date.now(),get:(t=!1)=>t?Date.now()-e:e}}const H=Le();function pe(e){return e===P.Playground?{headers:{[_e]:"true"}}:{}}async function ye(e,t,a,r,s=!1,i){try{return!i&&r!==P.DirectPlayback&&(i=await t.newChat(e.id,{persist:s},pe(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(n){try{const o=JSON.parse(n.message);if((o==null?void 0:o.kind)==="InsufficientCreditsError")throw new Error("InsufficientCreditsError")}catch(o){console.error("Error parsing the error message:",o)}throw new Error("Cannot create new chat")}}function Ne(e){var a;const t=((a=e.greetings)==null?void 0:a.filter(r=>r.length>0))??[];return t.length>0?t[Math.floor(Math.random()*t.length)]:`Hi! I'm ${e.preview_name||"My Agent"}. How can I help you?`}function ve(e,t){return t&&t.length>0?t:[{content:e,id:X(),role:"assistant",created_at:new Date().toISOString()}]}function Fe(e){return new Promise((t,a)=>{const{callbacks:r,host:s,auth:i}=e,{onMessage:n=null,onOpen:o=null,onClose:c=null,onError:u=null}=r||{},d=new WebSocket(`${s}?authorization=${he(i)}`);d.onmessage=n,d.onclose=c,d.onerror=g=>{console.error(g),u==null||u("Websocket failed to connect",g),a(g)},d.onopen=g=>{o==null||o(g),t(d)}})}async function Be(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 Fe(e)}catch(s){if(r===t)throw s;await fe(r*500)}return a}async function We(e,t,a){const r=a!=null&&a.onMessage?[a.onMessage]:[],s=await Be({auth:e,host:t,callbacks:{onError:i=>{var n;return(n=a.onError)==null?void 0:n.call(a,new ne(i))},onMessage(i){const n=JSON.parse(i.data);r.forEach(o=>o(n.event,n))}}});return{socket:s,disconnect:()=>s.close(),subscribeToEvents:i=>r.push(i)}}function He(e){if(e.answer!==void 0)return e.answer;let t=0,a="";for(;t in e;)a+=e[t++];return a}function Ke(e,t,a,r,s){const i=r.messages[r.messages.length-1];if(!(e===W.Partial||e===W.Answer)||(i==null?void 0:i.role)!=="assistant")return;const{content:n,sequence:o}=t;e===W.Partial?a[o]=n:a.answer=n;const c=He(a);(i.content!==c||e===W.Answer)&&(i.content=c,s==null||s([...r.messages],e))}function Ue(e,t,a,r,s){let i={};return{clearQueue:()=>i={},onMessage:(n,o)=>{var c,u;if("content"in o)Ke(n,o,i,t,a.callbacks.onNewMessage),n===W.Answer&&e.track("agent-message-received",{messages:t.messages.length,mode:t.chatMode});else{const d=V,g=[d.StreamVideoDone,d.StreamVideoError,d.StreamVideoRejected],D=[d.StreamFailed,d.StreamVideoError,d.StreamVideoRejected],w=$e(o,r,{mode:t.chatMode});if(n=n,n===d.StreamVideoCreated)e.linkTrack("agent-video",w,d.StreamVideoCreated,["start"]);else if(g.includes(n)){const v=n.split("/")[1];D.includes(n)?e.track("agent-video",{...w,event:v}):e.linkTrack("agent-video",{...w,event:v},n,["done"])}D.includes(n)&&((u=(c=a.callbacks).onError)==null||u.call(c,new Error(`Stream failed with event ${n}`),{data:o})),o.event===d.StreamDone&&s()}}}}function Ve(e,t,a,r){const s=Z(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,stream_greeting:i.stream_greeting})},startConnection(i,n,o){return s.post(`/streams/${i}/sdp`,{session_id:o,answer:n})},addIceCandidate(i,n,o){return s.post(`/streams/${i}/ice`,{session_id:o,...n})},sendStreamRequest(i,n,o){return s.post(`/streams/${i}`,{session_id:n,...o})},close(i,n){return s.delete(`/streams/${i}`,{session_id:n})}}}function xe(e,t,a,r){const s=Z(e,`${t}/agents/${a}`,r);return{createStream(i,n){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,stream_greeting:i.stream_greeting},n)},startConnection(i,n,o,c){return s.post(`/streams/${i}/sdp`,{session_id:o,answer:n},c)},addIceCandidate(i,n,o,c){return s.post(`/streams/${i}/ice`,{session_id:o,...n},c)},sendStreamRequest(i,n,o,c){return s.post(`/streams/${i}`,{session_id:n,...o},c)},close(i,n,o){return s.delete(`/streams/${i}`,{session_id:n},o)}}}function qe(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,jitterBufferDelay:(t.jitterBufferDelay-e.jitterBufferDelay)/r,framesPerSecond:t.framesPerSecond,freezeCount:t.freezeCount-e.freezeCount,freezeDuration:t.freezeDuration-e.freezeDuration,lowFpsCount:a}}function Je(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 Xe(e){let t="";for(const a of e.values())if(a&&a.type==="codec"&&a.mimeType.startsWith("video")&&(t=a.mimeType.split("/")[1]),a&&a.type==="inbound-rtp"&&a.kind==="video")return{codec:t,timestamp:a.timestamp,bytesReceived:a.bytesReceived,packetsReceived:a.packetsReceived,packetsLost:a.packetsLost,framesDropped:a.framesDropped,framesDecoded:a.framesDecoded,jitter:a.jitter,jitterBufferDelay:a.jitterBufferDelay,frameWidth:a.frameWidth,frameHeight:a.frameHeight,framesPerSecond:a.framesPerSecond,freezeCount:a.freezeCount,freezeDuration:a.totalFreezesDuration};return{}}function Ye(e,t,a){const r=e.map((n,o)=>o===0?a?{timestamp:n.timestamp,duration:0,bytesReceived:n.bytesReceived-a.bytesReceived,bitrate:(n.bytesReceived-a.bytesReceived)*8/(t/1e3),packetsReceived:n.packetsReceived-a.packetsReceived,packetsLost:n.packetsLost-a.packetsLost,framesDropped:n.framesDropped-a.framesDropped,framesDecoded:n.framesDecoded-a.framesDecoded,jitter:n.jitter,jitterBufferDelay:n.jitterBufferDelay-a.jitterBufferDelay,framesPerSecond:n.framesPerSecond,freezeCount:n.freezeCount-a.freezeCount,freezeDuration:n.freezeDuration-a.freezeDuration}:{timestamp:n.timestamp,duration:0,bytesReceived:n.bytesReceived,bitrate:n.bytesReceived*8/(t/1e3),packetsReceived:n.packetsReceived,packetsLost:n.packetsLost,framesDropped:n.framesDropped,framesDecoded:n.framesDecoded,jitter:n.jitter,jitterBufferDelay:n.jitterBufferDelay,framesPerSecond:n.framesPerSecond,freezeCount:n.freezeCount,freezeDuration:n.freezeDuration}:{timestamp:n.timestamp,duration:t*o/1e3,bytesReceived:n.bytesReceived-e[o-1].bytesReceived,bitrate:(n.bytesReceived-e[o-1].bytesReceived)*8/(t/1e3),packetsReceived:n.packetsReceived-e[o-1].packetsReceived,packetsLost:n.packetsLost-e[o-1].packetsLost,framesDropped:n.framesDropped-e[o-1].framesDropped,framesDecoded:n.framesDecoded-e[o-1].framesDecoded,jitter:n.jitter,jitterBufferDelay:n.jitterBufferDelay-e[o-1].jitterBufferDelay,framesPerSecond:n.framesPerSecond,freezeCount:n.freezeCount-e[o-1].freezeCount,freezeDuration:n.freezeDuration-e[o-1].freezeDuration}),s=Je(r),i=s.reduce((n,o)=>n+(o.causes.includes("low fps")?1:0),0);return{webRTCStats:{anomalies:s,aggregateReport:qe(e[0],e[e.length-1],i)},codec:e[0].codec,resolution:`${e[0].frameWidth}x${e[0].frameHeight}`}}const ee=100,Qe=Math.max(Math.ceil(400/ee),1);function Ze(){let e=0;return t=>{for(const a of t.values())if(a&&a.type==="inbound-rtp"&&a.kind==="video"){const r=a.framesDecoded,s=r-e>0;return e=r,s}return!1}}function Ge(e,t,a,r,s=!1,i=!1){const n=s?1:0;let o=[],c,u=0,d=!1,g=0;const D=Ze();return setInterval(async()=>{const w=await e.getStats(),v=D(w),k=Xe(w);if(v)u=0,d||(r==null||r(R.Start),i&&g>=n&&!t()&&a(),c=o[o.length-1],o=[],g++,d=!0),o.push(k);else if(d&&(u++,u>=Qe)){const M=Ye(o,ee,c);r==null||r(R.Stop,M),!i&&!t()&&a(),d=!1}},ee)}let ke=!1;const L=(e,t)=>ke&&console.log(e,t),Oe=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function Ce(e){switch(e){case"connected":return S.Connected;case"checking":return S.Connecting;case"failed":return S.Fail;case"new":return S.New;case"closed":return S.Closed;case"disconnected":return S.Disconnected;case"completed":return S.Completed;default:return S.New}}function Re(e,t,a,r){e===R.Start&&t===R.Start?a==null||a(R.Start):e===R.Stop&&t===R.Stop&&(a==null||a(R.Stop,r))}async function et(e,t,{debug:a=!1,callbacks:r,auth:s,baseURL:i=x,warmup:n}){ke=a;let o=!1,c=!1,u=R.Stop,d=R.Stop;const{startConnection:g,sendStreamRequest:D,close:w,createStream:v,addIceCandidate:k}=t.videoType===Y.Clip?Ve(s,i,e,r.onError):xe(s,i,e,r.onError),{id:M,offer:N,ice_servers:A,session_id:l}=await v(t),m=new Oe({iceServers:A}),C=m.createDataChannel("JanusDataChannel");if(!l)throw new Error("Could not create session_id");const I=()=>o,$=()=>{var f;o=!0,c&&((f=r.onConnectionStateChange)==null||f.call(r,S.Connected))},E=Ge(m,I,$,(f,p)=>Re(d=f,u,r.onVideoStateChange,p),n,!!t.stream_greeting);m.onicecandidate=f=>{var p;L("peerConnection.onicecandidate",f);try{f.candidate&&f.candidate.sdpMid&&f.candidate.sdpMLineIndex!==null?k(M,{candidate:f.candidate.candidate,sdpMid:f.candidate.sdpMid,sdpMLineIndex:f.candidate.sdpMLineIndex},l):k(M,{candidate:null},l)}catch(y){(p=r.onError)==null||p.call(r,y,{streamId:M})}},C.onopen=()=>{c=!0,(!t.stream_warmup&&!t.stream_greeting||o)&&$()},C.onmessage=f=>{f.data==="stream/started"?u=R.Start:f.data==="stream/done"&&(u=R.Stop),Re(d,u,r.onVideoStateChange)},m.oniceconnectionstatechange=()=>{var p;L("peerConnection.oniceconnectionstatechange => "+m.iceConnectionState);const f=Ce(m.iceConnectionState);f!==S.Connected&&((p=r.onConnectionStateChange)==null||p.call(r,f))},m.ontrack=f=>{var p;L("peerConnection.ontrack",f),(p=r.onSrcObjectReady)==null||p.call(r,f.streams[0])},await m.setRemoteDescription(N),L("set remote description OK");const j=await m.createAnswer();return L("create answer OK"),await m.setLocalDescription(j),L("set local description OK"),await g(M,j,l),L("start connection OK"),{speak(f){return D(M,l,f)},async disconnect(){var f,p;if(M){const y=Ce(m.iceConnectionState);if(m){if(y===S.New){(f=r.onVideoStateChange)==null||f.call(r,R.Stop),clearInterval(E);return}m.close(),m.oniceconnectionstatechange=null,m.onnegotiationneeded=null,m.onicecandidate=null,m.ontrack=null}try{y===S.Connected&&await w(M,l).catch(b=>{})}catch(b){L("Error on close stream connection",b)}(p=r.onVideoStateChange)==null||p.call(r,R.Stop),clearInterval(E)}},sessionId:l,streamId:M}}function tt(e,t,a){var s;const{streamOptions:r}=t??{};return{videoType:le(e.presenter.type),output_resolution:r==null?void 0:r.outputResolution,session_timeout:r==null?void 0:r.sessionTimeout,stream_warmup:r==null?void 0:r.streamWarmup,compatibility_mode:r==null?void 0:r.compatibilityMode,stream_greeting:G(e.presenter)!=="clip"&&((s=t==null?void 0:t.streamOptions)!=null&&s.streamGreeting)?a:void 0}}function nt(e,t,a,r){H.get()>0&&(e===R.Start?r.linkTrack("agent-video",{event:"start",latency:H.get(!0)},"start",[V.StreamVideoCreated]):e===R.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,...a},"done",[V.StreamVideoDone]))}function rt(e,t,a,r){return H.reset(),new Promise(async(s,i)=>{var n;try{const o=await et(e.id,tt(e,t,r),{...t,analytics:a,warmup:(n=t.streamOptions)==null?void 0:n.streamWarmup,callbacks:{...t.callbacks,onConnectionStateChange:c=>{var u,d;(d=(u=t.callbacks).onConnectionStateChange)==null||d.call(u,c),c===S.Connected&&s(o)},onVideoStateChange:(c,u)=>{var d,g;(g=(d=t.callbacks).onVideoStateChange)==null||g.call(d,c),nt(c,e,u,a)}}})}catch(o){i(o)}})}async function at(e,t,a,r,s,i){var u,d,g,D;const{chat:n,chatMode:o}=await ye(e,a,r,t.mode,t.persistentChat,s);if(o&&o!==t.mode&&(t.mode=o,(d=(u=t.callbacks).onModeChange)==null||d.call(u,o),o===P.TextOnly))return(D=(g=t.callbacks).onError)==null||D.call(g,new te(o)),{chat:n};const c=await rt(e,t,r,i);return{chat:n,streamingManager:c}}async function it(e,t){var M,N,A;let a=!0;const r=t.mixpanelKey||be,s=t.wsURL||Ee,i=t.baseURL||x,n={messages:[],chatMode:t.mode||P.Functional},o=we(t.auth,i,t.callbacks.onError),c=await o.getById(e),u=Ne(c),d=ze({token:r,agent:c,isEnabled:t.enableAnalitics,distinctId:t.distinctId}),{onMessage:g,clearQueue:D}=Ue(d,n,t,c,()=>{var l;return(l=n.socketManager)==null?void 0:l.disconnect()});n.messages=ve(u,t.initialMessages),(N=(M=t.callbacks).onNewMessage)==null||N.call(M,[...n.messages],"answer"),d.track("agent-sdk",{event:"loaded",...Ae(c)});async function w(l){var j,f,p,y,b,T,K;(f=(j=t.callbacks).onConnectionStateChange)==null||f.call(j,S.Connecting),H.reset(),l&&!a&&(delete n.chat,n.messages=ve(u),(y=(p=t.callbacks).onNewMessage)==null||y.call(p,[...n.messages],"answer"));const m=t.mode===P.DirectPlayback?Promise.resolve(void 0):We(t.auth,s,{onMessage:g,onError:t.callbacks.onError}),C=Q(()=>at(c,t,o,d,n.chat,l?u:void 0),{limit:3,timeout:Me,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,q;throw k(P.Maintenance),(q=(U=t.callbacks).onConnectionStateChange)==null||q.call(U,S.Fail),F}),[I,{streamingManager:$,chat:E}]=await Promise.all([m,C]);E&&E.id!==((b=n.chat)==null?void 0:b.id)&&((K=(T=t.callbacks).onNewChat)==null||K.call(T,E.id)),n.streamingManager=$,n.socketManager=I,n.chat=E,a=!1,k((E==null?void 0:E.chat_mode)??t.mode??P.Functional)}async function v(){var l,m,C,I;(l=n.socketManager)==null||l.disconnect(),await((m=n.streamingManager)==null?void 0:m.disconnect()),delete n.streamingManager,delete n.socketManager,(I=(C=t.callbacks).onConnectionStateChange)==null||I.call(C,S.Disconnected)}async function k(l){var m,C;l!==n.chatMode&&(d.track("agent-mode-change",{mode:l}),n.chatMode=l,n.chatMode!==P.Functional&&await v(),(C=(m=t.callbacks).onModeChange)==null||C.call(m,l))}return{agent:c,starterMessages:((A=c.knowledge)==null?void 0:A.starter_message)||[],getSTTToken:()=>o.getSTTToken(c.id),changeMode:k,enrichAnalytics:d.enrich,async connect(){var l;await w(!0),d.track("agent-chat",{event:"connect",chatId:(l=n.chat)==null?void 0:l.id,agentId:c.id,mode:n.chatMode})},async reconnect(){var l;await v(),await w(!1),d.track("agent-chat",{event:"reconnect",chatId:(l=n.chat)==null?void 0:l.id,agentId:c.id,mode:n.chatMode})},async disconnect(){var l;await v(),d.track("agent-chat",{event:"disconnect",chatId:(l=n.chat)==null?void 0:l.id,agentId:c.id,mode:n.chatMode})},async chat(l){var $,E,j,f,p;const m=()=>{if(t.mode===P.DirectPlayback)throw new B("Direct playback is enabled, chat is disabled");if(l.length>=800)throw new B("Message cannot be more than 800 characters");if(l.length===0)throw new B("Message cannot be empty");if(n.chatMode===P.Maintenance)throw new B("Chat is in maintenance mode");if(![P.TextOnly,P.Playground].includes(n.chatMode)){if(!n.streamingManager)throw new B("Streaming manager is not initialized");if(!n.chat)throw new B("Chat is not initialized")}},C=async()=>{var y,b;if(!n.chat){const T=await ye(c,o,d,n.chatMode,t.persistentChat);if(!T.chat)throw new z(n.chatMode,!!t.persistentChat);n.chat=T.chat,(b=(y=t.callbacks).onNewChat)==null||b.call(y,n.chat.id)}return n.chat.id},I=async(y,b)=>Q(()=>{var T,K;return o.chat(c.id,b,{chatMode:n.chatMode,streamId:(T=n.streamingManager)==null?void 0:T.streamId,sessionId:(K=n.streamingManager)==null?void 0:K.sessionId,messages:y.map(({matches:F,...U})=>U)},{...pe(n.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:T=>{var U,q,Se,De;const K=(U=T==null?void 0:T.message)==null?void 0:U.includes("missing or invalid session_id");return!((q=T==null?void 0:T.message)==null?void 0:q.includes("Stream Error"))&&!K?((De=(Se=t.callbacks).onError)==null||De.call(Se,T),!1):!0},onRetry:async()=>{await v(),await w(!1)}});try{D(),m(),n.messages.push({id:X(),role:"user",content:l,created_at:new Date(H.update()).toISOString()}),(E=($=t.callbacks).onNewMessage)==null||E.call($,[...n.messages],"user");const y=await C(),b=await I([...n.messages],y);return n.messages.push({id:X(),role:"assistant",content:b.result||"",created_at:new Date().toISOString(),context:b.context,matches:b.matches}),d.track("agent-message-send",{event:"success",mode:n.chatMode,messages:n.messages.length+1}),b.result&&((f=(j=t.callbacks).onNewMessage)==null||f.call(j,[...n.messages],"answer"),d.track("agent-message-received",{latency:H.get(!0),mode:n.chatMode,messages:n.messages.length})),b}catch(y){throw((p=n.messages[n.messages.length-1])==null?void 0:p.role)==="assistant"&&n.messages.pop(),d.track("agent-message-send",{event:"error",mode:n.chatMode,messages:n.messages.length}),y}},rate(l,m,C){var E,j,f,p;const I=n.messages.find(y=>y.id===l);if(n.chat){if(!I)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const $=((E=I.matches)==null?void 0:E.map(y=>[y.document_id,y.id]))??[];return d.track("agent-rate",{event:C?"update":"create",thumb:m===1?"up":"down",knowledge_id:((j=c.knowledge)==null?void 0:j.id)??"",mode:n.chatMode,matches:$,score:m}),C?o.updateRating(c.id,n.chat.id,C,{knowledge_id:((f=c.knowledge)==null?void 0:f.id)??"",message_id:l,matches:$,score:m}):o.createRating(c.id,n.chat.id,{knowledge_id:((p=c.knowledge)==null?void 0:p.id)??"",message_id:l,matches:$,score:m})},deleteRate(l){var m;if(!n.chat)throw new Error("Chat is not initialized");return d.track("agent-rate-delete",{type:"text",chat_id:(m=n.chat)==null?void 0:m.id,id:l,mode:n.chatMode}),o.deleteRating(c.id,n.chat.id,l)},speak(l){var I;if(!n.streamingManager)throw new Error("Please connect to the agent first");function m(){if(typeof l=="string"){if(!c.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:c.presenter.voice,input:l,ssml:!1}}if(l.type==="text"&&!l.provider){if(!c.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:c.presenter.voice,input:l.input,ssml:l.ssml}}return l}const C=m();return d.track("agent-speak",C),H.update(),n.streamingManager.speak({script:C,metadata:{chat_id:(I=n.chat)==null?void 0:I.id,agent_id:c.id}})}}}function st(e,t,a){const{getById:r}=we(t,a||x);return r(e)}h.AgentStatus=ie,h.ChatCreationFailed=z,h.ChatMode=P,h.ChatModeDowngraded=te,h.ChatProgress=W,h.ConnectionState=S,h.DocumentType=de,h.KnowledgeType=ce,h.PlanGroup=ae,h.Providers=me,h.RateState=se,h.StreamEvents=V,h.StreamingState=R,h.Subject=oe,h.UserPlan=re,h.ValidationError=B,h.VideoType=Y,h.VoiceAccess=ue,h.WsError=ne,h.createAgentManager=it,h.getAgent=st,h.mapVideoType=le,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"})});
1
+ (function(f,_){typeof exports=="object"&&typeof module<"u"?_(exports):typeof define=="function"&&define.amd?define(["exports"],_):(f=typeof globalThis<"u"?globalThis:f||self,_(f.index={}))})(this,function(f){"use strict";var yt=Object.defineProperty;var pt=(f,_,N)=>_ in f?yt(f,_,{enumerable:!0,configurable:!0,writable:!0,value:N}):f[_]=N;var G=(f,_,N)=>(pt(f,typeof _!="symbol"?_+"":_,N),N);class _ extends Error{constructor({kind:a,description:n,error:o}){super(JSON.stringify({kind:a,description:n}));G(this,"kind");G(this,"description");G(this,"error");this.kind=a,this.description=n,this.error=o}}class N extends _{constructor(t,a){super({kind:"ChatCreationFailed",description:`Failed to create ${a?"persistent":""} chat, mode: ${t}`})}}class ie extends _{constructor(t){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${t}`})}}class H extends _{constructor(a,n){super({kind:"ValidationError",description:a});G(this,"key");this.key=n}}class se extends _{constructor(t){super({kind:"WSError",description:t})}}var oe=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(oe||{}),ce=(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))(ce||{}),de=(e=>(e.Created="created",e.Started="started",e.Done="done",e.Error="error",e.Rejected="rejected",e.Ready="ready",e))(de||{}),le=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(le||{}),j=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e.DirectPlayback="DirectPlayback",e))(j||{}),U=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(U||{}),ue=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(ue||{}),fe=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(fe||{}),me=(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))(me||{}),Z=(e=>(e.Clip="clip",e.Talk="talk",e))(Z||{});const ge=e=>{switch(e){case"clip":return"clip";case"talk":return"talk";default:throw new Error(`Unknown video type: ${e}`)}};var C=(e=>(e.Start="START",e.Stop="STOP",e))(C||{}),K=(e=>(e.Strong="STRONG",e.Weak="WEAK",e.Unknown="UNKNOWN",e))(K||{}),x=(e=>(e.Idle="IDLE",e.Talking="TALKING",e))(x||{});const O={"stream/started":"START","stream/done":"STOP"};var V=(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.StreamVideoCreated="stream-video/started",e.StreamVideoDone="stream-video/done",e.StreamVideoError="stream-video/error",e.StreamVideoRejected="stream-video/rejected",e))(V||{}),E=(e=>(e.New="new",e.Fail="fail",e.Connected="connected",e.Connecting="connecting",e.Closed="closed",e.Completed="completed",e.Disconnected="disconnected",e))(E||{}),J=(e=>(e.Legacy="legacy",e.Fluent="fluent",e))(J||{}),he=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(he||{}),we=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(we||{});const Te=45*1e3,je="X-Playground-Chat",X="https://api.d-id.com",Pe="wss://notifications.d-id.com",be="79f81a83a67430be2bc0fd61042b8faa",ye=e=>new Promise(t=>setTimeout(t,e)),Q=()=>Math.random().toString(16).slice(2);function Be(e,t){let a;return{promise:new Promise((o,s)=>{a=setTimeout(()=>s(new Error(t)),e)}),clear:()=>clearTimeout(a)}}async function ee(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 n;for(let o=1;o<=a.limit;o++)try{if(!a.timeout)return await e();const{promise:s,clear:r}=Be(a.timeout,a.timeoutErrorMessage),i=e().finally(r);return await Promise.race([i,s])}catch(s){if(n=s,!a.shouldRetryFn(s)||o>=a.limit)throw s;await ye(a.delayMs),a.onRetry(s)}throw n}function pe(){let e=window.localStorage.getItem("did_external_key_id");return e||(e=Math.random().toString(16).slice(2),window.localStorage.setItem("did_external_key_id",e)),e}let $e=Q();function ve(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}.${pe()}_${$e}`;throw new Error(`Unknown auth type: ${e}`)}const Le=e=>ee(e,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:t=>t.status===429});function te(e,t=X,a){const n=async(o,s)=>{const{skipErrorHandler:r,...i}=s||{},c=await Le(()=>fetch(t+(o!=null&&o.startsWith("/")?o:`/${o}`),{...i,headers:{...i.headers,Authorization:ve(e),"Content-Type":"application/json"}}));if(!c.ok){let g=await c.text().catch(()=>`Failed to fetch with status ${c.status}`);const l=new Error(g);throw a&&!r&&a(l,{url:o,options:i,headers:c.headers}),l}return c.json()};return{get(o,s){return n(o,{...s,method:"GET"})},post(o,s,r){return n(o,{...r,body:JSON.stringify(s),method:"POST"})},delete(o,s,r){return n(o,{...r,body:JSON.stringify(s),method:"DELETE"})},patch(o,s,r){return n(o,{...r,body:JSON.stringify(s),method:"PATCH"})}}}function Ce(e,t=X,a){const n=te(e,`${t}/agents`,a);return{create(o,s){return n.post("/",o,s)},getAgents(o,s){return n.get(`/${o?`?tag=${o}`:""}`,s).then(r=>r??[])},getById(o,s){return n.get(`/${o}`,s)},delete(o,s){return n.delete(`/${o}`,void 0,s)},update(o,s,r){return n.patch(`/${o}`,s,r)},newChat(o,s,r){return n.post(`/${o}/chat`,s,r)},chat(o,s,r,i){return n.post(`/${o}/chat/${s}`,r,i)},createRating(o,s,r,i){return n.post(`/${o}/chat/${s}/ratings`,r,i)},updateRating(o,s,r,i,c){return n.patch(`/${o}/chat/${s}/ratings/${r}`,i,c)},deleteRating(o,s,r,i){return n.delete(`/${o}/chat/${s}/ratings/${r}`,i)},getSTTToken(o,s){return n.get(`/${o}/stt-token`,s)}}}const re=e=>e.type==="clip"&&e.presenter_id.startsWith("v2_")?"clip_v2":e.type;function Ae(e){var o,s,r,i;const t=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",a=()=>{const c=navigator.platform;return c.toLowerCase().includes("win")?"Windows":c.toLowerCase().includes("mac")?"Mac OS X":c.toLowerCase().includes("linux")?"Linux":"Unknown"},n=e.presenter;return{$os:`${a()}`,isMobile:`${t()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:re(n),agentVoice:{voiceId:(s=(o=e.presenter)==null?void 0:o.voice)==null?void 0:s.voice_id,provider:(i=(r=e.presenter)==null?void 0:r.voice)==null?void 0:i.type}}}const ze=e=>e.reduce((t,a)=>t+a,0),Fe=e=>ze(e)/e.length;function Ne(e,t,a){var c,g,l;const{event:n,...o}=e,{template:s}=(t==null?void 0:t.llm)||{},{language:r}=((c=t==null?void 0:t.presenter)==null?void 0:c.voice)||{};return{...o,llm:{...o.llm,template:s},script:{...o.script,provider:{...(g=o==null?void 0:o.script)==null?void 0:g.provider,language:r}},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 ne={};const Je="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function We(e){var s,r,i,c,g,l;const t=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk",a=e.agent.presenter,n=(s=e.agent.llm)==null?void 0:s.prompt_customization,o={token:e.token||"testKey",distinct_id:e.distinctId||pe(),agentId:e.agent.id,agentType:re(a),owner_id:e.agent.owner_id??"",promptVersion:(r=e.agent.llm)==null?void 0:r.prompt_version,behavior:{role:n==null?void 0:n.role,personality:n==null?void 0:n.personality,instructions:(i=e.agent.llm)==null?void 0:i.instructions},temperature:(c=e.agent.llm)==null?void 0:c.temperature,knowledgeSource:n==null?void 0:n.knowledge_source,starterQuestionsCount:(l=(g=e.agent.knowledge)==null?void 0:g.starter_message)==null?void 0:l.length,topicsToAvoid:n==null?void 0:n.topics_to_avoid,maxResponseLength:n==null?void 0:n.max_response_length};return{...o,additionalProperties:{},isEnabled:e.isEnabled??!0,getRandom:()=>Math.random().toString(16).slice(2),enrich(h){const k={};if(h&&typeof h!="object")throw new Error("properties must be a flat json object");for(let p in h)(typeof h[p]=="string"||typeof h[p]=="number")&&(k[p]=h[p]);this.additionalProperties={...this.additionalProperties,...k}},async track(h,k){if(!this.isEnabled)return Promise.resolve();const{audioPath:p,...v}=k||{},D={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:h,properties:{...this.additionalProperties,...v,...o,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(Je,D).then(R=>R.json())}catch(R){return console.error(R)}},linkTrack(h,k,p,v){ne[h]||(ne[h]={events:{},resolvedDependencies:[]}),v.includes(p)||v.push(p);const D=ne[h];if(D.events[p]={props:k},D.resolvedDependencies.push(p),v.every(A=>D.resolvedDependencies.includes(A))){const A=v.reduce((P,d)=>D.events[d]?{...P,...D.events[d].props}:P,{});this.track(h,A),D.resolvedDependencies=D.resolvedDependencies.filter(P=>!v.includes(P)),v.forEach(P=>{delete D.events[P]})}}}}function He(){let e=0;return{reset:()=>e=0,update:()=>e=Date.now(),get:(t=!1)=>t?Date.now()-e:e}}const q=He();function De(e){return e===j.Playground?{headers:{[je]:"true"}}:{}}async function ke(e,t,a,n,o=!1,s){try{return!s&&n!==j.DirectPlayback&&(s=await t.newChat(e.id,{persist:o},De(n)),a.track("agent-chat",{event:"created",chat_id:s.id,agent_id:e.id,mode:n})),{chat:s,chatMode:(s==null?void 0:s.chat_mode)??n}}catch(r){try{const i=JSON.parse(r.message);if((i==null?void 0:i.kind)==="InsufficientCreditsError")throw new Error("InsufficientCreditsError")}catch(i){console.error("Error parsing the error message:",i)}throw new Error("Cannot create new chat")}}function Ue(e){var a;const t=((a=e.greetings)==null?void 0:a.filter(n=>n.length>0))??[];return t.length>0?t[Math.floor(Math.random()*t.length)]:`Hi! I'm ${e.preview_name||"My Agent"}. How can I help you?`}function Re(e,t){return t&&t.length>0?t:[{content:e,id:Q(),role:"assistant",created_at:new Date().toISOString()}]}function Ke(e){return new Promise((t,a)=>{const{callbacks:n,host:o,auth:s}=e,{onMessage:r=null,onOpen:i=null,onClose:c=null,onError:g=null}=n||{},l=new WebSocket(`${o}?authorization=${ve(s)}`);l.onmessage=r,l.onclose=c,l.onerror=h=>{console.error(h),g==null||g("Websocket failed to connect",h),a(h)},l.onopen=h=>{i==null||i(h),t(l)}})}async function qe(e){const{retries:t=1}=e;let a=null;for(let n=0;(a==null?void 0:a.readyState)!==WebSocket.OPEN;n++)try{a=await Ke(e)}catch(o){if(n===t)throw o;await ye(n*500)}return a}async function xe(e,t,a){const n=a!=null&&a.onMessage?[a.onMessage]:[],o=await qe({auth:e,host:t,callbacks:{onError:s=>{var r;return(r=a.onError)==null?void 0:r.call(a,new se(s))},onMessage(s){const r=JSON.parse(s.data);n.forEach(i=>i(r.event,r))}}});return{socket:o,disconnect:()=>o.close(),subscribeToEvents:s=>n.push(s)}}function Ve(e){if(e.answer!==void 0)return e.answer;let t=0,a="";for(;t in e;)a+=e[t++];return a}function Xe(e,t,a,n,o){const s=n.messages[n.messages.length-1];if(!(e===U.Partial||e===U.Answer)||(s==null?void 0:s.role)!=="assistant")return;const{content:r,sequence:i}=t;e===U.Partial?a[i]=r:a.answer=r;const c=Ve(a);(s.content!==c||e===U.Answer)&&(s.content=c,o==null||o([...n.messages],e))}function Ye(e,t,a,n,o){let s={};return{clearQueue:()=>s={},onMessage:(r,i)=>{var c,g;if("content"in i)Xe(r,i,s,t,a.callbacks.onNewMessage),r===U.Answer&&e.track("agent-message-received",{messages:t.messages.length,mode:t.chatMode});else{const l=V,h=[l.StreamVideoDone,l.StreamVideoError,l.StreamVideoRejected],k=[l.StreamFailed,l.StreamVideoError,l.StreamVideoRejected],p=Ne(i,n,{mode:t.chatMode});if(r=r,r===l.StreamVideoCreated)e.linkTrack("agent-video",p,l.StreamVideoCreated,["start"]);else if(h.includes(r)){const v=r.split("/")[1];k.includes(r)?e.track("agent-video",{...p,event:v}):e.linkTrack("agent-video",{...p,event:v},r,["done"])}k.includes(r)&&((g=(c=a.callbacks).onError)==null||g.call(c,new Error(`Stream failed with event ${r}`),{data:i})),i.event===l.StreamDone&&o()}}}}function Ge(e,t,a,n){const o=te(e,`${t}/agents/${a}`,n);return{createStream(s){return o.post("/streams",{output_resolution:s.output_resolution,compatibility_mode:s.compatibility_mode,stream_warmup:s.stream_warmup,session_timeout:s.session_timeout,stream_greeting:s.stream_greeting})},startConnection(s,r,i){return o.post(`/streams/${s}/sdp`,{session_id:i,answer:r})},addIceCandidate(s,r,i){return o.post(`/streams/${s}/ice`,{session_id:i,...r})},sendStreamRequest(s,r,i){return o.post(`/streams/${s}`,{session_id:r,...i})},close(s,r){return o.delete(`/streams/${s}`,{session_id:r})}}}function Qe(e,t,a,n){const o=te(e,`${t}/agents/${a}`,n);return{createStream(s,r){return o.post("/streams",{driver_url:s.driver_url,face:s.face,config:s.config,output_resolution:s.output_resolution,compatibility_mode:s.compatibility_mode,stream_warmup:s.stream_warmup,session_timeout:s.session_timeout,stream_greeting:s.stream_greeting},r)},startConnection(s,r,i,c){return o.post(`/streams/${s}/sdp`,{session_id:i,answer:r},c)},addIceCandidate(s,r,i,c){return o.post(`/streams/${s}/ice`,{session_id:i,...r},c)},sendStreamRequest(s,r,i,c){return o.post(`/streams/${s}`,{session_id:r,...i},c)},close(s,r,i){return o.delete(`/streams/${s}`,{session_id:r},i)}}}function Ze(e,t,a){const n=(t.timestamp-e.timestamp)/1e3;return{duration:n,bytesReceived:t.bytesReceived-e.bytesReceived,bitrate:Math.round((t.bytesReceived-e.bytesReceived)*8/n),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)/n,framesPerSecond:t.framesPerSecond,freezeCount:t.freezeCount-e.freezeCount,freezeDuration:t.freezeDuration-e.freezeDuration,lowFpsCount:a}}function Oe(e){return e.filter(t=>t.freezeCount>0||t.framesPerSecond<21||t.framesDropped>0||t.packetsLost>0).map(t=>{const{timestamp:a,...n}=t,o=[];return t.freezeCount>0&&o.push("freeze"),t.framesPerSecond<21&&o.push("low fps"),t.framesDropped>0&&o.push("frames dropped"),t.packetsLost>0&&o.push("packet loss"),{...n,causes:o}})}function et(e){let t="";for(const a of e.values())if(a&&a.type==="codec"&&a.mimeType.startsWith("video")&&(t=a.mimeType.split("/")[1]),a&&a.type==="inbound-rtp"&&a.kind==="video")return{codec:t,timestamp:a.timestamp,bytesReceived:a.bytesReceived,packetsReceived:a.packetsReceived,packetsLost:a.packetsLost,framesDropped:a.framesDropped,framesDecoded:a.framesDecoded,jitter:a.jitter,jitterBufferDelay:a.jitterBufferDelay,jitterBufferEmittedCount:a.jitterBufferEmittedCount,avgJitterDelayInInterval:a.jitterBufferDelay/a.jitterBufferEmittedCount,frameWidth:a.frameWidth,frameHeight:a.frameHeight,framesPerSecond:a.framesPerSecond,freezeCount:a.freezeCount,freezeDuration:a.totalFreezesDuration};return{}}function tt(e,t,a){const n=e.map((i,c)=>c===0?a?{timestamp:i.timestamp,duration:0,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,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*c/1e3,bytesReceived:i.bytesReceived-e[c-1].bytesReceived,bitrate:(i.bytesReceived-e[c-1].bytesReceived)*8/(t/1e3),packetsReceived:i.packetsReceived-e[c-1].packetsReceived,packetsLost:i.packetsLost-e[c-1].packetsLost,framesDropped:i.framesDropped-e[c-1].framesDropped,framesDecoded:i.framesDecoded-e[c-1].framesDecoded,jitter:i.jitter,jitterBufferDelay:i.jitterBufferDelay-e[c-1].jitterBufferDelay,jitterBufferEmittedCount:i.jitterBufferEmittedCount-e[c-1].jitterBufferEmittedCount,avgJitterDelayInInterval:(i.jitterBufferDelay-e[c-1].jitterBufferDelay)/(i.jitterBufferEmittedCount-e[c-1].jitterBufferEmittedCount),framesPerSecond:i.framesPerSecond,freezeCount:i.freezeCount-e[c-1].freezeCount,freezeDuration:i.freezeDuration-e[c-1].freezeDuration}),o=Oe(n),s=o.reduce((i,c)=>i+(c.causes.includes("low fps")?1:0),0),r=n.map(i=>i.avgJitterDelayInInterval);return{webRTCStats:{anomalies:o,aggregateReport:Ze(e[0],e[e.length-1],s),minJitterDelayInInterval:Math.min(...r),maxJitterDelayInInterval:Math.max(...r),avgJitterDelayInInterval:Fe(r)},codec:e[0].codec,resolution:`${e[0].frameWidth}x${e[0].frameHeight}`}}const ae=100,rt=Math.max(Math.ceil(400/ae),1),nt=.25,at=.28;function it(){let e=0,t,a,n=0;return o=>{for(const s of o.values())if(s&&s.type==="inbound-rtp"&&s.kind==="video"){const r=s.jitterBufferDelay,i=s.jitterBufferEmittedCount;if(a&&i>a){const l=r-t,h=i-a;n=l/h}t=r,a=i;const c=s.framesDecoded,g=c-e>0;return e=c,{isReceiving:g,avgJitterDelayInInterval:n,freezeCount:s.freezeCount}}return{isReceiving:!1,avgJitterDelayInInterval:n}}}function st(e,t,a,n,o,s=!1,r=!1){const i=s?1:0;let c=[],g,l=0,h=!1,k=0,p=K.Unknown,v=K.Unknown,D=0,R=0;const A=it();return setInterval(async()=>{const P=await e.getStats(),{isReceiving:d,avgJitterDelayInInterval:y,freezeCount:m}=A(P),M=et(P);if(d)l=0,D=m-R,v=y<nt?K.Strong:y>at&&D>1?K.Weak:p,v!==p&&(o==null||o(v),p=v,R+=D,D=0),h||(n==null||n(C.Start),r&&k>=i&&!t()&&a(),g=c[c.length-1],c=[],k++,h=!0),c.push(M);else if(h&&(l++,l>=rt)){const I=tt(c,ae,g);n==null||n(C.Stop,I),!r&&!t()&&a(),h=!1}},ae)}let Se=!1;const W=(e,t)=>Se&&console.log(e,t),ot=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function Ee(e){switch(e){case"connected":return E.Connected;case"checking":return E.Connecting;case"failed":return E.Fail;case"new":return E.New;case"closed":return E.Closed;case"disconnected":return E.Disconnected;case"completed":return E.Completed;default:return E.New}}function ct({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,report:n}){e===C.Start&&t===C.Start?a==null||a(C.Start):e===C.Stop&&t===C.Stop&&(a==null||a(C.Stop,n))}function dt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:n,report:o}){e===C.Start?a==null||a(C.Start):e===C.Stop&&(a==null||a(C.Stop,o)),t===C.Start?n==null||n(x.Talking):t===C.Stop&&(n==null||n(x.Idle))}function Me({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:n,streamType:o,report:s}){o===J.Legacy?ct({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,report:s}):o===J.Fluent&&dt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:n,report:s})}async function lt(e,t,{debug:a=!1,callbacks:n,auth:o,baseURL:s=X}){Se=a;let r=!1,i=!1,c=C.Stop,g=C.Stop,l=K.Unknown;const{startConnection:h,sendStreamRequest:k,close:p,createStream:v,addIceCandidate:D}=t.videoType===Z.Clip?Ge(o,s,e,n.onError):Qe(o,s,e,n.onError),{id:R,offer:A,ice_servers:P,session_id:d,fluent:y}=await v(t),m=new ot({iceServers:P}),M=m.createDataChannel("JanusDataChannel");if(!d)throw new Error("Could not create session_id");const I=y?J.Fluent:J.Legacy,T=t.stream_warmup&&!y,z=()=>r,B=()=>{var u;r=!0,i&&((u=n.onConnectionStateChange)==null||u.call(n,E.Connected))},$=st(m,z,B,(u,w)=>Me({statsSignal:g=u,dataChannelSignal:I===J.Legacy?c:void 0,onVideoStateChange:n.onVideoStateChange,onAgentActivityStateChange:n.onAgentActivityStateChange,report:w,streamType:I}),u=>{var w;return(w=n.onConnectivityStateChange)==null?void 0:w.call(n,l)},T,!!t.stream_greeting);m.onicecandidate=u=>{var w;W("peerConnection.onicecandidate",u);try{u.candidate&&u.candidate.sdpMid&&u.candidate.sdpMLineIndex!==null?D(R,{candidate:u.candidate.candidate,sdpMid:u.candidate.sdpMid,sdpMLineIndex:u.candidate.sdpMLineIndex},d):D(R,{candidate:null},d)}catch(b){(w=n.onError)==null||w.call(n,b,{streamId:R})}},M.onopen=()=>{i=!0,(!T&&!t.stream_greeting||r)&&B()},M.onmessage=u=>{u.data in O&&(c=O[u.data],Me({statsSignal:I===J.Legacy?g:void 0,dataChannelSignal:c,onVideoStateChange:n.onVideoStateChange,onAgentActivityStateChange:n.onAgentActivityStateChange,streamType:I}))},m.oniceconnectionstatechange=()=>{var w;W("peerConnection.oniceconnectionstatechange => "+m.iceConnectionState);const u=Ee(m.iceConnectionState);u!==E.Connected&&((w=n.onConnectionStateChange)==null||w.call(n,u))},m.ontrack=u=>{var w;W("peerConnection.ontrack",u),(w=n.onSrcObjectReady)==null||w.call(n,u.streams[0])},await m.setRemoteDescription(A),W("set remote description OK");const S=await m.createAnswer();return W("create answer OK"),await m.setLocalDescription(S),W("set local description OK"),await h(R,S,d),W("start connection OK"),{speak(u){return k(R,d,u)},async disconnect(){var u,w,b;if(R){const L=Ee(m.iceConnectionState);if(m){if(L===E.New){(u=n.onVideoStateChange)==null||u.call(n,C.Stop),clearInterval($);return}m.close(),m.oniceconnectionstatechange=null,m.onnegotiationneeded=null,m.onicecandidate=null,m.ontrack=null}try{L===E.Connected&&await p(R,d).catch(F=>{})}catch(F){W("Error on close stream connection",F)}(w=n.onVideoStateChange)==null||w.call(n,C.Stop),(b=n.onAgentActivityStateChange)==null||b.call(n,x.Idle),clearInterval($)}},sessionId:d,streamId:R,streamType:I}}function ut(e,t,a){var o;const{streamOptions:n}=t??{};return{videoType:ge(e.presenter.type),output_resolution:n==null?void 0:n.outputResolution,session_timeout:n==null?void 0:n.sessionTimeout,stream_warmup:n==null?void 0:n.streamWarmup,compatibility_mode:n==null?void 0:n.compatibilityMode,stream_greeting:re(e.presenter)!=="clip"&&((o=t==null?void 0:t.streamOptions)!=null&&o.streamGreeting)?a:void 0}}function ft(e,t,a,n){q.get()>0&&(e===C.Start?n.linkTrack("agent-video",{event:"start",latency:q.get(!0)},"start",[V.StreamVideoCreated]):e===C.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,...a},"done",[V.StreamVideoDone]))}function mt(e,t,a,n){return q.reset(),new Promise(async(o,s)=>{try{const r=await lt(e.id,ut(e,t,n),{...t,analytics:a,callbacks:{...t.callbacks,onConnectionStateChange:i=>{var c,g;(g=(c=t.callbacks).onConnectionStateChange)==null||g.call(c,i),i===E.Connected&&o(r)},onVideoStateChange:(i,c)=>{var g,l;(l=(g=t.callbacks).onVideoStateChange)==null||l.call(g,i),ft(i,e,c,a)}}})}catch(r){s(r)}})}async function gt(e,t,a,n,o,s){var g,l,h,k;const{chat:r,chatMode:i}=await ke(e,a,n,t.mode,t.persistentChat,o);if(i&&i!==t.mode&&(t.mode=i,(l=(g=t.callbacks).onModeChange)==null||l.call(g,i),i===j.TextOnly))return(k=(h=t.callbacks).onError)==null||k.call(h,new ie(i)),{chat:r};const c=await mt(e,t,n,s);return{chat:r,streamingManager:c}}async function ht(e,t){var R,A,P;let a=!0;const n=t.mixpanelKey||be,o=t.wsURL||Pe,s=t.baseURL||X,r={messages:[],chatMode:t.mode||j.Functional},i=Ce(t.auth,s,t.callbacks.onError),c=await i.getById(e),g=Ue(c),l=We({token:n,agent:c,isEnabled:t.enableAnalitics,distinctId:t.distinctId}),{onMessage:h,clearQueue:k}=Ye(l,r,t,c,()=>{var d;return(d=r.socketManager)==null?void 0:d.disconnect()});r.messages=Re(g,t.initialMessages),(A=(R=t.callbacks).onNewMessage)==null||A.call(R,[...r.messages],"answer"),l.track("agent-sdk",{event:"loaded",...Ae(c)});async function p(d){var z,B,$,S,u,w,b;(B=(z=t.callbacks).onConnectionStateChange)==null||B.call(z,E.Connecting),q.reset(),d&&!a&&(delete r.chat,r.messages=Re(g),(S=($=t.callbacks).onNewMessage)==null||S.call($,[...r.messages],"answer"));const y=t.mode===j.DirectPlayback?Promise.resolve(void 0):xe(t.auth,o,{onMessage:h,onError:t.callbacks.onError}),m=ee(()=>gt(c,t,i,l,r.chat,d?g:void 0),{limit:3,timeout:Te,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:L=>(L==null?void 0:L.message)!=="Could not connect"&&L.status!==429,delayMs:1e3}).catch(L=>{var F,Y;throw D(j.Maintenance),(Y=(F=t.callbacks).onConnectionStateChange)==null||Y.call(F,E.Fail),L}),[M,{streamingManager:I,chat:T}]=await Promise.all([y,m]);T&&T.id!==((u=r.chat)==null?void 0:u.id)&&((b=(w=t.callbacks).onNewChat)==null||b.call(w,T.id)),r.streamingManager=I,r.socketManager=M,r.chat=T,a=!1,D((T==null?void 0:T.chat_mode)??t.mode??j.Functional)}async function v(){var d,y,m,M;(d=r.socketManager)==null||d.disconnect(),await((y=r.streamingManager)==null?void 0:y.disconnect()),delete r.streamingManager,delete r.socketManager,(M=(m=t.callbacks).onConnectionStateChange)==null||M.call(m,E.Disconnected)}async function D(d){var y,m;d!==r.chatMode&&(l.track("agent-mode-change",{mode:d}),r.chatMode=d,r.chatMode!==j.Functional&&await v(),(m=(y=t.callbacks).onModeChange)==null||m.call(y,d))}return{agent:c,getStreamType:()=>{var d;return(d=r.streamingManager)==null?void 0:d.streamType},starterMessages:((P=c.knowledge)==null?void 0:P.starter_message)||[],getSTTToken:()=>i.getSTTToken(c.id),changeMode:D,enrichAnalytics:l.enrich,async connect(){var d;await p(!0),l.track("agent-chat",{event:"connect",chatId:(d=r.chat)==null?void 0:d.id,agentId:c.id,mode:r.chatMode})},async reconnect(){var d;await v(),await p(!1),l.track("agent-chat",{event:"reconnect",chatId:(d=r.chat)==null?void 0:d.id,agentId:c.id,mode:r.chatMode})},async disconnect(){var d;await v(),l.track("agent-chat",{event:"disconnect",chatId:(d=r.chat)==null?void 0:d.id,agentId:c.id,mode:r.chatMode})},async chat(d){var I,T,z,B,$;const y=()=>{if(t.mode===j.DirectPlayback)throw new H("Direct playback is enabled, chat is disabled");if(d.length>=800)throw new H("Message cannot be more than 800 characters");if(d.length===0)throw new H("Message cannot be empty");if(r.chatMode===j.Maintenance)throw new H("Chat is in maintenance mode");if(![j.TextOnly,j.Playground].includes(r.chatMode)){if(!r.streamingManager)throw new H("Streaming manager is not initialized");if(!r.chat)throw new H("Chat is not initialized")}},m=async()=>{var S,u;if(!r.chat){const w=await ke(c,i,l,r.chatMode,t.persistentChat);if(!w.chat)throw new N(r.chatMode,!!t.persistentChat);r.chat=w.chat,(u=(S=t.callbacks).onNewChat)==null||u.call(S,r.chat.id)}return r.chat.id},M=async(S,u)=>ee(()=>{var w,b;return i.chat(c.id,u,{chatMode:r.chatMode,streamId:(w=r.streamingManager)==null?void 0:w.streamId,sessionId:(b=r.streamingManager)==null?void 0:b.sessionId,messages:S.map(({matches:L,...F})=>F)},{...De(r.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:w=>{var F,Y,_e,Ie;const b=(F=w==null?void 0:w.message)==null?void 0:F.includes("missing or invalid session_id");return!((Y=w==null?void 0:w.message)==null?void 0:Y.includes("Stream Error"))&&!b?((Ie=(_e=t.callbacks).onError)==null||Ie.call(_e,w),!1):!0},onRetry:async()=>{await v(),await p(!1)}});try{k(),y(),r.messages.push({id:Q(),role:"user",content:d,created_at:new Date(q.update()).toISOString()}),(T=(I=t.callbacks).onNewMessage)==null||T.call(I,[...r.messages],"user");const S=await m(),u=await M([...r.messages],S);return r.messages.push({id:Q(),role:"assistant",content:u.result||"",created_at:new Date().toISOString(),context:u.context,matches:u.matches}),l.track("agent-message-send",{event:"success",mode:r.chatMode,messages:r.messages.length+1}),u.result&&((B=(z=t.callbacks).onNewMessage)==null||B.call(z,[...r.messages],"answer"),l.track("agent-message-received",{latency:q.get(!0),mode:r.chatMode,messages:r.messages.length})),u}catch(S){throw(($=r.messages[r.messages.length-1])==null?void 0:$.role)==="assistant"&&r.messages.pop(),l.track("agent-message-send",{event:"error",mode:r.chatMode,messages:r.messages.length}),S}},rate(d,y,m){var T,z,B,$;const M=r.messages.find(S=>S.id===d);if(r.chat){if(!M)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const I=((T=M.matches)==null?void 0:T.map(S=>[S.document_id,S.id]))??[];return l.track("agent-rate",{event:m?"update":"create",thumb:y===1?"up":"down",knowledge_id:((z=c.knowledge)==null?void 0:z.id)??"",mode:r.chatMode,matches:I,score:y}),m?i.updateRating(c.id,r.chat.id,m,{knowledge_id:((B=c.knowledge)==null?void 0:B.id)??"",message_id:d,matches:I,score:y}):i.createRating(c.id,r.chat.id,{knowledge_id:(($=c.knowledge)==null?void 0:$.id)??"",message_id:d,matches:I,score:y})},deleteRate(d){var y;if(!r.chat)throw new Error("Chat is not initialized");return l.track("agent-rate-delete",{type:"text",chat_id:(y=r.chat)==null?void 0:y.id,id:d,mode:r.chatMode}),i.deleteRating(c.id,r.chat.id,d)},speak(d){var M;if(!r.streamingManager)throw new Error("Please connect to the agent first");function y(){if(typeof d=="string"){if(!c.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:c.presenter.voice,input:d,ssml:!1}}if(d.type==="text"&&!d.provider){if(!c.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:c.presenter.voice,input:d.input,ssml:d.ssml}}return d}const m=y();return l.track("agent-speak",m),q.update(),r.streamingManager.speak({script:m,metadata:{chat_id:(M=r.chat)==null?void 0:M.id,agent_id:c.id}})}}}function wt(e,t,a){const{getById:n}=Ce(t,a||X);return n(e)}f.AgentActivityState=x,f.AgentStatus=de,f.ChatCreationFailed=N,f.ChatMode=j,f.ChatModeDowngraded=ie,f.ChatProgress=U,f.ConnectionState=E,f.ConnectivityState=K,f.DataChannelSignalMap=O,f.DocumentType=me,f.KnowledgeType=fe,f.PlanGroup=ce,f.Providers=he,f.RateState=le,f.StreamEvents=V,f.StreamType=J,f.StreamingState=C,f.Subject=ue,f.UserPlan=oe,f.ValidationError=H,f.VideoType=Z,f.VoiceAccess=we,f.WsError=se,f.createAgentManager=ht,f.getAgent=wt,f.mapVideoType=ge,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})});
@@ -1,5 +1,5 @@
1
- import { CreateStreamOptions, PayloadType, StreamingManagerOptions } from '../../types/index';
2
- export declare function createStreamingManager<T extends CreateStreamOptions>(agentId: string, agent: T, { debug, callbacks, auth, baseURL, warmup }: StreamingManagerOptions): Promise<{
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 }: StreamingManagerOptions): Promise<{
3
3
  /**
4
4
  * Method to send request to server to get clip or talk depend on you payload
5
5
  * @param payload
@@ -17,5 +17,6 @@ export declare function createStreamingManager<T extends CreateStreamOptions>(ag
17
17
  * Id of current RTC stream
18
18
  */
19
19
  streamId: string;
20
+ streamType: StreamType;
20
21
  }>;
21
22
  export type StreamingManager<T extends CreateStreamOptions> = Awaited<ReturnType<typeof createStreamingManager<T>>>;
@@ -1,4 +1,4 @@
1
1
  /// <reference types="node" />
2
- import { StreamingState } from '../../../types';
2
+ import { StreamingState, ConnectivityState } from '../../../types';
3
3
  import { VideoRTCStatsReport } from './report';
4
- export declare function pollStats(peerConnection: RTCPeerConnection, getIsConnected: () => boolean, onConnected: () => void, onVideoStateChange?: (state: StreamingState, statsReport?: VideoRTCStatsReport) => void, warmup?: boolean, shouldWaitForGreeting?: boolean): NodeJS.Timeout;
4
+ export declare function pollStats(peerConnection: RTCPeerConnection, getIsConnected: () => boolean, onConnected: () => void, onVideoStateChange?: (state: StreamingState, statsReport?: VideoRTCStatsReport) => void, onConnectivityStateChange?: (state: ConnectivityState) => void, warmup?: boolean, shouldWaitForGreeting?: boolean): NodeJS.Timeout;
@@ -3,6 +3,9 @@ export interface VideoRTCStatsReport {
3
3
  webRTCStats: {
4
4
  anomalies: AnalyticsRTCStatsReport[];
5
5
  aggregateReport: AnalyticsRTCStatsReport;
6
+ minJitterDelayInInterval: number;
7
+ maxJitterDelayInInterval: number;
8
+ avgJitterDelayInInterval: number;
6
9
  };
7
10
  codec: string;
8
11
  resolution: string;
@@ -1,7 +1,7 @@
1
1
  import { STTTokenResponse } from '../..';
2
- import { SupportedStreamScipt } from '../../stream-script';
3
2
  import { Auth } from '../../auth';
4
- import { CompatibilityMode, ConnectionState, SendStreamPayloadResponse, StreamEvents, StreamingState } from '../../stream';
3
+ import { AgentActivityState, CompatibilityMode, ConnectionState, ConnectivityState, SendStreamPayloadResponse, StreamEvents, StreamType, StreamingState } from '../../stream';
4
+ import { SupportedStreamScript } from '../../stream-script';
5
5
  import { Agent } from './agent';
6
6
  import { ChatMode, ChatResponse, Message, RatingEntity } from './chat';
7
7
  /**
@@ -67,10 +67,20 @@ interface ManagerCallbacks {
67
67
  * @param mode - ChatMode
68
68
  */
69
69
  onModeChange?(mode: ChatMode): void;
70
+ /**
71
+ * Optional callback function that will be triggered each time the user internet connectivity state change by realtime estimated bitrate
72
+ * @param state - ConnectivityState
73
+ */
74
+ onConnectivityStateChange?(state: ConnectivityState): void;
70
75
  /**
71
76
  * Optional callback function that will be triggered on fetch request errors
72
77
  */
73
78
  onError?: (error: Error, errorData?: object) => void;
79
+ /**
80
+ * Optional callback function that will be triggered each time the agent activity state changes
81
+ * @param state - AgentActivityState
82
+ */
83
+ onAgentActivityStateChange?(state: AgentActivityState): void;
74
84
  }
75
85
  interface StreamOptions {
76
86
  /**
@@ -130,6 +140,10 @@ export interface AgentManager {
130
140
  * To know more about agents go to https://docs.d-id.com/reference/agents
131
141
  */
132
142
  agent: Agent;
143
+ /**
144
+ * Get the current stream type of the agent
145
+ */
146
+ getStreamType: () => StreamType | undefined;
133
147
  /**
134
148
  * Array of starter messages that will be sent to the agent when the chat starts
135
149
  */
@@ -172,7 +186,7 @@ export interface AgentManager {
172
186
  * Method to make your agent read the text you provide or reproduce sound
173
187
  * @param payload
174
188
  */
175
- speak: (payload: SupportedStreamScipt | string) => Promise<SendStreamPayloadResponse>;
189
+ speak: (payload: SupportedStreamScript | string) => Promise<SendStreamPayloadResponse>;
176
190
  /**
177
191
  * Method to change the mode of the chat
178
192
  * @param mode - ChatMode
@@ -33,6 +33,7 @@ export interface ICreateStreamRequestResponse extends StickyRequest {
33
33
  jsep: Jsep;
34
34
  offer: any;
35
35
  ice_servers: IceServer[];
36
+ fluent?: boolean;
36
37
  }
37
38
  export interface IceCandidate {
38
39
  /**
@@ -9,6 +9,16 @@ export declare enum StreamingState {
9
9
  Start = "START",
10
10
  Stop = "STOP"
11
11
  }
12
+ export declare enum ConnectivityState {
13
+ Strong = "STRONG",
14
+ Weak = "WEAK",
15
+ Unknown = "UNKNOWN"
16
+ }
17
+ export declare enum AgentActivityState {
18
+ Idle = "IDLE",
19
+ Talking = "TALKING"
20
+ }
21
+ export declare const DataChannelSignalMap: Record<string, StreamingState>;
12
22
  export declare enum StreamEvents {
13
23
  ChatAnswer = "chat/answer",
14
24
  ChatPartial = "chat/partial",
@@ -31,12 +41,18 @@ export declare enum ConnectionState {
31
41
  Completed = "completed",
32
42
  Disconnected = "disconnected"
33
43
  }
44
+ export declare enum StreamType {
45
+ Legacy = "legacy",
46
+ Fluent = "fluent"
47
+ }
34
48
  export interface ManagerCallbacks {
35
49
  onMessage?: (event: string, data: string) => void;
36
50
  onConnectionStateChange?: (state: ConnectionState) => void;
37
51
  onVideoStateChange?: (state: StreamingState, report?: VideoRTCStatsReport) => void;
38
52
  onSrcObjectReady?: (value: MediaStream) => void;
39
53
  onError?: (error: Error, errorData: object) => void;
54
+ onConnectivityStateChange?: (state: ConnectivityState) => void;
55
+ onAgentActivityStateChange?: (state: AgentActivityState) => void;
40
56
  }
41
57
  export type ManagerCallbackKeys = keyof ManagerCallbacks;
42
58
  export interface TalkStreamOptions extends CreateTalkStreamRequest {
@@ -60,7 +76,6 @@ export interface StreamingManagerOptions {
60
76
  callbacks: ManagerCallbacks;
61
77
  baseURL?: string;
62
78
  debug?: boolean;
63
- warmup?: boolean;
64
79
  auth: Auth;
65
80
  analytics: Analytics;
66
81
  }
@@ -77,6 +92,8 @@ export interface SlimRTCStatsReport {
77
92
  framesDecoded: any;
78
93
  jitter: any;
79
94
  jitterBufferDelay: number;
95
+ jitterBufferEmittedCount: number;
96
+ avgJitterDelayInInterval: number;
80
97
  frameWidth: any;
81
98
  frameHeight: any;
82
99
  framesPerSecond: any;
@@ -94,6 +111,8 @@ export interface AnalyticsRTCStatsReport {
94
111
  framesDecoded: number;
95
112
  jitter: number;
96
113
  jitterBufferDelay: number;
114
+ jitterBufferEmittedCount: number;
115
+ avgJitterDelayInInterval: number;
97
116
  framesPerSecond: number;
98
117
  freezeCount: number;
99
118
  freezeDuration: number;
@@ -50,4 +50,4 @@ export interface Stream_LLM_Script {
50
50
  stream_audio?: boolean;
51
51
  }
52
52
  export type StreamScript = Stream_Text_Script | Stream_Audio_Script | Stream_LLM_Script;
53
- export type SupportedStreamScipt = Stream_Text_Script | Stream_Audio_Script;
53
+ export type SupportedStreamScript = Stream_Text_Script | Stream_Audio_Script;
@@ -10,4 +10,6 @@ export declare function getAnalyticsInfo(agent: Agent): {
10
10
  provider: import('../types/index').Providers | undefined;
11
11
  };
12
12
  };
13
+ export declare const sumFunc: (numbers: number[]) => number;
14
+ export declare const average: (numbers: number[]) => number;
13
15
  export declare function getStreamAnalyticsProps(data: any, agent: Agent, additionalProps: Record<string, any>): any;
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.2",
4
+ "version": "1.1.0-beta.4",
5
5
  "type": "module",
6
6
  "description": "d-id client sdk",
7
7
  "repository": {