@d-id/client-sdk 1.1.1-staging.2 → 1.1.1-staging.3

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