@d-id/client-sdk 1.1.0-beta.25 → 1.1.0-beta.27

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