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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- (function(f,I){typeof exports=="object"&&typeof module<"u"?I(exports):typeof define=="function"&&define.amd?define(["exports"],I):(f=typeof globalThis<"u"?globalThis:f||self,I(f.index={}))})(this,function(f){"use strict";var ht=Object.defineProperty;var wt=(f,I,F)=>I in f?ht(f,I,{enumerable:!0,configurable:!0,writable:!0,value:F}):f[I]=F;var Y=(f,I,F)=>(wt(f,typeof I!="symbol"?I+"":I,F),F);class I extends Error{constructor({kind:r,description:a,error:o}){super(JSON.stringify({kind:r,description:a}));Y(this,"kind");Y(this,"description");Y(this,"error");this.kind=r,this.description=a,this.error=o}}class F extends I{constructor(t,r){super({kind:"ChatCreationFailed",description:`Failed to create ${r?"persistent":""} chat, mode: ${t}`})}}class re extends I{constructor(t){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${t}`})}}class H extends I{constructor(r,a){super({kind:"ValidationError",description:r});Y(this,"key");this.key=a}}class ae extends I{constructor(t){super({kind:"WSError",description:t})}}var ie=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(ie||{}),se=(e=>(e.TRIAL="deid-trial",e.PRO="deid-pro",e.ENTERPRISE="deid-enterprise",e.LITE="deid-lite",e.ADVANCED="deid-advanced",e.BUILD="deid-api-build",e.LAUNCH="deid-api-launch",e.SCALE="deid-api-scale",e))(se||{}),oe=(e=>(e.Created="created",e.Started="started",e.Done="done",e.Error="error",e.Rejected="rejected",e.Ready="ready",e))(oe||{}),ce=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(ce||{}),j=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e.DirectPlayback="DirectPlayback",e))(j||{}),K=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(K||{}),de=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(de||{}),le=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(le||{}),ue=(e=>(e.Pdf="pdf",e.Text="text",e.Html="html",e.Word="word",e.Json="json",e.Markdown="markdown",e.Csv="csv",e.Excel="excel",e.Powerpoint="powerpoint",e.Archive="archive",e.Image="image",e.Audio="audio",e.Video="video",e))(ue||{}),G=(e=>(e.Clip="clip",e.Talk="talk",e))(G||{});const fe=e=>{switch(e){case"clip":return"clip";case"talk":return"talk";default:throw new Error(`Unknown video type: ${e}`)}};var y=(e=>(e.Start="START",e.Stop="STOP",e))(y||{}),q=(e=>(e.Strong="STRONG",e.Weak="WEAK",e.Unknown="UNKNOWN",e))(q||{}),x=(e=>(e.Idle="IDLE",e.Talking="TALKING",e))(x||{});const Z={"stream/started":"START","stream/done":"STOP"};var V=(e=>(e.ChatAnswer="chat/answer",e.ChatPartial="chat/partial",e.StreamDone="stream/done",e.StreamStarted="stream/started",e.StreamFailed="stream/error",e.StreamReady="stream/ready",e.StreamCreated="stream/created",e.StreamVideoCreated="stream-video/started",e.StreamVideoDone="stream-video/done",e.StreamVideoError="stream-video/error",e.StreamVideoRejected="stream-video/rejected",e))(V||{}),M=(e=>(e.New="new",e.Fail="fail",e.Connected="connected",e.Connecting="connecting",e.Closed="closed",e.Completed="completed",e.Disconnected="disconnected",e))(M||{}),N=(e=>(e.Legacy="legacy",e.Fluent="fluent",e))(N||{}),me=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(me||{}),ge=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(ge||{});const Ie=45*1e3,Te="X-Playground-Chat",X="https://api.d-id.com",je="wss://notifications.d-id.com",be="79f81a83a67430be2bc0fd61042b8faa",he=e=>new Promise(t=>setTimeout(t,e)),Q=()=>Math.random().toString(16).slice(2);function Pe(e,t){let r;return{promise:new Promise((o,s)=>{r=setTimeout(()=>s(new Error(t)),e)}),clear:()=>clearTimeout(r)}}async function O(e,t){const r={limit:(t==null?void 0:t.limit)??3,delayMs:(t==null?void 0:t.delayMs)??0,timeout:(t==null?void 0:t.timeout)??3e4,timeoutErrorMessage:(t==null?void 0:t.timeoutErrorMessage)||"Timeout error",shouldRetryFn:(t==null?void 0:t.shouldRetryFn)??(()=>!0),onRetry:(t==null?void 0:t.onRetry)??(()=>{})};let a;for(let o=1;o<=r.limit;o++)try{if(!r.timeout)return await e();const{promise:s,clear:n}=Pe(r.timeout,r.timeoutErrorMessage),i=e().finally(n);return await Promise.race([i,s])}catch(s){if(a=s,!r.shouldRetryFn(s)||o>=r.limit)throw s;await he(r.delayMs),r.onRetry(s)}throw a}function we(){let e=window.localStorage.getItem("did_external_key_id");return e||(e=Math.random().toString(16).slice(2),window.localStorage.setItem("did_external_key_id",e)),e}let Ae=Q();function ye(e){if(e.type==="bearer")return`Bearer ${e.token}`;if(e.type==="basic")return`Basic ${btoa(`${e.username}:${e.password}`)}`;if(e.type==="key")return`Client-Key ${e.clientKey}.${we()}_${Ae}`;throw new Error(`Unknown auth type: ${e}`)}const Be=e=>O(e,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:t=>t.status===429});function ee(e,t=X,r){const a=async(o,s)=>{const{skipErrorHandler:n,...i}=s||{},c=await Be(()=>fetch(t+(o!=null&&o.startsWith("/")?o:`/${o}`),{...i,headers:{...i.headers,Authorization:ye(e),"Content-Type":"application/json"}}));if(!c.ok){let l=await c.text().catch(()=>`Failed to fetch with status ${c.status}`);const m=new Error(l);throw r&&!n&&r(m,{url:o,options:i,headers:c.headers}),m}return c.json()};return{get(o,s){return a(o,{...s,method:"GET"})},post(o,s,n){return a(o,{...n,body:JSON.stringify(s),method:"POST"})},delete(o,s,n){return a(o,{...n,body:JSON.stringify(s),method:"DELETE"})},patch(o,s,n){return a(o,{...n,body:JSON.stringify(s),method:"PATCH"})}}}function pe(e,t=X,r){const a=ee(e,`${t}/agents`,r);return{create(o,s){return a.post("/",o,s)},getAgents(o,s){return a.get(`/${o?`?tag=${o}`:""}`,s).then(n=>n??[])},getById(o,s){return a.get(`/${o}`,s)},delete(o,s){return a.delete(`/${o}`,void 0,s)},update(o,s,n){return a.patch(`/${o}`,s,n)},newChat(o,s,n){return a.post(`/${o}/chat`,s,n)},chat(o,s,n,i){return a.post(`/${o}/chat/${s}`,n,i)},createRating(o,s,n,i){return a.post(`/${o}/chat/${s}/ratings`,n,i)},updateRating(o,s,n,i,c){return a.patch(`/${o}/chat/${s}/ratings/${n}`,i,c)},deleteRating(o,s,n,i){return a.delete(`/${o}/chat/${s}/ratings/${n}`,i)},getSTTToken(o,s){return a.get(`/${o}/stt-token`,s)}}}const ve=e=>e.type==="clip"&&e.presenter_id.startsWith("v2_")?"clip_v2":e.type;function $e(e){var o,s,n,i;const t=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",r=()=>{const c=navigator.platform;return c.toLowerCase().includes("win")?"Windows":c.toLowerCase().includes("mac")?"Mac OS X":c.toLowerCase().includes("linux")?"Linux":"Unknown"},a=e.presenter;return{$os:`${r()}`,isMobile:`${t()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:ve(a),agentVoice:{voiceId:(s=(o=e.presenter)==null?void 0:o.voice)==null?void 0:s.voice_id,provider:(i=(n=e.presenter)==null?void 0:n.voice)==null?void 0:i.type}}}const Le=e=>e.reduce((t,r)=>t+r,0),ze=e=>Le(e)/e.length;function Fe(e,t,r){var c,l,m;const{event:a,...o}=e,{template:s}=(t==null?void 0:t.llm)||{},{language:n}=((c=t==null?void 0:t.presenter)==null?void 0:c.voice)||{};return{...o,llm:{...o.llm,template:s},script:{...o.script,provider:{...(l=o==null?void 0:o.script)==null?void 0:l.provider,language:n}},stitch:(t==null?void 0:t.presenter.type)==="talk"?(m=t==null?void 0:t.presenter)==null?void 0:m.stitch:void 0,...r}}let te={};const Ne="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function Je(e){var s,n,i,c,l,m;const t=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk",r=e.agent.presenter,a=(s=e.agent.llm)==null?void 0:s.prompt_customization,o={token:e.token||"testKey",distinct_id:e.distinctId||we(),agentId:e.agent.id,agentType:ve(r),owner_id:e.agent.owner_id??"",promptVersion:(n=e.agent.llm)==null?void 0:n.prompt_version,behavior:{role:a==null?void 0:a.role,personality:a==null?void 0:a.personality,instructions:(i=e.agent.llm)==null?void 0:i.instructions},temperature:(c=e.agent.llm)==null?void 0:c.temperature,knowledgeSource:a==null?void 0:a.knowledge_source,starterQuestionsCount:(m=(l=e.agent.knowledge)==null?void 0:l.starter_message)==null?void 0:m.length,topicsToAvoid:a==null?void 0:a.topics_to_avoid,maxResponseLength:a==null?void 0:a.max_response_length};return{...o,additionalProperties:{},isEnabled:e.isEnabled??!0,getRandom:()=>Math.random().toString(16).slice(2),enrich(g){const D={};if(g&&typeof g!="object")throw new Error("properties must be a flat json object");for(let p in g)(typeof g[p]=="string"||typeof g[p]=="number")&&(D[p]=g[p]);this.additionalProperties={...this.additionalProperties,...D}},async track(g,D){if(!this.isEnabled)return Promise.resolve();const{audioPath:p,...R}=D||{},S={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:g,properties:{...this.additionalProperties,...R,...o,source:t,time:Date.now(),$insert_id:this.getRandom(),origin:window.location.href,"Screen Height":window.screen.height||window.innerWidth,"Screen Width":window.screen.width||window.innerHeight,"User Agent":navigator.userAgent}}])})};try{return await fetch(Ne,S).then(_=>_.json())}catch(_){return console.error(_)}},linkTrack(g,D,p,R){te[g]||(te[g]={events:{},resolvedDependencies:[]}),R.includes(p)||R.push(p);const S=te[g];if(S.events[p]={props:D},S.resolvedDependencies.push(p),R.every(B=>S.resolvedDependencies.includes(B))){const B=R.reduce((d,h)=>S.events[h]?{...d,...S.events[h].props}:d,{});this.track(g,B),S.resolvedDependencies=S.resolvedDependencies.filter(d=>!R.includes(d)),R.forEach(d=>{delete S.events[d]})}}}}function We(){let e=0;return{reset:()=>e=0,update:()=>e=Date.now(),get:(t=!1)=>t?Date.now()-e:e}}const J=We();function Ce(e){return e===j.Playground?{headers:{[Te]:"true"}}:{}}async function ke(e,t,r,a,o=!1,s){try{return!s&&a!==j.DirectPlayback&&(s=await t.newChat(e.id,{persist:o},Ce(a)),r.track("agent-chat",{event:"created",chat_id:s.id,agent_id:e.id,mode:a})),{chat:s,chatMode:(s==null?void 0:s.chat_mode)??a}}catch(n){try{const i=JSON.parse(n.message);if((i==null?void 0:i.kind)==="InsufficientCreditsError")throw new Error("InsufficientCreditsError")}catch(i){console.error("Error parsing the error message:",i)}throw new Error("Cannot create new chat")}}function Ue(e){return e&&e.length>0?e:[]}function He(e){return new Promise((t,r)=>{const{callbacks:a,host:o,auth:s}=e,{onMessage:n=null,onOpen:i=null,onClose:c=null,onError:l=null}=a||{},m=new WebSocket(`${o}?authorization=${ye(s)}`);m.onmessage=n,m.onclose=c,m.onerror=g=>{console.error(g),l==null||l("Websocket failed to connect",g),r(g)},m.onopen=g=>{i==null||i(g),t(m)}})}async function Ke(e){const{retries:t=1}=e;let r=null;for(let a=0;(r==null?void 0:r.readyState)!==WebSocket.OPEN;a++)try{r=await He(e)}catch(o){if(a===t)throw o;await he(a*500)}return r}async function qe(e,t,r){const a=r!=null&&r.onMessage?[r.onMessage]:[],o=await Ke({auth:e,host:t,callbacks:{onError:s=>{var n;return(n=r.onError)==null?void 0:n.call(r,new ae(s))},onMessage(s){const n=JSON.parse(s.data);a.forEach(i=>i(n.event,n))}}});return{socket:o,disconnect:()=>o.close(),subscribeToEvents:s=>a.push(s)}}function xe(e){if(e.answer!==void 0)return e.answer;let t=0,r="";for(;t in e;)r+=e[t++];return r}function Ve(e,t,r,a,o){const s=a.messages[a.messages.length-1];if(!(e===K.Partial||e===K.Answer)||(s==null?void 0:s.role)!=="assistant")return;const{content:n,sequence:i}=t;e===K.Partial?r[i]=n:r.answer=n;const c=xe(r);(s.content!==c||e===K.Answer)&&(s.content=c,o==null||o([...a.messages],e))}function Xe(e,t,r,a,o){let s={};return{clearQueue:()=>s={},onMessage:(n,i)=>{var c,l;if("content"in i)Ve(n,i,s,t,r.callbacks.onNewMessage),n===K.Answer&&e.track("agent-message-received",{messages:t.messages.length,mode:t.chatMode});else{const m=V,g=[m.StreamVideoDone,m.StreamVideoError,m.StreamVideoRejected],D=[m.StreamFailed,m.StreamVideoError,m.StreamVideoRejected],p=Fe(i,a,{mode:t.chatMode});if(n=n,n===m.StreamVideoCreated)e.linkTrack("agent-video",p,m.StreamVideoCreated,["start"]);else if(g.includes(n)){const R=n.split("/")[1];D.includes(n)?e.track("agent-video",{...p,event:R}):e.linkTrack("agent-video",{...p,event:R},n,["done"])}D.includes(n)&&((l=(c=r.callbacks).onError)==null||l.call(c,new Error(`Stream failed with event ${n}`),{data:i})),i.event===m.StreamDone&&o()}}}}function Ye(e,t,r,a){const o=ee(e,`${t}/agents/${r}`,a);return{createStream(s){return o.post("/streams",{output_resolution:s.output_resolution,compatibility_mode:s.compatibility_mode,stream_warmup:s.stream_warmup,session_timeout:s.session_timeout,fluent:s.fluent})},startConnection(s,n,i){return o.post(`/streams/${s}/sdp`,{session_id:i,answer:n})},addIceCandidate(s,n,i){return o.post(`/streams/${s}/ice`,{session_id:i,...n})},sendStreamRequest(s,n,i){return o.post(`/streams/${s}`,{session_id:n,...i})},close(s,n){return o.delete(`/streams/${s}`,{session_id:n})}}}function Qe(e,t,r,a){const o=ee(e,`${t}/agents/${r}`,a);return{createStream(s,n){return o.post("/streams",{driver_url:s.driver_url,face:s.face,config:s.config,output_resolution:s.output_resolution,compatibility_mode:s.compatibility_mode,stream_warmup:s.stream_warmup,session_timeout:s.session_timeout,fluent:s.fluent},n)},startConnection(s,n,i,c){return o.post(`/streams/${s}/sdp`,{session_id:i,answer:n},c)},addIceCandidate(s,n,i,c){return o.post(`/streams/${s}/ice`,{session_id:i,...n},c)},sendStreamRequest(s,n,i,c){return o.post(`/streams/${s}`,{session_id:n,...i},c)},close(s,n,i){return o.delete(`/streams/${s}`,{session_id:n},i)}}}function Ge(e,t,r){const a=(t.timestamp-e.timestamp)/1e3;return{duration:a,bytesReceived:t.bytesReceived-e.bytesReceived,bitrate:Math.round((t.bytesReceived-e.bytesReceived)*8/a),packetsReceived:t.packetsReceived-e.packetsReceived,packetsLost:t.packetsLost-e.packetsLost,framesDropped:t.framesDropped-e.framesDropped,framesDecoded:t.framesDecoded-e.framesDecoded,jitter:t.jitter,avgJitterDelayInInterval:(t.jitterBufferDelay-e.jitterBufferDelay)/(t.jitterBufferEmittedCount-e.jitterBufferEmittedCount),jitterBufferEmittedCount:t.jitterBufferEmittedCount-e.jitterBufferEmittedCount,jitterBufferDelay:(t.jitterBufferDelay-e.jitterBufferDelay)/a,framesPerSecond:t.framesPerSecond,freezeCount:t.freezeCount-e.freezeCount,freezeDuration:t.freezeDuration-e.freezeDuration,lowFpsCount:r}}function Ze(e){return e.filter(t=>t.freezeCount>0||t.framesPerSecond<21||t.framesDropped>0||t.packetsLost>0).map(t=>{const{timestamp:r,...a}=t,o=[];return t.freezeCount>0&&o.push("freeze"),t.framesPerSecond<21&&o.push("low fps"),t.framesDropped>0&&o.push("frames dropped"),t.packetsLost>0&&o.push("packet loss"),{...a,causes:o}})}function Oe(e){let t="";for(const r of e.values())if(r&&r.type==="codec"&&r.mimeType.startsWith("video")&&(t=r.mimeType.split("/")[1]),r&&r.type==="inbound-rtp"&&r.kind==="video")return{codec:t,timestamp:r.timestamp,bytesReceived:r.bytesReceived,packetsReceived:r.packetsReceived,packetsLost:r.packetsLost,framesDropped:r.framesDropped,framesDecoded:r.framesDecoded,jitter:r.jitter,jitterBufferDelay:r.jitterBufferDelay,jitterBufferEmittedCount:r.jitterBufferEmittedCount,avgJitterDelayInInterval:r.jitterBufferDelay/r.jitterBufferEmittedCount,frameWidth:r.frameWidth,frameHeight:r.frameHeight,framesPerSecond:r.framesPerSecond,freezeCount:r.freezeCount,freezeDuration:r.totalFreezesDuration};return{}}function et(e,t,r){const a=e.map((i,c)=>c===0?r?{timestamp:i.timestamp,duration:0,bytesReceived:i.bytesReceived-r.bytesReceived,bitrate:(i.bytesReceived-r.bytesReceived)*8/(t/1e3),packetsReceived:i.packetsReceived-r.packetsReceived,packetsLost:i.packetsLost-r.packetsLost,framesDropped:i.framesDropped-r.framesDropped,framesDecoded:i.framesDecoded-r.framesDecoded,jitter:i.jitter,jitterBufferDelay:i.jitterBufferDelay-r.jitterBufferDelay,jitterBufferEmittedCount:i.jitterBufferEmittedCount-r.jitterBufferEmittedCount,avgJitterDelayInInterval:(i.jitterBufferDelay-r.jitterBufferDelay)/(i.jitterBufferEmittedCount-r.jitterBufferEmittedCount),framesPerSecond:i.framesPerSecond,freezeCount:i.freezeCount-r.freezeCount,freezeDuration:i.freezeDuration-r.freezeDuration}:{timestamp:i.timestamp,duration:0,bytesReceived:i.bytesReceived,bitrate:i.bytesReceived*8/(t/1e3),packetsReceived:i.packetsReceived,packetsLost:i.packetsLost,framesDropped:i.framesDropped,framesDecoded:i.framesDecoded,jitter:i.jitter,jitterBufferDelay:i.jitterBufferDelay,jitterBufferEmittedCount:i.jitterBufferEmittedCount,avgJitterDelayInInterval:i.jitterBufferDelay/i.jitterBufferEmittedCount,framesPerSecond:i.framesPerSecond,freezeCount:i.freezeCount,freezeDuration:i.freezeDuration}:{timestamp:i.timestamp,duration:t*c/1e3,bytesReceived:i.bytesReceived-e[c-1].bytesReceived,bitrate:(i.bytesReceived-e[c-1].bytesReceived)*8/(t/1e3),packetsReceived:i.packetsReceived-e[c-1].packetsReceived,packetsLost:i.packetsLost-e[c-1].packetsLost,framesDropped:i.framesDropped-e[c-1].framesDropped,framesDecoded:i.framesDecoded-e[c-1].framesDecoded,jitter:i.jitter,jitterBufferDelay:i.jitterBufferDelay-e[c-1].jitterBufferDelay,jitterBufferEmittedCount:i.jitterBufferEmittedCount-e[c-1].jitterBufferEmittedCount,avgJitterDelayInInterval:(i.jitterBufferDelay-e[c-1].jitterBufferDelay)/(i.jitterBufferEmittedCount-e[c-1].jitterBufferEmittedCount),framesPerSecond:i.framesPerSecond,freezeCount:i.freezeCount-e[c-1].freezeCount,freezeDuration:i.freezeDuration-e[c-1].freezeDuration}),o=Ze(a),s=o.reduce((i,c)=>i+(c.causes.includes("low fps")?1:0),0),n=a.map(i=>i.avgJitterDelayInInterval);return{webRTCStats:{anomalies:o,aggregateReport:Ge(e[0],e[e.length-1],s),minJitterDelayInInterval:Math.min(...n),maxJitterDelayInInterval:Math.max(...n),avgJitterDelayInInterval:ze(n)},codec:e[0].codec,resolution:`${e[0].frameWidth}x${e[0].frameHeight}`}}const ne=100,tt=Math.max(Math.ceil(400/ne),1),nt=.25,rt=.28;function at(){let e=0,t,r,a=0;return o=>{for(const s of o.values())if(s&&s.type==="inbound-rtp"&&s.kind==="video"){const n=s.jitterBufferDelay,i=s.jitterBufferEmittedCount;if(r&&i>r){const m=n-t,g=i-r;a=m/g}t=n,r=i;const c=s.framesDecoded,l=c-e>0;return e=c,{isReceiving:l,avgJitterDelayInInterval:a,freezeCount:s.freezeCount}}return{isReceiving:!1,avgJitterDelayInInterval:a}}}function it(e,t,r,a,o,s=!1){let n=[],i,c=0,l=!1,m=q.Unknown,g=q.Unknown,D=0,p=0;const R=at();return setInterval(async()=>{const S=await e.getStats(),{isReceiving:_,avgJitterDelayInInterval:B,freezeCount:d}=R(S),h=Oe(S);if(_)c=0,D=d-p,g=B<nt?q.Strong:B>rt&&D>1?q.Weak:m,g!==m&&(o==null||o(g),m=g,p+=D,D=0),l||(a==null||a(y.Start),i=n[n.length-1],n=[],l=!0),n.push(h);else if(l&&(c++,c>=tt)){const C=et(n,ne,i);a==null||a(y.Stop,C),t()||r(),l=!1}},ne)}let De=!1;const W=(e,t)=>De&&console.log(e,t),st=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function Re(e){switch(e){case"connected":return M.Connected;case"checking":return M.Connecting;case"failed":return M.Fail;case"new":return M.New;case"closed":return M.Closed;case"disconnected":return M.Disconnected;case"completed":return M.Completed;default:return M.New}}function ot({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,report:a}){e===y.Start&&t===y.Start?r==null||r(y.Start):e===y.Stop&&t===y.Stop&&(r==null||r(y.Stop,a))}function ct({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,onAgentActivityStateChange:a,report:o}){e===y.Start?r==null||r(y.Start):e===y.Stop&&(r==null||r(y.Stop,o)),t===y.Start?a==null||a(x.Talking):t===y.Stop&&(a==null||a(x.Idle))}function Se({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,onAgentActivityStateChange:a,streamType:o,report:s}){o===N.Legacy?ot({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,report:s}):o===N.Fluent&&ct({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,onAgentActivityStateChange:a,report:s})}async function dt(e,t,{debug:r=!1,callbacks:a,auth:o,baseURL:s=X}){De=r;let n=!1,i=!1,c=y.Stop,l=y.Stop,m=q.Unknown;const{startConnection:g,sendStreamRequest:D,close:p,createStream:R,addIceCandidate:S}=t.videoType===G.Clip?Ye(o,s,e,a.onError):Qe(o,s,e,a.onError),{id:_,offer:B,ice_servers:d,session_id:h,fluent:C}=await R(t),w=new st({iceServers:d}),b=w.createDataChannel("JanusDataChannel");if(!h)throw new Error("Could not create session_id");const k=C?N.Fluent:N.Legacy,P=t.stream_warmup&&!C,L=()=>n,$=()=>{var u;n=!0,i&&((u=a.onConnectionStateChange)==null||u.call(a,M.Connected))},E=it(w,L,$,(u,v)=>Se({statsSignal:l=u,dataChannelSignal:k===N.Legacy?c:void 0,onVideoStateChange:a.onVideoStateChange,onAgentActivityStateChange:a.onAgentActivityStateChange,report:v,streamType:k}),u=>{var v;return(v=a.onConnectivityStateChange)==null?void 0:v.call(a,m)},P);w.onicecandidate=u=>{var v;W("peerConnection.onicecandidate",u);try{u.candidate&&u.candidate.sdpMid&&u.candidate.sdpMLineIndex!==null?S(_,{candidate:u.candidate.candidate,sdpMid:u.candidate.sdpMid,sdpMLineIndex:u.candidate.sdpMLineIndex},h):S(_,{candidate:null},h)}catch(A){(v=a.onError)==null||v.call(a,A,{streamId:_})}},b.onopen=()=>{i=!0,(!P||n)&&$()},b.onmessage=u=>{u.data in Z&&(c=Z[u.data],Se({statsSignal:k===N.Legacy?l:void 0,dataChannelSignal:c,onVideoStateChange:a.onVideoStateChange,onAgentActivityStateChange:a.onAgentActivityStateChange,streamType:k}))},w.oniceconnectionstatechange=()=>{var v;W("peerConnection.oniceconnectionstatechange => "+w.iceConnectionState);const u=Re(w.iceConnectionState);u!==M.Connected&&((v=a.onConnectionStateChange)==null||v.call(a,u))},w.ontrack=u=>{var v;W("peerConnection.ontrack",u),(v=a.onSrcObjectReady)==null||v.call(a,u.streams[0])},await w.setRemoteDescription(B),W("set remote description OK");const T=await w.createAnswer();return W("create answer OK"),await w.setLocalDescription(T),W("set local description OK"),await g(_,T,h),W("start connection OK"),{speak(u){return D(_,h,u)},async disconnect(){var u,v,A;if(_){const z=Re(w.iceConnectionState);if(w){if(z===M.New){(u=a.onVideoStateChange)==null||u.call(a,y.Stop),clearInterval(E);return}w.close(),w.oniceconnectionstatechange=null,w.onnegotiationneeded=null,w.onicecandidate=null,w.ontrack=null}try{z===M.Connected&&await p(_,h).catch(U=>{})}catch(U){W("Error on close stream connection",U)}(v=a.onVideoStateChange)==null||v.call(a,y.Stop),(A=a.onAgentActivityStateChange)==null||A.call(a,x.Idle),clearInterval(E)}},sessionId:h,streamId:_,streamType:k}}function lt(e,t){const{streamOptions:r}=t??{};return{videoType:fe(e.presenter.type),output_resolution:r==null?void 0:r.outputResolution,session_timeout:r==null?void 0:r.sessionTimeout,stream_warmup:r==null?void 0:r.streamWarmup,compatibility_mode:r==null?void 0:r.compatibilityMode,fluent:r==null?void 0:r.fluent}}function Ee(e,t,r,a,o){J.get()>0&&(e===y.Start?a.linkTrack("agent-video",{event:"start",latency:J.get(!0),"stream-type":o},"start",[V.StreamVideoCreated]):e===y.Stop&&a.linkTrack("agent-video",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":o,...r},"done",[V.StreamVideoDone]))}function ut(e,t,r){return J.reset(),new Promise(async(a,o)=>{try{const s=await dt(e.id,lt(e,t),{...t,analytics:r,callbacks:{...t.callbacks,onConnectionStateChange:n=>{var i,c;(c=(i=t.callbacks).onConnectionStateChange)==null||c.call(i,n),n===M.Connected&&a(s)},onVideoStateChange:(n,i)=>{var c,l;(l=(c=t.callbacks).onVideoStateChange)==null||l.call(c,n),Ee(n,e,i,r,s.streamType)},onAgentActivityStateChange:n=>{var i,c;(c=(i=t.callbacks).onAgentActivityStateChange)==null||c.call(i,n),Ee(n===x.Talking?y.Start:y.Stop,e,void 0,r,s.streamType)}}})}catch(s){o(s)}})}async function ft(e,t,r,a,o){var c,l,m,g;const{chat:s,chatMode:n}=await ke(e,r,a,t.mode,t.persistentChat,o);if(n&&n!==t.mode&&(t.mode=n,(l=(c=t.callbacks).onModeChange)==null||l.call(c,n),n===j.TextOnly))return(g=(m=t.callbacks).onError)==null||g.call(m,new re(n)),{chat:s};const i=await ut(e,t,a);return{chat:s,streamingManager:i}}async function mt(e,t){var S,_,B;let r=!0;const a=t.mixpanelKey||be,o=t.wsURL||je,s=t.baseURL||X,n={messages:[],chatMode:t.mode||j.Functional},i=pe(t.auth,s,t.callbacks.onError),c=await i.getById(e),l=Je({token:a,agent:c,isEnabled:t.enableAnalitics,distinctId:t.distinctId}),{onMessage:m,clearQueue:g}=Xe(l,n,t,c,()=>{var d;return(d=n.socketManager)==null?void 0:d.disconnect()});n.messages=Ue(t.initialMessages),(_=(S=t.callbacks).onNewMessage)==null||_.call(S,[...n.messages],"answer"),l.track("agent-sdk",{event:"loaded",...$e(c)});async function D(d){var P,L,$,E,T,u,v;(L=(P=t.callbacks).onConnectionStateChange)==null||L.call(P,M.Connecting),J.reset(),d&&!r&&(delete n.chat,(E=($=t.callbacks).onNewMessage)==null||E.call($,[...n.messages],"answer"));const h=t.mode===j.DirectPlayback?Promise.resolve(void 0):qe(t.auth,o,{onMessage:m,onError:t.callbacks.onError}),C=O(()=>ft(c,t,i,l,n.chat),{limit:3,timeout:Ie,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:A=>(A==null?void 0:A.message)!=="Could not connect"&&A.status!==429,delayMs:1e3}).catch(A=>{var z,U;throw R(j.Maintenance),(U=(z=t.callbacks).onConnectionStateChange)==null||U.call(z,M.Fail),A}),[w,{streamingManager:b,chat:k}]=await Promise.all([h,C]);k&&k.id!==((T=n.chat)==null?void 0:T.id)&&((v=(u=t.callbacks).onNewChat)==null||v.call(u,k.id)),n.streamingManager=b,n.socketManager=w,n.chat=k,r=!1,R((k==null?void 0:k.chat_mode)??t.mode??j.Functional)}async function p(){var d,h,C,w;(d=n.socketManager)==null||d.disconnect(),await((h=n.streamingManager)==null?void 0:h.disconnect()),delete n.streamingManager,delete n.socketManager,(w=(C=t.callbacks).onConnectionStateChange)==null||w.call(C,M.Disconnected)}async function R(d){var h,C;d!==n.chatMode&&(l.track("agent-mode-change",{mode:d}),n.chatMode=d,n.chatMode!==j.Functional&&await p(),(C=(h=t.callbacks).onModeChange)==null||C.call(h,d))}return{agent:c,getStreamType:()=>{var d;return(d=n.streamingManager)==null?void 0:d.streamType},starterMessages:((B=c.knowledge)==null?void 0:B.starter_message)||[],getSTTToken:()=>i.getSTTToken(c.id),changeMode:R,enrichAnalytics:l.enrich,async connect(){var d;await D(!0),l.track("agent-chat",{event:"connect",chatId:(d=n.chat)==null?void 0:d.id,agentId:c.id,mode:n.chatMode})},async reconnect(){var d;await p(),await D(!1),l.track("agent-chat",{event:"reconnect",chatId:(d=n.chat)==null?void 0:d.id,agentId:c.id,mode:n.chatMode})},async disconnect(){var d;await p(),l.track("agent-chat",{event:"disconnect",chatId:(d=n.chat)==null?void 0:d.id,agentId:c.id,mode:n.chatMode})},async chat(d){var b,k,P,L,$;const h=()=>{if(t.mode===j.DirectPlayback)throw new H("Direct playback is enabled, chat is disabled");if(d.length>=800)throw new H("Message cannot be more than 800 characters");if(d.length===0)throw new H("Message cannot be empty");if(n.chatMode===j.Maintenance)throw new H("Chat is in maintenance mode");if(![j.TextOnly,j.Playground].includes(n.chatMode)){if(!n.streamingManager)throw new H("Streaming manager is not initialized");if(!n.chat)throw new H("Chat is not initialized")}},C=async()=>{var E,T;if(!n.chat){const u=await ke(c,i,l,n.chatMode,t.persistentChat);if(!u.chat)throw new F(n.chatMode,!!t.persistentChat);n.chat=u.chat,(T=(E=t.callbacks).onNewChat)==null||T.call(E,n.chat.id)}return n.chat.id},w=async(E,T)=>O(()=>{var u,v;return i.chat(c.id,T,{chatMode:n.chatMode,streamId:(u=n.streamingManager)==null?void 0:u.streamId,sessionId:(v=n.streamingManager)==null?void 0:v.sessionId,messages:E.map(({matches:A,...z})=>z)},{...Ce(n.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:u=>{var z,U,Me,_e;const v=(z=u==null?void 0:u.message)==null?void 0:z.includes("missing or invalid session_id");return!((U=u==null?void 0:u.message)==null?void 0:U.includes("Stream Error"))&&!v?((_e=(Me=t.callbacks).onError)==null||_e.call(Me,u),!1):!0},onRetry:async()=>{await p(),await D(!1)}});try{g(),h(),n.messages.push({id:Q(),role:"user",content:d,created_at:new Date(J.update()).toISOString()}),(k=(b=t.callbacks).onNewMessage)==null||k.call(b,[...n.messages],"user");const E=await C(),T=await w([...n.messages],E);return n.messages.push({id:Q(),role:"assistant",content:T.result||"",created_at:new Date().toISOString(),context:T.context,matches:T.matches}),l.track("agent-message-send",{event:"success",mode:n.chatMode,messages:n.messages.length+1}),T.result&&((L=(P=t.callbacks).onNewMessage)==null||L.call(P,[...n.messages],"answer"),l.track("agent-message-received",{latency:J.get(!0),mode:n.chatMode,messages:n.messages.length})),T}catch(E){throw(($=n.messages[n.messages.length-1])==null?void 0:$.role)==="assistant"&&n.messages.pop(),l.track("agent-message-send",{event:"error",mode:n.chatMode,messages:n.messages.length}),E}},rate(d,h,C){var k,P,L,$;const w=n.messages.find(E=>E.id===d);if(n.chat){if(!w)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const b=((k=w.matches)==null?void 0:k.map(E=>[E.document_id,E.id]))??[];return l.track("agent-rate",{event:C?"update":"create",thumb:h===1?"up":"down",knowledge_id:((P=c.knowledge)==null?void 0:P.id)??"",mode:n.chatMode,matches:b,score:h}),C?i.updateRating(c.id,n.chat.id,C,{knowledge_id:((L=c.knowledge)==null?void 0:L.id)??"",message_id:d,matches:b,score:h}):i.createRating(c.id,n.chat.id,{knowledge_id:(($=c.knowledge)==null?void 0:$.id)??"",message_id:d,matches:b,score:h})},deleteRate(d){var h;if(!n.chat)throw new Error("Chat is not initialized");return l.track("agent-rate-delete",{type:"text",chat_id:(h=n.chat)==null?void 0:h.id,id:d,mode:n.chatMode}),i.deleteRating(c.id,n.chat.id,d)},speak(d){var w,b,k,P;if(!n.streamingManager)throw new Error("Please connect to the agent first");function h(){if(typeof d=="string"){if(!c.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:c.presenter.voice,input:d,ssml:!1}}if(d.type==="text"&&!d.provider){if(!c.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:c.presenter.voice,input:d.input,ssml:d.ssml}}return d}const C=h();return l.track("agent-speak",C),J.update(),(w=n.chat)!=null&&w.id&&C.type==="text"&&(n.messages.push({id:Q(),role:"assistant",content:C.input,created_at:new Date(J.get(!0)).toISOString()}),(k=(b=t.callbacks).onNewMessage)==null||k.call(b,[...n.messages],"answer")),n.streamingManager.speak({script:C,metadata:{chat_id:(P=n.chat)==null?void 0:P.id,agent_id:c.id}})}}}function gt(e,t,r){const{getById:a}=pe(t,r||X);return a(e)}f.AgentActivityState=x,f.AgentStatus=oe,f.ChatCreationFailed=F,f.ChatMode=j,f.ChatModeDowngraded=re,f.ChatProgress=K,f.ConnectionState=M,f.ConnectivityState=q,f.DataChannelSignalMap=Z,f.DocumentType=ue,f.KnowledgeType=le,f.PlanGroup=se,f.Providers=me,f.RateState=ce,f.StreamEvents=V,f.StreamType=N,f.StreamingState=y,f.Subject=de,f.UserPlan=ie,f.ValidationError=H,f.VideoType=G,f.VoiceAccess=ge,f.WsError=ae,f.createAgentManager=mt,f.getAgent=gt,f.mapVideoType=fe,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})});
1
+ (function(m,P){typeof exports=="object"&&typeof module<"u"?P(exports):typeof define=="function"&&define.amd?define(["exports"],P):(m=typeof globalThis<"u"?globalThis:m||self,P(m.index={}))})(this,function(m){"use strict";var yt=Object.defineProperty;var pt=(m,P,N)=>P in m?yt(m,P,{enumerable:!0,configurable:!0,writable:!0,value:N}):m[P]=N;var Q=(m,P,N)=>(pt(m,typeof P!="symbol"?P+"":P,N),N);class P extends Error{constructor({kind:r,description:a,error:s}){super(JSON.stringify({kind:r,description:a}));Q(this,"kind");Q(this,"description");Q(this,"error");this.kind=r,this.description=a,this.error=s}}class N extends P{constructor(t,r){super({kind:"ChatCreationFailed",description:`Failed to create ${r?"persistent":""} chat, mode: ${t}`})}}class ae extends P{constructor(t){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${t}`})}}class H extends P{constructor(r,a){super({kind:"ValidationError",description:r});Q(this,"key");this.key=a}}class ie extends P{constructor(t){super({kind:"WSError",description:t})}}var oe=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(oe||{}),se=(e=>(e.TRIAL="deid-trial",e.PRO="deid-pro",e.ENTERPRISE="deid-enterprise",e.LITE="deid-lite",e.ADVANCED="deid-advanced",e.BUILD="deid-api-build",e.LAUNCH="deid-api-launch",e.SCALE="deid-api-scale",e))(se||{}),ce=(e=>(e.Created="created",e.Started="started",e.Done="done",e.Error="error",e.Rejected="rejected",e.Ready="ready",e))(ce||{}),de=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(de||{}),I=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e.DirectPlayback="DirectPlayback",e))(I||{}),x=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(x||{}),le=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(le||{}),ue=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(ue||{}),fe=(e=>(e.Pdf="pdf",e.Text="text",e.Html="html",e.Word="word",e.Json="json",e.Markdown="markdown",e.Csv="csv",e.Excel="excel",e.Powerpoint="powerpoint",e.Archive="archive",e.Image="image",e.Audio="audio",e.Video="video",e))(fe||{}),Z=(e=>(e.Clip="clip",e.Talk="talk",e))(Z||{});const me=e=>{switch(e){case"clip":return"clip";case"talk":return"talk";default:throw new Error(`Unknown video type: ${e}`)}};var C=(e=>(e.Start="START",e.Stop="STOP",e))(C||{}),q=(e=>(e.Strong="STRONG",e.Weak="WEAK",e.Unknown="UNKNOWN",e))(q||{}),V=(e=>(e.Idle="IDLE",e.Talking="TALKING",e))(V||{});const O={"stream/started":"START","stream/done":"STOP"};var X=(e=>(e.ChatAnswer="chat/answer",e.ChatPartial="chat/partial",e.StreamDone="stream/done",e.StreamStarted="stream/started",e.StreamFailed="stream/error",e.StreamReady="stream/ready",e.StreamCreated="stream/created",e.StreamVideoCreated="stream-video/started",e.StreamVideoDone="stream-video/done",e.StreamVideoError="stream-video/error",e.StreamVideoRejected="stream-video/rejected",e))(X||{}),E=(e=>(e.New="new",e.Fail="fail",e.Connected="connected",e.Connecting="connecting",e.Closed="closed",e.Completed="completed",e.Disconnected="disconnected",e))(E||{}),J=(e=>(e.Legacy="legacy",e.Fluent="fluent",e))(J||{}),ge=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(ge||{}),he=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(he||{});const je=45*1e3,Pe="X-Playground-Chat",Y="https://api.d-id.com",be="wss://notifications.d-id.com",$e="79f81a83a67430be2bc0fd61042b8faa",we=e=>new Promise(t=>setTimeout(t,e)),G=()=>Math.random().toString(16).slice(2),Le=e=>[I.TextOnly,I.Playground,I.Maintenance].includes(e);function Ae(e,t){let r;return{promise:new Promise((s,i)=>{r=setTimeout(()=>i(new Error(t)),e)}),clear:()=>clearTimeout(r)}}async function ee(e,t){const r={limit:(t==null?void 0:t.limit)??3,delayMs:(t==null?void 0:t.delayMs)??0,timeout:(t==null?void 0:t.timeout)??3e4,timeoutErrorMessage:(t==null?void 0:t.timeoutErrorMessage)||"Timeout error",shouldRetryFn:(t==null?void 0:t.shouldRetryFn)??(()=>!0),onRetry:(t==null?void 0:t.onRetry)??(()=>{})};let a;for(let s=1;s<=r.limit;s++)try{if(!r.timeout)return await e();const{promise:i,clear:n}=Ae(r.timeout,r.timeoutErrorMessage),o=e().finally(n);return await Promise.race([o,i])}catch(i){if(a=i,!r.shouldRetryFn(i)||s>=r.limit)throw i;await we(r.delayMs),r.onRetry(i)}throw a}function ye(){let e=window.localStorage.getItem("did_external_key_id");return e||(e=Math.random().toString(16).slice(2),window.localStorage.setItem("did_external_key_id",e)),e}let Be=G();function pe(e){if(e.type==="bearer")return`Bearer ${e.token}`;if(e.type==="basic")return`Basic ${btoa(`${e.username}:${e.password}`)}`;if(e.type==="key")return`Client-Key ${e.clientKey}.${ye()}_${Be}`;throw new Error(`Unknown auth type: ${e}`)}const ze=e=>ee(e,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:t=>t.status===429});function te(e,t=Y,r){const a=async(s,i)=>{const{skipErrorHandler:n,...o}=i||{},c=await ze(()=>fetch(t+(s!=null&&s.startsWith("/")?s:`/${s}`),{...o,headers:{...o.headers,Authorization:pe(e),"Content-Type":"application/json"}}));if(!c.ok){let l=await c.text().catch(()=>`Failed to fetch with status ${c.status}`);const f=new Error(l);throw r&&!n&&r(f,{url:s,options:o,headers:c.headers}),f}return c.json()};return{get(s,i){return a(s,{...i,method:"GET"})},post(s,i,n){return a(s,{...n,body:JSON.stringify(i),method:"POST"})},put(s,i,n){return a(s,{...n,body:JSON.stringify(i),method:"PUT"})},delete(s,i,n){return a(s,{...n,body:JSON.stringify(i),method:"DELETE"})},patch(s,i,n){return a(s,{...n,body:JSON.stringify(i),method:"PATCH"})}}}function ve(e,t=Y,r){const a=te(e,`${t}/agents`,r);return{joinChat(s,i,n,o){return console.info("joinChat",{userId:s,externalId:i,chatId:n,options:o}),a.put(`/chats/${n}`,{user_id:s,external_id:i},o)},create(s,i){return a.post("/",s,i)},getAgents(s,i){return a.get(`/${s?`?tag=${s}`:""}`,i).then(n=>n??[])},getById(s,i){return a.get(`/${s}`,i)},delete(s,i){return a.delete(`/${s}`,void 0,i)},update(s,i,n){return a.patch(`/${s}`,i,n)},newChat(s,i,n){return a.post(`/${s}/chat`,i,n)},chat(s,i,n,o){return a.post(`/${s}/chat/${i}`,n,o)},createRating(s,i,n,o){return a.post(`/${s}/chat/${i}/ratings`,n,o)},updateRating(s,i,n,o,c){return a.patch(`/${s}/chat/${i}/ratings/${n}`,o,c)},deleteRating(s,i,n,o){return a.delete(`/${s}/chat/${i}/ratings/${n}`,o)},getSTTToken(s,i){return a.get(`/${s}/stt-token`,i)}}}const Ce=e=>e.type==="clip"&&e.presenter_id.startsWith("v2_")?"clip_v2":e.type;function Fe(e){var s,i,n,o;const t=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",r=()=>{const c=navigator.platform;return c.toLowerCase().includes("win")?"Windows":c.toLowerCase().includes("mac")?"Mac OS X":c.toLowerCase().includes("linux")?"Linux":"Unknown"},a=e.presenter;return{$os:`${r()}`,isMobile:`${t()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:Ce(a),agentVoice:{voiceId:(i=(s=e.presenter)==null?void 0:s.voice)==null?void 0:i.voice_id,provider:(o=(n=e.presenter)==null?void 0:n.voice)==null?void 0:o.type}}}const Ne=e=>e.reduce((t,r)=>t+r,0),Je=e=>Ne(e)/e.length;function Ue(e,t,r){var c,l,f;const{event:a,...s}=e,{template:i}=(t==null?void 0:t.llm)||{},{language:n}=((c=t==null?void 0:t.presenter)==null?void 0:c.voice)||{};return{...s,llm:{...s.llm,template:i},script:{...s.script,provider:{...(l=s==null?void 0:s.script)==null?void 0:l.provider,language:n}},stitch:(t==null?void 0:t.presenter.type)==="talk"?(f=t==null?void 0:t.presenter)==null?void 0:f.stitch:void 0,...r}}let ne={};const We="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function Ke(e){var i,n,o,c,l,f;const t=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk",r=e.agent.presenter,a=(i=e.agent.llm)==null?void 0:i.prompt_customization,s={token:e.token||"testKey",distinct_id:e.distinctId||ye(),agentId:e.agent.id,agentType:Ce(r),owner_id:e.agent.owner_id??"",promptVersion:(n=e.agent.llm)==null?void 0:n.prompt_version,behavior:{role:a==null?void 0:a.role,personality:a==null?void 0:a.personality,instructions:(o=e.agent.llm)==null?void 0:o.instructions},temperature:(c=e.agent.llm)==null?void 0:c.temperature,knowledgeSource:a==null?void 0:a.knowledge_source,starterQuestionsCount:(f=(l=e.agent.knowledge)==null?void 0:l.starter_message)==null?void 0:f.length,topicsToAvoid:a==null?void 0:a.topics_to_avoid,maxResponseLength:a==null?void 0:a.max_response_length};return{...s,additionalProperties:{},isEnabled:e.isEnabled??!0,getRandom:()=>Math.random().toString(16).slice(2),enrich(g){const R={};if(g&&typeof g!="object")throw new Error("properties must be a flat json object");for(let p in g)(typeof g[p]=="string"||typeof g[p]=="number")&&(R[p]=g[p]);this.additionalProperties={...this.additionalProperties,...R}},async track(g,R){if(!this.isEnabled)return Promise.resolve();const{audioPath:p,...y}=R||{},S={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:g,properties:{...this.additionalProperties,...y,...s,source:t,time:Date.now(),$insert_id:this.getRandom(),origin:window.location.href,"Screen Height":window.screen.height||window.innerWidth,"Screen Width":window.screen.width||window.innerHeight,"User Agent":navigator.userAgent}}])})};try{return await fetch(We,S).then(B=>B.json())}catch(B){return console.error(B)}},linkTrack(g,R,p,y){ne[g]||(ne[g]={events:{},resolvedDependencies:[]}),y.includes(p)||y.push(p);const S=ne[g];if(S.events[p]={props:R},S.resolvedDependencies.push(p),y.every(M=>S.resolvedDependencies.includes(M))){const M=y.reduce(($,d)=>S.events[d]?{...$,...S.events[d].props}:$,{});this.track(g,M),S.resolvedDependencies=S.resolvedDependencies.filter($=>!y.includes($)),y.forEach($=>{delete S.events[$]})}}}}function He(){let e=0;return{reset:()=>e=0,update:()=>e=Date.now(),get:(t=!1)=>t?Date.now()-e:e}}const U=He();function ke(e){return e===I.Playground?{headers:{[Pe]:"true"}}:{}}async function De(e,t,r,a,s=!1,i){try{return!i&&a!==I.DirectPlayback&&(i=await t.newChat(e.id,{persist:s},ke(a)),r.track("agent-chat",{event:"created",chat_id:i.id,agent_id:e.id,mode:a})),{chat:i,chatMode:(i==null?void 0:i.chat_mode)??a}}catch(n){try{const o=JSON.parse(n.message);if((o==null?void 0:o.kind)==="InsufficientCreditsError")throw new Error("InsufficientCreditsError")}catch(o){console.error("Error parsing the error message:",o)}throw new Error("Cannot create new chat")}}function xe(e){return e&&e.length>0?e:[]}function qe(e){return new Promise((t,r)=>{const{callbacks:a,host:s,auth:i}=e,{onMessage:n=null,onOpen:o=null,onClose:c=null,onError:l=null}=a||{},f=new WebSocket(`${s}?authorization=${pe(i)}`);f.onmessage=n,f.onclose=c,f.onerror=g=>{console.error(g),l==null||l("Websocket failed to connect",g),r(g)},f.onopen=g=>{o==null||o(g),t(f)}})}async function Ve(e){const{retries:t=1}=e;let r=null;for(let a=0;(r==null?void 0:r.readyState)!==WebSocket.OPEN;a++)try{r=await qe(e)}catch(s){if(a===t)throw s;await we(a*500)}return r}async function Xe(e,t,r){const a=r!=null&&r.onMessage?[r.onMessage]:[],s=await Ve({auth:e,host:t,callbacks:{onError:i=>{var n;return(n=r.onError)==null?void 0:n.call(r,new ie(i))},onMessage(i){console.log("onMessage",i);const n=JSON.parse(i.data);a.forEach(o=>o(n.event,n))}}});return{socket:s,disconnect:()=>s.close(),subscribeToEvents:i=>a.push(i)}}function Ye(e){if(e.answer!==void 0)return e.answer;let t=0,r="";for(;t in e;)r+=e[t++];return r}function Qe(e,t,r,a,s){const i=a.messages[a.messages.length-1];if(!(e===x.Partial||e===x.Answer)||(i==null?void 0:i.role)!=="assistant")return;const{content:n,sequence:o}=t;e===x.Partial?r[o]=n:r.answer=n;const c=Ye(r);(i.content!==c||e===x.Answer)&&(i.content=c,s==null||s([...a.messages],e))}function Ge(e,t,r,a,s){let i={};return{clearQueue:()=>i={},onMessage:(n,o)=>{var c,l;if("content"in o)Qe(n,o,i,t,r.callbacks.onNewMessage),n===x.Answer&&e.track("agent-message-received",{messages:t.messages.length,mode:t.chatMode});else{const f=X,g=[f.StreamVideoDone,f.StreamVideoError,f.StreamVideoRejected],R=[f.StreamFailed,f.StreamVideoError,f.StreamVideoRejected],p=Ue(o,a,{mode:t.chatMode});if(n=n,n===f.StreamVideoCreated)e.linkTrack("agent-video",p,f.StreamVideoCreated,["start"]);else if(g.includes(n)){const y=n.split("/")[1];R.includes(n)?e.track("agent-video",{...p,event:y}):e.linkTrack("agent-video",{...p,event:y},n,["done"])}R.includes(n)&&((l=(c=r.callbacks).onError)==null||l.call(c,new Error(`Stream failed with event ${n}`),{data:o})),o.event===f.StreamDone&&s()}}}}function Ze(e,t,r,a){const s=te(e,`${t}/agents/${r}`,a);return{createStream(i){return console.log("createClipApi",{options:i}),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,conn_id:i.conn_id})},startConnection(i,n,o){return s.post(`/streams/${i}/sdp`,{session_id:o,answer:n})},addIceCandidate(i,n,o){return s.post(`/streams/${i}/ice`,{session_id:o,...n})},sendStreamRequest(i,n,o){return s.post(`/streams/${i}`,{session_id:n,...o})},close(i,n){return s.delete(`/streams/${i}`,{session_id:n})}}}function Oe(e,t,r,a){const s=te(e,`${t}/agents/${r}`,a);return{createStream(i,n){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,conn_id:i.conn_id},n)},startConnection(i,n,o,c){return s.post(`/streams/${i}/sdp`,{session_id:o,answer:n},c)},addIceCandidate(i,n,o,c){return s.post(`/streams/${i}/ice`,{session_id:o,...n},c)},sendStreamRequest(i,n,o,c){return s.post(`/streams/${i}`,{session_id:n,...o},c)},close(i,n,o){return s.delete(`/streams/${i}`,{session_id:n},o)}}}function et(e,t,r){const a=(t.timestamp-e.timestamp)/1e3;return{duration:a,bytesReceived:t.bytesReceived-e.bytesReceived,bitrate:Math.round((t.bytesReceived-e.bytesReceived)*8/a),packetsReceived:t.packetsReceived-e.packetsReceived,packetsLost:t.packetsLost-e.packetsLost,framesDropped:t.framesDropped-e.framesDropped,framesDecoded:t.framesDecoded-e.framesDecoded,jitter:t.jitter,avgJitterDelayInInterval:(t.jitterBufferDelay-e.jitterBufferDelay)/(t.jitterBufferEmittedCount-e.jitterBufferEmittedCount),jitterBufferEmittedCount:t.jitterBufferEmittedCount-e.jitterBufferEmittedCount,jitterBufferDelay:(t.jitterBufferDelay-e.jitterBufferDelay)/a,framesPerSecond:t.framesPerSecond,freezeCount:t.freezeCount-e.freezeCount,freezeDuration:t.freezeDuration-e.freezeDuration,lowFpsCount:r}}function tt(e){return e.filter(t=>t.freezeCount>0||t.framesPerSecond<21||t.framesDropped>0||t.packetsLost>0).map(t=>{const{timestamp:r,...a}=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"),{...a,causes:s}})}function nt(e){let t="";for(const r of e.values())if(r&&r.type==="codec"&&r.mimeType.startsWith("video")&&(t=r.mimeType.split("/")[1]),r&&r.type==="inbound-rtp"&&r.kind==="video")return{codec:t,timestamp:r.timestamp,bytesReceived:r.bytesReceived,packetsReceived:r.packetsReceived,packetsLost:r.packetsLost,framesDropped:r.framesDropped,framesDecoded:r.framesDecoded,jitter:r.jitter,jitterBufferDelay:r.jitterBufferDelay,jitterBufferEmittedCount:r.jitterBufferEmittedCount,avgJitterDelayInInterval:r.jitterBufferDelay/r.jitterBufferEmittedCount,frameWidth:r.frameWidth,frameHeight:r.frameHeight,framesPerSecond:r.framesPerSecond,freezeCount:r.freezeCount,freezeDuration:r.totalFreezesDuration};return{}}function rt(e,t,r){const a=e.map((o,c)=>c===0?r?{timestamp:o.timestamp,duration:0,bytesReceived:o.bytesReceived-r.bytesReceived,bitrate:(o.bytesReceived-r.bytesReceived)*8/(t/1e3),packetsReceived:o.packetsReceived-r.packetsReceived,packetsLost:o.packetsLost-r.packetsLost,framesDropped:o.framesDropped-r.framesDropped,framesDecoded:o.framesDecoded-r.framesDecoded,jitter:o.jitter,jitterBufferDelay:o.jitterBufferDelay-r.jitterBufferDelay,jitterBufferEmittedCount:o.jitterBufferEmittedCount-r.jitterBufferEmittedCount,avgJitterDelayInInterval:(o.jitterBufferDelay-r.jitterBufferDelay)/(o.jitterBufferEmittedCount-r.jitterBufferEmittedCount),framesPerSecond:o.framesPerSecond,freezeCount:o.freezeCount-r.freezeCount,freezeDuration:o.freezeDuration-r.freezeDuration}:{timestamp:o.timestamp,duration:0,bytesReceived:o.bytesReceived,bitrate:o.bytesReceived*8/(t/1e3),packetsReceived:o.packetsReceived,packetsLost:o.packetsLost,framesDropped:o.framesDropped,framesDecoded:o.framesDecoded,jitter:o.jitter,jitterBufferDelay:o.jitterBufferDelay,jitterBufferEmittedCount:o.jitterBufferEmittedCount,avgJitterDelayInInterval:o.jitterBufferDelay/o.jitterBufferEmittedCount,framesPerSecond:o.framesPerSecond,freezeCount:o.freezeCount,freezeDuration:o.freezeDuration}:{timestamp:o.timestamp,duration:t*c/1e3,bytesReceived:o.bytesReceived-e[c-1].bytesReceived,bitrate:(o.bytesReceived-e[c-1].bytesReceived)*8/(t/1e3),packetsReceived:o.packetsReceived-e[c-1].packetsReceived,packetsLost:o.packetsLost-e[c-1].packetsLost,framesDropped:o.framesDropped-e[c-1].framesDropped,framesDecoded:o.framesDecoded-e[c-1].framesDecoded,jitter:o.jitter,jitterBufferDelay:o.jitterBufferDelay-e[c-1].jitterBufferDelay,jitterBufferEmittedCount:o.jitterBufferEmittedCount-e[c-1].jitterBufferEmittedCount,avgJitterDelayInInterval:(o.jitterBufferDelay-e[c-1].jitterBufferDelay)/(o.jitterBufferEmittedCount-e[c-1].jitterBufferEmittedCount),framesPerSecond:o.framesPerSecond,freezeCount:o.freezeCount-e[c-1].freezeCount,freezeDuration:o.freezeDuration-e[c-1].freezeDuration}),s=tt(a),i=s.reduce((o,c)=>o+(c.causes.includes("low fps")?1:0),0),n=a.map(o=>o.avgJitterDelayInInterval);return{webRTCStats:{anomalies:s,aggregateReport:et(e[0],e[e.length-1],i),minJitterDelayInInterval:Math.min(...n),maxJitterDelayInInterval:Math.max(...n),avgJitterDelayInInterval:Je(n)},codec:e[0].codec,resolution:`${e[0].frameWidth}x${e[0].frameHeight}`}}const re=100,at=Math.max(Math.ceil(400/re),1),it=.25,ot=.28;function st(){let e=0,t,r,a=0;return s=>{for(const i of s.values())if(i&&i.type==="inbound-rtp"&&i.kind==="video"){const n=i.jitterBufferDelay,o=i.jitterBufferEmittedCount;if(r&&o>r){const f=n-t,g=o-r;a=f/g}t=n,r=o;const c=i.framesDecoded,l=c-e>0;return e=c,{isReceiving:l,avgJitterDelayInInterval:a,freezeCount:i.freezeCount}}return{isReceiving:!1,avgJitterDelayInInterval:a}}}function ct(e,t,r,a,s,i=!1){let n=[],o,c=0,l=!1,f=q.Unknown,g=q.Unknown,R=0,p=0;const y=st();return setInterval(async()=>{const S=await e.getStats(),{isReceiving:B,avgJitterDelayInInterval:M,freezeCount:$}=y(S),d=nt(S);if(B)c=0,R=$-p,g=M<it?q.Strong:M>ot&&R>1?q.Weak:f,g!==f&&(s==null||s(g),f=g,p+=R,R=0),l||(a==null||a(C.Start),o=n[n.length-1],n=[],l=!0),n.push(d);else if(l&&(c++,c>=at)){const w=rt(n,re,o);a==null||a(C.Stop,w),t()||r(),l=!1}},re)}let Re=!1;const W=(e,t)=>Re&&console.log(e,t),dt=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function Se(e){switch(e){case"connected":return E.Connected;case"checking":return E.Connecting;case"failed":return E.Fail;case"new":return E.New;case"closed":return E.Closed;case"disconnected":return E.Disconnected;case"completed":return E.Completed;default:return E.New}}function lt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,report:a}){e===C.Start&&t===C.Start?r==null||r(C.Start):e===C.Stop&&t===C.Stop&&(r==null||r(C.Stop,a))}function ut({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,onAgentActivityStateChange:a,report:s}){e===C.Start?r==null||r(C.Start):e===C.Stop&&(r==null||r(C.Stop,s)),t===C.Start?a==null||a(V.Talking):t===C.Stop&&(a==null||a(V.Idle))}function _e({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,onAgentActivityStateChange:a,streamType:s,report:i}){s===J.Legacy?lt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,report:i}):s===J.Fluent&&ut({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,onAgentActivityStateChange:a,report:i})}async function ft(e,t,{debug:r=!1,callbacks:a,auth:s,baseURL:i=Y,analytics:n}){Re=r;let o=!1,c=!1,l=C.Stop,f=C.Stop,g=q.Unknown;console.log("OFEK TEST");const{startConnection:R,sendStreamRequest:p,close:y,createStream:S,addIceCandidate:B}=t.videoType===Z.Clip?Ze(s,i,e,a.onError):Oe(s,i,e,a.onError),{id:M,offer:$,ice_servers:d,session_id:w,fluent:D}=await S(t),h=new dt({iceServers:d}),T=h.createDataChannel("JanusDataChannel");if(!w)throw new Error("Could not create session_id");const v=D?J.Fluent:J.Legacy;n.enrich({"stream-type":v});const j=t.stream_warmup&&!D,L=()=>o,z=()=>{var u;o=!0,c&&((u=a.onConnectionStateChange)==null||u.call(a,E.Connected))},_=ct(h,L,z,(u,k)=>_e({statsSignal:f=u,dataChannelSignal:v===J.Legacy?l:void 0,onVideoStateChange:a.onVideoStateChange,onAgentActivityStateChange:a.onAgentActivityStateChange,report:k,streamType:v}),u=>{var k;return(k=a.onConnectivityStateChange)==null?void 0:k.call(a,g)},j);h.onicecandidate=u=>{var k;W("peerConnection.onicecandidate",u);try{u.candidate&&u.candidate.sdpMid&&u.candidate.sdpMLineIndex!==null?B(M,{candidate:u.candidate.candidate,sdpMid:u.candidate.sdpMid,sdpMLineIndex:u.candidate.sdpMLineIndex},w):B(M,{candidate:null},w)}catch(A){(k=a.onError)==null||k.call(a,A,{streamId:M})}},T.onopen=()=>{c=!0,(!j||o)&&z()},T.onmessage=u=>{u.data in O&&(l=O[u.data],_e({statsSignal:v===J.Legacy?f:void 0,dataChannelSignal:l,onVideoStateChange:a.onVideoStateChange,onAgentActivityStateChange:a.onAgentActivityStateChange,streamType:v}))},h.oniceconnectionstatechange=()=>{var k;W("peerConnection.oniceconnectionstatechange => "+h.iceConnectionState);const u=Se(h.iceConnectionState);u!==E.Connected&&((k=a.onConnectionStateChange)==null||k.call(a,u))},h.ontrack=u=>{var k;W("peerConnection.ontrack",u),(k=a.onSrcObjectReady)==null||k.call(a,u.streams[0])},await h.setRemoteDescription($),W("set remote description OK");const b=await h.createAnswer();return W("create answer OK"),await h.setLocalDescription(b),W("set local description OK"),await R(M,b,w),W("start connection OK"),{speak(u){return p(M,w,u)},async disconnect(){var u,k,A;if(M){const F=Se(h.iceConnectionState);if(h){if(F===E.New){(u=a.onVideoStateChange)==null||u.call(a,C.Stop),clearInterval(_);return}h.close(),h.oniceconnectionstatechange=null,h.onnegotiationneeded=null,h.onicecandidate=null,h.ontrack=null}try{F===E.Connected&&await y(M,w).catch(K=>{})}catch(K){W("Error on close stream connection",K)}(k=a.onVideoStateChange)==null||k.call(a,C.Stop),(A=a.onAgentActivityStateChange)==null||A.call(a,V.Idle),clearInterval(_)}},sessionId:w,streamId:M,streamType:v}}function mt(e,t){const{streamOptions:r}=t??{},s=new URLSearchParams(window.location.search).get("conn_id")||void 0;return{videoType:me(e.presenter.type),output_resolution:r==null?void 0:r.outputResolution,session_timeout:r==null?void 0:r.sessionTimeout,stream_warmup:r==null?void 0:r.streamWarmup,compatibility_mode:r==null?void 0:r.compatibilityMode,fluent:r==null?void 0:r.fluent,conn_id:s}}function Ee(e,t,r,a,s){U.get()>0&&(e===C.Start?a.linkTrack("agent-video",{event:"start",latency:U.get(!0),"stream-type":s},"start",[X.StreamVideoCreated]):e===C.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":s,...r},"done",[X.StreamVideoDone]))}function Me(e,t,r){return U.reset(),new Promise(async(a,s)=>{try{const i=await ft(e.id,mt(e,t),{...t,analytics:r,callbacks:{...t.callbacks,onConnectionStateChange:n=>{var o,c;(c=(o=t.callbacks).onConnectionStateChange)==null||c.call(o,n),n===E.Connected&&a(i)},onVideoStateChange:(n,o)=>{var c,l;(l=(c=t.callbacks).onVideoStateChange)==null||l.call(c,n),Ee(n,e,o,r,i.streamType)},onAgentActivityStateChange:n=>{var o,c;(c=(o=t.callbacks).onAgentActivityStateChange)==null||c.call(o,n),Ee(n===V.Talking?C.Start:C.Stop,e,void 0,r,i.streamType)}}})}catch(i){s(i)}})}async function gt(e,t,r,a,s){var l,f,g,R;const i=new URLSearchParams(window.location.search),n=i.get("conn_id")||void 0,o=i.get("external_chat_id")||void 0,c=i.get("external_owner_id")||void 0;if(o&&c&&n){console.log("join chat",{connId:n,externalChatId:o,userId:c});const p=await r.joinChat(c,n,o),y=await Me(e,t,a);return{chat:p,streamingManager:y}}else{const{chat:p,chatMode:y}=await De(e,r,a,t.mode,t.persistentChat,s);if(y&&y!==t.mode&&(t.mode=y,(f=(l=t.callbacks).onModeChange)==null||f.call(l,y),y===I.TextOnly))return(R=(g=t.callbacks).onError)==null||R.call(g,new ae(y)),{chat:p};const S=await Me(e,t,a);return{chat:p,streamingManager:S}}}async function ht(e,t){var B,M,$;let r=!0;const a=t.mixpanelKey||$e,s=t.wsURL||be,i=t.baseURL||Y,n={messages:[],chatMode:t.mode||I.Functional},o=ve(t.auth,i,t.callbacks.onError),c=await o.getById(e),l=Ke({token:a,agent:c,isEnabled:t.enableAnalitics,distinctId:t.distinctId}),{onMessage:f,clearQueue:g}=Ge(l,n,t,c,()=>{var d;return(d=n.socketManager)==null?void 0:d.disconnect()});n.messages=xe(t.initialMessages),(M=(B=t.callbacks).onNewMessage)==null||M.call(B,[...n.messages],"answer");function R(){var T,v,j;const d=(T=n.streamingManager)==null?void 0:T.streamId,w=(v=n.chat)==null?void 0:v.owner_id,D=(j=n.chat)==null?void 0:j.id,h=window.location+`?conn_id=${d}&external_chat_id=${D}&external_owner_id=${w}`;return console.info(h),h}l.track("agent-sdk",{event:"loaded",...Fe(c)});async function p(d){var j,L,z,_,b,u,k;(L=(j=t.callbacks).onConnectionStateChange)==null||L.call(j,E.Connecting),U.reset(),d&&!r&&(delete n.chat,(_=(z=t.callbacks).onNewMessage)==null||_.call(z,[...n.messages],"answer"));const w=t.mode===I.DirectPlayback?Promise.resolve(void 0):Xe(t.auth,s,{onMessage:f,onError:t.callbacks.onError}),D=ee(()=>gt(c,t,o,l,n.chat),{limit:3,timeout:je,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:A=>(A==null?void 0:A.message)!=="Could not connect"&&A.status!==429,delayMs:1e3}).catch(A=>{var F,K;throw S(I.Maintenance),(K=(F=t.callbacks).onConnectionStateChange)==null||K.call(F,E.Fail),A}),[h,{streamingManager:T,chat:v}]=await Promise.all([w,D]);v&&v.id!==((b=n.chat)==null?void 0:b.id)&&((k=(u=t.callbacks).onNewChat)==null||k.call(u,v.id)),n.streamingManager=T,n.socketManager=h,n.chat=v,r=!1,S((v==null?void 0:v.chat_mode)??t.mode??I.Functional)}async function y(){var d,w,D,h;(d=n.socketManager)==null||d.disconnect(),await((w=n.streamingManager)==null?void 0:w.disconnect()),delete n.streamingManager,delete n.socketManager,(h=(D=t.callbacks).onConnectionStateChange)==null||h.call(D,E.Disconnected)}async function S(d){var w,D;d!==n.chatMode&&(l.track("agent-mode-change",{mode:d}),n.chatMode=d,n.chatMode!==I.Functional&&await y(),(D=(w=t.callbacks).onModeChange)==null||D.call(w,d))}return{agent:c,getInviteLink:R,getStreamType:()=>{var d;return(d=n.streamingManager)==null?void 0:d.streamType},starterMessages:(($=c.knowledge)==null?void 0:$.starter_message)||[],getSTTToken:()=>o.getSTTToken(c.id),changeMode:S,enrichAnalytics:l.enrich,async connect(){var d;await p(!0),l.track("agent-chat",{event:"connect",chatId:(d=n.chat)==null?void 0:d.id,agentId:c.id,mode:n.chatMode})},async reconnect(){var d;await y(),await p(!1),l.track("agent-chat",{event:"reconnect",chatId:(d=n.chat)==null?void 0:d.id,agentId:c.id,mode:n.chatMode})},async disconnect(){var d;await y(),l.track("agent-chat",{event:"disconnect",chatId:(d=n.chat)==null?void 0:d.id,agentId:c.id,mode:n.chatMode})},async chat(d){var T,v,j,L,z;const w=()=>{if(t.mode===I.DirectPlayback)throw new H("Direct playback is enabled, chat is disabled");if(d.length>=800)throw new H("Message cannot be more than 800 characters");if(d.length===0)throw new H("Message cannot be empty");if(n.chatMode===I.Maintenance)throw new H("Chat is in maintenance mode");if(![I.TextOnly,I.Playground].includes(n.chatMode)){if(!n.streamingManager)throw new H("Streaming manager is not initialized");if(!n.chat)throw new H("Chat is not initialized")}},D=async()=>{var _,b;if(!n.chat){console.info("create new chat");const u=await De(c,o,l,n.chatMode,t.persistentChat);if(!u.chat)throw new N(n.chatMode,!!t.persistentChat);n.chat=u.chat,(b=(_=t.callbacks).onNewChat)==null||b.call(_,n.chat.id)}return n.chat.id},h=async(_,b)=>ee(()=>{var u,k;return o.chat(c.id,b,{chatMode:n.chatMode,streamId:(u=n.streamingManager)==null?void 0:u.streamId,sessionId:(k=n.streamingManager)==null?void 0:k.sessionId,messages:_.map(({matches:A,...F})=>F)},{...ke(n.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:u=>{var F,K,Ie,Te;const k=(F=u==null?void 0:u.message)==null?void 0:F.includes("missing or invalid session_id");return!((K=u==null?void 0:u.message)==null?void 0:K.includes("Stream Error"))&&!k?((Te=(Ie=t.callbacks).onError)==null||Te.call(Ie,u),!1):!0},onRetry:async()=>{await y(),await p(!1)}});try{g(),w(),n.messages.push({id:G(),role:"user",content:d,created_at:new Date(U.update()).toISOString()}),(v=(T=t.callbacks).onNewMessage)==null||v.call(T,[...n.messages],"user");const _=await D(),b=await h([...n.messages],_);return n.messages.push({id:G(),role:"assistant",content:b.result||"",created_at:new Date().toISOString(),context:b.context,matches:b.matches}),l.track("agent-message-send",{event:"success",mode:n.chatMode,messages:n.messages.length+1}),b.result&&((L=(j=t.callbacks).onNewMessage)==null||L.call(j,[...n.messages],"answer"),l.track("agent-message-received",{latency:U.get(!0),mode:n.chatMode,messages:n.messages.length})),b}catch(_){throw((z=n.messages[n.messages.length-1])==null?void 0:z.role)==="assistant"&&n.messages.pop(),l.track("agent-message-send",{event:"error",mode:n.chatMode,messages:n.messages.length}),_}},rate(d,w,D){var v,j,L,z;const h=n.messages.find(_=>_.id===d);if(n.chat){if(!h)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const T=((v=h.matches)==null?void 0:v.map(_=>[_.document_id,_.id]))??[];return l.track("agent-rate",{event:D?"update":"create",thumb:w===1?"up":"down",knowledge_id:((j=c.knowledge)==null?void 0:j.id)??"",mode:n.chatMode,matches:T,score:w}),D?o.updateRating(c.id,n.chat.id,D,{knowledge_id:((L=c.knowledge)==null?void 0:L.id)??"",message_id:d,matches:T,score:w}):o.createRating(c.id,n.chat.id,{knowledge_id:((z=c.knowledge)==null?void 0:z.id)??"",message_id:d,matches:T,score:w})},deleteRate(d){var w;if(!n.chat)throw new Error("Chat is not initialized");return l.track("agent-rate-delete",{type:"text",chat_id:(w=n.chat)==null?void 0:w.id,id:d,mode:n.chatMode}),o.deleteRating(c.id,n.chat.id,d)},async speak(d){var T,v,j,L;if(!n.streamingManager)throw new Error("Please connect to the agent first");function w(){if(typeof d=="string"){if(!c.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:c.presenter.voice,input:d,ssml:!1}}if(d.type==="text"&&!d.provider){if(!c.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:c.presenter.voice,input:d.input,ssml:d.ssml}}return d}const D=w();l.track("agent-speak",D),U.update(),(T=n.chat)!=null&&T.id&&D.type==="text"&&(n.messages.push({id:G(),role:"assistant",content:D.input,created_at:new Date(U.get(!0)).toISOString()}),(j=(v=t.callbacks).onNewMessage)==null||j.call(v,[...n.messages],"answer"));const h=Le(n.chatMode);return n.chat&&h?{duration:0,status:"success"}:n.streamingManager.speak({script:D,metadata:{chat_id:(L=n.chat)==null?void 0:L.id,agent_id:c.id}})}}}function wt(e,t,r){const{getById:a}=ve(t,r||Y);return a(e)}m.AgentActivityState=V,m.AgentStatus=ce,m.ChatCreationFailed=N,m.ChatMode=I,m.ChatModeDowngraded=ae,m.ChatProgress=x,m.ConnectionState=E,m.ConnectivityState=q,m.DataChannelSignalMap=O,m.DocumentType=fe,m.KnowledgeType=ue,m.PlanGroup=se,m.Providers=ge,m.RateState=de,m.StreamEvents=X,m.StreamType=J,m.StreamingState=C,m.Subject=le,m.UserPlan=oe,m.ValidationError=H,m.VideoType=Z,m.VoiceAccess=he,m.WsError=ie,m.createAgentManager=ht,m.getAgent=wt,m.mapVideoType=me,Object.defineProperty(m,Symbol.toStringTag,{value:"Module"})});
@@ -1,6 +1,7 @@
1
1
  import { Agent, AgentPayload, Auth, Chat, ChatPayload, ChatResponse, RatingEntity, RatingPayload, STTTokenResponse } from '../types/index';
2
2
  import { RequestOptions } from './apiClient';
3
3
  export declare function createAgentsApi(auth: Auth, host?: string, onError?: (error: Error, errorData: object) => void): {
4
+ joinChat(userId: string, externalId: string, chatId: string, options?: RequestOptions): Promise<Chat>;
4
5
  create(payload: AgentPayload, options?: RequestOptions): Promise<Agent>;
5
6
  getAgents(tag?: string, options?: RequestOptions): Promise<Agent[]>;
6
7
  getById(id: string, options?: RequestOptions): Promise<Agent>;
@@ -5,6 +5,7 @@ export type RequestOptions = RequestInit & {
5
5
  export declare function createClient(auth: Auth, host?: string, onError?: (error: Error, errorData: object) => void): {
6
6
  get<T = any>(url: string, options?: RequestOptions): Promise<T>;
7
7
  post<T_1 = any>(url: string, body?: any, options?: RequestOptions): Promise<T_1>;
8
- delete<T_2 = any>(url: string, body?: any, options?: RequestOptions): Promise<T_2>;
9
- patch<T_3 = any>(url: string, body?: any, options?: RequestOptions): Promise<T_3>;
8
+ put<T_2 = any>(url: string, body?: any, options?: RequestOptions): Promise<T_2>;
9
+ delete<T_3 = any>(url: string, body?: any, options?: RequestOptions): Promise<T_3>;
10
+ patch<T_4 = any>(url: string, body?: any, options?: RequestOptions): Promise<T_4>;
10
11
  };
@@ -1,5 +1,5 @@
1
1
  import { CreateStreamOptions, PayloadType, StreamType, StreamingManagerOptions } from '../../types/index';
2
- export declare function createStreamingManager<T extends CreateStreamOptions>(agentId: string, agent: T, { debug, callbacks, auth, baseURL }: StreamingManagerOptions): Promise<{
2
+ export declare function createStreamingManager<T extends CreateStreamOptions>(agentId: string, agent: T, { debug, callbacks, auth, baseURL, analytics }: StreamingManagerOptions): Promise<{
3
3
  /**
4
4
  * Method to send request to server to get clip or talk depend on you payload
5
5
  * @param payload
@@ -60,4 +60,5 @@ export interface AgentsAPI {
60
60
  persist: boolean;
61
61
  }, options?: RequestInit): Promise<Chat>;
62
62
  chat(agentId: string, chatId: string, payload: ChatPayload, options?: RequestInit): Promise<ChatResponse>;
63
+ joinChat(userId: string, externalId: string, chatId: string, options?: RequestInit): Promise<Chat>;
63
64
  }
@@ -20,7 +20,7 @@ export interface RatingEntity {
20
20
  export type RatingPayload = Omit<RatingEntity, 'owner_id' | 'id' | 'created_at' | 'modified_at' | 'created_by' | 'external_id' | 'agent_id' | 'chat_id'>;
21
21
  export interface Message {
22
22
  id: string;
23
- role?: 'system' | 'assistant' | 'user' | 'function' | 'tool';
23
+ role?: 'system' | 'assistant' | 'user' | 'function' | 'tool' | 'friend';
24
24
  content: string;
25
25
  created_at?: string;
26
26
  matches?: ChatResponse['matches'];
@@ -111,6 +111,7 @@ interface StreamOptions {
111
111
  * @maximum 1080
112
112
  */
113
113
  outputResolution?: number;
114
+ conn_id?: string;
114
115
  /**
115
116
  * Whether to request fluent stream.
116
117
  * @default false
@@ -133,6 +134,8 @@ export interface AgentManagerOptions {
133
134
  streamOptions?: StreamOptions;
134
135
  initialMessages?: Message[];
135
136
  persistentChat?: boolean;
137
+ chatId?: string;
138
+ conn_id?: string;
136
139
  }
137
140
  export interface AgentManager {
138
141
  /**
@@ -197,5 +200,6 @@ export interface AgentManager {
197
200
  * @param properties flat json object with properties that will be added to analytics events fired from the sdk
198
201
  */
199
202
  enrichAnalytics: (properties: Record<string, any>) => void;
203
+ getInviteLink: () => string;
200
204
  }
201
205
  export {};
@@ -118,5 +118,6 @@ export interface SendClipStreamPayload extends StickyRequest {
118
118
  */
119
119
  raw_result_url?: string;
120
120
  metadata: Record<string, any>;
121
+ conn_id?: string;
121
122
  }
122
123
  export {};
@@ -50,6 +50,7 @@ export interface CreateTalkStreamRequest {
50
50
  * @example 180
51
51
  */
52
52
  session_timeout?: number;
53
+ conn_id?: string;
53
54
  }
54
55
  export interface SendTalkStreamPayload {
55
56
  script: StreamScript;
@@ -62,6 +62,7 @@ export interface TalkStreamOptions extends CreateTalkStreamRequest {
62
62
  export interface ClipStreamOptions extends CreateClipStreamRequest {
63
63
  videoType: VideoType.Clip;
64
64
  fluent?: boolean;
65
+ conn_id?: string;
65
66
  }
66
67
  export type CreateStreamOptions = TalkStreamOptions | ClipStreamOptions;
67
68
  export type PayloadType<T> = T extends TalkStreamOptions ? SendTalkStreamPayload : T extends ClipStreamOptions ? SendClipStreamPayload : never;
@@ -78,6 +79,7 @@ export interface StreamingManagerOptions {
78
79
  debug?: boolean;
79
80
  auth: Auth;
80
81
  analytics: Analytics;
82
+ conn_id?: string;
81
83
  }
82
84
  export interface SlimRTCStatsReport {
83
85
  index: number;
@@ -0,0 +1,2 @@
1
+ import { ChatMode } from '../types';
2
+ export declare const isTextualChat: (chatMode: ChatMode) => boolean;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@d-id/client-sdk",
3
3
  "private": false,
4
- "version": "1.1.0-beta.5",
4
+ "version": "1.1.0-beta.7",
5
5
  "type": "module",
6
6
  "description": "d-id client sdk",
7
7
  "repository": {