@d-id/client-sdk 1.1.0-beta.2 → 1.1.0-beta.20
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 +861 -619
- package/dist/index.umd.cjs +1 -1
- package/dist/src/services/agent-manager/connect-to-manager.d.ts +1 -1
- package/dist/src/services/analytics/timestamp-tracker.d.ts +6 -1
- package/dist/src/services/chat/intial-messages.d.ts +2 -3
- package/dist/src/services/interrupt/index.d.ts +4 -0
- package/dist/src/services/streaming-manager/index.d.ts +8 -2
- package/dist/src/services/streaming-manager/stats/poll.d.ts +2 -2
- package/dist/src/services/streaming-manager/stats/report.d.ts +6 -0
- package/dist/src/types/entities/agents/chat.d.ts +6 -0
- package/dist/src/types/entities/agents/manager.d.ts +30 -7
- package/dist/src/types/index.d.ts +1 -1
- package/dist/src/types/stream/rtc.d.ts +2 -0
- package/dist/src/types/stream/stream.d.ts +28 -3
- package/dist/src/types/stream-script.d.ts +1 -1
- package/dist/src/utils/analytics.d.ts +2 -0
- package/dist/src/utils/chat.d.ts +2 -0
- package/dist/src/utils/index.d.ts +1 -1
- package/package.json +2 -2
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 ot=Object.defineProperty;var ct=(h,_,z)=>_ in h?ot(h,_,{enumerable:!0,configurable:!0,writable:!0,value:z}):h[_]=z;var J=(h,_,z)=>(ct(h,typeof _!="symbol"?_+"":_,z),z);class _ extends Error{constructor({kind:a,description:r,error:s}){super(JSON.stringify({kind:a,description:r}));J(this,"kind");J(this,"description");J(this,"error");this.kind=a,this.description=r,this.error=s}}class z extends _{constructor(t,a){super({kind:"ChatCreationFailed",description:`Failed to create ${a?"persistent":""} chat, mode: ${t}`})}}class te extends _{constructor(t){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${t}`})}}class B extends _{constructor(a,r){super({kind:"ValidationError",description:a});J(this,"key");this.key=r}}class ne extends _{constructor(t){super({kind:"WSError",description:t})}}var re=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(re||{}),ae=(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))(ae||{}),ie=(e=>(e.Created="created",e.Started="started",e.Done="done",e.Error="error",e.Rejected="rejected",e.Ready="ready",e))(ie||{}),se=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(se||{}),P=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e.DirectPlayback="DirectPlayback",e))(P||{}),W=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(W||{}),oe=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(oe||{}),ce=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(ce||{}),de=(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))(de||{}),Y=(e=>(e.Clip="clip",e.Talk="talk",e))(Y||{});const le=e=>{switch(e){case"clip":return"clip";case"talk":return"talk";default:throw new Error(`Unknown video type: ${e}`)}};var R=(e=>(e.Start="START",e.Stop="STOP",e))(R||{}),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||{}),S=(e=>(e.New="new",e.Fail="fail",e.Connected="connected",e.Connecting="connecting",e.Closed="closed",e.Completed="completed",e.Disconnected="disconnected",e))(S||{}),me=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(me||{}),ue=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(ue||{});const Me=45*1e3,_e="X-Playground-Chat",x="https://api.d-id.com",Ee="wss://notifications.d-id.com",be="79f81a83a67430be2bc0fd61042b8faa",fe=e=>new Promise(t=>setTimeout(t,e)),X=()=>Math.random().toString(16).slice(2);function Te(e,t){let a;return{promise:new Promise((s,i)=>{a=setTimeout(()=>i(new Error(t)),e)}),clear:()=>clearTimeout(a)}}async function Q(e,t){const a={limit:(t==null?void 0:t.limit)??3,delayMs:(t==null?void 0:t.delayMs)??0,timeout:(t==null?void 0:t.timeout)??3e4,timeoutErrorMessage:(t==null?void 0:t.timeoutErrorMessage)||"Timeout error",shouldRetryFn:(t==null?void 0:t.shouldRetryFn)??(()=>!0),onRetry:(t==null?void 0:t.onRetry)??(()=>{})};let r;for(let s=1;s<=a.limit;s++)try{if(!a.timeout)return await e();const{promise:i,clear:n}=Te(a.timeout,a.timeoutErrorMessage),o=e().finally(n);return await Promise.race([o,i])}catch(i){if(r=i,!a.shouldRetryFn(i)||s>=a.limit)throw i;await fe(a.delayMs),a.onRetry(i)}throw r}function ge(){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 Pe=X();function he(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}.${ge()}_${Pe}`;throw new Error(`Unknown auth type: ${e}`)}const Ie=e=>Q(e,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:t=>t.status===429});function Z(e,t=x,a){const r=async(s,i)=>{const{skipErrorHandler:n,...o}=i||{},c=await Ie(()=>fetch(t+(s!=null&&s.startsWith("/")?s:`/${s}`),{...o,headers:{...o.headers,Authorization:he(e),"Content-Type":"application/json"}}));if(!c.ok){let u=await c.text().catch(()=>`Failed to fetch with status ${c.status}`);const d=new Error(u);throw a&&!n&&a(d,{url:s,options:o,headers:c.headers}),d}return c.json()};return{get(s,i){return r(s,{...i,method:"GET"})},post(s,i,n){return r(s,{...n,body:JSON.stringify(i),method:"POST"})},delete(s,i,n){return r(s,{...n,body:JSON.stringify(i),method:"DELETE"})},patch(s,i,n){return r(s,{...n,body:JSON.stringify(i),method:"PATCH"})}}}function we(e,t=x,a){const r=Z(e,`${t}/agents`,a);return{create(s,i){return r.post("/",s,i)},getAgents(s,i){return r.get(`/${s?`?tag=${s}`:""}`,i).then(n=>n??[])},getById(s,i){return r.get(`/${s}`,i)},delete(s,i){return r.delete(`/${s}`,void 0,i)},update(s,i,n){return r.patch(`/${s}`,i,n)},newChat(s,i,n){return r.post(`/${s}/chat`,i,n)},chat(s,i,n,o){return r.post(`/${s}/chat/${i}`,n,o)},createRating(s,i,n,o){return r.post(`/${s}/chat/${i}/ratings`,n,o)},updateRating(s,i,n,o,c){return r.patch(`/${s}/chat/${i}/ratings/${n}`,o,c)},deleteRating(s,i,n,o){return r.delete(`/${s}/chat/${i}/ratings/${n}`,o)},getSTTToken(s,i){return r.get(`/${s}/stt-token`,i)}}}const G=e=>e.type==="clip"&&e.presenter_id.startsWith("v2_")?"clip_v2":e.type;function Ae(e){var s,i,n,o;const t=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",a=()=>{const c=navigator.platform;return c.toLowerCase().includes("win")?"Windows":c.toLowerCase().includes("mac")?"Mac OS X":c.toLowerCase().includes("linux")?"Linux":"Unknown"},r=e.presenter;return{$os:`${a()}`,isMobile:`${t()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:G(r),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}}}function $e(e,t,a){var c,u,d;const{event:r,...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:{...(u=s==null?void 0:s.script)==null?void 0:u.provider,language:n}},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 O={};const je="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function ze(e){var i,n,o,c,u,d;const t=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk",a=e.agent.presenter,r=(i=e.agent.llm)==null?void 0:i.prompt_customization,s={token:e.token||"testKey",distinct_id:e.distinctId||ge(),agentId:e.agent.id,agentType:G(a),owner_id:e.agent.owner_id??"",promptVersion:(n=e.agent.llm)==null?void 0:n.prompt_version,behavior:{role:r==null?void 0:r.role,personality:r==null?void 0:r.personality,instructions:(o=e.agent.llm)==null?void 0:o.instructions},temperature:(c=e.agent.llm)==null?void 0:c.temperature,knowledgeSource:r==null?void 0:r.knowledge_source,starterQuestionsCount:(d=(u=e.agent.knowledge)==null?void 0:u.starter_message)==null?void 0:d.length,topicsToAvoid:r==null?void 0:r.topics_to_avoid,maxResponseLength:r==null?void 0:r.max_response_length};return{...s,additionalProperties:{},isEnabled:e.isEnabled??!0,getRandom:()=>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 w in g)(typeof g[w]=="string"||typeof g[w]=="number")&&(D[w]=g[w]);this.additionalProperties={...this.additionalProperties,...D}},async track(g,D){if(!this.isEnabled)return Promise.resolve();const{audioPath:w,...v}=D||{},k={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:g,properties:{...this.additionalProperties,...v,...s,source:t,time:Date.now(),$insert_id:this.getRandom(),origin:window.location.href,"Screen Height":window.screen.height||window.innerWidth,"Screen Width":window.screen.width||window.innerHeight,"User Agent":navigator.userAgent}}])})};try{return await fetch(je,k).then(M=>M.json())}catch(M){return console.error(M)}},linkTrack(g,D,w,v){O[g]||(O[g]={events:{},resolvedDependencies:[]}),v.includes(w)||v.push(w);const k=O[g];if(k.events[w]={props:D},k.resolvedDependencies.push(w),v.every(N=>k.resolvedDependencies.includes(N))){const N=v.reduce((A,l)=>k.events[l]?{...A,...k.events[l].props}:A,{});this.track(g,N),k.resolvedDependencies=k.resolvedDependencies.filter(A=>!v.includes(A)),v.forEach(A=>{delete k.events[A]})}}}}function Le(){let e=0;return{reset:()=>e=0,update:()=>e=Date.now(),get:(t=!1)=>t?Date.now()-e:e}}const H=Le();function pe(e){return e===P.Playground?{headers:{[_e]:"true"}}:{}}async function ye(e,t,a,r,s=!1,i){try{return!i&&r!==P.DirectPlayback&&(i=await t.newChat(e.id,{persist:s},pe(r)),a.track("agent-chat",{event:"created",chat_id:i.id,agent_id:e.id,mode:r})),{chat:i,chatMode:(i==null?void 0:i.chat_mode)??r}}catch(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 Ne(e){var a;const t=((a=e.greetings)==null?void 0:a.filter(r=>r.length>0))??[];return t.length>0?t[Math.floor(Math.random()*t.length)]:`Hi! I'm ${e.preview_name||"My Agent"}. How can I help you?`}function ve(e,t){return t&&t.length>0?t:[{content:e,id:X(),role:"assistant",created_at:new Date().toISOString()}]}function Fe(e){return new Promise((t,a)=>{const{callbacks:r,host:s,auth:i}=e,{onMessage:n=null,onOpen:o=null,onClose:c=null,onError:u=null}=r||{},d=new WebSocket(`${s}?authorization=${he(i)}`);d.onmessage=n,d.onclose=c,d.onerror=g=>{console.error(g),u==null||u("Websocket failed to connect",g),a(g)},d.onopen=g=>{o==null||o(g),t(d)}})}async function Be(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 Fe(e)}catch(s){if(r===t)throw s;await fe(r*500)}return a}async function We(e,t,a){const r=a!=null&&a.onMessage?[a.onMessage]:[],s=await Be({auth:e,host:t,callbacks:{onError:i=>{var n;return(n=a.onError)==null?void 0:n.call(a,new ne(i))},onMessage(i){const n=JSON.parse(i.data);r.forEach(o=>o(n.event,n))}}});return{socket:s,disconnect:()=>s.close(),subscribeToEvents:i=>r.push(i)}}function He(e){if(e.answer!==void 0)return e.answer;let t=0,a="";for(;t in e;)a+=e[t++];return a}function Ke(e,t,a,r,s){const i=r.messages[r.messages.length-1];if(!(e===W.Partial||e===W.Answer)||(i==null?void 0:i.role)!=="assistant")return;const{content:n,sequence:o}=t;e===W.Partial?a[o]=n:a.answer=n;const c=He(a);(i.content!==c||e===W.Answer)&&(i.content=c,s==null||s([...r.messages],e))}function Ue(e,t,a,r,s){let i={};return{clearQueue:()=>i={},onMessage:(n,o)=>{var c,u;if("content"in o)Ke(n,o,i,t,a.callbacks.onNewMessage),n===W.Answer&&e.track("agent-message-received",{messages:t.messages.length,mode:t.chatMode});else{const d=V,g=[d.StreamVideoDone,d.StreamVideoError,d.StreamVideoRejected],D=[d.StreamFailed,d.StreamVideoError,d.StreamVideoRejected],w=$e(o,r,{mode:t.chatMode});if(n=n,n===d.StreamVideoCreated)e.linkTrack("agent-video",w,d.StreamVideoCreated,["start"]);else if(g.includes(n)){const v=n.split("/")[1];D.includes(n)?e.track("agent-video",{...w,event:v}):e.linkTrack("agent-video",{...w,event:v},n,["done"])}D.includes(n)&&((u=(c=a.callbacks).onError)==null||u.call(c,new Error(`Stream failed with event ${n}`),{data:o})),o.event===d.StreamDone&&s()}}}}function Ve(e,t,a,r){const s=Z(e,`${t}/agents/${a}`,r);return{createStream(i){return s.post("/streams",{output_resolution:i.output_resolution,compatibility_mode:i.compatibility_mode,stream_warmup:i.stream_warmup,session_timeout:i.session_timeout,stream_greeting:i.stream_greeting})},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 xe(e,t,a,r){const s=Z(e,`${t}/agents/${a}`,r);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,stream_greeting:i.stream_greeting},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 qe(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,jitterBufferDelay:(t.jitterBufferDelay-e.jitterBufferDelay)/r,framesPerSecond:t.framesPerSecond,freezeCount:t.freezeCount-e.freezeCount,freezeDuration:t.freezeDuration-e.freezeDuration,lowFpsCount:a}}function Je(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 Xe(e){let t="";for(const a of e.values())if(a&&a.type==="codec"&&a.mimeType.startsWith("video")&&(t=a.mimeType.split("/")[1]),a&&a.type==="inbound-rtp"&&a.kind==="video")return{codec:t,timestamp:a.timestamp,bytesReceived:a.bytesReceived,packetsReceived:a.packetsReceived,packetsLost:a.packetsLost,framesDropped:a.framesDropped,framesDecoded:a.framesDecoded,jitter:a.jitter,jitterBufferDelay:a.jitterBufferDelay,frameWidth:a.frameWidth,frameHeight:a.frameHeight,framesPerSecond:a.framesPerSecond,freezeCount:a.freezeCount,freezeDuration:a.totalFreezesDuration};return{}}function Ye(e,t,a){const r=e.map((n,o)=>o===0?a?{timestamp:n.timestamp,duration:0,bytesReceived:n.bytesReceived-a.bytesReceived,bitrate:(n.bytesReceived-a.bytesReceived)*8/(t/1e3),packetsReceived:n.packetsReceived-a.packetsReceived,packetsLost:n.packetsLost-a.packetsLost,framesDropped:n.framesDropped-a.framesDropped,framesDecoded:n.framesDecoded-a.framesDecoded,jitter:n.jitter,jitterBufferDelay:n.jitterBufferDelay-a.jitterBufferDelay,framesPerSecond:n.framesPerSecond,freezeCount:n.freezeCount-a.freezeCount,freezeDuration:n.freezeDuration-a.freezeDuration}:{timestamp:n.timestamp,duration:0,bytesReceived:n.bytesReceived,bitrate:n.bytesReceived*8/(t/1e3),packetsReceived:n.packetsReceived,packetsLost:n.packetsLost,framesDropped:n.framesDropped,framesDecoded:n.framesDecoded,jitter:n.jitter,jitterBufferDelay:n.jitterBufferDelay,framesPerSecond:n.framesPerSecond,freezeCount:n.freezeCount,freezeDuration:n.freezeDuration}:{timestamp:n.timestamp,duration:t*o/1e3,bytesReceived:n.bytesReceived-e[o-1].bytesReceived,bitrate:(n.bytesReceived-e[o-1].bytesReceived)*8/(t/1e3),packetsReceived:n.packetsReceived-e[o-1].packetsReceived,packetsLost:n.packetsLost-e[o-1].packetsLost,framesDropped:n.framesDropped-e[o-1].framesDropped,framesDecoded:n.framesDecoded-e[o-1].framesDecoded,jitter:n.jitter,jitterBufferDelay:n.jitterBufferDelay-e[o-1].jitterBufferDelay,framesPerSecond:n.framesPerSecond,freezeCount:n.freezeCount-e[o-1].freezeCount,freezeDuration:n.freezeDuration-e[o-1].freezeDuration}),s=Je(r),i=s.reduce((n,o)=>n+(o.causes.includes("low fps")?1:0),0);return{webRTCStats:{anomalies:s,aggregateReport:qe(e[0],e[e.length-1],i)},codec:e[0].codec,resolution:`${e[0].frameWidth}x${e[0].frameHeight}`}}const ee=100,Qe=Math.max(Math.ceil(400/ee),1);function Ze(){let e=0;return t=>{for(const a of t.values())if(a&&a.type==="inbound-rtp"&&a.kind==="video"){const r=a.framesDecoded,s=r-e>0;return e=r,s}return!1}}function Ge(e,t,a,r,s=!1,i=!1){const n=s?1:0;let o=[],c,u=0,d=!1,g=0;const D=Ze();return setInterval(async()=>{const w=await e.getStats(),v=D(w),k=Xe(w);if(v)u=0,d||(r==null||r(R.Start),i&&g>=n&&!t()&&a(),c=o[o.length-1],o=[],g++,d=!0),o.push(k);else if(d&&(u++,u>=Qe)){const M=Ye(o,ee,c);r==null||r(R.Stop,M),!i&&!t()&&a(),d=!1}},ee)}let ke=!1;const L=(e,t)=>ke&&console.log(e,t),Oe=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function Ce(e){switch(e){case"connected":return S.Connected;case"checking":return S.Connecting;case"failed":return S.Fail;case"new":return S.New;case"closed":return S.Closed;case"disconnected":return S.Disconnected;case"completed":return S.Completed;default:return S.New}}function Re(e,t,a,r){e===R.Start&&t===R.Start?a==null||a(R.Start):e===R.Stop&&t===R.Stop&&(a==null||a(R.Stop,r))}async function et(e,t,{debug:a=!1,callbacks:r,auth:s,baseURL:i=x,warmup:n}){ke=a;let o=!1,c=!1,u=R.Stop,d=R.Stop;const{startConnection:g,sendStreamRequest:D,close:w,createStream:v,addIceCandidate:k}=t.videoType===Y.Clip?Ve(s,i,e,r.onError):xe(s,i,e,r.onError),{id:M,offer:N,ice_servers:A,session_id:l}=await v(t),m=new Oe({iceServers:A}),C=m.createDataChannel("JanusDataChannel");if(!l)throw new Error("Could not create session_id");const I=()=>o,$=()=>{var f;o=!0,c&&((f=r.onConnectionStateChange)==null||f.call(r,S.Connected))},E=Ge(m,I,$,(f,p)=>Re(d=f,u,r.onVideoStateChange,p),n,!!t.stream_greeting);m.onicecandidate=f=>{var p;L("peerConnection.onicecandidate",f);try{f.candidate&&f.candidate.sdpMid&&f.candidate.sdpMLineIndex!==null?k(M,{candidate:f.candidate.candidate,sdpMid:f.candidate.sdpMid,sdpMLineIndex:f.candidate.sdpMLineIndex},l):k(M,{candidate:null},l)}catch(y){(p=r.onError)==null||p.call(r,y,{streamId:M})}},C.onopen=()=>{c=!0,(!t.stream_warmup&&!t.stream_greeting||o)&&$()},C.onmessage=f=>{f.data==="stream/started"?u=R.Start:f.data==="stream/done"&&(u=R.Stop),Re(d,u,r.onVideoStateChange)},m.oniceconnectionstatechange=()=>{var p;L("peerConnection.oniceconnectionstatechange => "+m.iceConnectionState);const f=Ce(m.iceConnectionState);f!==S.Connected&&((p=r.onConnectionStateChange)==null||p.call(r,f))},m.ontrack=f=>{var p;L("peerConnection.ontrack",f),(p=r.onSrcObjectReady)==null||p.call(r,f.streams[0])},await m.setRemoteDescription(N),L("set remote description OK");const j=await m.createAnswer();return L("create answer OK"),await m.setLocalDescription(j),L("set local description OK"),await g(M,j,l),L("start connection OK"),{speak(f){return D(M,l,f)},async disconnect(){var f,p;if(M){const y=Ce(m.iceConnectionState);if(m){if(y===S.New){(f=r.onVideoStateChange)==null||f.call(r,R.Stop),clearInterval(E);return}m.close(),m.oniceconnectionstatechange=null,m.onnegotiationneeded=null,m.onicecandidate=null,m.ontrack=null}try{y===S.Connected&&await w(M,l).catch(b=>{})}catch(b){L("Error on close stream connection",b)}(p=r.onVideoStateChange)==null||p.call(r,R.Stop),clearInterval(E)}},sessionId:l,streamId:M}}function tt(e,t,a){var s;const{streamOptions:r}=t??{};return{videoType:le(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,stream_greeting:G(e.presenter)!=="clip"&&((s=t==null?void 0:t.streamOptions)!=null&&s.streamGreeting)?a:void 0}}function nt(e,t,a,r){H.get()>0&&(e===R.Start?r.linkTrack("agent-video",{event:"start",latency:H.get(!0)},"start",[V.StreamVideoCreated]):e===R.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,...a},"done",[V.StreamVideoDone]))}function rt(e,t,a,r){return H.reset(),new Promise(async(s,i)=>{var n;try{const o=await et(e.id,tt(e,t,r),{...t,analytics:a,warmup:(n=t.streamOptions)==null?void 0:n.streamWarmup,callbacks:{...t.callbacks,onConnectionStateChange:c=>{var u,d;(d=(u=t.callbacks).onConnectionStateChange)==null||d.call(u,c),c===S.Connected&&s(o)},onVideoStateChange:(c,u)=>{var d,g;(g=(d=t.callbacks).onVideoStateChange)==null||g.call(d,c),nt(c,e,u,a)}}})}catch(o){i(o)}})}async function at(e,t,a,r,s,i){var u,d,g,D;const{chat:n,chatMode:o}=await ye(e,a,r,t.mode,t.persistentChat,s);if(o&&o!==t.mode&&(t.mode=o,(d=(u=t.callbacks).onModeChange)==null||d.call(u,o),o===P.TextOnly))return(D=(g=t.callbacks).onError)==null||D.call(g,new te(o)),{chat:n};const c=await rt(e,t,r,i);return{chat:n,streamingManager:c}}async function it(e,t){var M,N,A;let a=!0;const r=t.mixpanelKey||be,s=t.wsURL||Ee,i=t.baseURL||x,n={messages:[],chatMode:t.mode||P.Functional},o=we(t.auth,i,t.callbacks.onError),c=await o.getById(e),u=Ne(c),d=ze({token:r,agent:c,isEnabled:t.enableAnalitics,distinctId:t.distinctId}),{onMessage:g,clearQueue:D}=Ue(d,n,t,c,()=>{var l;return(l=n.socketManager)==null?void 0:l.disconnect()});n.messages=ve(u,t.initialMessages),(N=(M=t.callbacks).onNewMessage)==null||N.call(M,[...n.messages],"answer"),d.track("agent-sdk",{event:"loaded",...Ae(c)});async function w(l){var j,f,p,y,b,T,K;(f=(j=t.callbacks).onConnectionStateChange)==null||f.call(j,S.Connecting),H.reset(),l&&!a&&(delete n.chat,n.messages=ve(u),(y=(p=t.callbacks).onNewMessage)==null||y.call(p,[...n.messages],"answer"));const m=t.mode===P.DirectPlayback?Promise.resolve(void 0):We(t.auth,s,{onMessage:g,onError:t.callbacks.onError}),C=Q(()=>at(c,t,o,d,n.chat,l?u:void 0),{limit:3,timeout:Me,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:F=>(F==null?void 0:F.message)!=="Could not connect"&&F.status!==429,delayMs:1e3}).catch(F=>{var U,q;throw k(P.Maintenance),(q=(U=t.callbacks).onConnectionStateChange)==null||q.call(U,S.Fail),F}),[I,{streamingManager:$,chat:E}]=await Promise.all([m,C]);E&&E.id!==((b=n.chat)==null?void 0:b.id)&&((K=(T=t.callbacks).onNewChat)==null||K.call(T,E.id)),n.streamingManager=$,n.socketManager=I,n.chat=E,a=!1,k((E==null?void 0:E.chat_mode)??t.mode??P.Functional)}async function v(){var l,m,C,I;(l=n.socketManager)==null||l.disconnect(),await((m=n.streamingManager)==null?void 0:m.disconnect()),delete n.streamingManager,delete n.socketManager,(I=(C=t.callbacks).onConnectionStateChange)==null||I.call(C,S.Disconnected)}async function k(l){var m,C;l!==n.chatMode&&(d.track("agent-mode-change",{mode:l}),n.chatMode=l,n.chatMode!==P.Functional&&await v(),(C=(m=t.callbacks).onModeChange)==null||C.call(m,l))}return{agent:c,starterMessages:((A=c.knowledge)==null?void 0:A.starter_message)||[],getSTTToken:()=>o.getSTTToken(c.id),changeMode:k,enrichAnalytics:d.enrich,async connect(){var l;await w(!0),d.track("agent-chat",{event:"connect",chatId:(l=n.chat)==null?void 0:l.id,agentId:c.id,mode:n.chatMode})},async reconnect(){var l;await v(),await w(!1),d.track("agent-chat",{event:"reconnect",chatId:(l=n.chat)==null?void 0:l.id,agentId:c.id,mode:n.chatMode})},async disconnect(){var l;await v(),d.track("agent-chat",{event:"disconnect",chatId:(l=n.chat)==null?void 0:l.id,agentId:c.id,mode:n.chatMode})},async chat(l){var $,E,j,f,p;const m=()=>{if(t.mode===P.DirectPlayback)throw new B("Direct playback is enabled, chat is disabled");if(l.length>=800)throw new B("Message cannot be more than 800 characters");if(l.length===0)throw new B("Message cannot be empty");if(n.chatMode===P.Maintenance)throw new B("Chat is in maintenance mode");if(![P.TextOnly,P.Playground].includes(n.chatMode)){if(!n.streamingManager)throw new B("Streaming manager is not initialized");if(!n.chat)throw new B("Chat is not initialized")}},C=async()=>{var y,b;if(!n.chat){const T=await ye(c,o,d,n.chatMode,t.persistentChat);if(!T.chat)throw new z(n.chatMode,!!t.persistentChat);n.chat=T.chat,(b=(y=t.callbacks).onNewChat)==null||b.call(y,n.chat.id)}return n.chat.id},I=async(y,b)=>Q(()=>{var T,K;return o.chat(c.id,b,{chatMode:n.chatMode,streamId:(T=n.streamingManager)==null?void 0:T.streamId,sessionId:(K=n.streamingManager)==null?void 0:K.sessionId,messages:y.map(({matches:F,...U})=>U)},{...pe(n.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:T=>{var U,q,Se,De;const K=(U=T==null?void 0:T.message)==null?void 0:U.includes("missing or invalid session_id");return!((q=T==null?void 0:T.message)==null?void 0:q.includes("Stream Error"))&&!K?((De=(Se=t.callbacks).onError)==null||De.call(Se,T),!1):!0},onRetry:async()=>{await v(),await w(!1)}});try{D(),m(),n.messages.push({id:X(),role:"user",content:l,created_at:new Date(H.update()).toISOString()}),(E=($=t.callbacks).onNewMessage)==null||E.call($,[...n.messages],"user");const y=await C(),b=await I([...n.messages],y);return n.messages.push({id:X(),role:"assistant",content:b.result||"",created_at:new Date().toISOString(),context:b.context,matches:b.matches}),d.track("agent-message-send",{event:"success",mode:n.chatMode,messages:n.messages.length+1}),b.result&&((f=(j=t.callbacks).onNewMessage)==null||f.call(j,[...n.messages],"answer"),d.track("agent-message-received",{latency:H.get(!0),mode:n.chatMode,messages:n.messages.length})),b}catch(y){throw((p=n.messages[n.messages.length-1])==null?void 0:p.role)==="assistant"&&n.messages.pop(),d.track("agent-message-send",{event:"error",mode:n.chatMode,messages:n.messages.length}),y}},rate(l,m,C){var E,j,f,p;const I=n.messages.find(y=>y.id===l);if(n.chat){if(!I)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const $=((E=I.matches)==null?void 0:E.map(y=>[y.document_id,y.id]))??[];return d.track("agent-rate",{event:C?"update":"create",thumb:m===1?"up":"down",knowledge_id:((j=c.knowledge)==null?void 0:j.id)??"",mode:n.chatMode,matches:$,score:m}),C?o.updateRating(c.id,n.chat.id,C,{knowledge_id:((f=c.knowledge)==null?void 0:f.id)??"",message_id:l,matches:$,score:m}):o.createRating(c.id,n.chat.id,{knowledge_id:((p=c.knowledge)==null?void 0:p.id)??"",message_id:l,matches:$,score:m})},deleteRate(l){var m;if(!n.chat)throw new Error("Chat is not initialized");return d.track("agent-rate-delete",{type:"text",chat_id:(m=n.chat)==null?void 0:m.id,id:l,mode:n.chatMode}),o.deleteRating(c.id,n.chat.id,l)},speak(l){var I;if(!n.streamingManager)throw new Error("Please connect to the agent first");function m(){if(typeof l=="string"){if(!c.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:c.presenter.voice,input:l,ssml:!1}}if(l.type==="text"&&!l.provider){if(!c.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:c.presenter.voice,input:l.input,ssml:l.ssml}}return l}const C=m();return d.track("agent-speak",C),H.update(),n.streamingManager.speak({script:C,metadata:{chat_id:(I=n.chat)==null?void 0:I.id,agent_id:c.id}})}}}function st(e,t,a){const{getById:r}=we(t,a||x);return r(e)}h.AgentStatus=ie,h.ChatCreationFailed=z,h.ChatMode=P,h.ChatModeDowngraded=te,h.ChatProgress=W,h.ConnectionState=S,h.DocumentType=de,h.KnowledgeType=ce,h.PlanGroup=ae,h.Providers=me,h.RateState=se,h.StreamEvents=V,h.StreamingState=R,h.Subject=oe,h.UserPlan=re,h.ValidationError=B,h.VideoType=Y,h.VoiceAccess=ue,h.WsError=ne,h.createAgentManager=it,h.getAgent=st,h.mapVideoType=le,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(m,A){typeof exports=="object"&&typeof module<"u"?A(exports):typeof define=="function"&&define.amd?define(["exports"],A):(m=typeof globalThis<"u"?globalThis:m||self,A(m.index={}))})(this,function(m){"use strict";var Rt=Object.defineProperty;var St=(m,A,x)=>A in m?Rt(m,A,{enumerable:!0,configurable:!0,writable:!0,value:x}):m[A]=x;var O=(m,A,x)=>(St(m,typeof A!="symbol"?A+"":A,x),x);class A extends Error{constructor({kind:a,description:r,error:s}){super(JSON.stringify({kind:a,description:r}));O(this,"kind");O(this,"description");O(this,"error");this.kind=a,this.description=r,this.error=s}}class x extends A{constructor(t,a){super({kind:"ChatCreationFailed",description:`Failed to create ${a?"persistent":""} chat, mode: ${t}`})}}class se extends A{constructor(t){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${t}`})}}class V extends A{constructor(a,r){super({kind:"ValidationError",description:a});O(this,"key");this.key=r}}class oe extends A{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||{}),b=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e.DirectPlayback="DirectPlayback",e))(b||{}),X=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(X||{}),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||{}),ee=(e=>(e.Clip="clip",e.Talk="talk",e))(ee||{});const he=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||{}),Y=(e=>(e.Idle="IDLE",e.Talking="TALKING",e))(Y||{}),z=(e=>(e.ChatAnswer="chat/answer",e.ChatPartial="chat/partial",e.StreamDone="stream/done",e.StreamStarted="stream/started",e.StreamFailed="stream/error",e.StreamReady="stream/ready",e.StreamCreated="stream/created",e.StreamInterrupt="stream/interrupt",e.StreamVideoCreated="stream-video/started",e.StreamVideoDone="stream-video/done",e.StreamVideoError="stream-video/error",e.StreamVideoRejected="stream-video/rejected",e))(z||{}),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||{}),H=(e=>(e.Legacy="legacy",e.Fluent="fluent",e))(H||{}),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 je=45*1e3,Ae="X-Playground-Chat",Z="https://api.d-id.com",Pe="wss://notifications.d-id.com",Be="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)},$e=e=>[b.TextOnly,b.Playground,b.Maintenance].includes(e);function Le(e,t){let a;return{promise:new Promise((s,i)=>{a=setTimeout(()=>i(new Error(t)),e)}),clear:()=>clearTimeout(a)}}async function te(e,t){const a={limit:(t==null?void 0:t.limit)??3,delayMs:(t==null?void 0:t.delayMs)??0,timeout:(t==null?void 0:t.timeout)??3e4,timeoutErrorMessage:(t==null?void 0:t.timeoutErrorMessage)||"Timeout error",shouldRetryFn:(t==null?void 0:t.shouldRetryFn)??(()=>!0),onRetry:(t==null?void 0:t.onRetry)??(()=>{})};let r;for(let s=1;s<=a.limit;s++)try{if(!a.timeout)return await e();const{promise:i,clear:c}=Le(a.timeout,a.timeoutErrorMessage),n=e().finally(c);return await Promise.race([n,i])}catch(i){if(r=i,!a.shouldRetryFn(i)||s>=a.limit)throw i;await ye(a.delayMs),a.onRetry(i)}throw r}function ve(){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 ze=G();function ke(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}.${ve()}_${ze}`;throw new Error(`Unknown auth type: ${e}`)}const Fe=e=>te(e,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:t=>t.status===429});function re(e,t=Z,a){const r=async(s,i)=>{const{skipErrorHandler:c,...n}=i||{},o=await Fe(()=>fetch(t+(s!=null&&s.startsWith("/")?s:`/${s}`),{...n,headers:{...n.headers,Authorization:ke(e),"Content-Type":"application/json"}}));if(!o.ok){let d=await o.text().catch(()=>`Failed to fetch with status ${o.status}`);const u=new Error(d);throw a&&!c&&a(u,{url:s,options:n,headers:o.headers}),u}return o.json()};return{get(s,i){return r(s,{...i,method:"GET"})},post(s,i,c){return r(s,{...c,body:JSON.stringify(i),method:"POST"})},delete(s,i,c){return r(s,{...c,body:JSON.stringify(i),method:"DELETE"})},patch(s,i,c){return r(s,{...c,body:JSON.stringify(i),method:"PATCH"})}}}function De(e,t=Z,a){const r=re(e,`${t}/agents`,a);return{create(s,i){return r.post("/",s,i)},getAgents(s,i){return r.get(`/${s?`?tag=${s}`:""}`,i).then(c=>c??[])},getById(s,i){return r.get(`/${s}`,i)},delete(s,i){return r.delete(`/${s}`,void 0,i)},update(s,i,c){return r.patch(`/${s}`,i,c)},newChat(s,i,c){return r.post(`/${s}/chat`,i,c)},chat(s,i,c,n){return r.post(`/${s}/chat/${i}`,c,n)},createRating(s,i,c,n){return r.post(`/${s}/chat/${i}/ratings`,c,n)},updateRating(s,i,c,n,o){return r.patch(`/${s}/chat/${i}/ratings/${c}`,n,o)},deleteRating(s,i,c,n){return r.delete(`/${s}/chat/${i}/ratings/${c}`,n)},getSTTToken(s,i){return r.get(`/${s}/stt-token`,i)}}}const Ce=e=>e.type==="clip"&&e.presenter_id.startsWith("v2_")?"clip_v2":e.type;function Ne(e){var s,i,c,n;const t=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",a=()=>{const o=navigator.platform;return o.toLowerCase().includes("win")?"Windows":o.toLowerCase().includes("mac")?"Mac OS X":o.toLowerCase().includes("linux")?"Linux":"Unknown"},r=e.presenter;return{$os:`${a()}`,isMobile:`${t()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:Ce(r),agentVoice:{voiceId:(i=(s=e.presenter)==null?void 0:s.voice)==null?void 0:i.voice_id,provider:(n=(c=e.presenter)==null?void 0:c.voice)==null?void 0:n.type}}}const Je=e=>e.reduce((t,a)=>t+a,0),Re=e=>Je(e)/e.length;function We(e,t,a){var o,d,u;const{event:r,...s}=e,{template:i}=(t==null?void 0:t.llm)||{},{language:c}=((o=t==null?void 0:t.presenter)==null?void 0:o.voice)||{};return{...s,llm:{...s.llm,template:i},script:{...s.script,provider:{...(d=s==null?void 0:s.script)==null?void 0:d.provider,language:c}},stitch:(t==null?void 0:t.presenter.type)==="talk"?(u=t==null?void 0:t.presenter)==null?void 0:u.stitch:void 0,...a}}let ne={};const Ue="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function Ke(e){var i,c,n,o,d,u;const t=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk",a=e.agent.presenter,r=(i=e.agent.llm)==null?void 0:i.prompt_customization,s={token:e.token||"testKey",distinct_id:e.distinctId||ve(),agentId:e.agent.id,agentType:Ce(a),owner_id:e.agent.owner_id??"",promptVersion:(c=e.agent.llm)==null?void 0:c.prompt_version,behavior:{role:r==null?void 0:r.role,personality:r==null?void 0:r.personality,instructions:(n=e.agent.llm)==null?void 0:n.instructions},temperature:(o=e.agent.llm)==null?void 0:o.temperature,knowledgeSource:r==null?void 0:r.knowledge_source,starterQuestionsCount:(u=(d=e.agent.knowledge)==null?void 0:d.starter_message)==null?void 0:u.length,topicsToAvoid:r==null?void 0:r.topics_to_avoid,maxResponseLength:r==null?void 0:r.max_response_length};return{...s,additionalProperties:{},isEnabled:e.isEnabled??!0,getRandom:G,enrich(p){this.additionalProperties={...this.additionalProperties,...p}},async track(p,P){if(!this.isEnabled)return Promise.resolve();const{audioPath:S,...D}=P||{},C={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:p,properties:{...this.additionalProperties,...D,...s,source:t,time:Date.now(),$insert_id:this.getRandom(),origin:window.location.href,"Screen Height":window.screen.height||window.innerWidth,"Screen Width":window.screen.width||window.innerHeight,"User Agent":navigator.userAgent}}])})};try{return await fetch(Ue,C).then(R=>R.json())}catch(R){return console.error(R)}},linkTrack(p,P,S,D){ne[p]||(ne[p]={events:{},resolvedDependencies:[]}),D.includes(S)||D.push(S);const C=ne[p];if(C.events[S]={props:P},C.resolvedDependencies.push(S),D.every(J=>C.resolvedDependencies.includes(J))){const J=D.reduce(($,l)=>C.events[l]?{...$,...C.events[l].props}:$,{});this.track(p,J),C.resolvedDependencies=C.resolvedDependencies.filter($=>!D.includes($)),D.forEach($=>{delete C.events[$]})}}}}function Se(){let e=0;return{reset:()=>e=0,update:()=>e=Date.now(),get:(t=!1)=>t?Date.now()-e:e}}const N=Se(),ae=Se();function Ee(e){return e===b.Playground?{headers:{[Ae]:"true"}}:{}}async function Ie(e,t,a,r,s=!1,i){try{return!i&&r!==b.DirectPlayback&&(i=await t.newChat(e.id,{persist:s},Ee(r)),a.track("agent-chat",{event:"created",chat_id:i.id,agent_id:e.id,mode:r})),{chat:i,chatMode:(i==null?void 0:i.chat_mode)??r}}catch(c){try{const n=JSON.parse(c.message);if((n==null?void 0:n.kind)==="InsufficientCreditsError")throw new Error("InsufficientCreditsError")}catch(n){console.error("Error parsing the error message:",n)}throw new Error("Cannot create new chat")}}function He(e){return e&&e.length>0?e:[]}function xe(e,t,a,r,s){if(!e||!t)throw new Error("Please connect to the agent first");if(!e.interruptAvailable)throw new Error("Interrupt is not enabled for this stream");if(a!==H.Fluent)throw new Error("Interrupt only available for Fluent streams");if(!r&&!s)throw new Error("No active video to interrupt")}async function _e(e,t){const a={type:z.StreamInterrupt,videoId:t,timestamp:Date.now()};e.sendDataChannelMessage(JSON.stringify(a))}function qe(e){return new Promise((t,a)=>{const{callbacks:r,host:s,auth:i}=e,{onMessage:c=null,onOpen:n=null,onClose:o=null,onError:d=null}=r||{},u=new WebSocket(`${s}?authorization=${ke(i)}`);u.onmessage=c,u.onclose=o,u.onerror=p=>{console.error(p),d==null||d("Websocket failed to connect",p),a(p)},u.onopen=p=>{n==null||n(p),t(u)}})}async function Ve(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 qe(e)}catch(s){if(r===t)throw s;await ye(r*500)}return a}async function Xe(e,t,a){const r=a!=null&&a.onMessage?[a.onMessage]:[],s=await Ve({auth:e,host:t,callbacks:{onError:i=>{var c;return(c=a.onError)==null?void 0:c.call(a,new oe(i))},onMessage(i){const c=JSON.parse(i.data);r.forEach(n=>n(c.event,c))}}});return{socket:s,disconnect:()=>s.close(),subscribeToEvents:i=>r.push(i)}}function Ye(e){if(e.answer!==void 0)return e.answer;let t=0,a="";for(;t in e;)a+=e[t++];return a}function Qe(e,t,a,r,s){const i=r.messages[r.messages.length-1];if(!(e===X.Partial||e===X.Answer)||(i==null?void 0:i.role)!=="assistant")return;const{content:c,sequence:n}=t;e===X.Partial?a[n]=c:a.answer=c;const o=Ye(a);(i.content!==o||e===X.Answer)&&(i.content=o,s==null||s([...r.messages],e))}function Ge(e,t,a,r,s){let i={};return{clearQueue:()=>i={},onMessage:(c,n)=>{var o,d;if("content"in n)Qe(c,n,i,t,a.callbacks.onNewMessage),c===X.Answer&&e.track("agent-message-received",{messages:t.messages.length,mode:t.chatMode});else{const u=z,p=[u.StreamVideoDone,u.StreamVideoError,u.StreamVideoRejected],P=[u.StreamFailed,u.StreamVideoError,u.StreamVideoRejected],S=We(n,r,{mode:t.chatMode});if(c=c,c===u.StreamVideoCreated)e.linkTrack("agent-video",S,u.StreamVideoCreated,["start"]);else if(p.includes(c)){const D=c.split("/")[1];P.includes(c)?e.track("agent-video",{...S,event:D}):e.linkTrack("agent-video",{...S,event:D},c,["done"])}P.includes(c)&&((d=(o=a.callbacks).onError)==null||d.call(o,new Error(`Stream failed with event ${c}`),{data:n})),n.event===u.StreamDone&&s()}}}}function Ze(e,t,a,r){const s=re(e,`${t}/agents/${a}`,r);return{createStream(i){return s.post("/streams",{output_resolution:i.output_resolution,compatibility_mode:i.compatibility_mode,stream_warmup:i.stream_warmup,session_timeout:i.session_timeout,fluent:i.fluent})},startConnection(i,c,n){return s.post(`/streams/${i}/sdp`,{session_id:n,answer:c})},addIceCandidate(i,c,n){return s.post(`/streams/${i}/ice`,{session_id:n,...c})},sendStreamRequest(i,c,n){return s.post(`/streams/${i}`,{session_id:c,...n})},close(i,c){return s.delete(`/streams/${i}`,{session_id:c})}}}function Oe(e,t,a,r){const s=re(e,`${t}/agents/${a}`,r);return{createStream(i,c){return s.post("/streams",{driver_url:i.driver_url,face:i.face,config:i.config,output_resolution:i.output_resolution,compatibility_mode:i.compatibility_mode,stream_warmup:i.stream_warmup,session_timeout:i.session_timeout,fluent:i.fluent},c)},startConnection(i,c,n,o){return s.post(`/streams/${i}/sdp`,{session_id:n,answer:c},o)},addIceCandidate(i,c,n,o){return s.post(`/streams/${i}/ice`,{session_id:n,...c},o)},sendStreamRequest(i,c,n,o){return s.post(`/streams/${i}`,{session_id:c,...n},o)},close(i,c,n){return s.delete(`/streams/${i}`,{session_id:c},n)}}}function et(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 tt(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 rt(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 nt(e,t,a){const r=e.map((o,d)=>d===0?a?{timestamp:o.timestamp,duration:0,rtt:o.rtt,bytesReceived:o.bytesReceived-a.bytesReceived,bitrate:(o.bytesReceived-a.bytesReceived)*8/(t/1e3),packetsReceived:o.packetsReceived-a.packetsReceived,packetsLost:o.packetsLost-a.packetsLost,framesDropped:o.framesDropped-a.framesDropped,framesDecoded:o.framesDecoded-a.framesDecoded,jitter:o.jitter,jitterBufferDelay:o.jitterBufferDelay-a.jitterBufferDelay,jitterBufferEmittedCount:o.jitterBufferEmittedCount-a.jitterBufferEmittedCount,avgJitterDelayInInterval:(o.jitterBufferDelay-a.jitterBufferDelay)/(o.jitterBufferEmittedCount-a.jitterBufferEmittedCount),framesPerSecond:o.framesPerSecond,freezeCount:o.freezeCount-a.freezeCount,freezeDuration:o.freezeDuration-a.freezeDuration}:{timestamp:o.timestamp,rtt:o.rtt,duration:0,bytesReceived:o.bytesReceived,bitrate:o.bytesReceived*8/(t/1e3),packetsReceived:o.packetsReceived,packetsLost:o.packetsLost,framesDropped:o.framesDropped,framesDecoded:o.framesDecoded,jitter:o.jitter,jitterBufferDelay:o.jitterBufferDelay,jitterBufferEmittedCount:o.jitterBufferEmittedCount,avgJitterDelayInInterval:o.jitterBufferDelay/o.jitterBufferEmittedCount,framesPerSecond:o.framesPerSecond,freezeCount:o.freezeCount,freezeDuration:o.freezeDuration}:{timestamp:o.timestamp,duration:t*d/1e3,rtt:o.rtt,bytesReceived:o.bytesReceived-e[d-1].bytesReceived,bitrate:(o.bytesReceived-e[d-1].bytesReceived)*8/(t/1e3),packetsReceived:o.packetsReceived-e[d-1].packetsReceived,packetsLost:o.packetsLost-e[d-1].packetsLost,framesDropped:o.framesDropped-e[d-1].framesDropped,framesDecoded:o.framesDecoded-e[d-1].framesDecoded,jitter:o.jitter,jitterBufferDelay:o.jitterBufferDelay-e[d-1].jitterBufferDelay,jitterBufferEmittedCount:o.jitterBufferEmittedCount-e[d-1].jitterBufferEmittedCount,avgJitterDelayInInterval:(o.jitterBufferDelay-e[d-1].jitterBufferDelay)/(o.jitterBufferEmittedCount-e[d-1].jitterBufferEmittedCount),framesPerSecond:o.framesPerSecond,freezeCount:o.freezeCount-e[d-1].freezeCount,freezeDuration:o.freezeDuration-e[d-1].freezeDuration}),s=tt(r),i=s.reduce((o,d)=>o+(d.causes.includes("low fps")?1:0),0),c=r.filter(o=>!!o.avgJitterDelayInInterval).map(o=>o.avgJitterDelayInInterval),n=r.filter(o=>!!o.rtt).map(o=>o.rtt);return{webRTCStats:{anomalies:s,minRtt:Math.min(...n),avgRtt:Re(n),maxRtt:Math.max(...n),aggregateReport:et(e[0],e[e.length-1],i),minJitterDelayInInterval:Math.min(...c),maxJitterDelayInInterval:Math.max(...c),avgJitterDelayInInterval:Re(c)},codec:e[0].codec,resolution:`${e[0].frameWidth}x${e[0].frameHeight}`}}const ie=100,at=Math.max(Math.ceil(400/ie),1),it=.25,st=.28;function ot(){let e=0,t,a,r=0;return s=>{for(const i of s.values())if(i&&i.type==="inbound-rtp"&&i.kind==="video"){const c=i.jitterBufferDelay,n=i.jitterBufferEmittedCount;if(a&&n>a){const u=c-t,p=n-a;r=u/p}t=c,a=n;const o=i.framesDecoded,d=o-e>0;return e=o,{isReceiving:d,avgJitterDelayInInterval:r,freezeCount:i.freezeCount}}return{isReceiving:!1,avgJitterDelayInInterval:r}}}function ct(e,t,a,r,s,i=!1){let c=[],n,o=0,d=!1,u=Q.Unknown,p=Q.Unknown,P=0,S=0;const D=ot();return setInterval(async()=>{const C=await e.getStats(),{isReceiving:R,avgJitterDelayInInterval:J,freezeCount:$}=D(C),l=rt(C);if(R)o=0,P=$-S,p=J<it?Q.Strong:J>st&&P>1?Q.Weak:u,p!==u&&(s==null||s(p),u=p,S+=P,P=0),d||(r==null||r(y.Start),n=c[c.length-1],c=[],d=!0),c.push(l);else if(d&&(o++,o>=at)){const h=nt(c,ie,n);r==null||r(y.Stop,h),t()||a(),S=$,d=!1}},ie)}let Me=!1;const F=(e,t)=>Me&&console.log(e,t),dt=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function Te(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 lt(e){const[t,a=""]=e.split(/:(.+)/);try{const r=JSON.parse(a);return F("parsed data channel message",{subject:t,data:r}),{subject:t,data:r}}catch(r){return F("Failed to parse data channel message, returning data as string",{subject:t,rawData:a,error:r}),{subject:t,data:a}}}function ut({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,report:r}){e===y.Start&&t===y.Start?a==null||a(y.Start):e===y.Stop&&t===y.Stop&&(a==null||a(y.Stop,r))}function ft({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:r,report:s}){e===y.Start?a==null||a(y.Start):e===y.Stop&&(a==null||a(y.Stop,s)),t===y.Start?r==null||r(Y.Talking):t===y.Stop&&(r==null||r(Y.Idle))}function be({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:r,streamType:s,report:i}){s===H.Legacy?ut({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,report:i}):s===H.Fluent&&ft({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:r,report:i})}async function mt(e,t,{debug:a=!1,callbacks:r,auth:s,baseURL:i=Z,analytics:c}){Me=a;let n=!1,o=!1,d=y.Stop,u=y.Stop;const{startConnection:p,sendStreamRequest:P,close:S,createStream:D,addIceCandidate:C}=t.videoType===ee.Clip?Ze(s,i,e,r.onError):Oe(s,i,e,r.onError),{id:R,offer:J,ice_servers:$,session_id:l,fluent:h,interrupt_enabled:k}=await D(t),w=new dt({iceServers:$}),E=w.createDataChannel("JanusDataChannel");if(!l)throw new Error("Could not create session_id");const v=h?H.Fluent:H.Legacy;c.enrich({"stream-type":v});const j=t.stream_warmup&&!h,L=()=>n,W=()=>{var f;n=!0,o&&((f=r.onConnectionStateChange)==null||f.call(r,M.Connected))},I=ct(w,L,W,(f,g)=>be({statsSignal:u=f,dataChannelSignal:v===H.Legacy?d:void 0,onVideoStateChange:r.onVideoStateChange,onAgentActivityStateChange:r.onAgentActivityStateChange,report:g,streamType:v}),f=>{var g;return(g=r.onConnectivityStateChange)==null?void 0:g.call(r,f)},j);w.onicecandidate=f=>{var g;F("peerConnection.onicecandidate",f);try{f.candidate&&f.candidate.sdpMid&&f.candidate.sdpMLineIndex!==null?C(R,{candidate:f.candidate.candidate,sdpMid:f.candidate.sdpMid,sdpMLineIndex:f.candidate.sdpMLineIndex},l):C(R,{candidate:null},l)}catch(B){(g=r.onError)==null||g.call(r,B,{streamId:R})}},E.onopen=()=>{o=!0,(!j||n)&&W()};function _(f){d=f===z.StreamStarted?y.Start:y.Stop,be({statsSignal:v===H.Legacy?u:void 0,dataChannelSignal:d,onVideoStateChange:r.onVideoStateChange,onAgentActivityStateChange:r.onAgentActivityStateChange,streamType:v})}function T(f,g){const B=typeof g=="string"?g:g==null?void 0:g.metadata;B&&c.enrich({streamMetadata:B}),c.track("agent-chat",{event:"ready"})}const U={[z.StreamStarted]:_,[z.StreamDone]:_,[z.StreamReady]:T};E.onmessage=f=>{var q;const{subject:g,data:B}=lt(f.data);(q=U[g])==null||q.call(U,g,B)},w.oniceconnectionstatechange=()=>{var g;F("peerConnection.oniceconnectionstatechange => "+w.iceConnectionState);const f=Te(w.iceConnectionState);f!==M.Connected&&((g=r.onConnectionStateChange)==null||g.call(r,f))},w.ontrack=f=>{var g;F("peerConnection.ontrack",f),(g=r.onSrcObjectReady)==null||g.call(r,f.streams[0])},await w.setRemoteDescription(J),F("set remote description OK");const K=await w.createAnswer();return F("create answer OK"),await w.setLocalDescription(K),F("set local description OK"),await p(R,K,l),F("start connection OK"),{speak(f){return P(R,l,f)},async disconnect(){var f;if(R){const g=Te(w.iceConnectionState);if(w){if(g===M.New){clearInterval(I);return}w.close(),w.oniceconnectionstatechange=null,w.onnegotiationneeded=null,w.onicecandidate=null,w.ontrack=null}try{g===M.Connected&&await S(R,l).catch(B=>{})}catch(B){F("Error on close stream connection",B)}(f=r.onAgentActivityStateChange)==null||f.call(r,Y.Idle),clearInterval(I)}},sendDataChannelMessage(f){var g,B;if(!n||E.readyState!=="open"){F("Data channel is not ready for sending messages"),(g=r.onError)==null||g.call(r,new Error("Data channel is not ready for sending messages"),{streamId:R});return}try{E.send(f)}catch(q){F("Error sending data channel message",q),(B=r.onError)==null||B.call(r,q,{streamId:R})}},sessionId:l,streamId:R,streamType:v,interruptAvailable:k}}function gt(e,t){const{streamOptions:a}=t??{};return{videoType:he(e.presenter.type),output_resolution:a==null?void 0:a.outputResolution,session_timeout:a==null?void 0:a.sessionTimeout,stream_warmup:a==null?void 0:a.streamWarmup,compatibility_mode:a==null?void 0:a.compatibilityMode,fluent:a==null?void 0:a.fluent}}function ht(e,t,a,r,s){s===H.Fluent?wt(e,t,a,r,s):yt(e,t,a,r,s)}function wt(e,t,a,r,s){e===y.Start?r.track("stream-session",{event:"start","stream-type":s}):e===y.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 pt(e,t,a,r){N.get()<=0||(e===y.Start?a.linkTrack("agent-video",{event:"start",latency:N.get(!0),"stream-type":r},"start",[z.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":r},"done",[z.StreamVideoDone]))}function yt(e,t,a,r,s){N.get()<=0||(e===y.Start?r.linkTrack("agent-video",{event:"start",latency:N.get(!0),"stream-type":s},"start",[z.StreamVideoCreated]):e===y.Stop&&r.linkTrack("agent-video",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":s,...a},"done",[z.StreamVideoDone]))}function vt(e,t,a){return N.reset(),new Promise(async(r,s)=>{try{const i=await mt(e.id,gt(e,t),{...t,analytics:a,callbacks:{...t.callbacks,onConnectionStateChange:c=>{var n,o;(o=(n=t.callbacks).onConnectionStateChange)==null||o.call(n,c),c===M.Connected&&r(i)},onVideoStateChange:(c,n)=>{var o,d;(d=(o=t.callbacks).onVideoStateChange)==null||d.call(o,c),ht(c,e,n,a,i.streamType)},onAgentActivityStateChange:c=>{var n,o;(o=(n=t.callbacks).onAgentActivityStateChange)==null||o.call(n,c),c===Y.Talking?ae.update():ae.reset(),pt(c===Y.Talking?y.Start:y.Stop,e,a,i.streamType)}}})}catch(i){s(i)}})}async function kt(e,t,a,r,s){var o,d,u,p;const{chat:i,chatMode:c}=await Ie(e,a,r,t.mode,t.persistentChat,s);if(c&&c!==t.mode&&(t.mode=c,(d=(o=t.callbacks).onModeChange)==null||d.call(o,c),c===b.TextOnly))return(p=(u=t.callbacks).onError)==null||p.call(u,new se(c)),{chat:i};const n=await vt(e,t,r);return{chat:i,streamingManager:n}}async function Dt(e,t){var R,J,$;let a=!0,r=!1;const s=t.mixpanelKey||Be,i=t.wsURL||Pe,c=t.baseURL||Z,n={messages:[],chatMode:t.mode||b.Functional},o=De(t.auth,c,t.callbacks.onError),d=await o.getById(e),u=Ke({token:s,agent:d,isEnabled:t.enableAnalitics,distinctId:t.distinctId}),{onMessage:p,clearQueue:P}=Ge(u,n,t,d,()=>{var l;return(l=n.socketManager)==null?void 0:l.disconnect()});n.messages=He(t.initialMessages),(J=(R=t.callbacks).onNewMessage)==null||J.call(R,[...n.messages],"answer"),u.track("agent-sdk",{event:"loaded",...Ne(d)});async function S(l){var j,L,W,I,_,T,U;(L=(j=t.callbacks).onConnectionStateChange)==null||L.call(j,M.Connecting),N.reset(),r=!1,l&&!a&&(delete n.chat,(I=(W=t.callbacks).onNewMessage)==null||I.call(W,[...n.messages],"answer"));const h=t.mode===b.DirectPlayback?Promise.resolve(void 0):Xe(t.auth,i,{onMessage:p,onError:t.callbacks.onError}),k=te(()=>kt(d,t,o,u,n.chat),{limit:3,timeout:je,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:K=>(K==null?void 0:K.message)!=="Could not connect"&&K.status!==429,delayMs:1e3}).catch(K=>{var f,g;throw C(b.Maintenance),(g=(f=t.callbacks).onConnectionStateChange)==null||g.call(f,M.Fail),K}),[w,{streamingManager:E,chat:v}]=await Promise.all([h,k]);v&&v.id!==((_=n.chat)==null?void 0:_.id)&&((U=(T=t.callbacks).onNewChat)==null||U.call(T,v.id)),n.streamingManager=E,n.socketManager=w,n.chat=v,a=!1,C((v==null?void 0:v.chat_mode)??t.mode??b.Functional)}async function D(){var l,h,k,w;(l=n.socketManager)==null||l.disconnect(),await((h=n.streamingManager)==null?void 0:h.disconnect()),r=!1,delete n.streamingManager,delete n.socketManager,(w=(k=t.callbacks).onConnectionStateChange)==null||w.call(k,M.Disconnected)}async function C(l){var h,k;l!==n.chatMode&&(u.track("agent-mode-change",{mode:l}),n.chatMode=l,n.chatMode!==b.Functional&&await D(),(k=(h=t.callbacks).onModeChange)==null||k.call(h,l))}return{agent:d,getStreamType:()=>{var l;return(l=n.streamingManager)==null?void 0:l.streamType},getIsInterruptAvailable:()=>{var l;return((l=n.streamingManager)==null?void 0:l.interruptAvailable)??!1},starterMessages:(($=d.knowledge)==null?void 0:$.starter_message)||[],getSTTToken:()=>o.getSTTToken(d.id),changeMode:C,enrichAnalytics:u.enrich,async connect(){var l;await S(!0),u.track("agent-chat",{event:"connect",chatId:(l=n.chat)==null?void 0:l.id,agentId:d.id,mode:n.chatMode})},async reconnect(){var l;await D(),await S(!1),u.track("agent-chat",{event:"reconnect",chatId:(l=n.chat)==null?void 0:l.id,agentId:d.id,mode:n.chatMode})},async disconnect(){var l;await D(),u.track("agent-chat",{event:"disconnect",chatId:(l=n.chat)==null?void 0:l.id,agentId:d.id,mode:n.chatMode})},async chat(l){var E,v,j,L,W;const h=()=>{if(t.mode===b.DirectPlayback)throw new V("Direct playback is enabled, chat is disabled");if(l.length>=800)throw new V("Message cannot be more than 800 characters");if(l.length===0)throw new V("Message cannot be empty");if(n.chatMode===b.Maintenance)throw new V("Chat is in maintenance mode");if(![b.TextOnly,b.Playground].includes(n.chatMode)){if(!n.streamingManager)throw new V("Streaming manager is not initialized");if(!n.chat)throw new V("Chat is not initialized")}},k=async()=>{var I,_;if(!n.chat){const T=await Ie(d,o,u,n.chatMode,t.persistentChat);if(!T.chat)throw new x(n.chatMode,!!t.persistentChat);n.chat=T.chat,(_=(I=t.callbacks).onNewChat)==null||_.call(I,n.chat.id)}return n.chat.id},w=async(I,_)=>te(()=>{var T,U;return o.chat(d.id,_,{chatMode:n.chatMode,streamId:(T=n.streamingManager)==null?void 0:T.streamId,sessionId:(U=n.streamingManager)==null?void 0:U.sessionId,messages:I.map(({matches:K,...f})=>f)},{...Ee(n.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:T=>{var f,g,B,q;const U=(f=T==null?void 0:T.message)==null?void 0:f.includes("missing or invalid session_id");return!((g=T==null?void 0:T.message)==null?void 0:g.includes("Stream Error"))&&!U?((q=(B=t.callbacks).onError)==null||q.call(B,T),!1):!0},onRetry:async()=>{await D(),await S(!1)}});try{P(),h(),n.messages.push({id:G(),role:"user",content:l,created_at:new Date(N.update()).toISOString()}),(v=(E=t.callbacks).onNewMessage)==null||v.call(E,[...n.messages],"user");const I=await k(),_=await w([...n.messages],I);return n.messages.push({id:G(),role:"assistant",content:_.result||"",created_at:new Date().toISOString(),context:_.context,matches:_.matches,videoId:_.videoId}),r&&_.videoId&&n.streamingManager&&(r=!1,n.messages[n.messages.length-1].interrupted=!0,await _e(n.streamingManager,_.videoId)),u.track("agent-message-send",{event:"success",mode:n.chatMode,messages:n.messages.length+1}),_.result&&((L=(j=t.callbacks).onNewMessage)==null||L.call(j,[...n.messages],"answer"),u.track("agent-message-received",{latency:N.get(!0),mode:n.chatMode,messages:n.messages.length})),_}catch(I){throw r=!1,((W=n.messages[n.messages.length-1])==null?void 0:W.role)==="assistant"&&n.messages.pop(),u.track("agent-message-send",{event:"error",mode:n.chatMode,messages:n.messages.length}),I}},rate(l,h,k){var v,j,L,W;const w=n.messages.find(I=>I.id===l);if(n.chat){if(!w)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const E=((v=w.matches)==null?void 0:v.map(I=>[I.document_id,I.id]))??[];return u.track("agent-rate",{event:k?"update":"create",thumb:h===1?"up":"down",knowledge_id:((j=d.knowledge)==null?void 0:j.id)??"",mode:n.chatMode,matches:E,score:h}),k?o.updateRating(d.id,n.chat.id,k,{knowledge_id:((L=d.knowledge)==null?void 0:L.id)??"",message_id:l,matches:E,score:h}):o.createRating(d.id,n.chat.id,{knowledge_id:((W=d.knowledge)==null?void 0:W.id)??"",message_id:l,matches:E,score:h})},deleteRate(l){var h;if(!n.chat)throw new Error("Chat is not initialized");return u.track("agent-rate-delete",{type:"text",chat_id:(h=n.chat)==null?void 0:h.id,id:l,mode:n.chatMode}),o.deleteRating(d.id,n.chat.id,l)},async speak(l){var E,v,j;function h(){if(typeof l=="string"){if(!d.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:d.presenter.voice,input:l,ssml:!1}}if(l.type==="text"&&!l.provider){if(!d.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:d.presenter.voice,input:l.input,ssml:l.ssml}}return l}const k=h();if(u.track("agent-speak",k),N.update(),n.messages&&k.type==="text"&&(n.messages.push({id:G(),role:"assistant",content:k.input,created_at:new Date(N.get(!0)).toISOString()}),(v=(E=t.callbacks).onNewMessage)==null||v.call(E,[...n.messages],"answer")),$e(n.chatMode))return{duration:0,status:"success"};if(!n.streamingManager)throw new Error("Please connect to the agent first");return n.streamingManager.speak({script:k,metadata:{chat_id:(j=n.chat)==null?void 0:j.id,agent_id:d.id}})},async interrupt({type:l}){var w,E,v,j,L;const h=n.messages[n.messages.length-1],k=(h==null?void 0:h.role)==="user";if(xe(n.streamingManager,n.chat,(w=n.streamingManager)==null?void 0:w.streamType,k,!!(h!=null&&h.videoId)),u.track("agent-video-interrupt",{type:l||"click",stream_id:(E=n.streamingManager)==null?void 0:E.streamId,agent_id:d.id,owner_id:d.owner_id,video_duration_to_interrupt:ae.get(!0),message_duration_to_interrupt:N.get(!0),chat_id:(v=n.chat)==null?void 0:v.id,mode:n.chatMode,queued_interrupt:k}),k){r=!0;return}h.interrupted=!0,(L=(j=t.callbacks).onNewMessage)==null||L.call(j,[...n.messages],"answer"),_e(n.streamingManager,h.videoId)}}}function Ct(e,t,a){const{getById:r}=De(t,a||Z);return r(e)}m.AgentActivityState=Y,m.AgentStatus=le,m.ChatCreationFailed=x,m.ChatMode=b,m.ChatModeDowngraded=se,m.ChatProgress=X,m.ConnectionState=M,m.ConnectivityState=Q,m.DocumentType=ge,m.KnowledgeType=me,m.PlanGroup=de,m.Providers=we,m.RateState=ue,m.StreamEvents=z,m.StreamType=H,m.StreamingState=y,m.Subject=fe,m.UserPlan=ce,m.ValidationError=V,m.VideoType=ee,m.VoiceAccess=pe,m.WsError=oe,m.createAgentManager=Dt,m.getAgent=Ct,m.mapVideoType=he,Object.defineProperty(m,Symbol.toStringTag,{value:"Module"})});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { StreamingManager } from '../streaming-manager';
|
|
2
2
|
import { Agent, AgentManagerOptions, AgentsAPI, Chat, CreateStreamOptions } from '../../types';
|
|
3
3
|
import { Analytics } from '../analytics/mixpanel';
|
|
4
|
-
export declare function initializeStreamAndChat(agent: Agent, options: AgentManagerOptions, agentsApi: AgentsAPI, analytics: Analytics, chat?: Chat
|
|
4
|
+
export declare function initializeStreamAndChat(agent: Agent, options: AgentManagerOptions, agentsApi: AgentsAPI, analytics: Analytics, chat?: Chat): Promise<{
|
|
5
5
|
chat?: Chat;
|
|
6
6
|
streamingManager?: StreamingManager<CreateStreamOptions>;
|
|
7
7
|
}>;
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const latencyTimestampTracker: {
|
|
2
|
+
reset: () => number;
|
|
3
|
+
update: () => number;
|
|
4
|
+
get: (delta?: boolean) => number;
|
|
5
|
+
};
|
|
6
|
+
export declare const interruptTimestampTracker: {
|
|
2
7
|
reset: () => number;
|
|
3
8
|
update: () => number;
|
|
4
9
|
get: (delta?: boolean) => number;
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare function
|
|
3
|
-
export declare function getInitialMessages(content: string, initialMessages?: Message[]): Message[];
|
|
1
|
+
import { Message } from '../../types';
|
|
2
|
+
export declare function getInitialMessages(initialMessages?: Message[]): Message[];
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Chat, CreateStreamOptions, StreamType } from '../../types';
|
|
2
|
+
import { StreamingManager } from '../streaming-manager';
|
|
3
|
+
export declare function validateInterrupt(streamingManager: StreamingManager<CreateStreamOptions> | undefined, chat: Chat | undefined, streamType: StreamType | undefined, hasChatPending: boolean, hasVideoId: boolean): void;
|
|
4
|
+
export declare function sendInterrupt(streamingManager: StreamingManager<CreateStreamOptions>, videoId: string): Promise<void>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { CreateStreamOptions, PayloadType, StreamingManagerOptions } from '../../types/index';
|
|
2
|
-
export declare function createStreamingManager<T extends CreateStreamOptions>(agentId: string, agent: T, { debug, callbacks, auth, baseURL,
|
|
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, 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
|
|
@@ -9,6 +9,10 @@ export declare function createStreamingManager<T extends CreateStreamOptions>(ag
|
|
|
9
9
|
* Method to close RTC connection
|
|
10
10
|
*/
|
|
11
11
|
disconnect(): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Method to send data channel messages to the server
|
|
14
|
+
*/
|
|
15
|
+
sendDataChannelMessage(payload: string): void;
|
|
12
16
|
/**
|
|
13
17
|
* Session identifier information, should be returned in the body of all streaming requests
|
|
14
18
|
*/
|
|
@@ -17,5 +21,7 @@ export declare function createStreamingManager<T extends CreateStreamOptions>(ag
|
|
|
17
21
|
* Id of current RTC stream
|
|
18
22
|
*/
|
|
19
23
|
streamId: string;
|
|
24
|
+
streamType: StreamType;
|
|
25
|
+
interruptAvailable: boolean | undefined;
|
|
20
26
|
}>;
|
|
21
27
|
export type StreamingManager<T extends CreateStreamOptions> = Awaited<ReturnType<typeof createStreamingManager<T>>>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import { StreamingState } from '../../../types';
|
|
2
|
+
import { ConnectivityState, StreamingState } from '../../../types';
|
|
3
3
|
import { VideoRTCStatsReport } from './report';
|
|
4
|
-
export declare function pollStats(peerConnection: RTCPeerConnection, getIsConnected: () => boolean, onConnected: () => void, onVideoStateChange?: (state: StreamingState, statsReport?: VideoRTCStatsReport) => void,
|
|
4
|
+
export declare function pollStats(peerConnection: RTCPeerConnection, getIsConnected: () => boolean, onConnected: () => void, onVideoStateChange?: (state: StreamingState, statsReport?: VideoRTCStatsReport) => void, onConnectivityStateChange?: (state: ConnectivityState) => void, warmup?: boolean): NodeJS.Timeout;
|
|
@@ -3,6 +3,12 @@ export interface VideoRTCStatsReport {
|
|
|
3
3
|
webRTCStats: {
|
|
4
4
|
anomalies: AnalyticsRTCStatsReport[];
|
|
5
5
|
aggregateReport: AnalyticsRTCStatsReport;
|
|
6
|
+
minRtt: number;
|
|
7
|
+
maxRtt: number;
|
|
8
|
+
avgRtt: number;
|
|
9
|
+
minJitterDelayInInterval: number;
|
|
10
|
+
maxJitterDelayInInterval: number;
|
|
11
|
+
avgJitterDelayInInterval: number;
|
|
6
12
|
};
|
|
7
13
|
codec: string;
|
|
8
14
|
resolution: string;
|
|
@@ -25,6 +25,8 @@ export interface Message {
|
|
|
25
25
|
created_at?: string;
|
|
26
26
|
matches?: ChatResponse['matches'];
|
|
27
27
|
context?: string;
|
|
28
|
+
videoId?: string;
|
|
29
|
+
interrupted?: boolean;
|
|
28
30
|
}
|
|
29
31
|
export interface ChatPayload {
|
|
30
32
|
messages: Message[];
|
|
@@ -53,6 +55,7 @@ export interface ChatResponse {
|
|
|
53
55
|
matches?: IRetrivalMetadata[];
|
|
54
56
|
chatMode?: ChatMode;
|
|
55
57
|
context?: string;
|
|
58
|
+
videoId?: string;
|
|
56
59
|
}
|
|
57
60
|
export interface Chat {
|
|
58
61
|
id: string;
|
|
@@ -65,3 +68,6 @@ export interface Chat {
|
|
|
65
68
|
agent_id__modified_at: string;
|
|
66
69
|
chat_mode?: ChatMode;
|
|
67
70
|
}
|
|
71
|
+
export interface Interrupt {
|
|
72
|
+
type: 'text' | 'audio' | 'click';
|
|
73
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { STTTokenResponse } from '../..';
|
|
2
|
-
import { SupportedStreamScipt } from '../../stream-script';
|
|
3
2
|
import { Auth } from '../../auth';
|
|
4
|
-
import { CompatibilityMode, ConnectionState, SendStreamPayloadResponse, StreamEvents, StreamingState } from '../../stream';
|
|
3
|
+
import { AgentActivityState, CompatibilityMode, ConnectionState, ConnectivityState, SendStreamPayloadResponse, StreamEvents, StreamType, StreamingState } from '../../stream';
|
|
4
|
+
import { SupportedStreamScript } from '../../stream-script';
|
|
5
5
|
import { Agent } from './agent';
|
|
6
|
-
import { ChatMode, ChatResponse, Message, RatingEntity } from './chat';
|
|
6
|
+
import { ChatMode, ChatResponse, Interrupt, Message, RatingEntity } from './chat';
|
|
7
7
|
/**
|
|
8
8
|
* Types of events provided in Chat Progress Callback
|
|
9
9
|
*/
|
|
@@ -67,10 +67,20 @@ interface ManagerCallbacks {
|
|
|
67
67
|
* @param mode - ChatMode
|
|
68
68
|
*/
|
|
69
69
|
onModeChange?(mode: ChatMode): void;
|
|
70
|
+
/**
|
|
71
|
+
* Optional callback function that will be triggered each time the user internet connectivity state change by realtime estimated bitrate
|
|
72
|
+
* @param state - ConnectivityState
|
|
73
|
+
*/
|
|
74
|
+
onConnectivityStateChange?(state: ConnectivityState): void;
|
|
70
75
|
/**
|
|
71
76
|
* Optional callback function that will be triggered on fetch request errors
|
|
72
77
|
*/
|
|
73
78
|
onError?: (error: Error, errorData?: object) => void;
|
|
79
|
+
/**
|
|
80
|
+
* Optional callback function that will be triggered each time the agent activity state changes
|
|
81
|
+
* @param state - AgentActivityState
|
|
82
|
+
*/
|
|
83
|
+
onAgentActivityStateChange?(state: AgentActivityState): void;
|
|
74
84
|
}
|
|
75
85
|
interface StreamOptions {
|
|
76
86
|
/**
|
|
@@ -102,10 +112,10 @@ interface StreamOptions {
|
|
|
102
112
|
*/
|
|
103
113
|
outputResolution?: number;
|
|
104
114
|
/**
|
|
105
|
-
* Whether to
|
|
106
|
-
*
|
|
115
|
+
* Whether to request fluent stream.
|
|
116
|
+
* @default false
|
|
107
117
|
*/
|
|
108
|
-
|
|
118
|
+
fluent?: boolean;
|
|
109
119
|
}
|
|
110
120
|
export interface AgentManagerOptions {
|
|
111
121
|
auth: Auth;
|
|
@@ -130,6 +140,14 @@ export interface AgentManager {
|
|
|
130
140
|
* To know more about agents go to https://docs.d-id.com/reference/agents
|
|
131
141
|
*/
|
|
132
142
|
agent: Agent;
|
|
143
|
+
/**
|
|
144
|
+
* Get the current stream type of the agent
|
|
145
|
+
*/
|
|
146
|
+
getStreamType: () => StreamType | undefined;
|
|
147
|
+
/**
|
|
148
|
+
* Get if the stream supports interrupt
|
|
149
|
+
*/
|
|
150
|
+
getIsInterruptAvailable: () => boolean;
|
|
133
151
|
/**
|
|
134
152
|
* Array of starter messages that will be sent to the agent when the chat starts
|
|
135
153
|
*/
|
|
@@ -172,7 +190,7 @@ export interface AgentManager {
|
|
|
172
190
|
* Method to make your agent read the text you provide or reproduce sound
|
|
173
191
|
* @param payload
|
|
174
192
|
*/
|
|
175
|
-
speak: (payload:
|
|
193
|
+
speak: (payload: SupportedStreamScript | string) => Promise<SendStreamPayloadResponse>;
|
|
176
194
|
/**
|
|
177
195
|
* Method to change the mode of the chat
|
|
178
196
|
* @param mode - ChatMode
|
|
@@ -183,5 +201,10 @@ export interface AgentManager {
|
|
|
183
201
|
* @param properties flat json object with properties that will be added to analytics events fired from the sdk
|
|
184
202
|
*/
|
|
185
203
|
enrichAnalytics: (properties: Record<string, any>) => void;
|
|
204
|
+
/**
|
|
205
|
+
* Method to interrupt the current video stream
|
|
206
|
+
* Only available for Fluent streams and when there's an active video to interrupt
|
|
207
|
+
*/
|
|
208
|
+
interrupt: (interrupt: Interrupt) => void;
|
|
186
209
|
}
|
|
187
210
|
export {};
|
|
@@ -9,6 +9,15 @@ export declare enum StreamingState {
|
|
|
9
9
|
Start = "START",
|
|
10
10
|
Stop = "STOP"
|
|
11
11
|
}
|
|
12
|
+
export declare enum ConnectivityState {
|
|
13
|
+
Strong = "STRONG",
|
|
14
|
+
Weak = "WEAK",
|
|
15
|
+
Unknown = "UNKNOWN"
|
|
16
|
+
}
|
|
17
|
+
export declare enum AgentActivityState {
|
|
18
|
+
Idle = "IDLE",
|
|
19
|
+
Talking = "TALKING"
|
|
20
|
+
}
|
|
12
21
|
export declare enum StreamEvents {
|
|
13
22
|
ChatAnswer = "chat/answer",
|
|
14
23
|
ChatPartial = "chat/partial",
|
|
@@ -17,6 +26,7 @@ export declare enum StreamEvents {
|
|
|
17
26
|
StreamFailed = "stream/error",
|
|
18
27
|
StreamReady = "stream/ready",
|
|
19
28
|
StreamCreated = "stream/created",
|
|
29
|
+
StreamInterrupt = "stream/interrupt",
|
|
20
30
|
StreamVideoCreated = "stream-video/started",
|
|
21
31
|
StreamVideoDone = "stream-video/done",
|
|
22
32
|
StreamVideoError = "stream-video/error",
|
|
@@ -31,21 +41,27 @@ export declare enum ConnectionState {
|
|
|
31
41
|
Completed = "completed",
|
|
32
42
|
Disconnected = "disconnected"
|
|
33
43
|
}
|
|
44
|
+
export declare enum StreamType {
|
|
45
|
+
Legacy = "legacy",
|
|
46
|
+
Fluent = "fluent"
|
|
47
|
+
}
|
|
34
48
|
export interface ManagerCallbacks {
|
|
35
49
|
onMessage?: (event: string, data: string) => void;
|
|
36
50
|
onConnectionStateChange?: (state: ConnectionState) => void;
|
|
37
51
|
onVideoStateChange?: (state: StreamingState, report?: VideoRTCStatsReport) => void;
|
|
38
52
|
onSrcObjectReady?: (value: MediaStream) => void;
|
|
39
53
|
onError?: (error: Error, errorData: object) => void;
|
|
54
|
+
onConnectivityStateChange?: (state: ConnectivityState) => void;
|
|
55
|
+
onAgentActivityStateChange?: (state: AgentActivityState) => void;
|
|
40
56
|
}
|
|
41
57
|
export type ManagerCallbackKeys = keyof ManagerCallbacks;
|
|
42
58
|
export interface TalkStreamOptions extends CreateTalkStreamRequest {
|
|
43
59
|
videoType: VideoType.Talk;
|
|
44
|
-
|
|
60
|
+
fluent?: boolean;
|
|
45
61
|
}
|
|
46
62
|
export interface ClipStreamOptions extends CreateClipStreamRequest {
|
|
47
63
|
videoType: VideoType.Clip;
|
|
48
|
-
|
|
64
|
+
fluent?: boolean;
|
|
49
65
|
}
|
|
50
66
|
export type CreateStreamOptions = TalkStreamOptions | ClipStreamOptions;
|
|
51
67
|
export type PayloadType<T> = T extends TalkStreamOptions ? SendTalkStreamPayload : T extends ClipStreamOptions ? SendClipStreamPayload : never;
|
|
@@ -60,13 +76,13 @@ export interface StreamingManagerOptions {
|
|
|
60
76
|
callbacks: ManagerCallbacks;
|
|
61
77
|
baseURL?: string;
|
|
62
78
|
debug?: boolean;
|
|
63
|
-
warmup?: boolean;
|
|
64
79
|
auth: Auth;
|
|
65
80
|
analytics: Analytics;
|
|
66
81
|
}
|
|
67
82
|
export interface SlimRTCStatsReport {
|
|
68
83
|
index: number;
|
|
69
84
|
codec: string;
|
|
85
|
+
rtt: number;
|
|
70
86
|
duration?: number;
|
|
71
87
|
bitrate?: number;
|
|
72
88
|
timestamp: any;
|
|
@@ -77,6 +93,8 @@ export interface SlimRTCStatsReport {
|
|
|
77
93
|
framesDecoded: any;
|
|
78
94
|
jitter: any;
|
|
79
95
|
jitterBufferDelay: number;
|
|
96
|
+
jitterBufferEmittedCount: number;
|
|
97
|
+
avgJitterDelayInInterval: number;
|
|
80
98
|
frameWidth: any;
|
|
81
99
|
frameHeight: any;
|
|
82
100
|
framesPerSecond: any;
|
|
@@ -94,9 +112,16 @@ export interface AnalyticsRTCStatsReport {
|
|
|
94
112
|
framesDecoded: number;
|
|
95
113
|
jitter: number;
|
|
96
114
|
jitterBufferDelay: number;
|
|
115
|
+
jitterBufferEmittedCount: number;
|
|
116
|
+
avgJitterDelayInInterval: number;
|
|
97
117
|
framesPerSecond: number;
|
|
98
118
|
freezeCount: number;
|
|
99
119
|
freezeDuration: number;
|
|
100
120
|
lowFpsCount?: number;
|
|
101
121
|
causes?: string[];
|
|
102
122
|
}
|
|
123
|
+
export interface StreamInterruptPayload {
|
|
124
|
+
type: StreamEvents.StreamInterrupt;
|
|
125
|
+
videoId: string;
|
|
126
|
+
timestamp: number;
|
|
127
|
+
}
|
|
@@ -50,4 +50,4 @@ export interface Stream_LLM_Script {
|
|
|
50
50
|
stream_audio?: boolean;
|
|
51
51
|
}
|
|
52
52
|
export type StreamScript = Stream_Text_Script | Stream_Audio_Script | Stream_LLM_Script;
|
|
53
|
-
export type
|
|
53
|
+
export type SupportedStreamScript = Stream_Text_Script | Stream_Audio_Script;
|
|
@@ -10,4 +10,6 @@ export declare function getAnalyticsInfo(agent: Agent): {
|
|
|
10
10
|
provider: import('../types/index').Providers | undefined;
|
|
11
11
|
};
|
|
12
12
|
};
|
|
13
|
+
export declare const sumFunc: (numbers: number[]) => number;
|
|
14
|
+
export declare const average: (numbers: number[]) => number;
|
|
13
15
|
export declare function getStreamAnalyticsProps(data: any, agent: Agent, additionalProps: Record<string, any>): any;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export declare const sleep: (ms: number) => Promise<unknown>;
|
|
2
|
-
export declare const getRandom: () => string;
|
|
2
|
+
export declare const getRandom: (length?: number) => string;
|
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.
|
|
4
|
+
"version": "1.1.0-beta.20",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "d-id client sdk",
|
|
7
7
|
"repository": {
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@preact/preset-vite": "^2.8.1",
|
|
36
36
|
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
|
|
37
|
-
"@types/node": "^
|
|
37
|
+
"@types/node": "^22.15.0",
|
|
38
38
|
"commander": "^11.1.0",
|
|
39
39
|
"glob": "^10.3.10",
|
|
40
40
|
"preact": "^10.19.6",
|