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