@d-id/client-sdk 1.0.19-beta.77 → 1.0.19-beta.78

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
@@ -1,4 +1,4 @@
1
- var U = /* @__PURE__ */ ((e) => (e.TRIAL = "trial", e.BASIC = "basic", e.ENTERPRISE = "enterprise", e.LITE = "lite", e.ADVANCED = "advanced", e))(U || {}), B = /* @__PURE__ */ ((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 || {}), J = /* @__PURE__ */ ((e) => (e.Unrated = "Unrated", e.Positive = "Positive", e.Negative = "Negative", e))(J || {}), E = /* @__PURE__ */ ((e) => (e.Functional = "Functional", e.TextOnly = "TextOnly", e.Maintenance = "Maintenance", e))(E || {}), x = /* @__PURE__ */ ((e) => (e.Embed = "embed", e.Query = "query", e.Partial = "partial", e.Answer = "answer", e.Complete = "done", e))(x || {}), q = /* @__PURE__ */ ((e) => (e.KnowledgeProcessing = "knowledge/processing", e.KnowledgeIndexing = "knowledge/indexing", e.KnowledgeFailed = "knowledge/error", e.KnowledgeDone = "knowledge/done", e))(q || {}), V = /* @__PURE__ */ ((e) => (e.Knowledge = "knowledge", e.Document = "document", e.Record = "record", e))(V || {}), Q = /* @__PURE__ */ ((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))(Q || {}), C = /* @__PURE__ */ ((e) => (e.Clip = "clip", e.Talk = "talk", e))(C || {}), N = /* @__PURE__ */ ((e) => (e.Start = "START", e.Stop = "STOP", e))(N || {}), I = /* @__PURE__ */ ((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))(I || {}), M = /* @__PURE__ */ ((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 || {}), X = /* @__PURE__ */ ((e) => (e.Amazon = "amazon", e.Microsoft = "microsoft", e.Afflorithmics = "afflorithmics", e.Elevenlabs = "elevenlabs", e))(X || {}), Y = /* @__PURE__ */ ((e) => (e.Public = "public", e.Premium = "premium", e.Private = "private", e))(Y || {});
1
+ var U = /* @__PURE__ */ ((e) => (e.TRIAL = "trial", e.BASIC = "basic", e.ENTERPRISE = "enterprise", e.LITE = "lite", e.ADVANCED = "advanced", e))(U || {}), B = /* @__PURE__ */ ((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 || {}), J = /* @__PURE__ */ ((e) => (e.Unrated = "Unrated", e.Positive = "Positive", e.Negative = "Negative", e))(J || {}), E = /* @__PURE__ */ ((e) => (e.Functional = "Functional", e.TextOnly = "TextOnly", e.Maintenance = "Maintenance", e))(E || {}), x = /* @__PURE__ */ ((e) => (e.Embed = "embed", e.Query = "query", e.Partial = "partial", e.Answer = "answer", e.Complete = "done", e))(x || {}), q = /* @__PURE__ */ ((e) => (e.KnowledgeProcessing = "knowledge/processing", e.KnowledgeIndexing = "knowledge/indexing", e.KnowledgeFailed = "knowledge/error", e.KnowledgeDone = "knowledge/done", e))(q || {}), V = /* @__PURE__ */ ((e) => (e.Knowledge = "knowledge", e.Document = "document", e.Record = "record", e))(V || {}), Q = /* @__PURE__ */ ((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))(Q || {}), C = /* @__PURE__ */ ((e) => (e.Clip = "clip", e.Talk = "talk", e))(C || {}), N = /* @__PURE__ */ ((e) => (e.Start = "START", e.Stop = "STOP", e))(N || {}), I = /* @__PURE__ */ ((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))(I || {}), S = /* @__PURE__ */ ((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))(S || {}), X = /* @__PURE__ */ ((e) => (e.Amazon = "amazon", e.Microsoft = "microsoft", e.Afflorithmics = "afflorithmics", e.Elevenlabs = "elevenlabs", e))(X || {}), Y = /* @__PURE__ */ ((e) => (e.Public = "public", e.Premium = "premium", e.Private = "private", e))(Y || {});
2
2
  const T = "https://api.d-id.com", Z = "wss://notifications.d-id.com", G = "79f81a83a67430be2bc0fd61042b8faa", P = () => Math.random().toString(16).slice(2);
3
3
  function D() {
4
4
  let e = window.localStorage.getItem("did_external_key_id");
@@ -107,11 +107,11 @@ function ne(e) {
107
107
  onOpen: d = null,
108
108
  onClose: g = null,
109
109
  onError: l = null
110
- } = n || {}, f = new WebSocket(`${a}?authorization=${H(i)}`);
111
- f.onmessage = o, f.onclose = g, f.onerror = (p) => {
112
- console.error(p), l == null || l("Websocket failed to connect", p), t(p);
113
- }, f.onopen = (p) => {
114
- d == null || d(p), r(f);
110
+ } = n || {}, p = new WebSocket(`${a}?authorization=${H(i)}`);
111
+ p.onmessage = o, p.onclose = g, p.onerror = (v) => {
112
+ console.error(v), l == null || l("Websocket failed to connect", v), t(v);
113
+ }, p.onopen = (v) => {
114
+ d == null || d(v), r(p);
115
115
  };
116
116
  });
117
117
  }
@@ -265,20 +265,20 @@ function se(e, r) {
265
265
  });
