@d-id/client-sdk 1.0.19-beta.90 → 1.0.19-beta.91
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 +417 -380
- package/dist/index.umd.cjs +1 -1
- package/dist/src/api/agents.d.ts +1 -1
- package/dist/src/api/clipStream.d.ts +1 -1
- package/dist/src/api/getClient.d.ts +1 -1
- package/dist/src/api/knowledge.d.ts +1 -1
- package/dist/src/api/talkStream.d.ts +1 -1
- package/dist/src/types/entities/agents/manager.d.ts +4 -0
- package/dist/src/types/stream/stream.d.ts +1 -0
- package/package.json +1 -1
package/dist/index.umd.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(h,T){typeof exports=="object"&&typeof module<"u"?T(exports):typeof define=="function"&&define.amd?define(["exports"],T):(h=typeof globalThis<"u"?globalThis:h||self,T(h.index={}))})(this,function(h){"use strict";var T=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(T||{}),B=(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))(B||{}),V=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(V||{}),A=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e))(A||{}),P=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(P||{}),W=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(W||{}),j=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(j||{}),H=(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))(H||{}),p=(e=>(e.Clip="clip",e.Talk="talk",e))(p||{}),N=(e=>(e.Start="START",e.Stop="STOP",e))(N||{}),$=(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))($||{}),M=(e=>(e[e.New=0]="New",e[e.Fail=1]="Fail",e[e.Connected=2]="Connected",e[e.Connecting=3]="Connecting",e[e.Terminating=4]="Terminating",e))(M||{}),J=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(J||{}),q=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(q||{});const b="https://api.d-id.com",ne="wss://notifications.d-id.com",re="79f81a83a67430be2bc0fd61042b8faa",O=()=>Math.random().toString(16).slice(2);function Q(){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 ie=O();function X(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}.${Q()}_${ie}`;throw new Error(`Unknown auth type: ${e}`)}function F(e,i=b){const t=async(n,r)=>{const a=await fetch(i+(n!=null&&n.startsWith("/")?n:`/${n}`),{...r,headers:{...r==null?void 0:r.headers,Authorization:X(e),"Content-Type":"application/json"}});if(!a.ok){let o=await a.text().catch(()=>"Failed to fetch");throw new Error(o)}return a.json()};return{get(n,r){return t(n,{...r,method:"GET"})},post(n,r,a){return t(n,{...a,body:JSON.stringify(r),method:"POST"})},delete(n,r,a){return t(n,{...a,body:JSON.stringify(r),method:"DELETE"})},patch(n,r,a){return t(n,{...a,body:JSON.stringify(r),method:"PATCH"})}}}function Y(e,i=b){const t=F(e,`${i}/agents`);return{create(n,r){return t.post("/",n,r)},getAgents(n,r){return t.get(`/${n?`?tag=${n}`:""}`,r).then(a=>a??[])},getById(n,r){return t.get(`/${n}`,r)},delete(n,r){return t.delete(`/${n}`,void 0,r)},update(n,r,a){return t.patch(`/${n}`,r,a)},newChat(n,r){return t.post(`/${n}/chat`,void 0,r)},chat(n,r,a,o){return t.post(`/${n}/chat/${r}`,a,o)},createRating(n,r,a,o){return t.post(`/${n}/chat/${r}/ratings`,a,o)},updateRating(n,r,a,o,d){return t.patch(`/${n}/chat/${r}/ratings/${a}`,o,d)},deleteRating(n,r,a,o){return t.delete(`/${n}/chat/${r}/ratings/${a}`,o)}}}const ae=e=>new Promise(i=>setTimeout(i,e));function se(e){return new Promise((i,t)=>{const{callbacks:n,host:r,auth:a}=e,{onMessage:o=null,onOpen:d=null,onClose:g=null,onError:u=null}=n||{},y=new WebSocket(`${r}?authorization=${X(a)}`);y.onmessage=o,y.onclose=g,y.onerror=v=>{console.error(v),u==null||u("Websocket failed to connect",v),t(v)},y.onopen=v=>{d==null||d(v),i(y)}})}async function oe(e){const{retries:i=1}=e;let t=null;for(let n=0;(t==null?void 0:t.readyState)!==WebSocket.OPEN;n++)try{t=await se(e)}catch(r){if(n===i)throw r;await ae(n*500)}return t}async function Z(e,i,t){const n=t!=null&&t.onMessage?[t.onMessage]:[],r=await oe({auth:e,host:i,callbacks:{onError:t==null?void 0:t.onError,onMessage:a=>{const o=JSON.parse(a.data);n.forEach(d=>d(o.event,o))}}});return{socket:r,disconnect:()=>r.close(),subscribeToEvents:a=>n.push(a)}}function ce(e,i,t){const n=F(e,`${i}/agents/${t}`);return{createStream(r){return n.post("/streams",{driver_id:r.driver_id,presenter_id:r.presenter_id,compatibility_mode:r.compatibility_mode,stream_warmup:r.stream_warmup,type:p.Clip})},startConnection(r,a,o){return n.post(`/streams/${r}/sdp`,{session_id:o,answer:a,type:p.Clip})},addIceCandidate(r,a,o){return n.post(`/streams/${r}/ice`,{session_id:o,...a,type:p.Clip})},sendStreamRequest(r,a,o){return n.post(`/streams/${r}`,{session_id:a,...o,type:p.Clip})},close(r,a){return n.delete(`/streams/${r}`,{session_id:a,type:p.Clip})}}}function de(e,i,t){const n=F(e,`${i}/agents/${t}`);return{createStream(r,a){return n.post("/streams",{source_url:r.source_url,driver_url:r.driver_url,face:r.face,config:r.config,compatibility_mode:r.compatibility_mode,stream_warmup:r.stream_warmup,output_resolution:r.output_resolution,type:p.Talk},a)},startConnection(r,a,o,d){return n.post(`/streams/${r}/sdp`,{session_id:o,answer:a,type:p.Talk},d)},addIceCandidate(r,a,o,d){return n.post(`/streams/${r}/ice`,{session_id:o,...a,type:p.Talk},d)},sendStreamRequest(r,a,o,d){return n.post(`/streams/${r}`,{session_id:a,...o,type:p.Talk},d)},close(r,a,o){return n.delete(`/streams/${r}`,{session_id:a,type:p.Talk},o)}}}let G=!1;const R=(e,i)=>G&&console.log(e,i),ge=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function ee(e){switch(e){case"connected":return M.Connected;case"checking":return M.Connecting;case"failed":return M.Fail;case"new":case"closed":case"disconnected":default:return M.New}}function le(){let e=0;return i=>{for(const t of i.values())if(t&&t.type==="inbound-rtp"&&t.kind==="video"){const n=t.bytesReceived,r=n-e>0;return e=n,r}return!1}}function ue(e,i,t){const r=Math.max(Math.ceil(10),1);let a=0,o=!1;const d=le();return setInterval(async()=>{const g=await e.getStats();d(g)?(a=0,o||(i==null||i(N.Start),o=!0)):o&&(a++,a>=r&&(i==null||i(N.Stop),o=!1))},100)}async function me(e,i,{debug:t=!1,callbacks:n,auth:r,analytics:a,baseURL:o=b}){G=t;let d;const{startConnection:g,sendStreamRequest:u,close:y,createStream:v,addIceCandidate:E}=i.videoType===p.Clip?ce(r,o,e):de(r,o,e),{id:S,offer:z,ice_servers:D,session_id:I}=await v(i),s=new ge({iceServers:D}),m=s.createDataChannel("JanusDataChannel");if(!I)throw new Error("Could not create session_id");const l=ue(s,n.onVideoStateChange);s.onicecandidate=c=>{R("peerConnection.onicecandidate",c),c.candidate&&c.candidate.sdpMid&&c.candidate.sdpMLineIndex!==null?E(S,{candidate:c.candidate.candidate,sdpMid:c.candidate.sdpMid,sdpMLineIndex:c.candidate.sdpMLineIndex},I):E(S,{candidate:null},I)},s.oniceconnectionstatechange=()=>{var w;R("peerConnection.oniceconnectionstatechange => "+s.iceConnectionState);const c=ee(s.iceConnectionState);c===M.Connected?d=setTimeout(()=>{var C;(C=n.onConnectionStateChange)==null||C.call(n,M.Connected)},5e3):(clearTimeout(d),(w=n.onConnectionStateChange)==null||w.call(n,c))},s.ontrack=c=>{var w;R("peerConnection.ontrack",c),(w=n.onSrcObjectReady)==null||w.call(n,c.streams[0])},m.onmessage=c=>{var w;if(m.readyState==="open"){const[C,_]=c.data.split(":");C===$.StreamReady&&(clearTimeout(d),(w=n.onConnectionStateChange)==null||w.call(n,M.Connected))}},await s.setRemoteDescription(z),R("set remote description OK");const f=await s.createAnswer();return R("create answer OK"),await s.setLocalDescription(f),R("set local description OK"),await g(S,f,I),R("start connection OK"),{speak(c){return u(S,I,c)},async disconnect(){var c,w,C;if(S){if(s){if(ee(s.iceConnectionState)===M.New){(c=n.onVideoStateChange)==null||c.call(n,N.Stop),clearInterval(l);return}s.close(),s.oniceconnectionstatechange=null,s.onnegotiationneeded=null,s.onicecandidate=null,s.ontrack=null}try{await y(S,I).catch(_=>{})}catch(_){R("Error on close stream connection",_)}(w=n.onConnectionStateChange)==null||w.call(n,M.New),(C=n.onVideoStateChange)==null||C.call(n,N.Stop),clearInterval(l)}},sessionId:I,streamId:S}}function we(e){const i={token:e.token||"testKey",distinct_id:e.distinctId||Q(),isEnabled:e.isEnabled??!0,agentId:e.agent.id,owner_id:e.agent.owner_id??""};return{...i,getRandom:()=>Math.random().toString(16).slice(2),track(t,n){if(!this.isEnabled)return Promise.reject("MixPanel analytics is disabled on creation");const r={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:t,properties:{...n,...i,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}}])})};return fetch("https://api-js.mixpanel.com/track/?verbose=1&ip=1",r).then(a=>a.json()).catch(a=>console.error(a))}}}function he(e){var n,r,a,o,d;const i=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop";return{$os:`${(()=>{const g=navigator.platform;return g.toLowerCase().includes("win")?"Windows":g.toLowerCase().includes("mac")?"Mac OS X":g.toLowerCase().includes("linux")?"Linux":"Unknown"})()}`,isMobile:`${i()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:(n=e.presenter)==null?void 0:n.type,agentVoice:{voiceId:(a=(r=e.presenter)==null?void 0:r.voice)==null?void 0:a.voice_id,provider:(d=(o=e.presenter)==null?void 0:o.voice)==null?void 0:d.type}}}const fe=1080;function pe(e,i){if(e.presenter){if(e.presenter.type===p.Clip)return{videoType:p.Clip,driver_id:e.presenter.driver_id,presenter_id:e.presenter.presenter_id,stream_warmup:!0}}else throw new Error("Presenter is not initialized");const t=i||(e.presenter.stitch?fe:void 0);return{videoType:p.Talk,source_url:e.presenter.source_url,stream_warmup:!0,...t&&{output_resolution:t}}}function te(e,i,t,n,r){return new Promise(async(a,o)=>{let d=r;const g=await me(e.id,pe(e,i.outputResolution),{...i,analytics:n,callbacks:{...i.callbacks,onConnectionStateChange:async u=>{var y,v;if(u===M.Connected)try{d||(d=await t.newChat(e.id),n.track("agent-chat",{event:"created",chat_id:d.id,agent_id:e.id})),g&&a({chat:d,streamingManager:g})}catch(E){console.error(E),o("Cannot create new chat")}else u===M.Fail&&o(new Error("Cannot create connection"));(v=(y=i.callbacks).onConnectionStateChange)==null||v.call(y,u)},onVideoStateChange(u){var y,v;(v=(y=i.callbacks).onVideoStateChange)==null||v.call(y,u)}}}).catch(o)})}function ye(e,i,t){return Y(i,t||b).getById(e)}function U(e){let i="";if(e.greetings&&e.greetings.length>0){const t=Math.floor(Math.random()*e.greetings.length);i=e.greetings[t]}else i=`Hi! I'm ${e.preview_name}, welcome to agents. How can I help you?`;return[{content:i,id:O(),role:"assistant",created_at:new Date().toISOString()}]}async function ve(e,i){var z,D,I;const t={messages:[],chatMode:i.mode||A.Functional};let n=-1;const r=i.wsURL||ne,a=i.baseURL||b,o=i.mixpanelKey||re,d=Y(i.auth,a),g=await d.getById(e);t.messages=U(g),(D=(z=i.callbacks).onNewMessage)==null||D.call(z,t.messages);const u=we({token:o,agent:g,...i});u.track("agent-sdk",{event:"loaded",...he(g)});const y={onMessage:(s,m)=>{var l,f;if("content"in m){const{content:c}=m,w=t.messages[t.messages.length-1];(w==null?void 0:w.role)==="assistant"&&(n<t.messages.length&&(w.content=s===P.Partial?w.content+c:c),s===P.Answer&&(n=t.messages.length)),s===P.Answer&&u.track("agent-message-received",{messages:t.messages.length}),(f=(l=i.callbacks).onNewMessage)==null||f.call(l,t.messages)}else if([$.StreamVideoCreated,$.StreamVideoDone,$.StreamVideoError,$.StreamVideoRejected].includes(s)){const c=s.split("/")[1];u.track("agent-video",{...m,event:c})}}};async function v(){var f,c,w,C,_;const s=await Z(i.auth,r,y),{streamingManager:m,chat:l}=await te(g,i,d,u,t.chat);n=-1,t.messages.length===0&&(t.messages=U(g),(c=(f=i.callbacks).onNewMessage)==null||c.call(f,t.messages)),l!=null&&l.id&&l.id!==((w=t.chat)==null?void 0:w.id)&&((_=(C=i.callbacks).onNewChat)==null||_.call(C,l==null?void 0:l.id)),t.streamingManager=m,t.socketManager=s,t.chat=l,S(A.Functional),u.track("agent-chat",{event:"connect",chatId:l.id,agentId:g.id})}async function E(){var s,m,l,f,c;(s=t.socketManager)==null||s.disconnect(),await((m=t.streamingManager)==null?void 0:m.disconnect()),delete t.streamingManager,delete t.socketManager,t.messages=U(g),(f=(l=i.callbacks).onNewMessage)==null||f.call(l,t.messages),u.track("agent-chat",{event:"disconnect",chatId:(c=t.chat)==null?void 0:c.id,agentId:g.id})}async function S(s){var m,l;s!==t.chatMode&&(u.track("agent-mode-change",{mode:s}),t.chatMode=s,t.chatMode!==A.Functional&&await E(),(l=(m=i.callbacks).onModeChange)==null||l.call(m,s))}return{agent:g,starterMessages:((I=g.knowledge)==null?void 0:I.starter_message)||[],connect:v,disconnect:E,changeMode:S,async reconnect(){var f,c;if(!t.chat)return v();(f=t.socketManager)==null||f.disconnect(),await((c=t.streamingManager)==null?void 0:c.disconnect());const s=await Z(i.auth,r,y),{streamingManager:m,chat:l}=await te(g,i,d,u,t.chat);t.streamingManager=m,t.socketManager=s,S(A.Functional),u.track("agent-chat",{event:"reconnect",chatId:l.id,agentId:g.id})},async chat(s,m=!1){var f,c,w,C,_,x;const l=O();try{const k=Date.now();if(s.length>=800)throw new Error("Message cannot be more than 800 characters");if(s.length===0)throw new Error("Message cannot be empty");if(t.chatMode===A.Maintenance)throw new Error("Chat is in maintenance mode");if(![A.TextOnly,A.Playground].includes(t.chatMode)){if(!t.streamingManager)throw new Error("Streaming manager is not initialized");if(!t.chat)throw new Error("Chat is not initialized")}t.messages.push({id:O(),role:"user",content:s,created_at:new Date(k).toISOString()}),(c=(f=i.callbacks).onNewMessage)==null||c.call(f,t.messages),t.chat||(t.chat=await d.newChat(g.id));const K={id:l,role:"assistant",content:"",created_at:new Date().toISOString(),matches:[]};t.messages.push(K);const L=await d.chat(g.id,t.chat.id,{sessionId:(w=t.streamingManager)==null?void 0:w.sessionId,streamId:(C=t.streamingManager)==null?void 0:C.streamId,messages:t.messages.slice(0,-1),chatMode:t.chatMode,append_chat:m});return u.track("agent-message-send",{event:"success",messages:t.messages.length+1}),K.context=L.context,L.result&&(K.content=L.result,K.matches=L.matches,u.track("agent-message-received",{latency:Date.now()-k,messages:t.messages.length}),(x=(_=i.callbacks).onNewMessage)==null||x.call(_,t.messages)),L}catch(k){throw t.messages[t.messages.length-1].id===l&&t.messages.pop(),u.track("agent-message-send",{event:"error",messages:t.messages.length}),k}},rate(s,m,l){var w,C,_,x;const f=t.messages.find(k=>k.id===s);if(t.chat){if(!f)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const c=((w=f.matches)==null?void 0:w.map(k=>[k.document_id,k.id]))??[];return u.track("agent-rate",{event:l?"update":"create",thumb:m===1?"up":"down",knowledge_id:((C=g.knowledge)==null?void 0:C.id)??"",matches:c,score:m}),l?d.updateRating(g.id,t.chat.id,l,{knowledge_id:((_=g.knowledge)==null?void 0:_.id)??"",message_id:s,matches:c,score:m}):d.createRating(g.id,t.chat.id,{knowledge_id:((x=g.knowledge)==null?void 0:x.id)??"",message_id:s,matches:c,score:m})},deleteRate(s){var m;if(!t.chat)throw new Error("Chat is not initialized");return u.track("agent-rate-delete",{type:"text",chat_id:(m=t.chat)==null?void 0:m.id,id:s}),d.deleteRating(g.id,t.chat.id,s)},speak(s){if(!t.streamingManager)throw new Error("Streaming manager is not initialized");function m(){if(g.presenter){if(s.type==="text")return{type:"text",provider:s.provider?s.provider:g.presenter.voice,input:s.input,ssml:s.ssml||!1};if(s.type==="audio")return{type:"audio",audio_url:s.audio_url}}else throw new Error("Presenter is not initialized");throw new Error("Invalid payload")}const l=m();return u.track("agent-speak",l),t.streamingManager.speak({script:l})}}}h.ChatMode=A,h.ChatProgress=P,h.ConnectionState=M,h.DocumentType=H,h.KnowledgeType=j,h.PlanGroup=B,h.Providers=J,h.RateState=V,h.StreamEvents=$,h.StreamingState=N,h.Subject=W,h.UserPlan=T,h.VideoType=p,h.VoiceAccess=q,h.createAgentManager=ve,h.getAgent=ye,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(h,P){typeof exports=="object"&&typeof module<"u"?P(exports):typeof define=="function"&&define.amd?define(["exports"],P):(h=typeof globalThis<"u"?globalThis:h||self,P(h.index={}))})(this,function(h){"use strict";var P=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(P||{}),H=(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))(H||{}),J=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(J||{}),k=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e))(k||{}),x=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(x||{}),q=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(q||{}),Q=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(Q||{}),X=(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))(X||{}),M=(e=>(e.Clip="clip",e.Talk="talk",e))(M||{}),b=(e=>(e.Start="START",e.Stop="STOP",e))(b||{}),A=(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))(A||{}),_=(e=>(e[e.New=0]="New",e[e.Fail=1]="Fail",e[e.Connected=2]="Connected",e[e.Connecting=3]="Connecting",e[e.Terminating=4]="Terminating",e))(_||{}),Y=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(Y||{}),Z=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(Z||{});const L="https://api.d-id.com",ce="wss://notifications.d-id.com",de="79f81a83a67430be2bc0fd61042b8faa",F=()=>Math.random().toString(16).slice(2);function G(){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 ge=F();function ee(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}.${G()}_${ge}`;throw new Error(`Unknown auth type: ${e}`)}function V(e,a=L,t){const i=async(r,n)=>{const s=await fetch(a+(r!=null&&r.startsWith("/")?r:`/${r}`),{...n,headers:{...n==null?void 0:n.headers,Authorization:ee(e),"Content-Type":"application/json"}});if(!s.ok){let o=await s.text().catch(()=>"Failed to fetch");throw t&&t(new Error(o),{url:r,options:n,headers:s.headers}),new Error(o)}return s.json()};return{get(r,n){return i(r,{...n,method:"GET"})},post(r,n,s){return i(r,{...s,body:JSON.stringify(n),method:"POST"})},delete(r,n,s){return i(r,{...s,body:JSON.stringify(n),method:"DELETE"})},patch(r,n,s){return i(r,{...s,body:JSON.stringify(n),method:"PATCH"})}}}function te(e,a=L,t){const i=V(e,`${a}/agents`,t);return{create(r,n){return i.post("/",r,n)},getAgents(r,n){return i.get(`/${r?`?tag=${r}`:""}`,n).then(s=>s??[])},getById(r,n){return i.get(`/${r}`,n)},delete(r,n){return i.delete(`/${r}`,void 0,n)},update(r,n,s){return i.patch(`/${r}`,n,s)},newChat(r,n){return i.post(`/${r}/chat`,void 0,n)},chat(r,n,s,o){return i.post(`/${r}/chat/${n}`,s,o)},createRating(r,n,s,o){return i.post(`/${r}/chat/${n}/ratings`,s,o)},updateRating(r,n,s,o,c){return i.patch(`/${r}/chat/${n}/ratings/${s}`,o,c)},deleteRating(r,n,s,o){return i.delete(`/${r}/chat/${n}/ratings/${s}`,o)}}}const le=e=>new Promise(a=>setTimeout(a,e));function ue(e){return new Promise((a,t)=>{const{callbacks:i,host:r,auth:n}=e,{onMessage:s=null,onOpen:o=null,onClose:c=null,onError:m=null}=i||{},C=new WebSocket(`${r}?authorization=${ee(n)}`);C.onmessage=s,C.onclose=c,C.onerror=v=>{console.error(v),m==null||m("Websocket failed to connect",v),t(v)},C.onopen=v=>{o==null||o(v),a(C)}})}async function me(e){const{retries:a=1}=e;let t=null;for(let i=0;(t==null?void 0:t.readyState)!==WebSocket.OPEN;i++)try{t=await ue(e)}catch(r){if(i===a)throw r;await le(i*500)}return t}async function ne(e,a,t){const i=t!=null&&t.onMessage?[t.onMessage]:[],r=await me({auth:e,host:a,callbacks:{onError:t==null?void 0:t.onError,onMessage:n=>{const s=JSON.parse(n.data);i.forEach(o=>o(s.event,s))}}});return{socket:r,disconnect:()=>r.close(),subscribeToEvents:n=>i.push(n)}}function we(e,a,t,i){const r=V(e,`${a}/agents/${t}`,i);return{createStream(n){return r.post("/streams",{driver_id:n.driver_id,presenter_id:n.presenter_id,compatibility_mode:n.compatibility_mode,stream_warmup:n.stream_warmup,type:M.Clip})},startConnection(n,s,o){return r.post(`/streams/${n}/sdp`,{session_id:o,answer:s,type:M.Clip})},addIceCandidate(n,s,o){return r.post(`/streams/${n}/ice`,{session_id:o,...s,type:M.Clip})},sendStreamRequest(n,s,o){return r.post(`/streams/${n}`,{session_id:s,...o,type:M.Clip})},close(n,s){return r.delete(`/streams/${n}`,{session_id:s,type:M.Clip})}}}function he(e,a,t,i){const r=V(e,`${a}/agents/${t}`,i);return{createStream(n,s){return r.post("/streams",{source_url:n.source_url,driver_url:n.driver_url,face:n.face,config:n.config,compatibility_mode:n.compatibility_mode,stream_warmup:n.stream_warmup,output_resolution:n.output_resolution,type:M.Talk},s)},startConnection(n,s,o,c){return r.post(`/streams/${n}/sdp`,{session_id:o,answer:s,type:M.Talk},c)},addIceCandidate(n,s,o,c){return r.post(`/streams/${n}/ice`,{session_id:o,...s,type:M.Talk},c)},sendStreamRequest(n,s,o,c){return r.post(`/streams/${n}`,{session_id:s,...o,type:M.Talk},c)},close(n,s,o){return r.delete(`/streams/${n}`,{session_id:s,type:M.Talk},o)}}}let re=!1;const $=(e,a)=>re&&console.log(e,a),fe=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function ae(e){switch(e){case"connected":return _.Connected;case"checking":return _.Connecting;case"failed":return _.Fail;case"new":case"closed":case"disconnected":default:return _.New}}function pe(){let e=0;return a=>{for(const t of a.values())if(t&&t.type==="inbound-rtp"&&t.kind==="video"){const i=t.bytesReceived,r=i-e>0;return e=i,r}return!1}}function ye(e,a,t){const r=Math.max(Math.ceil(10),1);let n=0,s=!1;const o=pe();return setInterval(async()=>{const c=await e.getStats();o(c)?(n=0,s||(a==null||a(b.Start),s=!0)):s&&(n++,n>=r&&(a==null||a(b.Stop),s=!1))},100)}async function ve(e,a,{debug:t=!1,callbacks:i,auth:r,analytics:n,baseURL:s=L}){re=t;let o;const{startConnection:c,sendStreamRequest:m,close:C,createStream:v,addIceCandidate:E}=a.videoType===M.Clip?we(r,s,e,i.onError):he(r,s,e,i.onError),{id:I,offer:W,ice_servers:z,session_id:R}=await v(a),f=new fe({iceServers:z}),d=f.createDataChannel("JanusDataChannel");if(!R)throw new Error("Could not create session_id");const u=ye(f,i.onVideoStateChange);f.onicecandidate=g=>{$("peerConnection.onicecandidate",g),g.candidate&&g.candidate.sdpMid&&g.candidate.sdpMLineIndex!==null?E(I,{candidate:g.candidate.candidate,sdpMid:g.candidate.sdpMid,sdpMLineIndex:g.candidate.sdpMLineIndex},R):E(I,{candidate:null},R)},f.oniceconnectionstatechange=()=>{var w;$("peerConnection.oniceconnectionstatechange => "+f.iceConnectionState);const g=ae(f.iceConnectionState);g===_.Connected?o=setTimeout(()=>{var p;(p=i.onConnectionStateChange)==null||p.call(i,_.Connected)},5e3):(clearTimeout(o),(w=i.onConnectionStateChange)==null||w.call(i,g))},f.ontrack=g=>{var w;$("peerConnection.ontrack",g),(w=i.onSrcObjectReady)==null||w.call(i,g.streams[0])},d.onmessage=g=>{var w;if(d.readyState==="open"){const[p,y]=g.data.split(":");p===A.StreamReady&&(clearTimeout(o),(w=i.onConnectionStateChange)==null||w.call(i,_.Connected))}},await f.setRemoteDescription(W),$("set remote description OK");const l=await f.createAnswer();return $("create answer OK"),await f.setLocalDescription(l),$("set local description OK"),await c(I,l,R),$("start connection OK"),{speak(g){return m(I,R,g)},async disconnect(){var g,w,p;if(I){if(f){if(ae(f.iceConnectionState)===_.New){(g=i.onVideoStateChange)==null||g.call(i,b.Stop),clearInterval(u);return}f.close(),f.oniceconnectionstatechange=null,f.onnegotiationneeded=null,f.onicecandidate=null,f.ontrack=null}try{await C(I,R).catch(y=>{})}catch(y){$("Error on close stream connection",y)}(w=i.onConnectionStateChange)==null||w.call(i,_.New),(p=i.onVideoStateChange)==null||p.call(i,b.Stop),clearInterval(u)}},sessionId:R,streamId:I}}function Me(e){const a={token:e.token||"testKey",distinct_id:e.distinctId||G(),isEnabled:e.isEnabled??!0,agentId:e.agent.id,owner_id:e.agent.owner_id??""};return{...a,getRandom:()=>Math.random().toString(16).slice(2),track(t,i){if(!this.isEnabled)return Promise.reject("MixPanel analytics is disabled on creation");const r={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:t,properties:{...i,...a,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}}])})};return fetch("https://api-js.mixpanel.com/track/?verbose=1&ip=1",r).then(n=>n.json()).catch(n=>console.error(n))}}}function Ce(e){var i,r,n,s,o;const a=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop";return{$os:`${(()=>{const c=navigator.platform;return c.toLowerCase().includes("win")?"Windows":c.toLowerCase().includes("mac")?"Mac OS X":c.toLowerCase().includes("linux")?"Linux":"Unknown"})()}`,isMobile:`${a()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:(i=e.presenter)==null?void 0:i.type,agentVoice:{voiceId:(n=(r=e.presenter)==null?void 0:r.voice)==null?void 0:n.voice_id,provider:(o=(s=e.presenter)==null?void 0:s.voice)==null?void 0:o.type}}}const Se=1080;function _e(e,a){if(e.presenter){if(e.presenter.type===M.Clip)return{videoType:M.Clip,driver_id:e.presenter.driver_id,presenter_id:e.presenter.presenter_id,stream_warmup:!0}}else throw new Error("Presenter is not initialized");const t=a||(e.presenter.stitch?Se:void 0);return{videoType:M.Talk,source_url:e.presenter.source_url,stream_warmup:!0,...t&&{output_resolution:t}}}function B(e,a,t,i,r){return new Promise(async(n,s)=>{let o=r;const c=await ve(e.id,_e(e,a.outputResolution),{...a,analytics:i,callbacks:{...a.callbacks,onConnectionStateChange:async m=>{var C,v;if(m===_.Connected)try{o||(o=await t.newChat(e.id),i.track("agent-chat",{event:"created",chat_id:o.id,agent_id:e.id})),c&&n({chat:o,streamingManager:c})}catch(E){console.error(E),s("Cannot create new chat")}else m===_.Fail&&s(new Error("Cannot create connection"));(v=(C=a.callbacks).onConnectionStateChange)==null||v.call(C,m)},onVideoStateChange(m){var C,v;(v=(C=a.callbacks).onVideoStateChange)==null||v.call(C,m)}}}).catch(s)})}function Ie(e,a,t){return te(a,t||L).getById(e)}function j(e){let a="";if(e.greetings&&e.greetings.length>0){const t=Math.floor(Math.random()*e.greetings.length);a=e.greetings[t]}else a=`Hi! I'm ${e.preview_name}, welcome to agents. How can I help you?`;return[{content:a,id:F(),role:"assistant",created_at:new Date().toISOString()}]}async function ke(e,a){var z,R,f;const t={messages:[],chatMode:a.mode||k.Functional};let i=-1;const r=a.wsURL||ce,n=a.baseURL||L,s=a.mixpanelKey||de,o=te(a.auth,n,a.callbacks.onError),c=await o.getById(e);t.messages=j(c),(R=(z=a.callbacks).onNewMessage)==null||R.call(z,t.messages);const m=Me({token:s,agent:c,...a});m.track("agent-sdk",{event:"loaded",...Ce(c)});const C={onMessage:(d,u)=>{var l,g,w,p;if("content"in u){const{content:y}=u,S=t.messages[t.messages.length-1];(S==null?void 0:S.role)==="assistant"&&(i<t.messages.length&&(S.content=d===x.Partial?S.content+y:y),d===x.Answer&&(i=t.messages.length)),d===x.Answer&&m.track("agent-message-received",{messages:t.messages.length}),(g=(l=a.callbacks).onNewMessage)==null||g.call(l,t.messages)}else{if([A.StreamVideoCreated,A.StreamVideoDone,A.StreamVideoError,A.StreamVideoRejected].includes(d)){const y=d.split("/")[1];m.track("agent-video",{...u,event:y})}[A.StreamFailed,A.StreamVideoError,A.StreamVideoRejected].includes(d)&&((p=(w=a.callbacks).onError)==null||p.call(w,new Error(`Stream failed with event ${d}`),{data:u}))}}};async function v(){var g,w,p,y,S;const d=await ne(a.auth,r,C),{streamingManager:u,chat:l}=await B(c,a,o,m,t.chat);i=-1,t.messages.length===0&&(t.messages=j(c),(w=(g=a.callbacks).onNewMessage)==null||w.call(g,t.messages)),l!=null&&l.id&&l.id!==((p=t.chat)==null?void 0:p.id)&&((S=(y=a.callbacks).onNewChat)==null||S.call(y,l==null?void 0:l.id)),t.streamingManager=u,t.socketManager=d,t.chat=l,I(k.Functional),m.track("agent-chat",{event:"connect",chatId:l.id,agentId:c.id})}async function E(){var d,u,l,g,w;(d=t.socketManager)==null||d.disconnect(),await((u=t.streamingManager)==null?void 0:u.disconnect()),delete t.streamingManager,delete t.socketManager,t.messages=j(c),(g=(l=a.callbacks).onNewMessage)==null||g.call(l,t.messages),m.track("agent-chat",{event:"disconnect",chatId:(w=t.chat)==null?void 0:w.id,agentId:c.id})}async function I(d){var u,l;d!==t.chatMode&&(m.track("agent-mode-change",{mode:d}),t.chatMode=d,t.chatMode!==k.Functional&&await E(),(l=(u=a.callbacks).onModeChange)==null||l.call(u,d))}async function W(){if(!t.chat)return v();const{streamingManager:d,chat:u}=await B(c,a,o,m,t.chat);t.streamingManager=d,I(k.Functional),m.track("agent-chat",{event:"reconnect",chatId:u.id,agentId:c.id})}return{agent:c,starterMessages:((f=c.knowledge)==null?void 0:f.starter_message)||[],connect:v,disconnect:E,changeMode:I,async reconnect(){var g,w;if(!t.chat)return v();(g=t.socketManager)==null||g.disconnect(),await((w=t.streamingManager)==null?void 0:w.disconnect());const d=await ne(a.auth,r,C),{streamingManager:u,chat:l}=await B(c,a,o,m,t.chat);t.streamingManager=u,t.socketManager=d,I(k.Functional),m.track("agent-chat",{event:"reconnect",chatId:l.id,agentId:c.id})},async chat(d,u=!1){var g,w,p,y,S,O,T,ie,se;const l=F();try{const D=Date.now();if(d.length>=800)throw new Error("Message cannot be more than 800 characters");if(d.length===0)throw new Error("Message cannot be empty");if(t.chatMode===k.Maintenance)throw new Error("Chat is in maintenance mode");if(![k.TextOnly,k.Playground].includes(t.chatMode)){if(!t.streamingManager)throw new Error("Streaming manager is not initialized");if(!t.chat)throw new Error("Chat is not initialized")}t.messages.push({id:F(),role:"user",content:d,created_at:new Date(D).toISOString()}),(w=(g=a.callbacks).onNewMessage)==null||w.call(g,t.messages),t.chat||(t.chat=await o.newChat(c.id));const K={id:l,role:"assistant",content:"",created_at:new Date().toISOString(),matches:[]};t.messages.push(K);const oe=t.messages.slice(0,-1);let N;try{N=await o.chat(c.id,t.chat.id,{sessionId:(p=t.streamingManager)==null?void 0:p.sessionId,streamId:(y=t.streamingManager)==null?void 0:y.streamId,messages:oe,chatMode:t.chatMode,append_chat:u})}catch(U){if((S=U==null?void 0:U.message)!=null&&S.includes("missing or invalid session_id"))console.log("Invalid stream, try reconnect with new stream id"),await W(),N=await o.chat(c.id,t.chat.id,{sessionId:(O=t.streamingManager)==null?void 0:O.sessionId,streamId:(T=t.streamingManager)==null?void 0:T.streamId,messages:oe,chatMode:t.chatMode,append_chat:u});else throw U}return m.track("agent-message-send",{event:"success",messages:t.messages.length+1}),K.context=N.context,N.result&&(K.content=N.result,K.matches=N.matches,m.track("agent-message-received",{latency:Date.now()-D,messages:t.messages.length}),(se=(ie=a.callbacks).onNewMessage)==null||se.call(ie,t.messages)),N}catch(D){throw t.messages[t.messages.length-1].id===l&&t.messages.pop(),m.track("agent-message-send",{event:"error",messages:t.messages.length}),D}},rate(d,u,l){var p,y,S,O;const g=t.messages.find(T=>T.id===d);if(t.chat){if(!g)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const w=((p=g.matches)==null?void 0:p.map(T=>[T.document_id,T.id]))??[];return m.track("agent-rate",{event:l?"update":"create",thumb:u===1?"up":"down",knowledge_id:((y=c.knowledge)==null?void 0:y.id)??"",matches:w,score:u}),l?o.updateRating(c.id,t.chat.id,l,{knowledge_id:((S=c.knowledge)==null?void 0:S.id)??"",message_id:d,matches:w,score:u}):o.createRating(c.id,t.chat.id,{knowledge_id:((O=c.knowledge)==null?void 0:O.id)??"",message_id:d,matches:w,score:u})},deleteRate(d){var u;if(!t.chat)throw new Error("Chat is not initialized");return m.track("agent-rate-delete",{type:"text",chat_id:(u=t.chat)==null?void 0:u.id,id:d}),o.deleteRating(c.id,t.chat.id,d)},speak(d){if(!t.streamingManager)throw new Error("Streaming manager is not initialized");function u(){if(c.presenter){if(d.type==="text")return{type:"text",provider:d.provider?d.provider:c.presenter.voice,input:d.input,ssml:d.ssml||!1};if(d.type==="audio")return{type:"audio",audio_url:d.audio_url}}else throw new Error("Presenter is not initialized");throw new Error("Invalid payload")}const l=u();return m.track("agent-speak",l),t.streamingManager.speak({script:l})}}}h.ChatMode=k,h.ChatProgress=x,h.ConnectionState=_,h.DocumentType=X,h.KnowledgeType=Q,h.PlanGroup=H,h.Providers=Y,h.RateState=J,h.StreamEvents=A,h.StreamingState=b,h.Subject=q,h.UserPlan=P,h.VideoType=M,h.VoiceAccess=Z,h.createAgentManager=ke,h.getAgent=Ie,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"})});
|
package/dist/src/api/agents.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Agent, AgentPayload, Auth, Chat, ChatPayload, ChatResponse, RatingEntity, RatingPayload } from '../types/index';
|
|
2
|
-
export declare function createAgentsApi(auth: Auth, host?: string): {
|
|
2
|
+
export declare function createAgentsApi(auth: Auth, host?: string, onError?: (error: Error, errorData: object) => void): {
|
|
3
3
|
create(payload: AgentPayload, options?: RequestInit): Promise<Agent>;
|
|
4
4
|
getAgents(tag?: string, options?: RequestInit): Promise<Agent[]>;
|
|
5
5
|
getById(id: string, options?: RequestInit): Promise<Agent>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { Auth, RtcApi } from '../types/index';
|
|
2
|
-
export declare function createApi(auth: Auth, host: string, agentId: string): RtcApi;
|
|
2
|
+
export declare function createApi(auth: Auth, host: string, agentId: string, onError?: (error: Error, errorData: object) => void): RtcApi;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Auth } from '../types/auth';
|
|
2
|
-
export declare function createClient(auth: Auth, host?: string): {
|
|
2
|
+
export declare function createClient(auth: Auth, host?: string, onError?: (error: Error, errorData: object) => void): {
|
|
3
3
|
get<T = any>(url: string, options?: RequestInit): Promise<T>;
|
|
4
4
|
post<T_1 = any>(url: string, body?: any, options?: RequestInit): Promise<T_1>;
|
|
5
5
|
delete<T_2 = any>(url: string, body?: any, options?: RequestInit): Promise<T_2>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Auth, CreateDocumentPayload, DocumentData, KnowledgeData, KnowledgePayload, QueryResult, RecordData } from '../types/index';
|
|
2
|
-
export declare function createKnowledgeApi(auth: Auth, host?: string): {
|
|
2
|
+
export declare function createKnowledgeApi(auth: Auth, host?: string, onError?: (error: Error, errorData: object) => void): {
|
|
3
3
|
createKnowledge(payload: KnowledgePayload, options?: RequestInit): Promise<KnowledgeData>;
|
|
4
4
|
getKnowledgeBase(options?: RequestInit): Promise<KnowledgeData[]>;
|
|
5
5
|
getKnowledge(knowledgeId: string, options?: RequestInit): Promise<KnowledgeData>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { Auth, RtcApi } from '../types/index';
|
|
2
|
-
export declare function createApi(auth: Auth, host: string, agentId: string): RtcApi;
|
|
2
|
+
export declare function createApi(auth: Auth, host: string, agentId: string, onError?: (error: Error, errorData: object) => void): RtcApi;
|
|
@@ -66,6 +66,10 @@ interface ManagerCallbacks {
|
|
|
66
66
|
* @param mode - ChatMode
|
|
67
67
|
*/
|
|
68
68
|
onModeChange?(mode: ChatMode): void;
|
|
69
|
+
/**
|
|
70
|
+
* Optional callback function that will be triggered on fetch request errors
|
|
71
|
+
*/
|
|
72
|
+
onError?: (error: Error, errorData: object) => void;
|
|
69
73
|
}
|
|
70
74
|
export interface AgentManagerOptions {
|
|
71
75
|
auth: Auth;
|
|
@@ -33,6 +33,7 @@ export interface ManagerCallbacks {
|
|
|
33
33
|
onConnectionStateChange?: (state: ConnectionState) => void;
|
|
34
34
|
onVideoStateChange?: (state: StreamingState) => void;
|
|
35
35
|
onSrcObjectReady?: (value: MediaStream) => void;
|
|
36
|
+
onError?: (error: Error, errorData: object) => void;
|
|
36
37
|
}
|
|
37
38
|
export type ManagerCallbackKeys = keyof ManagerCallbacks;
|
|
38
39
|
export interface TalkStreamOptions extends CreateTalkStreamRequest {
|