@d-id/client-sdk 1.1.6 → 1.1.7
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 +223 -203
- package/dist/index.umd.cjs +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -66,7 +66,7 @@ var h = /* @__PURE__ */ ((e) => (e.Start = "START", e.Stop = "STOP", e))(h || {}
|
|
|
66
66
|
const $e = 45 * 1e3, Be = "X-Playground-Chat", Z = "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, (n) => n.toString(16).padStart(2, "0")).join("").slice(0, 13);
|
|
69
|
-
}, Ne = (e) => [M.TextOnly, M.Playground, M.Maintenance].includes(e),
|
|
69
|
+
}, Ne = (e) => [M.TextOnly, M.Playground, M.Maintenance].includes(e), le = (e) => e && [M.DirectPlayback, M.Off].includes(e);
|
|
70
70
|
function xe(e, t) {
|
|
71
71
|
let n;
|
|
72
72
|
return {
|
|
@@ -103,7 +103,7 @@ async function te(e, t) {
|
|
|
103
103
|
}
|
|
104
104
|
throw r;
|
|
105
105
|
}
|
|
106
|
-
function
|
|
106
|
+
function ue() {
|
|
107
107
|
let e = window.localStorage.getItem("did_external_key_id");
|
|
108
108
|
if (!e) {
|
|
109
109
|
let t = V();
|
|
@@ -112,13 +112,13 @@ function le() {
|
|
|
112
112
|
return e;
|
|
113
113
|
}
|
|
114
114
|
let Fe = V();
|
|
115
|
-
function
|
|
115
|
+
function me(e) {
|
|
116
116
|
if (e.type === "bearer")
|
|
117
117
|
return `Bearer ${e.token}`;
|
|
118
118
|
if (e.type === "basic")
|
|
119
119
|
return `Basic ${btoa(`${e.username}:${e.password}`)}`;
|
|
120
120
|
if (e.type === "key")
|
|
121
|
-
return `Client-Key ${e.clientKey}.${
|
|
121
|
+
return `Client-Key ${e.clientKey}.${ue()}_${Fe}`;
|
|
122
122
|
throw new Error(`Unknown auth type: ${e}`);
|
|
123
123
|
}
|
|
124
124
|
const Je = (e) => te(e, {
|
|
@@ -136,13 +136,13 @@ function ae(e, t = Z, n) {
|
|
|
136
136
|
...a,
|
|
137
137
|
headers: {
|
|
138
138
|
...a.headers,
|
|
139
|
-
Authorization:
|
|
139
|
+
Authorization: me(e),
|
|
140
140
|
"Content-Type": "application/json"
|
|
141
141
|
}
|
|
142
142
|
}));
|
|
143
143
|
if (!s.ok) {
|
|
144
|
-
let
|
|
145
|
-
const d = new Error(
|
|
144
|
+
let l = await s.text().catch(() => `Failed to fetch with status ${s.status}`);
|
|
145
|
+
const d = new Error(l);
|
|
146
146
|
throw n && !c && n(d, {
|
|
147
147
|
url: o,
|
|
148
148
|
options: a,
|
|
@@ -181,7 +181,7 @@ function ae(e, t = Z, n) {
|
|
|
181
181
|
}
|
|
182
182
|
};
|
|
183
183
|
}
|
|
184
|
-
function
|
|
184
|
+
function fe(e, t = Z, n) {
|
|
185
185
|
const r = ae(e, `${t}/agents`, n);
|
|
186
186
|
return {
|
|
187
187
|
create(o, i) {
|
|
@@ -259,7 +259,7 @@ function Ue(e) {
|
|
|
259
259
|
}
|
|
260
260
|
const Ke = (e) => e.reduce((t, n) => t + n, 0), ie = (e) => Ke(e) / e.length;
|
|
261
261
|
function He(e, t, n) {
|
|
262
|
-
var s,
|
|
262
|
+
var s, l, d;
|
|
263
263
|
const {
|
|
264
264
|
event: r,
|
|
265
265
|
...o
|
|
@@ -277,7 +277,7 @@ function He(e, t, n) {
|
|
|
277
277
|
script: {
|
|
278
278
|
...o.script,
|
|
279
279
|
provider: {
|
|
280
|
-
...(
|
|
280
|
+
...(l = o == null ? void 0 : o.script) == null ? void 0 : l.provider,
|
|
281
281
|
language: c
|
|
282
282
|
}
|
|
283
283
|
},
|
|
@@ -291,7 +291,7 @@ function Ve(e) {
|
|
|
291
291
|
const t = window != null && window.hasOwnProperty("DID_AGENTS_API") ? "agents-ui" : "agents-sdk";
|
|
292
292
|
return {
|
|
293
293
|
token: e.token || "testKey",
|
|
294
|
-
distinct_id: e.distinctId ||
|
|
294
|
+
distinct_id: e.distinctId || ue(),
|
|
295
295
|
agentId: e.agentId,
|
|
296
296
|
additionalProperties: {},
|
|
297
297
|
isEnabled: e.isEnabled ?? !0,
|
|
@@ -346,12 +346,12 @@ function Ve(e) {
|
|
|
346
346
|
if (c.events[o] = {
|
|
347
347
|
props: r
|
|
348
348
|
}, c.resolvedDependencies.push(o), i.every((s) => c.resolvedDependencies.includes(s))) {
|
|
349
|
-
const s = i.reduce((
|
|
350
|
-
...
|
|
349
|
+
const s = i.reduce((l, d) => c.events[d] ? {
|
|
350
|
+
...l,
|
|
351
351
|
...c.events[d].props
|
|
352
|
-
} :
|
|
353
|
-
this.track(n, s), c.resolvedDependencies = c.resolvedDependencies.filter((
|
|
354
|
-
delete c.events[
|
|
352
|
+
} : l, {});
|
|
353
|
+
this.track(n, s), c.resolvedDependencies = c.resolvedDependencies.filter((l) => !i.includes(l)), i.forEach((l) => {
|
|
354
|
+
delete c.events[l];
|
|
355
355
|
});
|
|
356
356
|
}
|
|
357
357
|
}
|
|
@@ -366,22 +366,27 @@ function he() {
|
|
|
366
366
|
};
|
|
367
367
|
}
|
|
368
368
|
const N = he(), re = he();
|
|
369
|
-
function
|
|
369
|
+
function pe(e) {
|
|
370
370
|
return e === M.Playground ? {
|
|
371
371
|
headers: {
|
|
372
372
|
[Be]: "true"
|
|
373
373
|
}
|
|
374
374
|
} : {};
|
|
375
375
|
}
|
|
376
|
-
async function
|
|
376
|
+
async function we(e, t, n, r, o = !1, i) {
|
|
377
377
|
try {
|
|
378
|
-
return !i && !
|
|
378
|
+
return !i && !le(r) && (i = await t.newChat(e.id, {
|
|
379
379
|
persist: o
|
|
380
|
-
},
|
|
380
|
+
}, pe(r)), n.track("agent-chat", {
|
|
381
381
|
event: "created",
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
mode: r
|
|
382
|
+
chatId: i.id,
|
|
383
|
+
agentId: e.id,
|
|
384
|
+
mode: r,
|
|
385
|
+
access: e.access,
|
|
386
|
+
name: e.preview_name,
|
|
387
|
+
...e.access === "public" ? {
|
|
388
|
+
from: "agent-template"
|
|
389
|
+
} : {}
|
|
385
390
|
})), {
|
|
386
391
|
chat: i,
|
|
387
392
|
chatMode: (i == null ? void 0 : i.chat_mode) ?? r
|
|
@@ -428,10 +433,10 @@ function Oe(e) {
|
|
|
428
433
|
onMessage: c = null,
|
|
429
434
|
onOpen: a = null,
|
|
430
435
|
onClose: s = null,
|
|
431
|
-
onError:
|
|
432
|
-
} = r || {}, d = new WebSocket(`${o}?authorization=${
|
|
436
|
+
onError: l = null
|
|
437
|
+
} = r || {}, d = new WebSocket(`${o}?authorization=${me(i)}`);
|
|
433
438
|
d.onmessage = c, d.onclose = s, d.onerror = (y) => {
|
|
434
|
-
console.error(y),
|
|
439
|
+
console.error(y), l == null || l("Websocket failed to connect", y), n(y);
|
|
435
440
|
}, d.onopen = (y) => {
|
|
436
441
|
a == null || a(y), t(d);
|
|
437
442
|
};
|
|
@@ -498,7 +503,7 @@ function rt(e, t, n, r, o) {
|
|
|
498
503
|
return {
|
|
499
504
|
clearQueue: () => i = {},
|
|
500
505
|
onMessage: (c, a) => {
|
|
501
|
-
var s,
|
|
506
|
+
var s, l;
|
|
502
507
|
if ("content" in a)
|
|
503
508
|
tt(c, a, i, t, n.callbacks.onNewMessage), c === q.Answer && e.track("agent-message-received", {
|
|
504
509
|
messages: t.messages.length,
|
|
@@ -520,7 +525,7 @@ function rt(e, t, n, r, o) {
|
|
|
520
525
|
event: x
|
|
521
526
|
}, c, ["done"]);
|
|
522
527
|
}
|
|
523
|
-
A.includes(c) && ((
|
|
528
|
+
A.includes(c) && ((l = (s = n.callbacks).onError) == null || l.call(s, new Error(`Stream failed with event ${c}`), {
|
|
524
529
|
data: a
|
|
525
530
|
})), a.event === d.StreamDone && o();
|
|
526
531
|
}
|
|
@@ -662,7 +667,7 @@ function ot(e) {
|
|
|
662
667
|
return {};
|
|
663
668
|
}
|
|
664
669
|
function ct(e, t, n) {
|
|
665
|
-
const r = e.map((s,
|
|
670
|
+
const r = e.map((s, l) => l === 0 ? n ? {
|
|
666
671
|
timestamp: s.timestamp,
|
|
667
672
|
duration: 0,
|
|
668
673
|
rtt: s.rtt,
|
|
@@ -698,22 +703,22 @@ function ct(e, t, n) {
|
|
|
698
703
|
freezeDuration: s.freezeDuration
|
|
699
704
|
} : {
|
|
700
705
|
timestamp: s.timestamp,
|
|
701
|
-
duration: t *
|
|
706
|
+
duration: t * l / 1e3,
|
|
702
707
|
rtt: s.rtt,
|
|
703
|
-
bytesReceived: s.bytesReceived - e[
|
|
704
|
-
bitrate: (s.bytesReceived - e[
|
|
705
|
-
packetsReceived: s.packetsReceived - e[
|
|
706
|
-
packetsLost: s.packetsLost - e[
|
|
707
|
-
framesDropped: s.framesDropped - e[
|
|
708
|
-
framesDecoded: s.framesDecoded - e[
|
|
708
|
+
bytesReceived: s.bytesReceived - e[l - 1].bytesReceived,
|
|
709
|
+
bitrate: (s.bytesReceived - e[l - 1].bytesReceived) * 8 / (t / 1e3),
|
|
710
|
+
packetsReceived: s.packetsReceived - e[l - 1].packetsReceived,
|
|
711
|
+
packetsLost: s.packetsLost - e[l - 1].packetsLost,
|
|
712
|
+
framesDropped: s.framesDropped - e[l - 1].framesDropped,
|
|
713
|
+
framesDecoded: s.framesDecoded - e[l - 1].framesDecoded,
|
|
709
714
|
jitter: s.jitter,
|
|
710
|
-
jitterBufferDelay: s.jitterBufferDelay - e[
|
|
711
|
-
jitterBufferEmittedCount: s.jitterBufferEmittedCount - e[
|
|
712
|
-
avgJitterDelayInInterval: (s.jitterBufferDelay - e[
|
|
715
|
+
jitterBufferDelay: s.jitterBufferDelay - e[l - 1].jitterBufferDelay,
|
|
716
|
+
jitterBufferEmittedCount: s.jitterBufferEmittedCount - e[l - 1].jitterBufferEmittedCount,
|
|
717
|
+
avgJitterDelayInInterval: (s.jitterBufferDelay - e[l - 1].jitterBufferDelay) / (s.jitterBufferEmittedCount - e[l - 1].jitterBufferEmittedCount),
|
|
713
718
|
framesPerSecond: s.framesPerSecond,
|
|
714
|
-
freezeCount: s.freezeCount - e[
|
|
715
|
-
freezeDuration: s.freezeDuration - e[
|
|
716
|
-
}), o = st(r), i = o.reduce((s,
|
|
719
|
+
freezeCount: s.freezeCount - e[l - 1].freezeCount,
|
|
720
|
+
freezeDuration: s.freezeDuration - e[l - 1].freezeDuration
|
|
721
|
+
}), o = st(r), i = o.reduce((s, l) => s + (l.causes.includes("low fps") ? 1 : 0), 0), c = r.filter((s) => !!s.avgJitterDelayInInterval).map((s) => s.avgJitterDelayInInterval), a = r.filter((s) => !!s.rtt).map((s) => s.rtt);
|
|
717
722
|
return {
|
|
718
723
|
webRTCStats: {
|
|
719
724
|
anomalies: o,
|
|
@@ -729,8 +734,8 @@ function ct(e, t, n) {
|
|
|
729
734
|
resolution: `${e[0].frameWidth}x${e[0].frameHeight}`
|
|
730
735
|
};
|
|
731
736
|
}
|
|
732
|
-
const ne = 100, dt = Math.max(Math.ceil(400 / ne), 1),
|
|
733
|
-
function
|
|
737
|
+
const ne = 100, dt = Math.max(Math.ceil(400 / ne), 1), lt = 0.25, ut = 0.28;
|
|
738
|
+
function mt() {
|
|
734
739
|
let e = 0, t, n, r = 0;
|
|
735
740
|
return (o) => {
|
|
736
741
|
for (const i of o.values())
|
|
@@ -741,9 +746,9 @@ function ft() {
|
|
|
741
746
|
r = d / y;
|
|
742
747
|
}
|
|
743
748
|
t = c, n = a;
|
|
744
|
-
const s = i.framesDecoded,
|
|
749
|
+
const s = i.framesDecoded, l = s - e > 0;
|
|
745
750
|
return e = s, {
|
|
746
|
-
isReceiving:
|
|
751
|
+
isReceiving: l,
|
|
747
752
|
avgJitterDelayInInterval: r,
|
|
748
753
|
freezeCount: i.freezeCount
|
|
749
754
|
};
|
|
@@ -754,9 +759,9 @@ function ft() {
|
|
|
754
759
|
};
|
|
755
760
|
};
|
|
756
761
|
}
|
|
757
|
-
function
|
|
758
|
-
let c = [], a, s = 0,
|
|
759
|
-
const x =
|
|
762
|
+
function ft(e, t, n, r, o, i = !1) {
|
|
763
|
+
let c = [], a, s = 0, l = !1, d = O.Unknown, y = O.Unknown, A = 0, P = 0;
|
|
764
|
+
const x = mt();
|
|
760
765
|
return setInterval(async () => {
|
|
761
766
|
const F = await e.getStats(), {
|
|
762
767
|
isReceiving: R,
|
|
@@ -764,10 +769,10 @@ function mt(e, t, n, r, o, i = !1) {
|
|
|
764
769
|
freezeCount: K
|
|
765
770
|
} = x(F), T = ot(F);
|
|
766
771
|
if (R)
|
|
767
|
-
s = 0, A = K - P, y = U <
|
|
768
|
-
else if (
|
|
769
|
-
const
|
|
770
|
-
r == null || r(h.Stop,
|
|
772
|
+
s = 0, A = K - P, y = U < lt ? O.Strong : U > ut && A > 1 ? O.Weak : d, y !== d && (o == null || o(y), d = y, P += A, A = 0), l || (r == null || r(h.Start), a = c[c.length - 1], c = [], l = !0), c.push(T);
|
|
773
|
+
else if (l && (s++, s >= dt)) {
|
|
774
|
+
const u = ct(c, ne, a);
|
|
775
|
+
r == null || r(h.Stop, u), t() || n(), P = K, l = !1;
|
|
771
776
|
}
|
|
772
777
|
}, ne);
|
|
773
778
|
}
|
|
@@ -815,7 +820,7 @@ function ht(e) {
|
|
|
815
820
|
};
|
|
816
821
|
}
|
|
817
822
|
}
|
|
818
|
-
function
|
|
823
|
+
function pt({
|
|
819
824
|
statsSignal: e,
|
|
820
825
|
dataChannelSignal: t,
|
|
821
826
|
onVideoStateChange: n,
|
|
@@ -823,7 +828,7 @@ function wt({
|
|
|
823
828
|
}) {
|
|
824
829
|
e === h.Start && t === h.Start ? n == null || n(h.Start) : e === h.Stop && t === h.Stop && (n == null || n(h.Stop, r));
|
|
825
830
|
}
|
|
826
|
-
function
|
|
831
|
+
function wt({
|
|
827
832
|
statsSignal: e,
|
|
828
833
|
dataChannelSignal: t,
|
|
829
834
|
onVideoStateChange: n,
|
|
@@ -840,12 +845,12 @@ function oe({
|
|
|
840
845
|
streamType: o,
|
|
841
846
|
report: i
|
|
842
847
|
}) {
|
|
843
|
-
o === W.Legacy ?
|
|
848
|
+
o === W.Legacy ? pt({
|
|
844
849
|
statsSignal: e,
|
|
845
850
|
dataChannelSignal: t,
|
|
846
851
|
onVideoStateChange: n,
|
|
847
852
|
report: i
|
|
848
|
-
}) : o === W.Fluent &&
|
|
853
|
+
}) : o === W.Fluent && wt({
|
|
849
854
|
statsSignal: e,
|
|
850
855
|
dataChannelSignal: t,
|
|
851
856
|
onVideoStateChange: n,
|
|
@@ -862,7 +867,7 @@ async function yt(e, t, {
|
|
|
862
867
|
}) {
|
|
863
868
|
var J;
|
|
864
869
|
ye = n;
|
|
865
|
-
let a = !1, s = !1,
|
|
870
|
+
let a = !1, s = !1, l = h.Stop, d = h.Stop;
|
|
866
871
|
const {
|
|
867
872
|
startConnection: y,
|
|
868
873
|
sendStreamRequest: A,
|
|
@@ -874,45 +879,45 @@ async function yt(e, t, {
|
|
|
874
879
|
offer: U,
|
|
875
880
|
ice_servers: K,
|
|
876
881
|
session_id: T,
|
|
877
|
-
fluent:
|
|
878
|
-
interrupt_enabled:
|
|
882
|
+
fluent: u,
|
|
883
|
+
interrupt_enabled: p
|
|
879
884
|
} = await x(t);
|
|
880
885
|
(J = r.onStreamCreated) == null || J.call(r, {
|
|
881
886
|
stream_id: R,
|
|
882
887
|
session_id: T,
|
|
883
888
|
agent_id: e
|
|
884
889
|
});
|
|
885
|
-
const
|
|
890
|
+
const f = new gt({
|
|
886
891
|
iceServers: K
|
|
887
|
-
}), D =
|
|
892
|
+
}), D = f.createDataChannel("JanusDataChannel");
|
|
888
893
|
if (!T)
|
|
889
894
|
throw new Error("Could not create session_id");
|
|
890
|
-
const v =
|
|
895
|
+
const v = u ? W.Fluent : W.Legacy;
|
|
891
896
|
c.enrich({
|
|
892
897
|
"stream-type": v
|
|
893
898
|
});
|
|
894
|
-
const
|
|
895
|
-
var
|
|
896
|
-
a = !0, s && ((
|
|
897
|
-
}, B =
|
|
898
|
-
statsSignal: d =
|
|
899
|
-
dataChannelSignal: v === W.Legacy ?
|
|
899
|
+
const w = t.stream_warmup && !u, _ = () => a, $ = () => {
|
|
900
|
+
var m;
|
|
901
|
+
a = !0, s && ((m = r.onConnectionStateChange) == null || m.call(r, I.Connected));
|
|
902
|
+
}, B = ft(f, _, $, (m, g) => oe({
|
|
903
|
+
statsSignal: d = m,
|
|
904
|
+
dataChannelSignal: v === W.Legacy ? l : void 0,
|
|
900
905
|
onVideoStateChange: r.onVideoStateChange,
|
|
901
906
|
onAgentActivityStateChange: r.onAgentActivityStateChange,
|
|
902
907
|
report: g,
|
|
903
908
|
streamType: v
|
|
904
|
-
}), (
|
|
909
|
+
}), (m) => {
|
|
905
910
|
var g;
|
|
906
|
-
return (g = r.onConnectivityStateChange) == null ? void 0 : g.call(r,
|
|
907
|
-
},
|
|
908
|
-
|
|
911
|
+
return (g = r.onConnectivityStateChange) == null ? void 0 : g.call(r, m);
|
|
912
|
+
}, w);
|
|
913
|
+
f.onicecandidate = (m) => {
|
|
909
914
|
var g;
|
|
910
|
-
b("peerConnection.onicecandidate",
|
|
915
|
+
b("peerConnection.onicecandidate", m);
|
|
911
916
|
try {
|
|
912
|
-
|
|
913
|
-
candidate:
|
|
914
|
-
sdpMid:
|
|
915
|
-
sdpMLineIndex:
|
|
917
|
+
m.candidate && m.candidate.sdpMid && m.candidate.sdpMLineIndex !== null ? F(R, {
|
|
918
|
+
candidate: m.candidate.candidate,
|
|
919
|
+
sdpMid: m.candidate.sdpMid,
|
|
920
|
+
sdpMLineIndex: m.candidate.sdpMLineIndex
|
|
916
921
|
}, T) : F(R, {
|
|
917
922
|
candidate: null
|
|
918
923
|
}, T);
|
|
@@ -922,26 +927,26 @@ async function yt(e, t, {
|
|
|
922
927
|
});
|
|
923
928
|
}
|
|
924
929
|
}, D.onopen = () => {
|
|
925
|
-
s = !0, (!
|
|
930
|
+
s = !0, (!w || a) && $();
|
|
926
931
|
};
|
|
927
|
-
const k = (
|
|
932
|
+
const k = (m) => {
|
|
928
933
|
var g;
|
|
929
|
-
(g = r.onVideoIdChange) == null || g.call(r,
|
|
934
|
+
(g = r.onVideoIdChange) == null || g.call(r, m);
|
|
930
935
|
};
|
|
931
|
-
function E(
|
|
932
|
-
if (
|
|
936
|
+
function E(m, g) {
|
|
937
|
+
if (m === j.StreamStarted && typeof g == "object" && "metadata" in g) {
|
|
933
938
|
const S = g.metadata;
|
|
934
939
|
k(S.videoId);
|
|
935
940
|
}
|
|
936
|
-
|
|
941
|
+
m === j.StreamDone && k(null), l = m === j.StreamStarted ? h.Start : h.Stop, oe({
|
|
937
942
|
statsSignal: v === W.Legacy ? d : void 0,
|
|
938
|
-
dataChannelSignal:
|
|
943
|
+
dataChannelSignal: l,
|
|
939
944
|
onVideoStateChange: r.onVideoStateChange,
|
|
940
945
|
onAgentActivityStateChange: r.onAgentActivityStateChange,
|
|
941
946
|
streamType: v
|
|
942
947
|
});
|
|
943
948
|
}
|
|
944
|
-
function C(
|
|
949
|
+
function C(m, g) {
|
|
945
950
|
const S = typeof g == "string" ? g : g == null ? void 0 : g.metadata;
|
|
946
951
|
S && c.enrich({
|
|
947
952
|
streamMetadata: S
|
|
@@ -954,44 +959,44 @@ async function yt(e, t, {
|
|
|
954
959
|
[j.StreamDone]: E,
|
|
955
960
|
[j.StreamReady]: C
|
|
956
961
|
};
|
|
957
|
-
D.onmessage = (
|
|
962
|
+
D.onmessage = (m) => {
|
|
958
963
|
var Y;
|
|
959
964
|
const {
|
|
960
965
|
subject: g,
|
|
961
966
|
data: S
|
|
962
|
-
} = ht(
|
|
967
|
+
} = ht(m.data);
|
|
963
968
|
(Y = L[g]) == null || Y.call(L, g, S);
|
|
964
|
-
},
|
|
969
|
+
}, f.oniceconnectionstatechange = () => {
|
|
965
970
|
var g;
|
|
966
|
-
b("peerConnection.oniceconnectionstatechange => " +
|
|
967
|
-
const
|
|
968
|
-
|
|
969
|
-
},
|
|
971
|
+
b("peerConnection.oniceconnectionstatechange => " + f.iceConnectionState);
|
|
972
|
+
const m = se(f.iceConnectionState);
|
|
973
|
+
m !== I.Connected && ((g = r.onConnectionStateChange) == null || g.call(r, m));
|
|
974
|
+
}, f.ontrack = (m) => {
|
|
970
975
|
var g;
|
|
971
|
-
b("peerConnection.ontrack",
|
|
972
|
-
}, await
|
|
973
|
-
const z = await
|
|
974
|
-
return b("create answer OK"), await
|
|
976
|
+
b("peerConnection.ontrack", m), (g = r.onSrcObjectReady) == null || g.call(r, m.streams[0]);
|
|
977
|
+
}, await f.setRemoteDescription(U), b("set remote description OK");
|
|
978
|
+
const z = await f.createAnswer();
|
|
979
|
+
return b("create answer OK"), await f.setLocalDescription(z), b("set local description OK"), await y(R, z, T), b("start connection OK"), {
|
|
975
980
|
/**
|
|
976
981
|
* Method to send request to server to get clip or talk depend on you payload
|
|
977
982
|
* @param payload
|
|
978
983
|
*/
|
|
979
|
-
speak(
|
|
980
|
-
return A(R, T,
|
|
984
|
+
speak(m) {
|
|
985
|
+
return A(R, T, m);
|
|
981
986
|
},
|
|
982
987
|
/**
|
|
983
988
|
* Method to close RTC connection
|
|
984
989
|
*/
|
|
985
990
|
async disconnect() {
|
|
986
|
-
var
|
|
991
|
+
var m;
|
|
987
992
|
if (R) {
|
|
988
|
-
const g = se(
|
|
989
|
-
if (
|
|
993
|
+
const g = se(f.iceConnectionState);
|
|
994
|
+
if (f) {
|
|
990
995
|
if (g === I.New) {
|
|
991
996
|
clearInterval(B);
|
|
992
997
|
return;
|
|
993
998
|
}
|
|
994
|
-
|
|
999
|
+
f.close(), f.oniceconnectionstatechange = null, f.onnegotiationneeded = null, f.onicecandidate = null, f.ontrack = null;
|
|
995
1000
|
}
|
|
996
1001
|
try {
|
|
997
1002
|
g === I.Connected && await P(R, T).catch((S) => {
|
|
@@ -999,13 +1004,13 @@ async function yt(e, t, {
|
|
|
999
1004
|
} catch (S) {
|
|
1000
1005
|
b("Error on close stream connection", S);
|
|
1001
1006
|
}
|
|
1002
|
-
(
|
|
1007
|
+
(m = r.onAgentActivityStateChange) == null || m.call(r, X.Idle), clearInterval(B);
|
|
1003
1008
|
}
|
|
1004
1009
|
},
|
|
1005
1010
|
/**
|
|
1006
1011
|
* Method to send data channel messages to the server
|
|
1007
1012
|
*/
|
|
1008
|
-
sendDataChannelMessage(
|
|
1013
|
+
sendDataChannelMessage(m) {
|
|
1009
1014
|
var g, S;
|
|
1010
1015
|
if (!a || D.readyState !== "open") {
|
|
1011
1016
|
b("Data channel is not ready for sending messages"), (g = r.onError) == null || g.call(r, new Error("Data channel is not ready for sending messages"), {
|
|
@@ -1014,7 +1019,7 @@ async function yt(e, t, {
|
|
|
1014
1019
|
return;
|
|
1015
1020
|
}
|
|
1016
1021
|
try {
|
|
1017
|
-
D.send(
|
|
1022
|
+
D.send(m);
|
|
1018
1023
|
} catch (Y) {
|
|
1019
1024
|
b("Error sending data channel message", Y), (S = r.onError) == null || S.call(r, Y, {
|
|
1020
1025
|
streamId: R
|
|
@@ -1030,7 +1035,7 @@ async function yt(e, t, {
|
|
|
1030
1035
|
*/
|
|
1031
1036
|
streamId: R,
|
|
1032
1037
|
streamType: v,
|
|
1033
|
-
interruptAvailable:
|
|
1038
|
+
interruptAvailable: p
|
|
1034
1039
|
};
|
|
1035
1040
|
}
|
|
1036
1041
|
function vt(e, t) {
|
|
@@ -1099,8 +1104,8 @@ function St(e, t, n) {
|
|
|
1099
1104
|
(s = (a = t.callbacks).onConnectionStateChange) == null || s.call(a, c), c === I.Connected && r(i);
|
|
1100
1105
|
},
|
|
1101
1106
|
onVideoStateChange: (c, a) => {
|
|
1102
|
-
var s,
|
|
1103
|
-
(
|
|
1107
|
+
var s, l;
|
|
1108
|
+
(l = (s = t.callbacks).onVideoStateChange) == null || l.call(s, c), kt(c, e, a, n, i.streamType);
|
|
1104
1109
|
},
|
|
1105
1110
|
onAgentActivityStateChange: (c) => {
|
|
1106
1111
|
var a, s;
|
|
@@ -1114,12 +1119,12 @@ function St(e, t, n) {
|
|
|
1114
1119
|
});
|
|
1115
1120
|
}
|
|
1116
1121
|
async function It(e, t, n, r, o) {
|
|
1117
|
-
var s,
|
|
1122
|
+
var s, l, d, y;
|
|
1118
1123
|
const {
|
|
1119
1124
|
chat: i,
|
|
1120
1125
|
chatMode: c
|
|
1121
|
-
} = await
|
|
1122
|
-
if (c && c !== t.mode && (t.mode = c, (
|
|
1126
|
+
} = await we(e, n, r, t.mode, t.persistentChat, o);
|
|
1127
|
+
if (c && c !== t.mode && (t.mode = c, (l = (s = t.callbacks).onModeChange) == null || l.call(s, c), c === M.TextOnly))
|
|
1123
1128
|
return (y = (d = t.callbacks).onError) == null || y.call(d, new Ce(c)), {
|
|
1124
1129
|
chat: i
|
|
1125
1130
|
};
|
|
@@ -1144,36 +1149,36 @@ async function Et(e, t) {
|
|
|
1144
1149
|
s.track("agent-sdk", {
|
|
1145
1150
|
event: "init"
|
|
1146
1151
|
});
|
|
1147
|
-
const
|
|
1152
|
+
const l = fe(t.auth, c, t.callbacks.onError), d = await l.getById(e);
|
|
1148
1153
|
s.enrich(Ue(d));
|
|
1149
1154
|
const {
|
|
1150
1155
|
onMessage: y,
|
|
1151
1156
|
clearQueue: A
|
|
1152
1157
|
} = rt(s, a, t, d, () => {
|
|
1153
|
-
var
|
|
1154
|
-
return (
|
|
1158
|
+
var u;
|
|
1159
|
+
return (u = a.socketManager) == null ? void 0 : u.disconnect();
|
|
1155
1160
|
});
|
|
1156
1161
|
a.messages = Xe(t.initialMessages), (K = (U = t.callbacks).onNewMessage) == null || K.call(U, [...a.messages], "answer");
|
|
1157
|
-
const P = (
|
|
1158
|
-
r =
|
|
1162
|
+
const P = (u) => {
|
|
1163
|
+
r = u;
|
|
1159
1164
|
};
|
|
1160
1165
|
s.track("agent-sdk", {
|
|
1161
1166
|
event: "loaded",
|
|
1162
1167
|
...We(d)
|
|
1163
1168
|
});
|
|
1164
|
-
async function x(
|
|
1169
|
+
async function x(u) {
|
|
1165
1170
|
var _, $, B, k, E, C, L;
|
|
1166
|
-
($ = (_ = t.callbacks).onConnectionStateChange) == null || $.call(_, I.Connecting), N.reset(),
|
|
1167
|
-
const
|
|
1171
|
+
($ = (_ = t.callbacks).onConnectionStateChange) == null || $.call(_, I.Connecting), N.reset(), u && !n && (delete a.chat, (k = (B = t.callbacks).onNewMessage) == null || k.call(B, [...a.messages], "answer"));
|
|
1172
|
+
const p = t.mode === M.DirectPlayback ? Promise.resolve(void 0) : Ge(t.auth, i, {
|
|
1168
1173
|
onMessage: y,
|
|
1169
1174
|
onError: t.callbacks.onError
|
|
1170
|
-
}),
|
|
1175
|
+
}), f = te(() => It(d, {
|
|
1171
1176
|
...t,
|
|
1172
1177
|
callbacks: {
|
|
1173
1178
|
...t.callbacks,
|
|
1174
1179
|
onVideoIdChange: P
|
|
1175
1180
|
}
|
|
1176
|
-
},
|
|
1181
|
+
}, l, s, a.chat), {
|
|
1177
1182
|
limit: 3,
|
|
1178
1183
|
timeout: $e,
|
|
1179
1184
|
timeoutErrorMessage: "Timeout initializing the stream",
|
|
@@ -1181,73 +1186,88 @@ async function Et(e, t) {
|
|
|
1181
1186
|
shouldRetryFn: (z) => (z == null ? void 0 : z.message) !== "Could not connect" && z.status !== 429,
|
|
1182
1187
|
delayMs: 1e3
|
|
1183
1188
|
}).catch((z) => {
|
|
1184
|
-
var J,
|
|
1185
|
-
throw R(M.Maintenance), (
|
|
1189
|
+
var J, m;
|
|
1190
|
+
throw R(M.Maintenance), (m = (J = t.callbacks).onConnectionStateChange) == null || m.call(J, I.Fail), z;
|
|
1186
1191
|
}), [D, {
|
|
1187
1192
|
streamingManager: v,
|
|
1188
|
-
chat:
|
|
1189
|
-
}] = await Promise.all([
|
|
1190
|
-
|
|
1193
|
+
chat: w
|
|
1194
|
+
}] = await Promise.all([p, f]);
|
|
1195
|
+
w && w.id !== ((E = a.chat) == null ? void 0 : E.id) && ((L = (C = t.callbacks).onNewChat) == null || L.call(C, w.id)), a.streamingManager = v, a.socketManager = D, a.chat = w, n = !1, R((w == null ? void 0 : w.chat_mode) ?? t.mode ?? M.Functional);
|
|
1191
1196
|
}
|
|
1192
1197
|
async function F() {
|
|
1193
|
-
var
|
|
1194
|
-
(
|
|
1198
|
+
var u, p, f, D;
|
|
1199
|
+
(u = a.socketManager) == null || u.disconnect(), await ((p = a.streamingManager) == null ? void 0 : p.disconnect()), delete a.streamingManager, delete a.socketManager, (D = (f = t.callbacks).onConnectionStateChange) == null || D.call(f, I.Disconnected);
|
|
1195
1200
|
}
|
|
1196
|
-
async function R(
|
|
1197
|
-
var
|
|
1198
|
-
|
|
1199
|
-
mode:
|
|
1200
|
-
}), a.chatMode =
|
|
1201
|
+
async function R(u) {
|
|
1202
|
+
var p, f;
|
|
1203
|
+
u !== a.chatMode && (s.track("agent-mode-change", {
|
|
1204
|
+
mode: u
|
|
1205
|
+
}), a.chatMode = u, a.chatMode !== M.Functional && await F(), (f = (p = t.callbacks).onModeChange) == null || f.call(p, u));
|
|
1201
1206
|
}
|
|
1202
1207
|
return {
|
|
1203
1208
|
agent: d,
|
|
1204
1209
|
getStreamType: () => {
|
|
1205
|
-
var
|
|
1206
|
-
return (
|
|
1210
|
+
var u;
|
|
1211
|
+
return (u = a.streamingManager) == null ? void 0 : u.streamType;
|
|
1207
1212
|
},
|
|
1208
1213
|
getIsInterruptAvailable: () => {
|
|
1209
|
-
var
|
|
1210
|
-
return ((
|
|
1214
|
+
var u;
|
|
1215
|
+
return ((u = a.streamingManager) == null ? void 0 : u.interruptAvailable) ?? !1;
|
|
1211
1216
|
},
|
|
1212
1217
|
starterMessages: ((T = d.knowledge) == null ? void 0 : T.starter_message) || [],
|
|
1213
|
-
getSTTToken: () =>
|
|
1218
|
+
getSTTToken: () => l.getSTTToken(d.id),
|
|
1214
1219
|
changeMode: R,
|
|
1215
1220
|
enrichAnalytics: s.enrich,
|
|
1216
1221
|
async connect() {
|
|
1217
|
-
var
|
|
1222
|
+
var u;
|
|
1218
1223
|
await x(!0), s.track("agent-chat", {
|
|
1219
1224
|
event: "connect",
|
|
1220
|
-
chatId: (
|
|
1225
|
+
chatId: (u = a.chat) == null ? void 0 : u.id,
|
|
1221
1226
|
agentId: d.id,
|
|
1222
|
-
mode: a.chatMode
|
|
1227
|
+
mode: a.chatMode,
|
|
1228
|
+
access: d.access,
|
|
1229
|
+
name: d.preview_name,
|
|
1230
|
+
...d.access === "public" ? {
|
|
1231
|
+
from: "agent-template"
|
|
1232
|
+
} : {}
|
|
1223
1233
|
});
|
|
1224
1234
|
},
|
|
1225
1235
|
async reconnect() {
|
|
1226
|
-
var
|
|
1236
|
+
var u;
|
|
1227
1237
|
await F(), await x(!1), s.track("agent-chat", {
|
|
1228
1238
|
event: "reconnect",
|
|
1229
|
-
chatId: (
|
|
1239
|
+
chatId: (u = a.chat) == null ? void 0 : u.id,
|
|
1230
1240
|
agentId: d.id,
|
|
1231
|
-
mode: a.chatMode
|
|
1241
|
+
mode: a.chatMode,
|
|
1242
|
+
access: d.access,
|
|
1243
|
+
name: d.preview_name,
|
|
1244
|
+
...d.access === "public" ? {
|
|
1245
|
+
from: "agent-template"
|
|
1246
|
+
} : {}
|
|
1232
1247
|
});
|
|
1233
1248
|
},
|
|
1234
1249
|
async disconnect() {
|
|
1235
|
-
var
|
|
1250
|
+
var u;
|
|
1236
1251
|
await F(), s.track("agent-chat", {
|
|
1237
1252
|
event: "disconnect",
|
|
1238
|
-
chatId: (
|
|
1253
|
+
chatId: (u = a.chat) == null ? void 0 : u.id,
|
|
1239
1254
|
agentId: d.id,
|
|
1240
|
-
mode: a.chatMode
|
|
1255
|
+
mode: a.chatMode,
|
|
1256
|
+
access: d.access,
|
|
1257
|
+
name: d.preview_name,
|
|
1258
|
+
...d.access === "public" ? {
|
|
1259
|
+
from: "agent-template"
|
|
1260
|
+
} : {}
|
|
1241
1261
|
});
|
|
1242
1262
|
},
|
|
1243
|
-
async chat(
|
|
1244
|
-
var v,
|
|
1245
|
-
const
|
|
1246
|
-
if (
|
|
1263
|
+
async chat(u) {
|
|
1264
|
+
var v, w, _, $, B;
|
|
1265
|
+
const p = () => {
|
|
1266
|
+
if (le(t.mode))
|
|
1247
1267
|
throw new H(`${t.mode} is enabled, chat is disabled`);
|
|
1248
|
-
if (
|
|
1268
|
+
if (u.length >= 800)
|
|
1249
1269
|
throw new H("Message cannot be more than 800 characters");
|
|
1250
|
-
if (
|
|
1270
|
+
if (u.length === 0)
|
|
1251
1271
|
throw new H("Message cannot be empty");
|
|
1252
1272
|
if (a.chatMode === M.Maintenance)
|
|
1253
1273
|
throw new H("Chat is in maintenance mode");
|
|
@@ -1257,10 +1277,10 @@ async function Et(e, t) {
|
|
|
1257
1277
|
if (!a.chat)
|
|
1258
1278
|
throw new H("Chat is not initialized");
|
|
1259
1279
|
}
|
|
1260
|
-
},
|
|
1280
|
+
}, f = async () => {
|
|
1261
1281
|
var k, E;
|
|
1262
1282
|
if (!a.chat) {
|
|
1263
|
-
const C = await
|
|
1283
|
+
const C = await we(d, l, s, a.chatMode, t.persistentChat);
|
|
1264
1284
|
if (!C.chat)
|
|
1265
1285
|
throw new De(a.chatMode, !!t.persistentChat);
|
|
1266
1286
|
a.chat = C.chat, (E = (k = t.callbacks).onNewChat) == null || E.call(k, a.chat.id);
|
|
@@ -1268,7 +1288,7 @@ async function Et(e, t) {
|
|
|
1268
1288
|
return a.chat.id;
|
|
1269
1289
|
}, D = async (k, E) => te(() => {
|
|
1270
1290
|
var C, L;
|
|
1271
|
-
return
|
|
1291
|
+
return l.chat(d.id, E, {
|
|
1272
1292
|
chatMode: a.chatMode,
|
|
1273
1293
|
streamId: (C = a.streamingManager) == null ? void 0 : C.streamId,
|
|
1274
1294
|
sessionId: (L = a.streamingManager) == null ? void 0 : L.sessionId,
|
|
@@ -1277,28 +1297,28 @@ async function Et(e, t) {
|
|
|
1277
1297
|
...J
|
|
1278
1298
|
}) => J)
|
|
1279
1299
|
}, {
|
|
1280
|
-
...
|
|
1300
|
+
...pe(a.chatMode),
|
|
1281
1301
|
skipErrorHandler: !0
|
|
1282
1302
|
});
|
|
1283
1303
|
}, {
|
|
1284
1304
|
limit: 2,
|
|
1285
1305
|
shouldRetryFn: (C) => {
|
|
1286
|
-
var J,
|
|
1306
|
+
var J, m, g, S;
|
|
1287
1307
|
const L = (J = C == null ? void 0 : C.message) == null ? void 0 : J.includes("missing or invalid session_id");
|
|
1288
|
-
return !((
|
|
1308
|
+
return !((m = C == null ? void 0 : C.message) == null ? void 0 : m.includes("Stream Error")) && !L ? ((S = (g = t.callbacks).onError) == null || S.call(g, C), !1) : !0;
|
|
1289
1309
|
},
|
|
1290
1310
|
onRetry: async () => {
|
|
1291
1311
|
await F(), await x(!1);
|
|
1292
1312
|
}
|
|
1293
1313
|
});
|
|
1294
1314
|
try {
|
|
1295
|
-
A(),
|
|
1315
|
+
A(), p(), a.messages.push({
|
|
1296
1316
|
id: V(),
|
|
1297
1317
|
role: "user",
|
|
1298
|
-
content:
|
|
1318
|
+
content: u,
|
|
1299
1319
|
created_at: new Date(N.update()).toISOString()
|
|
1300
|
-
}), (
|
|
1301
|
-
const k = await
|
|
1320
|
+
}), (w = (v = t.callbacks).onNewMessage) == null || w.call(v, [...a.messages], "user");
|
|
1321
|
+
const k = await f(), E = await D([...a.messages], k);
|
|
1302
1322
|
return a.messages.push({
|
|
1303
1323
|
id: V(),
|
|
1304
1324
|
role: "assistant",
|
|
@@ -1323,77 +1343,77 @@ async function Et(e, t) {
|
|
|
1323
1343
|
}), k;
|
|
1324
1344
|
}
|
|
1325
1345
|
},
|
|
1326
|
-
rate(
|
|
1327
|
-
var
|
|
1328
|
-
const D = a.messages.find((k) => k.id ===
|
|
1346
|
+
rate(u, p, f) {
|
|
1347
|
+
var w, _, $, B;
|
|
1348
|
+
const D = a.messages.find((k) => k.id === u);
|
|
1329
1349
|
if (a.chat) {
|
|
1330
1350
|
if (!D)
|
|
1331
1351
|
throw new Error("Message not found");
|
|
1332
1352
|
} else
|
|
1333
1353
|
throw new Error("Chat is not initialized");
|
|
1334
|
-
const v = ((
|
|
1354
|
+
const v = ((w = D.matches) == null ? void 0 : w.map((k) => [k.document_id, k.id])) ?? [];
|
|
1335
1355
|
return s.track("agent-rate", {
|
|
1336
|
-
event:
|
|
1337
|
-
thumb:
|
|
1356
|
+
event: f ? "update" : "create",
|
|
1357
|
+
thumb: p === 1 ? "up" : "down",
|
|
1338
1358
|
knowledge_id: ((_ = d.knowledge) == null ? void 0 : _.id) ?? "",
|
|
1339
1359
|
mode: a.chatMode,
|
|
1340
1360
|
matches: v,
|
|
1341
|
-
score:
|
|
1342
|
-
}),
|
|
1361
|
+
score: p
|
|
1362
|
+
}), f ? l.updateRating(d.id, a.chat.id, f, {
|
|
1343
1363
|
knowledge_id: (($ = d.knowledge) == null ? void 0 : $.id) ?? "",
|
|
1344
|
-
message_id:
|
|
1364
|
+
message_id: u,
|
|
1345
1365
|
matches: v,
|
|
1346
|
-
score:
|
|
1347
|
-
}) :
|
|
1366
|
+
score: p
|
|
1367
|
+
}) : l.createRating(d.id, a.chat.id, {
|
|
1348
1368
|
knowledge_id: ((B = d.knowledge) == null ? void 0 : B.id) ?? "",
|
|
1349
|
-
message_id:
|
|
1369
|
+
message_id: u,
|
|
1350
1370
|
matches: v,
|
|
1351
|
-
score:
|
|
1371
|
+
score: p
|
|
1352
1372
|
});
|
|
1353
1373
|
},
|
|
1354
|
-
deleteRate(
|
|
1355
|
-
var
|
|
1374
|
+
deleteRate(u) {
|
|
1375
|
+
var p;
|
|
1356
1376
|
if (!a.chat)
|
|
1357
1377
|
throw new Error("Chat is not initialized");
|
|
1358
1378
|
return s.track("agent-rate-delete", {
|
|
1359
1379
|
type: "text",
|
|
1360
|
-
chat_id: (
|
|
1361
|
-
id:
|
|
1380
|
+
chat_id: (p = a.chat) == null ? void 0 : p.id,
|
|
1381
|
+
id: u,
|
|
1362
1382
|
mode: a.chatMode
|
|
1363
|
-
}),
|
|
1383
|
+
}), l.deleteRating(d.id, a.chat.id, u);
|
|
1364
1384
|
},
|
|
1365
|
-
async speak(
|
|
1366
|
-
var v,
|
|
1367
|
-
function
|
|
1368
|
-
if (typeof
|
|
1385
|
+
async speak(u) {
|
|
1386
|
+
var v, w, _;
|
|
1387
|
+
function p() {
|
|
1388
|
+
if (typeof u == "string") {
|
|
1369
1389
|
if (!d.presenter.voice)
|
|
1370
1390
|
throw new Error("Presenter voice is not initialized");
|
|
1371
1391
|
return {
|
|
1372
1392
|
type: "text",
|
|
1373
1393
|
provider: d.presenter.voice,
|
|
1374
|
-
input:
|
|
1394
|
+
input: u,
|
|
1375
1395
|
ssml: !1
|
|
1376
1396
|
};
|
|
1377
1397
|
}
|
|
1378
|
-
if (
|
|
1398
|
+
if (u.type === "text" && !u.provider) {
|
|
1379
1399
|
if (!d.presenter.voice)
|
|
1380
1400
|
throw new Error("Presenter voice is not initialized");
|
|
1381
1401
|
return {
|
|
1382
1402
|
type: "text",
|
|
1383
1403
|
provider: d.presenter.voice,
|
|
1384
|
-
input:
|
|
1385
|
-
ssml:
|
|
1404
|
+
input: u.input,
|
|
1405
|
+
ssml: u.ssml
|
|
1386
1406
|
};
|
|
1387
1407
|
}
|
|
1388
|
-
return
|
|
1408
|
+
return u;
|
|
1389
1409
|
}
|
|
1390
|
-
const
|
|
1391
|
-
if (s.track("agent-speak",
|
|
1410
|
+
const f = p();
|
|
1411
|
+
if (s.track("agent-speak", f), N.update(), a.messages && f.type === "text" && (a.messages.push({
|
|
1392
1412
|
id: V(),
|
|
1393
1413
|
role: "assistant",
|
|
1394
|
-
content:
|
|
1414
|
+
content: f.input,
|
|
1395
1415
|
created_at: new Date(N.get(!0)).toISOString()
|
|
1396
|
-
}), (
|
|
1416
|
+
}), (w = (v = t.callbacks).onNewMessage) == null || w.call(v, [...a.messages], "answer")), Ne(a.chatMode))
|
|
1397
1417
|
return {
|
|
1398
1418
|
duration: 0,
|
|
1399
1419
|
video_id: "",
|
|
@@ -1402,7 +1422,7 @@ async function Et(e, t) {
|
|
|
1402
1422
|
if (!a.streamingManager)
|
|
1403
1423
|
throw new Error("Please connect to the agent first");
|
|
1404
1424
|
return a.streamingManager.speak({
|
|
1405
|
-
script:
|
|
1425
|
+
script: f,
|
|
1406
1426
|
metadata: {
|
|
1407
1427
|
chat_id: (_ = a.chat) == null ? void 0 : _.id,
|
|
1408
1428
|
agent_id: d.id
|
|
@@ -1410,13 +1430,13 @@ async function Et(e, t) {
|
|
|
1410
1430
|
});
|
|
1411
1431
|
},
|
|
1412
1432
|
async interrupt({
|
|
1413
|
-
type:
|
|
1433
|
+
type: u
|
|
1414
1434
|
}) {
|
|
1415
|
-
var
|
|
1416
|
-
Ye(a.streamingManager, (
|
|
1417
|
-
const
|
|
1435
|
+
var f, D, v, w, _;
|
|
1436
|
+
Ye(a.streamingManager, (f = a.streamingManager) == null ? void 0 : f.streamType, r);
|
|
1437
|
+
const p = a.messages[a.messages.length - 1];
|
|
1418
1438
|
s.track("agent-video-interrupt", {
|
|
1419
|
-
type:
|
|
1439
|
+
type: u || "click",
|
|
1420
1440
|
stream_id: (D = a.streamingManager) == null ? void 0 : D.streamId,
|
|
1421
1441
|
agent_id: d.id,
|
|
1422
1442
|
owner_id: d.owner_id,
|
|
@@ -1424,14 +1444,14 @@ async function Et(e, t) {
|
|
|
1424
1444
|
message_duration_to_interrupt: N.get(!0),
|
|
1425
1445
|
chat_id: (v = a.chat) == null ? void 0 : v.id,
|
|
1426
1446
|
mode: a.chatMode
|
|
1427
|
-
}),
|
|
1447
|
+
}), p.interrupted = !0, (_ = (w = t.callbacks).onNewMessage) == null || _.call(w, [...a.messages], "answer"), Qe(a.streamingManager, r);
|
|
1428
1448
|
}
|
|
1429
1449
|
};
|
|
1430
1450
|
}
|
|
1431
1451
|
function Mt(e, t, n) {
|
|
1432
1452
|
const {
|
|
1433
1453
|
getById: r
|
|
1434
|
-
} =
|
|
1454
|
+
} = fe(t, n || Z);
|
|
1435
1455
|
return r(e);
|
|
1436
1456
|
}
|
|
1437
1457
|
export {
|
package/dist/index.umd.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(h,M){typeof exports=="object"&&typeof module<"u"?M(exports):typeof define=="function"&&define.amd?define(["exports"],M):(h=typeof globalThis<"u"?globalThis:h||self,M(h.index={}))})(this,function(h){"use strict";var _t=Object.defineProperty;var Mt=(h,M,x)=>M in h?_t(h,M,{enumerable:!0,configurable:!0,writable:!0,value:x}):h[M]=x;var te=(h,M,x)=>(Mt(h,typeof M!="symbol"?M+"":M,x),x);class M extends Error{constructor({kind:n,description:r,error:o}){super(JSON.stringify({kind:n,description:r}));te(this,"kind");te(this,"description");te(this,"error");this.kind=n,this.description=r,this.error=o}}class x extends M{constructor(t,n){super({kind:"ChatCreationFailed",description:`Failed to create ${n?"persistent":""} chat, mode: ${t}`})}}class ce extends M{constructor(t){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${t}`})}}class V extends M{constructor(n,r){super({kind:"ValidationError",description:n});te(this,"key");this.key=r}}class de extends M{constructor(t){super({kind:"WSError",description:t})}}var ue=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(ue||{}),le=(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))(le||{}),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||{}),E=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e.DirectPlayback="DirectPlayback",e.Off="Off",e))(E||{}),q=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(q||{}),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||{}),re=(e=>(e.Clip="clip",e.Talk="talk",e))(re||{});const pe=e=>{switch(e){case"clip":return"clip";case"talk":return"talk";default:throw new Error(`Unknown video type: ${e}`)}};var w=(e=>(e.Start="START",e.Stop="STOP",e))(w||{}),Q=(e=>(e.Strong="STRONG",e.Weak="WEAK",e.Unknown="UNKNOWN",e))(Q||{}),X=(e=>(e.Idle="IDLE",e.Talking="TALKING",e))(X||{}),A=(e=>(e.ChatAnswer="chat/answer",e.ChatPartial="chat/partial",e.StreamDone="stream/done",e.StreamStarted="stream/started",e.StreamFailed="stream/error",e.StreamReady="stream/ready",e.StreamCreated="stream/created",e.StreamInterrupt="stream/interrupt",e.StreamVideoCreated="stream-video/started",e.StreamVideoDone="stream-video/done",e.StreamVideoError="stream-video/error",e.StreamVideoRejected="stream-video/rejected",e))(A||{}),D=(e=>(e.New="new",e.Fail="fail",e.Connected="connected",e.Connecting="connecting",e.Closed="closed",e.Completed="completed",e.Disconnected="disconnected",e))(D||{}),W=(e=>(e.Legacy="legacy",e.Fluent="fluent",e))(W||{}),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 Pe=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,n=>n.toString(16).padStart(2,"0")).join("").slice(0,13)},ze=e=>[E.TextOnly,E.Playground,E.Maintenance].includes(e),Ce=e=>e&&[E.DirectPlayback,E.Off].includes(e);function Fe(e,t){let n;return{promise:new Promise((o,i)=>{n=setTimeout(()=>i(new Error(t)),e)}),clear:()=>clearTimeout(n)}}async function ne(e,t){const n={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 r;for(let o=1;o<=n.limit;o++)try{if(!n.timeout)return await e();const{promise:i,clear:c}=Fe(n.timeout,n.timeoutErrorMessage),a=e().finally(c);return await Promise.race([a,i])}catch(i){if(r=i,!n.shouldRetryFn(i)||o>=n.limit)throw i;await ke(n.delayMs),n.onRetry(i)}throw r}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 Ne=G();function Se(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()}_${Ne}`;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,n){const r=async(o,i)=>{const{skipErrorHandler:c,...a}=i||{},s=await Je(()=>fetch(t+(o!=null&&o.startsWith("/")?o:`/${o}`),{...a,headers:{...a.headers,Authorization:Se(e),"Content-Type":"application/json"}}));if(!s.ok){let u=await s.text().catch(()=>`Failed to fetch with status ${s.status}`);const d=new Error(u);throw n&&!c&&n(d,{url:o,options:a,headers:s.headers}),d}return s.json()};return{get(o,i){return r(o,{...i,method:"GET"})},post(o,i,c){return r(o,{...c,body:JSON.stringify(i),method:"POST"})},delete(o,i,c){return r(o,{...c,body:JSON.stringify(i),method:"DELETE"})},patch(o,i,c){return r(o,{...c,body:JSON.stringify(i),method:"PATCH"})}}}function Re(e,t=Z,n){const r=ae(e,`${t}/agents`,n);return{create(o,i){return r.post("/",o,i)},getAgents(o,i){return r.get(`/${o?`?tag=${o}`:""}`,i).then(c=>c??[])},getById(o,i){return r.get(`/${o}`,i)},delete(o,i){return r.delete(`/${o}`,void 0,i)},update(o,i,c){return r.patch(`/${o}`,i,c)},newChat(o,i,c){return r.post(`/${o}/chat`,i,c)},chat(o,i,c,a){return r.post(`/${o}/chat/${i}`,c,a)},createRating(o,i,c,a){return r.post(`/${o}/chat/${i}/ratings`,c,a)},updateRating(o,i,c,a,s){return r.patch(`/${o}/chat/${i}/ratings/${c}`,a,s)},deleteRating(o,i,c,a){return r.delete(`/${o}/chat/${i}/ratings/${c}`,a)},getSTTToken(o,i){return r.get(`/${o}/stt-token`,i)}}}const Ee=e=>e.type==="clip"&&e.presenter_id.startsWith("v2_")?"clip_v2":e.type;function We(e){var o,i,c,a;const t=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",n=()=>{const s=navigator.platform;return s.toLowerCase().includes("win")?"Windows":s.toLowerCase().includes("mac")?"Mac OS X":s.toLowerCase().includes("linux")?"Linux":"Unknown"},r=e.presenter;return{$os:`${n()}`,isMobile:`${t()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:Ee(r),agentVoice:{voiceId:(i=(o=e.presenter)==null?void 0:o.voice)==null?void 0:i.voice_id,provider:(a=(c=e.presenter)==null?void 0:c.voice)==null?void 0:a.type}}}function Ue(e){var n,r,o,i,c,a;const t=(n=e.llm)==null?void 0:n.prompt_customization;return{agentType:Ee(e.presenter),owner_id:e.owner_id??"",promptVersion:(r=e.llm)==null?void 0:r.prompt_version,behavior:{role:t==null?void 0:t.role,personality:t==null?void 0:t.personality,instructions:(o=e.llm)==null?void 0:o.instructions},temperature:(i=e.llm)==null?void 0:i.temperature,knowledgeSource:t==null?void 0:t.knowledge_source,starterQuestionsCount:(a=(c=e.knowledge)==null?void 0:c.starter_message)==null?void 0:a.length,topicsToAvoid:t==null?void 0:t.topics_to_avoid,maxResponseLength:t==null?void 0:t.max_response_length}}const Ke=e=>e.reduce((t,n)=>t+n,0),Ie=e=>Ke(e)/e.length;function He(e,t,n){var s,u,d;const{event:r,...o}=e,{template:i}=(t==null?void 0:t.llm)||{},{language:c}=((s=t==null?void 0:t.presenter)==null?void 0:s.voice)||{};return{...o,llm:{...o.llm,template:i},script:{...o.script,provider:{...(u=o==null?void 0:o.script)==null?void 0:u.provider,language:c}},stitch:(t==null?void 0:t.presenter.type)==="talk"?(d=t==null?void 0:t.presenter)==null?void 0:d.stitch:void 0,...n}}let ie={};const xe="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function Ve(e){const t=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk";return{token:e.token||"testKey",distinct_id:e.distinctId||De(),agentId:e.agentId,additionalProperties:{},isEnabled:e.isEnabled??!0,getRandom:G,enrich(n){this.additionalProperties={...this.additionalProperties,...n}},async track(n,r){if(!this.isEnabled)return Promise.resolve();const{audioPath:o,...i}=r||{},c={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:n,properties:{...this.additionalProperties,...i,agentId:this.agentId,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(xe,c).then(a=>a.json())}catch(a){return console.error(a)}},linkTrack(n,r,o,i){ie[n]||(ie[n]={events:{},resolvedDependencies:[]}),i.includes(o)||i.push(o);const c=ie[n];if(c.events[o]={props:r},c.resolvedDependencies.push(o),i.every(s=>c.resolvedDependencies.includes(s))){const s=i.reduce((u,d)=>c.events[d]?{...u,...c.events[d].props}:u,{});this.track(n,s),c.resolvedDependencies=c.resolvedDependencies.filter(u=>!i.includes(u)),i.forEach(u=>{delete c.events[u]})}}}}function _e(){let e=0;return{reset:()=>e=0,update:()=>e=Date.now(),get:(t=!1)=>t?Date.now()-e:e}}const $=_e(),se=_e();function Me(e){return e===E.Playground?{headers:{[$e]:"true"}}:{}}async function Te(e,t,n,r,o=!1,i){try{return!i&&!Ce(r)&&(i=await t.newChat(e.id,{persist:o},Me(r)),n.track("agent-chat",{event:"created",chat_id:i.id,agent_id:e.id,mode:r})),{chat:i,chatMode:(i==null?void 0:i.chat_mode)??r}}catch(c){try{const a=JSON.parse(c.message);if((a==null?void 0:a.kind)==="InsufficientCreditsError")throw new Error("InsufficientCreditsError")}catch(a){console.error("Error parsing the error message:",a)}throw new Error("Cannot create new chat")}}function qe(e){return e&&e.length>0?e:[]}function Xe(e,t,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!==W.Fluent)throw new Error("Interrupt only available for Fluent streams");if(!n)throw new Error("No active video to interrupt")}async function Ye(e,t){const n={type:A.StreamInterrupt,videoId:t,timestamp:Date.now()};e.sendDataChannelMessage(JSON.stringify(n))}function Oe(e){return new Promise((t,n)=>{const{callbacks:r,host:o,auth:i}=e,{onMessage:c=null,onOpen:a=null,onClose:s=null,onError:u=null}=r||{},d=new WebSocket(`${o}?authorization=${Se(i)}`);d.onmessage=c,d.onclose=s,d.onerror=v=>{console.error(v),u==null||u("Websocket failed to connect",v),n(v)},d.onopen=v=>{a==null||a(v),t(d)}})}async function Qe(e){const{retries:t=1}=e;let n=null;for(let r=0;(n==null?void 0:n.readyState)!==WebSocket.OPEN;r++)try{n=await Oe(e)}catch(o){if(r===t)throw o;await ke(r*500)}return n}async function Ge(e,t,n){const r=n!=null&&n.onMessage?[n.onMessage]:[],o=await Qe({auth:e,host:t,callbacks:{onError:i=>{var c;return(c=n.onError)==null?void 0:c.call(n,new de(i))},onMessage(i){const c=JSON.parse(i.data);r.forEach(a=>a(c.event,c))}}});return{socket:o,disconnect:()=>o.close(),subscribeToEvents:i=>r.push(i)}}function Ze(e){if(e.answer!==void 0)return e.answer;let t=0,n="";for(;t in e;)n+=e[t++];return n}function et(e,t,n,r,o){const i=r.messages[r.messages.length-1];if(!(e===q.Partial||e===q.Answer)||(i==null?void 0:i.role)!=="assistant")return;const{content:c,sequence:a}=t;e===q.Partial?n[a]=c:n.answer=c;const s=Ze(n);(i.content!==s||e===q.Answer)&&(i.content=s,o==null||o([...r.messages],e))}function tt(e,t,n,r,o){let i={};return{clearQueue:()=>i={},onMessage:(c,a)=>{var s,u;if("content"in a)et(c,a,i,t,n.callbacks.onNewMessage),c===q.Answer&&e.track("agent-message-received",{messages:t.messages.length,mode:t.chatMode});else{const d=A,v=[d.StreamVideoDone,d.StreamVideoError,d.StreamVideoRejected],B=[d.StreamFailed,d.StreamVideoError,d.StreamVideoRejected],L=He(a,r,{mode:t.chatMode});if(c=c,c===d.StreamVideoCreated)e.linkTrack("agent-video",L,d.StreamVideoCreated,["start"]);else if(v.includes(c)){const U=c.split("/")[1];B.includes(c)?e.track("agent-video",{...L,event:U}):e.linkTrack("agent-video",{...L,event:U},c,["done"])}B.includes(c)&&((u=(s=n.callbacks).onError)==null||u.call(s,new Error(`Stream failed with event ${c}`),{data:a})),a.event===d.StreamDone&&o()}}}}function rt(e,t,n,r){const o=ae(e,`${t}/agents/${n}`,r);return{createStream(i){return o.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,c,a){return o.post(`/streams/${i}/sdp`,{session_id:a,answer:c})},addIceCandidate(i,c,a){return o.post(`/streams/${i}/ice`,{session_id:a,...c})},sendStreamRequest(i,c,a){return o.post(`/streams/${i}`,{session_id:c,...a})},close(i,c){return o.delete(`/streams/${i}`,{session_id:c})}}}function nt(e,t,n,r){const o=ae(e,`${t}/agents/${n}`,r);return{createStream(i,c){return o.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},c)},startConnection(i,c,a,s){return o.post(`/streams/${i}/sdp`,{session_id:a,answer:c},s)},addIceCandidate(i,c,a,s){return o.post(`/streams/${i}/ice`,{session_id:a,...c},s)},sendStreamRequest(i,c,a,s){return o.post(`/streams/${i}`,{session_id:c,...a},s)},close(i,c,a){return o.delete(`/streams/${i}`,{session_id:c},a)}}}function at(e,t,n){const r=(t.timestamp-e.timestamp)/1e3;return{duration:r,bytesReceived:t.bytesReceived-e.bytesReceived,bitrate:Math.round((t.bytesReceived-e.bytesReceived)*8/r),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)/r,framesPerSecond:t.framesPerSecond,freezeCount:t.freezeCount-e.freezeCount,freezeDuration:t.freezeDuration-e.freezeDuration,lowFpsCount:n}}function it(e){return e.filter(t=>t.freezeCount>0||t.framesPerSecond<21||t.framesDropped>0||t.packetsLost>0).map(t=>{const{timestamp:n,...r}=t,o=[];return t.freezeCount>0&&o.push("freeze"),t.framesPerSecond<21&&o.push("low fps"),t.framesDropped>0&&o.push("frames dropped"),t.packetsLost>0&&o.push("packet loss"),{...r,causes:o}})}function st(e){let t="",n=0;for(const r of e.values())if(r&&r.type==="codec"&&r.mimeType.startsWith("video")&&(t=r.mimeType.split("/")[1]),r&&r.type==="candidate-pair"&&(n=r.currentRoundTripTime),r&&r.type==="inbound-rtp"&&r.kind==="video")return{codec:t,rtt:n,timestamp:r.timestamp,bytesReceived:r.bytesReceived,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,frameWidth:r.frameWidth,frameHeight:r.frameHeight,framesPerSecond:r.framesPerSecond,freezeCount:r.freezeCount,freezeDuration:r.totalFreezesDuration};return{}}function ot(e,t,n){const r=e.map((s,u)=>u===0?n?{timestamp:s.timestamp,duration:0,rtt:s.rtt,bytesReceived:s.bytesReceived-n.bytesReceived,bitrate:(s.bytesReceived-n.bytesReceived)*8/(t/1e3),packetsReceived:s.packetsReceived-n.packetsReceived,packetsLost:s.packetsLost-n.packetsLost,framesDropped:s.framesDropped-n.framesDropped,framesDecoded:s.framesDecoded-n.framesDecoded,jitter:s.jitter,jitterBufferDelay:s.jitterBufferDelay-n.jitterBufferDelay,jitterBufferEmittedCount:s.jitterBufferEmittedCount-n.jitterBufferEmittedCount,avgJitterDelayInInterval:(s.jitterBufferDelay-n.jitterBufferDelay)/(s.jitterBufferEmittedCount-n.jitterBufferEmittedCount),framesPerSecond:s.framesPerSecond,freezeCount:s.freezeCount-n.freezeCount,freezeDuration:s.freezeDuration-n.freezeDuration}:{timestamp:s.timestamp,rtt:s.rtt,duration:0,bytesReceived:s.bytesReceived,bitrate:s.bytesReceived*8/(t/1e3),packetsReceived:s.packetsReceived,packetsLost:s.packetsLost,framesDropped:s.framesDropped,framesDecoded:s.framesDecoded,jitter:s.jitter,jitterBufferDelay:s.jitterBufferDelay,jitterBufferEmittedCount:s.jitterBufferEmittedCount,avgJitterDelayInInterval:s.jitterBufferDelay/s.jitterBufferEmittedCount,framesPerSecond:s.framesPerSecond,freezeCount:s.freezeCount,freezeDuration:s.freezeDuration}:{timestamp:s.timestamp,duration:t*u/1e3,rtt:s.rtt,bytesReceived:s.bytesReceived-e[u-1].bytesReceived,bitrate:(s.bytesReceived-e[u-1].bytesReceived)*8/(t/1e3),packetsReceived:s.packetsReceived-e[u-1].packetsReceived,packetsLost:s.packetsLost-e[u-1].packetsLost,framesDropped:s.framesDropped-e[u-1].framesDropped,framesDecoded:s.framesDecoded-e[u-1].framesDecoded,jitter:s.jitter,jitterBufferDelay:s.jitterBufferDelay-e[u-1].jitterBufferDelay,jitterBufferEmittedCount:s.jitterBufferEmittedCount-e[u-1].jitterBufferEmittedCount,avgJitterDelayInInterval:(s.jitterBufferDelay-e[u-1].jitterBufferDelay)/(s.jitterBufferEmittedCount-e[u-1].jitterBufferEmittedCount),framesPerSecond:s.framesPerSecond,freezeCount:s.freezeCount-e[u-1].freezeCount,freezeDuration:s.freezeDuration-e[u-1].freezeDuration}),o=it(r),i=o.reduce((s,u)=>s+(u.causes.includes("low fps")?1:0),0),c=r.filter(s=>!!s.avgJitterDelayInInterval).map(s=>s.avgJitterDelayInInterval),a=r.filter(s=>!!s.rtt).map(s=>s.rtt);return{webRTCStats:{anomalies:o,minRtt:Math.min(...a),avgRtt:Ie(a),maxRtt:Math.max(...a),aggregateReport:at(e[0],e[e.length-1],i),minJitterDelayInInterval:Math.min(...c),maxJitterDelayInInterval:Math.max(...c),avgJitterDelayInInterval:Ie(c)},codec:e[0].codec,resolution:`${e[0].frameWidth}x${e[0].frameHeight}`}}const oe=100,ct=Math.max(Math.ceil(400/oe),1),dt=.25,ut=.28;function lt(){let e=0,t,n,r=0;return o=>{for(const i of o.values())if(i&&i.type==="inbound-rtp"&&i.kind==="video"){const c=i.jitterBufferDelay,a=i.jitterBufferEmittedCount;if(n&&a>n){const d=c-t,v=a-n;r=d/v}t=c,n=a;const s=i.framesDecoded,u=s-e>0;return e=s,{isReceiving:u,avgJitterDelayInInterval:r,freezeCount:i.freezeCount}}return{isReceiving:!1,avgJitterDelayInInterval:r}}}function ft(e,t,n,r,o,i=!1){let c=[],a,s=0,u=!1,d=Q.Unknown,v=Q.Unknown,B=0,L=0;const U=lt();return setInterval(async()=>{const K=await e.getStats(),{isReceiving:I,avgJitterDelayInInterval:Y,freezeCount:O}=U(K),b=st(K);if(I)s=0,B=O-L,v=Y<dt?Q.Strong:Y>ut&&B>1?Q.Weak:d,v!==d&&(o==null||o(v),d=v,L+=B,B=0),u||(r==null||r(w.Start),a=c[c.length-1],c=[],u=!0),c.push(b);else if(u&&(s++,s>=ct)){const l=ot(c,oe,a);r==null||r(w.Stop,l),t()||n(),L=O,u=!1}},oe)}let je=!1;const P=(e,t)=>je&&console.log(e,t),mt=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function Ae(e){switch(e){case"connected":return D.Connected;case"checking":return D.Connecting;case"failed":return D.Fail;case"new":return D.New;case"closed":return D.Closed;case"disconnected":return D.Disconnected;case"completed":return D.Completed;default:return D.New}}function gt(e){const[t,n=""]=e.split(/:(.+)/);try{const r=JSON.parse(n);return P("parsed data channel message",{subject:t,data:r}),{subject:t,data:r}}catch(r){return P("Failed to parse data channel message, returning data as string",{subject:t,rawData:n,error:r}),{subject:t,data:n}}}function ht({statsSignal:e,dataChannelSignal:t,onVideoStateChange:n,report:r}){e===w.Start&&t===w.Start?n==null||n(w.Start):e===w.Stop&&t===w.Stop&&(n==null||n(w.Stop,r))}function wt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:n,onAgentActivityStateChange:r,report:o}){e===w.Start?n==null||n(w.Start):e===w.Stop&&(n==null||n(w.Stop,o)),t===w.Start?r==null||r(X.Talking):t===w.Stop&&(r==null||r(X.Idle))}function be({statsSignal:e,dataChannelSignal:t,onVideoStateChange:n,onAgentActivityStateChange:r,streamType:o,report:i}){o===W.Legacy?ht({statsSignal:e,dataChannelSignal:t,onVideoStateChange:n,report:i}):o===W.Fluent&&wt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:n,onAgentActivityStateChange:r,report:i})}async function pt(e,t,{debug:n=!1,callbacks:r,auth:o,baseURL:i=Z,analytics:c}){var H;je=n;let a=!1,s=!1,u=w.Stop,d=w.Stop;const{startConnection:v,sendStreamRequest:B,close:L,createStream:U,addIceCandidate:K}=t.videoType===re.Clip?rt(o,i,e,r.onError):nt(o,i,e,r.onError),{id:I,offer:Y,ice_servers:O,session_id:b,fluent:l,interrupt_enabled:p}=await U(t);(H=r.onStreamCreated)==null||H.call(r,{stream_id:I,session_id:b,agent_id:e});const m=new mt({iceServers:O}),S=m.createDataChannel("JanusDataChannel");if(!b)throw new Error("Could not create session_id");const k=l?W.Fluent:W.Legacy;c.enrich({"stream-type":k});const y=t.stream_warmup&&!l,T=()=>a,z=()=>{var f;a=!0,s&&((f=r.onConnectionStateChange)==null||f.call(r,D.Connected))},F=ft(m,T,z,(f,g)=>be({statsSignal:d=f,dataChannelSignal:k===W.Legacy?u:void 0,onVideoStateChange:r.onVideoStateChange,onAgentActivityStateChange:r.onAgentActivityStateChange,report:g,streamType:k}),f=>{var g;return(g=r.onConnectivityStateChange)==null?void 0:g.call(r,f)},y);m.onicecandidate=f=>{var g;P("peerConnection.onicecandidate",f);try{f.candidate&&f.candidate.sdpMid&&f.candidate.sdpMLineIndex!==null?K(I,{candidate:f.candidate.candidate,sdpMid:f.candidate.sdpMid,sdpMLineIndex:f.candidate.sdpMLineIndex},b):K(I,{candidate:null},b)}catch(_){(g=r.onError)==null||g.call(r,_,{streamId:I})}},S.onopen=()=>{s=!0,(!y||a)&&z()};const C=f=>{var g;(g=r.onVideoIdChange)==null||g.call(r,f)};function j(f,g){if(f===A.StreamStarted&&typeof g=="object"&&"metadata"in g){const _=g.metadata;C(_.videoId)}f===A.StreamDone&&C(null),u=f===A.StreamStarted?w.Start:w.Stop,be({statsSignal:k===W.Legacy?d:void 0,dataChannelSignal:u,onVideoStateChange:r.onVideoStateChange,onAgentActivityStateChange:r.onAgentActivityStateChange,streamType:k})}function R(f,g){const _=typeof g=="string"?g:g==null?void 0:g.metadata;_&&c.enrich({streamMetadata:_}),c.track("agent-chat",{event:"ready"})}const N={[A.StreamStarted]:j,[A.StreamDone]:j,[A.StreamReady]:R};S.onmessage=f=>{var ee;const{subject:g,data:_}=gt(f.data);(ee=N[g])==null||ee.call(N,g,_)},m.oniceconnectionstatechange=()=>{var g;P("peerConnection.oniceconnectionstatechange => "+m.iceConnectionState);const f=Ae(m.iceConnectionState);f!==D.Connected&&((g=r.onConnectionStateChange)==null||g.call(r,f))},m.ontrack=f=>{var g;P("peerConnection.ontrack",f),(g=r.onSrcObjectReady)==null||g.call(r,f.streams[0])},await m.setRemoteDescription(Y),P("set remote description OK");const J=await m.createAnswer();return P("create answer OK"),await m.setLocalDescription(J),P("set local description OK"),await v(I,J,b),P("start connection OK"),{speak(f){return B(I,b,f)},async disconnect(){var f;if(I){const g=Ae(m.iceConnectionState);if(m){if(g===D.New){clearInterval(F);return}m.close(),m.oniceconnectionstatechange=null,m.onnegotiationneeded=null,m.onicecandidate=null,m.ontrack=null}try{g===D.Connected&&await L(I,b).catch(_=>{})}catch(_){P("Error on close stream connection",_)}(f=r.onAgentActivityStateChange)==null||f.call(r,X.Idle),clearInterval(F)}},sendDataChannelMessage(f){var g,_;if(!a||S.readyState!=="open"){P("Data channel is not ready for sending messages"),(g=r.onError)==null||g.call(r,new Error("Data channel is not ready for sending messages"),{streamId:I});return}try{S.send(f)}catch(ee){P("Error sending data channel message",ee),(_=r.onError)==null||_.call(r,ee,{streamId:I})}},sessionId:b,streamId:I,streamType:k,interruptAvailable:p}}function yt(e,t){const{streamOptions:n}=t??{};return{videoType:pe(e.presenter.type),output_resolution:n==null?void 0:n.outputResolution,session_timeout:n==null?void 0:n.sessionTimeout,stream_warmup:n==null?void 0:n.streamWarmup,compatibility_mode:n==null?void 0:n.compatibilityMode,fluent:n==null?void 0:n.fluent}}function vt(e,t,n,r,o){o===W.Fluent?kt(e,t,n,r,o):Dt(e,t,n,r,o)}function kt(e,t,n,r,o){e===w.Start?r.track("stream-session",{event:"start","stream-type":o}):e===w.Stop&&r.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":o,...n})}function Ct(e,t,n,r){$.get()<=0||(e===w.Start?n.linkTrack("agent-video",{event:"start",latency:$.get(!0),"stream-type":r},"start",[A.StreamVideoCreated]):e===w.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":r},"done",[A.StreamVideoDone]))}function Dt(e,t,n,r,o){$.get()<=0||(e===w.Start?r.linkTrack("agent-video",{event:"start",latency:$.get(!0),"stream-type":o},"start",[A.StreamVideoCreated]):e===w.Stop&&r.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":o,...n},"done",[A.StreamVideoDone]))}function St(e,t,n){return $.reset(),new Promise(async(r,o)=>{try{const i=await pt(e.id,yt(e,t),{...t,analytics:n,callbacks:{...t.callbacks,onConnectionStateChange:c=>{var a,s;(s=(a=t.callbacks).onConnectionStateChange)==null||s.call(a,c),c===D.Connected&&r(i)},onVideoStateChange:(c,a)=>{var s,u;(u=(s=t.callbacks).onVideoStateChange)==null||u.call(s,c),vt(c,e,a,n,i.streamType)},onAgentActivityStateChange:c=>{var a,s;(s=(a=t.callbacks).onAgentActivityStateChange)==null||s.call(a,c),c===X.Talking?se.update():se.reset(),Ct(c===X.Talking?w.Start:w.Stop,e,n,i.streamType)}}})}catch(i){o(i)}})}async function Rt(e,t,n,r,o){var s,u,d,v;const{chat:i,chatMode:c}=await Te(e,n,r,t.mode,t.persistentChat,o);if(c&&c!==t.mode&&(t.mode=c,(u=(s=t.callbacks).onModeChange)==null||u.call(s,c),c===E.TextOnly))return(v=(d=t.callbacks).onError)==null||v.call(d,new ce(c)),{chat:i};const a=await St(e,t,r);return{chat:i,streamingManager:a}}async function Et(e,t){var Y,O,b;let n=!0,r=null;const o=t.mixpanelKey||Le,i=t.wsURL||Be,c=t.baseURL||Z,a={messages:[],chatMode:t.mode||E.Functional},s=Ve({token:o,agentId:e,isEnabled:t.enableAnalitics,distinctId:t.distinctId});s.track("agent-sdk",{event:"init"});const u=Re(t.auth,c,t.callbacks.onError),d=await u.getById(e);s.enrich(Ue(d));const{onMessage:v,clearQueue:B}=tt(s,a,t,d,()=>{var l;return(l=a.socketManager)==null?void 0:l.disconnect()});a.messages=qe(t.initialMessages),(O=(Y=t.callbacks).onNewMessage)==null||O.call(Y,[...a.messages],"answer");const L=l=>{r=l};s.track("agent-sdk",{event:"loaded",...We(d)});async function U(l){var T,z,F,C,j,R,N;(z=(T=t.callbacks).onConnectionStateChange)==null||z.call(T,D.Connecting),$.reset(),l&&!n&&(delete a.chat,(C=(F=t.callbacks).onNewMessage)==null||C.call(F,[...a.messages],"answer"));const p=t.mode===E.DirectPlayback?Promise.resolve(void 0):Ge(t.auth,i,{onMessage:v,onError:t.callbacks.onError}),m=ne(()=>Rt(d,{...t,callbacks:{...t.callbacks,onVideoIdChange:L}},u,s,a.chat),{limit:3,timeout:Pe,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:J=>(J==null?void 0:J.message)!=="Could not connect"&&J.status!==429,delayMs:1e3}).catch(J=>{var H,f;throw I(E.Maintenance),(f=(H=t.callbacks).onConnectionStateChange)==null||f.call(H,D.Fail),J}),[S,{streamingManager:k,chat:y}]=await Promise.all([p,m]);y&&y.id!==((j=a.chat)==null?void 0:j.id)&&((N=(R=t.callbacks).onNewChat)==null||N.call(R,y.id)),a.streamingManager=k,a.socketManager=S,a.chat=y,n=!1,I((y==null?void 0:y.chat_mode)??t.mode??E.Functional)}async function K(){var l,p,m,S;(l=a.socketManager)==null||l.disconnect(),await((p=a.streamingManager)==null?void 0:p.disconnect()),delete a.streamingManager,delete a.socketManager,(S=(m=t.callbacks).onConnectionStateChange)==null||S.call(m,D.Disconnected)}async function I(l){var p,m;l!==a.chatMode&&(s.track("agent-mode-change",{mode:l}),a.chatMode=l,a.chatMode!==E.Functional&&await K(),(m=(p=t.callbacks).onModeChange)==null||m.call(p,l))}return{agent:d,getStreamType:()=>{var l;return(l=a.streamingManager)==null?void 0:l.streamType},getIsInterruptAvailable:()=>{var l;return((l=a.streamingManager)==null?void 0:l.interruptAvailable)??!1},starterMessages:((b=d.knowledge)==null?void 0:b.starter_message)||[],getSTTToken:()=>u.getSTTToken(d.id),changeMode:I,enrichAnalytics:s.enrich,async connect(){var l;await U(!0),s.track("agent-chat",{event:"connect",chatId:(l=a.chat)==null?void 0:l.id,agentId:d.id,mode:a.chatMode})},async reconnect(){var l;await K(),await U(!1),s.track("agent-chat",{event:"reconnect",chatId:(l=a.chat)==null?void 0:l.id,agentId:d.id,mode:a.chatMode})},async disconnect(){var l;await K(),s.track("agent-chat",{event:"disconnect",chatId:(l=a.chat)==null?void 0:l.id,agentId:d.id,mode:a.chatMode})},async chat(l){var k,y,T,z,F;const p=()=>{if(Ce(t.mode))throw new V(`${t.mode} is enabled, chat is disabled`);if(l.length>=800)throw new V("Message cannot be more than 800 characters");if(l.length===0)throw new V("Message cannot be empty");if(a.chatMode===E.Maintenance)throw new V("Chat is in maintenance mode");if(![E.TextOnly,E.Playground].includes(a.chatMode)){if(!a.streamingManager)throw new V("Streaming manager is not initialized");if(!a.chat)throw new V("Chat is not initialized")}},m=async()=>{var C,j;if(!a.chat){const R=await Te(d,u,s,a.chatMode,t.persistentChat);if(!R.chat)throw new x(a.chatMode,!!t.persistentChat);a.chat=R.chat,(j=(C=t.callbacks).onNewChat)==null||j.call(C,a.chat.id)}return a.chat.id},S=async(C,j)=>ne(()=>{var R,N;return u.chat(d.id,j,{chatMode:a.chatMode,streamId:(R=a.streamingManager)==null?void 0:R.streamId,sessionId:(N=a.streamingManager)==null?void 0:N.sessionId,messages:C.map(({matches:J,...H})=>H)},{...Me(a.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:R=>{var H,f,g,_;const N=(H=R==null?void 0:R.message)==null?void 0:H.includes("missing or invalid session_id");return!((f=R==null?void 0:R.message)==null?void 0:f.includes("Stream Error"))&&!N?((_=(g=t.callbacks).onError)==null||_.call(g,R),!1):!0},onRetry:async()=>{await K(),await U(!1)}});try{B(),p(),a.messages.push({id:G(),role:"user",content:l,created_at:new Date($.update()).toISOString()}),(y=(k=t.callbacks).onNewMessage)==null||y.call(k,[...a.messages],"user");const C=await m(),j=await S([...a.messages],C);return a.messages.push({id:G(),role:"assistant",content:j.result||"",created_at:new Date().toISOString(),context:j.context,matches:j.matches}),s.track("agent-message-send",{event:"success",mode:a.chatMode,messages:a.messages.length+1}),j.result&&((z=(T=t.callbacks).onNewMessage)==null||z.call(T,[...a.messages],"answer"),s.track("agent-message-received",{latency:$.get(!0),mode:a.chatMode,messages:a.messages.length})),j}catch(C){throw((F=a.messages[a.messages.length-1])==null?void 0:F.role)==="assistant"&&a.messages.pop(),s.track("agent-message-send",{event:"error",mode:a.chatMode,messages:a.messages.length}),C}},rate(l,p,m){var y,T,z,F;const S=a.messages.find(C=>C.id===l);if(a.chat){if(!S)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const k=((y=S.matches)==null?void 0:y.map(C=>[C.document_id,C.id]))??[];return s.track("agent-rate",{event:m?"update":"create",thumb:p===1?"up":"down",knowledge_id:((T=d.knowledge)==null?void 0:T.id)??"",mode:a.chatMode,matches:k,score:p}),m?u.updateRating(d.id,a.chat.id,m,{knowledge_id:((z=d.knowledge)==null?void 0:z.id)??"",message_id:l,matches:k,score:p}):u.createRating(d.id,a.chat.id,{knowledge_id:((F=d.knowledge)==null?void 0:F.id)??"",message_id:l,matches:k,score:p})},deleteRate(l){var p;if(!a.chat)throw new Error("Chat is not initialized");return s.track("agent-rate-delete",{type:"text",chat_id:(p=a.chat)==null?void 0:p.id,id:l,mode:a.chatMode}),u.deleteRating(d.id,a.chat.id,l)},async speak(l){var k,y,T;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 m=p();if(s.track("agent-speak",m),$.update(),a.messages&&m.type==="text"&&(a.messages.push({id:G(),role:"assistant",content:m.input,created_at:new Date($.get(!0)).toISOString()}),(y=(k=t.callbacks).onNewMessage)==null||y.call(k,[...a.messages],"answer")),ze(a.chatMode))return{duration:0,video_id:"",status:"success"};if(!a.streamingManager)throw new Error("Please connect to the agent first");return a.streamingManager.speak({script:m,metadata:{chat_id:(T=a.chat)==null?void 0:T.id,agent_id:d.id}})},async interrupt({type:l}){var m,S,k,y,T;Xe(a.streamingManager,(m=a.streamingManager)==null?void 0:m.streamType,r);const p=a.messages[a.messages.length-1];s.track("agent-video-interrupt",{type:l||"click",stream_id:(S=a.streamingManager)==null?void 0:S.streamId,agent_id:d.id,owner_id:d.owner_id,video_duration_to_interrupt:se.get(!0),message_duration_to_interrupt:$.get(!0),chat_id:(k=a.chat)==null?void 0:k.id,mode:a.chatMode}),p.interrupted=!0,(T=(y=t.callbacks).onNewMessage)==null||T.call(y,[...a.messages],"answer"),Ye(a.streamingManager,r)}}}function It(e,t,n){const{getById:r}=Re(t,n||Z);return r(e)}h.AgentActivityState=X,h.AgentStatus=fe,h.ChatCreationFailed=x,h.ChatMode=E,h.ChatModeDowngraded=ce,h.ChatProgress=q,h.ConnectionState=D,h.ConnectivityState=Q,h.DocumentType=we,h.KnowledgeType=he,h.PlanGroup=le,h.Providers=ye,h.RateState=me,h.StreamEvents=A,h.StreamType=W,h.StreamingState=w,h.Subject=ge,h.UserPlan=ue,h.ValidationError=V,h.VideoType=re,h.VoiceAccess=ve,h.WsError=de,h.createAgentManager=Et,h.getAgent=It,h.mapVideoType=pe,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(h,M){typeof exports=="object"&&typeof module<"u"?M(exports):typeof define=="function"&&define.amd?define(["exports"],M):(h=typeof globalThis<"u"?globalThis:h||self,M(h.index={}))})(this,function(h){"use strict";var Et=Object.defineProperty;var Mt=(h,M,x)=>M in h?Et(h,M,{enumerable:!0,configurable:!0,writable:!0,value:x}):h[M]=x;var te=(h,M,x)=>(Mt(h,typeof M!="symbol"?M+"":M,x),x);class M extends Error{constructor({kind:n,description:r,error:o}){super(JSON.stringify({kind:n,description:r}));te(this,"kind");te(this,"description");te(this,"error");this.kind=n,this.description=r,this.error=o}}class x extends M{constructor(t,n){super({kind:"ChatCreationFailed",description:`Failed to create ${n?"persistent":""} chat, mode: ${t}`})}}class ce extends M{constructor(t){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${t}`})}}class V extends M{constructor(n,r){super({kind:"ValidationError",description:n});te(this,"key");this.key=r}}class de extends M{constructor(t){super({kind:"WSError",description:t})}}var ue=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(ue||{}),le=(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))(le||{}),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||{}),I=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e.DirectPlayback="DirectPlayback",e.Off="Off",e))(I||{}),q=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(q||{}),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||{}),re=(e=>(e.Clip="clip",e.Talk="talk",e))(re||{});const pe=e=>{switch(e){case"clip":return"clip";case"talk":return"talk";default:throw new Error(`Unknown video type: ${e}`)}};var w=(e=>(e.Start="START",e.Stop="STOP",e))(w||{}),Q=(e=>(e.Strong="STRONG",e.Weak="WEAK",e.Unknown="UNKNOWN",e))(Q||{}),X=(e=>(e.Idle="IDLE",e.Talking="TALKING",e))(X||{}),b=(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))(b||{}),D=(e=>(e.New="new",e.Fail="fail",e.Connected="connected",e.Connecting="connecting",e.Closed="closed",e.Completed="completed",e.Disconnected="disconnected",e))(D||{}),W=(e=>(e.Legacy="legacy",e.Fluent="fluent",e))(W||{}),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 Pe=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,n=>n.toString(16).padStart(2,"0")).join("").slice(0,13)},ze=e=>[I.TextOnly,I.Playground,I.Maintenance].includes(e),Ce=e=>e&&[I.DirectPlayback,I.Off].includes(e);function Fe(e,t){let n;return{promise:new Promise((o,i)=>{n=setTimeout(()=>i(new Error(t)),e)}),clear:()=>clearTimeout(n)}}async function ne(e,t){const n={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 r;for(let o=1;o<=n.limit;o++)try{if(!n.timeout)return await e();const{promise:i,clear:c}=Fe(n.timeout,n.timeoutErrorMessage),a=e().finally(c);return await Promise.race([a,i])}catch(i){if(r=i,!n.shouldRetryFn(i)||o>=n.limit)throw i;await ke(n.delayMs),n.onRetry(i)}throw r}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 Ne=G();function Se(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()}_${Ne}`;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,n){const r=async(o,i)=>{const{skipErrorHandler:c,...a}=i||{},s=await Je(()=>fetch(t+(o!=null&&o.startsWith("/")?o:`/${o}`),{...a,headers:{...a.headers,Authorization:Se(e),"Content-Type":"application/json"}}));if(!s.ok){let u=await s.text().catch(()=>`Failed to fetch with status ${s.status}`);const d=new Error(u);throw n&&!c&&n(d,{url:o,options:a,headers:s.headers}),d}return s.json()};return{get(o,i){return r(o,{...i,method:"GET"})},post(o,i,c){return r(o,{...c,body:JSON.stringify(i),method:"POST"})},delete(o,i,c){return r(o,{...c,body:JSON.stringify(i),method:"DELETE"})},patch(o,i,c){return r(o,{...c,body:JSON.stringify(i),method:"PATCH"})}}}function Re(e,t=Z,n){const r=ae(e,`${t}/agents`,n);return{create(o,i){return r.post("/",o,i)},getAgents(o,i){return r.get(`/${o?`?tag=${o}`:""}`,i).then(c=>c??[])},getById(o,i){return r.get(`/${o}`,i)},delete(o,i){return r.delete(`/${o}`,void 0,i)},update(o,i,c){return r.patch(`/${o}`,i,c)},newChat(o,i,c){return r.post(`/${o}/chat`,i,c)},chat(o,i,c,a){return r.post(`/${o}/chat/${i}`,c,a)},createRating(o,i,c,a){return r.post(`/${o}/chat/${i}/ratings`,c,a)},updateRating(o,i,c,a,s){return r.patch(`/${o}/chat/${i}/ratings/${c}`,a,s)},deleteRating(o,i,c,a){return r.delete(`/${o}/chat/${i}/ratings/${c}`,a)},getSTTToken(o,i){return r.get(`/${o}/stt-token`,i)}}}const Ie=e=>e.type==="clip"&&e.presenter_id.startsWith("v2_")?"clip_v2":e.type;function We(e){var o,i,c,a;const t=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",n=()=>{const s=navigator.platform;return s.toLowerCase().includes("win")?"Windows":s.toLowerCase().includes("mac")?"Mac OS X":s.toLowerCase().includes("linux")?"Linux":"Unknown"},r=e.presenter;return{$os:`${n()}`,isMobile:`${t()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:Ie(r),agentVoice:{voiceId:(i=(o=e.presenter)==null?void 0:o.voice)==null?void 0:i.voice_id,provider:(a=(c=e.presenter)==null?void 0:c.voice)==null?void 0:a.type}}}function Ue(e){var n,r,o,i,c,a;const t=(n=e.llm)==null?void 0:n.prompt_customization;return{agentType:Ie(e.presenter),owner_id:e.owner_id??"",promptVersion:(r=e.llm)==null?void 0:r.prompt_version,behavior:{role:t==null?void 0:t.role,personality:t==null?void 0:t.personality,instructions:(o=e.llm)==null?void 0:o.instructions},temperature:(i=e.llm)==null?void 0:i.temperature,knowledgeSource:t==null?void 0:t.knowledge_source,starterQuestionsCount:(a=(c=e.knowledge)==null?void 0:c.starter_message)==null?void 0:a.length,topicsToAvoid:t==null?void 0:t.topics_to_avoid,maxResponseLength:t==null?void 0:t.max_response_length}}const Ke=e=>e.reduce((t,n)=>t+n,0),_e=e=>Ke(e)/e.length;function He(e,t,n){var s,u,d;const{event:r,...o}=e,{template:i}=(t==null?void 0:t.llm)||{},{language:c}=((s=t==null?void 0:t.presenter)==null?void 0:s.voice)||{};return{...o,llm:{...o.llm,template:i},script:{...o.script,provider:{...(u=o==null?void 0:o.script)==null?void 0:u.provider,language:c}},stitch:(t==null?void 0:t.presenter.type)==="talk"?(d=t==null?void 0:t.presenter)==null?void 0:d.stitch:void 0,...n}}let ie={};const xe="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function Ve(e){const t=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk";return{token:e.token||"testKey",distinct_id:e.distinctId||De(),agentId:e.agentId,additionalProperties:{},isEnabled:e.isEnabled??!0,getRandom:G,enrich(n){this.additionalProperties={...this.additionalProperties,...n}},async track(n,r){if(!this.isEnabled)return Promise.resolve();const{audioPath:o,...i}=r||{},c={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:n,properties:{...this.additionalProperties,...i,agentId:this.agentId,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(xe,c).then(a=>a.json())}catch(a){return console.error(a)}},linkTrack(n,r,o,i){ie[n]||(ie[n]={events:{},resolvedDependencies:[]}),i.includes(o)||i.push(o);const c=ie[n];if(c.events[o]={props:r},c.resolvedDependencies.push(o),i.every(s=>c.resolvedDependencies.includes(s))){const s=i.reduce((u,d)=>c.events[d]?{...u,...c.events[d].props}:u,{});this.track(n,s),c.resolvedDependencies=c.resolvedDependencies.filter(u=>!i.includes(u)),i.forEach(u=>{delete c.events[u]})}}}}function Ee(){let e=0;return{reset:()=>e=0,update:()=>e=Date.now(),get:(t=!1)=>t?Date.now()-e:e}}const $=Ee(),se=Ee();function Me(e){return e===I.Playground?{headers:{[$e]:"true"}}:{}}async function Te(e,t,n,r,o=!1,i){try{return!i&&!Ce(r)&&(i=await t.newChat(e.id,{persist:o},Me(r)),n.track("agent-chat",{event:"created",chatId:i.id,agentId:e.id,mode:r,access:e.access,name:e.preview_name,...e.access==="public"?{from:"agent-template"}:{}})),{chat:i,chatMode:(i==null?void 0:i.chat_mode)??r}}catch(c){try{const a=JSON.parse(c.message);if((a==null?void 0:a.kind)==="InsufficientCreditsError")throw new Error("InsufficientCreditsError")}catch(a){console.error("Error parsing the error message:",a)}throw new Error("Cannot create new chat")}}function qe(e){return e&&e.length>0?e:[]}function Xe(e,t,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!==W.Fluent)throw new Error("Interrupt only available for Fluent streams");if(!n)throw new Error("No active video to interrupt")}async function Ye(e,t){const n={type:b.StreamInterrupt,videoId:t,timestamp:Date.now()};e.sendDataChannelMessage(JSON.stringify(n))}function Oe(e){return new Promise((t,n)=>{const{callbacks:r,host:o,auth:i}=e,{onMessage:c=null,onOpen:a=null,onClose:s=null,onError:u=null}=r||{},d=new WebSocket(`${o}?authorization=${Se(i)}`);d.onmessage=c,d.onclose=s,d.onerror=v=>{console.error(v),u==null||u("Websocket failed to connect",v),n(v)},d.onopen=v=>{a==null||a(v),t(d)}})}async function Qe(e){const{retries:t=1}=e;let n=null;for(let r=0;(n==null?void 0:n.readyState)!==WebSocket.OPEN;r++)try{n=await Oe(e)}catch(o){if(r===t)throw o;await ke(r*500)}return n}async function Ge(e,t,n){const r=n!=null&&n.onMessage?[n.onMessage]:[],o=await Qe({auth:e,host:t,callbacks:{onError:i=>{var c;return(c=n.onError)==null?void 0:c.call(n,new de(i))},onMessage(i){const c=JSON.parse(i.data);r.forEach(a=>a(c.event,c))}}});return{socket:o,disconnect:()=>o.close(),subscribeToEvents:i=>r.push(i)}}function Ze(e){if(e.answer!==void 0)return e.answer;let t=0,n="";for(;t in e;)n+=e[t++];return n}function et(e,t,n,r,o){const i=r.messages[r.messages.length-1];if(!(e===q.Partial||e===q.Answer)||(i==null?void 0:i.role)!=="assistant")return;const{content:c,sequence:a}=t;e===q.Partial?n[a]=c:n.answer=c;const s=Ze(n);(i.content!==s||e===q.Answer)&&(i.content=s,o==null||o([...r.messages],e))}function tt(e,t,n,r,o){let i={};return{clearQueue:()=>i={},onMessage:(c,a)=>{var s,u;if("content"in a)et(c,a,i,t,n.callbacks.onNewMessage),c===q.Answer&&e.track("agent-message-received",{messages:t.messages.length,mode:t.chatMode});else{const d=b,v=[d.StreamVideoDone,d.StreamVideoError,d.StreamVideoRejected],B=[d.StreamFailed,d.StreamVideoError,d.StreamVideoRejected],L=He(a,r,{mode:t.chatMode});if(c=c,c===d.StreamVideoCreated)e.linkTrack("agent-video",L,d.StreamVideoCreated,["start"]);else if(v.includes(c)){const U=c.split("/")[1];B.includes(c)?e.track("agent-video",{...L,event:U}):e.linkTrack("agent-video",{...L,event:U},c,["done"])}B.includes(c)&&((u=(s=n.callbacks).onError)==null||u.call(s,new Error(`Stream failed with event ${c}`),{data:a})),a.event===d.StreamDone&&o()}}}}function rt(e,t,n,r){const o=ae(e,`${t}/agents/${n}`,r);return{createStream(i){return o.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,c,a){return o.post(`/streams/${i}/sdp`,{session_id:a,answer:c})},addIceCandidate(i,c,a){return o.post(`/streams/${i}/ice`,{session_id:a,...c})},sendStreamRequest(i,c,a){return o.post(`/streams/${i}`,{session_id:c,...a})},close(i,c){return o.delete(`/streams/${i}`,{session_id:c})}}}function nt(e,t,n,r){const o=ae(e,`${t}/agents/${n}`,r);return{createStream(i,c){return o.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},c)},startConnection(i,c,a,s){return o.post(`/streams/${i}/sdp`,{session_id:a,answer:c},s)},addIceCandidate(i,c,a,s){return o.post(`/streams/${i}/ice`,{session_id:a,...c},s)},sendStreamRequest(i,c,a,s){return o.post(`/streams/${i}`,{session_id:c,...a},s)},close(i,c,a){return o.delete(`/streams/${i}`,{session_id:c},a)}}}function at(e,t,n){const r=(t.timestamp-e.timestamp)/1e3;return{duration:r,bytesReceived:t.bytesReceived-e.bytesReceived,bitrate:Math.round((t.bytesReceived-e.bytesReceived)*8/r),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)/r,framesPerSecond:t.framesPerSecond,freezeCount:t.freezeCount-e.freezeCount,freezeDuration:t.freezeDuration-e.freezeDuration,lowFpsCount:n}}function it(e){return e.filter(t=>t.freezeCount>0||t.framesPerSecond<21||t.framesDropped>0||t.packetsLost>0).map(t=>{const{timestamp:n,...r}=t,o=[];return t.freezeCount>0&&o.push("freeze"),t.framesPerSecond<21&&o.push("low fps"),t.framesDropped>0&&o.push("frames dropped"),t.packetsLost>0&&o.push("packet loss"),{...r,causes:o}})}function st(e){let t="",n=0;for(const r of e.values())if(r&&r.type==="codec"&&r.mimeType.startsWith("video")&&(t=r.mimeType.split("/")[1]),r&&r.type==="candidate-pair"&&(n=r.currentRoundTripTime),r&&r.type==="inbound-rtp"&&r.kind==="video")return{codec:t,rtt:n,timestamp:r.timestamp,bytesReceived:r.bytesReceived,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,frameWidth:r.frameWidth,frameHeight:r.frameHeight,framesPerSecond:r.framesPerSecond,freezeCount:r.freezeCount,freezeDuration:r.totalFreezesDuration};return{}}function ot(e,t,n){const r=e.map((s,u)=>u===0?n?{timestamp:s.timestamp,duration:0,rtt:s.rtt,bytesReceived:s.bytesReceived-n.bytesReceived,bitrate:(s.bytesReceived-n.bytesReceived)*8/(t/1e3),packetsReceived:s.packetsReceived-n.packetsReceived,packetsLost:s.packetsLost-n.packetsLost,framesDropped:s.framesDropped-n.framesDropped,framesDecoded:s.framesDecoded-n.framesDecoded,jitter:s.jitter,jitterBufferDelay:s.jitterBufferDelay-n.jitterBufferDelay,jitterBufferEmittedCount:s.jitterBufferEmittedCount-n.jitterBufferEmittedCount,avgJitterDelayInInterval:(s.jitterBufferDelay-n.jitterBufferDelay)/(s.jitterBufferEmittedCount-n.jitterBufferEmittedCount),framesPerSecond:s.framesPerSecond,freezeCount:s.freezeCount-n.freezeCount,freezeDuration:s.freezeDuration-n.freezeDuration}:{timestamp:s.timestamp,rtt:s.rtt,duration:0,bytesReceived:s.bytesReceived,bitrate:s.bytesReceived*8/(t/1e3),packetsReceived:s.packetsReceived,packetsLost:s.packetsLost,framesDropped:s.framesDropped,framesDecoded:s.framesDecoded,jitter:s.jitter,jitterBufferDelay:s.jitterBufferDelay,jitterBufferEmittedCount:s.jitterBufferEmittedCount,avgJitterDelayInInterval:s.jitterBufferDelay/s.jitterBufferEmittedCount,framesPerSecond:s.framesPerSecond,freezeCount:s.freezeCount,freezeDuration:s.freezeDuration}:{timestamp:s.timestamp,duration:t*u/1e3,rtt:s.rtt,bytesReceived:s.bytesReceived-e[u-1].bytesReceived,bitrate:(s.bytesReceived-e[u-1].bytesReceived)*8/(t/1e3),packetsReceived:s.packetsReceived-e[u-1].packetsReceived,packetsLost:s.packetsLost-e[u-1].packetsLost,framesDropped:s.framesDropped-e[u-1].framesDropped,framesDecoded:s.framesDecoded-e[u-1].framesDecoded,jitter:s.jitter,jitterBufferDelay:s.jitterBufferDelay-e[u-1].jitterBufferDelay,jitterBufferEmittedCount:s.jitterBufferEmittedCount-e[u-1].jitterBufferEmittedCount,avgJitterDelayInInterval:(s.jitterBufferDelay-e[u-1].jitterBufferDelay)/(s.jitterBufferEmittedCount-e[u-1].jitterBufferEmittedCount),framesPerSecond:s.framesPerSecond,freezeCount:s.freezeCount-e[u-1].freezeCount,freezeDuration:s.freezeDuration-e[u-1].freezeDuration}),o=it(r),i=o.reduce((s,u)=>s+(u.causes.includes("low fps")?1:0),0),c=r.filter(s=>!!s.avgJitterDelayInInterval).map(s=>s.avgJitterDelayInInterval),a=r.filter(s=>!!s.rtt).map(s=>s.rtt);return{webRTCStats:{anomalies:o,minRtt:Math.min(...a),avgRtt:_e(a),maxRtt:Math.max(...a),aggregateReport:at(e[0],e[e.length-1],i),minJitterDelayInInterval:Math.min(...c),maxJitterDelayInInterval:Math.max(...c),avgJitterDelayInInterval:_e(c)},codec:e[0].codec,resolution:`${e[0].frameWidth}x${e[0].frameHeight}`}}const oe=100,ct=Math.max(Math.ceil(400/oe),1),dt=.25,ut=.28;function lt(){let e=0,t,n,r=0;return o=>{for(const i of o.values())if(i&&i.type==="inbound-rtp"&&i.kind==="video"){const c=i.jitterBufferDelay,a=i.jitterBufferEmittedCount;if(n&&a>n){const d=c-t,v=a-n;r=d/v}t=c,n=a;const s=i.framesDecoded,u=s-e>0;return e=s,{isReceiving:u,avgJitterDelayInInterval:r,freezeCount:i.freezeCount}}return{isReceiving:!1,avgJitterDelayInInterval:r}}}function ft(e,t,n,r,o,i=!1){let c=[],a,s=0,u=!1,d=Q.Unknown,v=Q.Unknown,B=0,L=0;const U=lt();return setInterval(async()=>{const K=await e.getStats(),{isReceiving:_,avgJitterDelayInInterval:Y,freezeCount:O}=U(K),A=st(K);if(_)s=0,B=O-L,v=Y<dt?Q.Strong:Y>ut&&B>1?Q.Weak:d,v!==d&&(o==null||o(v),d=v,L+=B,B=0),u||(r==null||r(w.Start),a=c[c.length-1],c=[],u=!0),c.push(A);else if(u&&(s++,s>=ct)){const l=ot(c,oe,a);r==null||r(w.Stop,l),t()||n(),L=O,u=!1}},oe)}let je=!1;const P=(e,t)=>je&&console.log(e,t),mt=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function be(e){switch(e){case"connected":return D.Connected;case"checking":return D.Connecting;case"failed":return D.Fail;case"new":return D.New;case"closed":return D.Closed;case"disconnected":return D.Disconnected;case"completed":return D.Completed;default:return D.New}}function gt(e){const[t,n=""]=e.split(/:(.+)/);try{const r=JSON.parse(n);return P("parsed data channel message",{subject:t,data:r}),{subject:t,data:r}}catch(r){return P("Failed to parse data channel message, returning data as string",{subject:t,rawData:n,error:r}),{subject:t,data:n}}}function ht({statsSignal:e,dataChannelSignal:t,onVideoStateChange:n,report:r}){e===w.Start&&t===w.Start?n==null||n(w.Start):e===w.Stop&&t===w.Stop&&(n==null||n(w.Stop,r))}function wt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:n,onAgentActivityStateChange:r,report:o}){e===w.Start?n==null||n(w.Start):e===w.Stop&&(n==null||n(w.Stop,o)),t===w.Start?r==null||r(X.Talking):t===w.Stop&&(r==null||r(X.Idle))}function Ae({statsSignal:e,dataChannelSignal:t,onVideoStateChange:n,onAgentActivityStateChange:r,streamType:o,report:i}){o===W.Legacy?ht({statsSignal:e,dataChannelSignal:t,onVideoStateChange:n,report:i}):o===W.Fluent&&wt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:n,onAgentActivityStateChange:r,report:i})}async function pt(e,t,{debug:n=!1,callbacks:r,auth:o,baseURL:i=Z,analytics:c}){var H;je=n;let a=!1,s=!1,u=w.Stop,d=w.Stop;const{startConnection:v,sendStreamRequest:B,close:L,createStream:U,addIceCandidate:K}=t.videoType===re.Clip?rt(o,i,e,r.onError):nt(o,i,e,r.onError),{id:_,offer:Y,ice_servers:O,session_id:A,fluent:l,interrupt_enabled:p}=await U(t);(H=r.onStreamCreated)==null||H.call(r,{stream_id:_,session_id:A,agent_id:e});const m=new mt({iceServers:O}),S=m.createDataChannel("JanusDataChannel");if(!A)throw new Error("Could not create session_id");const k=l?W.Fluent:W.Legacy;c.enrich({"stream-type":k});const y=t.stream_warmup&&!l,T=()=>a,z=()=>{var f;a=!0,s&&((f=r.onConnectionStateChange)==null||f.call(r,D.Connected))},F=ft(m,T,z,(f,g)=>Ae({statsSignal:d=f,dataChannelSignal:k===W.Legacy?u:void 0,onVideoStateChange:r.onVideoStateChange,onAgentActivityStateChange:r.onAgentActivityStateChange,report:g,streamType:k}),f=>{var g;return(g=r.onConnectivityStateChange)==null?void 0:g.call(r,f)},y);m.onicecandidate=f=>{var g;P("peerConnection.onicecandidate",f);try{f.candidate&&f.candidate.sdpMid&&f.candidate.sdpMLineIndex!==null?K(_,{candidate:f.candidate.candidate,sdpMid:f.candidate.sdpMid,sdpMLineIndex:f.candidate.sdpMLineIndex},A):K(_,{candidate:null},A)}catch(E){(g=r.onError)==null||g.call(r,E,{streamId:_})}},S.onopen=()=>{s=!0,(!y||a)&&z()};const C=f=>{var g;(g=r.onVideoIdChange)==null||g.call(r,f)};function j(f,g){if(f===b.StreamStarted&&typeof g=="object"&&"metadata"in g){const E=g.metadata;C(E.videoId)}f===b.StreamDone&&C(null),u=f===b.StreamStarted?w.Start:w.Stop,Ae({statsSignal:k===W.Legacy?d:void 0,dataChannelSignal:u,onVideoStateChange:r.onVideoStateChange,onAgentActivityStateChange:r.onAgentActivityStateChange,streamType:k})}function R(f,g){const E=typeof g=="string"?g:g==null?void 0:g.metadata;E&&c.enrich({streamMetadata:E}),c.track("agent-chat",{event:"ready"})}const N={[b.StreamStarted]:j,[b.StreamDone]:j,[b.StreamReady]:R};S.onmessage=f=>{var ee;const{subject:g,data:E}=gt(f.data);(ee=N[g])==null||ee.call(N,g,E)},m.oniceconnectionstatechange=()=>{var g;P("peerConnection.oniceconnectionstatechange => "+m.iceConnectionState);const f=be(m.iceConnectionState);f!==D.Connected&&((g=r.onConnectionStateChange)==null||g.call(r,f))},m.ontrack=f=>{var g;P("peerConnection.ontrack",f),(g=r.onSrcObjectReady)==null||g.call(r,f.streams[0])},await m.setRemoteDescription(Y),P("set remote description OK");const J=await m.createAnswer();return P("create answer OK"),await m.setLocalDescription(J),P("set local description OK"),await v(_,J,A),P("start connection OK"),{speak(f){return B(_,A,f)},async disconnect(){var f;if(_){const g=be(m.iceConnectionState);if(m){if(g===D.New){clearInterval(F);return}m.close(),m.oniceconnectionstatechange=null,m.onnegotiationneeded=null,m.onicecandidate=null,m.ontrack=null}try{g===D.Connected&&await L(_,A).catch(E=>{})}catch(E){P("Error on close stream connection",E)}(f=r.onAgentActivityStateChange)==null||f.call(r,X.Idle),clearInterval(F)}},sendDataChannelMessage(f){var g,E;if(!a||S.readyState!=="open"){P("Data channel is not ready for sending messages"),(g=r.onError)==null||g.call(r,new Error("Data channel is not ready for sending messages"),{streamId:_});return}try{S.send(f)}catch(ee){P("Error sending data channel message",ee),(E=r.onError)==null||E.call(r,ee,{streamId:_})}},sessionId:A,streamId:_,streamType:k,interruptAvailable:p}}function yt(e,t){const{streamOptions:n}=t??{};return{videoType:pe(e.presenter.type),output_resolution:n==null?void 0:n.outputResolution,session_timeout:n==null?void 0:n.sessionTimeout,stream_warmup:n==null?void 0:n.streamWarmup,compatibility_mode:n==null?void 0:n.compatibilityMode,fluent:n==null?void 0:n.fluent}}function vt(e,t,n,r,o){o===W.Fluent?kt(e,t,n,r,o):Dt(e,t,n,r,o)}function kt(e,t,n,r,o){e===w.Start?r.track("stream-session",{event:"start","stream-type":o}):e===w.Stop&&r.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":o,...n})}function Ct(e,t,n,r){$.get()<=0||(e===w.Start?n.linkTrack("agent-video",{event:"start",latency:$.get(!0),"stream-type":r},"start",[b.StreamVideoCreated]):e===w.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":r},"done",[b.StreamVideoDone]))}function Dt(e,t,n,r,o){$.get()<=0||(e===w.Start?r.linkTrack("agent-video",{event:"start",latency:$.get(!0),"stream-type":o},"start",[b.StreamVideoCreated]):e===w.Stop&&r.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":o,...n},"done",[b.StreamVideoDone]))}function St(e,t,n){return $.reset(),new Promise(async(r,o)=>{try{const i=await pt(e.id,yt(e,t),{...t,analytics:n,callbacks:{...t.callbacks,onConnectionStateChange:c=>{var a,s;(s=(a=t.callbacks).onConnectionStateChange)==null||s.call(a,c),c===D.Connected&&r(i)},onVideoStateChange:(c,a)=>{var s,u;(u=(s=t.callbacks).onVideoStateChange)==null||u.call(s,c),vt(c,e,a,n,i.streamType)},onAgentActivityStateChange:c=>{var a,s;(s=(a=t.callbacks).onAgentActivityStateChange)==null||s.call(a,c),c===X.Talking?se.update():se.reset(),Ct(c===X.Talking?w.Start:w.Stop,e,n,i.streamType)}}})}catch(i){o(i)}})}async function Rt(e,t,n,r,o){var s,u,d,v;const{chat:i,chatMode:c}=await Te(e,n,r,t.mode,t.persistentChat,o);if(c&&c!==t.mode&&(t.mode=c,(u=(s=t.callbacks).onModeChange)==null||u.call(s,c),c===I.TextOnly))return(v=(d=t.callbacks).onError)==null||v.call(d,new ce(c)),{chat:i};const a=await St(e,t,r);return{chat:i,streamingManager:a}}async function It(e,t){var Y,O,A;let n=!0,r=null;const o=t.mixpanelKey||Le,i=t.wsURL||Be,c=t.baseURL||Z,a={messages:[],chatMode:t.mode||I.Functional},s=Ve({token:o,agentId:e,isEnabled:t.enableAnalitics,distinctId:t.distinctId});s.track("agent-sdk",{event:"init"});const u=Re(t.auth,c,t.callbacks.onError),d=await u.getById(e);s.enrich(Ue(d));const{onMessage:v,clearQueue:B}=tt(s,a,t,d,()=>{var l;return(l=a.socketManager)==null?void 0:l.disconnect()});a.messages=qe(t.initialMessages),(O=(Y=t.callbacks).onNewMessage)==null||O.call(Y,[...a.messages],"answer");const L=l=>{r=l};s.track("agent-sdk",{event:"loaded",...We(d)});async function U(l){var T,z,F,C,j,R,N;(z=(T=t.callbacks).onConnectionStateChange)==null||z.call(T,D.Connecting),$.reset(),l&&!n&&(delete a.chat,(C=(F=t.callbacks).onNewMessage)==null||C.call(F,[...a.messages],"answer"));const p=t.mode===I.DirectPlayback?Promise.resolve(void 0):Ge(t.auth,i,{onMessage:v,onError:t.callbacks.onError}),m=ne(()=>Rt(d,{...t,callbacks:{...t.callbacks,onVideoIdChange:L}},u,s,a.chat),{limit:3,timeout:Pe,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:J=>(J==null?void 0:J.message)!=="Could not connect"&&J.status!==429,delayMs:1e3}).catch(J=>{var H,f;throw _(I.Maintenance),(f=(H=t.callbacks).onConnectionStateChange)==null||f.call(H,D.Fail),J}),[S,{streamingManager:k,chat:y}]=await Promise.all([p,m]);y&&y.id!==((j=a.chat)==null?void 0:j.id)&&((N=(R=t.callbacks).onNewChat)==null||N.call(R,y.id)),a.streamingManager=k,a.socketManager=S,a.chat=y,n=!1,_((y==null?void 0:y.chat_mode)??t.mode??I.Functional)}async function K(){var l,p,m,S;(l=a.socketManager)==null||l.disconnect(),await((p=a.streamingManager)==null?void 0:p.disconnect()),delete a.streamingManager,delete a.socketManager,(S=(m=t.callbacks).onConnectionStateChange)==null||S.call(m,D.Disconnected)}async function _(l){var p,m;l!==a.chatMode&&(s.track("agent-mode-change",{mode:l}),a.chatMode=l,a.chatMode!==I.Functional&&await K(),(m=(p=t.callbacks).onModeChange)==null||m.call(p,l))}return{agent:d,getStreamType:()=>{var l;return(l=a.streamingManager)==null?void 0:l.streamType},getIsInterruptAvailable:()=>{var l;return((l=a.streamingManager)==null?void 0:l.interruptAvailable)??!1},starterMessages:((A=d.knowledge)==null?void 0:A.starter_message)||[],getSTTToken:()=>u.getSTTToken(d.id),changeMode:_,enrichAnalytics:s.enrich,async connect(){var l;await U(!0),s.track("agent-chat",{event:"connect",chatId:(l=a.chat)==null?void 0:l.id,agentId:d.id,mode:a.chatMode,access:d.access,name:d.preview_name,...d.access==="public"?{from:"agent-template"}:{}})},async reconnect(){var l;await K(),await U(!1),s.track("agent-chat",{event:"reconnect",chatId:(l=a.chat)==null?void 0:l.id,agentId:d.id,mode:a.chatMode,access:d.access,name:d.preview_name,...d.access==="public"?{from:"agent-template"}:{}})},async disconnect(){var l;await K(),s.track("agent-chat",{event:"disconnect",chatId:(l=a.chat)==null?void 0:l.id,agentId:d.id,mode:a.chatMode,access:d.access,name:d.preview_name,...d.access==="public"?{from:"agent-template"}:{}})},async chat(l){var k,y,T,z,F;const p=()=>{if(Ce(t.mode))throw new V(`${t.mode} is enabled, chat is disabled`);if(l.length>=800)throw new V("Message cannot be more than 800 characters");if(l.length===0)throw new V("Message cannot be empty");if(a.chatMode===I.Maintenance)throw new V("Chat is in maintenance mode");if(![I.TextOnly,I.Playground].includes(a.chatMode)){if(!a.streamingManager)throw new V("Streaming manager is not initialized");if(!a.chat)throw new V("Chat is not initialized")}},m=async()=>{var C,j;if(!a.chat){const R=await Te(d,u,s,a.chatMode,t.persistentChat);if(!R.chat)throw new x(a.chatMode,!!t.persistentChat);a.chat=R.chat,(j=(C=t.callbacks).onNewChat)==null||j.call(C,a.chat.id)}return a.chat.id},S=async(C,j)=>ne(()=>{var R,N;return u.chat(d.id,j,{chatMode:a.chatMode,streamId:(R=a.streamingManager)==null?void 0:R.streamId,sessionId:(N=a.streamingManager)==null?void 0:N.sessionId,messages:C.map(({matches:J,...H})=>H)},{...Me(a.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:R=>{var H,f,g,E;const N=(H=R==null?void 0:R.message)==null?void 0:H.includes("missing or invalid session_id");return!((f=R==null?void 0:R.message)==null?void 0:f.includes("Stream Error"))&&!N?((E=(g=t.callbacks).onError)==null||E.call(g,R),!1):!0},onRetry:async()=>{await K(),await U(!1)}});try{B(),p(),a.messages.push({id:G(),role:"user",content:l,created_at:new Date($.update()).toISOString()}),(y=(k=t.callbacks).onNewMessage)==null||y.call(k,[...a.messages],"user");const C=await m(),j=await S([...a.messages],C);return a.messages.push({id:G(),role:"assistant",content:j.result||"",created_at:new Date().toISOString(),context:j.context,matches:j.matches}),s.track("agent-message-send",{event:"success",mode:a.chatMode,messages:a.messages.length+1}),j.result&&((z=(T=t.callbacks).onNewMessage)==null||z.call(T,[...a.messages],"answer"),s.track("agent-message-received",{latency:$.get(!0),mode:a.chatMode,messages:a.messages.length})),j}catch(C){throw((F=a.messages[a.messages.length-1])==null?void 0:F.role)==="assistant"&&a.messages.pop(),s.track("agent-message-send",{event:"error",mode:a.chatMode,messages:a.messages.length}),C}},rate(l,p,m){var y,T,z,F;const S=a.messages.find(C=>C.id===l);if(a.chat){if(!S)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const k=((y=S.matches)==null?void 0:y.map(C=>[C.document_id,C.id]))??[];return s.track("agent-rate",{event:m?"update":"create",thumb:p===1?"up":"down",knowledge_id:((T=d.knowledge)==null?void 0:T.id)??"",mode:a.chatMode,matches:k,score:p}),m?u.updateRating(d.id,a.chat.id,m,{knowledge_id:((z=d.knowledge)==null?void 0:z.id)??"",message_id:l,matches:k,score:p}):u.createRating(d.id,a.chat.id,{knowledge_id:((F=d.knowledge)==null?void 0:F.id)??"",message_id:l,matches:k,score:p})},deleteRate(l){var p;if(!a.chat)throw new Error("Chat is not initialized");return s.track("agent-rate-delete",{type:"text",chat_id:(p=a.chat)==null?void 0:p.id,id:l,mode:a.chatMode}),u.deleteRating(d.id,a.chat.id,l)},async speak(l){var k,y,T;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 m=p();if(s.track("agent-speak",m),$.update(),a.messages&&m.type==="text"&&(a.messages.push({id:G(),role:"assistant",content:m.input,created_at:new Date($.get(!0)).toISOString()}),(y=(k=t.callbacks).onNewMessage)==null||y.call(k,[...a.messages],"answer")),ze(a.chatMode))return{duration:0,video_id:"",status:"success"};if(!a.streamingManager)throw new Error("Please connect to the agent first");return a.streamingManager.speak({script:m,metadata:{chat_id:(T=a.chat)==null?void 0:T.id,agent_id:d.id}})},async interrupt({type:l}){var m,S,k,y,T;Xe(a.streamingManager,(m=a.streamingManager)==null?void 0:m.streamType,r);const p=a.messages[a.messages.length-1];s.track("agent-video-interrupt",{type:l||"click",stream_id:(S=a.streamingManager)==null?void 0:S.streamId,agent_id:d.id,owner_id:d.owner_id,video_duration_to_interrupt:se.get(!0),message_duration_to_interrupt:$.get(!0),chat_id:(k=a.chat)==null?void 0:k.id,mode:a.chatMode}),p.interrupted=!0,(T=(y=t.callbacks).onNewMessage)==null||T.call(y,[...a.messages],"answer"),Ye(a.streamingManager,r)}}}function _t(e,t,n){const{getById:r}=Re(t,n||Z);return r(e)}h.AgentActivityState=X,h.AgentStatus=fe,h.ChatCreationFailed=x,h.ChatMode=I,h.ChatModeDowngraded=ce,h.ChatProgress=q,h.ConnectionState=D,h.ConnectivityState=Q,h.DocumentType=we,h.KnowledgeType=he,h.PlanGroup=le,h.Providers=ye,h.RateState=me,h.StreamEvents=b,h.StreamType=W,h.StreamingState=w,h.Subject=ge,h.UserPlan=ue,h.ValidationError=V,h.VideoType=re,h.VoiceAccess=ve,h.WsError=de,h.createAgentManager=It,h.getAgent=_t,h.mapVideoType=pe,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"})});
|