@d-id/client-sdk 1.1.0-beta.25 → 1.1.0-beta.26

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
@@ -51,7 +51,7 @@ class Re extends Z {
51
51
  });
52
52
  }
53
53
  }
54
- var _e = /* @__PURE__ */ ((e) => (e.TRIAL = "trial", e.BASIC = "basic", e.ENTERPRISE = "enterprise", e.LITE = "lite", e.ADVANCED = "advanced", e))(_e || {}), Se = /* @__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))(Se || {}), Ee = /* @__PURE__ */ ((e) => (e.Created = "created", e.Started = "started", e.Done = "done", e.Error = "error", e.Rejected = "rejected", e.Ready = "ready", e))(Ee || {}), Ie = /* @__PURE__ */ ((e) => (e.Unrated = "Unrated", e.Positive = "Positive", e.Negative = "Negative", e))(Ie || {}), B = /* @__PURE__ */ ((e) => (e.Functional = "Functional", e.TextOnly = "TextOnly", e.Maintenance = "Maintenance", e.Playground = "Playground", e.DirectPlayback = "DirectPlayback", e.Off = "Off", e))(B || {}), q = /* @__PURE__ */ ((e) => (e.Embed = "embed", e.Query = "query", e.Partial = "partial", e.Answer = "answer", e.Complete = "done", e))(q || {}), Me = /* @__PURE__ */ ((e) => (e.KnowledgeProcessing = "knowledge/processing", e.KnowledgeIndexing = "knowledge/indexing", e.KnowledgeFailed = "knowledge/error", e.KnowledgeDone = "knowledge/done", e))(Me || {}), Te = /* @__PURE__ */ ((e) => (e.Knowledge = "knowledge", e.Document = "document", e.Record = "record", e))(Te || {}), je = /* @__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))(je || {}), de = /* @__PURE__ */ ((e) => (e.Clip = "clip", e.Talk = "talk", e))(de || {});
54
+ var _e = /* @__PURE__ */ ((e) => (e.TRIAL = "trial", e.BASIC = "basic", e.ENTERPRISE = "enterprise", e.LITE = "lite", e.ADVANCED = "advanced", e))(_e || {}), Se = /* @__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))(Se || {}), Ee = /* @__PURE__ */ ((e) => (e.Created = "created", e.Started = "started", e.Done = "done", e.Error = "error", e.Rejected = "rejected", e.Ready = "ready", e))(Ee || {}), Ie = /* @__PURE__ */ ((e) => (e.Unrated = "Unrated", e.Positive = "Positive", e.Negative = "Negative", e))(Ie || {}), A = /* @__PURE__ */ ((e) => (e.Functional = "Functional", e.TextOnly = "TextOnly", e.Maintenance = "Maintenance", e.Playground = "Playground", e.DirectPlayback = "DirectPlayback", e.Off = "Off", e))(A || {}), q = /* @__PURE__ */ ((e) => (e.Embed = "embed", e.Query = "query", e.Partial = "partial", e.Answer = "answer", e.Complete = "done", e))(q || {}), Me = /* @__PURE__ */ ((e) => (e.KnowledgeProcessing = "knowledge/processing", e.KnowledgeIndexing = "knowledge/indexing", e.KnowledgeFailed = "knowledge/error", e.KnowledgeDone = "knowledge/done", e))(Me || {}), Te = /* @__PURE__ */ ((e) => (e.Knowledge = "knowledge", e.Document = "document", e.Record = "record", e))(Te || {}), je = /* @__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))(je || {}), ce = /* @__PURE__ */ ((e) => (e.Clip = "clip", e.Talk = "talk", e))(ce || {});
55
55
  const be = (e) => {
56
56
  switch (e) {
57
57
  case "clip":
@@ -63,10 +63,10 @@ const be = (e) => {
63
63
  }
64
64
  };
65
65
  var p = /* @__PURE__ */ ((e) => (e.Start = "START", e.Stop = "STOP", e))(p || {}), Q = /* @__PURE__ */ ((e) => (e.Strong = "STRONG", e.Weak = "WEAK", e.Unknown = "UNKNOWN", e))(Q || {}), X = /* @__PURE__ */ ((e) => (e.Idle = "IDLE", e.Talking = "TALKING", e))(X || {}), J = /* @__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.StreamInterrupt = "stream/interrupt", e.StreamVideoCreated = "stream-video/started", e.StreamVideoDone = "stream-video/done", e.StreamVideoError = "stream-video/error", e.StreamVideoRejected = "stream-video/rejected", e))(J || {}), j = /* @__PURE__ */ ((e) => (e.New = "new", e.Fail = "fail", e.Connected = "connected", e.Connecting = "connecting", e.Closed = "closed", e.Completed = "completed", e.Disconnected = "disconnected", e))(j || {}), U = /* @__PURE__ */ ((e) => (e.Legacy = "legacy", e.Fluent = "fluent", e))(U || {}), Pe = /* @__PURE__ */ ((e) => (e.Amazon = "amazon", e.Microsoft = "microsoft", e.Afflorithmics = "afflorithmics", e.Elevenlabs = "elevenlabs", e))(Pe || {}), Ae = /* @__PURE__ */ ((e) => (e.Public = "public", e.Premium = "premium", e.Private = "private", e))(Ae || {});
66
- const $e = 45 * 1e3, Be = "X-Playground-Chat", O = "https://api.d-id.com", Le = "wss://notifications.d-id.com", ze = "79f81a83a67430be2bc0fd61042b8faa", le = (e) => new Promise((t) => setTimeout(t, e)), V = (e = 16) => {
66
+ const $e = 45 * 1e3, Be = "X-Playground-Chat", O = "https://api.d-id.com", Le = "wss://notifications.d-id.com", ze = "79f81a83a67430be2bc0fd61042b8faa", de = (e) => new Promise((t) => setTimeout(t, e)), V = (e = 16) => {
67
67
  const t = new Uint8Array(e);
68
68
  return window.crypto.getRandomValues(t), Array.from(t, (a) => a.toString(16).padStart(2, "0")).join("").slice(0, 13);
69
- }, Ne = (e) => [B.TextOnly, B.Playground, B.Maintenance].includes(e), te = (e) => e && [B.DirectPlayback, B.Off].includes(e);
69
+ }, Ne = (e) => [A.TextOnly, A.Playground, A.Maintenance].includes(e), le = (e) => e && [A.DirectPlayback, A.Off].includes(e);
70
70
  function xe(e, t) {
71
71
  let a;
72
72
  return {
@@ -76,7 +76,7 @@ function xe(e, t) {
76
76
  clear: () => clearTimeout(a)
77
77
  };
78
78
  }
79
- async function re(e, t) {
79
+ async function te(e, t) {
80
80
  const a = {
81
81
  limit: (t == null ? void 0 : t.limit) ?? 3,
82
82
  delayMs: (t == null ? void 0 : t.delayMs) ?? 0,
@@ -99,7 +99,7 @@ async function re(e, t) {
99
99
  } catch (i) {
100
100
  if (n = i, !a.shouldRetryFn(i) || s >= a.limit)
101
101
  throw i;
102
- await le(a.delayMs), a.onRetry(i);
102
+ await de(a.delayMs), a.onRetry(i);
103
103
  }
104
104
  throw n;
105
105
  }
@@ -121,13 +121,13 @@ function fe(e) {
121
121
  return `Client-Key ${e.clientKey}.${ue()}_${Fe}`;
122
122
  throw new Error(`Unknown auth type: ${e}`);
123
123
  }
124
- const Je = (e) => re(e, {
124
+ const Je = (e) => te(e, {
125
125
  limit: 3,
126
126
  delayMs: 1e3,
127
127
  timeout: 0,
128
128
  shouldRetryFn: (t) => t.status === 429
129
129
  });
130
- function ie(e, t = O, a) {
130
+ function ae(e, t = O, a) {
131
131
  const n = async (s, i) => {
132
132
  const {
133
133
  skipErrorHandler: o,
@@ -182,7 +182,7 @@ function ie(e, t = O, a) {
182
182
  };
183
183
  }
184
184
  function me(e, t = O, a) {
185
- const n = ie(e, `${t}/agents`, a);
185
+ const n = ae(e, `${t}/agents`, a);
186
186
  return {
187
187
  create(s, i) {
188
188
  return n.post("/", s, i);
@@ -238,7 +238,7 @@ function We(e) {
238
238
  }
239
239
  };
240
240
  }
241
- const Ue = (e) => e.reduce((t, a) => t + a, 0), se = (e) => Ue(e) / e.length;
241
+ const Ue = (e) => e.reduce((t, a) => t + a, 0), ie = (e) => Ue(e) / e.length;
242
242
  function Ke(e, t, a) {
243
243
  var r, l, d;
244
244
  const {
@@ -299,13 +299,13 @@ function qe(e) {
299
299
  ...f
300
300
  };
301
301
  },
302
- async track(f, A) {
302
+ async track(f, $) {
303
303
  if (!this.isEnabled)
304
304
  return Promise.resolve();
305
305
  const {
306
306
  audioPath: I,
307
307
  ..._
308
- } = A || {}, D = {
308
+ } = $ || {}, D = {
309
309
  method: "POST",
310
310
  headers: {
311
311
  "Content-Type": "application/x-www-form-urlencoded"
@@ -334,14 +334,14 @@ function qe(e) {
334
334
  return console.error(v);
335
335
  }
336
336
  },
337
- linkTrack(f, A, I, _) {
337
+ linkTrack(f, $, I, _) {
338
338
  G[f] || (G[f] = {
339
339
  events: {},
340
340
  resolvedDependencies: []
341
341
  }), _.includes(I) || _.push(I);
342
342
  const D = G[f];
343
343
  if (D.events[I] = {
344
- props: A
344
+ props: $
345
345
  }, D.resolvedDependencies.push(I), _.every((N) => D.resolvedDependencies.includes(N))) {
346
346
  const N = _.reduce((L, b) => D.events[b] ? {
347
347
  ...L,
@@ -362,9 +362,9 @@ function he() {
362
362
  get: (t = !1) => t ? Date.now() - e : e
363
363
  };
364
364
  }
365
- const F = he(), ne = he();
365
+ const F = he(), re = he();
366
366
  function we(e) {
367
- return e === B.Playground ? {
367
+ return e === A.Playground ? {
368
368
  headers: {
369
369
  [Be]: "true"
370
370
  }
@@ -372,7 +372,7 @@ function we(e) {
372
372
  }
373
373
  async function pe(e, t, a, n, s = !1, i) {
374
374
  try {
375
- return !i && !te(n) && (i = await t.newChat(e.id, {
375
+ return !i && !le(n) && (i = await t.newChat(e.id, {
376
376
  persist: s
377
377
  }, we(n)), a.track("agent-chat", {
378
378
  event: "created",
@@ -445,7 +445,7 @@ async function Qe(e) {
445
445
  } catch (s) {
446
446
  if (n === t)
447
447
  throw s;
448
- await le(n * 500);
448
+ await de(n * 500);
449
449
  }
450
450
  return a;
451
451
  }
@@ -502,14 +502,14 @@ function et(e, t, a, n, s) {
502
502
  mode: t.chatMode
503
503
  });
504
504
  else {
505
- const d = J, f = [d.StreamVideoDone, d.StreamVideoError, d.StreamVideoRejected], A = [d.StreamFailed, d.StreamVideoError, d.StreamVideoRejected], I = Ke(c, n, {
505
+ const d = J, f = [d.StreamVideoDone, d.StreamVideoError, d.StreamVideoRejected], $ = [d.StreamFailed, d.StreamVideoError, d.StreamVideoRejected], I = Ke(c, n, {
506
506
  mode: t.chatMode
507
507
  });
508
508
  if (o = o, o === d.StreamVideoCreated)
509
509
  e.linkTrack("agent-video", I, d.StreamVideoCreated, ["start"]);
510
510
  else if (f.includes(o)) {
511
511
  const _ = o.split("/")[1];
512
- A.includes(o) ? e.track("agent-video", {
512
+ $.includes(o) ? e.track("agent-video", {
513
513
  ...I,
514
514
  event: _
515
515
  }) : e.linkTrack("agent-video", {
@@ -517,7 +517,7 @@ function et(e, t, a, n, s) {
517
517
  event: _
518
518
  }, o, ["done"]);
519
519
  }
520
- A.includes(o) && ((l = (r = a.callbacks).onError) == null || l.call(r, new Error(`Stream failed with event ${o}`), {
520
+ $.includes(o) && ((l = (r = a.callbacks).onError) == null || l.call(r, new Error(`Stream failed with event ${o}`), {
521
521
  data: c
522
522
  })), c.event === d.StreamDone && s();
523
523
  }
@@ -525,7 +525,7 @@ function et(e, t, a, n, s) {
525
525
  };
526
526
  }
527
527
  function tt(e, t, a, n) {
528
- const s = ie(e, `${t}/agents/${a}`, n);
528
+ const s = ae(e, `${t}/agents/${a}`, n);
529
529
  return {
530
530
  createStream(i) {
531
531
  return s.post("/streams", {
@@ -562,7 +562,7 @@ function tt(e, t, a, n) {
562
562
  };
563
563
  }
564
564
  function rt(e, t, a, n) {
565
- const s = ie(e, `${t}/agents/${a}`, n);
565
+ const s = ae(e, `${t}/agents/${a}`, n);
566
566
  return {
567
567
  createStream(i, o) {
568
568
  return s.post("/streams", {
@@ -715,18 +715,18 @@ function st(e, t, a) {
715
715
  webRTCStats: {
716
716
  anomalies: s,
717
717
  minRtt: Math.min(...c),
718
- avgRtt: se(c),
718
+ avgRtt: ie(c),
719
719
  maxRtt: Math.max(...c),
720
720
  aggregateReport: nt(e[0], e[e.length - 1], i),
721
721
  minJitterDelayInInterval: Math.min(...o),
722
722
  maxJitterDelayInInterval: Math.max(...o),
723
- avgJitterDelayInInterval: se(o)
723
+ avgJitterDelayInInterval: ie(o)
724
724
  },
725
725
  codec: e[0].codec,
726
726
  resolution: `${e[0].frameWidth}x${e[0].frameHeight}`
727
727
  };
728
728
  }
729
- const ae = 100, ot = Math.max(Math.ceil(400 / ae), 1), ct = 0.25, dt = 0.28;
729
+ const ne = 100, ot = Math.max(Math.ceil(400 / ne), 1), ct = 0.25, dt = 0.28;
730
730
  function lt() {
731
731
  let e = 0, t, a, n = 0;
732
732
  return (s) => {
@@ -752,7 +752,7 @@ function lt() {
752
752
  };
753
753
  }
754
754
  function ut(e, t, a, n, s, i = !1) {
755
- let o = [], c, r = 0, l = !1, d = Q.Unknown, f = Q.Unknown, A = 0, I = 0;
755
+ let o = [], c, r = 0, l = !1, d = Q.Unknown, f = Q.Unknown, $ = 0, I = 0;
756
756
  const _ = lt();
757
757
  return setInterval(async () => {
758
758
  const D = await e.getStats(), {
@@ -761,16 +761,16 @@ function ut(e, t, a, n, s, i = !1) {
761
761
  freezeCount: L
762
762
  } = _(D), b = it(D);
763
763
  if (v)
764
- r = 0, A = L - I, f = N < ct ? Q.Strong : N > dt && A > 1 ? Q.Weak : d, f !== d && (s == null || s(f), d = f, I += A, A = 0), l || (n == null || n(p.Start), c = o[o.length - 1], o = [], l = !0), o.push(b);
764
+ r = 0, $ = L - I, f = N < ct ? Q.Strong : N > dt && $ > 1 ? Q.Weak : d, f !== d && (s == null || s(f), d = f, I += $, $ = 0), l || (n == null || n(p.Start), c = o[o.length - 1], o = [], l = !0), o.push(b);
765
765
  else if (l && (r++, r >= ot)) {
766
- const u = st(o, ae, c);
766
+ const u = st(o, ne, c);
767
767
  n == null || n(p.Stop, u), t() || a(), I = L, l = !1;
768
768
  }
769
- }, ae);
769
+ }, ne);
770
770
  }
771
771
  let ye = !1;
772
772
  const z = (e, t) => ye && console.log(e, t), ft = (window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection).bind(window);
773
- function oe(e) {
773
+ function se(e) {
774
774
  switch (e) {
775
775
  case "connected":
776
776
  return j.Connected;
@@ -829,7 +829,7 @@ function ht({
829
829
  }) {
830
830
  e === p.Start ? a == null || a(p.Start) : e === p.Stop && (a == null || a(p.Stop, s)), t === p.Start ? n == null || n(X.Talking) : t === p.Stop && (n == null || n(X.Idle));
831
831
  }
832
- function ce({
832
+ function oe({
833
833
  statsSignal: e,
834
834
  dataChannelSignal: t,
835
835
  onVideoStateChange: a,
@@ -862,11 +862,11 @@ async function wt(e, t, {
862
862
  let c = !1, r = !1, l = p.Stop, d = p.Stop;
863
863
  const {
864
864
  startConnection: f,
865
- sendStreamRequest: A,
865
+ sendStreamRequest: $,
866
866
  close: I,
867
867
  createStream: _,
868
868
  addIceCandidate: D
869
- } = t.videoType === de.Clip ? tt(s, i, e, n.onError) : rt(s, i, e, n.onError), {
869
+ } = t.videoType === ce.Clip ? tt(s, i, e, n.onError) : rt(s, i, e, n.onError), {
870
870
  id: v,
871
871
  offer: N,
872
872
  ice_servers: L,
@@ -891,7 +891,7 @@ async function wt(e, t, {
891
891
  const k = t.stream_warmup && !u, P = () => c, M = () => {
892
892
  var m;
893
893
  c = !0, r && ((m = n.onConnectionStateChange) == null || m.call(n, j.Connected));
894
- }, T = ut(g, P, M, (m, h) => ce({
894
+ }, T = ut(g, P, M, (m, h) => oe({
895
895
  statsSignal: d = m,
896
896
  dataChannelSignal: C === U.Legacy ? l : void 0,
897
897
  onVideoStateChange: n.onVideoStateChange,
@@ -913,8 +913,8 @@ async function wt(e, t, {
913
913
  }, b) : D(v, {
914
914
  candidate: null
915
915
  }, b);
916
- } catch ($) {
917
- (h = n.onError) == null || h.call(n, $, {
916
+ } catch (B) {
917
+ (h = n.onError) == null || h.call(n, B, {
918
918
  streamId: v
919
919
  });
920
920
  }
@@ -922,7 +922,7 @@ async function wt(e, t, {
922
922
  r = !0, (!k || c) && M();
923
923
  };
924
924
  function y(m) {
925
- l = m === J.StreamStarted ? p.Start : p.Stop, ce({
925
+ l = m === J.StreamStarted ? p.Start : p.Stop, oe({
926
926
  statsSignal: C === U.Legacy ? d : void 0,
927
927
  dataChannelSignal: l,
928
928
  onVideoStateChange: n.onVideoStateChange,
@@ -931,9 +931,9 @@ async function wt(e, t, {
931
931
  });
932
932
  }
933
933
  function E(m, h) {
934
- const $ = typeof h == "string" ? h : h == null ? void 0 : h.metadata;
935
- $ && o.enrich({
936
- streamMetadata: $
934
+ const B = typeof h == "string" ? h : h == null ? void 0 : h.metadata;
935
+ B && o.enrich({
936
+ streamMetadata: B
937
937
  }), o.track("agent-chat", {
938
938
  event: "ready"
939
939
  });
@@ -947,13 +947,13 @@ async function wt(e, t, {
947
947
  var K;
948
948
  const {
949
949
  subject: h,
950
- data: $
950
+ data: B
951
951
  } = mt(m.data);
952
- (K = R[h]) == null || K.call(R, h, $);
952
+ (K = R[h]) == null || K.call(R, h, B);
953
953
  }, g.oniceconnectionstatechange = () => {
954
954
  var h;
955
955
  z("peerConnection.oniceconnectionstatechange => " + g.iceConnectionState);
956
- const m = oe(g.iceConnectionState);
956
+ const m = se(g.iceConnectionState);
957
957
  m !== j.Connected && ((h = n.onConnectionStateChange) == null || h.call(n, m));
958
958
  }, g.ontrack = (m) => {
959
959
  var h;
@@ -966,7 +966,7 @@ async function wt(e, t, {
966
966
  * @param payload
967
967
  */
968
968
  speak(m) {
969
- return A(v, b, m);
969
+ return $(v, b, m);
970
970
  },
971
971
  /**
972
972
  * Method to close RTC connection
@@ -974,7 +974,7 @@ async function wt(e, t, {
974
974
  async disconnect() {
975
975
  var m;
976
976
  if (v) {
977
- const h = oe(g.iceConnectionState);
977
+ const h = se(g.iceConnectionState);
978
978
  if (g) {
979
979
  if (h === j.New) {
980
980
  clearInterval(T);
@@ -983,10 +983,10 @@ async function wt(e, t, {
983
983
  g.close(), g.oniceconnectionstatechange = null, g.onnegotiationneeded = null, g.onicecandidate = null, g.ontrack = null;
984
984
  }
985
985
  try {
986
- h === j.Connected && await I(v, b).catch(($) => {
986
+ h === j.Connected && await I(v, b).catch((B) => {
987
987
  });
988
- } catch ($) {
989
- z("Error on close stream connection", $);
988
+ } catch (B) {
989
+ z("Error on close stream connection", B);
990
990
  }
991
991
  (m = n.onAgentActivityStateChange) == null || m.call(n, X.Idle), clearInterval(T);
992
992
  }
@@ -995,7 +995,7 @@ async function wt(e, t, {
995
995
  * Method to send data channel messages to the server
996
996
  */
997
997
  sendDataChannelMessage(m) {
998
- var h, $;
998
+ var h, B;
999
999
  if (!c || S.readyState !== "open") {
1000
1000
  z("Data channel is not ready for sending messages"), (h = n.onError) == null || h.call(n, new Error("Data channel is not ready for sending messages"), {
1001
1001
  streamId: v
@@ -1005,7 +1005,7 @@ async function wt(e, t, {
1005
1005
  try {
1006
1006
  S.send(m);
1007
1007
  } catch (K) {
1008
- z("Error sending data channel message", K), ($ = n.onError) == null || $.call(n, K, {
1008
+ z("Error sending data channel message", K), (B = n.onError) == null || B.call(n, K, {
1009
1009
  streamId: v
1010
1010
  });
1011
1011
  }
@@ -1093,7 +1093,7 @@ function Ct(e, t, a) {
1093
1093
  },
1094
1094
  onAgentActivityStateChange: (o) => {
1095
1095
  var c, r;
1096
- (r = (c = t.callbacks).onAgentActivityStateChange) == null || r.call(c, o), o === X.Talking ? ne.update() : ne.reset(), kt(o === X.Talking ? p.Start : p.Stop, e, a, i.streamType);
1096
+ (r = (c = t.callbacks).onAgentActivityStateChange) == null || r.call(c, o), o === X.Talking ? re.update() : re.reset(), kt(o === X.Talking ? p.Start : p.Stop, e, a, i.streamType);
1097
1097
  }
1098
1098
  }
1099
1099
  });
@@ -1108,7 +1108,7 @@ async function Rt(e, t, a, n, s) {
1108
1108
  chat: i,
1109
1109
  chatMode: o
1110
1110
  } = await pe(e, a, n, t.mode, t.persistentChat, s);
1111
- if (o && o !== t.mode && (t.mode = o, (l = (r = t.callbacks).onModeChange) == null || l.call(r, o), o === B.TextOnly))
1111
+ if (o && o !== t.mode && (t.mode = o, (l = (r = t.callbacks).onModeChange) == null || l.call(r, o), o === A.TextOnly))
1112
1112
  return (f = (d = t.callbacks).onError) == null || f.call(d, new Ce(o)), {
1113
1113
  chat: i
1114
1114
  };
@@ -1123,14 +1123,14 @@ async function St(e, t) {
1123
1123
  let a = !0, n = !1, s = !1;
1124
1124
  const i = t.mixpanelKey || ze, o = t.wsURL || Le, c = t.baseURL || O, r = {
1125
1125
  messages: [],
1126
- chatMode: t.mode || B.Functional
1126
+ chatMode: t.mode || A.Functional
1127
1127
  }, l = me(t.auth, c, t.callbacks.onError), d = await l.getById(e), f = qe({
1128
1128
  token: i,
1129
1129
  agent: d,
1130
1130
  isEnabled: t.enableAnalitics,
1131
1131
  distinctId: t.distinctId
1132
1132
  }), {
1133
- onMessage: A,
1133
+ onMessage: $,
1134
1134
  clearQueue: I
1135
1135
  } = et(f, r, t, d, () => {
1136
1136
  var u;
@@ -1143,10 +1143,10 @@ async function St(e, t) {
1143
1143
  async function _(u) {
1144
1144
  var P, M, T, y, E, R, W;
1145
1145
  (M = (P = t.callbacks).onConnectionStateChange) == null || M.call(P, j.Connecting), F.reset(), n = !1, s = !1, u && !a && (delete r.chat, (y = (T = t.callbacks).onNewMessage) == null || y.call(T, [...r.messages], "answer"));
1146
- const w = te(t.mode) ? Promise.resolve(void 0) : Oe(t.auth, o, {
1147
- onMessage: A,
1146
+ const w = t.mode === A.DirectPlayback ? Promise.resolve(void 0) : Oe(t.auth, o, {
1147
+ onMessage: $,
1148
1148
  onError: t.callbacks.onError
1149
- }), g = re(() => Rt(d, t, l, f, r.chat), {
1149
+ }), g = te(() => Rt(d, t, l, f, r.chat), {
1150
1150
  limit: 3,
1151
1151
  timeout: $e,
1152
1152
  timeoutErrorMessage: "Timeout initializing the stream",
@@ -1155,12 +1155,12 @@ async function St(e, t) {
1155
1155
  delayMs: 1e3
1156
1156
  }).catch((x) => {
1157
1157
  var m, h;
1158
- throw v(B.Maintenance), (h = (m = t.callbacks).onConnectionStateChange) == null || h.call(m, j.Fail), x;
1158
+ throw v(A.Maintenance), (h = (m = t.callbacks).onConnectionStateChange) == null || h.call(m, j.Fail), x;
1159
1159
  }), [S, {
1160
1160
  streamingManager: C,
1161
1161
  chat: k
1162
1162
  }] = await Promise.all([w, g]);
1163
- k && k.id !== ((E = r.chat) == null ? void 0 : E.id) && ((W = (R = t.callbacks).onNewChat) == null || W.call(R, k.id)), r.streamingManager = C, r.socketManager = S, r.chat = k, a = !1, v((k == null ? void 0 : k.chat_mode) ?? t.mode ?? B.Functional);
1163
+ k && k.id !== ((E = r.chat) == null ? void 0 : E.id) && ((W = (R = t.callbacks).onNewChat) == null || W.call(R, k.id)), r.streamingManager = C, r.socketManager = S, r.chat = k, a = !1, v((k == null ? void 0 : k.chat_mode) ?? t.mode ?? A.Functional);
1164
1164
  }
1165
1165
  async function D() {
1166
1166
  var u, w, g, S;
@@ -1170,7 +1170,7 @@ async function St(e, t) {
1170
1170
  var w, g;
1171
1171
  u !== r.chatMode && (f.track("agent-mode-change", {
1172
1172
  mode: u
1173
- }), r.chatMode = u, r.chatMode !== B.Functional && await D(), (g = (w = t.callbacks).onModeChange) == null || g.call(w, u));
1173
+ }), r.chatMode = u, r.chatMode !== A.Functional && await D(), (g = (w = t.callbacks).onModeChange) == null || g.call(w, u));
1174
1174
  }
1175
1175
  return {
1176
1176
  agent: d,
@@ -1216,15 +1216,15 @@ async function St(e, t) {
1216
1216
  async chat(u) {
1217
1217
  var C, k, P, M, T;
1218
1218
  const w = () => {
1219
- if (te(t.mode))
1219
+ if (le(t.mode))
1220
1220
  throw new H(`${t.mode} is enabled, chat is disabled`);
1221
1221
  if (u.length >= 800)
1222
1222
  throw new H("Message cannot be more than 800 characters");
1223
1223
  if (u.length === 0)
1224
1224
  throw new H("Message cannot be empty");
1225
- if (r.chatMode === B.Maintenance)
1225
+ if (r.chatMode === A.Maintenance)
1226
1226
  throw new H("Chat is in maintenance mode");
1227
- if (![B.TextOnly, B.Playground].includes(r.chatMode)) {
1227
+ if (![A.TextOnly, A.Playground].includes(r.chatMode)) {
1228
1228
  if (!r.streamingManager)
1229
1229
  throw new H("Streaming manager is not initialized");
1230
1230
  if (!r.chat)
@@ -1239,7 +1239,7 @@ async function St(e, t) {
1239
1239
  r.chat = R.chat, (E = (y = t.callbacks).onNewChat) == null || E.call(y, r.chat.id);
1240
1240
  }
1241
1241
  return r.chat.id;
1242
- }, S = async (y, E) => re(() => {
1242
+ }, S = async (y, E) => te(() => {
1243
1243
  var R, W;
1244
1244
  return l.chat(d.id, E, {
1245
1245
  chatMode: r.chatMode,
@@ -1256,9 +1256,9 @@ async function St(e, t) {
1256
1256
  }, {
1257
1257
  limit: 2,
1258
1258
  shouldRetryFn: (R) => {
1259
- var m, h, $, K;
1259
+ var m, h, B, K;
1260
1260
  const W = (m = R == null ? void 0 : R.message) == null ? void 0 : m.includes("missing or invalid session_id");
1261
- return !((h = R == null ? void 0 : R.message) == null ? void 0 : h.includes("Stream Error")) && !W ? ((K = ($ = t.callbacks).onError) == null || K.call($, R), !1) : !0;
1261
+ return !((h = R == null ? void 0 : R.message) == null ? void 0 : h.includes("Stream Error")) && !W ? ((K = (B = t.callbacks).onError) == null || K.call(B, R), !1) : !0;
1262
1262
  },
1263
1263
  onRetry: async () => {
1264
1264
  await D(), await _(!1);
@@ -1399,7 +1399,7 @@ async function St(e, t) {
1399
1399
  stream_id: (k = r.streamingManager) == null ? void 0 : k.streamId,
1400
1400
  agent_id: d.id,
1401
1401
  owner_id: d.owner_id,
1402
- video_duration_to_interrupt: ne.get(!0),
1402
+ video_duration_to_interrupt: re.get(!0),
1403
1403
  message_duration_to_interrupt: F.get(!0),
1404
1404
  chat_id: (P = r.chat) == null ? void 0 : P.id,
1405
1405
  mode: r.chatMode,
@@ -1422,7 +1422,7 @@ export {
1422
1422
  X as AgentActivityState,
1423
1423
  Ee as AgentStatus,
1424
1424
  De as ChatCreationFailed,
1425
- B as ChatMode,
1425
+ A as ChatMode,
1426
1426
  Ce as ChatModeDowngraded,
1427
1427
  q as ChatProgress,
1428
1428
  j as ConnectionState,
@@ -1438,7 +1438,7 @@ export {
1438
1438
  Me as Subject,
1439
1439
  _e as UserPlan,
1440
1440
  H as ValidationError,
1441
- de as VideoType,
1441
+ ce as VideoType,
1442
1442
  Ae as VoiceAccess,
1443
1443
  Re as WsError,
1444
1444
  St as createAgentManager,
@@ -1 +1 @@
1
- (function(h,A){typeof exports=="object"&&typeof module<"u"?A(exports):typeof define=="function"&&define.amd?define(["exports"],A):(h=typeof globalThis<"u"?globalThis:h||self,A(h.index={}))})(this,function(h){"use strict";var _t=Object.defineProperty;var Et=(h,A,x)=>A in h?_t(h,A,{enumerable:!0,configurable:!0,writable:!0,value:x}):h[A]=x;var ee=(h,A,x)=>(Et(h,typeof A!="symbol"?A+"":A,x),x);class A extends Error{constructor({kind:a,description:n,error:s}){super(JSON.stringify({kind:a,description:n}));ee(this,"kind");ee(this,"description");ee(this,"error");this.kind=a,this.description=n,this.error=s}}class x extends A{constructor(t,a){super({kind:"ChatCreationFailed",description:`Failed to create ${a?"persistent":""} chat, mode: ${t}`})}}class de extends A{constructor(t){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${t}`})}}class X extends A{constructor(a,n){super({kind:"ValidationError",description:a});ee(this,"key");this.key=n}}class ue extends A{constructor(t){super({kind:"WSError",description:t})}}var le=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(le||{}),fe=(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))(fe||{}),me=(e=>(e.Created="created",e.Started="started",e.Done="done",e.Error="error",e.Rejected="rejected",e.Ready="ready",e))(me||{}),ge=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(ge||{}),P=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e.DirectPlayback="DirectPlayback",e.Off="Off",e))(P||{}),Y=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(Y||{}),he=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(he||{}),we=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(we||{}),pe=(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))(pe||{}),te=(e=>(e.Clip="clip",e.Talk="talk",e))(te||{});const ye=e=>{switch(e){case"clip":return"clip";case"talk":return"talk";default:throw new Error(`Unknown video type: ${e}`)}};var y=(e=>(e.Start="START",e.Stop="STOP",e))(y||{}),Q=(e=>(e.Strong="STRONG",e.Weak="WEAK",e.Unknown="UNKNOWN",e))(Q||{}),O=(e=>(e.Idle="IDLE",e.Talking="TALKING",e))(O||{}),F=(e=>(e.ChatAnswer="chat/answer",e.ChatPartial="chat/partial",e.StreamDone="stream/done",e.StreamStarted="stream/started",e.StreamFailed="stream/error",e.StreamReady="stream/ready",e.StreamCreated="stream/created",e.StreamInterrupt="stream/interrupt",e.StreamVideoCreated="stream-video/started",e.StreamVideoDone="stream-video/done",e.StreamVideoError="stream-video/error",e.StreamVideoRejected="stream-video/rejected",e))(F||{}),E=(e=>(e.New="new",e.Fail="fail",e.Connected="connected",e.Connecting="connecting",e.Closed="closed",e.Completed="completed",e.Disconnected="disconnected",e))(E||{}),H=(e=>(e.Legacy="legacy",e.Fluent="fluent",e))(H||{}),ve=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(ve||{}),ke=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(ke||{});const Pe=45*1e3,$e="X-Playground-Chat",Z="https://api.d-id.com",Be="wss://notifications.d-id.com",Le="79f81a83a67430be2bc0fd61042b8faa",Ce=e=>new Promise(t=>setTimeout(t,e)),G=(e=16)=>{const t=new Uint8Array(e);return window.crypto.getRandomValues(t),Array.from(t,a=>a.toString(16).padStart(2,"0")).join("").slice(0,13)},ze=e=>[P.TextOnly,P.Playground,P.Maintenance].includes(e),re=e=>e&&[P.DirectPlayback,P.Off].includes(e);function Ne(e,t){let a;return{promise:new Promise((s,i)=>{a=setTimeout(()=>i(new Error(t)),e)}),clear:()=>clearTimeout(a)}}async function ne(e,t){const a={limit:(t==null?void 0:t.limit)??3,delayMs:(t==null?void 0:t.delayMs)??0,timeout:(t==null?void 0:t.timeout)??3e4,timeoutErrorMessage:(t==null?void 0:t.timeoutErrorMessage)||"Timeout error",shouldRetryFn:(t==null?void 0:t.shouldRetryFn)??(()=>!0),onRetry:(t==null?void 0:t.onRetry)??(()=>{})};let n;for(let s=1;s<=a.limit;s++)try{if(!a.timeout)return await e();const{promise:i,clear:o}=Ne(a.timeout,a.timeoutErrorMessage),c=e().finally(o);return await Promise.race([c,i])}catch(i){if(n=i,!a.shouldRetryFn(i)||s>=a.limit)throw i;await Ce(a.delayMs),a.onRetry(i)}throw n}function De(){let e=window.localStorage.getItem("did_external_key_id");if(!e){let t=G();window.localStorage.setItem("did_external_key_id",t),e=t}return e}let Fe=G();function Re(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}.${De()}_${Fe}`;throw new Error(`Unknown auth type: ${e}`)}const Je=e=>ne(e,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:t=>t.status===429});function ae(e,t=Z,a){const n=async(s,i)=>{const{skipErrorHandler:o,...c}=i||{},r=await Je(()=>fetch(t+(s!=null&&s.startsWith("/")?s:`/${s}`),{...c,headers:{...c.headers,Authorization:Re(e),"Content-Type":"application/json"}}));if(!r.ok){let u=await r.text().catch(()=>`Failed to fetch with status ${r.status}`);const d=new Error(u);throw a&&!o&&a(d,{url:s,options:c,headers:r.headers}),d}return r.json()};return{get(s,i){return n(s,{...i,method:"GET"})},post(s,i,o){return n(s,{...o,body:JSON.stringify(i),method:"POST"})},delete(s,i,o){return n(s,{...o,body:JSON.stringify(i),method:"DELETE"})},patch(s,i,o){return n(s,{...o,body:JSON.stringify(i),method:"PATCH"})}}}function Se(e,t=Z,a){const n=ae(e,`${t}/agents`,a);return{create(s,i){return n.post("/",s,i)},getAgents(s,i){return n.get(`/${s?`?tag=${s}`:""}`,i).then(o=>o??[])},getById(s,i){return n.get(`/${s}`,i)},delete(s,i){return n.delete(`/${s}`,void 0,i)},update(s,i,o){return n.patch(`/${s}`,i,o)},newChat(s,i,o){return n.post(`/${s}/chat`,i,o)},chat(s,i,o,c){return n.post(`/${s}/chat/${i}`,o,c)},createRating(s,i,o,c){return n.post(`/${s}/chat/${i}/ratings`,o,c)},updateRating(s,i,o,c,r){return n.patch(`/${s}/chat/${i}/ratings/${o}`,c,r)},deleteRating(s,i,o,c){return n.delete(`/${s}/chat/${i}/ratings/${o}`,c)},getSTTToken(s,i){return n.get(`/${s}/stt-token`,i)}}}const _e=e=>e.type==="clip"&&e.presenter_id.startsWith("v2_")?"clip_v2":e.type;function We(e){var s,i,o,c;const t=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",a=()=>{const r=navigator.platform;return r.toLowerCase().includes("win")?"Windows":r.toLowerCase().includes("mac")?"Mac OS X":r.toLowerCase().includes("linux")?"Linux":"Unknown"},n=e.presenter;return{$os:`${a()}`,isMobile:`${t()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:_e(n),agentVoice:{voiceId:(i=(s=e.presenter)==null?void 0:s.voice)==null?void 0:i.voice_id,provider:(c=(o=e.presenter)==null?void 0:o.voice)==null?void 0:c.type}}}const Ue=e=>e.reduce((t,a)=>t+a,0),Ee=e=>Ue(e)/e.length;function Ke(e,t,a){var r,u,d;const{event:n,...s}=e,{template:i}=(t==null?void 0:t.llm)||{},{language:o}=((r=t==null?void 0:t.presenter)==null?void 0:r.voice)||{};return{...s,llm:{...s.llm,template:i},script:{...s.script,provider:{...(u=s==null?void 0:s.script)==null?void 0:u.provider,language:o}},stitch:(t==null?void 0:t.presenter.type)==="talk"?(d=t==null?void 0:t.presenter)==null?void 0:d.stitch:void 0,...a}}let ie={};const He="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function qe(e){var i,o,c,r,u,d;const t=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk",a=e.agent.presenter,n=(i=e.agent.llm)==null?void 0:i.prompt_customization,s={token:e.token||"testKey",distinct_id:e.distinctId||De(),agentId:e.agent.id,agentType:_e(a),owner_id:e.agent.owner_id??"",promptVersion:(o=e.agent.llm)==null?void 0:o.prompt_version,behavior:{role:n==null?void 0:n.role,personality:n==null?void 0:n.personality,instructions:(c=e.agent.llm)==null?void 0:c.instructions},temperature:(r=e.agent.llm)==null?void 0:r.temperature,knowledgeSource:n==null?void 0:n.knowledge_source,starterQuestionsCount:(d=(u=e.agent.knowledge)==null?void 0:u.starter_message)==null?void 0:d.length,topicsToAvoid:n==null?void 0:n.topics_to_avoid,maxResponseLength:n==null?void 0:n.max_response_length};return{...s,additionalProperties:{},isEnabled:e.isEnabled??!0,getRandom:G,enrich(f){this.additionalProperties={...this.additionalProperties,...f}},async track(f,L){if(!this.isEnabled)return Promise.resolve();const{audioPath:T,..._}=L||{},D={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:f,properties:{...this.additionalProperties,..._,...s,source:t,time:Date.now(),$insert_id:this.getRandom(),origin:window.location.href,"Screen Height":window.screen.height||window.innerWidth,"Screen Width":window.screen.width||window.innerHeight,"User Agent":navigator.userAgent}}])})};try{return await fetch(He,D).then(k=>k.json())}catch(k){return console.error(k)}},linkTrack(f,L,T,_){ie[f]||(ie[f]={events:{},resolvedDependencies:[]}),_.includes(T)||_.push(T);const D=ie[f];if(D.events[T]={props:L},D.resolvedDependencies.push(T),_.every(U=>D.resolvedDependencies.includes(U))){const U=_.reduce((N,$)=>D.events[$]?{...N,...D.events[$].props}:N,{});this.track(f,U),D.resolvedDependencies=D.resolvedDependencies.filter(N=>!_.includes(N)),_.forEach(N=>{delete D.events[N]})}}}}function Ie(){let e=0;return{reset:()=>e=0,update:()=>e=Date.now(),get:(t=!1)=>t?Date.now()-e:e}}const W=Ie(),se=Ie();function Me(e){return e===P.Playground?{headers:{[$e]:"true"}}:{}}async function Te(e,t,a,n,s=!1,i){try{return!i&&!re(n)&&(i=await t.newChat(e.id,{persist:s},Me(n)),a.track("agent-chat",{event:"created",chat_id:i.id,agent_id:e.id,mode:n})),{chat:i,chatMode:(i==null?void 0:i.chat_mode)??n}}catch(o){try{const c=JSON.parse(o.message);if((c==null?void 0:c.kind)==="InsufficientCreditsError")throw new Error("InsufficientCreditsError")}catch(c){console.error("Error parsing the error message:",c)}throw new Error("Cannot create new chat")}}function xe(e){return e&&e.length>0?e:[]}function Ve(e,t,a,n){if(!e)throw new Error("Please connect to the agent first");if(!e.interruptAvailable)throw new Error("Interrupt is not enabled for this stream");if(t!==H.Fluent)throw new Error("Interrupt only available for Fluent streams");if(!a&&!n)throw new Error("No active video to interrupt")}async function oe(e,t){const a={type:F.StreamInterrupt,videoId:t,timestamp:Date.now()};e.sendDataChannelMessage(JSON.stringify(a))}function Xe(e){return new Promise((t,a)=>{const{callbacks:n,host:s,auth:i}=e,{onMessage:o=null,onOpen:c=null,onClose:r=null,onError:u=null}=n||{},d=new WebSocket(`${s}?authorization=${Re(i)}`);d.onmessage=o,d.onclose=r,d.onerror=f=>{console.error(f),u==null||u("Websocket failed to connect",f),a(f)},d.onopen=f=>{c==null||c(f),t(d)}})}async function Ye(e){const{retries:t=1}=e;let a=null;for(let n=0;(a==null?void 0:a.readyState)!==WebSocket.OPEN;n++)try{a=await Xe(e)}catch(s){if(n===t)throw s;await Ce(n*500)}return a}async function Oe(e,t,a){const n=a!=null&&a.onMessage?[a.onMessage]:[],s=await Ye({auth:e,host:t,callbacks:{onError:i=>{var o;return(o=a.onError)==null?void 0:o.call(a,new ue(i))},onMessage(i){const o=JSON.parse(i.data);n.forEach(c=>c(o.event,o))}}});return{socket:s,disconnect:()=>s.close(),subscribeToEvents:i=>n.push(i)}}function Qe(e){if(e.answer!==void 0)return e.answer;let t=0,a="";for(;t in e;)a+=e[t++];return a}function Ge(e,t,a,n,s){const i=n.messages[n.messages.length-1];if(!(e===Y.Partial||e===Y.Answer)||(i==null?void 0:i.role)!=="assistant")return;const{content:o,sequence:c}=t;e===Y.Partial?a[c]=o:a.answer=o;const r=Qe(a);(i.content!==r||e===Y.Answer)&&(i.content=r,s==null||s([...n.messages],e))}function Ze(e,t,a,n,s){let i={};return{clearQueue:()=>i={},onMessage:(o,c)=>{var r,u;if("content"in c)Ge(o,c,i,t,a.callbacks.onNewMessage),o===Y.Answer&&e.track("agent-message-received",{messages:t.messages.length,mode:t.chatMode});else{const d=F,f=[d.StreamVideoDone,d.StreamVideoError,d.StreamVideoRejected],L=[d.StreamFailed,d.StreamVideoError,d.StreamVideoRejected],T=Ke(c,n,{mode:t.chatMode});if(o=o,o===d.StreamVideoCreated)e.linkTrack("agent-video",T,d.StreamVideoCreated,["start"]);else if(f.includes(o)){const _=o.split("/")[1];L.includes(o)?e.track("agent-video",{...T,event:_}):e.linkTrack("agent-video",{...T,event:_},o,["done"])}L.includes(o)&&((u=(r=a.callbacks).onError)==null||u.call(r,new Error(`Stream failed with event ${o}`),{data:c})),c.event===d.StreamDone&&s()}}}}function et(e,t,a,n){const s=ae(e,`${t}/agents/${a}`,n);return{createStream(i){return s.post("/streams",{output_resolution:i.output_resolution,compatibility_mode:i.compatibility_mode,stream_warmup:i.stream_warmup,session_timeout:i.session_timeout,fluent:i.fluent})},startConnection(i,o,c){return s.post(`/streams/${i}/sdp`,{session_id:c,answer:o})},addIceCandidate(i,o,c){return s.post(`/streams/${i}/ice`,{session_id:c,...o})},sendStreamRequest(i,o,c){return s.post(`/streams/${i}`,{session_id:o,...c})},close(i,o){return s.delete(`/streams/${i}`,{session_id:o})}}}function tt(e,t,a,n){const s=ae(e,`${t}/agents/${a}`,n);return{createStream(i,o){return s.post("/streams",{driver_url:i.driver_url,face:i.face,config:i.config,output_resolution:i.output_resolution,compatibility_mode:i.compatibility_mode,stream_warmup:i.stream_warmup,session_timeout:i.session_timeout,fluent:i.fluent},o)},startConnection(i,o,c,r){return s.post(`/streams/${i}/sdp`,{session_id:c,answer:o},r)},addIceCandidate(i,o,c,r){return s.post(`/streams/${i}/ice`,{session_id:c,...o},r)},sendStreamRequest(i,o,c,r){return s.post(`/streams/${i}`,{session_id:o,...c},r)},close(i,o,c){return s.delete(`/streams/${i}`,{session_id:o},c)}}}function rt(e,t,a){const n=(t.timestamp-e.timestamp)/1e3;return{duration:n,bytesReceived:t.bytesReceived-e.bytesReceived,bitrate:Math.round((t.bytesReceived-e.bytesReceived)*8/n),packetsReceived:t.packetsReceived-e.packetsReceived,packetsLost:t.packetsLost-e.packetsLost,framesDropped:t.framesDropped-e.framesDropped,framesDecoded:t.framesDecoded-e.framesDecoded,jitter:t.jitter,avgJitterDelayInInterval:(t.jitterBufferDelay-e.jitterBufferDelay)/(t.jitterBufferEmittedCount-e.jitterBufferEmittedCount),jitterBufferEmittedCount:t.jitterBufferEmittedCount-e.jitterBufferEmittedCount,jitterBufferDelay:(t.jitterBufferDelay-e.jitterBufferDelay)/n,framesPerSecond:t.framesPerSecond,freezeCount:t.freezeCount-e.freezeCount,freezeDuration:t.freezeDuration-e.freezeDuration,lowFpsCount:a}}function nt(e){return e.filter(t=>t.freezeCount>0||t.framesPerSecond<21||t.framesDropped>0||t.packetsLost>0).map(t=>{const{timestamp:a,...n}=t,s=[];return t.freezeCount>0&&s.push("freeze"),t.framesPerSecond<21&&s.push("low fps"),t.framesDropped>0&&s.push("frames dropped"),t.packetsLost>0&&s.push("packet loss"),{...n,causes:s}})}function at(e){let t="",a=0;for(const n of e.values())if(n&&n.type==="codec"&&n.mimeType.startsWith("video")&&(t=n.mimeType.split("/")[1]),n&&n.type==="candidate-pair"&&(a=n.currentRoundTripTime),n&&n.type==="inbound-rtp"&&n.kind==="video")return{codec:t,rtt:a,timestamp:n.timestamp,bytesReceived:n.bytesReceived,packetsReceived:n.packetsReceived,packetsLost:n.packetsLost,framesDropped:n.framesDropped,framesDecoded:n.framesDecoded,jitter:n.jitter,jitterBufferDelay:n.jitterBufferDelay,jitterBufferEmittedCount:n.jitterBufferEmittedCount,avgJitterDelayInInterval:n.jitterBufferDelay/n.jitterBufferEmittedCount,frameWidth:n.frameWidth,frameHeight:n.frameHeight,framesPerSecond:n.framesPerSecond,freezeCount:n.freezeCount,freezeDuration:n.totalFreezesDuration};return{}}function it(e,t,a){const n=e.map((r,u)=>u===0?a?{timestamp:r.timestamp,duration:0,rtt:r.rtt,bytesReceived:r.bytesReceived-a.bytesReceived,bitrate:(r.bytesReceived-a.bytesReceived)*8/(t/1e3),packetsReceived:r.packetsReceived-a.packetsReceived,packetsLost:r.packetsLost-a.packetsLost,framesDropped:r.framesDropped-a.framesDropped,framesDecoded:r.framesDecoded-a.framesDecoded,jitter:r.jitter,jitterBufferDelay:r.jitterBufferDelay-a.jitterBufferDelay,jitterBufferEmittedCount:r.jitterBufferEmittedCount-a.jitterBufferEmittedCount,avgJitterDelayInInterval:(r.jitterBufferDelay-a.jitterBufferDelay)/(r.jitterBufferEmittedCount-a.jitterBufferEmittedCount),framesPerSecond:r.framesPerSecond,freezeCount:r.freezeCount-a.freezeCount,freezeDuration:r.freezeDuration-a.freezeDuration}:{timestamp:r.timestamp,rtt:r.rtt,duration:0,bytesReceived:r.bytesReceived,bitrate:r.bytesReceived*8/(t/1e3),packetsReceived:r.packetsReceived,packetsLost:r.packetsLost,framesDropped:r.framesDropped,framesDecoded:r.framesDecoded,jitter:r.jitter,jitterBufferDelay:r.jitterBufferDelay,jitterBufferEmittedCount:r.jitterBufferEmittedCount,avgJitterDelayInInterval:r.jitterBufferDelay/r.jitterBufferEmittedCount,framesPerSecond:r.framesPerSecond,freezeCount:r.freezeCount,freezeDuration:r.freezeDuration}:{timestamp:r.timestamp,duration:t*u/1e3,rtt:r.rtt,bytesReceived:r.bytesReceived-e[u-1].bytesReceived,bitrate:(r.bytesReceived-e[u-1].bytesReceived)*8/(t/1e3),packetsReceived:r.packetsReceived-e[u-1].packetsReceived,packetsLost:r.packetsLost-e[u-1].packetsLost,framesDropped:r.framesDropped-e[u-1].framesDropped,framesDecoded:r.framesDecoded-e[u-1].framesDecoded,jitter:r.jitter,jitterBufferDelay:r.jitterBufferDelay-e[u-1].jitterBufferDelay,jitterBufferEmittedCount:r.jitterBufferEmittedCount-e[u-1].jitterBufferEmittedCount,avgJitterDelayInInterval:(r.jitterBufferDelay-e[u-1].jitterBufferDelay)/(r.jitterBufferEmittedCount-e[u-1].jitterBufferEmittedCount),framesPerSecond:r.framesPerSecond,freezeCount:r.freezeCount-e[u-1].freezeCount,freezeDuration:r.freezeDuration-e[u-1].freezeDuration}),s=nt(n),i=s.reduce((r,u)=>r+(u.causes.includes("low fps")?1:0),0),o=n.filter(r=>!!r.avgJitterDelayInInterval).map(r=>r.avgJitterDelayInInterval),c=n.filter(r=>!!r.rtt).map(r=>r.rtt);return{webRTCStats:{anomalies:s,minRtt:Math.min(...c),avgRtt:Ee(c),maxRtt:Math.max(...c),aggregateReport:rt(e[0],e[e.length-1],i),minJitterDelayInInterval:Math.min(...o),maxJitterDelayInInterval:Math.max(...o),avgJitterDelayInInterval:Ee(o)},codec:e[0].codec,resolution:`${e[0].frameWidth}x${e[0].frameHeight}`}}const ce=100,st=Math.max(Math.ceil(400/ce),1),ot=.25,ct=.28;function dt(){let e=0,t,a,n=0;return s=>{for(const i of s.values())if(i&&i.type==="inbound-rtp"&&i.kind==="video"){const o=i.jitterBufferDelay,c=i.jitterBufferEmittedCount;if(a&&c>a){const d=o-t,f=c-a;n=d/f}t=o,a=c;const r=i.framesDecoded,u=r-e>0;return e=r,{isReceiving:u,avgJitterDelayInInterval:n,freezeCount:i.freezeCount}}return{isReceiving:!1,avgJitterDelayInInterval:n}}}function ut(e,t,a,n,s,i=!1){let o=[],c,r=0,u=!1,d=Q.Unknown,f=Q.Unknown,L=0,T=0;const _=dt();return setInterval(async()=>{const D=await e.getStats(),{isReceiving:k,avgJitterDelayInInterval:U,freezeCount:N}=_(D),$=at(D);if(k)r=0,L=N-T,f=U<ot?Q.Strong:U>ct&&L>1?Q.Weak:d,f!==d&&(s==null||s(f),d=f,T+=L,L=0),u||(n==null||n(y.Start),c=o[o.length-1],o=[],u=!0),o.push($);else if(u&&(r++,r>=st)){const l=it(o,ce,c);n==null||n(y.Stop,l),t()||a(),T=N,u=!1}},ce)}let je=!1;const J=(e,t)=>je&&console.log(e,t),lt=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function be(e){switch(e){case"connected":return E.Connected;case"checking":return E.Connecting;case"failed":return E.Fail;case"new":return E.New;case"closed":return E.Closed;case"disconnected":return E.Disconnected;case"completed":return E.Completed;default:return E.New}}function ft(e){const[t,a=""]=e.split(/:(.+)/);try{const n=JSON.parse(a);return J("parsed data channel message",{subject:t,data:n}),{subject:t,data:n}}catch(n){return J("Failed to parse data channel message, returning data as string",{subject:t,rawData:a,error:n}),{subject:t,data:a}}}function mt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,report:n}){e===y.Start&&t===y.Start?a==null||a(y.Start):e===y.Stop&&t===y.Stop&&(a==null||a(y.Stop,n))}function gt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:n,report:s}){e===y.Start?a==null||a(y.Start):e===y.Stop&&(a==null||a(y.Stop,s)),t===y.Start?n==null||n(O.Talking):t===y.Stop&&(n==null||n(O.Idle))}function Ae({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:n,streamType:s,report:i}){s===H.Legacy?mt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,report:i}):s===H.Fluent&&gt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:n,report:i})}async function ht(e,t,{debug:a=!1,callbacks:n,auth:s,baseURL:i=Z,analytics:o}){var K;je=a;let c=!1,r=!1,u=y.Stop,d=y.Stop;const{startConnection:f,sendStreamRequest:L,close:T,createStream:_,addIceCandidate:D}=t.videoType===te.Clip?et(s,i,e,n.onError):tt(s,i,e,n.onError),{id:k,offer:U,ice_servers:N,session_id:$,fluent:l,interrupt_enabled:p}=await _(t);(K=n.onStreamCreated)==null||K.call(n,{stream_id:k,session_id:$,agent_id:e});const g=new lt({iceServers:N}),I=g.createDataChannel("JanusDataChannel");if(!$)throw new Error("Could not create session_id");const R=l?H.Fluent:H.Legacy;o.enrich({"stream-type":R});const C=t.stream_warmup&&!l,B=()=>c,j=()=>{var m;c=!0,r&&((m=n.onConnectionStateChange)==null||m.call(n,E.Connected))},b=ut(g,B,j,(m,w)=>Ae({statsSignal:d=m,dataChannelSignal:R===H.Legacy?u:void 0,onVideoStateChange:n.onVideoStateChange,onAgentActivityStateChange:n.onAgentActivityStateChange,report:w,streamType:R}),m=>{var w;return(w=n.onConnectivityStateChange)==null?void 0:w.call(n,m)},C);g.onicecandidate=m=>{var w;J("peerConnection.onicecandidate",m);try{m.candidate&&m.candidate.sdpMid&&m.candidate.sdpMLineIndex!==null?D(k,{candidate:m.candidate.candidate,sdpMid:m.candidate.sdpMid,sdpMLineIndex:m.candidate.sdpMLineIndex},$):D(k,{candidate:null},$)}catch(z){(w=n.onError)==null||w.call(n,z,{streamId:k})}},I.onopen=()=>{r=!0,(!C||c)&&j()};function v(m){u=m===F.StreamStarted?y.Start:y.Stop,Ae({statsSignal:R===H.Legacy?d:void 0,dataChannelSignal:u,onVideoStateChange:n.onVideoStateChange,onAgentActivityStateChange:n.onAgentActivityStateChange,streamType:R})}function M(m,w){const z=typeof w=="string"?w:w==null?void 0:w.metadata;z&&o.enrich({streamMetadata:z}),o.track("agent-chat",{event:"ready"})}const S={[F.StreamStarted]:v,[F.StreamDone]:v,[F.StreamReady]:M};I.onmessage=m=>{var V;const{subject:w,data:z}=ft(m.data);(V=S[w])==null||V.call(S,w,z)},g.oniceconnectionstatechange=()=>{var w;J("peerConnection.oniceconnectionstatechange => "+g.iceConnectionState);const m=be(g.iceConnectionState);m!==E.Connected&&((w=n.onConnectionStateChange)==null||w.call(n,m))},g.ontrack=m=>{var w;J("peerConnection.ontrack",m),(w=n.onSrcObjectReady)==null||w.call(n,m.streams[0])},await g.setRemoteDescription(U),J("set remote description OK");const q=await g.createAnswer();return J("create answer OK"),await g.setLocalDescription(q),J("set local description OK"),await f(k,q,$),J("start connection OK"),{speak(m){return L(k,$,m)},async disconnect(){var m;if(k){const w=be(g.iceConnectionState);if(g){if(w===E.New){clearInterval(b);return}g.close(),g.oniceconnectionstatechange=null,g.onnegotiationneeded=null,g.onicecandidate=null,g.ontrack=null}try{w===E.Connected&&await T(k,$).catch(z=>{})}catch(z){J("Error on close stream connection",z)}(m=n.onAgentActivityStateChange)==null||m.call(n,O.Idle),clearInterval(b)}},sendDataChannelMessage(m){var w,z;if(!c||I.readyState!=="open"){J("Data channel is not ready for sending messages"),(w=n.onError)==null||w.call(n,new Error("Data channel is not ready for sending messages"),{streamId:k});return}try{I.send(m)}catch(V){J("Error sending data channel message",V),(z=n.onError)==null||z.call(n,V,{streamId:k})}},sessionId:$,streamId:k,streamType:R,interruptAvailable:p}}function wt(e,t){const{streamOptions:a}=t??{};return{videoType:ye(e.presenter.type),output_resolution:a==null?void 0:a.outputResolution,session_timeout:a==null?void 0:a.sessionTimeout,stream_warmup:a==null?void 0:a.streamWarmup,compatibility_mode:a==null?void 0:a.compatibilityMode,fluent:a==null?void 0:a.fluent}}function pt(e,t,a,n,s){s===H.Fluent?yt(e,t,a,n,s):kt(e,t,a,n,s)}function yt(e,t,a,n,s){e===y.Start?n.track("stream-session",{event:"start","stream-type":s}):e===y.Stop&&n.track("stream-session",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":s,...a})}function vt(e,t,a,n){W.get()<=0||(e===y.Start?a.linkTrack("agent-video",{event:"start",latency:W.get(!0),"stream-type":n},"start",[F.StreamVideoCreated]):e===y.Stop&&a.linkTrack("agent-video",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":n},"done",[F.StreamVideoDone]))}function kt(e,t,a,n,s){W.get()<=0||(e===y.Start?n.linkTrack("agent-video",{event:"start",latency:W.get(!0),"stream-type":s},"start",[F.StreamVideoCreated]):e===y.Stop&&n.linkTrack("agent-video",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":s,...a},"done",[F.StreamVideoDone]))}function Ct(e,t,a){return W.reset(),new Promise(async(n,s)=>{try{const i=await ht(e.id,wt(e,t),{...t,analytics:a,callbacks:{...t.callbacks,onConnectionStateChange:o=>{var c,r;(r=(c=t.callbacks).onConnectionStateChange)==null||r.call(c,o),o===E.Connected&&n(i)},onVideoStateChange:(o,c)=>{var r,u;(u=(r=t.callbacks).onVideoStateChange)==null||u.call(r,o),pt(o,e,c,a,i.streamType)},onAgentActivityStateChange:o=>{var c,r;(r=(c=t.callbacks).onAgentActivityStateChange)==null||r.call(c,o),o===O.Talking?se.update():se.reset(),vt(o===O.Talking?y.Start:y.Stop,e,a,i.streamType)}}})}catch(i){s(i)}})}async function Dt(e,t,a,n,s){var r,u,d,f;const{chat:i,chatMode:o}=await Te(e,a,n,t.mode,t.persistentChat,s);if(o&&o!==t.mode&&(t.mode=o,(u=(r=t.callbacks).onModeChange)==null||u.call(r,o),o===P.TextOnly))return(f=(d=t.callbacks).onError)==null||f.call(d,new de(o)),{chat:i};const c=await Ct(e,t,n);return{chat:i,streamingManager:c}}async function Rt(e,t){var U,N,$;let a=!0,n=!1,s=!1;const i=t.mixpanelKey||Le,o=t.wsURL||Be,c=t.baseURL||Z,r={messages:[],chatMode:t.mode||P.Functional},u=Se(t.auth,c,t.callbacks.onError),d=await u.getById(e),f=qe({token:i,agent:d,isEnabled:t.enableAnalitics,distinctId:t.distinctId}),{onMessage:L,clearQueue:T}=Ze(f,r,t,d,()=>{var l;return(l=r.socketManager)==null?void 0:l.disconnect()});r.messages=xe(t.initialMessages),(N=(U=t.callbacks).onNewMessage)==null||N.call(U,[...r.messages],"answer"),f.track("agent-sdk",{event:"loaded",...We(d)});async function _(l){var B,j,b,v,M,S,q;(j=(B=t.callbacks).onConnectionStateChange)==null||j.call(B,E.Connecting),W.reset(),n=!1,s=!1,l&&!a&&(delete r.chat,(v=(b=t.callbacks).onNewMessage)==null||v.call(b,[...r.messages],"answer"));const p=re(t.mode)?Promise.resolve(void 0):Oe(t.auth,o,{onMessage:L,onError:t.callbacks.onError}),g=ne(()=>Dt(d,t,u,f,r.chat),{limit:3,timeout:Pe,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:K=>(K==null?void 0:K.message)!=="Could not connect"&&K.status!==429,delayMs:1e3}).catch(K=>{var m,w;throw k(P.Maintenance),(w=(m=t.callbacks).onConnectionStateChange)==null||w.call(m,E.Fail),K}),[I,{streamingManager:R,chat:C}]=await Promise.all([p,g]);C&&C.id!==((M=r.chat)==null?void 0:M.id)&&((q=(S=t.callbacks).onNewChat)==null||q.call(S,C.id)),r.streamingManager=R,r.socketManager=I,r.chat=C,a=!1,k((C==null?void 0:C.chat_mode)??t.mode??P.Functional)}async function D(){var l,p,g,I;(l=r.socketManager)==null||l.disconnect(),await((p=r.streamingManager)==null?void 0:p.disconnect()),n=!1,s=!1,delete r.streamingManager,delete r.socketManager,(I=(g=t.callbacks).onConnectionStateChange)==null||I.call(g,E.Disconnected)}async function k(l){var p,g;l!==r.chatMode&&(f.track("agent-mode-change",{mode:l}),r.chatMode=l,r.chatMode!==P.Functional&&await D(),(g=(p=t.callbacks).onModeChange)==null||g.call(p,l))}return{agent:d,getStreamType:()=>{var l;return(l=r.streamingManager)==null?void 0:l.streamType},getIsInterruptAvailable:()=>{var l;return((l=r.streamingManager)==null?void 0:l.interruptAvailable)??!1},starterMessages:(($=d.knowledge)==null?void 0:$.starter_message)||[],getSTTToken:()=>u.getSTTToken(d.id),changeMode:k,enrichAnalytics:f.enrich,async connect(){var l;await _(!0),f.track("agent-chat",{event:"connect",chatId:(l=r.chat)==null?void 0:l.id,agentId:d.id,mode:r.chatMode})},async reconnect(){var l;await D(),await _(!1),f.track("agent-chat",{event:"reconnect",chatId:(l=r.chat)==null?void 0:l.id,agentId:d.id,mode:r.chatMode})},async disconnect(){var l;await D(),f.track("agent-chat",{event:"disconnect",chatId:(l=r.chat)==null?void 0:l.id,agentId:d.id,mode:r.chatMode})},async chat(l){var R,C,B,j,b;const p=()=>{if(re(t.mode))throw new X(`${t.mode} is enabled, chat is disabled`);if(l.length>=800)throw new X("Message cannot be more than 800 characters");if(l.length===0)throw new X("Message cannot be empty");if(r.chatMode===P.Maintenance)throw new X("Chat is in maintenance mode");if(![P.TextOnly,P.Playground].includes(r.chatMode)){if(!r.streamingManager)throw new X("Streaming manager is not initialized");if(!r.chat)throw new X("Chat is not initialized")}},g=async()=>{var v,M;if(!r.chat){const S=await Te(d,u,f,r.chatMode,t.persistentChat);if(!S.chat)throw new x(r.chatMode,!!t.persistentChat);r.chat=S.chat,(M=(v=t.callbacks).onNewChat)==null||M.call(v,r.chat.id)}return r.chat.id},I=async(v,M)=>ne(()=>{var S,q;return u.chat(d.id,M,{chatMode:r.chatMode,streamId:(S=r.streamingManager)==null?void 0:S.streamId,sessionId:(q=r.streamingManager)==null?void 0:q.sessionId,messages:v.map(({matches:K,...m})=>m)},{...Me(r.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:S=>{var m,w,z,V;const q=(m=S==null?void 0:S.message)==null?void 0:m.includes("missing or invalid session_id");return!((w=S==null?void 0:S.message)==null?void 0:w.includes("Stream Error"))&&!q?((V=(z=t.callbacks).onError)==null||V.call(z,S),!1):!0},onRetry:async()=>{await D(),await _(!1)}});try{T(),p(),r.messages.push({id:G(),role:"user",content:l,created_at:new Date(W.update()).toISOString()}),(C=(R=t.callbacks).onNewMessage)==null||C.call(R,[...r.messages],"user");const v=await g(),M=await I([...r.messages],v);return r.messages.push({id:G(),role:"assistant",content:M.result||"",created_at:new Date().toISOString(),context:M.context,matches:M.matches,videoId:M.videoId}),n&&M.videoId&&r.streamingManager&&(n=!1,r.messages[r.messages.length-1].interrupted=!0,await oe(r.streamingManager,M.videoId)),f.track("agent-message-send",{event:"success",mode:r.chatMode,messages:r.messages.length+1}),M.result&&((j=(B=t.callbacks).onNewMessage)==null||j.call(B,[...r.messages],"answer"),f.track("agent-message-received",{latency:W.get(!0),mode:r.chatMode,messages:r.messages.length})),M}catch(v){throw n=!1,((b=r.messages[r.messages.length-1])==null?void 0:b.role)==="assistant"&&r.messages.pop(),f.track("agent-message-send",{event:"error",mode:r.chatMode,messages:r.messages.length}),v}},rate(l,p,g){var C,B,j,b;const I=r.messages.find(v=>v.id===l);if(r.chat){if(!I)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const R=((C=I.matches)==null?void 0:C.map(v=>[v.document_id,v.id]))??[];return f.track("agent-rate",{event:g?"update":"create",thumb:p===1?"up":"down",knowledge_id:((B=d.knowledge)==null?void 0:B.id)??"",mode:r.chatMode,matches:R,score:p}),g?u.updateRating(d.id,r.chat.id,g,{knowledge_id:((j=d.knowledge)==null?void 0:j.id)??"",message_id:l,matches:R,score:p}):u.createRating(d.id,r.chat.id,{knowledge_id:((b=d.knowledge)==null?void 0:b.id)??"",message_id:l,matches:R,score:p})},deleteRate(l){var p;if(!r.chat)throw new Error("Chat is not initialized");return f.track("agent-rate-delete",{type:"text",chat_id:(p=r.chat)==null?void 0:p.id,id:l,mode:r.chatMode}),u.deleteRating(d.id,r.chat.id,l)},async speak(l){var R,C,B,j,b;function p(){if(typeof l=="string"){if(!d.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:d.presenter.voice,input:l,ssml:!1}}if(l.type==="text"&&!l.provider){if(!d.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:d.presenter.voice,input:l.input,ssml:l.ssml}}return l}const g=p();if(f.track("agent-speak",g),W.update(),r.messages&&g.type==="text"&&(r.messages.push({id:G(),role:"assistant",content:g.input,created_at:new Date(W.get(!0)).toISOString()}),(C=(R=t.callbacks).onNewMessage)==null||C.call(R,[...r.messages],"answer")),ze(r.chatMode))return{duration:0,video_id:"",status:"success"};if(!r.streamingManager)throw new Error("Please connect to the agent first");s=!0;try{const v=await r.streamingManager.speak({script:g,metadata:{chat_id:(B=r.chat)==null?void 0:B.id,agent_id:d.id}});return s=!1,r.messages[r.messages.length-1].videoId=v.video_id,n&&v.video_id&&r.streamingManager&&(n=!1,r.messages[r.messages.length-1].interrupted=!0,await oe(r.streamingManager,v.video_id)),(b=(j=t.callbacks).onNewMessage)==null||b.call(j,[...r.messages],"answer"),v}finally{s=!1}},async interrupt({type:l}){var R,C,B,j,b;const p=r.messages[r.messages.length-1],g=(p==null?void 0:p.role)==="user",I=g||s;if(Ve(r.streamingManager,(R=r.streamingManager)==null?void 0:R.streamType,I,!!(p!=null&&p.videoId)),f.track("agent-video-interrupt",{type:l||"click",stream_id:(C=r.streamingManager)==null?void 0:C.streamId,agent_id:d.id,owner_id:d.owner_id,video_duration_to_interrupt:se.get(!0),message_duration_to_interrupt:W.get(!0),chat_id:(B=r.chat)==null?void 0:B.id,mode:r.chatMode,queued_interrupt:g}),I){n=!0;return}p.interrupted=!0,(b=(j=t.callbacks).onNewMessage)==null||b.call(j,[...r.messages],"answer"),oe(r.streamingManager,p.videoId)}}}function St(e,t,a){const{getById:n}=Se(t,a||Z);return n(e)}h.AgentActivityState=O,h.AgentStatus=me,h.ChatCreationFailed=x,h.ChatMode=P,h.ChatModeDowngraded=de,h.ChatProgress=Y,h.ConnectionState=E,h.ConnectivityState=Q,h.DocumentType=pe,h.KnowledgeType=we,h.PlanGroup=fe,h.Providers=ve,h.RateState=ge,h.StreamEvents=F,h.StreamType=H,h.StreamingState=y,h.Subject=he,h.UserPlan=le,h.ValidationError=X,h.VideoType=te,h.VoiceAccess=ke,h.WsError=ue,h.createAgentManager=Rt,h.getAgent=St,h.mapVideoType=ye,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"})});
1
+ (function(h,A){typeof exports=="object"&&typeof module<"u"?A(exports):typeof define=="function"&&define.amd?define(["exports"],A):(h=typeof globalThis<"u"?globalThis:h||self,A(h.index={}))})(this,function(h){"use strict";var _t=Object.defineProperty;var Et=(h,A,x)=>A in h?_t(h,A,{enumerable:!0,configurable:!0,writable:!0,value:x}):h[A]=x;var ee=(h,A,x)=>(Et(h,typeof A!="symbol"?A+"":A,x),x);class A extends Error{constructor({kind:a,description:n,error:s}){super(JSON.stringify({kind:a,description:n}));ee(this,"kind");ee(this,"description");ee(this,"error");this.kind=a,this.description=n,this.error=s}}class x extends A{constructor(t,a){super({kind:"ChatCreationFailed",description:`Failed to create ${a?"persistent":""} chat, mode: ${t}`})}}class ce extends A{constructor(t){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${t}`})}}class X extends A{constructor(a,n){super({kind:"ValidationError",description:a});ee(this,"key");this.key=n}}class de extends A{constructor(t){super({kind:"WSError",description:t})}}var le=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(le||{}),ue=(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))(ue||{}),fe=(e=>(e.Created="created",e.Started="started",e.Done="done",e.Error="error",e.Rejected="rejected",e.Ready="ready",e))(fe||{}),me=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(me||{}),T=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e.DirectPlayback="DirectPlayback",e.Off="Off",e))(T||{}),Y=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(Y||{}),ge=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(ge||{}),he=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(he||{}),we=(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))(we||{}),te=(e=>(e.Clip="clip",e.Talk="talk",e))(te||{});const pe=e=>{switch(e){case"clip":return"clip";case"talk":return"talk";default:throw new Error(`Unknown video type: ${e}`)}};var y=(e=>(e.Start="START",e.Stop="STOP",e))(y||{}),Q=(e=>(e.Strong="STRONG",e.Weak="WEAK",e.Unknown="UNKNOWN",e))(Q||{}),O=(e=>(e.Idle="IDLE",e.Talking="TALKING",e))(O||{}),F=(e=>(e.ChatAnswer="chat/answer",e.ChatPartial="chat/partial",e.StreamDone="stream/done",e.StreamStarted="stream/started",e.StreamFailed="stream/error",e.StreamReady="stream/ready",e.StreamCreated="stream/created",e.StreamInterrupt="stream/interrupt",e.StreamVideoCreated="stream-video/started",e.StreamVideoDone="stream-video/done",e.StreamVideoError="stream-video/error",e.StreamVideoRejected="stream-video/rejected",e))(F||{}),E=(e=>(e.New="new",e.Fail="fail",e.Connected="connected",e.Connecting="connecting",e.Closed="closed",e.Completed="completed",e.Disconnected="disconnected",e))(E||{}),H=(e=>(e.Legacy="legacy",e.Fluent="fluent",e))(H||{}),ye=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(ye||{}),ve=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(ve||{});const Ae=45*1e3,$e="X-Playground-Chat",Z="https://api.d-id.com",Be="wss://notifications.d-id.com",Le="79f81a83a67430be2bc0fd61042b8faa",ke=e=>new Promise(t=>setTimeout(t,e)),G=(e=16)=>{const t=new Uint8Array(e);return window.crypto.getRandomValues(t),Array.from(t,a=>a.toString(16).padStart(2,"0")).join("").slice(0,13)},ze=e=>[T.TextOnly,T.Playground,T.Maintenance].includes(e),Ce=e=>e&&[T.DirectPlayback,T.Off].includes(e);function Ne(e,t){let a;return{promise:new Promise((s,i)=>{a=setTimeout(()=>i(new Error(t)),e)}),clear:()=>clearTimeout(a)}}async function re(e,t){const a={limit:(t==null?void 0:t.limit)??3,delayMs:(t==null?void 0:t.delayMs)??0,timeout:(t==null?void 0:t.timeout)??3e4,timeoutErrorMessage:(t==null?void 0:t.timeoutErrorMessage)||"Timeout error",shouldRetryFn:(t==null?void 0:t.shouldRetryFn)??(()=>!0),onRetry:(t==null?void 0:t.onRetry)??(()=>{})};let n;for(let s=1;s<=a.limit;s++)try{if(!a.timeout)return await e();const{promise:i,clear:o}=Ne(a.timeout,a.timeoutErrorMessage),c=e().finally(o);return await Promise.race([c,i])}catch(i){if(n=i,!a.shouldRetryFn(i)||s>=a.limit)throw i;await ke(a.delayMs),a.onRetry(i)}throw n}function De(){let e=window.localStorage.getItem("did_external_key_id");if(!e){let t=G();window.localStorage.setItem("did_external_key_id",t),e=t}return e}let Fe=G();function Re(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}.${De()}_${Fe}`;throw new Error(`Unknown auth type: ${e}`)}const Je=e=>re(e,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:t=>t.status===429});function ne(e,t=Z,a){const n=async(s,i)=>{const{skipErrorHandler:o,...c}=i||{},r=await Je(()=>fetch(t+(s!=null&&s.startsWith("/")?s:`/${s}`),{...c,headers:{...c.headers,Authorization:Re(e),"Content-Type":"application/json"}}));if(!r.ok){let l=await r.text().catch(()=>`Failed to fetch with status ${r.status}`);const d=new Error(l);throw a&&!o&&a(d,{url:s,options:c,headers:r.headers}),d}return r.json()};return{get(s,i){return n(s,{...i,method:"GET"})},post(s,i,o){return n(s,{...o,body:JSON.stringify(i),method:"POST"})},delete(s,i,o){return n(s,{...o,body:JSON.stringify(i),method:"DELETE"})},patch(s,i,o){return n(s,{...o,body:JSON.stringify(i),method:"PATCH"})}}}function Se(e,t=Z,a){const n=ne(e,`${t}/agents`,a);return{create(s,i){return n.post("/",s,i)},getAgents(s,i){return n.get(`/${s?`?tag=${s}`:""}`,i).then(o=>o??[])},getById(s,i){return n.get(`/${s}`,i)},delete(s,i){return n.delete(`/${s}`,void 0,i)},update(s,i,o){return n.patch(`/${s}`,i,o)},newChat(s,i,o){return n.post(`/${s}/chat`,i,o)},chat(s,i,o,c){return n.post(`/${s}/chat/${i}`,o,c)},createRating(s,i,o,c){return n.post(`/${s}/chat/${i}/ratings`,o,c)},updateRating(s,i,o,c,r){return n.patch(`/${s}/chat/${i}/ratings/${o}`,c,r)},deleteRating(s,i,o,c){return n.delete(`/${s}/chat/${i}/ratings/${o}`,c)},getSTTToken(s,i){return n.get(`/${s}/stt-token`,i)}}}const _e=e=>e.type==="clip"&&e.presenter_id.startsWith("v2_")?"clip_v2":e.type;function We(e){var s,i,o,c;const t=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",a=()=>{const r=navigator.platform;return r.toLowerCase().includes("win")?"Windows":r.toLowerCase().includes("mac")?"Mac OS X":r.toLowerCase().includes("linux")?"Linux":"Unknown"},n=e.presenter;return{$os:`${a()}`,isMobile:`${t()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:_e(n),agentVoice:{voiceId:(i=(s=e.presenter)==null?void 0:s.voice)==null?void 0:i.voice_id,provider:(c=(o=e.presenter)==null?void 0:o.voice)==null?void 0:c.type}}}const Ue=e=>e.reduce((t,a)=>t+a,0),Ee=e=>Ue(e)/e.length;function Ke(e,t,a){var r,l,d;const{event:n,...s}=e,{template:i}=(t==null?void 0:t.llm)||{},{language:o}=((r=t==null?void 0:t.presenter)==null?void 0:r.voice)||{};return{...s,llm:{...s.llm,template:i},script:{...s.script,provider:{...(l=s==null?void 0:s.script)==null?void 0:l.provider,language:o}},stitch:(t==null?void 0:t.presenter.type)==="talk"?(d=t==null?void 0:t.presenter)==null?void 0:d.stitch:void 0,...a}}let ae={};const He="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function qe(e){var i,o,c,r,l,d;const t=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk",a=e.agent.presenter,n=(i=e.agent.llm)==null?void 0:i.prompt_customization,s={token:e.token||"testKey",distinct_id:e.distinctId||De(),agentId:e.agent.id,agentType:_e(a),owner_id:e.agent.owner_id??"",promptVersion:(o=e.agent.llm)==null?void 0:o.prompt_version,behavior:{role:n==null?void 0:n.role,personality:n==null?void 0:n.personality,instructions:(c=e.agent.llm)==null?void 0:c.instructions},temperature:(r=e.agent.llm)==null?void 0:r.temperature,knowledgeSource:n==null?void 0:n.knowledge_source,starterQuestionsCount:(d=(l=e.agent.knowledge)==null?void 0:l.starter_message)==null?void 0:d.length,topicsToAvoid:n==null?void 0:n.topics_to_avoid,maxResponseLength:n==null?void 0:n.max_response_length};return{...s,additionalProperties:{},isEnabled:e.isEnabled??!0,getRandom:G,enrich(f){this.additionalProperties={...this.additionalProperties,...f}},async track(f,L){if(!this.isEnabled)return Promise.resolve();const{audioPath:j,..._}=L||{},D={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:f,properties:{...this.additionalProperties,..._,...s,source:t,time:Date.now(),$insert_id:this.getRandom(),origin:window.location.href,"Screen Height":window.screen.height||window.innerWidth,"Screen Width":window.screen.width||window.innerHeight,"User Agent":navigator.userAgent}}])})};try{return await fetch(He,D).then(k=>k.json())}catch(k){return console.error(k)}},linkTrack(f,L,j,_){ae[f]||(ae[f]={events:{},resolvedDependencies:[]}),_.includes(j)||_.push(j);const D=ae[f];if(D.events[j]={props:L},D.resolvedDependencies.push(j),_.every(U=>D.resolvedDependencies.includes(U))){const U=_.reduce((N,$)=>D.events[$]?{...N,...D.events[$].props}:N,{});this.track(f,U),D.resolvedDependencies=D.resolvedDependencies.filter(N=>!_.includes(N)),_.forEach(N=>{delete D.events[N]})}}}}function Ie(){let e=0;return{reset:()=>e=0,update:()=>e=Date.now(),get:(t=!1)=>t?Date.now()-e:e}}const W=Ie(),ie=Ie();function Me(e){return e===T.Playground?{headers:{[$e]:"true"}}:{}}async function Te(e,t,a,n,s=!1,i){try{return!i&&!Ce(n)&&(i=await t.newChat(e.id,{persist:s},Me(n)),a.track("agent-chat",{event:"created",chat_id:i.id,agent_id:e.id,mode:n})),{chat:i,chatMode:(i==null?void 0:i.chat_mode)??n}}catch(o){try{const c=JSON.parse(o.message);if((c==null?void 0:c.kind)==="InsufficientCreditsError")throw new Error("InsufficientCreditsError")}catch(c){console.error("Error parsing the error message:",c)}throw new Error("Cannot create new chat")}}function xe(e){return e&&e.length>0?e:[]}function Ve(e,t,a,n){if(!e)throw new Error("Please connect to the agent first");if(!e.interruptAvailable)throw new Error("Interrupt is not enabled for this stream");if(t!==H.Fluent)throw new Error("Interrupt only available for Fluent streams");if(!a&&!n)throw new Error("No active video to interrupt")}async function se(e,t){const a={type:F.StreamInterrupt,videoId:t,timestamp:Date.now()};e.sendDataChannelMessage(JSON.stringify(a))}function Xe(e){return new Promise((t,a)=>{const{callbacks:n,host:s,auth:i}=e,{onMessage:o=null,onOpen:c=null,onClose:r=null,onError:l=null}=n||{},d=new WebSocket(`${s}?authorization=${Re(i)}`);d.onmessage=o,d.onclose=r,d.onerror=f=>{console.error(f),l==null||l("Websocket failed to connect",f),a(f)},d.onopen=f=>{c==null||c(f),t(d)}})}async function Ye(e){const{retries:t=1}=e;let a=null;for(let n=0;(a==null?void 0:a.readyState)!==WebSocket.OPEN;n++)try{a=await Xe(e)}catch(s){if(n===t)throw s;await ke(n*500)}return a}async function Oe(e,t,a){const n=a!=null&&a.onMessage?[a.onMessage]:[],s=await Ye({auth:e,host:t,callbacks:{onError:i=>{var o;return(o=a.onError)==null?void 0:o.call(a,new de(i))},onMessage(i){const o=JSON.parse(i.data);n.forEach(c=>c(o.event,o))}}});return{socket:s,disconnect:()=>s.close(),subscribeToEvents:i=>n.push(i)}}function Qe(e){if(e.answer!==void 0)return e.answer;let t=0,a="";for(;t in e;)a+=e[t++];return a}function Ge(e,t,a,n,s){const i=n.messages[n.messages.length-1];if(!(e===Y.Partial||e===Y.Answer)||(i==null?void 0:i.role)!=="assistant")return;const{content:o,sequence:c}=t;e===Y.Partial?a[c]=o:a.answer=o;const r=Qe(a);(i.content!==r||e===Y.Answer)&&(i.content=r,s==null||s([...n.messages],e))}function Ze(e,t,a,n,s){let i={};return{clearQueue:()=>i={},onMessage:(o,c)=>{var r,l;if("content"in c)Ge(o,c,i,t,a.callbacks.onNewMessage),o===Y.Answer&&e.track("agent-message-received",{messages:t.messages.length,mode:t.chatMode});else{const d=F,f=[d.StreamVideoDone,d.StreamVideoError,d.StreamVideoRejected],L=[d.StreamFailed,d.StreamVideoError,d.StreamVideoRejected],j=Ke(c,n,{mode:t.chatMode});if(o=o,o===d.StreamVideoCreated)e.linkTrack("agent-video",j,d.StreamVideoCreated,["start"]);else if(f.includes(o)){const _=o.split("/")[1];L.includes(o)?e.track("agent-video",{...j,event:_}):e.linkTrack("agent-video",{...j,event:_},o,["done"])}L.includes(o)&&((l=(r=a.callbacks).onError)==null||l.call(r,new Error(`Stream failed with event ${o}`),{data:c})),c.event===d.StreamDone&&s()}}}}function et(e,t,a,n){const s=ne(e,`${t}/agents/${a}`,n);return{createStream(i){return s.post("/streams",{output_resolution:i.output_resolution,compatibility_mode:i.compatibility_mode,stream_warmup:i.stream_warmup,session_timeout:i.session_timeout,fluent:i.fluent})},startConnection(i,o,c){return s.post(`/streams/${i}/sdp`,{session_id:c,answer:o})},addIceCandidate(i,o,c){return s.post(`/streams/${i}/ice`,{session_id:c,...o})},sendStreamRequest(i,o,c){return s.post(`/streams/${i}`,{session_id:o,...c})},close(i,o){return s.delete(`/streams/${i}`,{session_id:o})}}}function tt(e,t,a,n){const s=ne(e,`${t}/agents/${a}`,n);return{createStream(i,o){return s.post("/streams",{driver_url:i.driver_url,face:i.face,config:i.config,output_resolution:i.output_resolution,compatibility_mode:i.compatibility_mode,stream_warmup:i.stream_warmup,session_timeout:i.session_timeout,fluent:i.fluent},o)},startConnection(i,o,c,r){return s.post(`/streams/${i}/sdp`,{session_id:c,answer:o},r)},addIceCandidate(i,o,c,r){return s.post(`/streams/${i}/ice`,{session_id:c,...o},r)},sendStreamRequest(i,o,c,r){return s.post(`/streams/${i}`,{session_id:o,...c},r)},close(i,o,c){return s.delete(`/streams/${i}`,{session_id:o},c)}}}function rt(e,t,a){const n=(t.timestamp-e.timestamp)/1e3;return{duration:n,bytesReceived:t.bytesReceived-e.bytesReceived,bitrate:Math.round((t.bytesReceived-e.bytesReceived)*8/n),packetsReceived:t.packetsReceived-e.packetsReceived,packetsLost:t.packetsLost-e.packetsLost,framesDropped:t.framesDropped-e.framesDropped,framesDecoded:t.framesDecoded-e.framesDecoded,jitter:t.jitter,avgJitterDelayInInterval:(t.jitterBufferDelay-e.jitterBufferDelay)/(t.jitterBufferEmittedCount-e.jitterBufferEmittedCount),jitterBufferEmittedCount:t.jitterBufferEmittedCount-e.jitterBufferEmittedCount,jitterBufferDelay:(t.jitterBufferDelay-e.jitterBufferDelay)/n,framesPerSecond:t.framesPerSecond,freezeCount:t.freezeCount-e.freezeCount,freezeDuration:t.freezeDuration-e.freezeDuration,lowFpsCount:a}}function nt(e){return e.filter(t=>t.freezeCount>0||t.framesPerSecond<21||t.framesDropped>0||t.packetsLost>0).map(t=>{const{timestamp:a,...n}=t,s=[];return t.freezeCount>0&&s.push("freeze"),t.framesPerSecond<21&&s.push("low fps"),t.framesDropped>0&&s.push("frames dropped"),t.packetsLost>0&&s.push("packet loss"),{...n,causes:s}})}function at(e){let t="",a=0;for(const n of e.values())if(n&&n.type==="codec"&&n.mimeType.startsWith("video")&&(t=n.mimeType.split("/")[1]),n&&n.type==="candidate-pair"&&(a=n.currentRoundTripTime),n&&n.type==="inbound-rtp"&&n.kind==="video")return{codec:t,rtt:a,timestamp:n.timestamp,bytesReceived:n.bytesReceived,packetsReceived:n.packetsReceived,packetsLost:n.packetsLost,framesDropped:n.framesDropped,framesDecoded:n.framesDecoded,jitter:n.jitter,jitterBufferDelay:n.jitterBufferDelay,jitterBufferEmittedCount:n.jitterBufferEmittedCount,avgJitterDelayInInterval:n.jitterBufferDelay/n.jitterBufferEmittedCount,frameWidth:n.frameWidth,frameHeight:n.frameHeight,framesPerSecond:n.framesPerSecond,freezeCount:n.freezeCount,freezeDuration:n.totalFreezesDuration};return{}}function it(e,t,a){const n=e.map((r,l)=>l===0?a?{timestamp:r.timestamp,duration:0,rtt:r.rtt,bytesReceived:r.bytesReceived-a.bytesReceived,bitrate:(r.bytesReceived-a.bytesReceived)*8/(t/1e3),packetsReceived:r.packetsReceived-a.packetsReceived,packetsLost:r.packetsLost-a.packetsLost,framesDropped:r.framesDropped-a.framesDropped,framesDecoded:r.framesDecoded-a.framesDecoded,jitter:r.jitter,jitterBufferDelay:r.jitterBufferDelay-a.jitterBufferDelay,jitterBufferEmittedCount:r.jitterBufferEmittedCount-a.jitterBufferEmittedCount,avgJitterDelayInInterval:(r.jitterBufferDelay-a.jitterBufferDelay)/(r.jitterBufferEmittedCount-a.jitterBufferEmittedCount),framesPerSecond:r.framesPerSecond,freezeCount:r.freezeCount-a.freezeCount,freezeDuration:r.freezeDuration-a.freezeDuration}:{timestamp:r.timestamp,rtt:r.rtt,duration:0,bytesReceived:r.bytesReceived,bitrate:r.bytesReceived*8/(t/1e3),packetsReceived:r.packetsReceived,packetsLost:r.packetsLost,framesDropped:r.framesDropped,framesDecoded:r.framesDecoded,jitter:r.jitter,jitterBufferDelay:r.jitterBufferDelay,jitterBufferEmittedCount:r.jitterBufferEmittedCount,avgJitterDelayInInterval:r.jitterBufferDelay/r.jitterBufferEmittedCount,framesPerSecond:r.framesPerSecond,freezeCount:r.freezeCount,freezeDuration:r.freezeDuration}:{timestamp:r.timestamp,duration:t*l/1e3,rtt:r.rtt,bytesReceived:r.bytesReceived-e[l-1].bytesReceived,bitrate:(r.bytesReceived-e[l-1].bytesReceived)*8/(t/1e3),packetsReceived:r.packetsReceived-e[l-1].packetsReceived,packetsLost:r.packetsLost-e[l-1].packetsLost,framesDropped:r.framesDropped-e[l-1].framesDropped,framesDecoded:r.framesDecoded-e[l-1].framesDecoded,jitter:r.jitter,jitterBufferDelay:r.jitterBufferDelay-e[l-1].jitterBufferDelay,jitterBufferEmittedCount:r.jitterBufferEmittedCount-e[l-1].jitterBufferEmittedCount,avgJitterDelayInInterval:(r.jitterBufferDelay-e[l-1].jitterBufferDelay)/(r.jitterBufferEmittedCount-e[l-1].jitterBufferEmittedCount),framesPerSecond:r.framesPerSecond,freezeCount:r.freezeCount-e[l-1].freezeCount,freezeDuration:r.freezeDuration-e[l-1].freezeDuration}),s=nt(n),i=s.reduce((r,l)=>r+(l.causes.includes("low fps")?1:0),0),o=n.filter(r=>!!r.avgJitterDelayInInterval).map(r=>r.avgJitterDelayInInterval),c=n.filter(r=>!!r.rtt).map(r=>r.rtt);return{webRTCStats:{anomalies:s,minRtt:Math.min(...c),avgRtt:Ee(c),maxRtt:Math.max(...c),aggregateReport:rt(e[0],e[e.length-1],i),minJitterDelayInInterval:Math.min(...o),maxJitterDelayInInterval:Math.max(...o),avgJitterDelayInInterval:Ee(o)},codec:e[0].codec,resolution:`${e[0].frameWidth}x${e[0].frameHeight}`}}const oe=100,st=Math.max(Math.ceil(400/oe),1),ot=.25,ct=.28;function dt(){let e=0,t,a,n=0;return s=>{for(const i of s.values())if(i&&i.type==="inbound-rtp"&&i.kind==="video"){const o=i.jitterBufferDelay,c=i.jitterBufferEmittedCount;if(a&&c>a){const d=o-t,f=c-a;n=d/f}t=o,a=c;const r=i.framesDecoded,l=r-e>0;return e=r,{isReceiving:l,avgJitterDelayInInterval:n,freezeCount:i.freezeCount}}return{isReceiving:!1,avgJitterDelayInInterval:n}}}function lt(e,t,a,n,s,i=!1){let o=[],c,r=0,l=!1,d=Q.Unknown,f=Q.Unknown,L=0,j=0;const _=dt();return setInterval(async()=>{const D=await e.getStats(),{isReceiving:k,avgJitterDelayInInterval:U,freezeCount:N}=_(D),$=at(D);if(k)r=0,L=N-j,f=U<ot?Q.Strong:U>ct&&L>1?Q.Weak:d,f!==d&&(s==null||s(f),d=f,j+=L,L=0),l||(n==null||n(y.Start),c=o[o.length-1],o=[],l=!0),o.push($);else if(l&&(r++,r>=st)){const u=it(o,oe,c);n==null||n(y.Stop,u),t()||a(),j=N,l=!1}},oe)}let je=!1;const J=(e,t)=>je&&console.log(e,t),ut=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function be(e){switch(e){case"connected":return E.Connected;case"checking":return E.Connecting;case"failed":return E.Fail;case"new":return E.New;case"closed":return E.Closed;case"disconnected":return E.Disconnected;case"completed":return E.Completed;default:return E.New}}function ft(e){const[t,a=""]=e.split(/:(.+)/);try{const n=JSON.parse(a);return J("parsed data channel message",{subject:t,data:n}),{subject:t,data:n}}catch(n){return J("Failed to parse data channel message, returning data as string",{subject:t,rawData:a,error:n}),{subject:t,data:a}}}function mt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,report:n}){e===y.Start&&t===y.Start?a==null||a(y.Start):e===y.Stop&&t===y.Stop&&(a==null||a(y.Stop,n))}function gt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:n,report:s}){e===y.Start?a==null||a(y.Start):e===y.Stop&&(a==null||a(y.Stop,s)),t===y.Start?n==null||n(O.Talking):t===y.Stop&&(n==null||n(O.Idle))}function Pe({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:n,streamType:s,report:i}){s===H.Legacy?mt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,report:i}):s===H.Fluent&&gt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:n,report:i})}async function ht(e,t,{debug:a=!1,callbacks:n,auth:s,baseURL:i=Z,analytics:o}){var K;je=a;let c=!1,r=!1,l=y.Stop,d=y.Stop;const{startConnection:f,sendStreamRequest:L,close:j,createStream:_,addIceCandidate:D}=t.videoType===te.Clip?et(s,i,e,n.onError):tt(s,i,e,n.onError),{id:k,offer:U,ice_servers:N,session_id:$,fluent:u,interrupt_enabled:p}=await _(t);(K=n.onStreamCreated)==null||K.call(n,{stream_id:k,session_id:$,agent_id:e});const g=new ut({iceServers:N}),I=g.createDataChannel("JanusDataChannel");if(!$)throw new Error("Could not create session_id");const R=u?H.Fluent:H.Legacy;o.enrich({"stream-type":R});const C=t.stream_warmup&&!u,B=()=>c,b=()=>{var m;c=!0,r&&((m=n.onConnectionStateChange)==null||m.call(n,E.Connected))},P=lt(g,B,b,(m,w)=>Pe({statsSignal:d=m,dataChannelSignal:R===H.Legacy?l:void 0,onVideoStateChange:n.onVideoStateChange,onAgentActivityStateChange:n.onAgentActivityStateChange,report:w,streamType:R}),m=>{var w;return(w=n.onConnectivityStateChange)==null?void 0:w.call(n,m)},C);g.onicecandidate=m=>{var w;J("peerConnection.onicecandidate",m);try{m.candidate&&m.candidate.sdpMid&&m.candidate.sdpMLineIndex!==null?D(k,{candidate:m.candidate.candidate,sdpMid:m.candidate.sdpMid,sdpMLineIndex:m.candidate.sdpMLineIndex},$):D(k,{candidate:null},$)}catch(z){(w=n.onError)==null||w.call(n,z,{streamId:k})}},I.onopen=()=>{r=!0,(!C||c)&&b()};function v(m){l=m===F.StreamStarted?y.Start:y.Stop,Pe({statsSignal:R===H.Legacy?d:void 0,dataChannelSignal:l,onVideoStateChange:n.onVideoStateChange,onAgentActivityStateChange:n.onAgentActivityStateChange,streamType:R})}function M(m,w){const z=typeof w=="string"?w:w==null?void 0:w.metadata;z&&o.enrich({streamMetadata:z}),o.track("agent-chat",{event:"ready"})}const S={[F.StreamStarted]:v,[F.StreamDone]:v,[F.StreamReady]:M};I.onmessage=m=>{var V;const{subject:w,data:z}=ft(m.data);(V=S[w])==null||V.call(S,w,z)},g.oniceconnectionstatechange=()=>{var w;J("peerConnection.oniceconnectionstatechange => "+g.iceConnectionState);const m=be(g.iceConnectionState);m!==E.Connected&&((w=n.onConnectionStateChange)==null||w.call(n,m))},g.ontrack=m=>{var w;J("peerConnection.ontrack",m),(w=n.onSrcObjectReady)==null||w.call(n,m.streams[0])},await g.setRemoteDescription(U),J("set remote description OK");const q=await g.createAnswer();return J("create answer OK"),await g.setLocalDescription(q),J("set local description OK"),await f(k,q,$),J("start connection OK"),{speak(m){return L(k,$,m)},async disconnect(){var m;if(k){const w=be(g.iceConnectionState);if(g){if(w===E.New){clearInterval(P);return}g.close(),g.oniceconnectionstatechange=null,g.onnegotiationneeded=null,g.onicecandidate=null,g.ontrack=null}try{w===E.Connected&&await j(k,$).catch(z=>{})}catch(z){J("Error on close stream connection",z)}(m=n.onAgentActivityStateChange)==null||m.call(n,O.Idle),clearInterval(P)}},sendDataChannelMessage(m){var w,z;if(!c||I.readyState!=="open"){J("Data channel is not ready for sending messages"),(w=n.onError)==null||w.call(n,new Error("Data channel is not ready for sending messages"),{streamId:k});return}try{I.send(m)}catch(V){J("Error sending data channel message",V),(z=n.onError)==null||z.call(n,V,{streamId:k})}},sessionId:$,streamId:k,streamType:R,interruptAvailable:p}}function wt(e,t){const{streamOptions:a}=t??{};return{videoType:pe(e.presenter.type),output_resolution:a==null?void 0:a.outputResolution,session_timeout:a==null?void 0:a.sessionTimeout,stream_warmup:a==null?void 0:a.streamWarmup,compatibility_mode:a==null?void 0:a.compatibilityMode,fluent:a==null?void 0:a.fluent}}function pt(e,t,a,n,s){s===H.Fluent?yt(e,t,a,n,s):kt(e,t,a,n,s)}function yt(e,t,a,n,s){e===y.Start?n.track("stream-session",{event:"start","stream-type":s}):e===y.Stop&&n.track("stream-session",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":s,...a})}function vt(e,t,a,n){W.get()<=0||(e===y.Start?a.linkTrack("agent-video",{event:"start",latency:W.get(!0),"stream-type":n},"start",[F.StreamVideoCreated]):e===y.Stop&&a.linkTrack("agent-video",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":n},"done",[F.StreamVideoDone]))}function kt(e,t,a,n,s){W.get()<=0||(e===y.Start?n.linkTrack("agent-video",{event:"start",latency:W.get(!0),"stream-type":s},"start",[F.StreamVideoCreated]):e===y.Stop&&n.linkTrack("agent-video",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":s,...a},"done",[F.StreamVideoDone]))}function Ct(e,t,a){return W.reset(),new Promise(async(n,s)=>{try{const i=await ht(e.id,wt(e,t),{...t,analytics:a,callbacks:{...t.callbacks,onConnectionStateChange:o=>{var c,r;(r=(c=t.callbacks).onConnectionStateChange)==null||r.call(c,o),o===E.Connected&&n(i)},onVideoStateChange:(o,c)=>{var r,l;(l=(r=t.callbacks).onVideoStateChange)==null||l.call(r,o),pt(o,e,c,a,i.streamType)},onAgentActivityStateChange:o=>{var c,r;(r=(c=t.callbacks).onAgentActivityStateChange)==null||r.call(c,o),o===O.Talking?ie.update():ie.reset(),vt(o===O.Talking?y.Start:y.Stop,e,a,i.streamType)}}})}catch(i){s(i)}})}async function Dt(e,t,a,n,s){var r,l,d,f;const{chat:i,chatMode:o}=await Te(e,a,n,t.mode,t.persistentChat,s);if(o&&o!==t.mode&&(t.mode=o,(l=(r=t.callbacks).onModeChange)==null||l.call(r,o),o===T.TextOnly))return(f=(d=t.callbacks).onError)==null||f.call(d,new ce(o)),{chat:i};const c=await Ct(e,t,n);return{chat:i,streamingManager:c}}async function Rt(e,t){var U,N,$;let a=!0,n=!1,s=!1;const i=t.mixpanelKey||Le,o=t.wsURL||Be,c=t.baseURL||Z,r={messages:[],chatMode:t.mode||T.Functional},l=Se(t.auth,c,t.callbacks.onError),d=await l.getById(e),f=qe({token:i,agent:d,isEnabled:t.enableAnalitics,distinctId:t.distinctId}),{onMessage:L,clearQueue:j}=Ze(f,r,t,d,()=>{var u;return(u=r.socketManager)==null?void 0:u.disconnect()});r.messages=xe(t.initialMessages),(N=(U=t.callbacks).onNewMessage)==null||N.call(U,[...r.messages],"answer"),f.track("agent-sdk",{event:"loaded",...We(d)});async function _(u){var B,b,P,v,M,S,q;(b=(B=t.callbacks).onConnectionStateChange)==null||b.call(B,E.Connecting),W.reset(),n=!1,s=!1,u&&!a&&(delete r.chat,(v=(P=t.callbacks).onNewMessage)==null||v.call(P,[...r.messages],"answer"));const p=t.mode===T.DirectPlayback?Promise.resolve(void 0):Oe(t.auth,o,{onMessage:L,onError:t.callbacks.onError}),g=re(()=>Dt(d,t,l,f,r.chat),{limit:3,timeout:Ae,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:K=>(K==null?void 0:K.message)!=="Could not connect"&&K.status!==429,delayMs:1e3}).catch(K=>{var m,w;throw k(T.Maintenance),(w=(m=t.callbacks).onConnectionStateChange)==null||w.call(m,E.Fail),K}),[I,{streamingManager:R,chat:C}]=await Promise.all([p,g]);C&&C.id!==((M=r.chat)==null?void 0:M.id)&&((q=(S=t.callbacks).onNewChat)==null||q.call(S,C.id)),r.streamingManager=R,r.socketManager=I,r.chat=C,a=!1,k((C==null?void 0:C.chat_mode)??t.mode??T.Functional)}async function D(){var u,p,g,I;(u=r.socketManager)==null||u.disconnect(),await((p=r.streamingManager)==null?void 0:p.disconnect()),n=!1,s=!1,delete r.streamingManager,delete r.socketManager,(I=(g=t.callbacks).onConnectionStateChange)==null||I.call(g,E.Disconnected)}async function k(u){var p,g;u!==r.chatMode&&(f.track("agent-mode-change",{mode:u}),r.chatMode=u,r.chatMode!==T.Functional&&await D(),(g=(p=t.callbacks).onModeChange)==null||g.call(p,u))}return{agent:d,getStreamType:()=>{var u;return(u=r.streamingManager)==null?void 0:u.streamType},getIsInterruptAvailable:()=>{var u;return((u=r.streamingManager)==null?void 0:u.interruptAvailable)??!1},starterMessages:(($=d.knowledge)==null?void 0:$.starter_message)||[],getSTTToken:()=>l.getSTTToken(d.id),changeMode:k,enrichAnalytics:f.enrich,async connect(){var u;await _(!0),f.track("agent-chat",{event:"connect",chatId:(u=r.chat)==null?void 0:u.id,agentId:d.id,mode:r.chatMode})},async reconnect(){var u;await D(),await _(!1),f.track("agent-chat",{event:"reconnect",chatId:(u=r.chat)==null?void 0:u.id,agentId:d.id,mode:r.chatMode})},async disconnect(){var u;await D(),f.track("agent-chat",{event:"disconnect",chatId:(u=r.chat)==null?void 0:u.id,agentId:d.id,mode:r.chatMode})},async chat(u){var R,C,B,b,P;const p=()=>{if(Ce(t.mode))throw new X(`${t.mode} is enabled, chat is disabled`);if(u.length>=800)throw new X("Message cannot be more than 800 characters");if(u.length===0)throw new X("Message cannot be empty");if(r.chatMode===T.Maintenance)throw new X("Chat is in maintenance mode");if(![T.TextOnly,T.Playground].includes(r.chatMode)){if(!r.streamingManager)throw new X("Streaming manager is not initialized");if(!r.chat)throw new X("Chat is not initialized")}},g=async()=>{var v,M;if(!r.chat){const S=await Te(d,l,f,r.chatMode,t.persistentChat);if(!S.chat)throw new x(r.chatMode,!!t.persistentChat);r.chat=S.chat,(M=(v=t.callbacks).onNewChat)==null||M.call(v,r.chat.id)}return r.chat.id},I=async(v,M)=>re(()=>{var S,q;return l.chat(d.id,M,{chatMode:r.chatMode,streamId:(S=r.streamingManager)==null?void 0:S.streamId,sessionId:(q=r.streamingManager)==null?void 0:q.sessionId,messages:v.map(({matches:K,...m})=>m)},{...Me(r.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:S=>{var m,w,z,V;const q=(m=S==null?void 0:S.message)==null?void 0:m.includes("missing or invalid session_id");return!((w=S==null?void 0:S.message)==null?void 0:w.includes("Stream Error"))&&!q?((V=(z=t.callbacks).onError)==null||V.call(z,S),!1):!0},onRetry:async()=>{await D(),await _(!1)}});try{j(),p(),r.messages.push({id:G(),role:"user",content:u,created_at:new Date(W.update()).toISOString()}),(C=(R=t.callbacks).onNewMessage)==null||C.call(R,[...r.messages],"user");const v=await g(),M=await I([...r.messages],v);return r.messages.push({id:G(),role:"assistant",content:M.result||"",created_at:new Date().toISOString(),context:M.context,matches:M.matches,videoId:M.videoId}),n&&M.videoId&&r.streamingManager&&(n=!1,r.messages[r.messages.length-1].interrupted=!0,await se(r.streamingManager,M.videoId)),f.track("agent-message-send",{event:"success",mode:r.chatMode,messages:r.messages.length+1}),M.result&&((b=(B=t.callbacks).onNewMessage)==null||b.call(B,[...r.messages],"answer"),f.track("agent-message-received",{latency:W.get(!0),mode:r.chatMode,messages:r.messages.length})),M}catch(v){throw n=!1,((P=r.messages[r.messages.length-1])==null?void 0:P.role)==="assistant"&&r.messages.pop(),f.track("agent-message-send",{event:"error",mode:r.chatMode,messages:r.messages.length}),v}},rate(u,p,g){var C,B,b,P;const I=r.messages.find(v=>v.id===u);if(r.chat){if(!I)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const R=((C=I.matches)==null?void 0:C.map(v=>[v.document_id,v.id]))??[];return f.track("agent-rate",{event:g?"update":"create",thumb:p===1?"up":"down",knowledge_id:((B=d.knowledge)==null?void 0:B.id)??"",mode:r.chatMode,matches:R,score:p}),g?l.updateRating(d.id,r.chat.id,g,{knowledge_id:((b=d.knowledge)==null?void 0:b.id)??"",message_id:u,matches:R,score:p}):l.createRating(d.id,r.chat.id,{knowledge_id:((P=d.knowledge)==null?void 0:P.id)??"",message_id:u,matches:R,score:p})},deleteRate(u){var p;if(!r.chat)throw new Error("Chat is not initialized");return f.track("agent-rate-delete",{type:"text",chat_id:(p=r.chat)==null?void 0:p.id,id:u,mode:r.chatMode}),l.deleteRating(d.id,r.chat.id,u)},async speak(u){var R,C,B,b,P;function p(){if(typeof u=="string"){if(!d.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:d.presenter.voice,input:u,ssml:!1}}if(u.type==="text"&&!u.provider){if(!d.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:d.presenter.voice,input:u.input,ssml:u.ssml}}return u}const g=p();if(f.track("agent-speak",g),W.update(),r.messages&&g.type==="text"&&(r.messages.push({id:G(),role:"assistant",content:g.input,created_at:new Date(W.get(!0)).toISOString()}),(C=(R=t.callbacks).onNewMessage)==null||C.call(R,[...r.messages],"answer")),ze(r.chatMode))return{duration:0,video_id:"",status:"success"};if(!r.streamingManager)throw new Error("Please connect to the agent first");s=!0;try{const v=await r.streamingManager.speak({script:g,metadata:{chat_id:(B=r.chat)==null?void 0:B.id,agent_id:d.id}});return s=!1,r.messages[r.messages.length-1].videoId=v.video_id,n&&v.video_id&&r.streamingManager&&(n=!1,r.messages[r.messages.length-1].interrupted=!0,await se(r.streamingManager,v.video_id)),(P=(b=t.callbacks).onNewMessage)==null||P.call(b,[...r.messages],"answer"),v}finally{s=!1}},async interrupt({type:u}){var R,C,B,b,P;const p=r.messages[r.messages.length-1],g=(p==null?void 0:p.role)==="user",I=g||s;if(Ve(r.streamingManager,(R=r.streamingManager)==null?void 0:R.streamType,I,!!(p!=null&&p.videoId)),f.track("agent-video-interrupt",{type:u||"click",stream_id:(C=r.streamingManager)==null?void 0:C.streamId,agent_id:d.id,owner_id:d.owner_id,video_duration_to_interrupt:ie.get(!0),message_duration_to_interrupt:W.get(!0),chat_id:(B=r.chat)==null?void 0:B.id,mode:r.chatMode,queued_interrupt:g}),I){n=!0;return}p.interrupted=!0,(P=(b=t.callbacks).onNewMessage)==null||P.call(b,[...r.messages],"answer"),se(r.streamingManager,p.videoId)}}}function St(e,t,a){const{getById:n}=Se(t,a||Z);return n(e)}h.AgentActivityState=O,h.AgentStatus=fe,h.ChatCreationFailed=x,h.ChatMode=T,h.ChatModeDowngraded=ce,h.ChatProgress=Y,h.ConnectionState=E,h.ConnectivityState=Q,h.DocumentType=we,h.KnowledgeType=he,h.PlanGroup=ue,h.Providers=ye,h.RateState=me,h.StreamEvents=F,h.StreamType=H,h.StreamingState=y,h.Subject=ge,h.UserPlan=le,h.ValidationError=X,h.VideoType=te,h.VoiceAccess=ve,h.WsError=de,h.createAgentManager=Rt,h.getAgent=St,h.mapVideoType=pe,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@d-id/client-sdk",
3
3
  "private": false,
4
- "version": "1.1.0-beta.25",
4
+ "version": "1.1.0-beta.26",
5
5
  "type": "module",
6
6
  "description": "d-id client sdk",
7
7
  "repository": {