266
266
  }
267
267
  let j = !1;
268
- const A = (e, r) => j && console.log(e, r), oe = (window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection).bind(window);
268
+ const $ = (e, r) => j && console.log(e, r), oe = (window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection).bind(window);
269
269
  function ce(e) {
270
270
  switch (e) {
271
271
  case "connected":
272
- return M.Connected;
272
+ return S.Connected;
273
273
  case "checking":
274
- return M.Connecting;
274
+ return S.Connecting;
275
275
  case "failed":
276
- return M.Fail;
276
+ return S.Fail;
277
277
  case "new":
278
278
  case "closed":
279
279
  case "disconnected":
280
280
  default:
281
- return M.New;
281
+ return S.New;
282
282
  }
283
283
  }
284
284
  function de(e, r) {
@@ -288,16 +288,16 @@ function de(e, r) {
288
288
  g.forEach((l) => {
289
289
  if (l.type === "inbound-rtp" && l.kind === "video") {
290
290
  if (a = t.length - 1, l && t[a]) {
291
- const f = l.bytesReceived, p = t[a].bytesReceived, k = o;
291
+ const p = l.bytesReceived, v = t[a].bytesReceived, k = o;
292
292
  let y;
293
- if (o = f - p > 0, i = o ? 0 : ++i, k !== o)
293
+ if (o = p - v > 0, i = o ? 0 : ++i, k !== o)
294
294
  if (o)
295
295
  n = t.length, r == null || r(N.Start, y);
296
296
  else {
297
297
  const L = t.slice(n), b = n === 0 ? void 0 : t[n - 1];
298
- y = se(L, b), y = y.sort((S, s) => s.packetsLost - S.packetsLost).slice(0, 5);
298
+ y = se(L, b), y = y.sort((M, s) => s.packetsLost - M.packetsLost).slice(0, 5);
299
299
  }
300
- !o && i === 3 && (r == null || r(N.Stop, y));
300
+ !o && i === 2 && (r == null || r(N.Stop, y));
301
301
  }
302
302
  t.push(l);
303
303
  }
@@ -317,72 +317,80 @@ async function ge(e, r, {
317
317
  const {
318
318
  startConnection: g,
319
319
  sendStreamRequest: l,
320
- close: f,
321
- createStream: p,
320
+ close: p,
321
+ createStream: v,
322
322
  addIceCandidate: k
323
323
  } = r.videoType === C.Clip ? re(a, o, e) : ie(a, o, e), {
324
324
  id: y,
325
325
  offer: L,
326
326
  ice_servers: b,
327
- session_id: S
328
- } = await p(r), s = new oe({
327
+ session_id: M
328
+ } = await v(r), s = new oe({
329
329
  iceServers: b
330
330
  }), u = s.createDataChannel("JanusDataChannel");
331
- if (!S)
331
+ if (!M)
332
332
  throw new Error("Could not create session_id");
333
333
  const m = de(s, n.onVideoStateChange);
334
334
  s.onicecandidate = (c) => {
335
- A("peerConnection.onicecandidate", c), c.candidate && c.candidate.sdpMid && c.candidate.sdpMLineIndex !== null ? k(y, {
335
+ $("peerConnection.onicecandidate", c), c.candidate && c.candidate.sdpMid && c.candidate.sdpMLineIndex !== null ? k(y, {
336
336
  candidate: c.candidate.candidate,
337
337
  sdpMid: c.candidate.sdpMid,
338
338
  sdpMLineIndex: c.candidate.sdpMLineIndex
339
- }, S) : k(y, {
339
+ }, M) : k(y, {
340
340
  candidate: null
341
- }, S);
341
+ }, M);
342
342
  }, s.oniceconnectionstatechange = () => {
343
343
  var h;
344
- A("peerConnection.oniceconnectionstatechange => " + s.iceConnectionState);
344
+ $("peerConnection.oniceconnectionstatechange => " + s.iceConnectionState);
345
345
  const c = ce(s.iceConnectionState);
346
- c === M.Connected ? (i.track("agent-chat-loaded"), d = setTimeout(() => {
347
- var w;
348
- (w = n.onConnectionStateChange) == null || w.call(n, M.Connected);
346
+ c === S.Connected ? (i.track("agent-chat-loaded"), d = setTimeout(() => {
347
+ var f;
348
+ (f = n.onConnectionStateChange) == null || f.call(n, S.Connected);
349
349
  }, 5e3)) : (clearTimeout(d), (h = n.onConnectionStateChange) == null || h.call(n, c));
350
350
  }, s.ontrack = (c) => {
351
351
  var h;
352
- A("peerConnection.ontrack", c), (h = n.onSrcObjectReady) == null || h.call(n, c.streams[0]);
352
+ $("peerConnection.ontrack", c), (h = n.onSrcObjectReady) == null || h.call(n, c.streams[0]);
353
353
  }, u.onmessage = (c) => {
354
354
  var h;
355
355
  if (u.readyState === "open") {
356
- const [w, _] = c.data.split(":");
357
- w === I.StreamVideoCreated || I.StreamVideoDone || I.StreamVideoError || I.StreamVideoRejected ? i.track("agent-video", {
358
- event: w,
356
+ const [f, _] = c.data.split(":");
357
+ f === I.StreamVideoCreated || I.StreamVideoDone || I.StreamVideoError || I.StreamVideoRejected ? i.track("agent-video", {
358
+ event: f,
359
359
  ...c
360
- }) : w === I.StreamFailed || w === I.StreamDone ? clearInterval(m) : w === I.StreamReady ? (clearTimeout(d), (h = n.onConnectionStateChange) == null || h.call(n, M.Connected)) : w === I.StreamCreated && i.track("agent-video", {
360
+ }) : f === I.StreamFailed || f === I.StreamDone ? clearInterval(m) : f === I.StreamReady ? (clearTimeout(d), (h = n.onConnectionStateChange) == null || h.call(n, S.Connected)) : f === I.StreamCreated && i.track("agent-video", {
361
361
  event: "created"
362
362
  });
363
363
  }
364
- }, await s.setRemoteDescription(L), A("set remote description OK");
365
- const v = await s.createAnswer();
366
- return A("create answer OK"), await s.setLocalDescription(v), A("set local description OK"), await g(y, v, S), A("start connection OK"), {
364
+ }, await s.setRemoteDescription(L), $("set remote description OK");
365
+ const w = await s.createAnswer();
366
+ return $("create answer OK"), await s.setLocalDescription(w), $("set local description OK"), await g(y, w, M), $("start connection OK"), {
367
367
  /**
368
368
  * Method to send request to server to get clip or talk depend on you payload
369
369
  * @param payload
370
370
  */
371
371
  speak(c) {
372
- return l(y, S, c);
372
+ return l(y, M, c);
373
373
  },
374
374
  /**
375
375
  * Method to close RTC connection
376
376
  */
377
377
  async disconnect() {
378
378
  var c, h;
379
- y && (s && (s.close(), s.oniceconnectionstatechange = null, s.onnegotiationneeded = null, s.onicecandidate = null, s.ontrack = null), await f(y, S).catch((w) => {
380
- }), (c = n.onConnectionStateChange) == null || c.call(n, M.New), (h = n.onVideoStateChange) == null || h.call(n, N.Stop), clearInterval(m));
379
+ if (y) {
380
+ s && (s.close(), s.oniceconnectionstatechange = null, s.onnegotiationneeded = null, s.onicecandidate = null, s.ontrack = null);
381
+ try {
382
+ await p(y, M).catch((f) => {
383
+ });
384
+ } catch (f) {
385
+ $("Error on close stream connection", f);
386
+ }
387
+ (c = n.onConnectionStateChange) == null || c.call(n, S.New), (h = n.onVideoStateChange) == null || h.call(n, N.Stop), clearInterval(m);
388
+ }
381
389
  },
382
390
  /**
383
391
  * Session identifier information, should be returned in the body of all streaming requests
384
392
  */
385
- sessionId: S,
393
+ sessionId: M,
386
394
  /**
387
395
  * Id of current RTC stream
388
396
  */
@@ -471,8 +479,8 @@ function z(e, r, t, n, a) {
471
479
  callbacks: {
472
480
  ...r.callbacks,
473
481
  onConnectionStateChange: async (l) => {
474
- var f, p;
475
- if (l === M.Connected)
482
+ var p, v;
483
+ if (l === S.Connected)
476
484
  try {
477
485
  d || (d = await t.newChat(e.id), n.track("agent-chat", {
478
486
  event: "created",
@@ -486,15 +494,15 @@ function z(e, r, t, n, a) {
486
494
  console.error(k), o("Cannot create new chat");
487
495
  }
488
496
  else
489
- l === M.Fail && o(new Error("Cannot create connection"));
490
- (p = (f = r.callbacks).onConnectionStateChange) == null || p.call(f, l);
497
+ l === S.Fail && o(new Error("Cannot create connection"));
498
+ (v = (p = r.callbacks).onConnectionStateChange) == null || v.call(p, l);
491
499
  },
492
- onVideoStateChange(l, f) {
493
- var p, k;
500
+ onVideoStateChange(l, p) {
501
+ var v, k;
494
502
  n.track("agent-video", {
495
503
  event: l,
496
- rtc_stats: f ?? []
497
- }), (k = (p = r.callbacks).onVideoStateChange) == null || k.call(p, l, f);
504
+ rtc_stats: p ?? []
505
+ }), (k = (v = r.callbacks).onVideoStateChange) == null || k.call(v, l, p);
498
506
  }
499
507
  },
500
508
  analytics: n
@@ -519,7 +527,7 @@ function O(e) {
519
527
  }];
520
528
  }
521
529
  async function we(e, r) {
522
- var L, b, S;
530
+ var L, b, M;
523
531
  const t = {
524
532
  messages: [],
525
533
  chatMode: r.mode || E.Functional
@@ -536,34 +544,34 @@ async function we(e, r) {
536
544
  event: "loaded",
537
545
  ...me(g)
538
546
  });
539
- const f = {
547
+ const p = {
540
548
  onMessage: (s, u) => {
541
- var m, v;
549
+ var m, w;
542
550
  if ("content" in u) {
543
551
  const {
544
552
  content: c
545
553
  } = u, h = t.messages[t.messages.length - 1];
546
554
  (h == null ? void 0 : h.role) === "assistant" && (n < t.messages.length && (h.content = s === x.Partial ? h.content + c : c), s === x.Answer && (n = t.messages.length)), s === x.Complete && l.track("agent-message-received", {
547
555
  messages: t.messages.length
548
- }), (v = (m = r.callbacks).onNewMessage) == null || v.call(m, t.messages);
556
+ }), (w = (m = r.callbacks).onNewMessage) == null || w.call(m, t.messages);
549
557
  }
550
558
  }
551
559
  };
552
- async function p() {
553
- var v, c, h, w, _;
554
- const s = await W(r.auth, a, f), {
560
+ async function v() {
561
+ var w, c, h, f, _;
562
+ const s = await W(r.auth, a, p), {
555
563
  streamingManager: u,
556
564
  chat: m
557
565
  } = await z(g, r, d, l, t.chat);
558
- n = -1, t.messages = O(g), (c = (v = r.callbacks).onNewMessage) == null || c.call(v, t.messages), m != null && m.id && m.id !== ((h = t.chat) == null ? void 0 : h.id) && ((_ = (w = r.callbacks).onNewChat) == null || _.call(w, m == null ? void 0 : m.id)), t.streamingManager = u, t.socketManager = s, t.chat = m, y(E.Functional), l.track("agent-chat", {
566
+ n = -1, t.messages.length === 0 && (t.messages = O(g), (c = (w = r.callbacks).onNewMessage) == null || c.call(w, t.messages)), m != null && m.id && m.id !== ((h = t.chat) == null ? void 0 : h.id) && ((_ = (f = r.callbacks).onNewChat) == null || _.call(f, m == null ? void 0 : m.id)), t.streamingManager = u, t.socketManager = s, t.chat = m, y(E.Functional), l.track("agent-chat", {
559
567
  event: "connect",
560
568
  chatId: m.id,
561
569
  agentId: g.id
562
570
  });
563
571
  }
564
572
  async function k() {
565
- var s, u, m, v, c;
566
- (s = t.socketManager) == null || s.disconnect(), await ((u = t.streamingManager) == null ? void 0 : u.disconnect()), delete t.streamingManager, delete t.socketManager, t.messages = O(g), (v = (m = r.callbacks).onNewMessage) == null || v.call(m, t.messages), l.track("agent-chat", {
573
+ var s, u, m, w, c;
574
+ (s = t.socketManager) == null || s.disconnect(), await ((u = t.streamingManager) == null ? void 0 : u.disconnect()), delete t.streamingManager, delete t.socketManager, t.messages = O(g), (w = (m = r.callbacks).onNewMessage) == null || w.call(m, t.messages), l.track("agent-chat", {
567
575
  event: "disconnect",
568
576
  chatId: (c = t.chat) == null ? void 0 : c.id,
569
577
  agentId: g.id
@@ -577,14 +585,16 @@ async function we(e, r) {
577
585
  }
578
586
  return {
579
587
  agent: g,
580
- starterMessages: ((S = g.knowledge) == null ? void 0 : S.starter_message) || [],
581
- connect: p,
588
+ starterMessages: ((M = g.knowledge) == null ? void 0 : M.starter_message) || [],
589
+ connect: v,
582
590
  disconnect: k,
583
591
  changeMode: y,
584
592
  async reconnect() {
593
+ var w, c;
585
594
  if (!t.chat)
586
- return p();
587
- const s = await W(r.auth, a, f), {
595
+ return v();
596
+ (w = t.socketManager) == null || w.disconnect(), await ((c = t.streamingManager) == null ? void 0 : c.disconnect());
597
+ const s = await W(r.auth, a, p), {
588
598
  streamingManager: u,
589
599
  chat: m
590
600
  } = await z(g, r, d, l, t.chat);
@@ -595,17 +605,17 @@ async function we(e, r) {
595
605
  });
596
606
  },
597
607
  async chat(s, u = !1) {
598
- var m, v, c, h, w, _;
608
+ var m, w, c, h, f, _;
599
609
  try {
600
610
  if (s.length >= 800)
601
611
  throw new Error("Message cannot be more than 800 characters");
602
- const $ = Date.now();
612
+ const A = Date.now();
603
613
  if (t.messages.push({
604
614
  id: P(),
605
615
  role: "user",
606
616
  content: s,
607
- created_at: new Date($).toISOString()
608
- }), (v = (m = r.callbacks).onNewMessage) == null || v.call(m, t.messages), s.length === 0)
617
+ created_at: new Date(A).toISOString()
618
+ }), (w = (m = r.callbacks).onNewMessage) == null || w.call(m, t.messages), s.length === 0)
609
619
  throw new Error("Message cannot be empty");
610
620
  if (t.chatMode === E.Maintenance)
611
621
  throw new Error("Chat is in maintenance mode");
@@ -629,33 +639,33 @@ async function we(e, r) {
629
639
  }), t.messages.push({
630
640
  id: P(),
631
641
  role: "assistant",
632
- content: R.result ?? "",
642
+ content: R.result || "",
633
643
  created_at: (/* @__PURE__ */ new Date()).toISOString(),
634
644
  matches: R.matches
635
- }), R.result && l.track("agent-message-received", {
636
- latency: Date.now() - $,
645
+ }), R.result && (l.track("agent-message-received", {
646
+ latency: Date.now() - A,
637
647
  messages: t.messages.length
638
- }), (_ = (w = r.callbacks).onNewMessage) == null || _.call(w, t.messages), R;
639
- } catch ($) {
648
+ }), (_ = (f = r.callbacks).onNewMessage) == null || _.call(f, t.messages)), R;
649
+ } catch (A) {
640
650
  throw l.track("agent-message-send", {
641
651
  event: "error",
642
652
  messages: t.messages.length
643
- }), $;
653
+ }), A;
644
654
  }
645
655
  },
646
656
  rate(s, u, m) {
647
- var h, w, _, $;
648
- const v = t.messages.find((R) => R.id === s);
657
+ var h, f, _, A;
658
+ const w = t.messages.find((R) => R.id === s);
649
659
  if (t.chat) {
650
- if (!v)
660
+ if (!w)
651
661
  throw new Error("Message not found");
652
662
  } else
653
663
  throw new Error("Chat is not initialized");
654
- const c = ((h = v.matches) == null ? void 0 : h.map((R) => [R.document_id, R.id])) ?? [];
664
+ const c = ((h = w.matches) == null ? void 0 : h.map((R) => [R.document_id, R.id])) ?? [];
655
665
  return l.track("agent-rate", {
656
666
  event: m ? "update" : "create",
657
667
  thumb: u === 1 ? "up" : "down",
658
- knowledge_id: ((w = g.knowledge) == null ? void 0 : w.id) ?? "",
668
+ knowledge_id: ((f = g.knowledge) == null ? void 0 : f.id) ?? "",
659
669
  matches: c,
660
670
  score: u
661
671
  }), m ? d.updateRating(g.id, t.chat.id, m, {
@@ -664,7 +674,7 @@ async function we(e, r) {
664
674
  matches: c,
665
675
  score: u
666
676
  }) : d.createRating(g.id, t.chat.id, {
667
- knowledge_id: (($ = g.knowledge) == null ? void 0 : $.id) ?? "",
677
+ knowledge_id: ((A = g.knowledge) == null ? void 0 : A.id) ?? "",
668
678
  message_id: s,
669
679
  matches: c,
670
680
  score: u
@@ -711,7 +721,7 @@ async function we(e, r) {
711
721
  export {
712
722
  E as ChatMode,
713
723
  x as ChatProgress,
714
- M as ConnectionState,
724
+ S as ConnectionState,
715
725
  Q as DocumentType,
716
726
  V as KnowledgeType,
717
727
  B as PlanGroup,
@@ -1 +1 @@
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||{}),S=(e=>(e.Clip="clip",e.Talk="talk",e))(S||{}),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||{},p=new WebSocket(`${a}?authorization=${q(r)}`);p.onmessage=o,p.onclose=g,p.onerror=v=>{console.error(v),l==null||l("Websocket failed to connect",v),t(v)},p.onopen=v=>{d==null||d(v),i(p)}})}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:S.Clip})},startConnection(a,r,o){return n.post(`/streams/${a}/sdp`,{session_id:o,answer:r,type:S.Clip})},addIceCandidate(a,r,o){return n.post(`/streams/${a}/ice`,{session_id:o,...r,type:S.Clip})},sendStreamRequest(a,r,o){return n.post(`/streams/${a}`,{session_id:r,...o,type:S.Clip})},close(a,r){return n.delete(`/streams/${a}`,{session_id:r,type:S.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:S.Talk},r)},startConnection(a,r,o,d){return n.post(`/streams/${a}/sdp`,{session_id:o,answer:r,type:S.Talk},d)},addIceCandidate(a,r,o,d){return n.post(`/streams/${a}/ice`,{session_id:o,...r,type:S.Talk},d)},sendStreamRequest(a,r,o,d){return n.post(`/streams/${a}`,{session_id:r,...o,type:S.Talk},d)},close(a,r,o){return n.delete(`/streams/${a}`,{session_id:r,type:S.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 p=l.bytesReceived,v=t[a].bytesReceived,M=o;let C;if(o=p-v>0,r=o?0:++r,M!==o)if(o)n=t.length,i==null||i(O.Start,C);else{const L=t.slice(n),P=n===0?void 0:t[n-1];C=oe(L,P),C=C.sort((_,s)=>s.packetsLost-_.packetsLost).slice(0,5)}!o&&r===3&&(i==null||i(O.Stop,C))}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:p,createStream:v,addIceCandidate:M}=i.videoType===S.Clip?re(a,o,e):se(a,o,e),{id:C,offer:L,ice_servers:P,session_id:_}=await v(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(C,{candidate:c.candidate.candidate,sdpMid:c.candidate.sdpMid,sdpMLineIndex:c.candidate.sdpMLineIndex},_):M(C,{candidate:null},_)},s.oniceconnectionstatechange=()=>{var h;E("peerConnection.oniceconnectionstatechange => "+s.iceConnectionState);const c=de(s.iceConnectionState);c===k.Connected?(r.track("agent-chat-loaded"),d=setTimeout(()=>{var f;(f=n.onConnectionStateChange)==null||f.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[f,I]=c.data.split(":");f===R.StreamVideoCreated||R.StreamVideoDone||R.StreamVideoError||R.StreamVideoRejected?r.track("agent-video",{event:f,...c}):f===R.StreamFailed||f===R.StreamDone?clearInterval(m):f===R.StreamReady?(clearTimeout(d),(h=n.onConnectionStateChange)==null||h.call(n,k.Connected)):f===R.StreamCreated&&r.track("agent-video",{event:"created"})}},await s.setRemoteDescription(L),E("set remote description OK");const y=await s.createAnswer();return E("create answer OK"),await s.setLocalDescription(y),E("set local description OK"),await g(C,y,_),E("start connection OK"),{speak(c){return l(C,_,c)},async disconnect(){var c,h;C&&(s&&(s.close(),s.oniceconnectionstatechange=null,s.onnegotiationneeded=null,s.onicecandidate=null,s.ontrack=null),await p(C,_).catch(f=>{}),(c=n.onConnectionStateChange)==null||c.call(n,k.New),(h=n.onVideoStateChange)==null||h.call(n,O.Stop),clearInterval(m))},sessionId:_,streamId:C}}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===S.Clip)return{videoType:S.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:S.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 p,v;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"));(v=(p=i.callbacks).onConnectionStateChange)==null||v.call(p,l)},onVideoStateChange(l,p){var v,M;n.track("agent-video",{event:l,rtc_stats:p??[]}),(M=(v=i.callbacks).onVideoStateChange)==null||M.call(v,l,p)}},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 p={onMessage:(s,u)=>{var m,y;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}),(y=(m=i.callbacks).onNewMessage)==null||y.call(m,t.messages)}}};async function v(){var y,c,h,f,I;const s=await X(i.auth,a,p),{streamingManager:u,chat:m}=await Z(g,i,d,l,t.chat);n=-1,t.messages=W(g),(c=(y=i.callbacks).onNewMessage)==null||c.call(y,t.messages),m!=null&&m.id&&m.id!==((h=t.chat)==null?void 0:h.id)&&((I=(f=i.callbacks).onNewChat)==null||I.call(f,m==null?void 0:m.id)),t.streamingManager=u,t.socketManager=s,t.chat=m,C($.Functional),l.track("agent-chat",{event:"connect",chatId:m.id,agentId:g.id})}async function M(){var s,u,m,y,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),(y=(m=i.callbacks).onNewMessage)==null||y.call(m,t.messages),l.track("agent-chat",{event:"disconnect",chatId:(c=t.chat)==null?void 0:c.id,agentId:g.id})}async function C(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:v,disconnect:M,changeMode:C,async reconnect(){if(!t.chat)return v();const s=await X(i.auth,a,p),{streamingManager:u,chat:m}=await Z(g,i,d,l,t.chat);t.streamingManager=u,t.socketManager=s,C($.Functional),l.track("agent-chat",{event:"reconnect",chatId:m.id,agentId:g.id})},async chat(s,u=!1){var m,y,c,h,f,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()}),(y=(m=i.callbacks).onNewMessage)==null||y.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=(f=i.callbacks).onNewMessage)==null||I.call(f,t.messages),A}catch(T){throw l.track("agent-message-send",{event:"error",messages:t.messages.length}),T}},rate(s,u,m){var h,f,I,T;const y=t.messages.find(A=>A.id===s);if(t.chat){if(!y)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const c=((h=y.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:((f=g.knowledge)==null?void 0:f.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=S,w.VoiceAccess=J,w.createAgentManager=fe,w.getAgent=we,Object.defineProperty(w,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||{}),S=(e=>(e.Clip="clip",e.Talk="talk",e))(S||{}),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||{},v=new WebSocket(`${a}?authorization=${q(r)}`);v.onmessage=o,v.onclose=g,v.onerror=y=>{console.error(y),l==null||l("Websocket failed to connect",y),t(y)},v.onopen=y=>{d==null||d(y),i(v)}})}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:S.Clip})},startConnection(a,r,o){return n.post(`/streams/${a}/sdp`,{session_id:o,answer:r,type:S.Clip})},addIceCandidate(a,r,o){return n.post(`/streams/${a}/ice`,{session_id:o,...r,type:S.Clip})},sendStreamRequest(a,r,o){return n.post(`/streams/${a}`,{session_id:r,...o,type:S.Clip})},close(a,r){return n.delete(`/streams/${a}`,{session_id:r,type:S.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:S.Talk},r)},startConnection(a,r,o,d){return n.post(`/streams/${a}/sdp`,{session_id:o,answer:r,type:S.Talk},d)},addIceCandidate(a,r,o,d){return n.post(`/streams/${a}/ice`,{session_id:o,...r,type:S.Talk},d)},sendStreamRequest(a,r,o,d){return n.post(`/streams/${a}`,{session_id:r,...o,type:S.Talk},d)},close(a,r,o){return n.delete(`/streams/${a}`,{session_id:r,type:S.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 v=l.bytesReceived,y=t[a].bytesReceived,M=o;let C;if(o=v-y>0,r=o?0:++r,M!==o)if(o)n=t.length,i==null||i(O.Start,C);else{const L=t.slice(n),P=n===0?void 0:t[n-1];C=oe(L,P),C=C.sort((_,s)=>s.packetsLost-_.packetsLost).slice(0,5)}!o&&r===2&&(i==null||i(O.Stop,C))}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:v,createStream:y,addIceCandidate:M}=i.videoType===S.Clip?re(a,o,e):se(a,o,e),{id:C,offer:L,ice_servers:P,session_id:_}=await y(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(C,{candidate:c.candidate.candidate,sdpMid:c.candidate.sdpMid,sdpMLineIndex:c.candidate.sdpMLineIndex},_):M(C,{candidate:null},_)},s.oniceconnectionstatechange=()=>{var h;E("peerConnection.oniceconnectionstatechange => "+s.iceConnectionState);const c=de(s.iceConnectionState);c===k.Connected?(r.track("agent-chat-loaded"),d=setTimeout(()=>{var p;(p=n.onConnectionStateChange)==null||p.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[p,I]=c.data.split(":");p===R.StreamVideoCreated||R.StreamVideoDone||R.StreamVideoError||R.StreamVideoRejected?r.track("agent-video",{event:p,...c}):p===R.StreamFailed||p===R.StreamDone?clearInterval(m):p===R.StreamReady?(clearTimeout(d),(h=n.onConnectionStateChange)==null||h.call(n,k.Connected)):p===R.StreamCreated&&r.track("agent-video",{event:"created"})}},await s.setRemoteDescription(L),E("set remote description OK");const f=await s.createAnswer();return E("create answer OK"),await s.setLocalDescription(f),E("set local description OK"),await g(C,f,_),E("start connection OK"),{speak(c){return l(C,_,c)},async disconnect(){var c,h;if(C){s&&(s.close(),s.oniceconnectionstatechange=null,s.onnegotiationneeded=null,s.onicecandidate=null,s.ontrack=null);try{await v(C,_).catch(p=>{})}catch(p){E("Error on close stream connection",p)}(c=n.onConnectionStateChange)==null||c.call(n,k.New),(h=n.onVideoStateChange)==null||h.call(n,O.Stop),clearInterval(m)}},sessionId:_,streamId:C}}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===S.Clip)return{videoType:S.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:S.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 v,y;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"));(y=(v=i.callbacks).onConnectionStateChange)==null||y.call(v,l)},onVideoStateChange(l,v){var y,M;n.track("agent-video",{event:l,rtc_stats:v??[]}),(M=(y=i.callbacks).onVideoStateChange)==null||M.call(y,l,v)}},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 v={onMessage:(s,u)=>{var m,f;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}),(f=(m=i.callbacks).onNewMessage)==null||f.call(m,t.messages)}}};async function y(){var f,c,h,p,I;const s=await X(i.auth,a,v),{streamingManager:u,chat:m}=await Z(g,i,d,l,t.chat);n=-1,t.messages.length===0&&(t.messages=W(g),(c=(f=i.callbacks).onNewMessage)==null||c.call(f,t.messages)),m!=null&&m.id&&m.id!==((h=t.chat)==null?void 0:h.id)&&((I=(p=i.callbacks).onNewChat)==null||I.call(p,m==null?void 0:m.id)),t.streamingManager=u,t.socketManager=s,t.chat=m,C($.Functional),l.track("agent-chat",{event:"connect",chatId:m.id,agentId:g.id})}async function M(){var s,u,m,f,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),(f=(m=i.callbacks).onNewMessage)==null||f.call(m,t.messages),l.track("agent-chat",{event:"disconnect",chatId:(c=t.chat)==null?void 0:c.id,agentId:g.id})}async function C(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:y,disconnect:M,changeMode:C,async reconnect(){var f,c;if(!t.chat)return y();(f=t.socketManager)==null||f.disconnect(),await((c=t.streamingManager)==null?void 0:c.disconnect());const s=await X(i.auth,a,v),{streamingManager:u,chat:m}=await Z(g,i,d,l,t.chat);t.streamingManager=u,t.socketManager=s,C($.Functional),l.track("agent-chat",{event:"reconnect",chatId:m.id,agentId:g.id})},async chat(s,u=!1){var m,f,c,h,p,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()}),(f=(m=i.callbacks).onNewMessage)==null||f.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=(p=i.callbacks).onNewMessage)==null||I.call(p,t.messages)),A}catch(T){throw l.track("agent-message-send",{event:"error",messages:t.messages.length}),T}},rate(s,u,m){var h,p,I,T;const f=t.messages.find(A=>A.id===s);if(t.chat){if(!f)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const c=((h=f.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:((p=g.knowledge)==null?void 0:p.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=S,w.VoiceAccess=J,w.createAgentManager=fe,w.getAgent=we,Object.defineProperty(w,Symbol.toStringTag,{value:"Module"})});
@@ -1,3 +1,4 @@
1
+ import { Rect } from '../../face-rect';
1
2
  import { ExtendedTextToSpeechProviders } from '../../tts';
2
3
  export type videoType = 'talk' | 'clip';
3
4
  export type Presenter = TalkPresenter | ClipPresenter;
@@ -11,6 +12,8 @@ export interface TalkPresenter extends BasePresenter {
11
12
  type: 'talk';
12
13
  source_url: string;
13
14
  driver_url?: string;
15
+ stitch?: boolean;
16
+ face?: Rect;
14
17
  }
15
18
  export interface ClipPresenter extends BasePresenter {
16
19
  type: 'clip';
@@ -0,0 +1,6 @@
1
+ export interface Rect {
2
+ top: number;
3
+ left: number;
4
+ bottom: number;
5
+ right: number;
6
+ }
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.77",
4
+ "version": "1.0.19-beta.78",
5
5
  "type": "module",
6
6
  "description": "d-id client sdk",
7
7
  "repository": {
@@ -44,4 +44,4 @@
44
44
  "vite": "^5.1.4",
45
45
  "vite-plugin-dts": "^3.7.3"
46
46
  }
47
- }
47
+ }