@d-id/client-sdk 1.0.19-beta.52 → 1.0.19-beta.54

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 CHANGED
@@ -308,15 +308,15 @@ function re(e, a) {
308
308
  const w = o.bytesReceived, l = n[r].bytesReceived;
309
309
  let m = i;
310
310
  i = w - l > 0;
311
- let v;
311
+ let S;
312
312
  if (m !== i) {
313
313
  if (i)
314
314
  t = n.length;
315
315
  else {
316
316
  const f = n.slice(t), u = t === 0 ? void 0 : n[t - 1];
317
- v = te(f, u), v = v.sort((s, S) => S.packetsLost - s.packetsLost).slice(0, 5);
317
+ S = te(f, u), S = S.sort((s, h) => h.packetsLost - s.packetsLost).slice(0, 5);
318
318
  }
319
- a == null || a(i ? A.Start : A.Stop, v);
319
+ a == null || a(i ? A.Start : A.Stop, S);
320
320
  }
321
321
  }
322
322
  n.push(o);
@@ -341,14 +341,14 @@ async function ie(e, {
341
341
  } = e.videoType === I.Clip ? G(t, r) : ee(t, r), {
342
342
  id: l,
343
343
  offer: m,
344
- ice_servers: v,
344
+ ice_servers: S,
345
345
  session_id: f
346
346
  } = await o(e), u = new ne({
347
- iceServers: v
347
+ iceServers: S
348
348
  }), s = u.createDataChannel("JanusDataChannel");
349
349
  if (!f)
350
350
  throw new Error("Could not create session_id");
351
- const S = re(u, n.onVideoStateChange);
351
+ const h = re(u, n.onVideoStateChange);
352
352
  u.onicecandidate = (c) => {
353
353
  y("peerConnection.onicecandidate", c), c.candidate && c.candidate.sdpMid && c.candidate.sdpMLineIndex !== null && w(l, {
354
354
  candidate: c.candidate.candidate,
@@ -364,11 +364,11 @@ async function ie(e, {
364
364
  }, s.onmessage = (c) => {
365
365
  var p, _;
366
366
  if (s.readyState === "open") {
367
- const [h, $] = c.data.split(":");
368
- h === E.StreamStarted ? console.log("StreamStarted", h, $) : h === E.StreamDone ? console.log("StreamDone") : h === E.StreamFailed ? ((p = n.onVideoStateChange) == null || p.call(n, A.Stop, {
369
- event: h,
367
+ const [v, $] = c.data.split(":");
368
+ v === E.StreamStarted ? console.log("StreamStarted", v, $) : v === E.StreamDone ? console.log("StreamDone") : v === E.StreamFailed ? ((p = n.onVideoStateChange) == null || p.call(n, A.Stop, {
369
+ event: v,
370
370
  data: $
371
- }), clearInterval(S), console.log("StreamFailed")) : (_ = n.onMessage) == null || _.call(n, h, decodeURIComponent($));
371
+ }), clearInterval(h), console.log("StreamFailed")) : (_ = n.onMessage) == null || _.call(n, v, decodeURIComponent($));
372
372
  }
373
373
  }, await u.setRemoteDescription(m), y("set remote description OK");
374
374
  const C = await u.createAnswer();
@@ -386,7 +386,7 @@ async function ie(e, {
386
386
  async disconnect() {
387
387
  var c, p;
388
388
  l && (u && (u.close(), u.oniceconnectionstatechange = null, u.onnegotiationneeded = null, u.onicecandidate = null, u.ontrack = null), await g(l, f).catch((_) => {
389
- }), (c = n.onConnectionStateChange) == null || c.call(n, "closed"), (p = n.onVideoStateChange) == null || p.call(n, A.Stop), clearInterval(S));
389
+ }), (c = n.onConnectionStateChange) == null || c.call(n, "closed"), (p = n.onVideoStateChange) == null || p.call(n, A.Stop), clearInterval(h));
390
390
  },
391
391
  /**
392
392
  * Session identifier information, should be returned in the body of all streaming requests
@@ -449,11 +449,11 @@ async function de(e, a) {
449
449
  chat: l,
450
450
  streamingManager: m
451
451
  } = await L(o, a, i);
452
- const v = await ae(o, g);
452
+ const S = await ae(o, g);
453
453
  return {
454
454
  agent: o,
455
455
  chatId: l.id,
456
- starterMessages: v,
456
+ starterMessages: S,
457
457
  async reconnect() {
458
458
  const {
459
459
  streamingManager: s
@@ -463,20 +463,21 @@ async function de(e, a) {
463
463
  disconnect() {
464
464
  return r.abort(), w.disconnect(), m.disconnect();
465
465
  },
466
- chat(s) {
466
+ chat(s, h = !1) {
467
467
  if (s.length === 0)
468
468
  throw new Error("Messages cannot be empty");
469
469
  return s[s.length - 1].created_at = (/* @__PURE__ */ new Date()).toISOString(), s[s.length - 1].role || (s[s.length - 1].role = "user"), i.chat(o.id, l.id, {
470
470
  sessionId: m.sessionId,
471
471
  streamId: m.streamId,
472
- messages: s
472
+ messages: s,
473
+ append_chat: h
473
474
  }, {
474
475
  signal: r.signal
475
476
  });
476
477
  },
477
- rate(s, S, C) {
478
- var p, _, h;
479
- const c = ((p = S.matches) == null ? void 0 : p.map(($) => [$.document_id, $.id])) ?? [];
478
+ rate(s, h, C) {
479
+ var p, _, v;
480
+ const c = ((p = h.matches) == null ? void 0 : p.map(($) => [$.document_id, $.id])) ?? [];
480
481
  return C ? d.update(C, {
481
482
  agent_id: o.id,
482
483
  knowledge_id: ((_ = o.knowledge) == null ? void 0 : _.id) ?? "",
@@ -485,7 +486,7 @@ async function de(e, a) {
485
486
  matches: c
486
487
  }) : d.create({
487
488
  agent_id: o.id,
488
- knowledge_id: ((h = o.knowledge) == null ? void 0 : h.id) ?? "",
489
+ knowledge_id: ((v = o.knowledge) == null ? void 0 : v.id) ?? "",
489
490
  chat_id: l.id,
490
491
  score: s,
491
492
  matches: c
@@ -495,7 +496,7 @@ async function de(e, a) {
495
496
  return d.delete(s);
496
497
  },
497
498
  speak(s) {
498
- function S() {
499
+ function h() {
499
500
  if (s.type === "text") {
500
501
  let C = o.presenter.voice;
501
502
  return s.provider && (C = s.provider), {
@@ -512,7 +513,7 @@ async function de(e, a) {
512
513
  throw new Error("Invalid payload");
513
514
  }
514
515
  return m.speak({
515
- script: S()
516
+ script: h()
516
517
  });
517
518
  }
518
519
  };
@@ -1 +1 @@
1
- (function(g,$){typeof exports=="object"&&typeof module<"u"?$(exports):typeof define=="function"&&define.amd?define(["exports"],$):(g=typeof globalThis<"u"?globalThis:g||self,$(g.index={}))})(this,function(g){"use strict";var $=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))($||{}),P=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(P||{}),k=(e=>(e.Start="START",e.Stop="STOP",e))(k||{}),M=(e=>(e.ChatAnswer="chat/answer",e.ChatPartial="chat/partial",e.StreamDone="stream/done",e.StreamStarted="stream/started",e.StreamFailed="stream/error",e))(M||{}),b=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(b||{}),K=(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))(K||{}),T=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(T||{}),O=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e))(O||{}),N=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(N||{}),B=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(B||{}),D=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(D||{}),W=(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))(W||{}),E=(e=>(e.Clip="clip",e.Talk="talk",e))(E||{});const R="https://api.d-id.com",q="wss://notifications.d-id.com",z=()=>Math.random().toString(16).slice(2);function J(){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 x=z();function H(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}.${J()}_${x}`;throw new Error(`Unknown auth type: ${e}`)}function L(e,a=R){const n=async(t,r)=>{const i=await fetch(a+(t!=null&&t.startsWith("/")?t:`/${t}`),{...r,headers:{...r==null?void 0:r.headers,Authorization:H(e),"Content-Type":"application/json"}});if(!i.ok){let d=await i.text().catch(()=>"Failed to fetch");throw new Error(d)}return i.json()};return{get(t,r){return n(t,{...r,method:"GET"})},post(t,r,i){return n(t,{...i,body:JSON.stringify(r),method:"POST"})},delete(t,r,i){return n(t,{...i,body:JSON.stringify(r),method:"DELETE"})},patch(t,r,i){return n(t,{...i,body:JSON.stringify(r),method:"PATCH"})}}}function j(e,a=R){const n=L(e,`${a}/agents`);return{create(t,r){return n.post("/",t,r)},getAgents(t,r){return n.get(`/${t?`?tag=${t}`:""}`,r).then(i=>i??[])},getById(t,r){return n.get(`/${t}`,r)},delete(t,r){return n.delete(`/${t}`,void 0,r)},update(t,r,i){return n.patch(`/${t}`,r,i)},newChat(t,r){return n.post(`/${t}/chat`,void 0,r)},chat(t,r,i,d){return n.post(`/${t}/chat/${r}`,i,d)}}}function Q(e,a=R){const n=L(e,`${a}/knowledge`);return{createKnowledge(t,r){return n.post("/",t,r)},getKnowledgeBase(t){return n.get("/",t)},getKnowledge(t,r){return n.get(`/${t}`,r)},deleteKnowledge(t,r){return n.delete(`/${t}`,void 0,r)},createDocument(t,r,i){return n.post(`/${t}/documents`,r,i)},deleteDocument(t,r,i){return n.delete(`/${t}/documents/${r}`,void 0,i)},getDocuments(t,r){return n.get(`/${t}/documents`,r)},getDocument(t,r,i){return n.get(`/${t}/documents/${r}`,i)},getRecords(t,r,i){return n.get(`/${t}/documents/${r}/records`,i)},query(t,r,i){return n.post(`/${t}/query`,{query:r},i)}}}function V(e,a=R){const n=L(e,`${a}/chats/ratings`);return{create(t,r){return n.post("/",t,r)},getByKnowledge(t,r){return n.get(`/${t}`,r).then(i=>i??[])},update(t,r,i){return n.patch(`/${t}`,r,i)},delete(t,r){return n.delete(`/${t}`,r)}}}const X=e=>new Promise(a=>setTimeout(a,e));function Y(e){return new Promise((a,n)=>{const{callbacks:t,host:r,auth:i}=e,{onMessage:d=null,onOpen:m=null,onClose:o=null,onError:h=null}=t||{},l=new WebSocket(`${r}?authorization=${H(i)}`);l.onmessage=d,l.onclose=o,l.onerror=f=>{console.error(f),h==null||h(f),n(f)},l.onopen=f=>{m==null||m(f),a(l)}})}async function Z(e){const{retries:a=1}=e;let n=null;for(let t=0;(n==null?void 0:n.readyState)!==WebSocket.OPEN;t++)try{n=await Y(e)}catch(r){if(t===a)throw r;await X(t*500)}return n}async function G(e,a,n){const t=n?[n]:[],r=await Z({auth:e,host:a,callbacks:{onMessage:i=>{const d=JSON.parse(i.data);t.forEach(m=>m(d.event,d))}}});return{socket:r,disconnect:()=>r.close(),subscribeToEvents:i=>t.push(i)}}function ee(e,a){const n=L(e,a);return{createStream(t){return n.post("/clips/streams",{driver_id:t.driver_id,presenter_id:t.presenter_id,compatibility_mode:t.compatibility_mode})},startConnection(t,r,i){return n.post(`/clips/streams/${t}/sdp`,{session_id:i,answer:r})},addIceCandidate(t,r,i){return n.post(`/clips/streams/${t}/ice`,{session_id:i,...r})},sendStreamRequest(t,r,i){return n.post(`/clips/streams/${t}`,{session_id:r,...i})},close(t,r){return n.delete(`/clips/streams/${t}`,{session_id:r})}}}function te(e,a){const n=L(e,a);return{createStream(t,r){return n.post("/talks/streams",{source_url:t.source_url,driver_url:t.driver_url,face:t.face,config:t.config},r)},startConnection(t,r,i,d){return n.post(`/talks/streams/${t}/sdp`,{session_id:i,answer:r},d)},addIceCandidate(t,r,i,d){return n.post(`/talks/streams/${t}/ice`,{session_id:i,...r},d)},sendStreamRequest(t,r,i,d){return n.post(`/talks/streams/${t}`,{session_id:r,...i},d)},close(t,r,i){return n.delete(`/talks/streams/${t}`,{session_id:r},i)}}}function ne(e,a){return e.map((n,t)=>t===0?a?{index:t,timestamp:n.timestamp,bytesReceived:n.bytesReceived-a.bytesReceived,packetsReceived:n.packetsReceived-a.packetsReceived,packetsLost:n.packetsLost-a.packetsLost,jitter:n.jitter,frameWidth:n.frameWidth,frameHeight:n.frameHeight,framesPerSecond:n.framesPerSecond}:{index:t,timestamp:n.timestamp,bytesReceived:n.bytesReceived,packetsReceived:n.packetsReceived,packetsLost:n.packetsLost,jitter:n.jitter,frameWidth:n.frameWidth,frameHeight:n.frameHeight,framesPerSecond:n.framesPerSecond}:{index:t,timestamp:n.timestamp,bytesReceived:n.bytesReceived-e[t-1].bytesReceived,packetsReceived:n.packetsReceived-e[t-1].packetsReceived,packetsLost:n.packetsLost-e[t-1].packetsLost,jitter:n.jitter,frameWidth:n.frameWidth,frameHeight:n.frameHeight,framesPerSecond:n.framesPerSecond})}let F=!1;const _=(e,a)=>F&&console.log(e,a),re=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function ie(e,a){let n=[],t=0,r=0,i;return setInterval(()=>{e.getStats().then(m=>{m.forEach(o=>{if(o.type==="inbound-rtp"&&o.kind==="video"){if(r=n.length-1,o&&n[r]){const h=o.bytesReceived,l=n[r].bytesReceived;let f=i;i=h-l>0;let S;if(f!==i){if(i)t=n.length;else{const w=n.slice(t),u=t===0?void 0:n[t-1];S=ne(w,u),S=S.sort((s,y)=>y.packetsLost-s.packetsLost).slice(0,5)}a==null||a(i?k.Start:k.Stop,S)}}n.push(o)}})})},500)}async function ae(e,{debug:a=!1,callbacks:n,auth:t,baseURL:r=R}){F=a;const{startConnection:i,sendStreamRequest:d,close:m,createStream:o,addIceCandidate:h}=e.videoType===E.Clip?ee(t,r):te(t,r),{id:l,offer:f,ice_servers:S,session_id:w}=await o(e),u=new re({iceServers:S}),s=u.createDataChannel("JanusDataChannel");if(!w)throw new Error("Could not create session_id");const y=ie(u,n.onVideoStateChange);u.onicecandidate=c=>{_("peerConnection.onicecandidate",c),c.candidate&&c.candidate.sdpMid&&c.candidate.sdpMLineIndex!==null&&h(l,{candidate:c.candidate.candidate,sdpMid:c.candidate.sdpMid,sdpMLineIndex:c.candidate.sdpMLineIndex},w)},u.oniceconnectionstatechange=()=>{var c;_("peerConnection.oniceconnectionstatechange => "+u.iceConnectionState),(c=n.onConnectionStateChange)==null||c.call(n,u.iceConnectionState)},u.ontrack=c=>{var p;_("peerConnection.ontrack",c),(p=n.onSrcObjectReady)==null||p.call(n,c.streams[0])},s.onmessage=c=>{var p,A;if(s.readyState==="open"){const[v,I]=c.data.split(":");v===M.StreamStarted?console.log("StreamStarted",v,I):v===M.StreamDone?console.log("StreamDone"):v===M.StreamFailed?((p=n.onVideoStateChange)==null||p.call(n,k.Stop,{event:v,data:I}),clearInterval(y),console.log("StreamFailed")):(A=n.onMessage)==null||A.call(n,v,decodeURIComponent(I))}},await u.setRemoteDescription(f),_("set remote description OK");const C=await u.createAnswer();return _("create answer OK"),await u.setLocalDescription(C),_("set local description OK"),await i(l,C,w),_("start connection OK"),{speak(c){return d(l,w,c)},async disconnect(){var c,p;l&&(u&&(u.close(),u.oniceconnectionstatechange=null,u.onnegotiationneeded=null,u.onicecandidate=null,u.ontrack=null),await m(l,w).catch(A=>{}),(c=n.onConnectionStateChange)==null||c.call(n,"closed"),(p=n.onVideoStateChange)==null||p.call(n,k.Stop),clearInterval(y))},sessionId:w,streamId:l}}function se(e,a){var n;return(n=e.knowledge)!=null&&n.id?a.getKnowledge(e.knowledge.id).then(t=>(t==null?void 0:t.starter_message)||[]):[]}function oe(e){return e.presenter.type===E.Clip?{videoType:E.Clip,driver_id:e.presenter.driver_id,presenter_id:e.presenter.presenter_id}:{videoType:E.Talk,source_url:e.presenter.source_url}}function U(e,a,n,t){return new Promise(async(r,i)=>{const d=await ae(oe(e),{...a,callbacks:{...a.callbacks,onConnectionStateChange:async m=>{var o,h;if(m==="connected")try{t||(t=await n.newChat(e.id)),r({chat:t,streamingManager:d})}catch(l){console.error(l),i(new Error("Cannot create new chat"))}else m==="failed"&&i(new Error("Cannot create connection"));(h=(o=a.callbacks).onConnectionStateChange)==null||h.call(o,m)}}})})}function de(e,a,n){return j(a,n||R).getById(e)}async function ce(e,a){var w,u;const n=a.baseURL||R,t=a.wsURL||q,r=new AbortController,i=j(a.auth,n),d=V(a.auth,n),m=Q(a.auth,n),o=typeof e=="string"?await i.getById(e):e;(u=(w=a.callbacks)==null?void 0:w.onAgentReady)==null||u.call(w,o);const h=await G(a.auth,t,a.callbacks.onChatEvents);let{chat:l,streamingManager:f}=await U(o,a,i);const S=await se(o,m);return{agent:o,chatId:l.id,starterMessages:S,async reconnect(){const{streamingManager:s}=await U(o,a,i,l);f=s},disconnect(){return r.abort(),h.disconnect(),f.disconnect()},chat(s){if(s.length===0)throw new Error("Messages cannot be empty");return s[s.length-1].created_at=new Date().toISOString(),s[s.length-1].role||(s[s.length-1].role="user"),i.chat(o.id,l.id,{sessionId:f.sessionId,streamId:f.streamId,messages:s},{signal:r.signal})},rate(s,y,C){var p,A,v;const c=((p=y.matches)==null?void 0:p.map(I=>[I.document_id,I.id]))??[];return C?d.update(C,{agent_id:o.id,knowledge_id:((A=o.knowledge)==null?void 0:A.id)??"",chat_id:l.id,score:s,matches:c}):d.create({agent_id:o.id,knowledge_id:((v=o.knowledge)==null?void 0:v.id)??"",chat_id:l.id,score:s,matches:c})},deleteRate(s){return d.delete(s)},speak(s){function y(){if(s.type==="text"){let C=o.presenter.voice;return s.provider&&(C=s.provider),{type:"text",provider:C,input:s.input,ssml:s.ssml||!1}}else if(s.type==="audio")return{type:"audio",audio_url:s.audio_url};throw new Error("Invalid payload")}return f.speak({script:y()})}}}g.ChatMode=O,g.ChatProgress=N,g.DocumentType=W,g.KnowledgeType=D,g.PlanGroup=K,g.Providers=$,g.RateState=T,g.Subject=B,g.UserPlan=b,g.VoiceAccess=P,g.createAgentManager=ce,g.getAgent=de,Object.defineProperty(g,Symbol.toStringTag,{value:"Module"})});
1
+ (function(g,$){typeof exports=="object"&&typeof module<"u"?$(exports):typeof define=="function"&&define.amd?define(["exports"],$):(g=typeof globalThis<"u"?globalThis:g||self,$(g.index={}))})(this,function(g){"use strict";var $=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))($||{}),P=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(P||{}),k=(e=>(e.Start="START",e.Stop="STOP",e))(k||{}),M=(e=>(e.ChatAnswer="chat/answer",e.ChatPartial="chat/partial",e.StreamDone="stream/done",e.StreamStarted="stream/started",e.StreamFailed="stream/error",e))(M||{}),b=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(b||{}),K=(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))(K||{}),T=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(T||{}),O=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e))(O||{}),N=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(N||{}),B=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(B||{}),D=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(D||{}),W=(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))(W||{}),E=(e=>(e.Clip="clip",e.Talk="talk",e))(E||{});const R="https://api.d-id.com",q="wss://notifications.d-id.com",z=()=>Math.random().toString(16).slice(2);function J(){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 x=z();function H(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}.${J()}_${x}`;throw new Error(`Unknown auth type: ${e}`)}function L(e,a=R){const n=async(t,r)=>{const i=await fetch(a+(t!=null&&t.startsWith("/")?t:`/${t}`),{...r,headers:{...r==null?void 0:r.headers,Authorization:H(e),"Content-Type":"application/json"}});if(!i.ok){let d=await i.text().catch(()=>"Failed to fetch");throw new Error(d)}return i.json()};return{get(t,r){return n(t,{...r,method:"GET"})},post(t,r,i){return n(t,{...i,body:JSON.stringify(r),method:"POST"})},delete(t,r,i){return n(t,{...i,body:JSON.stringify(r),method:"DELETE"})},patch(t,r,i){return n(t,{...i,body:JSON.stringify(r),method:"PATCH"})}}}function j(e,a=R){const n=L(e,`${a}/agents`);return{create(t,r){return n.post("/",t,r)},getAgents(t,r){return n.get(`/${t?`?tag=${t}`:""}`,r).then(i=>i??[])},getById(t,r){return n.get(`/${t}`,r)},delete(t,r){return n.delete(`/${t}`,void 0,r)},update(t,r,i){return n.patch(`/${t}`,r,i)},newChat(t,r){return n.post(`/${t}/chat`,void 0,r)},chat(t,r,i,d){return n.post(`/${t}/chat/${r}`,i,d)}}}function Q(e,a=R){const n=L(e,`${a}/knowledge`);return{createKnowledge(t,r){return n.post("/",t,r)},getKnowledgeBase(t){return n.get("/",t)},getKnowledge(t,r){return n.get(`/${t}`,r)},deleteKnowledge(t,r){return n.delete(`/${t}`,void 0,r)},createDocument(t,r,i){return n.post(`/${t}/documents`,r,i)},deleteDocument(t,r,i){return n.delete(`/${t}/documents/${r}`,void 0,i)},getDocuments(t,r){return n.get(`/${t}/documents`,r)},getDocument(t,r,i){return n.get(`/${t}/documents/${r}`,i)},getRecords(t,r,i){return n.get(`/${t}/documents/${r}/records`,i)},query(t,r,i){return n.post(`/${t}/query`,{query:r},i)}}}function V(e,a=R){const n=L(e,`${a}/chats/ratings`);return{create(t,r){return n.post("/",t,r)},getByKnowledge(t,r){return n.get(`/${t}`,r).then(i=>i??[])},update(t,r,i){return n.patch(`/${t}`,r,i)},delete(t,r){return n.delete(`/${t}`,r)}}}const X=e=>new Promise(a=>setTimeout(a,e));function Y(e){return new Promise((a,n)=>{const{callbacks:t,host:r,auth:i}=e,{onMessage:d=null,onOpen:m=null,onClose:o=null,onError:h=null}=t||{},l=new WebSocket(`${r}?authorization=${H(i)}`);l.onmessage=d,l.onclose=o,l.onerror=f=>{console.error(f),h==null||h(f),n(f)},l.onopen=f=>{m==null||m(f),a(l)}})}async function Z(e){const{retries:a=1}=e;let n=null;for(let t=0;(n==null?void 0:n.readyState)!==WebSocket.OPEN;t++)try{n=await Y(e)}catch(r){if(t===a)throw r;await X(t*500)}return n}async function G(e,a,n){const t=n?[n]:[],r=await Z({auth:e,host:a,callbacks:{onMessage:i=>{const d=JSON.parse(i.data);t.forEach(m=>m(d.event,d))}}});return{socket:r,disconnect:()=>r.close(),subscribeToEvents:i=>t.push(i)}}function ee(e,a){const n=L(e,a);return{createStream(t){return n.post("/clips/streams",{driver_id:t.driver_id,presenter_id:t.presenter_id,compatibility_mode:t.compatibility_mode})},startConnection(t,r,i){return n.post(`/clips/streams/${t}/sdp`,{session_id:i,answer:r})},addIceCandidate(t,r,i){return n.post(`/clips/streams/${t}/ice`,{session_id:i,...r})},sendStreamRequest(t,r,i){return n.post(`/clips/streams/${t}`,{session_id:r,...i})},close(t,r){return n.delete(`/clips/streams/${t}`,{session_id:r})}}}function te(e,a){const n=L(e,a);return{createStream(t,r){return n.post("/talks/streams",{source_url:t.source_url,driver_url:t.driver_url,face:t.face,config:t.config},r)},startConnection(t,r,i,d){return n.post(`/talks/streams/${t}/sdp`,{session_id:i,answer:r},d)},addIceCandidate(t,r,i,d){return n.post(`/talks/streams/${t}/ice`,{session_id:i,...r},d)},sendStreamRequest(t,r,i,d){return n.post(`/talks/streams/${t}`,{session_id:r,...i},d)},close(t,r,i){return n.delete(`/talks/streams/${t}`,{session_id:r},i)}}}function ne(e,a){return e.map((n,t)=>t===0?a?{index:t,timestamp:n.timestamp,bytesReceived:n.bytesReceived-a.bytesReceived,packetsReceived:n.packetsReceived-a.packetsReceived,packetsLost:n.packetsLost-a.packetsLost,jitter:n.jitter,frameWidth:n.frameWidth,frameHeight:n.frameHeight,framesPerSecond:n.framesPerSecond}:{index:t,timestamp:n.timestamp,bytesReceived:n.bytesReceived,packetsReceived:n.packetsReceived,packetsLost:n.packetsLost,jitter:n.jitter,frameWidth:n.frameWidth,frameHeight:n.frameHeight,framesPerSecond:n.framesPerSecond}:{index:t,timestamp:n.timestamp,bytesReceived:n.bytesReceived-e[t-1].bytesReceived,packetsReceived:n.packetsReceived-e[t-1].packetsReceived,packetsLost:n.packetsLost-e[t-1].packetsLost,jitter:n.jitter,frameWidth:n.frameWidth,frameHeight:n.frameHeight,framesPerSecond:n.framesPerSecond})}let F=!1;const _=(e,a)=>F&&console.log(e,a),re=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function ie(e,a){let n=[],t=0,r=0,i;return setInterval(()=>{e.getStats().then(m=>{m.forEach(o=>{if(o.type==="inbound-rtp"&&o.kind==="video"){if(r=n.length-1,o&&n[r]){const h=o.bytesReceived,l=n[r].bytesReceived;let f=i;i=h-l>0;let y;if(f!==i){if(i)t=n.length;else{const w=n.slice(t),u=t===0?void 0:n[t-1];y=ne(w,u),y=y.sort((s,v)=>v.packetsLost-s.packetsLost).slice(0,5)}a==null||a(i?k.Start:k.Stop,y)}}n.push(o)}})})},500)}async function ae(e,{debug:a=!1,callbacks:n,auth:t,baseURL:r=R}){F=a;const{startConnection:i,sendStreamRequest:d,close:m,createStream:o,addIceCandidate:h}=e.videoType===E.Clip?ee(t,r):te(t,r),{id:l,offer:f,ice_servers:y,session_id:w}=await o(e),u=new re({iceServers:y}),s=u.createDataChannel("JanusDataChannel");if(!w)throw new Error("Could not create session_id");const v=ie(u,n.onVideoStateChange);u.onicecandidate=c=>{_("peerConnection.onicecandidate",c),c.candidate&&c.candidate.sdpMid&&c.candidate.sdpMLineIndex!==null&&h(l,{candidate:c.candidate.candidate,sdpMid:c.candidate.sdpMid,sdpMLineIndex:c.candidate.sdpMLineIndex},w)},u.oniceconnectionstatechange=()=>{var c;_("peerConnection.oniceconnectionstatechange => "+u.iceConnectionState),(c=n.onConnectionStateChange)==null||c.call(n,u.iceConnectionState)},u.ontrack=c=>{var p;_("peerConnection.ontrack",c),(p=n.onSrcObjectReady)==null||p.call(n,c.streams[0])},s.onmessage=c=>{var p,A;if(s.readyState==="open"){const[S,I]=c.data.split(":");S===M.StreamStarted?console.log("StreamStarted",S,I):S===M.StreamDone?console.log("StreamDone"):S===M.StreamFailed?((p=n.onVideoStateChange)==null||p.call(n,k.Stop,{event:S,data:I}),clearInterval(v),console.log("StreamFailed")):(A=n.onMessage)==null||A.call(n,S,decodeURIComponent(I))}},await u.setRemoteDescription(f),_("set remote description OK");const C=await u.createAnswer();return _("create answer OK"),await u.setLocalDescription(C),_("set local description OK"),await i(l,C,w),_("start connection OK"),{speak(c){return d(l,w,c)},async disconnect(){var c,p;l&&(u&&(u.close(),u.oniceconnectionstatechange=null,u.onnegotiationneeded=null,u.onicecandidate=null,u.ontrack=null),await m(l,w).catch(A=>{}),(c=n.onConnectionStateChange)==null||c.call(n,"closed"),(p=n.onVideoStateChange)==null||p.call(n,k.Stop),clearInterval(v))},sessionId:w,streamId:l}}function se(e,a){var n;return(n=e.knowledge)!=null&&n.id?a.getKnowledge(e.knowledge.id).then(t=>(t==null?void 0:t.starter_message)||[]):[]}function oe(e){return e.presenter.type===E.Clip?{videoType:E.Clip,driver_id:e.presenter.driver_id,presenter_id:e.presenter.presenter_id}:{videoType:E.Talk,source_url:e.presenter.source_url}}function U(e,a,n,t){return new Promise(async(r,i)=>{const d=await ae(oe(e),{...a,callbacks:{...a.callbacks,onConnectionStateChange:async m=>{var o,h;if(m==="connected")try{t||(t=await n.newChat(e.id)),r({chat:t,streamingManager:d})}catch(l){console.error(l),i(new Error("Cannot create new chat"))}else m==="failed"&&i(new Error("Cannot create connection"));(h=(o=a.callbacks).onConnectionStateChange)==null||h.call(o,m)}}})})}function de(e,a,n){return j(a,n||R).getById(e)}async function ce(e,a){var w,u;const n=a.baseURL||R,t=a.wsURL||q,r=new AbortController,i=j(a.auth,n),d=V(a.auth,n),m=Q(a.auth,n),o=typeof e=="string"?await i.getById(e):e;(u=(w=a.callbacks)==null?void 0:w.onAgentReady)==null||u.call(w,o);const h=await G(a.auth,t,a.callbacks.onChatEvents);let{chat:l,streamingManager:f}=await U(o,a,i);const y=await se(o,m);return{agent:o,chatId:l.id,starterMessages:y,async reconnect(){const{streamingManager:s}=await U(o,a,i,l);f=s},disconnect(){return r.abort(),h.disconnect(),f.disconnect()},chat(s,v=!1){if(s.length===0)throw new Error("Messages cannot be empty");return s[s.length-1].created_at=new Date().toISOString(),s[s.length-1].role||(s[s.length-1].role="user"),i.chat(o.id,l.id,{sessionId:f.sessionId,streamId:f.streamId,messages:s,append_chat:v},{signal:r.signal})},rate(s,v,C){var p,A,S;const c=((p=v.matches)==null?void 0:p.map(I=>[I.document_id,I.id]))??[];return C?d.update(C,{agent_id:o.id,knowledge_id:((A=o.knowledge)==null?void 0:A.id)??"",chat_id:l.id,score:s,matches:c}):d.create({agent_id:o.id,knowledge_id:((S=o.knowledge)==null?void 0:S.id)??"",chat_id:l.id,score:s,matches:c})},deleteRate(s){return d.delete(s)},speak(s){function v(){if(s.type==="text"){let C=o.presenter.voice;return s.provider&&(C=s.provider),{type:"text",provider:C,input:s.input,ssml:s.ssml||!1}}else if(s.type==="audio")return{type:"audio",audio_url:s.audio_url};throw new Error("Invalid payload")}return f.speak({script:v()})}}}g.ChatMode=O,g.ChatProgress=N,g.DocumentType=W,g.KnowledgeType=D,g.PlanGroup=K,g.Providers=$,g.RateState=T,g.Subject=B,g.UserPlan=b,g.VoiceAccess=P,g.createAgentManager=ce,g.getAgent=de,Object.defineProperty(g,Symbol.toStringTag,{value:"Module"})});
@@ -25,6 +25,7 @@ export interface Message {
25
25
  }
26
26
  export interface ChatPayload {
27
27
  messages: Message[];
28
+ append_chat?: boolean;
28
29
  streamId: string;
29
30
  sessionId: string;
30
31
  }
@@ -95,8 +95,9 @@ export interface AgentManager {
95
95
  /**
96
96
  * Method to send a chat message to existing chat with the agent
97
97
  * @param messages
98
+ * @param append_chat: when true, append to existing agent chat, rather than creating a new one.
98
99
  */
99
- chat: (messages: Message[]) => Promise<ChatResponse>;
100
+ chat: (messages: Message[], append_chat?: boolean) => Promise<ChatResponse>;
100
101
  /**
101
102
  * Method to rate the answer in chat
102
103
  * @param score: 1 | -1 - score of the answer. 1 for positive, -1 for negative
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.52",
4
+ "version": "1.0.19-beta.54",
5
5
  "type": "module",
6
6
  "description": "d-id client sdk",
7
7
  "repository": {