@d-id/client-sdk 1.1.0-beta.5 → 1.1.0-beta.6

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(f,I){typeof exports=="object"&&typeof module<"u"?I(exports):typeof define=="function"&&define.amd?define(["exports"],I):(f=typeof globalThis<"u"?globalThis:f||self,I(f.index={}))})(this,function(f){"use strict";var ht=Object.defineProperty;var wt=(f,I,F)=>I in f?ht(f,I,{enumerable:!0,configurable:!0,writable:!0,value:F}):f[I]=F;var Y=(f,I,F)=>(wt(f,typeof I!="symbol"?I+"":I,F),F);class I extends Error{constructor({kind:r,description:a,error:o}){super(JSON.stringify({kind:r,description:a}));Y(this,"kind");Y(this,"description");Y(this,"error");this.kind=r,this.description=a,this.error=o}}class F extends I{constructor(t,r){super({kind:"ChatCreationFailed",description:`Failed to create ${r?"persistent":""} chat, mode: ${t}`})}}class re extends I{constructor(t){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${t}`})}}class H extends I{constructor(r,a){super({kind:"ValidationError",description:r});Y(this,"key");this.key=a}}class ae extends I{constructor(t){super({kind:"WSError",description:t})}}var ie=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(ie||{}),se=(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))(se||{}),oe=(e=>(e.Created="created",e.Started="started",e.Done="done",e.Error="error",e.Rejected="rejected",e.Ready="ready",e))(oe||{}),ce=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(ce||{}),j=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e.DirectPlayback="DirectPlayback",e))(j||{}),K=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(K||{}),de=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(de||{}),le=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(le||{}),ue=(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))(ue||{}),G=(e=>(e.Clip="clip",e.Talk="talk",e))(G||{});const fe=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||{}),x=(e=>(e.Idle="IDLE",e.Talking="TALKING",e))(x||{});const Z={"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||{}),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||{}),N=(e=>(e.Legacy="legacy",e.Fluent="fluent",e))(N||{}),me=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(me||{}),ge=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(ge||{});const Ie=45*1e3,Te="X-Playground-Chat",X="https://api.d-id.com",je="wss://notifications.d-id.com",be="79f81a83a67430be2bc0fd61042b8faa",he=e=>new Promise(t=>setTimeout(t,e)),Q=()=>Math.random().toString(16).slice(2);function Pe(e,t){let r;return{promise:new Promise((o,s)=>{r=setTimeout(()=>s(new Error(t)),e)}),clear:()=>clearTimeout(r)}}async function O(e,t){const r={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 a;for(let o=1;o<=r.limit;o++)try{if(!r.timeout)return await e();const{promise:s,clear:n}=Pe(r.timeout,r.timeoutErrorMessage),i=e().finally(n);return await Promise.race([i,s])}catch(s){if(a=s,!r.shouldRetryFn(s)||o>=r.limit)throw s;await he(r.delayMs),r.onRetry(s)}throw a}function we(){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 Ae=Q();function ye(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}.${we()}_${Ae}`;throw new Error(`Unknown auth type: ${e}`)}const Be=e=>O(e,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:t=>t.status===429});function ee(e,t=X,r){const a=async(o,s)=>{const{skipErrorHandler:n,...i}=s||{},c=await Be(()=>fetch(t+(o!=null&&o.startsWith("/")?o:`/${o}`),{...i,headers:{...i.headers,Authorization:ye(e),"Content-Type":"application/json"}}));if(!c.ok){let l=await c.text().catch(()=>`Failed to fetch with status ${c.status}`);const m=new Error(l);throw r&&!n&&r(m,{url:o,options:i,headers:c.headers}),m}return c.json()};return{get(o,s){return a(o,{...s,method:"GET"})},post(o,s,n){return a(o,{...n,body:JSON.stringify(s),method:"POST"})},delete(o,s,n){return a(o,{...n,body:JSON.stringify(s),method:"DELETE"})},patch(o,s,n){return a(o,{...n,body:JSON.stringify(s),method:"PATCH"})}}}function pe(e,t=X,r){const a=ee(e,`${t}/agents`,r);return{create(o,s){return a.post("/",o,s)},getAgents(o,s){return a.get(`/${o?`?tag=${o}`:""}`,s).then(n=>n??[])},getById(o,s){return a.get(`/${o}`,s)},delete(o,s){return a.delete(`/${o}`,void 0,s)},update(o,s,n){return a.patch(`/${o}`,s,n)},newChat(o,s,n){return a.post(`/${o}/chat`,s,n)},chat(o,s,n,i){return a.post(`/${o}/chat/${s}`,n,i)},createRating(o,s,n,i){return a.post(`/${o}/chat/${s}/ratings`,n,i)},updateRating(o,s,n,i,c){return a.patch(`/${o}/chat/${s}/ratings/${n}`,i,c)},deleteRating(o,s,n,i){return a.delete(`/${o}/chat/${s}/ratings/${n}`,i)},getSTTToken(o,s){return a.get(`/${o}/stt-token`,s)}}}const ve=e=>e.type==="clip"&&e.presenter_id.startsWith("v2_")?"clip_v2":e.type;function $e(e){var o,s,n,i;const t=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",r=()=>{const c=navigator.platform;return c.toLowerCase().includes("win")?"Windows":c.toLowerCase().includes("mac")?"Mac OS X":c.toLowerCase().includes("linux")?"Linux":"Unknown"},a=e.presenter;return{$os:`${r()}`,isMobile:`${t()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:ve(a),agentVoice:{voiceId:(s=(o=e.presenter)==null?void 0:o.voice)==null?void 0:s.voice_id,provider:(i=(n=e.presenter)==null?void 0:n.voice)==null?void 0:i.type}}}const Le=e=>e.reduce((t,r)=>t+r,0),ze=e=>Le(e)/e.length;function Fe(e,t,r){var c,l,m;const{event:a,...o}=e,{template:s}=(t==null?void 0:t.llm)||{},{language:n}=((c=t==null?void 0:t.presenter)==null?void 0:c.voice)||{};return{...o,llm:{...o.llm,template:s},script:{...o.script,provider:{...(l=o==null?void 0:o.script)==null?void 0:l.provider,language:n}},stitch:(t==null?void 0:t.presenter.type)==="talk"?(m=t==null?void 0:t.presenter)==null?void 0:m.stitch:void 0,...r}}let te={};const Ne="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function Je(e){var s,n,i,c,l,m;const t=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk",r=e.agent.presenter,a=(s=e.agent.llm)==null?void 0:s.prompt_customization,o={token:e.token||"testKey",distinct_id:e.distinctId||we(),agentId:e.agent.id,agentType:ve(r),owner_id:e.agent.owner_id??"",promptVersion:(n=e.agent.llm)==null?void 0:n.prompt_version,behavior:{role:a==null?void 0:a.role,personality:a==null?void 0:a.personality,instructions:(i=e.agent.llm)==null?void 0:i.instructions},temperature:(c=e.agent.llm)==null?void 0:c.temperature,knowledgeSource:a==null?void 0:a.knowledge_source,starterQuestionsCount:(m=(l=e.agent.knowledge)==null?void 0:l.starter_message)==null?void 0:m.length,topicsToAvoid:a==null?void 0:a.topics_to_avoid,maxResponseLength:a==null?void 0:a.max_response_length};return{...o,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 p in g)(typeof g[p]=="string"||typeof g[p]=="number")&&(D[p]=g[p]);this.additionalProperties={...this.additionalProperties,...D}},async track(g,D){if(!this.isEnabled)return Promise.resolve();const{audioPath:p,...R}=D||{},S={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:g,properties:{...this.additionalProperties,...R,...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(Ne,S).then(_=>_.json())}catch(_){return console.error(_)}},linkTrack(g,D,p,R){te[g]||(te[g]={events:{},resolvedDependencies:[]}),R.includes(p)||R.push(p);const S=te[g];if(S.events[p]={props:D},S.resolvedDependencies.push(p),R.every(B=>S.resolvedDependencies.includes(B))){const B=R.reduce((d,h)=>S.events[h]?{...d,...S.events[h].props}:d,{});this.track(g,B),S.resolvedDependencies=S.resolvedDependencies.filter(d=>!R.includes(d)),R.forEach(d=>{delete S.events[d]})}}}}function We(){let e=0;return{reset:()=>e=0,update:()=>e=Date.now(),get:(t=!1)=>t?Date.now()-e:e}}const J=We();function Ce(e){return e===j.Playground?{headers:{[Te]:"true"}}:{}}async function ke(e,t,r,a,o=!1,s){try{return!s&&a!==j.DirectPlayback&&(s=await t.newChat(e.id,{persist:o},Ce(a)),r.track("agent-chat",{event:"created",chat_id:s.id,agent_id:e.id,mode:a})),{chat:s,chatMode:(s==null?void 0:s.chat_mode)??a}}catch(n){try{const i=JSON.parse(n.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){return e&&e.length>0?e:[]}function He(e){return new Promise((t,r)=>{const{callbacks:a,host:o,auth:s}=e,{onMessage:n=null,onOpen:i=null,onClose:c=null,onError:l=null}=a||{},m=new WebSocket(`${o}?authorization=${ye(s)}`);m.onmessage=n,m.onclose=c,m.onerror=g=>{console.error(g),l==null||l("Websocket failed to connect",g),r(g)},m.onopen=g=>{i==null||i(g),t(m)}})}async function Ke(e){const{retries:t=1}=e;let r=null;for(let a=0;(r==null?void 0:r.readyState)!==WebSocket.OPEN;a++)try{r=await He(e)}catch(o){if(a===t)throw o;await he(a*500)}return r}async function qe(e,t,r){const a=r!=null&&r.onMessage?[r.onMessage]:[],o=await Ke({auth:e,host:t,callbacks:{onError:s=>{var n;return(n=r.onError)==null?void 0:n.call(r,new ae(s))},onMessage(s){const n=JSON.parse(s.data);a.forEach(i=>i(n.event,n))}}});return{socket:o,disconnect:()=>o.close(),subscribeToEvents:s=>a.push(s)}}function xe(e){if(e.answer!==void 0)return e.answer;let t=0,r="";for(;t in e;)r+=e[t++];return r}function Ve(e,t,r,a,o){const s=a.messages[a.messages.length-1];if(!(e===K.Partial||e===K.Answer)||(s==null?void 0:s.role)!=="assistant")return;const{content:n,sequence:i}=t;e===K.Partial?r[i]=n:r.answer=n;const c=xe(r);(s.content!==c||e===K.Answer)&&(s.content=c,o==null||o([...a.messages],e))}function Xe(e,t,r,a,o){let s={};return{clearQueue:()=>s={},onMessage:(n,i)=>{var c,l;if("content"in i)Ve(n,i,s,t,r.callbacks.onNewMessage),n===K.Answer&&e.track("agent-message-received",{messages:t.messages.length,mode:t.chatMode});else{const m=V,g=[m.StreamVideoDone,m.StreamVideoError,m.StreamVideoRejected],D=[m.StreamFailed,m.StreamVideoError,m.StreamVideoRejected],p=Fe(i,a,{mode:t.chatMode});if(n=n,n===m.StreamVideoCreated)e.linkTrack("agent-video",p,m.StreamVideoCreated,["start"]);else if(g.includes(n)){const R=n.split("/")[1];D.includes(n)?e.track("agent-video",{...p,event:R}):e.linkTrack("agent-video",{...p,event:R},n,["done"])}D.includes(n)&&((l=(c=r.callbacks).onError)==null||l.call(c,new Error(`Stream failed with event ${n}`),{data:i})),i.event===m.StreamDone&&o()}}}}function Ye(e,t,r,a){const o=ee(e,`${t}/agents/${r}`,a);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,fluent:s.fluent})},startConnection(s,n,i){return o.post(`/streams/${s}/sdp`,{session_id:i,answer:n})},addIceCandidate(s,n,i){return o.post(`/streams/${s}/ice`,{session_id:i,...n})},sendStreamRequest(s,n,i){return o.post(`/streams/${s}`,{session_id:n,...i})},close(s,n){return o.delete(`/streams/${s}`,{session_id:n})}}}function Qe(e,t,r,a){const o=ee(e,`${t}/agents/${r}`,a);return{createStream(s,n){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,fluent:s.fluent},n)},startConnection(s,n,i,c){return o.post(`/streams/${s}/sdp`,{session_id:i,answer:n},c)},addIceCandidate(s,n,i,c){return o.post(`/streams/${s}/ice`,{session_id:i,...n},c)},sendStreamRequest(s,n,i,c){return o.post(`/streams/${s}`,{session_id:n,...i},c)},close(s,n,i){return o.delete(`/streams/${s}`,{session_id:n},i)}}}function Ge(e,t,r){const a=(t.timestamp-e.timestamp)/1e3;return{duration:a,bytesReceived:t.bytesReceived-e.bytesReceived,bitrate:Math.round((t.bytesReceived-e.bytesReceived)*8/a),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)/a,framesPerSecond:t.framesPerSecond,freezeCount:t.freezeCount-e.freezeCount,freezeDuration:t.freezeDuration-e.freezeDuration,lowFpsCount:r}}function Ze(e){return e.filter(t=>t.freezeCount>0||t.framesPerSecond<21||t.framesDropped>0||t.packetsLost>0).map(t=>{const{timestamp:r,...a}=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"),{...a,causes:o}})}function Oe(e){let t="";for(const r of e.values())if(r&&r.type==="codec"&&r.mimeType.startsWith("video")&&(t=r.mimeType.split("/")[1]),r&&r.type==="inbound-rtp"&&r.kind==="video")return{codec:t,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 et(e,t,r){const a=e.map((i,c)=>c===0?r?{timestamp:i.timestamp,duration:0,bytesReceived:i.bytesReceived-r.bytesReceived,bitrate:(i.bytesReceived-r.bytesReceived)*8/(t/1e3),packetsReceived:i.packetsReceived-r.packetsReceived,packetsLost:i.packetsLost-r.packetsLost,framesDropped:i.framesDropped-r.framesDropped,framesDecoded:i.framesDecoded-r.framesDecoded,jitter:i.jitter,jitterBufferDelay:i.jitterBufferDelay-r.jitterBufferDelay,jitterBufferEmittedCount:i.jitterBufferEmittedCount-r.jitterBufferEmittedCount,avgJitterDelayInInterval:(i.jitterBufferDelay-r.jitterBufferDelay)/(i.jitterBufferEmittedCount-r.jitterBufferEmittedCount),framesPerSecond:i.framesPerSecond,freezeCount:i.freezeCount-r.freezeCount,freezeDuration:i.freezeDuration-r.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=Ze(a),s=o.reduce((i,c)=>i+(c.causes.includes("low fps")?1:0),0),n=a.map(i=>i.avgJitterDelayInInterval);return{webRTCStats:{anomalies:o,aggregateReport:Ge(e[0],e[e.length-1],s),minJitterDelayInInterval:Math.min(...n),maxJitterDelayInInterval:Math.max(...n),avgJitterDelayInInterval:ze(n)},codec:e[0].codec,resolution:`${e[0].frameWidth}x${e[0].frameHeight}`}}const ne=100,tt=Math.max(Math.ceil(400/ne),1),nt=.25,rt=.28;function at(){let e=0,t,r,a=0;return o=>{for(const s of o.values())if(s&&s.type==="inbound-rtp"&&s.kind==="video"){const n=s.jitterBufferDelay,i=s.jitterBufferEmittedCount;if(r&&i>r){const m=n-t,g=i-r;a=m/g}t=n,r=i;const c=s.framesDecoded,l=c-e>0;return e=c,{isReceiving:l,avgJitterDelayInInterval:a,freezeCount:s.freezeCount}}return{isReceiving:!1,avgJitterDelayInInterval:a}}}function it(e,t,r,a,o,s=!1){let n=[],i,c=0,l=!1,m=q.Unknown,g=q.Unknown,D=0,p=0;const R=at();return setInterval(async()=>{const S=await e.getStats(),{isReceiving:_,avgJitterDelayInInterval:B,freezeCount:d}=R(S),h=Oe(S);if(_)c=0,D=d-p,g=B<nt?q.Strong:B>rt&&D>1?q.Weak:m,g!==m&&(o==null||o(g),m=g,p+=D,D=0),l||(a==null||a(y.Start),i=n[n.length-1],n=[],l=!0),n.push(h);else if(l&&(c++,c>=tt)){const C=et(n,ne,i);a==null||a(y.Stop,C),t()||r(),l=!1}},ne)}let De=!1;const W=(e,t)=>De&&console.log(e,t),st=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function Re(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 ot({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,report:a}){e===y.Start&&t===y.Start?r==null||r(y.Start):e===y.Stop&&t===y.Stop&&(r==null||r(y.Stop,a))}function ct({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,onAgentActivityStateChange:a,report:o}){e===y.Start?r==null||r(y.Start):e===y.Stop&&(r==null||r(y.Stop,o)),t===y.Start?a==null||a(x.Talking):t===y.Stop&&(a==null||a(x.Idle))}function Se({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,onAgentActivityStateChange:a,streamType:o,report:s}){o===N.Legacy?ot({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,report:s}):o===N.Fluent&&ct({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,onAgentActivityStateChange:a,report:s})}async function dt(e,t,{debug:r=!1,callbacks:a,auth:o,baseURL:s=X}){De=r;let n=!1,i=!1,c=y.Stop,l=y.Stop,m=q.Unknown;const{startConnection:g,sendStreamRequest:D,close:p,createStream:R,addIceCandidate:S}=t.videoType===G.Clip?Ye(o,s,e,a.onError):Qe(o,s,e,a.onError),{id:_,offer:B,ice_servers:d,session_id:h,fluent:C}=await R(t),w=new st({iceServers:d}),b=w.createDataChannel("JanusDataChannel");if(!h)throw new Error("Could not create session_id");const k=C?N.Fluent:N.Legacy,P=t.stream_warmup&&!C,L=()=>n,$=()=>{var u;n=!0,i&&((u=a.onConnectionStateChange)==null||u.call(a,M.Connected))},E=it(w,L,$,(u,v)=>Se({statsSignal:l=u,dataChannelSignal:k===N.Legacy?c:void 0,onVideoStateChange:a.onVideoStateChange,onAgentActivityStateChange:a.onAgentActivityStateChange,report:v,streamType:k}),u=>{var v;return(v=a.onConnectivityStateChange)==null?void 0:v.call(a,m)},P);w.onicecandidate=u=>{var v;W("peerConnection.onicecandidate",u);try{u.candidate&&u.candidate.sdpMid&&u.candidate.sdpMLineIndex!==null?S(_,{candidate:u.candidate.candidate,sdpMid:u.candidate.sdpMid,sdpMLineIndex:u.candidate.sdpMLineIndex},h):S(_,{candidate:null},h)}catch(A){(v=a.onError)==null||v.call(a,A,{streamId:_})}},b.onopen=()=>{i=!0,(!P||n)&&$()},b.onmessage=u=>{u.data in Z&&(c=Z[u.data],Se({statsSignal:k===N.Legacy?l:void 0,dataChannelSignal:c,onVideoStateChange:a.onVideoStateChange,onAgentActivityStateChange:a.onAgentActivityStateChange,streamType:k}))},w.oniceconnectionstatechange=()=>{var v;W("peerConnection.oniceconnectionstatechange => "+w.iceConnectionState);const u=Re(w.iceConnectionState);u!==M.Connected&&((v=a.onConnectionStateChange)==null||v.call(a,u))},w.ontrack=u=>{var v;W("peerConnection.ontrack",u),(v=a.onSrcObjectReady)==null||v.call(a,u.streams[0])},await w.setRemoteDescription(B),W("set remote description OK");const T=await w.createAnswer();return W("create answer OK"),await w.setLocalDescription(T),W("set local description OK"),await g(_,T,h),W("start connection OK"),{speak(u){return D(_,h,u)},async disconnect(){var u,v,A;if(_){const z=Re(w.iceConnectionState);if(w){if(z===M.New){(u=a.onVideoStateChange)==null||u.call(a,y.Stop),clearInterval(E);return}w.close(),w.oniceconnectionstatechange=null,w.onnegotiationneeded=null,w.onicecandidate=null,w.ontrack=null}try{z===M.Connected&&await p(_,h).catch(U=>{})}catch(U){W("Error on close stream connection",U)}(v=a.onVideoStateChange)==null||v.call(a,y.Stop),(A=a.onAgentActivityStateChange)==null||A.call(a,x.Idle),clearInterval(E)}},sessionId:h,streamId:_,streamType:k}}function lt(e,t){const{streamOptions:r}=t??{};return{videoType:fe(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,fluent:r==null?void 0:r.fluent}}function Ee(e,t,r,a,o){J.get()>0&&(e===y.Start?a.linkTrack("agent-video",{event:"start",latency:J.get(!0),"stream-type":o},"start",[V.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":o,...r},"done",[V.StreamVideoDone]))}function ut(e,t,r){return J.reset(),new Promise(async(a,o)=>{try{const s=await dt(e.id,lt(e,t),{...t,analytics:r,callbacks:{...t.callbacks,onConnectionStateChange:n=>{var i,c;(c=(i=t.callbacks).onConnectionStateChange)==null||c.call(i,n),n===M.Connected&&a(s)},onVideoStateChange:(n,i)=>{var c,l;(l=(c=t.callbacks).onVideoStateChange)==null||l.call(c,n),Ee(n,e,i,r,s.streamType)},onAgentActivityStateChange:n=>{var i,c;(c=(i=t.callbacks).onAgentActivityStateChange)==null||c.call(i,n),Ee(n===x.Talking?y.Start:y.Stop,e,void 0,r,s.streamType)}}})}catch(s){o(s)}})}async function ft(e,t,r,a,o){var c,l,m,g;const{chat:s,chatMode:n}=await ke(e,r,a,t.mode,t.persistentChat,o);if(n&&n!==t.mode&&(t.mode=n,(l=(c=t.callbacks).onModeChange)==null||l.call(c,n),n===j.TextOnly))return(g=(m=t.callbacks).onError)==null||g.call(m,new re(n)),{chat:s};const i=await ut(e,t,a);return{chat:s,streamingManager:i}}async function mt(e,t){var S,_,B;let r=!0;const a=t.mixpanelKey||be,o=t.wsURL||je,s=t.baseURL||X,n={messages:[],chatMode:t.mode||j.Functional},i=pe(t.auth,s,t.callbacks.onError),c=await i.getById(e),l=Je({token:a,agent:c,isEnabled:t.enableAnalitics,distinctId:t.distinctId}),{onMessage:m,clearQueue:g}=Xe(l,n,t,c,()=>{var d;return(d=n.socketManager)==null?void 0:d.disconnect()});n.messages=Ue(t.initialMessages),(_=(S=t.callbacks).onNewMessage)==null||_.call(S,[...n.messages],"answer"),l.track("agent-sdk",{event:"loaded",...$e(c)});async function D(d){var P,L,$,E,T,u,v;(L=(P=t.callbacks).onConnectionStateChange)==null||L.call(P,M.Connecting),J.reset(),d&&!r&&(delete n.chat,(E=($=t.callbacks).onNewMessage)==null||E.call($,[...n.messages],"answer"));const h=t.mode===j.DirectPlayback?Promise.resolve(void 0):qe(t.auth,o,{onMessage:m,onError:t.callbacks.onError}),C=O(()=>ft(c,t,i,l,n.chat),{limit:3,timeout:Ie,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:A=>(A==null?void 0:A.message)!=="Could not connect"&&A.status!==429,delayMs:1e3}).catch(A=>{var z,U;throw R(j.Maintenance),(U=(z=t.callbacks).onConnectionStateChange)==null||U.call(z,M.Fail),A}),[w,{streamingManager:b,chat:k}]=await Promise.all([h,C]);k&&k.id!==((T=n.chat)==null?void 0:T.id)&&((v=(u=t.callbacks).onNewChat)==null||v.call(u,k.id)),n.streamingManager=b,n.socketManager=w,n.chat=k,r=!1,R((k==null?void 0:k.chat_mode)??t.mode??j.Functional)}async function p(){var d,h,C,w;(d=n.socketManager)==null||d.disconnect(),await((h=n.streamingManager)==null?void 0:h.disconnect()),delete n.streamingManager,delete n.socketManager,(w=(C=t.callbacks).onConnectionStateChange)==null||w.call(C,M.Disconnected)}async function R(d){var h,C;d!==n.chatMode&&(l.track("agent-mode-change",{mode:d}),n.chatMode=d,n.chatMode!==j.Functional&&await p(),(C=(h=t.callbacks).onModeChange)==null||C.call(h,d))}return{agent:c,getStreamType:()=>{var d;return(d=n.streamingManager)==null?void 0:d.streamType},starterMessages:((B=c.knowledge)==null?void 0:B.starter_message)||[],getSTTToken:()=>i.getSTTToken(c.id),changeMode:R,enrichAnalytics:l.enrich,async connect(){var d;await D(!0),l.track("agent-chat",{event:"connect",chatId:(d=n.chat)==null?void 0:d.id,agentId:c.id,mode:n.chatMode})},async reconnect(){var d;await p(),await D(!1),l.track("agent-chat",{event:"reconnect",chatId:(d=n.chat)==null?void 0:d.id,agentId:c.id,mode:n.chatMode})},async disconnect(){var d;await p(),l.track("agent-chat",{event:"disconnect",chatId:(d=n.chat)==null?void 0:d.id,agentId:c.id,mode:n.chatMode})},async chat(d){var b,k,P,L,$;const h=()=>{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(n.chatMode===j.Maintenance)throw new H("Chat is in maintenance mode");if(![j.TextOnly,j.Playground].includes(n.chatMode)){if(!n.streamingManager)throw new H("Streaming manager is not initialized");if(!n.chat)throw new H("Chat is not initialized")}},C=async()=>{var E,T;if(!n.chat){const u=await ke(c,i,l,n.chatMode,t.persistentChat);if(!u.chat)throw new F(n.chatMode,!!t.persistentChat);n.chat=u.chat,(T=(E=t.callbacks).onNewChat)==null||T.call(E,n.chat.id)}return n.chat.id},w=async(E,T)=>O(()=>{var u,v;return i.chat(c.id,T,{chatMode:n.chatMode,streamId:(u=n.streamingManager)==null?void 0:u.streamId,sessionId:(v=n.streamingManager)==null?void 0:v.sessionId,messages:E.map(({matches:A,...z})=>z)},{...Ce(n.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:u=>{var z,U,Me,_e;const v=(z=u==null?void 0:u.message)==null?void 0:z.includes("missing or invalid session_id");return!((U=u==null?void 0:u.message)==null?void 0:U.includes("Stream Error"))&&!v?((_e=(Me=t.callbacks).onError)==null||_e.call(Me,u),!1):!0},onRetry:async()=>{await p(),await D(!1)}});try{g(),h(),n.messages.push({id:Q(),role:"user",content:d,created_at:new Date(J.update()).toISOString()}),(k=(b=t.callbacks).onNewMessage)==null||k.call(b,[...n.messages],"user");const E=await C(),T=await w([...n.messages],E);return n.messages.push({id:Q(),role:"assistant",content:T.result||"",created_at:new Date().toISOString(),context:T.context,matches:T.matches}),l.track("agent-message-send",{event:"success",mode:n.chatMode,messages:n.messages.length+1}),T.result&&((L=(P=t.callbacks).onNewMessage)==null||L.call(P,[...n.messages],"answer"),l.track("agent-message-received",{latency:J.get(!0),mode:n.chatMode,messages:n.messages.length})),T}catch(E){throw(($=n.messages[n.messages.length-1])==null?void 0:$.role)==="assistant"&&n.messages.pop(),l.track("agent-message-send",{event:"error",mode:n.chatMode,messages:n.messages.length}),E}},rate(d,h,C){var k,P,L,$;const w=n.messages.find(E=>E.id===d);if(n.chat){if(!w)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const b=((k=w.matches)==null?void 0:k.map(E=>[E.document_id,E.id]))??[];return l.track("agent-rate",{event:C?"update":"create",thumb:h===1?"up":"down",knowledge_id:((P=c.knowledge)==null?void 0:P.id)??"",mode:n.chatMode,matches:b,score:h}),C?i.updateRating(c.id,n.chat.id,C,{knowledge_id:((L=c.knowledge)==null?void 0:L.id)??"",message_id:d,matches:b,score:h}):i.createRating(c.id,n.chat.id,{knowledge_id:(($=c.knowledge)==null?void 0:$.id)??"",message_id:d,matches:b,score:h})},deleteRate(d){var h;if(!n.chat)throw new Error("Chat is not initialized");return l.track("agent-rate-delete",{type:"text",chat_id:(h=n.chat)==null?void 0:h.id,id:d,mode:n.chatMode}),i.deleteRating(c.id,n.chat.id,d)},speak(d){var w,b,k,P;if(!n.streamingManager)throw new Error("Please connect to the agent first");function h(){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 C=h();return l.track("agent-speak",C),J.update(),(w=n.chat)!=null&&w.id&&C.type==="text"&&(n.messages.push({id:Q(),role:"assistant",content:C.input,created_at:new Date(J.get(!0)).toISOString()}),(k=(b=t.callbacks).onNewMessage)==null||k.call(b,[...n.messages],"answer")),n.streamingManager.speak({script:C,metadata:{chat_id:(P=n.chat)==null?void 0:P.id,agent_id:c.id}})}}}function gt(e,t,r){const{getById:a}=pe(t,r||X);return a(e)}f.AgentActivityState=x,f.AgentStatus=oe,f.ChatCreationFailed=F,f.ChatMode=j,f.ChatModeDowngraded=re,f.ChatProgress=K,f.ConnectionState=M,f.ConnectivityState=q,f.DataChannelSignalMap=Z,f.DocumentType=ue,f.KnowledgeType=le,f.PlanGroup=se,f.Providers=me,f.RateState=ce,f.StreamEvents=V,f.StreamType=N,f.StreamingState=y,f.Subject=de,f.UserPlan=ie,f.ValidationError=H,f.VideoType=G,f.VoiceAccess=ge,f.WsError=ae,f.createAgentManager=mt,f.getAgent=gt,f.mapVideoType=fe,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})});
1
+ (function(f,b){typeof exports=="object"&&typeof module<"u"?b(exports):typeof define=="function"&&define.amd?define(["exports"],b):(f=typeof globalThis<"u"?globalThis:f||self,b(f.index={}))})(this,function(f){"use strict";var wt=Object.defineProperty;var yt=(f,b,F)=>b in f?wt(f,b,{enumerable:!0,configurable:!0,writable:!0,value:F}):f[b]=F;var Q=(f,b,F)=>(yt(f,typeof b!="symbol"?b+"":b,F),F);class b extends Error{constructor({kind:r,description:a,error:o}){super(JSON.stringify({kind:r,description:a}));Q(this,"kind");Q(this,"description");Q(this,"error");this.kind=r,this.description=a,this.error=o}}class F extends b{constructor(t,r){super({kind:"ChatCreationFailed",description:`Failed to create ${r?"persistent":""} chat, mode: ${t}`})}}class ae extends b{constructor(t){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${t}`})}}class H extends b{constructor(r,a){super({kind:"ValidationError",description:r});Q(this,"key");this.key=a}}class ie extends b{constructor(t){super({kind:"WSError",description:t})}}var se=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(se||{}),oe=(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))(oe||{}),ce=(e=>(e.Created="created",e.Started="started",e.Done="done",e.Error="error",e.Rejected="rejected",e.Ready="ready",e))(ce||{}),de=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(de||{}),j=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e.DirectPlayback="DirectPlayback",e))(j||{}),K=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(K||{}),le=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(le||{}),ue=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(ue||{}),fe=(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))(fe||{}),Z=(e=>(e.Clip="clip",e.Talk="talk",e))(Z||{});const me=e=>{switch(e){case"clip":return"clip";case"talk":return"talk";default:throw new Error(`Unknown video type: ${e}`)}};var v=(e=>(e.Start="START",e.Stop="STOP",e))(v||{}),q=(e=>(e.Strong="STRONG",e.Weak="WEAK",e.Unknown="UNKNOWN",e))(q||{}),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||{}),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||{}),N=(e=>(e.Legacy="legacy",e.Fluent="fluent",e))(N||{}),ge=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(ge||{}),he=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(he||{});const Ie=45*1e3,Te="X-Playground-Chat",X="https://api.d-id.com",je="wss://notifications.d-id.com",be="79f81a83a67430be2bc0fd61042b8faa",we=e=>new Promise(t=>setTimeout(t,e)),G=()=>Math.random().toString(16).slice(2),Pe=e=>[j.TextOnly,j.Playground,j.Maintenance].includes(e);function Ae(e,t){let r;return{promise:new Promise((o,s)=>{r=setTimeout(()=>s(new Error(t)),e)}),clear:()=>clearTimeout(r)}}async function ee(e,t){const r={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 a;for(let o=1;o<=r.limit;o++)try{if(!r.timeout)return await e();const{promise:s,clear:n}=Ae(r.timeout,r.timeoutErrorMessage),i=e().finally(n);return await Promise.race([i,s])}catch(s){if(a=s,!r.shouldRetryFn(s)||o>=r.limit)throw s;await we(r.delayMs),r.onRetry(s)}throw a}function ye(){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 Be=G();function pe(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}.${ye()}_${Be}`;throw new Error(`Unknown auth type: ${e}`)}const $e=e=>ee(e,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:t=>t.status===429});function te(e,t=X,r){const a=async(o,s)=>{const{skipErrorHandler:n,...i}=s||{},c=await $e(()=>fetch(t+(o!=null&&o.startsWith("/")?o:`/${o}`),{...i,headers:{...i.headers,Authorization:pe(e),"Content-Type":"application/json"}}));if(!c.ok){let l=await c.text().catch(()=>`Failed to fetch with status ${c.status}`);const u=new Error(l);throw r&&!n&&r(u,{url:o,options:i,headers:c.headers}),u}return c.json()};return{get(o,s){return a(o,{...s,method:"GET"})},post(o,s,n){return a(o,{...n,body:JSON.stringify(s),method:"POST"})},delete(o,s,n){return a(o,{...n,body:JSON.stringify(s),method:"DELETE"})},patch(o,s,n){return a(o,{...n,body:JSON.stringify(s),method:"PATCH"})}}}function ve(e,t=X,r){const a=te(e,`${t}/agents`,r);return{create(o,s){return a.post("/",o,s)},getAgents(o,s){return a.get(`/${o?`?tag=${o}`:""}`,s).then(n=>n??[])},getById(o,s){return a.get(`/${o}`,s)},delete(o,s){return a.delete(`/${o}`,void 0,s)},update(o,s,n){return a.patch(`/${o}`,s,n)},newChat(o,s,n){return a.post(`/${o}/chat`,s,n)},chat(o,s,n,i){return a.post(`/${o}/chat/${s}`,n,i)},createRating(o,s,n,i){return a.post(`/${o}/chat/${s}/ratings`,n,i)},updateRating(o,s,n,i,c){return a.patch(`/${o}/chat/${s}/ratings/${n}`,i,c)},deleteRating(o,s,n,i){return a.delete(`/${o}/chat/${s}/ratings/${n}`,i)},getSTTToken(o,s){return a.get(`/${o}/stt-token`,s)}}}const Ce=e=>e.type==="clip"&&e.presenter_id.startsWith("v2_")?"clip_v2":e.type;function Le(e){var o,s,n,i;const t=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",r=()=>{const c=navigator.platform;return c.toLowerCase().includes("win")?"Windows":c.toLowerCase().includes("mac")?"Mac OS X":c.toLowerCase().includes("linux")?"Linux":"Unknown"},a=e.presenter;return{$os:`${r()}`,isMobile:`${t()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:Ce(a),agentVoice:{voiceId:(s=(o=e.presenter)==null?void 0:o.voice)==null?void 0:s.voice_id,provider:(i=(n=e.presenter)==null?void 0:n.voice)==null?void 0:i.type}}}const ze=e=>e.reduce((t,r)=>t+r,0),Fe=e=>ze(e)/e.length;function Ne(e,t,r){var c,l,u;const{event:a,...o}=e,{template:s}=(t==null?void 0:t.llm)||{},{language:n}=((c=t==null?void 0:t.presenter)==null?void 0:c.voice)||{};return{...o,llm:{...o.llm,template:s},script:{...o.script,provider:{...(l=o==null?void 0:o.script)==null?void 0:l.provider,language:n}},stitch:(t==null?void 0:t.presenter.type)==="talk"?(u=t==null?void 0:t.presenter)==null?void 0:u.stitch:void 0,...r}}let ne={};const Je="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function We(e){var s,n,i,c,l,u;const t=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk",r=e.agent.presenter,a=(s=e.agent.llm)==null?void 0:s.prompt_customization,o={token:e.token||"testKey",distinct_id:e.distinctId||ye(),agentId:e.agent.id,agentType:Ce(r),owner_id:e.agent.owner_id??"",promptVersion:(n=e.agent.llm)==null?void 0:n.prompt_version,behavior:{role:a==null?void 0:a.role,personality:a==null?void 0:a.personality,instructions:(i=e.agent.llm)==null?void 0:i.instructions},temperature:(c=e.agent.llm)==null?void 0:c.temperature,knowledgeSource:a==null?void 0:a.knowledge_source,starterQuestionsCount:(u=(l=e.agent.knowledge)==null?void 0:l.starter_message)==null?void 0:u.length,topicsToAvoid:a==null?void 0:a.topics_to_avoid,maxResponseLength:a==null?void 0:a.max_response_length};return{...o,additionalProperties:{},isEnabled:e.isEnabled??!0,getRandom:()=>Math.random().toString(16).slice(2),enrich(m){const k={};if(m&&typeof m!="object")throw new Error("properties must be a flat json object");for(let C in m)(typeof m[C]=="string"||typeof m[C]=="number")&&(k[C]=m[C]);this.additionalProperties={...this.additionalProperties,...k}},async track(m,k){if(!this.isEnabled)return Promise.resolve();const{audioPath:C,...D}=k||{},_={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:m,properties:{...this.additionalProperties,...D,...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,_).then($=>$.json())}catch($){return console.error($)}},linkTrack(m,k,C,D){ne[m]||(ne[m]={events:{},resolvedDependencies:[]}),D.includes(C)||D.push(C);const _=ne[m];if(_.events[C]={props:k},_.resolvedDependencies.push(C),D.every(I=>_.resolvedDependencies.includes(I))){const I=D.reduce((d,y)=>_.events[y]?{...d,..._.events[y].props}:d,{});this.track(m,I),_.resolvedDependencies=_.resolvedDependencies.filter(d=>!D.includes(d)),D.forEach(d=>{delete _.events[d]})}}}}function Ue(){let e=0;return{reset:()=>e=0,update:()=>e=Date.now(),get:(t=!1)=>t?Date.now()-e:e}}const J=Ue();function ke(e){return e===j.Playground?{headers:{[Te]:"true"}}:{}}async function De(e,t,r,a,o=!1,s){try{return!s&&a!==j.DirectPlayback&&(s=await t.newChat(e.id,{persist:o},ke(a)),r.track("agent-chat",{event:"created",chat_id:s.id,agent_id:e.id,mode:a})),{chat:s,chatMode:(s==null?void 0:s.chat_mode)??a}}catch(n){try{const i=JSON.parse(n.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 He(e){return e&&e.length>0?e:[]}function Ke(e){return new Promise((t,r)=>{const{callbacks:a,host:o,auth:s}=e,{onMessage:n=null,onOpen:i=null,onClose:c=null,onError:l=null}=a||{},u=new WebSocket(`${o}?authorization=${pe(s)}`);u.onmessage=n,u.onclose=c,u.onerror=m=>{console.error(m),l==null||l("Websocket failed to connect",m),r(m)},u.onopen=m=>{i==null||i(m),t(u)}})}async function qe(e){const{retries:t=1}=e;let r=null;for(let a=0;(r==null?void 0:r.readyState)!==WebSocket.OPEN;a++)try{r=await Ke(e)}catch(o){if(a===t)throw o;await we(a*500)}return r}async function xe(e,t,r){const a=r!=null&&r.onMessage?[r.onMessage]:[],o=await qe({auth:e,host:t,callbacks:{onError:s=>{var n;return(n=r.onError)==null?void 0:n.call(r,new ie(s))},onMessage(s){const n=JSON.parse(s.data);a.forEach(i=>i(n.event,n))}}});return{socket:o,disconnect:()=>o.close(),subscribeToEvents:s=>a.push(s)}}function Ve(e){if(e.answer!==void 0)return e.answer;let t=0,r="";for(;t in e;)r+=e[t++];return r}function Xe(e,t,r,a,o){const s=a.messages[a.messages.length-1];if(!(e===K.Partial||e===K.Answer)||(s==null?void 0:s.role)!=="assistant")return;const{content:n,sequence:i}=t;e===K.Partial?r[i]=n:r.answer=n;const c=Ve(r);(s.content!==c||e===K.Answer)&&(s.content=c,o==null||o([...a.messages],e))}function Ye(e,t,r,a,o){let s={};return{clearQueue:()=>s={},onMessage:(n,i)=>{var c,l;if("content"in i)Xe(n,i,s,t,r.callbacks.onNewMessage),n===K.Answer&&e.track("agent-message-received",{messages:t.messages.length,mode:t.chatMode});else{const u=V,m=[u.StreamVideoDone,u.StreamVideoError,u.StreamVideoRejected],k=[u.StreamFailed,u.StreamVideoError,u.StreamVideoRejected],C=Ne(i,a,{mode:t.chatMode});if(n=n,n===u.StreamVideoCreated)e.linkTrack("agent-video",C,u.StreamVideoCreated,["start"]);else if(m.includes(n)){const D=n.split("/")[1];k.includes(n)?e.track("agent-video",{...C,event:D}):e.linkTrack("agent-video",{...C,event:D},n,["done"])}k.includes(n)&&((l=(c=r.callbacks).onError)==null||l.call(c,new Error(`Stream failed with event ${n}`),{data:i})),i.event===u.StreamDone&&o()}}}}function Qe(e,t,r,a){const o=te(e,`${t}/agents/${r}`,a);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,fluent:s.fluent})},startConnection(s,n,i){return o.post(`/streams/${s}/sdp`,{session_id:i,answer:n})},addIceCandidate(s,n,i){return o.post(`/streams/${s}/ice`,{session_id:i,...n})},sendStreamRequest(s,n,i){return o.post(`/streams/${s}`,{session_id:n,...i})},close(s,n){return o.delete(`/streams/${s}`,{session_id:n})}}}function Ge(e,t,r,a){const o=te(e,`${t}/agents/${r}`,a);return{createStream(s,n){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,fluent:s.fluent},n)},startConnection(s,n,i,c){return o.post(`/streams/${s}/sdp`,{session_id:i,answer:n},c)},addIceCandidate(s,n,i,c){return o.post(`/streams/${s}/ice`,{session_id:i,...n},c)},sendStreamRequest(s,n,i,c){return o.post(`/streams/${s}`,{session_id:n,...i},c)},close(s,n,i){return o.delete(`/streams/${s}`,{session_id:n},i)}}}function Ze(e,t,r){const a=(t.timestamp-e.timestamp)/1e3;return{duration:a,bytesReceived:t.bytesReceived-e.bytesReceived,bitrate:Math.round((t.bytesReceived-e.bytesReceived)*8/a),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)/a,framesPerSecond:t.framesPerSecond,freezeCount:t.freezeCount-e.freezeCount,freezeDuration:t.freezeDuration-e.freezeDuration,lowFpsCount:r}}function Oe(e){return e.filter(t=>t.freezeCount>0||t.framesPerSecond<21||t.framesDropped>0||t.packetsLost>0).map(t=>{const{timestamp:r,...a}=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"),{...a,causes:o}})}function et(e){let t="";for(const r of e.values())if(r&&r.type==="codec"&&r.mimeType.startsWith("video")&&(t=r.mimeType.split("/")[1]),r&&r.type==="inbound-rtp"&&r.kind==="video")return{codec:t,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 tt(e,t,r){const a=e.map((i,c)=>c===0?r?{timestamp:i.timestamp,duration:0,bytesReceived:i.bytesReceived-r.bytesReceived,bitrate:(i.bytesReceived-r.bytesReceived)*8/(t/1e3),packetsReceived:i.packetsReceived-r.packetsReceived,packetsLost:i.packetsLost-r.packetsLost,framesDropped:i.framesDropped-r.framesDropped,framesDecoded:i.framesDecoded-r.framesDecoded,jitter:i.jitter,jitterBufferDelay:i.jitterBufferDelay-r.jitterBufferDelay,jitterBufferEmittedCount:i.jitterBufferEmittedCount-r.jitterBufferEmittedCount,avgJitterDelayInInterval:(i.jitterBufferDelay-r.jitterBufferDelay)/(i.jitterBufferEmittedCount-r.jitterBufferEmittedCount),framesPerSecond:i.framesPerSecond,freezeCount:i.freezeCount-r.freezeCount,freezeDuration:i.freezeDuration-r.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(a),s=o.reduce((i,c)=>i+(c.causes.includes("low fps")?1:0),0),n=a.map(i=>i.avgJitterDelayInInterval);return{webRTCStats:{anomalies:o,aggregateReport:Ze(e[0],e[e.length-1],s),minJitterDelayInInterval:Math.min(...n),maxJitterDelayInInterval:Math.max(...n),avgJitterDelayInInterval:Fe(n)},codec:e[0].codec,resolution:`${e[0].frameWidth}x${e[0].frameHeight}`}}const re=100,nt=Math.max(Math.ceil(400/re),1),rt=.25,at=.28;function it(){let e=0,t,r,a=0;return o=>{for(const s of o.values())if(s&&s.type==="inbound-rtp"&&s.kind==="video"){const n=s.jitterBufferDelay,i=s.jitterBufferEmittedCount;if(r&&i>r){const u=n-t,m=i-r;a=u/m}t=n,r=i;const c=s.framesDecoded,l=c-e>0;return e=c,{isReceiving:l,avgJitterDelayInInterval:a,freezeCount:s.freezeCount}}return{isReceiving:!1,avgJitterDelayInInterval:a}}}function st(e,t,r,a,o,s=!1){let n=[],i,c=0,l=!1,u=q.Unknown,m=q.Unknown,k=0,C=0;const D=it();return setInterval(async()=>{const _=await e.getStats(),{isReceiving:$,avgJitterDelayInInterval:I,freezeCount:d}=D(_),y=et(_);if($)c=0,k=d-C,m=I<rt?q.Strong:I>at&&k>1?q.Weak:u,m!==u&&(o==null||o(m),u=m,C+=k,k=0),l||(a==null||a(v.Start),i=n[n.length-1],n=[],l=!0),n.push(y);else if(l&&(c++,c>=nt)){const w=tt(n,re,i);a==null||a(v.Stop,w),t()||r(),l=!1}},re)}let Re=!1;const W=(e,t)=>Re&&console.log(e,t),ot=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function Se(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 ct({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,report:a}){e===v.Start&&t===v.Start?r==null||r(v.Start):e===v.Stop&&t===v.Stop&&(r==null||r(v.Stop,a))}function dt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,onAgentActivityStateChange:a,report:o}){e===v.Start?r==null||r(v.Start):e===v.Stop&&(r==null||r(v.Stop,o)),t===v.Start?a==null||a(x.Talking):t===v.Stop&&(a==null||a(x.Idle))}function Ee({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,onAgentActivityStateChange:a,streamType:o,report:s}){o===N.Legacy?ct({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,report:s}):o===N.Fluent&&dt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,onAgentActivityStateChange:a,report:s})}async function lt(e,t,{debug:r=!1,callbacks:a,auth:o,baseURL:s=X,analytics:n}){Re=r;let i=!1,c=!1,l=v.Stop,u=v.Stop,m=q.Unknown;const{startConnection:k,sendStreamRequest:C,close:D,createStream:_,addIceCandidate:$}=t.videoType===Z.Clip?Qe(o,s,e,a.onError):Ge(o,s,e,a.onError),{id:I,offer:d,ice_servers:y,session_id:w,fluent:A}=await _(t),h=new ot({iceServers:y}),R=h.createDataChannel("JanusDataChannel");if(!w)throw new Error("Could not create session_id");const T=A?N.Fluent:N.Legacy;n.enrich({"stream-type":T});const B=t.stream_warmup&&!A,z=()=>i,S=()=>{var g;i=!0,c&&((g=a.onConnectionStateChange)==null||g.call(a,M.Connected))},P=st(h,z,S,(g,p)=>Ee({statsSignal:u=g,dataChannelSignal:T===N.Legacy?l:void 0,onVideoStateChange:a.onVideoStateChange,onAgentActivityStateChange:a.onAgentActivityStateChange,report:p,streamType:T}),g=>{var p;return(p=a.onConnectivityStateChange)==null?void 0:p.call(a,m)},B);h.onicecandidate=g=>{var p;W("peerConnection.onicecandidate",g);try{g.candidate&&g.candidate.sdpMid&&g.candidate.sdpMLineIndex!==null?$(I,{candidate:g.candidate.candidate,sdpMid:g.candidate.sdpMid,sdpMLineIndex:g.candidate.sdpMLineIndex},w):$(I,{candidate:null},w)}catch(L){(p=a.onError)==null||p.call(a,L,{streamId:I})}},R.onopen=()=>{c=!0,(!B||i)&&S()},R.onmessage=g=>{g.data in O&&(l=O[g.data],Ee({statsSignal:T===N.Legacy?u:void 0,dataChannelSignal:l,onVideoStateChange:a.onVideoStateChange,onAgentActivityStateChange:a.onAgentActivityStateChange,streamType:T}))},h.oniceconnectionstatechange=()=>{var p;W("peerConnection.oniceconnectionstatechange => "+h.iceConnectionState);const g=Se(h.iceConnectionState);g!==M.Connected&&((p=a.onConnectionStateChange)==null||p.call(a,g))},h.ontrack=g=>{var p;W("peerConnection.ontrack",g),(p=a.onSrcObjectReady)==null||p.call(a,g.streams[0])},await h.setRemoteDescription(d),W("set remote description OK");const E=await h.createAnswer();return W("create answer OK"),await h.setLocalDescription(E),W("set local description OK"),await k(I,E,w),W("start connection OK"),{speak(g){return C(I,w,g)},async disconnect(){var g,p,L;if(I){const U=Se(h.iceConnectionState);if(h){if(U===M.New){(g=a.onVideoStateChange)==null||g.call(a,v.Stop),clearInterval(P);return}h.close(),h.oniceconnectionstatechange=null,h.onnegotiationneeded=null,h.onicecandidate=null,h.ontrack=null}try{U===M.Connected&&await D(I,w).catch(Y=>{})}catch(Y){W("Error on close stream connection",Y)}(p=a.onVideoStateChange)==null||p.call(a,v.Stop),(L=a.onAgentActivityStateChange)==null||L.call(a,x.Idle),clearInterval(P)}},sessionId:w,streamId:I,streamType:T}}function ut(e,t){const{streamOptions:r}=t??{};return{videoType:me(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,fluent:r==null?void 0:r.fluent}}function Me(e,t,r,a,o){J.get()>0&&(e===v.Start?a.linkTrack("agent-video",{event:"start",latency:J.get(!0),"stream-type":o},"start",[V.StreamVideoCreated]):e===v.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":o,...r},"done",[V.StreamVideoDone]))}function ft(e,t,r){return J.reset(),new Promise(async(a,o)=>{try{const s=await lt(e.id,ut(e,t),{...t,analytics:r,callbacks:{...t.callbacks,onConnectionStateChange:n=>{var i,c;(c=(i=t.callbacks).onConnectionStateChange)==null||c.call(i,n),n===M.Connected&&a(s)},onVideoStateChange:(n,i)=>{var c,l;(l=(c=t.callbacks).onVideoStateChange)==null||l.call(c,n),Me(n,e,i,r,s.streamType)},onAgentActivityStateChange:n=>{var i,c;(c=(i=t.callbacks).onAgentActivityStateChange)==null||c.call(i,n),Me(n===x.Talking?v.Start:v.Stop,e,void 0,r,s.streamType)}}})}catch(s){o(s)}})}async function mt(e,t,r,a,o){var c,l,u,m;const{chat:s,chatMode:n}=await De(e,r,a,t.mode,t.persistentChat,o);if(n&&n!==t.mode&&(t.mode=n,(l=(c=t.callbacks).onModeChange)==null||l.call(c,n),n===j.TextOnly))return(m=(u=t.callbacks).onError)==null||m.call(u,new ae(n)),{chat:s};const i=await ft(e,t,a);return{chat:s,streamingManager:i}}async function gt(e,t){var _,$,I;let r=!0;const a=t.mixpanelKey||be,o=t.wsURL||je,s=t.baseURL||X,n={messages:[],chatMode:t.mode||j.Functional},i=ve(t.auth,s,t.callbacks.onError),c=await i.getById(e),l=We({token:a,agent:c,isEnabled:t.enableAnalitics,distinctId:t.distinctId}),{onMessage:u,clearQueue:m}=Ye(l,n,t,c,()=>{var d;return(d=n.socketManager)==null?void 0:d.disconnect()});n.messages=He(t.initialMessages),($=(_=t.callbacks).onNewMessage)==null||$.call(_,[...n.messages],"answer"),l.track("agent-sdk",{event:"loaded",...Le(c)});async function k(d){var T,B,z,S,P,E,g;(B=(T=t.callbacks).onConnectionStateChange)==null||B.call(T,M.Connecting),J.reset(),d&&!r&&(delete n.chat,(S=(z=t.callbacks).onNewMessage)==null||S.call(z,[...n.messages],"answer"));const y=t.mode===j.DirectPlayback?Promise.resolve(void 0):xe(t.auth,o,{onMessage:u,onError:t.callbacks.onError}),w=ee(()=>mt(c,t,i,l,n.chat),{limit:3,timeout:Ie,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:p=>(p==null?void 0:p.message)!=="Could not connect"&&p.status!==429,delayMs:1e3}).catch(p=>{var L,U;throw D(j.Maintenance),(U=(L=t.callbacks).onConnectionStateChange)==null||U.call(L,M.Fail),p}),[A,{streamingManager:h,chat:R}]=await Promise.all([y,w]);R&&R.id!==((P=n.chat)==null?void 0:P.id)&&((g=(E=t.callbacks).onNewChat)==null||g.call(E,R.id)),n.streamingManager=h,n.socketManager=A,n.chat=R,r=!1,D((R==null?void 0:R.chat_mode)??t.mode??j.Functional)}async function C(){var d,y,w,A;(d=n.socketManager)==null||d.disconnect(),await((y=n.streamingManager)==null?void 0:y.disconnect()),delete n.streamingManager,delete n.socketManager,(A=(w=t.callbacks).onConnectionStateChange)==null||A.call(w,M.Disconnected)}async function D(d){var y,w;d!==n.chatMode&&(l.track("agent-mode-change",{mode:d}),n.chatMode=d,n.chatMode!==j.Functional&&await C(),(w=(y=t.callbacks).onModeChange)==null||w.call(y,d))}return{agent:c,getStreamType:()=>{var d;return(d=n.streamingManager)==null?void 0:d.streamType},starterMessages:((I=c.knowledge)==null?void 0:I.starter_message)||[],getSTTToken:()=>i.getSTTToken(c.id),changeMode:D,enrichAnalytics:l.enrich,async connect(){var d;await k(!0),l.track("agent-chat",{event:"connect",chatId:(d=n.chat)==null?void 0:d.id,agentId:c.id,mode:n.chatMode})},async reconnect(){var d;await C(),await k(!1),l.track("agent-chat",{event:"reconnect",chatId:(d=n.chat)==null?void 0:d.id,agentId:c.id,mode:n.chatMode})},async disconnect(){var d;await C(),l.track("agent-chat",{event:"disconnect",chatId:(d=n.chat)==null?void 0:d.id,agentId:c.id,mode:n.chatMode})},async chat(d){var h,R,T,B,z;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(n.chatMode===j.Maintenance)throw new H("Chat is in maintenance mode");if(![j.TextOnly,j.Playground].includes(n.chatMode)){if(!n.streamingManager)throw new H("Streaming manager is not initialized");if(!n.chat)throw new H("Chat is not initialized")}},w=async()=>{var S,P;if(!n.chat){const E=await De(c,i,l,n.chatMode,t.persistentChat);if(!E.chat)throw new F(n.chatMode,!!t.persistentChat);n.chat=E.chat,(P=(S=t.callbacks).onNewChat)==null||P.call(S,n.chat.id)}return n.chat.id},A=async(S,P)=>ee(()=>{var E,g;return i.chat(c.id,P,{chatMode:n.chatMode,streamId:(E=n.streamingManager)==null?void 0:E.streamId,sessionId:(g=n.streamingManager)==null?void 0:g.sessionId,messages:S.map(({matches:p,...L})=>L)},{...ke(n.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:E=>{var L,U,Y,_e;const g=(L=E==null?void 0:E.message)==null?void 0:L.includes("missing or invalid session_id");return!((U=E==null?void 0:E.message)==null?void 0:U.includes("Stream Error"))&&!g?((_e=(Y=t.callbacks).onError)==null||_e.call(Y,E),!1):!0},onRetry:async()=>{await C(),await k(!1)}});try{m(),y(),n.messages.push({id:G(),role:"user",content:d,created_at:new Date(J.update()).toISOString()}),(R=(h=t.callbacks).onNewMessage)==null||R.call(h,[...n.messages],"user");const S=await w(),P=await A([...n.messages],S);return n.messages.push({id:G(),role:"assistant",content:P.result||"",created_at:new Date().toISOString(),context:P.context,matches:P.matches}),l.track("agent-message-send",{event:"success",mode:n.chatMode,messages:n.messages.length+1}),P.result&&((B=(T=t.callbacks).onNewMessage)==null||B.call(T,[...n.messages],"answer"),l.track("agent-message-received",{latency:J.get(!0),mode:n.chatMode,messages:n.messages.length})),P}catch(S){throw((z=n.messages[n.messages.length-1])==null?void 0:z.role)==="assistant"&&n.messages.pop(),l.track("agent-message-send",{event:"error",mode:n.chatMode,messages:n.messages.length}),S}},rate(d,y,w){var R,T,B,z;const A=n.messages.find(S=>S.id===d);if(n.chat){if(!A)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const h=((R=A.matches)==null?void 0:R.map(S=>[S.document_id,S.id]))??[];return l.track("agent-rate",{event:w?"update":"create",thumb:y===1?"up":"down",knowledge_id:((T=c.knowledge)==null?void 0:T.id)??"",mode:n.chatMode,matches:h,score:y}),w?i.updateRating(c.id,n.chat.id,w,{knowledge_id:((B=c.knowledge)==null?void 0:B.id)??"",message_id:d,matches:h,score:y}):i.createRating(c.id,n.chat.id,{knowledge_id:((z=c.knowledge)==null?void 0:z.id)??"",message_id:d,matches:h,score:y})},deleteRate(d){var y;if(!n.chat)throw new Error("Chat is not initialized");return l.track("agent-rate-delete",{type:"text",chat_id:(y=n.chat)==null?void 0:y.id,id:d,mode:n.chatMode}),i.deleteRating(c.id,n.chat.id,d)},async speak(d){var h,R,T,B;if(!n.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 w=y();l.track("agent-speak",w),J.update(),(h=n.chat)!=null&&h.id&&w.type==="text"&&(n.messages.push({id:G(),role:"assistant",content:w.input,created_at:new Date(J.get(!0)).toISOString()}),(T=(R=t.callbacks).onNewMessage)==null||T.call(R,[...n.messages],"answer"));const A=Pe(n.chatMode);return n.chat&&A?{duration:0,status:"success"}:n.streamingManager.speak({script:w,metadata:{chat_id:(B=n.chat)==null?void 0:B.id,agent_id:c.id}})}}}function ht(e,t,r){const{getById:a}=ve(t,r||X);return a(e)}f.AgentActivityState=x,f.AgentStatus=ce,f.ChatCreationFailed=F,f.ChatMode=j,f.ChatModeDowngraded=ae,f.ChatProgress=K,f.ConnectionState=M,f.ConnectivityState=q,f.DataChannelSignalMap=O,f.DocumentType=fe,f.KnowledgeType=ue,f.PlanGroup=oe,f.Providers=ge,f.RateState=de,f.StreamEvents=V,f.StreamType=N,f.StreamingState=v,f.Subject=le,f.UserPlan=se,f.ValidationError=H,f.VideoType=Z,f.VoiceAccess=he,f.WsError=ie,f.createAgentManager=gt,f.getAgent=ht,f.mapVideoType=me,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})});
@@ -1,5 +1,5 @@
1
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<{
2
+ export declare function createStreamingManager<T extends CreateStreamOptions>(agentId: string, agent: T, { debug, callbacks, auth, baseURL, analytics }: 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
@@ -0,0 +1,2 @@
1
+ import { ChatMode } from '../types';
2
+ export declare const isTextualChat: (chatMode: ChatMode) => boolean;
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.5",
4
+ "version": "1.1.0-beta.6",
5
5
  "type": "module",
6
6
  "description": "d-id client sdk",
7
7
  "repository": {