@d-id/client-sdk 1.1.0-beta.13 → 1.1.0-beta.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- (function(m,j){typeof exports=="object"&&typeof module<"u"?j(exports):typeof define=="function"&&define.amd?define(["exports"],j):(m=typeof globalThis<"u"?globalThis:m||self,j(m.index={}))})(this,function(m){"use strict";var Ct=Object.defineProperty;var Rt=(m,j,x)=>j in m?Ct(m,j,{enumerable:!0,configurable:!0,writable:!0,value:x}):m[j]=x;var O=(m,j,x)=>(Rt(m,typeof j!="symbol"?j+"":j,x),x);class j extends Error{constructor({kind:a,description:r,error:s}){super(JSON.stringify({kind:a,description:r}));O(this,"kind");O(this,"description");O(this,"error");this.kind=a,this.description=r,this.error=s}}class x extends j{constructor(t,a){super({kind:"ChatCreationFailed",description:`Failed to create ${a?"persistent":""} chat, mode: ${t}`})}}class ie extends j{constructor(t){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${t}`})}}class V extends j{constructor(a,r){super({kind:"ValidationError",description:a});O(this,"key");this.key=r}}class se extends j{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||{}),b=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e.DirectPlayback="DirectPlayback",e))(b||{}),X=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(X||{}),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||{}),ee=(e=>(e.Clip="clip",e.Talk="talk",e))(ee||{});const ge=e=>{switch(e){case"clip":return"clip";case"talk":return"talk";default:throw new Error(`Unknown video type: ${e}`)}};var p=(e=>(e.Start="START",e.Stop="STOP",e))(p||{}),Y=(e=>(e.Strong="STRONG",e.Weak="WEAK",e.Unknown="UNKNOWN",e))(Y||{}),Q=(e=>(e.Idle="IDLE",e.Talking="TALKING",e))(Q||{}),z=(e=>(e.ChatAnswer="chat/answer",e.ChatPartial="chat/partial",e.StreamDone="stream/done",e.StreamStarted="stream/started",e.StreamFailed="stream/error",e.StreamReady="stream/ready",e.StreamCreated="stream/created",e.StreamInterrupt="stream/interrupt",e.StreamVideoCreated="stream-video/started",e.StreamVideoDone="stream-video/done",e.StreamVideoError="stream-video/error",e.StreamVideoRejected="stream-video/rejected",e))(z||{}),_=(e=>(e.New="new",e.Fail="fail",e.Connected="connected",e.Connecting="connecting",e.Closed="closed",e.Completed="completed",e.Disconnected="disconnected",e))(_||{}),K=(e=>(e.Legacy="legacy",e.Fluent="fluent",e))(K||{}),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,be="X-Playground-Chat",Z="https://api.d-id.com",je="wss://notifications.d-id.com",Pe="79f81a83a67430be2bc0fd61042b8faa",pe=e=>new Promise(t=>setTimeout(t,e)),G=(e=16)=>{const t=new Uint8Array(e);return window.crypto.getRandomValues(t),Array.from(t,a=>a.toString(16).padStart(2,"0")).join("").slice(0,13)},Ae=e=>[b.TextOnly,b.Playground,b.Maintenance].includes(e);function Be(e,t){let a;return{promise:new Promise((s,i)=>{a=setTimeout(()=>i(new Error(t)),e)}),clear:()=>clearTimeout(a)}}async function te(e,t){const a={limit:(t==null?void 0:t.limit)??3,delayMs:(t==null?void 0:t.delayMs)??0,timeout:(t==null?void 0:t.timeout)??3e4,timeoutErrorMessage:(t==null?void 0:t.timeoutErrorMessage)||"Timeout error",shouldRetryFn:(t==null?void 0:t.shouldRetryFn)??(()=>!0),onRetry:(t==null?void 0:t.onRetry)??(()=>{})};let r;for(let s=1;s<=a.limit;s++)try{if(!a.timeout)return await e();const{promise:i,clear:c}=Be(a.timeout,a.timeoutErrorMessage),n=e().finally(c);return await Promise.race([n,i])}catch(i){if(r=i,!a.shouldRetryFn(i)||s>=a.limit)throw i;await pe(a.delayMs),a.onRetry(i)}throw r}function ye(){let e=window.localStorage.getItem("did_external_key_id");if(!e){let t=G();window.localStorage.setItem("did_external_key_id",t),e=t}return e}let $e=G();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}.${ye()}_${$e}`;throw new Error(`Unknown auth type: ${e}`)}const Le=e=>te(e,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:t=>t.status===429});function re(e,t=Z,a){const r=async(s,i)=>{const{skipErrorHandler:c,...n}=i||{},o=await Le(()=>fetch(t+(s!=null&&s.startsWith("/")?s:`/${s}`),{...n,headers:{...n.headers,Authorization:ve(e),"Content-Type":"application/json"}}));if(!o.ok){let d=await o.text().catch(()=>`Failed to fetch with status ${o.status}`);const u=new Error(d);throw a&&!c&&a(u,{url:s,options:n,headers:o.headers}),u}return o.json()};return{get(s,i){return r(s,{...i,method:"GET"})},post(s,i,c){return r(s,{...c,body:JSON.stringify(i),method:"POST"})},delete(s,i,c){return r(s,{...c,body:JSON.stringify(i),method:"DELETE"})},patch(s,i,c){return r(s,{...c,body:JSON.stringify(i),method:"PATCH"})}}}function ke(e,t=Z,a){const r=re(e,`${t}/agents`,a);return{create(s,i){return r.post("/",s,i)},getAgents(s,i){return r.get(`/${s?`?tag=${s}`:""}`,i).then(c=>c??[])},getById(s,i){return r.get(`/${s}`,i)},delete(s,i){return r.delete(`/${s}`,void 0,i)},update(s,i,c){return r.patch(`/${s}`,i,c)},newChat(s,i,c){return r.post(`/${s}/chat`,i,c)},chat(s,i,c,n){return r.post(`/${s}/chat/${i}`,c,n)},createRating(s,i,c,n){return r.post(`/${s}/chat/${i}/ratings`,c,n)},updateRating(s,i,c,n,o){return r.patch(`/${s}/chat/${i}/ratings/${c}`,n,o)},deleteRating(s,i,c,n){return r.delete(`/${s}/chat/${i}/ratings/${c}`,n)},getSTTToken(s,i){return r.get(`/${s}/stt-token`,i)}}}const De=e=>e.type==="clip"&&e.presenter_id.startsWith("v2_")?"clip_v2":e.type;function ze(e){var s,i,c,n;const t=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",a=()=>{const o=navigator.platform;return o.toLowerCase().includes("win")?"Windows":o.toLowerCase().includes("mac")?"Mac OS X":o.toLowerCase().includes("linux")?"Linux":"Unknown"},r=e.presenter;return{$os:`${a()}`,isMobile:`${t()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:De(r),agentVoice:{voiceId:(i=(s=e.presenter)==null?void 0:s.voice)==null?void 0:i.voice_id,provider:(n=(c=e.presenter)==null?void 0:c.voice)==null?void 0:n.type}}}const Fe=e=>e.reduce((t,a)=>t+a,0),Ce=e=>Fe(e)/e.length;function Ne(e,t,a){var o,d,u;const{event:r,...s}=e,{template:i}=(t==null?void 0:t.llm)||{},{language:c}=((o=t==null?void 0:t.presenter)==null?void 0:o.voice)||{};return{...s,llm:{...s.llm,template:i},script:{...s.script,provider:{...(d=s==null?void 0:s.script)==null?void 0:d.provider,language:c}},stitch:(t==null?void 0:t.presenter.type)==="talk"?(u=t==null?void 0:t.presenter)==null?void 0:u.stitch:void 0,...a}}let ne={};const Je="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function We(e){var i,c,n,o,d,u;const t=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk",a=e.agent.presenter,r=(i=e.agent.llm)==null?void 0:i.prompt_customization,s={token:e.token||"testKey",distinct_id:e.distinctId||ye(),agentId:e.agent.id,agentType:De(a),owner_id:e.agent.owner_id??"",promptVersion:(c=e.agent.llm)==null?void 0:c.prompt_version,behavior:{role:r==null?void 0:r.role,personality:r==null?void 0:r.personality,instructions:(n=e.agent.llm)==null?void 0:n.instructions},temperature:(o=e.agent.llm)==null?void 0:o.temperature,knowledgeSource:r==null?void 0:r.knowledge_source,starterQuestionsCount:(u=(d=e.agent.knowledge)==null?void 0:d.starter_message)==null?void 0:u.length,topicsToAvoid:r==null?void 0:r.topics_to_avoid,maxResponseLength:r==null?void 0:r.max_response_length};return{...s,additionalProperties:{},isEnabled:e.isEnabled??!0,getRandom:G,enrich(w){this.additionalProperties={...this.additionalProperties,...w}},async track(w,P){if(!this.isEnabled)return Promise.resolve();const{audioPath:S,...D}=P||{},C={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:w,properties:{...this.additionalProperties,...D,...s,source:t,time:Date.now(),$insert_id:this.getRandom(),origin:window.location.href,"Screen Height":window.screen.height||window.innerWidth,"Screen Width":window.screen.width||window.innerHeight,"User Agent":navigator.userAgent}}])})};try{return await fetch(Je,C).then(R=>R.json())}catch(R){return console.error(R)}},linkTrack(w,P,S,D){ne[w]||(ne[w]={events:{},resolvedDependencies:[]}),D.includes(S)||D.push(S);const C=ne[w];if(C.events[S]={props:P},C.resolvedDependencies.push(S),D.every(N=>C.resolvedDependencies.includes(N))){const N=D.reduce((B,l)=>C.events[l]?{...B,...C.events[l].props}:B,{});this.track(w,N),C.resolvedDependencies=C.resolvedDependencies.filter(B=>!D.includes(B)),D.forEach(B=>{delete C.events[B]})}}}}function Ue(){let e=0;return{reset:()=>e=0,update:()=>e=Date.now(),get:(t=!1)=>t?Date.now()-e:e}}const H=Ue();function Re(e){return e===b.Playground?{headers:{[be]:"true"}}:{}}async function Se(e,t,a,r,s=!1,i){try{return!i&&r!==b.DirectPlayback&&(i=await t.newChat(e.id,{persist:s},Re(r)),a.track("agent-chat",{event:"created",chat_id:i.id,agent_id:e.id,mode:r})),{chat:i,chatMode:(i==null?void 0:i.chat_mode)??r}}catch(c){try{const n=JSON.parse(c.message);if((n==null?void 0:n.kind)==="InsufficientCreditsError")throw new Error("InsufficientCreditsError")}catch(n){console.error("Error parsing the error message:",n)}throw new Error("Cannot create new chat")}}function Ke(e){return e&&e.length>0?e:[]}function He(e,t,a,r,s){if(!e||!t)throw new Error("Please connect to the agent first");if(!e.interruptEnabled)throw new Error("Interrupt is not enabled for this stream");if(a!==K.Fluent)throw new Error("Interrupt only available for Fluent streams");if(!r&&!s)throw new Error("No active video to interrupt")}async function Ee(e,t){const a={type:z.StreamInterrupt,videoId:t,timestamp:Date.now()};e.sendDataChannelMessage(JSON.stringify(a))}function xe(e){return new Promise((t,a)=>{const{callbacks:r,host:s,auth:i}=e,{onMessage:c=null,onOpen:n=null,onClose:o=null,onError:d=null}=r||{},u=new WebSocket(`${s}?authorization=${ve(i)}`);u.onmessage=c,u.onclose=o,u.onerror=w=>{console.error(w),d==null||d("Websocket failed to connect",w),a(w)},u.onopen=w=>{n==null||n(w),t(u)}})}async function qe(e){const{retries:t=1}=e;let a=null;for(let r=0;(a==null?void 0:a.readyState)!==WebSocket.OPEN;r++)try{a=await xe(e)}catch(s){if(r===t)throw s;await pe(r*500)}return a}async function Ve(e,t,a){const r=a!=null&&a.onMessage?[a.onMessage]:[],s=await qe({auth:e,host:t,callbacks:{onError:i=>{var c;return(c=a.onError)==null?void 0:c.call(a,new se(i))},onMessage(i){const c=JSON.parse(i.data);r.forEach(n=>n(c.event,c))}}});return{socket:s,disconnect:()=>s.close(),subscribeToEvents:i=>r.push(i)}}function Xe(e){if(e.answer!==void 0)return e.answer;let t=0,a="";for(;t in e;)a+=e[t++];return a}function Ye(e,t,a,r,s){const i=r.messages[r.messages.length-1];if(!(e===X.Partial||e===X.Answer)||(i==null?void 0:i.role)!=="assistant")return;const{content:c,sequence:n}=t;e===X.Partial?a[n]=c:a.answer=c;const o=Xe(a);(i.content!==o||e===X.Answer)&&(i.content=o,s==null||s([...r.messages],e))}function Qe(e,t,a,r,s){let i={};return{clearQueue:()=>i={},onMessage:(c,n)=>{var o,d;if("content"in n)Ye(c,n,i,t,a.callbacks.onNewMessage),c===X.Answer&&e.track("agent-message-received",{messages:t.messages.length,mode:t.chatMode});else{const u=z,w=[u.StreamVideoDone,u.StreamVideoError,u.StreamVideoRejected],P=[u.StreamFailed,u.StreamVideoError,u.StreamVideoRejected],S=Ne(n,r,{mode:t.chatMode});if(c=c,c===u.StreamVideoCreated)e.linkTrack("agent-video",S,u.StreamVideoCreated,["start"]);else if(w.includes(c)){const D=c.split("/")[1];P.includes(c)?e.track("agent-video",{...S,event:D}):e.linkTrack("agent-video",{...S,event:D},c,["done"])}P.includes(c)&&((d=(o=a.callbacks).onError)==null||d.call(o,new Error(`Stream failed with event ${c}`),{data:n})),n.event===u.StreamDone&&s()}}}}function Ge(e,t,a,r){const s=re(e,`${t}/agents/${a}`,r);return{createStream(i){return s.post("/streams",{output_resolution:i.output_resolution,compatibility_mode:i.compatibility_mode,stream_warmup:i.stream_warmup,session_timeout:i.session_timeout,fluent:i.fluent})},startConnection(i,c,n){return s.post(`/streams/${i}/sdp`,{session_id:n,answer:c})},addIceCandidate(i,c,n){return s.post(`/streams/${i}/ice`,{session_id:n,...c})},sendStreamRequest(i,c,n){return s.post(`/streams/${i}`,{session_id:c,...n})},close(i,c){return s.delete(`/streams/${i}`,{session_id:c})}}}function Ze(e,t,a,r){const s=re(e,`${t}/agents/${a}`,r);return{createStream(i,c){return s.post("/streams",{driver_url:i.driver_url,face:i.face,config:i.config,output_resolution:i.output_resolution,compatibility_mode:i.compatibility_mode,stream_warmup:i.stream_warmup,session_timeout:i.session_timeout,fluent:i.fluent},c)},startConnection(i,c,n,o){return s.post(`/streams/${i}/sdp`,{session_id:n,answer:c},o)},addIceCandidate(i,c,n,o){return s.post(`/streams/${i}/ice`,{session_id:n,...c},o)},sendStreamRequest(i,c,n,o){return s.post(`/streams/${i}`,{session_id:c,...n},o)},close(i,c,n){return s.delete(`/streams/${i}`,{session_id:c},n)}}}function Oe(e,t,a){const r=(t.timestamp-e.timestamp)/1e3;return{duration:r,bytesReceived:t.bytesReceived-e.bytesReceived,bitrate:Math.round((t.bytesReceived-e.bytesReceived)*8/r),packetsReceived:t.packetsReceived-e.packetsReceived,packetsLost:t.packetsLost-e.packetsLost,framesDropped:t.framesDropped-e.framesDropped,framesDecoded:t.framesDecoded-e.framesDecoded,jitter:t.jitter,avgJitterDelayInInterval:(t.jitterBufferDelay-e.jitterBufferDelay)/(t.jitterBufferEmittedCount-e.jitterBufferEmittedCount),jitterBufferEmittedCount:t.jitterBufferEmittedCount-e.jitterBufferEmittedCount,jitterBufferDelay:(t.jitterBufferDelay-e.jitterBufferDelay)/r,framesPerSecond:t.framesPerSecond,freezeCount:t.freezeCount-e.freezeCount,freezeDuration:t.freezeDuration-e.freezeDuration,lowFpsCount:a}}function et(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 tt(e){let t="",a=0;for(const r of e.values())if(r&&r.type==="codec"&&r.mimeType.startsWith("video")&&(t=r.mimeType.split("/")[1]),r&&r.type==="candidate-pair"&&(a=r.currentRoundTripTime),r&&r.type==="inbound-rtp"&&r.kind==="video")return{codec:t,rtt:a,timestamp:r.timestamp,bytesReceived:r.bytesReceived,packetsReceived:r.packetsReceived,packetsLost:r.packetsLost,framesDropped:r.framesDropped,framesDecoded:r.framesDecoded,jitter:r.jitter,jitterBufferDelay:r.jitterBufferDelay,jitterBufferEmittedCount:r.jitterBufferEmittedCount,avgJitterDelayInInterval:r.jitterBufferDelay/r.jitterBufferEmittedCount,frameWidth:r.frameWidth,frameHeight:r.frameHeight,framesPerSecond:r.framesPerSecond,freezeCount:r.freezeCount,freezeDuration:r.totalFreezesDuration};return{}}function rt(e,t,a){const r=e.map((o,d)=>d===0?a?{timestamp:o.timestamp,duration:0,rtt:o.rtt,bytesReceived:o.bytesReceived-a.bytesReceived,bitrate:(o.bytesReceived-a.bytesReceived)*8/(t/1e3),packetsReceived:o.packetsReceived-a.packetsReceived,packetsLost:o.packetsLost-a.packetsLost,framesDropped:o.framesDropped-a.framesDropped,framesDecoded:o.framesDecoded-a.framesDecoded,jitter:o.jitter,jitterBufferDelay:o.jitterBufferDelay-a.jitterBufferDelay,jitterBufferEmittedCount:o.jitterBufferEmittedCount-a.jitterBufferEmittedCount,avgJitterDelayInInterval:(o.jitterBufferDelay-a.jitterBufferDelay)/(o.jitterBufferEmittedCount-a.jitterBufferEmittedCount),framesPerSecond:o.framesPerSecond,freezeCount:o.freezeCount-a.freezeCount,freezeDuration:o.freezeDuration-a.freezeDuration}:{timestamp:o.timestamp,rtt:o.rtt,duration:0,bytesReceived:o.bytesReceived,bitrate:o.bytesReceived*8/(t/1e3),packetsReceived:o.packetsReceived,packetsLost:o.packetsLost,framesDropped:o.framesDropped,framesDecoded:o.framesDecoded,jitter:o.jitter,jitterBufferDelay:o.jitterBufferDelay,jitterBufferEmittedCount:o.jitterBufferEmittedCount,avgJitterDelayInInterval:o.jitterBufferDelay/o.jitterBufferEmittedCount,framesPerSecond:o.framesPerSecond,freezeCount:o.freezeCount,freezeDuration:o.freezeDuration}:{timestamp:o.timestamp,duration:t*d/1e3,rtt:o.rtt,bytesReceived:o.bytesReceived-e[d-1].bytesReceived,bitrate:(o.bytesReceived-e[d-1].bytesReceived)*8/(t/1e3),packetsReceived:o.packetsReceived-e[d-1].packetsReceived,packetsLost:o.packetsLost-e[d-1].packetsLost,framesDropped:o.framesDropped-e[d-1].framesDropped,framesDecoded:o.framesDecoded-e[d-1].framesDecoded,jitter:o.jitter,jitterBufferDelay:o.jitterBufferDelay-e[d-1].jitterBufferDelay,jitterBufferEmittedCount:o.jitterBufferEmittedCount-e[d-1].jitterBufferEmittedCount,avgJitterDelayInInterval:(o.jitterBufferDelay-e[d-1].jitterBufferDelay)/(o.jitterBufferEmittedCount-e[d-1].jitterBufferEmittedCount),framesPerSecond:o.framesPerSecond,freezeCount:o.freezeCount-e[d-1].freezeCount,freezeDuration:o.freezeDuration-e[d-1].freezeDuration}),s=et(r),i=s.reduce((o,d)=>o+(d.causes.includes("low fps")?1:0),0),c=r.filter(o=>!!o.avgJitterDelayInInterval).map(o=>o.avgJitterDelayInInterval),n=r.filter(o=>!!o.rtt).map(o=>o.rtt);return{webRTCStats:{anomalies:s,minRtt:Math.min(...n),avgRtt:Ce(n),maxRtt:Math.max(...n),aggregateReport:Oe(e[0],e[e.length-1],i),minJitterDelayInInterval:Math.min(...c),maxJitterDelayInInterval:Math.max(...c),avgJitterDelayInInterval:Ce(c)},codec:e[0].codec,resolution:`${e[0].frameWidth}x${e[0].frameHeight}`}}const ae=100,nt=Math.max(Math.ceil(400/ae),1),at=.25,it=.28;function st(){let e=0,t,a,r=0;return s=>{for(const i of s.values())if(i&&i.type==="inbound-rtp"&&i.kind==="video"){const c=i.jitterBufferDelay,n=i.jitterBufferEmittedCount;if(a&&n>a){const u=c-t,w=n-a;r=u/w}t=c,a=n;const o=i.framesDecoded,d=o-e>0;return e=o,{isReceiving:d,avgJitterDelayInInterval:r,freezeCount:i.freezeCount}}return{isReceiving:!1,avgJitterDelayInInterval:r}}}function ot(e,t,a,r,s,i=!1){let c=[],n,o=0,d=!1,u=Y.Unknown,w=Y.Unknown,P=0,S=0;const D=st();return setInterval(async()=>{const C=await e.getStats(),{isReceiving:R,avgJitterDelayInInterval:N,freezeCount:B}=D(C),l=tt(C);if(R)o=0,P=B-S,w=N<at?Y.Strong:N>it&&P>1?Y.Weak:u,w!==u&&(s==null||s(w),u=w,S+=P,P=0),d||(r==null||r(p.Start),n=c[c.length-1],c=[],d=!0),c.push(l);else if(d&&(o++,o>=nt)){const y=rt(c,ae,n);r==null||r(p.Stop,y),t()||a(),S=B,d=!1}},ae)}let Ie=!1;const F=(e,t)=>Ie&&console.log(e,t),ct=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function Me(e){switch(e){case"connected":return _.Connected;case"checking":return _.Connecting;case"failed":return _.Fail;case"new":return _.New;case"closed":return _.Closed;case"disconnected":return _.Disconnected;case"completed":return _.Completed;default:return _.New}}function dt(e){const[t,a=""]=e.split(/:(.+)/);try{const r=JSON.parse(a);return F("parsed data channel message",{subject:t,data:r}),{subject:t,data:r}}catch(r){return F("Failed to parse data channel message, returning data as string",{subject:t,rawData:a,error:r}),{subject:t,data:a}}}function lt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,report:r}){e===p.Start&&t===p.Start?a==null||a(p.Start):e===p.Stop&&t===p.Stop&&(a==null||a(p.Stop,r))}function ut({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:r,report:s}){e===p.Start?a==null||a(p.Start):e===p.Stop&&(a==null||a(p.Stop,s)),t===p.Start?r==null||r(Q.Talking):t===p.Stop&&(r==null||r(Q.Idle))}function _e({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:r,streamType:s,report:i}){s===K.Legacy?lt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,report:i}):s===K.Fluent&&ut({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:r,report:i})}async function ft(e,t,{debug:a=!1,callbacks:r,auth:s,baseURL:i=Z,analytics:c}){Ie=a;let n=!1,o=!1,d=p.Stop,u=p.Stop;const{startConnection:w,sendStreamRequest:P,close:S,createStream:D,addIceCandidate:C}=t.videoType===ee.Clip?Ge(s,i,e,r.onError):Ze(s,i,e,r.onError),{id:R,offer:N,ice_servers:B,session_id:l,fluent:y,interrupt_enabled:v}=await D(t),h=new ct({iceServers:B}),E=h.createDataChannel("JanusDataChannel");if(!l)throw new Error("Could not create session_id");const k=y?K.Fluent:K.Legacy;c.enrich({"stream-type":k});const $=t.stream_warmup&&!y,L=()=>n,J=()=>{var f;n=!0,o&&((f=r.onConnectionStateChange)==null||f.call(r,_.Connected))},I=ot(h,L,J,(f,g)=>_e({statsSignal:u=f,dataChannelSignal:k===K.Legacy?d:void 0,onVideoStateChange:r.onVideoStateChange,onAgentActivityStateChange:r.onAgentActivityStateChange,report:g,streamType:k}),f=>{var g;return(g=r.onConnectivityStateChange)==null?void 0:g.call(r,f)},$);h.onicecandidate=f=>{var g;F("peerConnection.onicecandidate",f);try{f.candidate&&f.candidate.sdpMid&&f.candidate.sdpMLineIndex!==null?C(R,{candidate:f.candidate.candidate,sdpMid:f.candidate.sdpMid,sdpMLineIndex:f.candidate.sdpMLineIndex},l):C(R,{candidate:null},l)}catch(A){(g=r.onError)==null||g.call(r,A,{streamId:R})}},E.onopen=()=>{o=!0,(!$||n)&&J()};function M(f){d=f===z.StreamStarted?p.Start:p.Stop,_e({statsSignal:k===K.Legacy?u:void 0,dataChannelSignal:d,onVideoStateChange:r.onVideoStateChange,onAgentActivityStateChange:r.onAgentActivityStateChange,streamType:k})}function T(f,g){const A=typeof g=="string"?g:g==null?void 0:g.metadata;A&&c.enrich({streamMetadata:A}),c.track("agent-chat",{event:"ready"})}const W={[z.StreamStarted]:M,[z.StreamDone]:M,[z.StreamReady]:T};E.onmessage=f=>{var q;const{subject:g,data:A}=dt(f.data);(q=W[g])==null||q.call(W,g,A)},h.oniceconnectionstatechange=()=>{var g;F("peerConnection.oniceconnectionstatechange => "+h.iceConnectionState);const f=Me(h.iceConnectionState);f!==_.Connected&&((g=r.onConnectionStateChange)==null||g.call(r,f))},h.ontrack=f=>{var g;F("peerConnection.ontrack",f),(g=r.onSrcObjectReady)==null||g.call(r,f.streams[0])},await h.setRemoteDescription(N),F("set remote description OK");const U=await h.createAnswer();return F("create answer OK"),await h.setLocalDescription(U),F("set local description OK"),await w(R,U,l),F("start connection OK"),{speak(f){return P(R,l,f)},async disconnect(){var f;if(R){const g=Me(h.iceConnectionState);if(h){if(g===_.New){clearInterval(I);return}h.close(),h.oniceconnectionstatechange=null,h.onnegotiationneeded=null,h.onicecandidate=null,h.ontrack=null}try{g===_.Connected&&await S(R,l).catch(A=>{})}catch(A){F("Error on close stream connection",A)}(f=r.onAgentActivityStateChange)==null||f.call(r,Q.Idle),clearInterval(I)}},sendDataChannelMessage(f){var g,A;if(!n||E.readyState!=="open"){F("Data channel is not ready for sending messages"),(g=r.onError)==null||g.call(r,new Error("Data channel is not ready for sending messages"),{streamId:R});return}try{E.send(f)}catch(q){F("Error sending data channel message",q),(A=r.onError)==null||A.call(r,q,{streamId:R})}},sessionId:l,streamId:R,streamType:k,interruptEnabled:v}}function mt(e,t){const{streamOptions:a}=t??{};return{videoType:ge(e.presenter.type),output_resolution:a==null?void 0:a.outputResolution,session_timeout:a==null?void 0:a.sessionTimeout,stream_warmup:a==null?void 0:a.streamWarmup,compatibility_mode:a==null?void 0:a.compatibilityMode,fluent:a==null?void 0:a.fluent}}function gt(e,t,a,r,s){s===K.Fluent?ht(e,t,a,r,s):pt(e,t,a,r,s)}function ht(e,t,a,r,s){e===p.Start?r.track("stream-session",{event:"start","stream-type":s}):e===p.Stop&&r.track("stream-session",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":s,...a})}function wt(e,t,a,r){H.get()<=0||(e===p.Start?a.linkTrack("agent-video",{event:"start",latency:H.get(!0),"stream-type":r},"start",[z.StreamVideoCreated]):e===p.Stop&&a.linkTrack("agent-video",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":r},"done",[z.StreamVideoDone]))}function pt(e,t,a,r,s){H.get()<=0||(e===p.Start?r.linkTrack("agent-video",{event:"start",latency:H.get(!0),"stream-type":s},"start",[z.StreamVideoCreated]):e===p.Stop&&r.linkTrack("agent-video",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":s,...a},"done",[z.StreamVideoDone]))}function yt(e,t,a){return H.reset(),new Promise(async(r,s)=>{try{const i=await ft(e.id,mt(e,t),{...t,analytics:a,callbacks:{...t.callbacks,onConnectionStateChange:c=>{var n,o;(o=(n=t.callbacks).onConnectionStateChange)==null||o.call(n,c),c===_.Connected&&r(i)},onVideoStateChange:(c,n)=>{var o,d;(d=(o=t.callbacks).onVideoStateChange)==null||d.call(o,c),gt(c,e,n,a,i.streamType)},onAgentActivityStateChange:c=>{var n,o;(o=(n=t.callbacks).onAgentActivityStateChange)==null||o.call(n,c),wt(c===Q.Talking?p.Start:p.Stop,e,a,i.streamType)}}})}catch(i){s(i)}})}async function vt(e,t,a,r,s){var o,d,u,w;const{chat:i,chatMode:c}=await Se(e,a,r,t.mode,t.persistentChat,s);if(c&&c!==t.mode&&(t.mode=c,(d=(o=t.callbacks).onModeChange)==null||d.call(o,c),c===b.TextOnly))return(w=(u=t.callbacks).onError)==null||w.call(u,new ie(c)),{chat:i};const n=await yt(e,t,r);return{chat:i,streamingManager:n}}async function kt(e,t){var R,N,B;let a=!0,r=!1;const s=t.mixpanelKey||Pe,i=t.wsURL||je,c=t.baseURL||Z,n={messages:[],chatMode:t.mode||b.Functional},o=ke(t.auth,c,t.callbacks.onError),d=await o.getById(e),u=We({token:s,agent:d,isEnabled:t.enableAnalitics,distinctId:t.distinctId}),{onMessage:w,clearQueue:P}=Qe(u,n,t,d,()=>{var l;return(l=n.socketManager)==null?void 0:l.disconnect()});n.messages=Ke(t.initialMessages),(N=(R=t.callbacks).onNewMessage)==null||N.call(R,[...n.messages],"answer"),u.track("agent-sdk",{event:"loaded",...ze(d)});async function S(l){var $,L,J,I,M,T,W;(L=($=t.callbacks).onConnectionStateChange)==null||L.call($,_.Connecting),H.reset(),r=!1,l&&!a&&(delete n.chat,(I=(J=t.callbacks).onNewMessage)==null||I.call(J,[...n.messages],"answer"));const y=t.mode===b.DirectPlayback?Promise.resolve(void 0):Ve(t.auth,i,{onMessage:w,onError:t.callbacks.onError}),v=te(()=>vt(d,t,o,u,n.chat),{limit:3,timeout:Te,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:U=>(U==null?void 0:U.message)!=="Could not connect"&&U.status!==429,delayMs:1e3}).catch(U=>{var f,g;throw C(b.Maintenance),(g=(f=t.callbacks).onConnectionStateChange)==null||g.call(f,_.Fail),U}),[h,{streamingManager:E,chat:k}]=await Promise.all([y,v]);k&&k.id!==((M=n.chat)==null?void 0:M.id)&&((W=(T=t.callbacks).onNewChat)==null||W.call(T,k.id)),n.streamingManager=E,n.socketManager=h,n.chat=k,a=!1,C((k==null?void 0:k.chat_mode)??t.mode??b.Functional)}async function D(){var l,y,v,h;(l=n.socketManager)==null||l.disconnect(),await((y=n.streamingManager)==null?void 0:y.disconnect()),r=!1,delete n.streamingManager,delete n.socketManager,(h=(v=t.callbacks).onConnectionStateChange)==null||h.call(v,_.Disconnected)}async function C(l){var y,v;l!==n.chatMode&&(u.track("agent-mode-change",{mode:l}),n.chatMode=l,n.chatMode!==b.Functional&&await D(),(v=(y=t.callbacks).onModeChange)==null||v.call(y,l))}return{agent:d,getStreamType:()=>{var l;return(l=n.streamingManager)==null?void 0:l.streamType},getIsInterruptEnabled:()=>{var l;return((l=n.streamingManager)==null?void 0:l.interruptEnabled)??!1},starterMessages:((B=d.knowledge)==null?void 0:B.starter_message)||[],getSTTToken:()=>o.getSTTToken(d.id),changeMode:C,enrichAnalytics:u.enrich,async connect(){var l;await S(!0),u.track("agent-chat",{event:"connect",chatId:(l=n.chat)==null?void 0:l.id,agentId:d.id,mode:n.chatMode})},async reconnect(){var l;await D(),await S(!1),u.track("agent-chat",{event:"reconnect",chatId:(l=n.chat)==null?void 0:l.id,agentId:d.id,mode:n.chatMode})},async disconnect(){var l;await D(),u.track("agent-chat",{event:"disconnect",chatId:(l=n.chat)==null?void 0:l.id,agentId:d.id,mode:n.chatMode})},async chat(l){var E,k,$,L,J;const y=()=>{if(t.mode===b.DirectPlayback)throw new V("Direct playback is enabled, chat is disabled");if(l.length>=800)throw new V("Message cannot be more than 800 characters");if(l.length===0)throw new V("Message cannot be empty");if(n.chatMode===b.Maintenance)throw new V("Chat is in maintenance mode");if(![b.TextOnly,b.Playground].includes(n.chatMode)){if(!n.streamingManager)throw new V("Streaming manager is not initialized");if(!n.chat)throw new V("Chat is not initialized")}},v=async()=>{var I,M;if(!n.chat){const T=await Se(d,o,u,n.chatMode,t.persistentChat);if(!T.chat)throw new x(n.chatMode,!!t.persistentChat);n.chat=T.chat,(M=(I=t.callbacks).onNewChat)==null||M.call(I,n.chat.id)}return n.chat.id},h=async(I,M)=>te(()=>{var T,W;return o.chat(d.id,M,{chatMode:n.chatMode,streamId:(T=n.streamingManager)==null?void 0:T.streamId,sessionId:(W=n.streamingManager)==null?void 0:W.sessionId,messages:I.map(({matches:U,...f})=>f)},{...Re(n.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:T=>{var f,g,A,q;const W=(f=T==null?void 0:T.message)==null?void 0:f.includes("missing or invalid session_id");return!((g=T==null?void 0:T.message)==null?void 0:g.includes("Stream Error"))&&!W?((q=(A=t.callbacks).onError)==null||q.call(A,T),!1):!0},onRetry:async()=>{await D(),await S(!1)}});try{P(),y(),n.messages.push({id:G(),role:"user",content:l,created_at:new Date(H.update()).toISOString()}),(k=(E=t.callbacks).onNewMessage)==null||k.call(E,[...n.messages],"user");const I=await v(),M=await h([...n.messages],I);return n.messages.push({id:G(),role:"assistant",content:M.result||"",created_at:new Date().toISOString(),context:M.context,matches:M.matches,videoId:M.videoId}),r&&M.videoId&&n.streamingManager&&(r=!1,n.messages[n.messages.length-1].interrupted=!0,await Ee(n.streamingManager,M.videoId)),u.track("agent-message-send",{event:"success",mode:n.chatMode,messages:n.messages.length+1}),M.result&&((L=($=t.callbacks).onNewMessage)==null||L.call($,[...n.messages],"answer"),u.track("agent-message-received",{latency:H.get(!0),mode:n.chatMode,messages:n.messages.length})),M}catch(I){throw r=!1,((J=n.messages[n.messages.length-1])==null?void 0:J.role)==="assistant"&&n.messages.pop(),u.track("agent-message-send",{event:"error",mode:n.chatMode,messages:n.messages.length}),I}},rate(l,y,v){var k,$,L,J;const h=n.messages.find(I=>I.id===l);if(n.chat){if(!h)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const E=((k=h.matches)==null?void 0:k.map(I=>[I.document_id,I.id]))??[];return u.track("agent-rate",{event:v?"update":"create",thumb:y===1?"up":"down",knowledge_id:(($=d.knowledge)==null?void 0:$.id)??"",mode:n.chatMode,matches:E,score:y}),v?o.updateRating(d.id,n.chat.id,v,{knowledge_id:((L=d.knowledge)==null?void 0:L.id)??"",message_id:l,matches:E,score:y}):o.createRating(d.id,n.chat.id,{knowledge_id:((J=d.knowledge)==null?void 0:J.id)??"",message_id:l,matches:E,score:y})},deleteRate(l){var y;if(!n.chat)throw new Error("Chat is not initialized");return u.track("agent-rate-delete",{type:"text",chat_id:(y=n.chat)==null?void 0:y.id,id:l,mode:n.chatMode}),o.deleteRating(d.id,n.chat.id,l)},async speak(l){var E,k,$,L;if(!n.streamingManager)throw new Error("Please connect to the agent first");function y(){if(typeof l=="string"){if(!d.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:d.presenter.voice,input:l,ssml:!1}}if(l.type==="text"&&!l.provider){if(!d.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:d.presenter.voice,input:l.input,ssml:l.ssml}}return l}const v=y();u.track("agent-speak",v),H.update(),(E=n.chat)!=null&&E.id&&v.type==="text"&&(n.messages.push({id:G(),role:"assistant",content:v.input,created_at:new Date(H.get(!0)).toISOString()}),($=(k=t.callbacks).onNewMessage)==null||$.call(k,[...n.messages],"answer"));const h=Ae(n.chatMode);return n.chat&&h?{duration:0,status:"success"}:n.streamingManager.speak({script:v,metadata:{chat_id:(L=n.chat)==null?void 0:L.id,agent_id:d.id}})},async interrupt(){var v,h,E;const l=n.messages[n.messages.length-1],y=(l==null?void 0:l.role)==="user";if(He(n.streamingManager,n.chat,(v=n.streamingManager)==null?void 0:v.streamType,y,!!(l!=null&&l.videoId)),y){r=!0;return}l.interrupted=!0,(E=(h=t.callbacks).onNewMessage)==null||E.call(h,[...n.messages],"answer"),Ee(n.streamingManager,l==null?void 0:l.videoId)}}}function Dt(e,t,a){const{getById:r}=ke(t,a||Z);return r(e)}m.AgentActivityState=Q,m.AgentStatus=de,m.ChatCreationFailed=x,m.ChatMode=b,m.ChatModeDowngraded=ie,m.ChatProgress=X,m.ConnectionState=_,m.ConnectivityState=Y,m.DocumentType=me,m.KnowledgeType=fe,m.PlanGroup=ce,m.Providers=he,m.RateState=le,m.StreamEvents=z,m.StreamType=K,m.StreamingState=p,m.Subject=ue,m.UserPlan=oe,m.ValidationError=V,m.VideoType=ee,m.VoiceAccess=we,m.WsError=se,m.createAgentManager=kt,m.getAgent=Dt,m.mapVideoType=ge,Object.defineProperty(m,Symbol.toStringTag,{value:"Module"})});
1
+ (function(m,j){typeof exports=="object"&&typeof module<"u"?j(exports):typeof define=="function"&&define.amd?define(["exports"],j):(m=typeof globalThis<"u"?globalThis:m||self,j(m.index={}))})(this,function(m){"use strict";var Ct=Object.defineProperty;var Rt=(m,j,x)=>j in m?Ct(m,j,{enumerable:!0,configurable:!0,writable:!0,value:x}):m[j]=x;var O=(m,j,x)=>(Rt(m,typeof j!="symbol"?j+"":j,x),x);class j extends Error{constructor({kind:a,description:r,error:s}){super(JSON.stringify({kind:a,description:r}));O(this,"kind");O(this,"description");O(this,"error");this.kind=a,this.description=r,this.error=s}}class x extends j{constructor(t,a){super({kind:"ChatCreationFailed",description:`Failed to create ${a?"persistent":""} chat, mode: ${t}`})}}class ie extends j{constructor(t){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${t}`})}}class V extends j{constructor(a,r){super({kind:"ValidationError",description:a});O(this,"key");this.key=r}}class se extends j{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||{}),b=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e.DirectPlayback="DirectPlayback",e))(b||{}),X=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(X||{}),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||{}),ee=(e=>(e.Clip="clip",e.Talk="talk",e))(ee||{});const ge=e=>{switch(e){case"clip":return"clip";case"talk":return"talk";default:throw new Error(`Unknown video type: ${e}`)}};var p=(e=>(e.Start="START",e.Stop="STOP",e))(p||{}),Y=(e=>(e.Strong="STRONG",e.Weak="WEAK",e.Unknown="UNKNOWN",e))(Y||{}),Q=(e=>(e.Idle="IDLE",e.Talking="TALKING",e))(Q||{}),L=(e=>(e.ChatAnswer="chat/answer",e.ChatPartial="chat/partial",e.StreamDone="stream/done",e.StreamStarted="stream/started",e.StreamFailed="stream/error",e.StreamReady="stream/ready",e.StreamCreated="stream/created",e.StreamInterrupt="stream/interrupt",e.StreamVideoCreated="stream-video/started",e.StreamVideoDone="stream-video/done",e.StreamVideoError="stream-video/error",e.StreamVideoRejected="stream-video/rejected",e))(L||{}),_=(e=>(e.New="new",e.Fail="fail",e.Connected="connected",e.Connecting="connecting",e.Closed="closed",e.Completed="completed",e.Disconnected="disconnected",e))(_||{}),U=(e=>(e.Legacy="legacy",e.Fluent="fluent",e))(U||{}),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,be="X-Playground-Chat",Z="https://api.d-id.com",je="wss://notifications.d-id.com",Pe="79f81a83a67430be2bc0fd61042b8faa",pe=e=>new Promise(t=>setTimeout(t,e)),G=(e=16)=>{const t=new Uint8Array(e);return window.crypto.getRandomValues(t),Array.from(t,a=>a.toString(16).padStart(2,"0")).join("").slice(0,13)},Ae=e=>[b.TextOnly,b.Playground,b.Maintenance].includes(e);function Be(e,t){let a;return{promise:new Promise((s,i)=>{a=setTimeout(()=>i(new Error(t)),e)}),clear:()=>clearTimeout(a)}}async function te(e,t){const a={limit:(t==null?void 0:t.limit)??3,delayMs:(t==null?void 0:t.delayMs)??0,timeout:(t==null?void 0:t.timeout)??3e4,timeoutErrorMessage:(t==null?void 0:t.timeoutErrorMessage)||"Timeout error",shouldRetryFn:(t==null?void 0:t.shouldRetryFn)??(()=>!0),onRetry:(t==null?void 0:t.onRetry)??(()=>{})};let r;for(let s=1;s<=a.limit;s++)try{if(!a.timeout)return await e();const{promise:i,clear:c}=Be(a.timeout,a.timeoutErrorMessage),n=e().finally(c);return await Promise.race([n,i])}catch(i){if(r=i,!a.shouldRetryFn(i)||s>=a.limit)throw i;await pe(a.delayMs),a.onRetry(i)}throw r}function ye(){let e=window.localStorage.getItem("did_external_key_id");if(!e){let t=G();window.localStorage.setItem("did_external_key_id",t),e=t}return e}let $e=G();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}.${ye()}_${$e}`;throw new Error(`Unknown auth type: ${e}`)}const Le=e=>te(e,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:t=>t.status===429});function re(e,t=Z,a){const r=async(s,i)=>{const{skipErrorHandler:c,...n}=i||{},o=await Le(()=>fetch(t+(s!=null&&s.startsWith("/")?s:`/${s}`),{...n,headers:{...n.headers,Authorization:ve(e),"Content-Type":"application/json"}}));if(!o.ok){let d=await o.text().catch(()=>`Failed to fetch with status ${o.status}`);const u=new Error(d);throw a&&!c&&a(u,{url:s,options:n,headers:o.headers}),u}return o.json()};return{get(s,i){return r(s,{...i,method:"GET"})},post(s,i,c){return r(s,{...c,body:JSON.stringify(i),method:"POST"})},delete(s,i,c){return r(s,{...c,body:JSON.stringify(i),method:"DELETE"})},patch(s,i,c){return r(s,{...c,body:JSON.stringify(i),method:"PATCH"})}}}function ke(e,t=Z,a){const r=re(e,`${t}/agents`,a);return{create(s,i){return r.post("/",s,i)},getAgents(s,i){return r.get(`/${s?`?tag=${s}`:""}`,i).then(c=>c??[])},getById(s,i){return r.get(`/${s}`,i)},delete(s,i){return r.delete(`/${s}`,void 0,i)},update(s,i,c){return r.patch(`/${s}`,i,c)},newChat(s,i,c){return r.post(`/${s}/chat`,i,c)},chat(s,i,c,n){return r.post(`/${s}/chat/${i}`,c,n)},createRating(s,i,c,n){return r.post(`/${s}/chat/${i}/ratings`,c,n)},updateRating(s,i,c,n,o){return r.patch(`/${s}/chat/${i}/ratings/${c}`,n,o)},deleteRating(s,i,c,n){return r.delete(`/${s}/chat/${i}/ratings/${c}`,n)},getSTTToken(s,i){return r.get(`/${s}/stt-token`,i)}}}const De=e=>e.type==="clip"&&e.presenter_id.startsWith("v2_")?"clip_v2":e.type;function ze(e){var s,i,c,n;const t=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",a=()=>{const o=navigator.platform;return o.toLowerCase().includes("win")?"Windows":o.toLowerCase().includes("mac")?"Mac OS X":o.toLowerCase().includes("linux")?"Linux":"Unknown"},r=e.presenter;return{$os:`${a()}`,isMobile:`${t()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:De(r),agentVoice:{voiceId:(i=(s=e.presenter)==null?void 0:s.voice)==null?void 0:i.voice_id,provider:(n=(c=e.presenter)==null?void 0:c.voice)==null?void 0:n.type}}}const Fe=e=>e.reduce((t,a)=>t+a,0),Ce=e=>Fe(e)/e.length;function Ne(e,t,a){var o,d,u;const{event:r,...s}=e,{template:i}=(t==null?void 0:t.llm)||{},{language:c}=((o=t==null?void 0:t.presenter)==null?void 0:o.voice)||{};return{...s,llm:{...s.llm,template:i},script:{...s.script,provider:{...(d=s==null?void 0:s.script)==null?void 0:d.provider,language:c}},stitch:(t==null?void 0:t.presenter.type)==="talk"?(u=t==null?void 0:t.presenter)==null?void 0:u.stitch:void 0,...a}}let ne={};const Je="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function We(e){var i,c,n,o,d,u;const t=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk",a=e.agent.presenter,r=(i=e.agent.llm)==null?void 0:i.prompt_customization,s={token:e.token||"testKey",distinct_id:e.distinctId||ye(),agentId:e.agent.id,agentType:De(a),owner_id:e.agent.owner_id??"",promptVersion:(c=e.agent.llm)==null?void 0:c.prompt_version,behavior:{role:r==null?void 0:r.role,personality:r==null?void 0:r.personality,instructions:(n=e.agent.llm)==null?void 0:n.instructions},temperature:(o=e.agent.llm)==null?void 0:o.temperature,knowledgeSource:r==null?void 0:r.knowledge_source,starterQuestionsCount:(u=(d=e.agent.knowledge)==null?void 0:d.starter_message)==null?void 0:u.length,topicsToAvoid:r==null?void 0:r.topics_to_avoid,maxResponseLength:r==null?void 0:r.max_response_length};return{...s,additionalProperties:{},isEnabled:e.isEnabled??!0,getRandom:G,enrich(w){this.additionalProperties={...this.additionalProperties,...w}},async track(w,P){if(!this.isEnabled)return Promise.resolve();const{audioPath:S,...D}=P||{},C={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:w,properties:{...this.additionalProperties,...D,...s,source:t,time:Date.now(),$insert_id:this.getRandom(),origin:window.location.href,"Screen Height":window.screen.height||window.innerWidth,"Screen Width":window.screen.width||window.innerHeight,"User Agent":navigator.userAgent}}])})};try{return await fetch(Je,C).then(R=>R.json())}catch(R){return console.error(R)}},linkTrack(w,P,S,D){ne[w]||(ne[w]={events:{},resolvedDependencies:[]}),D.includes(S)||D.push(S);const C=ne[w];if(C.events[S]={props:P},C.resolvedDependencies.push(S),D.every(F=>C.resolvedDependencies.includes(F))){const F=D.reduce((B,l)=>C.events[l]?{...B,...C.events[l].props}:B,{});this.track(w,F),C.resolvedDependencies=C.resolvedDependencies.filter(B=>!D.includes(B)),D.forEach(B=>{delete C.events[B]})}}}}function Ue(){let e=0;return{reset:()=>e=0,update:()=>e=Date.now(),get:(t=!1)=>t?Date.now()-e:e}}const K=Ue();function Re(e){return e===b.Playground?{headers:{[be]:"true"}}:{}}async function Se(e,t,a,r,s=!1,i){try{return!i&&r!==b.DirectPlayback&&(i=await t.newChat(e.id,{persist:s},Re(r)),a.track("agent-chat",{event:"created",chat_id:i.id,agent_id:e.id,mode:r})),{chat:i,chatMode:(i==null?void 0:i.chat_mode)??r}}catch(c){try{const n=JSON.parse(c.message);if((n==null?void 0:n.kind)==="InsufficientCreditsError")throw new Error("InsufficientCreditsError")}catch(n){console.error("Error parsing the error message:",n)}throw new Error("Cannot create new chat")}}function Ke(e){return e&&e.length>0?e:[]}function He(e,t,a,r,s){if(!e||!t)throw new Error("Please connect to the agent first");if(!e.interruptEnabled)throw new Error("Interrupt is not enabled for this stream");if(a!==U.Fluent)throw new Error("Interrupt only available for Fluent streams");if(!r&&!s)throw new Error("No active video to interrupt")}async function Ee(e,t){const a={type:L.StreamInterrupt,videoId:t,timestamp:Date.now()};e.sendDataChannelMessage(JSON.stringify(a))}function xe(e){return new Promise((t,a)=>{const{callbacks:r,host:s,auth:i}=e,{onMessage:c=null,onOpen:n=null,onClose:o=null,onError:d=null}=r||{},u=new WebSocket(`${s}?authorization=${ve(i)}`);u.onmessage=c,u.onclose=o,u.onerror=w=>{console.error(w),d==null||d("Websocket failed to connect",w),a(w)},u.onopen=w=>{n==null||n(w),t(u)}})}async function qe(e){const{retries:t=1}=e;let a=null;for(let r=0;(a==null?void 0:a.readyState)!==WebSocket.OPEN;r++)try{a=await xe(e)}catch(s){if(r===t)throw s;await pe(r*500)}return a}async function Ve(e,t,a){const r=a!=null&&a.onMessage?[a.onMessage]:[],s=await qe({auth:e,host:t,callbacks:{onError:i=>{var c;return(c=a.onError)==null?void 0:c.call(a,new se(i))},onMessage(i){const c=JSON.parse(i.data);r.forEach(n=>n(c.event,c))}}});return{socket:s,disconnect:()=>s.close(),subscribeToEvents:i=>r.push(i)}}function Xe(e){if(e.answer!==void 0)return e.answer;let t=0,a="";for(;t in e;)a+=e[t++];return a}function Ye(e,t,a,r,s){const i=r.messages[r.messages.length-1];if(!(e===X.Partial||e===X.Answer)||(i==null?void 0:i.role)!=="assistant")return;const{content:c,sequence:n}=t;e===X.Partial?a[n]=c:a.answer=c;const o=Xe(a);(i.content!==o||e===X.Answer)&&(i.content=o,s==null||s([...r.messages],e))}function Qe(e,t,a,r,s){let i={};return{clearQueue:()=>i={},onMessage:(c,n)=>{var o,d;if("content"in n)Ye(c,n,i,t,a.callbacks.onNewMessage),c===X.Answer&&e.track("agent-message-received",{messages:t.messages.length,mode:t.chatMode});else{const u=L,w=[u.StreamVideoDone,u.StreamVideoError,u.StreamVideoRejected],P=[u.StreamFailed,u.StreamVideoError,u.StreamVideoRejected],S=Ne(n,r,{mode:t.chatMode});if(c=c,c===u.StreamVideoCreated)e.linkTrack("agent-video",S,u.StreamVideoCreated,["start"]);else if(w.includes(c)){const D=c.split("/")[1];P.includes(c)?e.track("agent-video",{...S,event:D}):e.linkTrack("agent-video",{...S,event:D},c,["done"])}P.includes(c)&&((d=(o=a.callbacks).onError)==null||d.call(o,new Error(`Stream failed with event ${c}`),{data:n})),n.event===u.StreamDone&&s()}}}}function Ge(e,t,a,r){const s=re(e,`${t}/agents/${a}`,r);return{createStream(i){return s.post("/streams",{output_resolution:i.output_resolution,compatibility_mode:i.compatibility_mode,stream_warmup:i.stream_warmup,session_timeout:i.session_timeout,fluent:i.fluent})},startConnection(i,c,n){return s.post(`/streams/${i}/sdp`,{session_id:n,answer:c})},addIceCandidate(i,c,n){return s.post(`/streams/${i}/ice`,{session_id:n,...c})},sendStreamRequest(i,c,n){return s.post(`/streams/${i}`,{session_id:c,...n})},close(i,c){return s.delete(`/streams/${i}`,{session_id:c})}}}function Ze(e,t,a,r){const s=re(e,`${t}/agents/${a}`,r);return{createStream(i,c){return s.post("/streams",{driver_url:i.driver_url,face:i.face,config:i.config,output_resolution:i.output_resolution,compatibility_mode:i.compatibility_mode,stream_warmup:i.stream_warmup,session_timeout:i.session_timeout,fluent:i.fluent},c)},startConnection(i,c,n,o){return s.post(`/streams/${i}/sdp`,{session_id:n,answer:c},o)},addIceCandidate(i,c,n,o){return s.post(`/streams/${i}/ice`,{session_id:n,...c},o)},sendStreamRequest(i,c,n,o){return s.post(`/streams/${i}`,{session_id:c,...n},o)},close(i,c,n){return s.delete(`/streams/${i}`,{session_id:c},n)}}}function Oe(e,t,a){const r=(t.timestamp-e.timestamp)/1e3;return{duration:r,bytesReceived:t.bytesReceived-e.bytesReceived,bitrate:Math.round((t.bytesReceived-e.bytesReceived)*8/r),packetsReceived:t.packetsReceived-e.packetsReceived,packetsLost:t.packetsLost-e.packetsLost,framesDropped:t.framesDropped-e.framesDropped,framesDecoded:t.framesDecoded-e.framesDecoded,jitter:t.jitter,avgJitterDelayInInterval:(t.jitterBufferDelay-e.jitterBufferDelay)/(t.jitterBufferEmittedCount-e.jitterBufferEmittedCount),jitterBufferEmittedCount:t.jitterBufferEmittedCount-e.jitterBufferEmittedCount,jitterBufferDelay:(t.jitterBufferDelay-e.jitterBufferDelay)/r,framesPerSecond:t.framesPerSecond,freezeCount:t.freezeCount-e.freezeCount,freezeDuration:t.freezeDuration-e.freezeDuration,lowFpsCount:a}}function et(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 tt(e){let t="",a=0;for(const r of e.values())if(r&&r.type==="codec"&&r.mimeType.startsWith("video")&&(t=r.mimeType.split("/")[1]),r&&r.type==="candidate-pair"&&(a=r.currentRoundTripTime),r&&r.type==="inbound-rtp"&&r.kind==="video")return{codec:t,rtt:a,timestamp:r.timestamp,bytesReceived:r.bytesReceived,packetsReceived:r.packetsReceived,packetsLost:r.packetsLost,framesDropped:r.framesDropped,framesDecoded:r.framesDecoded,jitter:r.jitter,jitterBufferDelay:r.jitterBufferDelay,jitterBufferEmittedCount:r.jitterBufferEmittedCount,avgJitterDelayInInterval:r.jitterBufferDelay/r.jitterBufferEmittedCount,frameWidth:r.frameWidth,frameHeight:r.frameHeight,framesPerSecond:r.framesPerSecond,freezeCount:r.freezeCount,freezeDuration:r.totalFreezesDuration};return{}}function rt(e,t,a){const r=e.map((o,d)=>d===0?a?{timestamp:o.timestamp,duration:0,rtt:o.rtt,bytesReceived:o.bytesReceived-a.bytesReceived,bitrate:(o.bytesReceived-a.bytesReceived)*8/(t/1e3),packetsReceived:o.packetsReceived-a.packetsReceived,packetsLost:o.packetsLost-a.packetsLost,framesDropped:o.framesDropped-a.framesDropped,framesDecoded:o.framesDecoded-a.framesDecoded,jitter:o.jitter,jitterBufferDelay:o.jitterBufferDelay-a.jitterBufferDelay,jitterBufferEmittedCount:o.jitterBufferEmittedCount-a.jitterBufferEmittedCount,avgJitterDelayInInterval:(o.jitterBufferDelay-a.jitterBufferDelay)/(o.jitterBufferEmittedCount-a.jitterBufferEmittedCount),framesPerSecond:o.framesPerSecond,freezeCount:o.freezeCount-a.freezeCount,freezeDuration:o.freezeDuration-a.freezeDuration}:{timestamp:o.timestamp,rtt:o.rtt,duration:0,bytesReceived:o.bytesReceived,bitrate:o.bytesReceived*8/(t/1e3),packetsReceived:o.packetsReceived,packetsLost:o.packetsLost,framesDropped:o.framesDropped,framesDecoded:o.framesDecoded,jitter:o.jitter,jitterBufferDelay:o.jitterBufferDelay,jitterBufferEmittedCount:o.jitterBufferEmittedCount,avgJitterDelayInInterval:o.jitterBufferDelay/o.jitterBufferEmittedCount,framesPerSecond:o.framesPerSecond,freezeCount:o.freezeCount,freezeDuration:o.freezeDuration}:{timestamp:o.timestamp,duration:t*d/1e3,rtt:o.rtt,bytesReceived:o.bytesReceived-e[d-1].bytesReceived,bitrate:(o.bytesReceived-e[d-1].bytesReceived)*8/(t/1e3),packetsReceived:o.packetsReceived-e[d-1].packetsReceived,packetsLost:o.packetsLost-e[d-1].packetsLost,framesDropped:o.framesDropped-e[d-1].framesDropped,framesDecoded:o.framesDecoded-e[d-1].framesDecoded,jitter:o.jitter,jitterBufferDelay:o.jitterBufferDelay-e[d-1].jitterBufferDelay,jitterBufferEmittedCount:o.jitterBufferEmittedCount-e[d-1].jitterBufferEmittedCount,avgJitterDelayInInterval:(o.jitterBufferDelay-e[d-1].jitterBufferDelay)/(o.jitterBufferEmittedCount-e[d-1].jitterBufferEmittedCount),framesPerSecond:o.framesPerSecond,freezeCount:o.freezeCount-e[d-1].freezeCount,freezeDuration:o.freezeDuration-e[d-1].freezeDuration}),s=et(r),i=s.reduce((o,d)=>o+(d.causes.includes("low fps")?1:0),0),c=r.filter(o=>!!o.avgJitterDelayInInterval).map(o=>o.avgJitterDelayInInterval),n=r.filter(o=>!!o.rtt).map(o=>o.rtt);return{webRTCStats:{anomalies:s,minRtt:Math.min(...n),avgRtt:Ce(n),maxRtt:Math.max(...n),aggregateReport:Oe(e[0],e[e.length-1],i),minJitterDelayInInterval:Math.min(...c),maxJitterDelayInInterval:Math.max(...c),avgJitterDelayInInterval:Ce(c)},codec:e[0].codec,resolution:`${e[0].frameWidth}x${e[0].frameHeight}`}}const ae=100,nt=Math.max(Math.ceil(400/ae),1),at=.25,it=.28;function st(){let e=0,t,a,r=0;return s=>{for(const i of s.values())if(i&&i.type==="inbound-rtp"&&i.kind==="video"){const c=i.jitterBufferDelay,n=i.jitterBufferEmittedCount;if(a&&n>a){const u=c-t,w=n-a;r=u/w}t=c,a=n;const o=i.framesDecoded,d=o-e>0;return e=o,{isReceiving:d,avgJitterDelayInInterval:r,freezeCount:i.freezeCount}}return{isReceiving:!1,avgJitterDelayInInterval:r}}}function ot(e,t,a,r,s,i=!1){let c=[],n,o=0,d=!1,u=Y.Unknown,w=Y.Unknown,P=0,S=0;const D=st();return setInterval(async()=>{const C=await e.getStats(),{isReceiving:R,avgJitterDelayInInterval:F,freezeCount:B}=D(C),l=tt(C);if(R)o=0,P=B-S,w=F<at?Y.Strong:F>it&&P>1?Y.Weak:u,w!==u&&(s==null||s(w),u=w,S+=P,P=0),d||(r==null||r(p.Start),n=c[c.length-1],c=[],d=!0),c.push(l);else if(d&&(o++,o>=nt)){const y=rt(c,ae,n);r==null||r(p.Stop,y),t()||a(),S=B,d=!1}},ae)}let Ie=!1;const z=(e,t)=>Ie&&console.log(e,t),ct=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function Me(e){switch(e){case"connected":return _.Connected;case"checking":return _.Connecting;case"failed":return _.Fail;case"new":return _.New;case"closed":return _.Closed;case"disconnected":return _.Disconnected;case"completed":return _.Completed;default:return _.New}}function dt(e){const[t,a=""]=e.split(/:(.+)/);try{const r=JSON.parse(a);return z("parsed data channel message",{subject:t,data:r}),{subject:t,data:r}}catch(r){return z("Failed to parse data channel message, returning data as string",{subject:t,rawData:a,error:r}),{subject:t,data:a}}}function lt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,report:r}){e===p.Start&&t===p.Start?a==null||a(p.Start):e===p.Stop&&t===p.Stop&&(a==null||a(p.Stop,r))}function ut({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:r,report:s}){e===p.Start?a==null||a(p.Start):e===p.Stop&&(a==null||a(p.Stop,s)),t===p.Start?r==null||r(Q.Talking):t===p.Stop&&(r==null||r(Q.Idle))}function _e({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:r,streamType:s,report:i}){s===U.Legacy?lt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,report:i}):s===U.Fluent&&ut({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:r,report:i})}async function ft(e,t,{debug:a=!1,callbacks:r,auth:s,baseURL:i=Z,analytics:c}){Ie=a;let n=!1,o=!1,d=p.Stop,u=p.Stop;const{startConnection:w,sendStreamRequest:P,close:S,createStream:D,addIceCandidate:C}=t.videoType===ee.Clip?Ge(s,i,e,r.onError):Ze(s,i,e,r.onError),{id:R,offer:F,ice_servers:B,session_id:l,fluent:y,interrupt_enabled:v}=await D(t),h=new ct({iceServers:B}),E=h.createDataChannel("JanusDataChannel");if(!l)throw new Error("Could not create session_id");const k=y?U.Fluent:U.Legacy;c.enrich({"stream-type":k});const $=t.stream_warmup&&!y,H=()=>n,N=()=>{var f;n=!0,o&&((f=r.onConnectionStateChange)==null||f.call(r,_.Connected))},I=ot(h,H,N,(f,g)=>_e({statsSignal:u=f,dataChannelSignal:k===U.Legacy?d:void 0,onVideoStateChange:r.onVideoStateChange,onAgentActivityStateChange:r.onAgentActivityStateChange,report:g,streamType:k}),f=>{var g;return(g=r.onConnectivityStateChange)==null?void 0:g.call(r,f)},$);h.onicecandidate=f=>{var g;z("peerConnection.onicecandidate",f);try{f.candidate&&f.candidate.sdpMid&&f.candidate.sdpMLineIndex!==null?C(R,{candidate:f.candidate.candidate,sdpMid:f.candidate.sdpMid,sdpMLineIndex:f.candidate.sdpMLineIndex},l):C(R,{candidate:null},l)}catch(A){(g=r.onError)==null||g.call(r,A,{streamId:R})}},E.onopen=()=>{o=!0,(!$||n)&&N()};function M(f){d=f===L.StreamStarted?p.Start:p.Stop,_e({statsSignal:k===U.Legacy?u:void 0,dataChannelSignal:d,onVideoStateChange:r.onVideoStateChange,onAgentActivityStateChange:r.onAgentActivityStateChange,streamType:k})}function T(f,g){const A=typeof g=="string"?g:g==null?void 0:g.metadata;A&&c.enrich({streamMetadata:A}),c.track("agent-chat",{event:"ready"})}const J={[L.StreamStarted]:M,[L.StreamDone]:M,[L.StreamReady]:T};E.onmessage=f=>{var q;const{subject:g,data:A}=dt(f.data);(q=J[g])==null||q.call(J,g,A)},h.oniceconnectionstatechange=()=>{var g;z("peerConnection.oniceconnectionstatechange => "+h.iceConnectionState);const f=Me(h.iceConnectionState);f!==_.Connected&&((g=r.onConnectionStateChange)==null||g.call(r,f))},h.ontrack=f=>{var g;z("peerConnection.ontrack",f),(g=r.onSrcObjectReady)==null||g.call(r,f.streams[0])},await h.setRemoteDescription(F),z("set remote description OK");const W=await h.createAnswer();return z("create answer OK"),await h.setLocalDescription(W),z("set local description OK"),await w(R,W,l),z("start connection OK"),{speak(f){return P(R,l,f)},async disconnect(){var f;if(R){const g=Me(h.iceConnectionState);if(h){if(g===_.New){clearInterval(I);return}h.close(),h.oniceconnectionstatechange=null,h.onnegotiationneeded=null,h.onicecandidate=null,h.ontrack=null}try{g===_.Connected&&await S(R,l).catch(A=>{})}catch(A){z("Error on close stream connection",A)}(f=r.onAgentActivityStateChange)==null||f.call(r,Q.Idle),clearInterval(I)}},sendDataChannelMessage(f){var g,A;if(!n||E.readyState!=="open"){z("Data channel is not ready for sending messages"),(g=r.onError)==null||g.call(r,new Error("Data channel is not ready for sending messages"),{streamId:R});return}try{E.send(f)}catch(q){z("Error sending data channel message",q),(A=r.onError)==null||A.call(r,q,{streamId:R})}},sessionId:l,streamId:R,streamType:k,interruptEnabled:v}}function mt(e,t){const{streamOptions:a}=t??{};return{videoType:ge(e.presenter.type),output_resolution:a==null?void 0:a.outputResolution,session_timeout:a==null?void 0:a.sessionTimeout,stream_warmup:a==null?void 0:a.streamWarmup,compatibility_mode:a==null?void 0:a.compatibilityMode,fluent:a==null?void 0:a.fluent}}function gt(e,t,a,r,s){s===U.Fluent?ht(e,t,a,r,s):pt(e,t,a,r,s)}function ht(e,t,a,r,s){e===p.Start?r.track("stream-session",{event:"start","stream-type":s}):e===p.Stop&&r.track("stream-session",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":s,...a})}function wt(e,t,a,r){K.get()<=0||(e===p.Start?a.linkTrack("agent-video",{event:"start",latency:K.get(!0),"stream-type":r},"start",[L.StreamVideoCreated]):e===p.Stop&&a.linkTrack("agent-video",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":r},"done",[L.StreamVideoDone]))}function pt(e,t,a,r,s){K.get()<=0||(e===p.Start?r.linkTrack("agent-video",{event:"start",latency:K.get(!0),"stream-type":s},"start",[L.StreamVideoCreated]):e===p.Stop&&r.linkTrack("agent-video",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":s,...a},"done",[L.StreamVideoDone]))}function yt(e,t,a){return K.reset(),new Promise(async(r,s)=>{try{const i=await ft(e.id,mt(e,t),{...t,analytics:a,callbacks:{...t.callbacks,onConnectionStateChange:c=>{var n,o;(o=(n=t.callbacks).onConnectionStateChange)==null||o.call(n,c),c===_.Connected&&r(i)},onVideoStateChange:(c,n)=>{var o,d;(d=(o=t.callbacks).onVideoStateChange)==null||d.call(o,c),gt(c,e,n,a,i.streamType)},onAgentActivityStateChange:c=>{var n,o;(o=(n=t.callbacks).onAgentActivityStateChange)==null||o.call(n,c),wt(c===Q.Talking?p.Start:p.Stop,e,a,i.streamType)}}})}catch(i){s(i)}})}async function vt(e,t,a,r,s){var o,d,u,w;const{chat:i,chatMode:c}=await Se(e,a,r,t.mode,t.persistentChat,s);if(c&&c!==t.mode&&(t.mode=c,(d=(o=t.callbacks).onModeChange)==null||d.call(o,c),c===b.TextOnly))return(w=(u=t.callbacks).onError)==null||w.call(u,new ie(c)),{chat:i};const n=await yt(e,t,r);return{chat:i,streamingManager:n}}async function kt(e,t){var R,F,B;let a=!0,r=!1;const s=t.mixpanelKey||Pe,i=t.wsURL||je,c=t.baseURL||Z,n={messages:[],chatMode:t.mode||b.Functional},o=ke(t.auth,c,t.callbacks.onError),d=await o.getById(e),u=We({token:s,agent:d,isEnabled:t.enableAnalitics,distinctId:t.distinctId}),{onMessage:w,clearQueue:P}=Qe(u,n,t,d,()=>{var l;return(l=n.socketManager)==null?void 0:l.disconnect()});n.messages=Ke(t.initialMessages),(F=(R=t.callbacks).onNewMessage)==null||F.call(R,[...n.messages],"answer"),u.track("agent-sdk",{event:"loaded",...ze(d)});async function S(l){var $,H,N,I,M,T,J;(H=($=t.callbacks).onConnectionStateChange)==null||H.call($,_.Connecting),K.reset(),r=!1,l&&!a&&(delete n.chat,(I=(N=t.callbacks).onNewMessage)==null||I.call(N,[...n.messages],"answer"));const y=t.mode===b.DirectPlayback?Promise.resolve(void 0):Ve(t.auth,i,{onMessage:w,onError:t.callbacks.onError}),v=te(()=>vt(d,t,o,u,n.chat),{limit:3,timeout:Te,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:W=>(W==null?void 0:W.message)!=="Could not connect"&&W.status!==429,delayMs:1e3}).catch(W=>{var f,g;throw C(b.Maintenance),(g=(f=t.callbacks).onConnectionStateChange)==null||g.call(f,_.Fail),W}),[h,{streamingManager:E,chat:k}]=await Promise.all([y,v]);k&&k.id!==((M=n.chat)==null?void 0:M.id)&&((J=(T=t.callbacks).onNewChat)==null||J.call(T,k.id)),n.streamingManager=E,n.socketManager=h,n.chat=k,a=!1,C((k==null?void 0:k.chat_mode)??t.mode??b.Functional)}async function D(){var l,y,v,h;(l=n.socketManager)==null||l.disconnect(),await((y=n.streamingManager)==null?void 0:y.disconnect()),r=!1,delete n.streamingManager,delete n.socketManager,(h=(v=t.callbacks).onConnectionStateChange)==null||h.call(v,_.Disconnected)}async function C(l){var y,v;l!==n.chatMode&&(u.track("agent-mode-change",{mode:l}),n.chatMode=l,n.chatMode!==b.Functional&&await D(),(v=(y=t.callbacks).onModeChange)==null||v.call(y,l))}return{agent:d,getStreamType:()=>{var l;return(l=n.streamingManager)==null?void 0:l.streamType},getIsInterruptEnabled:()=>{var l;return((l=n.streamingManager)==null?void 0:l.interruptEnabled)??!1},starterMessages:((B=d.knowledge)==null?void 0:B.starter_message)||[],getSTTToken:()=>o.getSTTToken(d.id),changeMode:C,enrichAnalytics:u.enrich,async connect(){var l;await S(!0),u.track("agent-chat",{event:"connect",chatId:(l=n.chat)==null?void 0:l.id,agentId:d.id,mode:n.chatMode})},async reconnect(){var l;await D(),await S(!1),u.track("agent-chat",{event:"reconnect",chatId:(l=n.chat)==null?void 0:l.id,agentId:d.id,mode:n.chatMode})},async disconnect(){var l;await D(),u.track("agent-chat",{event:"disconnect",chatId:(l=n.chat)==null?void 0:l.id,agentId:d.id,mode:n.chatMode})},async chat(l){var E,k,$,H,N;const y=()=>{if(t.mode===b.DirectPlayback)throw new V("Direct playback is enabled, chat is disabled");if(l.length>=800)throw new V("Message cannot be more than 800 characters");if(l.length===0)throw new V("Message cannot be empty");if(n.chatMode===b.Maintenance)throw new V("Chat is in maintenance mode");if(![b.TextOnly,b.Playground].includes(n.chatMode)){if(!n.streamingManager)throw new V("Streaming manager is not initialized");if(!n.chat)throw new V("Chat is not initialized")}},v=async()=>{var I,M;if(!n.chat){const T=await Se(d,o,u,n.chatMode,t.persistentChat);if(!T.chat)throw new x(n.chatMode,!!t.persistentChat);n.chat=T.chat,(M=(I=t.callbacks).onNewChat)==null||M.call(I,n.chat.id)}return n.chat.id},h=async(I,M)=>te(()=>{var T,J;return o.chat(d.id,M,{chatMode:n.chatMode,streamId:(T=n.streamingManager)==null?void 0:T.streamId,sessionId:(J=n.streamingManager)==null?void 0:J.sessionId,messages:I.map(({matches:W,...f})=>f)},{...Re(n.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:T=>{var f,g,A,q;const J=(f=T==null?void 0:T.message)==null?void 0:f.includes("missing or invalid session_id");return!((g=T==null?void 0:T.message)==null?void 0:g.includes("Stream Error"))&&!J?((q=(A=t.callbacks).onError)==null||q.call(A,T),!1):!0},onRetry:async()=>{await D(),await S(!1)}});try{P(),y(),n.messages.push({id:G(),role:"user",content:l,created_at:new Date(K.update()).toISOString()}),(k=(E=t.callbacks).onNewMessage)==null||k.call(E,[...n.messages],"user");const I=await v(),M=await h([...n.messages],I);return n.messages.push({id:G(),role:"assistant",content:M.result||"",created_at:new Date().toISOString(),context:M.context,matches:M.matches,videoId:M.videoId}),r&&M.videoId&&n.streamingManager&&(r=!1,n.messages[n.messages.length-1].interrupted=!0,await Ee(n.streamingManager,M.videoId)),u.track("agent-message-send",{event:"success",mode:n.chatMode,messages:n.messages.length+1}),M.result&&((H=($=t.callbacks).onNewMessage)==null||H.call($,[...n.messages],"answer"),u.track("agent-message-received",{latency:K.get(!0),mode:n.chatMode,messages:n.messages.length})),M}catch(I){throw r=!1,((N=n.messages[n.messages.length-1])==null?void 0:N.role)==="assistant"&&n.messages.pop(),u.track("agent-message-send",{event:"error",mode:n.chatMode,messages:n.messages.length}),I}},rate(l,y,v){var k,$,H,N;const h=n.messages.find(I=>I.id===l);if(n.chat){if(!h)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const E=((k=h.matches)==null?void 0:k.map(I=>[I.document_id,I.id]))??[];return u.track("agent-rate",{event:v?"update":"create",thumb:y===1?"up":"down",knowledge_id:(($=d.knowledge)==null?void 0:$.id)??"",mode:n.chatMode,matches:E,score:y}),v?o.updateRating(d.id,n.chat.id,v,{knowledge_id:((H=d.knowledge)==null?void 0:H.id)??"",message_id:l,matches:E,score:y}):o.createRating(d.id,n.chat.id,{knowledge_id:((N=d.knowledge)==null?void 0:N.id)??"",message_id:l,matches:E,score:y})},deleteRate(l){var y;if(!n.chat)throw new Error("Chat is not initialized");return u.track("agent-rate-delete",{type:"text",chat_id:(y=n.chat)==null?void 0:y.id,id:l,mode:n.chatMode}),o.deleteRating(d.id,n.chat.id,l)},async speak(l){var E,k,$;function y(){if(typeof l=="string"){if(!d.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:d.presenter.voice,input:l,ssml:!1}}if(l.type==="text"&&!l.provider){if(!d.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:d.presenter.voice,input:l.input,ssml:l.ssml}}return l}const v=y();if(u.track("agent-speak",v),K.update(),n.messages&&v.type==="text"&&(n.messages.push({id:G(),role:"assistant",content:v.input,created_at:new Date(K.get(!0)).toISOString()}),(k=(E=t.callbacks).onNewMessage)==null||k.call(E,[...n.messages],"answer")),Ae(n.chatMode))return{duration:0,status:"success"};if(!n.streamingManager)throw new Error("Please connect to the agent first");return n.streamingManager.speak({script:v,metadata:{chat_id:($=n.chat)==null?void 0:$.id,agent_id:d.id}})},async interrupt(){var v,h,E;const l=n.messages[n.messages.length-1],y=(l==null?void 0:l.role)==="user";if(He(n.streamingManager,n.chat,(v=n.streamingManager)==null?void 0:v.streamType,y,!!(l!=null&&l.videoId)),y){r=!0;return}l.interrupted=!0,(E=(h=t.callbacks).onNewMessage)==null||E.call(h,[...n.messages],"answer"),Ee(n.streamingManager,l==null?void 0:l.videoId)}}}function Dt(e,t,a){const{getById:r}=ke(t,a||Z);return r(e)}m.AgentActivityState=Q,m.AgentStatus=de,m.ChatCreationFailed=x,m.ChatMode=b,m.ChatModeDowngraded=ie,m.ChatProgress=X,m.ConnectionState=_,m.ConnectivityState=Y,m.DocumentType=me,m.KnowledgeType=fe,m.PlanGroup=ce,m.Providers=he,m.RateState=le,m.StreamEvents=L,m.StreamType=U,m.StreamingState=p,m.Subject=ue,m.UserPlan=oe,m.ValidationError=V,m.VideoType=ee,m.VoiceAccess=we,m.WsError=se,m.createAgentManager=kt,m.getAgent=Dt,m.mapVideoType=ge,Object.defineProperty(m,Symbol.toStringTag,{value:"Module"})});
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.13",
4
+ "version": "1.1.0-beta.14",
5
5
  "type": "module",
6
6
  "description": "d-id client sdk",
7
7
  "repository": {