@d-id/client-sdk 1.0.19-beta.8 → 1.0.19-beta.80
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/README.md +4 -0
- package/dist/index.js +621 -398
- package/dist/index.umd.cjs +1 -1
- package/dist/src/{lib/api → api}/agents.d.ts +4 -1
- package/dist/src/api/clipStream.d.ts +2 -0
- package/dist/src/{lib/api → api}/getClient.d.ts +1 -1
- package/dist/src/{lib/api → api}/knowledge.d.ts +2 -1
- package/dist/src/api/talkStream.d.ts +2 -0
- package/dist/src/auth/getAuthHeader.d.ts +4 -0
- package/dist/src/connectToSocket.d.ts +11 -0
- package/dist/src/{lib/createAgentManager.d.ts → createAgentManager.d.ts} +4 -5
- package/dist/src/createStreamingManager.d.ts +21 -0
- package/dist/src/{lib/environment.d.ts → environment.d.ts} +0 -1
- package/dist/src/index.d.ts +2 -8
- package/dist/src/services/mixpanel.d.ts +18 -0
- package/dist/src/types/StreamScript.d.ts +1 -1
- package/dist/src/types/auth.d.ts +0 -2
- package/dist/src/types/entities/agents/agent.d.ts +24 -1
- package/dist/src/types/entities/agents/chat.d.ts +9 -5
- package/dist/src/types/entities/agents/knowledge.d.ts +1 -0
- package/dist/src/types/entities/agents/manager.d.ts +47 -25
- package/dist/src/types/index.d.ts +2 -3
- package/dist/src/types/stream/api/clip.d.ts +6 -0
- package/dist/src/types/stream/api/talk.d.ts +1 -0
- package/dist/src/types/stream/rtc.d.ts +3 -3
- package/dist/src/types/stream/stream.d.ts +20 -4
- package/dist/src/utils/analytics.d.ts +12 -0
- package/dist/src/{lib/utils → utils}/webrtc.d.ts +1 -1
- package/package.json +10 -11
- package/dist/src/lib/api/clipStream.d.ts +0 -2
- package/dist/src/lib/api/ratings.d.ts +0 -7
- package/dist/src/lib/api/talkStream.d.ts +0 -2
- package/dist/src/lib/auth/getAuthHeader.d.ts +0 -2
- package/dist/src/lib/connectToSocket.d.ts +0 -9
- package/dist/src/lib/createStreamingManager.d.ts +0 -27
package/dist/index.umd.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(s,w){typeof exports=="object"&&typeof module<"u"?w(exports):typeof define=="function"&&define.amd?define(["exports"],w):(s=typeof globalThis<"u"?globalThis:s||self,w(s.index={}))})(this,function(s){"use strict";const w="https://api.d-id.com",ee="wss://notifications.d-id.com";function b(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}.${e.externalId}`;throw new Error(`Unknown auth type: ${e}`)}function $(e,i=w){const a=async(t,n)=>{const r=await fetch(i+(t!=null&&t.startsWith("/")?t:`/${t}`),{...n,headers:{...n==null?void 0:n.headers,Authorization:b(e),"Content-Type":"application/json"}});if(!r.ok){let o=await r.text().catch(()=>"Failed to fetch");throw new Error(o)}return r.json()};return{get(t,n){return a(t,{...n,method:"GET"})},post(t,n,r){return a(t,{...r,body:JSON.stringify(n),method:"POST"})},delete(t,n,r){return a(t,{...r,body:JSON.stringify(n),method:"DELETE"})},patch(t,n,r){return a(t,{...r,body:JSON.stringify(n),method:"PATCH"})}}}function K(e,i=w){const a=$(e,`${i}/agents`);return{create(t,n){return a.post("/",t,n)},getAgents(t,n){return a.get(`/${t?`?tag=${t}`:""}`,n).then(r=>r??[])},getById(t,n){return a.get(`/${t}`,n)},delete(t,n){return a.delete(`/${t}`,void 0,n)},update(t,n,r){return a.patch(`/${t}`,n,r)},newChat(t,n){return a.post(`/${t}/chat`,void 0,n)},chat(t,n,r,o){return a.post(`/${t}/chat/${n}`,r,o)}}}function H(e,i=w){const a=$(e,`${i}/knowledge`);return{createKnowledge(t,n){return a.post("/",t,n)},getKnowledgeBase(t){return a.get("/",t)},getKnowledge(t,n){return a.get(`/${t}`,n)},deleteKnowledge(t,n){return a.delete(`/${t}`,void 0,n)},createDocument(t,n,r){return a.post(`/${t}/documents`,n,r)},deleteDocument(t,n,r){return a.delete(`/${t}/documents/${n}`,void 0,r)},getDocuments(t,n){return a.get(`/${t}/documents`,n)},getDocument(t,n,r){return a.get(`/${t}/documents/${n}`,r)},getRecords(t,n,r){return a.get(`/${t}/documents/${n}/records`,r)},query(t,n,r){return a.post(`/${t}/query`,{query:n},r)}}}function U(e,i=w){const a=$(e,`${i}/chats/ratings`);return{create(t,n){return a.post("/",t,n)},getByKnowledge(t,n){return a.get(`/${t}`,n).then(r=>r??[])},update(t,n,r){return a.patch(`/${t}`,n,r)},delete(t,n){return a.delete(`/${t}`,n)}}}const te=e=>new Promise(i=>setTimeout(i,e));function ne(e){return new Promise((i,a)=>{const{callbacks:t,host:n,auth:r}=e,{onMessage:o=null,onOpen:u=null,onClose:m=null,onError:h=null}=t||{},f=new WebSocket(`${n}?authorization=${b(r)}`);console.log(`AUTH: ${n}?authorization=${b(r)}`),f.onmessage=o,f.onclose=m,f.onerror=l=>{console.log(l),console.log(`onerror: ${l}`),h==null||h(l),a(l)},f.onopen=l=>{u==null||u(l),console.log(`oneronopenror: ${f}`),i(f)}})}async function ae(e){const{retries:i=1}=e;let a=null;for(let t=0;(a==null?void 0:a.readyState)!==WebSocket.OPEN;t++)try{a=await ne(e)}catch(n){if(t===i)throw n;await te(t*500)}return a}async function q(e,i,a){const t=a?[a]:[],n=await ae({auth:e,host:i,callbacks:{onMessage:r=>{const o=JSON.parse(r.data);console.log("WS/",r.data),t.forEach(u=>u(o.event,o))}}});return{socket:n,terminate:()=>n.close(),subscribeToEvents:r=>t.push(r)}}var z=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(z||{}),B=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(B||{}),M=(e=>(e.Start="START",e.Stop="STOP",e))(M||{}),k=(e=>(e.ChatAnswer="chat/answer",e.ChatPartial="chat/partial",e.StreamDone="stream/done",e.StreamStarted="stream/started",e))(k||{}),N=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(N||{}),J=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e))(J||{}),P=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(P||{}),D=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(D||{}),F=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(F||{}),V=(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))(V||{}),A=(e=>(e.Clip="clip",e.Talk="talk",e))(A||{});function G(e){return e.presenter.type===A.Clip?{videoType:A.Clip,driver_id:e.presenter.driver_id,presenter_id:e.presenter.presenter_id}:{videoType:A.Talk,source_url:e.presenter.source_url}}function Q(e,i,a,t){return new Promise(async(n,r)=>{const o=await Y(G(e),{...i,callbacks:{...i.callbacks,onConnectionStateChange:async u=>{var m,h;u==="connected"?(t||(t=await a.newChat(e.id)),n({chat:t,streamingManager:o})):u==="failed"&&r(new Error("Cannot create connection")),(h=(m=i.callbacks).onConnectionStateChange)==null||h.call(m,u)},onMessage:(u,m)=>{var h,f;u===k.ChatAnswer&&(console.log("ChatAnswer",u,m),(f=(h=i.callbacks).onChatEvents)==null||f.call(h,P.Answer,{content:m,event:P.Answer}))}}})})}function re(e,i,a){return K(i,a||w).getById(e)}async function ie(e,i){const a=i.baseURL||w,t=i.wsURL||ee,n=new AbortController,r=K(i.auth,a),o=U(i.auth,a),u=H(i.auth,a);console.log(`AUTH: ${i.auth.clientKey},${i.auth.externalId}, ${t}`);const m=await r.getById(e),h=await q(i.auth,t,i.callbacks.onChatEvents);let{chat:f,streamingManager:l}=await Q(m,i,r);return{agent:m,async reconnectToChat(){const{streamingManager:d}=await Q(m,i,r,f);l=d},terminate(){return n.abort(),h.terminate(),l.terminate()},chatId:f.id,chat(d){return r.chat(e,f.id,{sessionId:l.sessionId,streamId:l.streamId,messages:d},{signal:n.signal})},rate(d,p){return p?o.update(p,d):o.create(d)},deleteRate(d){return o.delete(d)},speak(d){let p;return d.type==="text"?p={script:{type:"text",provider:d.provider,input:d.input,ssml:d.ssml||!1}}:d.type==="audio"&&(p={script:{type:"audio",audio_url:d.audio_url}}),l.speak(p)},getStarterMessages(){var d,p;return(d=m.knowledge)!=null&&d.id?u.getKnowledge((p=m.knowledge)==null?void 0:p.id).then(v=>(v==null?void 0:v.starter_message)||[]):Promise.resolve([])}}}function se(e,i){const a=$(e,i);return{createStream(t){return a.post("/clips/streams",{driver_id:t.driver_id,presenter_id:t.presenter_id,compatibility_mode:t.compatibility_mode})},startConnection(t,n,r){return a.post(`/clips/streams/${t}/sdp`,{session_id:r,answer:n})},addIceCandidate(t,n,r){return a.post(`/clips/streams/${t}/ice`,{session_id:r,...n})},sendStreamRequest(t,n,r){return a.post(`/clips/streams/${t}`,{session_id:n,...r})},close(t,n){return a.delete(`/clips/streams/${t}`,{session_id:n})}}}function oe(e,i){const a=$(e,i);return{createStream(t,n){return a.post("/talks/streams",{source_url:t.source_url,driver_url:t.driver_url,face:t.face,config:t.config},n)},startConnection(t,n,r,o){return a.post(`/talks/streams/${t}/sdp`,{session_id:r,answer:n},o)},addIceCandidate(t,n,r,o){return a.post(`/talks/streams/${t}/ice`,{session_id:r,...n},o)},sendStreamRequest(t,n,r,o){return a.post(`/talks/streams/${t}`,{session_id:n,...r},o)},close(t,n,r){return a.delete(`/talks/streams/${t}`,{session_id:n},r)}}}function ce(e,i){return e.map((a,t)=>t===0?i?{index:t,timestamp:a.timestamp,bytesReceived:a.bytesReceived-i.bytesReceived,packetsReceived:a.packetsReceived-i.packetsReceived,packetsLost:a.packetsLost-i.packetsLost,jitter:a.jitter,frameWidth:a.frameWidth,frameHeight:a.frameHeight,frameRate:a.frameRate}:{index:t,timestamp:a.timestamp,bytesReceived:a.bytesReceived,packetsReceived:a.packetsReceived,packetsLost:a.packetsLost,jitter:a.jitter,frameWidth:a.frameWidth,frameHeight:a.frameHeight,frameRate:a.frameRate}:{index:t,timestamp:a.timestamp,bytesReceived:a.bytesReceived-e[t-1].bytesReceived,packetsReceived:a.packetsReceived-e[t-1].packetsReceived,packetsLost:a.packetsLost-e[t-1].packetsLost,jitter:a.jitter,frameWidth:a.frameWidth,frameHeight:a.frameHeight,frameRate:a.frameRate})}let X=!1;const S=(e,i)=>X&&console.log(e,i),de=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);async function Y(e,{debug:i=!1,callbacks:a,auth:t,baseURL:n=w}){X=i;const r={...a},{startConnection:o,sendStreamRequest:u,close:m,createStream:h,addIceCandidate:f}=e.videoType===A.Clip?se(t,n):oe(t,n),{id:l,offer:d,ice_servers:p,session_id:v}=await h(e),g=new de({iceServers:p}),Z=g.createDataChannel("JanusDataChannel"),y=[];let R=0,O;if(!v)throw new Error("Could not create session_id");g.onicecandidate=c=>{S("peerConnection.onicecandidate",c),c.candidate&&c.candidate.sdpMid&&c.candidate.sdpMLineIndex!==null&&f(l,{candidate:c.candidate.candidate,sdpMid:c.candidate.sdpMid,sdpMLineIndex:c.candidate.sdpMLineIndex},v)},g.oniceconnectionstatechange=()=>{var c;S("peerConnection.oniceconnectionstatechange => "+g.iceConnectionState),(c=r.onConnectionStateChange)==null||c.call(r,g.iceConnectionState)},g.ontrack=c=>{var C;S("peerConnection.ontrack",c),(C=r.onSrcObjectReady)==null||C.call(r,c.streams[0])},Z.onmessage=c=>{var C,L,x;if(Z.readyState==="open"){const[_,T]=c.data.split(":");if(_===k.StreamStarted)console.log("StreamStarted",_,T),R=y.length,O=setInterval(()=>{g.getStats().then(W=>{W.forEach(I=>{I.type==="inbound-rtp"&&I.kind==="video"&&y.push(I)})})},1e3),(C=r.onVideoStateChange)==null||C.call(r,M.Start);else if(_===k.StreamDone){console.log("StreamDone",_,T),clearInterval(O);const E=y.slice(R);if(E){const W=R===0?void 0:y[R-1],I=ce(E,W);R=y.length,(L=r.onVideoStateChange)==null||L.call(r,M.Stop,I.sort((le,ue)=>ue.packetsLost-le.packetsLost).slice(0,5))}}else(x=r.onMessage)==null||x.call(r,_,decodeURIComponent(T))}},await g.setRemoteDescription(d),S("set remote description OK");const j=await g.createAnswer();return S("create answer OK"),await g.setLocalDescription(j),S("set local description OK"),await o(l,j,v),S("start connection OK"),{speak(c){return u(l,v,c)},async terminate(){var c,C;l&&(g&&(g.close(),g.oniceconnectionstatechange=null,g.onnegotiationneeded=null,g.onicecandidate=null,g.ontrack=null),await m(l,v).catch(L=>{}),(c=r.onConnectionStateChange)==null||c.call(r,"closed"),(C=r.onVideoStateChange)==null||C.call(r,M.Stop))},sessionId:v,streamId:l,onCallback(c,C){r[c]=C}}}s.ChatMode=J,s.ChatProgress=P,s.DocumentType=V,s.KnowledgeType=F,s.Providers=z,s.RateState=N,s.SocketManager=q,s.StreamEvents=k,s.Subject=D,s.VoiceAccess=B,s.createAgentManager=ie,s.createAgentsApi=K,s.createClient=$,s.createKnowledgeApi=H,s.createRatingsApi=U,s.createStreamingManager=Y,s.getAgent=re,s.getAgentStreamArgs=G,Object.defineProperty(s,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(w,b){typeof exports=="object"&&typeof module<"u"?b(exports):typeof define=="function"&&define.amd?define(["exports"],b):(w=typeof globalThis<"u"?globalThis:w||self,b(w.index={}))})(this,function(w){"use strict";var b=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(b||{}),j=(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))(j||{}),z=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(z||{}),$=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e))($||{}),N=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(N||{}),H=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(H||{}),x=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(x||{}),U=(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))(U||{}),C=(e=>(e.Clip="clip",e.Talk="talk",e))(C||{}),O=(e=>(e.Start="START",e.Stop="STOP",e))(O||{}),R=(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))(R||{}),k=(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))(k||{}),B=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(B||{}),J=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(J||{});const F="https://api.d-id.com",G="wss://notifications.d-id.com",ee="79f81a83a67430be2bc0fd61042b8faa",D=()=>Math.random().toString(16).slice(2);function V(){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 te=D();function q(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}.${V()}_${te}`;throw new Error(`Unknown auth type: ${e}`)}function K(e,i=F){const t=async(n,a)=>{const r=await fetch(i+(n!=null&&n.startsWith("/")?n:`/${n}`),{...a,headers:{...a==null?void 0:a.headers,Authorization:q(e),"Content-Type":"application/json"}});if(!r.ok){let o=await r.text().catch(()=>"Failed to fetch");throw new Error(o)}return r.json()};return{get(n,a){return t(n,{...a,method:"GET"})},post(n,a,r){return t(n,{...r,body:JSON.stringify(a),method:"POST"})},delete(n,a,r){return t(n,{...r,body:JSON.stringify(a),method:"DELETE"})},patch(n,a,r){return t(n,{...r,body:JSON.stringify(a),method:"PATCH"})}}}function Q(e,i=F){const t=K(e,`${i}/agents`);return{create(n,a){return t.post("/",n,a)},getAgents(n,a){return t.get(`/${n?`?tag=${n}`:""}`,a).then(r=>r??[])},getById(n,a){return t.get(`/${n}`,a)},delete(n,a){return t.delete(`/${n}`,void 0,a)},update(n,a,r){return t.patch(`/${n}`,a,r)},newChat(n,a){return t.post(`/${n}/chat`,void 0,a)},chat(n,a,r,o){return t.post(`/${n}/chat/${a}`,r,o)},createRating(n,a,r,o){return t.post(`/${n}/chat/${a}/ratings`,r,o)},updateRating(n,a,r,o,d){return t.patch(`/${n}/chat/${a}/ratings/${r}`,o,d)},deleteRating(n,a,r,o){return t.delete(`/${n}/chat/${a}/ratings/${r}`,o)}}}const ne=e=>new Promise(i=>setTimeout(i,e));function ae(e){return new Promise((i,t)=>{const{callbacks:n,host:a,auth:r}=e,{onMessage:o=null,onOpen:d=null,onClose:g=null,onError:l=null}=n||{},f=new WebSocket(`${a}?authorization=${q(r)}`);f.onmessage=o,f.onclose=g,f.onerror=p=>{console.error(p),l==null||l("Websocket failed to connect",p),t(p)},f.onopen=p=>{d==null||d(p),i(f)}})}async function ie(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 ae(e)}catch(a){if(n===i)throw a;await ne(n*500)}return t}async function X(e,i,t){const n=t!=null&&t.onMessage?[t.onMessage]:[],a=await ie({auth:e,host:i,callbacks:{onError:t==null?void 0:t.onError,onMessage:r=>{const o=JSON.parse(r.data);n.forEach(d=>d(o.event,o))}}});return{socket:a,disconnect:()=>a.close(),subscribeToEvents:r=>n.push(r)}}function re(e,i,t){const n=K(e,`${i}/agents/${t}`);return{createStream(a){return n.post("/streams",{driver_id:a.driver_id,presenter_id:a.presenter_id,compatibility_mode:a.compatibility_mode,stream_warmup:a.stream_warmup,type:C.Clip})},startConnection(a,r,o){return n.post(`/streams/${a}/sdp`,{session_id:o,answer:r,type:C.Clip})},addIceCandidate(a,r,o){return n.post(`/streams/${a}/ice`,{session_id:o,...r,type:C.Clip})},sendStreamRequest(a,r,o){return n.post(`/streams/${a}`,{session_id:r,...o,type:C.Clip})},close(a,r){return n.delete(`/streams/${a}`,{session_id:r,type:C.Clip})}}}function se(e,i,t){const n=K(e,`${i}/agents/${t}`);return{createStream(a,r){return n.post("/streams",{source_url:a.source_url,driver_url:a.driver_url,face:a.face,config:a.config,stream_warmup:a.stream_warmup,type:C.Talk},r)},startConnection(a,r,o,d){return n.post(`/streams/${a}/sdp`,{session_id:o,answer:r,type:C.Talk},d)},addIceCandidate(a,r,o,d){return n.post(`/streams/${a}/ice`,{session_id:o,...r,type:C.Talk},d)},sendStreamRequest(a,r,o,d){return n.post(`/streams/${a}`,{session_id:r,...o,type:C.Talk},d)},close(a,r,o){return n.delete(`/streams/${a}`,{session_id:r,type:C.Talk},o)}}}function oe(e,i){return e.map((t,n)=>n===0?i?{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived-i.bytesReceived,packetsReceived:t.packetsReceived-i.packetsReceived,packetsLost:t.packetsLost-i.packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond}:{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived,packetsReceived:t.packetsReceived,packetsLost:t.packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond}:{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived-e[n-1].bytesReceived,packetsReceived:t.packetsReceived-e[n-1].packetsReceived,packetsLost:t.packetsLost-e[n-1].packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond})}let Y=!1;const E=(e,i)=>Y&&console.log(e,i),ce=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function de(e){switch(e){case"connected":return k.Connected;case"checking":return k.Connecting;case"failed":return k.Fail;case"new":case"closed":case"disconnected":default:return k.New}}function ge(e,i){let t=[],n=0,a=0,r=0,o;return setInterval(()=>{e.getStats().then(g=>{g.forEach(l=>{if(l.type==="inbound-rtp"&&l.kind==="video"){if(a=t.length-1,l&&t[a]){const f=l.bytesReceived,p=t[a].bytesReceived,M=o;let y;if(o=f-p>0,r=o?0:++r,M!==o)if(o)n=t.length,i==null||i(O.Start,y);else{const L=t.slice(n),P=n===0?void 0:t[n-1];y=oe(L,P),y=y.sort((_,s)=>s.packetsLost-_.packetsLost).slice(0,5)}!o&&r===3&&(i==null||i(O.Stop,y))}t.push(l)}})})},500)}async function le(e,i,{debug:t=!1,callbacks:n,auth:a,analytics:r,baseURL:o=F}){Y=t;let d;const{startConnection:g,sendStreamRequest:l,close:f,createStream:p,addIceCandidate:M}=i.videoType===C.Clip?re(a,o,e):se(a,o,e),{id:y,offer:L,ice_servers:P,session_id:_}=await p(i),s=new ce({iceServers:P}),u=s.createDataChannel("JanusDataChannel");if(!_)throw new Error("Could not create session_id");const m=ge(s,n.onVideoStateChange);s.onicecandidate=c=>{E("peerConnection.onicecandidate",c),c.candidate&&c.candidate.sdpMid&&c.candidate.sdpMLineIndex!==null?M(y,{candidate:c.candidate.candidate,sdpMid:c.candidate.sdpMid,sdpMLineIndex:c.candidate.sdpMLineIndex},_):M(y,{candidate:null},_)},s.oniceconnectionstatechange=()=>{var h;E("peerConnection.oniceconnectionstatechange => "+s.iceConnectionState);const c=de(s.iceConnectionState);c===k.Connected?d=setTimeout(()=>{var S;(S=n.onConnectionStateChange)==null||S.call(n,k.Connected)},5e3):(clearTimeout(d),(h=n.onConnectionStateChange)==null||h.call(n,c))},s.ontrack=c=>{var h;E("peerConnection.ontrack",c),(h=n.onSrcObjectReady)==null||h.call(n,c.streams[0])},u.onmessage=c=>{var h;if(u.readyState==="open"){const[S,I]=c.data.split(":");S===R.StreamFailed||S===R.StreamDone?clearInterval(m):S===R.StreamReady&&(clearTimeout(d),(h=n.onConnectionStateChange)==null||h.call(n,k.Connected))}},await s.setRemoteDescription(L),E("set remote description OK");const v=await s.createAnswer();return E("create answer OK"),await s.setLocalDescription(v),E("set local description OK"),await g(y,v,_),E("start connection OK"),{speak(c){return l(y,_,c)},async disconnect(){var c,h;y&&(s&&(s.close(),s.oniceconnectionstatechange=null,s.onnegotiationneeded=null,s.onicecandidate=null,s.ontrack=null),await f(y,_).catch(S=>{}),(c=n.onConnectionStateChange)==null||c.call(n,k.New),(h=n.onVideoStateChange)==null||h.call(n,O.Stop),clearInterval(m))},sessionId:_,streamId:y}}function me(e){const i={token:e.token||"testKey",distinct_id:e.distinctId||V(),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 a={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",a).then(r=>r.json()).catch(r=>console.error(r))}}}function ue(e){var n,a,r,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:(r=(a=e.presenter)==null?void 0:a.voice)==null?void 0:r.voice_id,provider:(d=(o=e.presenter)==null?void 0:o.voice)==null?void 0:d.type}}}function he(e){if(e.presenter){if(e.presenter.type===C.Clip)return{videoType:C.Clip,driver_id:e.presenter.driver_id,presenter_id:e.presenter.presenter_id,stream_warmup:!0}}else throw new Error("Presenter is not initialized");return{videoType:C.Talk,source_url:e.presenter.source_url,stream_warmup:!0}}function Z(e,i,t,n,a){return new Promise(async(r,o)=>{let d=a;const g=await le(e.id,he(e),{...i,callbacks:{...i.callbacks,onConnectionStateChange:async l=>{var f,p;if(l===k.Connected)try{d||(d=await t.newChat(e.id),n.track("agent-chat",{event:"created",chat_id:d.id,agent_id:e.id})),g&&r({chat:d,streamingManager:g})}catch(M){console.error(M),o("Cannot create new chat")}else l===k.Fail&&o(new Error("Cannot create connection"));(p=(f=i.callbacks).onConnectionStateChange)==null||p.call(f,l)},onVideoStateChange(l,f){var p,M;n.track("agent-video",{event:l,rtc_stats:f??[]}),(M=(p=i.callbacks).onVideoStateChange)==null||M.call(p,l,f)}},analytics:n}).catch(o)})}function we(e,i,t){return Q(i,t||F).getById(e)}function W(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:D(),role:"assistant",created_at:new Date().toISOString()}]}async function fe(e,i){var L,P,_;const t={messages:[],chatMode:i.mode||$.Functional};let n=-1;const a=i.wsURL||G,r=i.baseURL||F,o=i.mixpanelKey||ee,d=Q(i.auth,r),g=await d.getById(e);t.messages=W(g),(P=(L=i.callbacks).onNewMessage)==null||P.call(L,t.messages);const l=me({token:o,agent:g,...i});l.track("agent-sdk",{event:"loaded",...ue(g)});const f={onMessage:(s,u)=>{var m,v;if("content"in u){const{content:c}=u,h=t.messages[t.messages.length-1];(h==null?void 0:h.role)==="assistant"&&(n<t.messages.length&&(h.content=s===N.Partial?h.content+c:c),s===N.Answer&&(n=t.messages.length)),s===N.Complete&&l.track("agent-message-received",{messages:t.messages.length}),(v=(m=i.callbacks).onNewMessage)==null||v.call(m,t.messages)}else if([R.StreamVideoCreated,R.StreamVideoDone,R.StreamVideoError,R.StreamVideoRejected].includes(s)){const c=s.split("/")[1];l.track("agent-video",{...u,event:c})}}};async function p(){var v,c,h,S,I;const s=await X(i.auth,a,f),{streamingManager:u,chat:m}=await Z(g,i,d,l,t.chat);n=-1,t.messages=W(g),(c=(v=i.callbacks).onNewMessage)==null||c.call(v,t.messages),m!=null&&m.id&&m.id!==((h=t.chat)==null?void 0:h.id)&&((I=(S=i.callbacks).onNewChat)==null||I.call(S,m==null?void 0:m.id)),t.streamingManager=u,t.socketManager=s,t.chat=m,y($.Functional),l.track("agent-chat",{event:"connect",chatId:m.id,agentId:g.id})}async function M(){var s,u,m,v,c;(s=t.socketManager)==null||s.disconnect(),await((u=t.streamingManager)==null?void 0:u.disconnect()),delete t.streamingManager,delete t.socketManager,t.messages=W(g),(v=(m=i.callbacks).onNewMessage)==null||v.call(m,t.messages),l.track("agent-chat",{event:"disconnect",chatId:(c=t.chat)==null?void 0:c.id,agentId:g.id})}async function y(s){var u,m;s!==t.chatMode&&(l.track("agent-mode-change",{mode:s}),t.chatMode=s,t.chatMode!==$.Functional&&await M(),(m=(u=i.callbacks).onModeChange)==null||m.call(u,s))}return{agent:g,starterMessages:((_=g.knowledge)==null?void 0:_.starter_message)||[],connect:p,disconnect:M,changeMode:y,async reconnect(){if(!t.chat)return p();const s=await X(i.auth,a,f),{streamingManager:u,chat:m}=await Z(g,i,d,l,t.chat);t.streamingManager=u,t.socketManager=s,y($.Functional),l.track("agent-chat",{event:"reconnect",chatId:m.id,agentId:g.id})},async chat(s,u=!1){var m,v,c,h,S,I;try{if(s.length>=800)throw new Error("Message cannot be more than 800 characters");const T=Date.now();if(t.messages.push({id:D(),role:"user",content:s,created_at:new Date(T).toISOString()}),(v=(m=i.callbacks).onNewMessage)==null||v.call(m,t.messages),s.length===0)throw new Error("Message cannot be empty");if(t.chatMode===$.Maintenance)throw new Error("Chat is in maintenance mode");if(t.chatMode!==$.TextOnly){if(!t.streamingManager)throw new Error("Streaming manager is not initialized");if(!t.chat)throw new Error("Chat is not initialized")}else t.chat||(t.chat=await d.newChat(g.id));const A=await d.chat(g.id,t.chat.id,{sessionId:(c=t.streamingManager)==null?void 0:c.sessionId,streamId:(h=t.streamingManager)==null?void 0:h.streamId,messages:t.messages,chatMode:t.chatMode,append_chat:u});return l.track("agent-message-send",{event:"success",messages:t.messages.length+1}),t.messages.push({id:D(),role:"assistant",content:A.result??"",created_at:new Date().toISOString(),matches:A.matches}),A.result&&l.track("agent-message-received",{latency:Date.now()-T,messages:t.messages.length}),(I=(S=i.callbacks).onNewMessage)==null||I.call(S,t.messages),A}catch(T){throw l.track("agent-message-send",{event:"error",messages:t.messages.length}),T}},rate(s,u,m){var h,S,I,T;const v=t.messages.find(A=>A.id===s);if(t.chat){if(!v)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const c=((h=v.matches)==null?void 0:h.map(A=>[A.document_id,A.id]))??[];return l.track("agent-rate",{event:m?"update":"create",thumb:u===1?"up":"down",knowledge_id:((S=g.knowledge)==null?void 0:S.id)??"",matches:c,score:u}),m?d.updateRating(g.id,t.chat.id,m,{knowledge_id:((I=g.knowledge)==null?void 0:I.id)??"",message_id:s,matches:c,score:u}):d.createRating(g.id,t.chat.id,{knowledge_id:((T=g.knowledge)==null?void 0:T.id)??"",message_id:s,matches:c,score:u})},deleteRate(s){var u;if(!t.chat)throw new Error("Chat is not initialized");return l.track("agent-rate-delete",{type:"text",chat_id:(u=t.chat)==null?void 0:u.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 u(){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 m=u();return l.track("agent-speak",m),t.streamingManager.speak({script:m})}}}w.ChatMode=$,w.ChatProgress=N,w.ConnectionState=k,w.DocumentType=U,w.KnowledgeType=x,w.PlanGroup=j,w.Providers=B,w.RateState=z,w.StreamEvents=R,w.StreamingState=O,w.Subject=H,w.UserPlan=b,w.VideoType=C,w.VoiceAccess=J,w.createAgentManager=fe,w.getAgent=we,Object.defineProperty(w,Symbol.toStringTag,{value:"Module"})});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Agent, AgentPayload, Auth, Chat, ChatPayload, ChatResponse } from '
|
|
1
|
+
import { Agent, AgentPayload, Auth, Chat, ChatPayload, ChatResponse, RatingEntity, RatingPayload } from '../types/index';
|
|
2
2
|
export declare function createAgentsApi(auth: Auth, host?: string): {
|
|
3
3
|
create(payload: AgentPayload, options?: RequestInit): Promise<Agent>;
|
|
4
4
|
getAgents(tag?: string, options?: RequestInit): Promise<Agent[]>;
|
|
@@ -7,4 +7,7 @@ export declare function createAgentsApi(auth: Auth, host?: string): {
|
|
|
7
7
|
update(id: string, payload: AgentPayload, options?: RequestInit): Promise<Agent>;
|
|
8
8
|
newChat(agentId: string, options?: RequestInit): Promise<Chat>;
|
|
9
9
|
chat(agentId: string, chatId: string, payload: ChatPayload, options?: RequestInit): Promise<ChatResponse>;
|
|
10
|
+
createRating(agentId: string, chatId: string, payload: RatingPayload, options?: RequestInit): Promise<RatingEntity>;
|
|
11
|
+
updateRating(agentId: string, chatId: string, ratingId: string, payload: Partial<RatingPayload>, options?: RequestInit): Promise<RatingEntity>;
|
|
12
|
+
deleteRating(agentId: string, chatId: string, ratingId: string, options?: RequestInit): Promise<RatingEntity>;
|
|
10
13
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Auth } from '
|
|
1
|
+
import { Auth } from '../types/auth';
|
|
2
2
|
export declare function createClient(auth: Auth, host?: string): {
|
|
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>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Auth, CreateDocumentPayload, DocumentData, KnowledgeData, KnowledgePayload, QueryResult, RecordData } from '
|
|
1
|
+
import { Auth, CreateDocumentPayload, DocumentData, KnowledgeData, KnowledgePayload, QueryResult, RecordData } from '../types/index';
|
|
2
2
|
export declare function createKnowledgeApi(auth: Auth, host?: string): {
|
|
3
3
|
createKnowledge(payload: KnowledgePayload, options?: RequestInit): Promise<KnowledgeData>;
|
|
4
4
|
getKnowledgeBase(options?: RequestInit): Promise<KnowledgeData[]>;
|
|
@@ -11,3 +11,4 @@ export declare function createKnowledgeApi(auth: Auth, host?: string): {
|
|
|
11
11
|
getRecords(knowledgeId: string, documentId: string, options?: RequestInit): Promise<RecordData[]>;
|
|
12
12
|
query(knowledgeId: string, query: string, options?: RequestInit): Promise<QueryResult>;
|
|
13
13
|
};
|
|
14
|
+
export type KnowledegeApi = ReturnType<typeof createKnowledgeApi>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Auth } from './types/auth';
|
|
2
|
+
import { ChatProgressCallback } from '.';
|
|
3
|
+
export interface SocketManager {
|
|
4
|
+
socket?: WebSocket;
|
|
5
|
+
disconnect: () => void;
|
|
6
|
+
subscribeToEvents: (data: any) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare function createSocketManager(auth: Auth, host: string, callback?: {
|
|
9
|
+
onMessage?: ChatProgressCallback;
|
|
10
|
+
onError?: (error: string, event: Event) => void;
|
|
11
|
+
}): Promise<SocketManager>;
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { Agent, AgentManager, AgentManagerOptions
|
|
2
|
-
import { Auth } from '
|
|
3
|
-
export declare function getAgentStreamArgs(agent: Agent): CreateStreamOptions;
|
|
1
|
+
import { Agent, AgentManager, AgentManagerOptions } from './types/index';
|
|
2
|
+
import { Auth } from '.';
|
|
4
3
|
export declare function getAgent(agentId: string, auth: Auth, baseURL?: string): Promise<Agent>;
|
|
5
4
|
/**
|
|
6
5
|
* Creates a new Agent Manager instance for interacting with an agent, chat, and related connections.
|
|
7
6
|
*
|
|
8
|
-
* @param {string}
|
|
7
|
+
* @param {string} agent - The ID or instance of the agent to chat with.
|
|
9
8
|
* @param {AgentManagerOptions} options - Configurations for the Agent Manager API.
|
|
10
9
|
* * @returns {Promise<AgentManager>} - A promise that resolves to an instance of the AgentsAPI interface.
|
|
11
10
|
*
|
|
@@ -14,4 +13,4 @@ export declare function getAgent(agentId: string, auth: Auth, baseURL?: string):
|
|
|
14
13
|
* @example
|
|
15
14
|
* const agentManager = await createAgentManager('id-agent123', { auth: { type: 'key', clientKey: '123', externalId: '123' } });
|
|
16
15
|
*/
|
|
17
|
-
export declare function createAgentManager(
|
|
16
|
+
export declare function createAgentManager(agent: string, options: AgentManagerOptions): Promise<AgentManager>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { CreateStreamOptions, PayloadType, StreamingManagerOptions } from './types/index';
|
|
2
|
+
export declare function createStreamingManager<T extends CreateStreamOptions>(agentId: string, agent: T, { debug, callbacks, auth, analytics, baseURL }: StreamingManagerOptions): Promise<{
|
|
3
|
+
/**
|
|
4
|
+
* Method to send request to server to get clip or talk depend on you payload
|
|
5
|
+
* @param payload
|
|
6
|
+
*/
|
|
7
|
+
speak(payload: PayloadType<T>): Promise<import('./types/index').SendStreamPayloadResponse>;
|
|
8
|
+
/**
|
|
9
|
+
* Method to close RTC connection
|
|
10
|
+
*/
|
|
11
|
+
disconnect(): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Session identifier information, should be returned in the body of all streaming requests
|
|
14
|
+
*/
|
|
15
|
+
sessionId: string;
|
|
16
|
+
/**
|
|
17
|
+
* Id of current RTC stream
|
|
18
|
+
*/
|
|
19
|
+
streamId: string;
|
|
20
|
+
}>;
|
|
21
|
+
export type StreamingManager<T extends CreateStreamOptions> = Awaited<ReturnType<typeof createStreamingManager<T>>>;
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,8 +1,2 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
export * from './
|
|
3
|
-
export * from './lib/api/knowledge';
|
|
4
|
-
export * from './lib/api/ratings';
|
|
5
|
-
export * from './lib/connectToSocket';
|
|
6
|
-
export * from './lib/createAgentManager';
|
|
7
|
-
export * from './lib/createStreamingManager';
|
|
8
|
-
export * from './types/index';
|
|
1
|
+
export * from './createAgentManager';
|
|
2
|
+
export * from './types';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Agent } from '..';
|
|
2
|
+
export interface AnalyticsOptions {
|
|
3
|
+
token: string;
|
|
4
|
+
agent: Agent;
|
|
5
|
+
isEnabled?: boolean;
|
|
6
|
+
distinctId?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface Analytics {
|
|
9
|
+
token: string;
|
|
10
|
+
distinct_id?: string;
|
|
11
|
+
isEnabled: boolean;
|
|
12
|
+
chatId?: string;
|
|
13
|
+
agentId: string;
|
|
14
|
+
owner_id: string;
|
|
15
|
+
getRandom(): string;
|
|
16
|
+
track(event: string, props?: Record<string, any>): Promise<any>;
|
|
17
|
+
}
|
|
18
|
+
export declare function initializeAnalytics(config: AnalyticsOptions): Analytics;
|
|
@@ -12,7 +12,7 @@ export interface Stream_Text_Script extends BaseStreamScript {
|
|
|
12
12
|
/**
|
|
13
13
|
* text-to-speech provider from list of supported providers. default is microsoft tts
|
|
14
14
|
*/
|
|
15
|
-
provider
|
|
15
|
+
provider?: StreamTextToSpeechProviders;
|
|
16
16
|
/**
|
|
17
17
|
* The input text that will be synthesized to an audio file.
|
|
18
18
|
* Note that each provider has its own limitations on the text length.
|
package/dist/src/types/auth.d.ts
CHANGED
|
@@ -10,7 +10,6 @@ export interface BasicAuth {
|
|
|
10
10
|
export interface ClientKeyAuth {
|
|
11
11
|
type: 'key';
|
|
12
12
|
clientKey: string;
|
|
13
|
-
externalId: string;
|
|
14
13
|
}
|
|
15
14
|
export type Auth = BearerToken | BasicAuth | ClientKeyAuth;
|
|
16
15
|
export interface GetAuthParams {
|
|
@@ -18,5 +17,4 @@ export interface GetAuthParams {
|
|
|
18
17
|
username?: string | null;
|
|
19
18
|
password?: string | null;
|
|
20
19
|
clientKey?: string | null;
|
|
21
|
-
externalId?: string | null;
|
|
22
20
|
}
|
|
@@ -2,6 +2,23 @@ import { Chat, ChatPayload, ChatResponse } from './chat';
|
|
|
2
2
|
import { Knowledge } from './knowledge';
|
|
3
3
|
import { LLM } from './llm';
|
|
4
4
|
import { Presenter } from './presenter';
|
|
5
|
+
export declare enum UserPlan {
|
|
6
|
+
TRIAL = "trial",
|
|
7
|
+
BASIC = "basic",
|
|
8
|
+
ENTERPRISE = "enterprise",
|
|
9
|
+
LITE = "lite",
|
|
10
|
+
ADVANCED = "advanced"
|
|
11
|
+
}
|
|
12
|
+
export declare enum PlanGroup {
|
|
13
|
+
TRIAL = "deid-trial",
|
|
14
|
+
PRO = "deid-pro",
|
|
15
|
+
ENTERPRISE = "deid-enterprise",
|
|
16
|
+
LITE = "deid-lite",
|
|
17
|
+
ADVANCED = "deid-advanced",
|
|
18
|
+
BUILD = "deid-api-build",
|
|
19
|
+
LAUNCH = "deid-api-launch",
|
|
20
|
+
SCALE = "deid-api-scale"
|
|
21
|
+
}
|
|
5
22
|
export interface Agent {
|
|
6
23
|
id: string;
|
|
7
24
|
username?: string;
|
|
@@ -11,12 +28,18 @@ export interface Agent {
|
|
|
11
28
|
use_case?: string;
|
|
12
29
|
tags?: string[];
|
|
13
30
|
chats?: number;
|
|
31
|
+
greetings?: string[];
|
|
14
32
|
access?: 'private' | 'pending-public' | 'unlisted' | 'rejected' | 'public';
|
|
33
|
+
metadata?: {
|
|
34
|
+
plan: PlanGroup | UserPlan;
|
|
35
|
+
};
|
|
15
36
|
preview_name?: string;
|
|
16
37
|
preview_description?: string;
|
|
17
38
|
preview_thumbnail?: string;
|
|
39
|
+
preview_url?: string;
|
|
40
|
+
owner_id?: string;
|
|
18
41
|
}
|
|
19
|
-
export type AgentPayload = Omit<Agent, 'type' | 'created_at' | 'modified_at' | 'id' | 'owner_id' | 'idle_video_url'>;
|
|
42
|
+
export type AgentPayload = Omit<Agent, 'type' | 'created_at' | 'modified_at' | 'id' | 'owner_id' | 'metadata' | 'idle_video_url'>;
|
|
20
43
|
export interface AgentsAPI {
|
|
21
44
|
create(payload: AgentPayload, options?: RequestInit): Promise<Agent>;
|
|
22
45
|
getAgents(tag?: string, options?: RequestInit): Promise<Agent[]>;
|
|
@@ -15,18 +15,22 @@ export interface RatingEntity {
|
|
|
15
15
|
score: 1 | -1;
|
|
16
16
|
created_at: string;
|
|
17
17
|
modified_at: string;
|
|
18
|
+
message_id: string;
|
|
18
19
|
}
|
|
19
|
-
export type RatingPayload = Omit<RatingEntity, 'owner_id' | 'id' | 'created_at' | 'modified_at' | 'created_by' | 'external_id'>;
|
|
20
|
+
export type RatingPayload = Omit<RatingEntity, 'owner_id' | 'id' | 'created_at' | 'modified_at' | 'created_by' | 'external_id' | 'agent_id' | 'chat_id'>;
|
|
20
21
|
export interface Message {
|
|
21
|
-
|
|
22
|
+
id: string;
|
|
23
|
+
role?: 'system' | 'assistant' | 'user' | 'function' | 'tool';
|
|
22
24
|
content: string;
|
|
23
|
-
created_at
|
|
25
|
+
created_at?: string;
|
|
24
26
|
matches?: ChatResponse['matches'];
|
|
25
27
|
}
|
|
26
28
|
export interface ChatPayload {
|
|
27
29
|
messages: Message[];
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
append_chat?: boolean;
|
|
31
|
+
streamId?: string;
|
|
32
|
+
sessionId?: string;
|
|
33
|
+
chatMode?: ChatMode;
|
|
30
34
|
}
|
|
31
35
|
export interface IRetrivalMetadata {
|
|
32
36
|
id: string;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { SupportedStreamScipt } from '
|
|
1
|
+
import { SupportedStreamScipt } from '../../StreamScript';
|
|
2
2
|
import { Auth } from '../../auth';
|
|
3
|
-
import { SendStreamPayloadResponse,
|
|
3
|
+
import { ConnectionState, SendStreamPayloadResponse, StreamEvents, StreamingState } from '../../stream';
|
|
4
4
|
import { Agent } from './agent';
|
|
5
|
-
import { ChatResponse, Message, RatingEntity
|
|
5
|
+
import { ChatMode, ChatResponse, Message, RatingEntity } from './chat';
|
|
6
6
|
/**
|
|
7
7
|
* Types of events provided in Chat Progress Callback
|
|
8
8
|
*/
|
|
@@ -28,20 +28,20 @@ export declare enum ChatProgress {
|
|
|
28
28
|
*/
|
|
29
29
|
Complete = "done"
|
|
30
30
|
}
|
|
31
|
-
export type ChatProgressCallback = (progress: ChatProgress, data:
|
|
32
|
-
export type ConnectionStateChangeCallback = (state:
|
|
33
|
-
export type VideoStateChangeCallback = (state: StreamingState,
|
|
31
|
+
export type ChatProgressCallback = (progress: ChatProgress | StreamEvents, data: any) => void;
|
|
32
|
+
export type ConnectionStateChangeCallback = (state: ConnectionState) => void;
|
|
33
|
+
export type VideoStateChangeCallback = (state: StreamingState, data: any) => void;
|
|
34
34
|
interface ManagerCallbacks {
|
|
35
35
|
/**
|
|
36
36
|
* Optional callback will be triggered each time the RTC connection changes state
|
|
37
37
|
* @param state
|
|
38
38
|
*/
|
|
39
|
-
onConnectionStateChange?(state:
|
|
39
|
+
onConnectionStateChange?(state: ConnectionState): void;
|
|
40
40
|
/**
|
|
41
41
|
* Optional callback function that will be triggered each time video events happen
|
|
42
42
|
* @param state
|
|
43
43
|
*/
|
|
44
|
-
onVideoStateChange?(state: StreamingState): void;
|
|
44
|
+
onVideoStateChange?(state: StreamingState, data?: any): void;
|
|
45
45
|
/**
|
|
46
46
|
* Callback function that will be triggered each time the video stream starts or stops to update html element on webpage
|
|
47
47
|
* Required callback for SDK
|
|
@@ -52,17 +52,34 @@ interface ManagerCallbacks {
|
|
|
52
52
|
*/
|
|
53
53
|
onSrcObjectReady(srcObject: MediaStream): void;
|
|
54
54
|
/**
|
|
55
|
-
* Optional callback function that will be triggered each time
|
|
56
|
-
* @param
|
|
55
|
+
* Optional callback function that will be triggered each time new message is received
|
|
56
|
+
* @param messages - array of messages
|
|
57
57
|
*/
|
|
58
|
-
|
|
58
|
+
onNewMessage?(messages: Message[]): void;
|
|
59
|
+
/**
|
|
60
|
+
* Optional callback function that will be triggered each time new chat is created
|
|
61
|
+
* @param chatId - id of the new chat
|
|
62
|
+
*/
|
|
63
|
+
onNewChat?(chatId: string): void;
|
|
64
|
+
/**
|
|
65
|
+
* Optional callback function that will be triggered each time the chat mode changes
|
|
66
|
+
* @param mode - ChatMode
|
|
67
|
+
*/
|
|
68
|
+
onModeChange?(mode: ChatMode): void;
|
|
59
69
|
}
|
|
60
70
|
export interface AgentManagerOptions {
|
|
71
|
+
auth: Auth;
|
|
61
72
|
callbacks: ManagerCallbacks;
|
|
62
73
|
baseURL?: string;
|
|
63
74
|
wsURL?: string;
|
|
64
75
|
debug?: boolean;
|
|
65
|
-
|
|
76
|
+
enableAnalitics?: boolean;
|
|
77
|
+
mixpanelKey?: string;
|
|
78
|
+
/**
|
|
79
|
+
* Unique ID of agent user used in analytics. Pass it to override the default way to get distinctId
|
|
80
|
+
*/
|
|
81
|
+
distinctId?: string;
|
|
82
|
+
mode?: ChatMode;
|
|
66
83
|
}
|
|
67
84
|
export interface AgentManager {
|
|
68
85
|
/**
|
|
@@ -71,29 +88,34 @@ export interface AgentManager {
|
|
|
71
88
|
*/
|
|
72
89
|
agent: Agent;
|
|
73
90
|
/**
|
|
74
|
-
*
|
|
75
|
-
* Since chat uses an RTC connection to communicate with the agent, it could be dropped and to continue to chat you need to reconnect
|
|
91
|
+
* Array of starter messages that will be sent to the agent when the chat starts
|
|
76
92
|
*/
|
|
77
|
-
|
|
93
|
+
starterMessages: string[];
|
|
78
94
|
/**
|
|
79
|
-
* Method to
|
|
95
|
+
* Method to connect to stream and chat
|
|
96
|
+
*/
|
|
97
|
+
connect: () => Promise<void>;
|
|
98
|
+
/**
|
|
99
|
+
* Method to reconnect to stream and continue chat
|
|
80
100
|
*/
|
|
81
|
-
|
|
101
|
+
reconnect: () => Promise<void>;
|
|
82
102
|
/**
|
|
83
|
-
*
|
|
103
|
+
* Method to close all connections with agent, stream and web socket
|
|
84
104
|
*/
|
|
85
|
-
|
|
105
|
+
disconnect: () => Promise<void>;
|
|
86
106
|
/**
|
|
87
107
|
* Method to send a chat message to existing chat with the agent
|
|
88
108
|
* @param messages
|
|
109
|
+
* @param append_chat: when true, append to existing agent chat, rather than creating a new one.
|
|
89
110
|
*/
|
|
90
|
-
chat: (
|
|
111
|
+
chat: (userMessage: string, append_chat?: boolean) => Promise<ChatResponse>;
|
|
91
112
|
/**
|
|
92
113
|
* Method to rate the answer in chat
|
|
93
|
-
* @param
|
|
114
|
+
* @param score: 1 | -1 - score of the answer. 1 for positive, -1 for negative
|
|
115
|
+
* @param matches - array of matches that were used to find the answer
|
|
94
116
|
* @param id - id of Rating entity. Leave it empty to create a new, one or pass it to work with the existing one
|
|
95
117
|
*/
|
|
96
|
-
rate: (
|
|
118
|
+
rate: (messageId: string, score: 1 | -1, rateId?: string) => Promise<RatingEntity>;
|
|
97
119
|
/**
|
|
98
120
|
* Method to delete rating from answer in chat
|
|
99
121
|
* @param id - id of Rating entity.
|
|
@@ -105,9 +127,9 @@ export interface AgentManager {
|
|
|
105
127
|
*/
|
|
106
128
|
speak: (payload: SupportedStreamScipt) => Promise<SendStreamPayloadResponse>;
|
|
107
129
|
/**
|
|
108
|
-
*
|
|
109
|
-
* @param
|
|
130
|
+
* Method to change the mode of the chat
|
|
131
|
+
* @param mode - ChatMode
|
|
110
132
|
*/
|
|
111
|
-
|
|
133
|
+
changeMode(mode: ChatMode): void;
|
|
112
134
|
}
|
|
113
135
|
export {};
|
|
@@ -43,6 +43,12 @@ export interface CreateClipStreamRequest {
|
|
|
43
43
|
* @default auto
|
|
44
44
|
*/
|
|
45
45
|
compatibility_mode?: CompatibilityMode;
|
|
46
|
+
/**
|
|
47
|
+
* Whether to stream wamrup video on the connection.
|
|
48
|
+
* If set to true, will stream a warmup video when connection is established.
|
|
49
|
+
* At the end of the warmup video, a message containing "stream/ready" will be sent on the data channel.
|
|
50
|
+
*/
|
|
51
|
+
stream_warmup?: boolean;
|
|
46
52
|
}
|
|
47
53
|
export interface SendClipStreamPayload extends StickyRequest {
|
|
48
54
|
script: StreamScript;
|
|
@@ -40,17 +40,17 @@ export interface IceCandidate {
|
|
|
40
40
|
* The format of this address is a candidate-attribute as defined in RFC 5245. This string is empty ("") if the
|
|
41
41
|
* RTCIceCandidate is an "end of candidates" indicator.
|
|
42
42
|
*/
|
|
43
|
-
candidate: string;
|
|
43
|
+
candidate: string | null;
|
|
44
44
|
/**
|
|
45
45
|
* A string specifying the candidate's media stream identification tag which uniquely identifies the media stream
|
|
46
46
|
* within the component with which the candidate is associated, or null if no such association exists.
|
|
47
47
|
*/
|
|
48
|
-
sdpMid
|
|
48
|
+
sdpMid?: string;
|
|
49
49
|
/**
|
|
50
50
|
* If not null, sdpMLineIndex indicates the zero-based index number of the media description (as defined in RFC
|
|
51
51
|
* 4566) in the SDP with which the candidate is associated.
|
|
52
52
|
*/
|
|
53
|
-
sdpMLineIndex
|
|
53
|
+
sdpMLineIndex?: number;
|
|
54
54
|
}
|
|
55
55
|
export interface Status {
|
|
56
56
|
status: string;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Analytics } from '../../services/mixpanel';
|
|
1
2
|
import { Auth } from '../auth';
|
|
2
3
|
import { VideoType } from '../entities';
|
|
3
4
|
import { CreateClipStreamRequest, CreateTalkStreamRequest, SendClipStreamPayload, SendTalkStreamPayload } from './api';
|
|
@@ -11,12 +12,26 @@ export declare enum StreamEvents {
|
|
|
11
12
|
ChatAnswer = "chat/answer",
|
|
12
13
|
ChatPartial = "chat/partial",
|
|
13
14
|
StreamDone = "stream/done",
|
|
14
|
-
StreamStarted = "stream/started"
|
|
15
|
+
StreamStarted = "stream/started",
|
|
16
|
+
StreamFailed = "stream/error",
|
|
17
|
+
StreamReady = "stream/ready",
|
|
18
|
+
StreamCreated = "stream/created",
|
|
19
|
+
StreamVideoCreated = "stream-video/started",
|
|
20
|
+
StreamVideoDone = "stream-video/done",
|
|
21
|
+
StreamVideoError = "stream-video/error",
|
|
22
|
+
StreamVideoRejected = "stream-video/rejected"
|
|
23
|
+
}
|
|
24
|
+
export declare enum ConnectionState {
|
|
25
|
+
New = 0,
|
|
26
|
+
Fail = 1,
|
|
27
|
+
Connected = 2,
|
|
28
|
+
Connecting = 3,
|
|
29
|
+
Terminating = 4
|
|
15
30
|
}
|
|
16
31
|
export interface ManagerCallbacks {
|
|
17
32
|
onMessage?: (event: string, data: string) => void;
|
|
18
|
-
onConnectionStateChange?: (state:
|
|
19
|
-
onVideoStateChange?: (state: StreamingState,
|
|
33
|
+
onConnectionStateChange?: (state: ConnectionState) => void;
|
|
34
|
+
onVideoStateChange?: (state: StreamingState, data?: any) => void;
|
|
20
35
|
onSrcObjectReady?: (value: MediaStream) => void;
|
|
21
36
|
}
|
|
22
37
|
export type ManagerCallbackKeys = keyof ManagerCallbacks;
|
|
@@ -40,6 +55,7 @@ export interface StreamingManagerOptions {
|
|
|
40
55
|
baseURL?: string;
|
|
41
56
|
debug?: boolean;
|
|
42
57
|
auth: Auth;
|
|
58
|
+
analytics: Analytics;
|
|
43
59
|
}
|
|
44
60
|
export interface SlimRTCStatsReport {
|
|
45
61
|
index: number;
|
|
@@ -50,5 +66,5 @@ export interface SlimRTCStatsReport {
|
|
|
50
66
|
jitter: any;
|
|
51
67
|
frameWidth: any;
|
|
52
68
|
frameHeight: any;
|
|
53
|
-
|
|
69
|
+
framesPerSecond: any;
|
|
54
70
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Agent } from '../types/index';
|
|
2
|
+
export declare function getAnaliticsInfo(agent: Agent): {
|
|
3
|
+
$os: string;
|
|
4
|
+
isMobile: string;
|
|
5
|
+
browser: string;
|
|
6
|
+
origin: string;
|
|
7
|
+
agentType: "talk" | "clip";
|
|
8
|
+
agentVoice: {
|
|
9
|
+
voiceId: string | undefined;
|
|
10
|
+
provider: import('../types/tts').Providers | undefined;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { SlimRTCStatsReport } from
|
|
1
|
+
import { SlimRTCStatsReport } from '../types';
|
|
2
2
|
export declare function createVideoStatsReport(stats: SlimRTCStatsReport[], previousStats?: SlimRTCStatsReport): SlimRTCStatsReport[];
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@d-id/client-sdk",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "1.0.19-beta.
|
|
4
|
+
"version": "1.0.19-beta.80",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "d-id client sdk",
|
|
7
7
|
"repository": {
|
|
@@ -20,29 +20,28 @@
|
|
|
20
20
|
],
|
|
21
21
|
"main": "./dist/index.umd.cjs",
|
|
22
22
|
"module": "./dist/index.js",
|
|
23
|
-
"types": "./dist/src/
|
|
23
|
+
"types": "./dist/src/index.d.ts",
|
|
24
24
|
"scripts": {
|
|
25
25
|
"dev": "vite",
|
|
26
26
|
"build": "node ./infra/build.js -m production",
|
|
27
27
|
"build:dev": "node ./infra/build.js -m development",
|
|
28
|
-
"deploy:prod": "node ./infra/deploy.js --version
|
|
28
|
+
"deploy:prod": "node ./infra/deploy.js --version beta",
|
|
29
29
|
"preview": "vite preview",
|
|
30
30
|
"test-build": "node .infra/build.js -m development",
|
|
31
31
|
"build:docs": "typedoc"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@preact/preset-vite": "^2.
|
|
34
|
+
"@preact/preset-vite": "^2.8.1",
|
|
35
35
|
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
|
|
36
|
+
"@types/node": "^20.11.24",
|
|
36
37
|
"commander": "^11.1.0",
|
|
37
38
|
"glob": "^10.3.10",
|
|
38
|
-
"preact": "^10.
|
|
39
|
-
"prettier": "^3.
|
|
39
|
+
"preact": "^10.19.6",
|
|
40
|
+
"prettier": "^3.2.5",
|
|
40
41
|
"prettier-plugin-organize-imports": "^3.2.4",
|
|
41
|
-
"serverless": "3.32.2",
|
|
42
42
|
"typedoc": "^0.25.7",
|
|
43
|
-
"typescript": "^5.3.
|
|
44
|
-
"vite": "^
|
|
45
|
-
"vite-plugin-dts": "^3.
|
|
46
|
-
"vite-plugin-html-env": "^1.2.8"
|
|
43
|
+
"typescript": "^5.3.3",
|
|
44
|
+
"vite": "^5.1.4",
|
|
45
|
+
"vite-plugin-dts": "^3.7.3"
|
|
47
46
|
}
|
|
48
47
|
}
|