@d-id/client-sdk 1.1.6-staging.20 → 1.1.6
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 +203 -223
- 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), ue = (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 le() {
|
|
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 ue() {
|
|
|
112
112
|
return e;
|
|
113
113
|
}
|
|
114
114
|
let Fe = V();
|
|
115
|
-
function
|
|
115
|
+
function fe(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}.${le()}_${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: fe(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 u = await s.text().catch(() => `Failed to fetch with status ${s.status}`);
|
|
145
|
+
const d = new Error(u);
|
|
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 me(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, u, 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
|
+
...(u = o == null ? void 0 : o.script) == null ? void 0 : u.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 || le(),
|
|
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((u, d) => c.events[d] ? {
|
|
350
|
+
...u,
|
|
351
351
|
...c.events[d].props
|
|
352
|
-
} :
|
|
353
|
-
this.track(n, s), c.resolvedDependencies = c.resolvedDependencies.filter((
|
|
354
|
-
delete c.events[
|
|
352
|
+
} : u, {});
|
|
353
|
+
this.track(n, s), c.resolvedDependencies = c.resolvedDependencies.filter((u) => !i.includes(u)), i.forEach((u) => {
|
|
354
|
+
delete c.events[u];
|
|
355
355
|
});
|
|
356
356
|
}
|
|
357
357
|
}
|
|
@@ -366,27 +366,22 @@ function he() {
|
|
|
366
366
|
};
|
|
367
367
|
}
|
|
368
368
|
const N = he(), re = he();
|
|
369
|
-
function
|
|
369
|
+
function we(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 pe(e, t, n, r, o = !1, i) {
|
|
377
377
|
try {
|
|
378
|
-
return !i && !
|
|
378
|
+
return !i && !ue(r) && (i = await t.newChat(e.id, {
|
|
379
379
|
persist: o
|
|
380
|
-
},
|
|
380
|
+
}, we(r)), n.track("agent-chat", {
|
|
381
381
|
event: "created",
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
mode: r
|
|
385
|
-
access: e.access,
|
|
386
|
-
name: e.preview_name,
|
|
387
|
-
...e.access === "public" ? {
|
|
388
|
-
from: "agent-template"
|
|
389
|
-
} : {}
|
|
382
|
+
chat_id: i.id,
|
|
383
|
+
agent_id: e.id,
|
|
384
|
+
mode: r
|
|
390
385
|
})), {
|
|
391
386
|
chat: i,
|
|
392
387
|
chatMode: (i == null ? void 0 : i.chat_mode) ?? r
|
|
@@ -433,10 +428,10 @@ function Oe(e) {
|
|
|
433
428
|
onMessage: c = null,
|
|
434
429
|
onOpen: a = null,
|
|
435
430
|
onClose: s = null,
|
|
436
|
-
onError:
|
|
437
|
-
} = r || {}, d = new WebSocket(`${o}?authorization=${
|
|
431
|
+
onError: u = null
|
|
432
|
+
} = r || {}, d = new WebSocket(`${o}?authorization=${fe(i)}`);
|
|
438
433
|
d.onmessage = c, d.onclose = s, d.onerror = (y) => {
|
|
439
|
-
console.error(y),
|
|
434
|
+
console.error(y), u == null || u("Websocket failed to connect", y), n(y);
|
|
440
435
|
}, d.onopen = (y) => {
|
|
441
436
|
a == null || a(y), t(d);
|
|
442
437
|
};
|
|
@@ -503,7 +498,7 @@ function rt(e, t, n, r, o) {
|
|
|
503
498
|
return {
|
|
504
499
|
clearQueue: () => i = {},
|
|
505
500
|
onMessage: (c, a) => {
|
|
506
|
-
var s,
|
|
501
|
+
var s, u;
|
|
507
502
|
if ("content" in a)
|
|
508
503
|
tt(c, a, i, t, n.callbacks.onNewMessage), c === q.Answer && e.track("agent-message-received", {
|
|
509
504
|
messages: t.messages.length,
|
|
@@ -525,7 +520,7 @@ function rt(e, t, n, r, o) {
|
|
|
525
520
|
event: x
|
|
526
521
|
}, c, ["done"]);
|
|
527
522
|
}
|
|
528
|
-
A.includes(c) && ((
|
|
523
|
+
A.includes(c) && ((u = (s = n.callbacks).onError) == null || u.call(s, new Error(`Stream failed with event ${c}`), {
|
|
529
524
|
data: a
|
|
530
525
|
})), a.event === d.StreamDone && o();
|
|
531
526
|
}
|
|
@@ -667,7 +662,7 @@ function ot(e) {
|
|
|
667
662
|
return {};
|
|
668
663
|
}
|
|
669
664
|
function ct(e, t, n) {
|
|
670
|
-
const r = e.map((s,
|
|
665
|
+
const r = e.map((s, u) => u === 0 ? n ? {
|
|
671
666
|
timestamp: s.timestamp,
|
|
672
667
|
duration: 0,
|
|
673
668
|
rtt: s.rtt,
|
|
@@ -703,22 +698,22 @@ function ct(e, t, n) {
|
|
|
703
698
|
freezeDuration: s.freezeDuration
|
|
704
699
|
} : {
|
|
705
700
|
timestamp: s.timestamp,
|
|
706
|
-
duration: t *
|
|
701
|
+
duration: t * u / 1e3,
|
|
707
702
|
rtt: s.rtt,
|
|
708
|
-
bytesReceived: s.bytesReceived - e[
|
|
709
|
-
bitrate: (s.bytesReceived - e[
|
|
710
|
-
packetsReceived: s.packetsReceived - e[
|
|
711
|
-
packetsLost: s.packetsLost - e[
|
|
712
|
-
framesDropped: s.framesDropped - e[
|
|
713
|
-
framesDecoded: s.framesDecoded - e[
|
|
703
|
+
bytesReceived: s.bytesReceived - e[u - 1].bytesReceived,
|
|
704
|
+
bitrate: (s.bytesReceived - e[u - 1].bytesReceived) * 8 / (t / 1e3),
|
|
705
|
+
packetsReceived: s.packetsReceived - e[u - 1].packetsReceived,
|
|
706
|
+
packetsLost: s.packetsLost - e[u - 1].packetsLost,
|
|
707
|
+
framesDropped: s.framesDropped - e[u - 1].framesDropped,
|
|
708
|
+
framesDecoded: s.framesDecoded - e[u - 1].framesDecoded,
|
|
714
709
|
jitter: s.jitter,
|
|
715
|
-
jitterBufferDelay: s.jitterBufferDelay - e[
|
|
716
|
-
jitterBufferEmittedCount: s.jitterBufferEmittedCount - e[
|
|
717
|
-
avgJitterDelayInInterval: (s.jitterBufferDelay - e[
|
|
710
|
+
jitterBufferDelay: s.jitterBufferDelay - e[u - 1].jitterBufferDelay,
|
|
711
|
+
jitterBufferEmittedCount: s.jitterBufferEmittedCount - e[u - 1].jitterBufferEmittedCount,
|
|
712
|
+
avgJitterDelayInInterval: (s.jitterBufferDelay - e[u - 1].jitterBufferDelay) / (s.jitterBufferEmittedCount - e[u - 1].jitterBufferEmittedCount),
|
|
718
713
|
framesPerSecond: s.framesPerSecond,
|
|
719
|
-
freezeCount: s.freezeCount - e[
|
|
720
|
-
freezeDuration: s.freezeDuration - e[
|
|
721
|
-
}), o = st(r), i = o.reduce((s,
|
|
714
|
+
freezeCount: s.freezeCount - e[u - 1].freezeCount,
|
|
715
|
+
freezeDuration: s.freezeDuration - e[u - 1].freezeDuration
|
|
716
|
+
}), o = st(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);
|
|
722
717
|
return {
|
|
723
718
|
webRTCStats: {
|
|
724
719
|
anomalies: o,
|
|
@@ -734,8 +729,8 @@ function ct(e, t, n) {
|
|
|
734
729
|
resolution: `${e[0].frameWidth}x${e[0].frameHeight}`
|
|
735
730
|
};
|
|
736
731
|
}
|
|
737
|
-
const ne = 100, dt = Math.max(Math.ceil(400 / ne), 1),
|
|
738
|
-
function
|
|
732
|
+
const ne = 100, dt = Math.max(Math.ceil(400 / ne), 1), ut = 0.25, lt = 0.28;
|
|
733
|
+
function ft() {
|
|
739
734
|
let e = 0, t, n, r = 0;
|
|
740
735
|
return (o) => {
|
|
741
736
|
for (const i of o.values())
|
|
@@ -746,9 +741,9 @@ function mt() {
|
|
|
746
741
|
r = d / y;
|
|
747
742
|
}
|
|
748
743
|
t = c, n = a;
|
|
749
|
-
const s = i.framesDecoded,
|
|
744
|
+
const s = i.framesDecoded, u = s - e > 0;
|
|
750
745
|
return e = s, {
|
|
751
|
-
isReceiving:
|
|
746
|
+
isReceiving: u,
|
|
752
747
|
avgJitterDelayInInterval: r,
|
|
753
748
|
freezeCount: i.freezeCount
|
|
754
749
|
};
|
|
@@ -759,9 +754,9 @@ function mt() {
|
|
|
759
754
|
};
|
|
760
755
|
};
|
|
761
756
|
}
|
|
762
|
-
function
|
|
763
|
-
let c = [], a, s = 0,
|
|
764
|
-
const x =
|
|
757
|
+
function mt(e, t, n, r, o, i = !1) {
|
|
758
|
+
let c = [], a, s = 0, u = !1, d = O.Unknown, y = O.Unknown, A = 0, P = 0;
|
|
759
|
+
const x = ft();
|
|
765
760
|
return setInterval(async () => {
|
|
766
761
|
const F = await e.getStats(), {
|
|
767
762
|
isReceiving: R,
|
|
@@ -769,10 +764,10 @@ function ft(e, t, n, r, o, i = !1) {
|
|
|
769
764
|
freezeCount: K
|
|
770
765
|
} = x(F), T = ot(F);
|
|
771
766
|
if (R)
|
|
772
|
-
s = 0, A = K - P, y = U <
|
|
773
|
-
else if (
|
|
774
|
-
const
|
|
775
|
-
r == null || r(h.Stop,
|
|
767
|
+
s = 0, A = K - P, y = U < ut ? O.Strong : U > lt && A > 1 ? O.Weak : d, y !== d && (o == null || o(y), d = y, P += A, A = 0), u || (r == null || r(h.Start), a = c[c.length - 1], c = [], u = !0), c.push(T);
|
|
768
|
+
else if (u && (s++, s >= dt)) {
|
|
769
|
+
const l = ct(c, ne, a);
|
|
770
|
+
r == null || r(h.Stop, l), t() || n(), P = K, u = !1;
|
|
776
771
|
}
|
|
777
772
|
}, ne);
|
|
778
773
|
}
|
|
@@ -820,7 +815,7 @@ function ht(e) {
|
|
|
820
815
|
};
|
|
821
816
|
}
|
|
822
817
|
}
|
|
823
|
-
function
|
|
818
|
+
function wt({
|
|
824
819
|
statsSignal: e,
|
|
825
820
|
dataChannelSignal: t,
|
|
826
821
|
onVideoStateChange: n,
|
|
@@ -828,7 +823,7 @@ function pt({
|
|
|
828
823
|
}) {
|
|
829
824
|
e === h.Start && t === h.Start ? n == null || n(h.Start) : e === h.Stop && t === h.Stop && (n == null || n(h.Stop, r));
|
|
830
825
|
}
|
|
831
|
-
function
|
|
826
|
+
function pt({
|
|
832
827
|
statsSignal: e,
|
|
833
828
|
dataChannelSignal: t,
|
|
834
829
|
onVideoStateChange: n,
|
|
@@ -845,12 +840,12 @@ function oe({
|
|
|
845
840
|
streamType: o,
|
|
846
841
|
report: i
|
|
847
842
|
}) {
|
|
848
|
-
o === W.Legacy ?
|
|
843
|
+
o === W.Legacy ? wt({
|
|
849
844
|
statsSignal: e,
|
|
850
845
|
dataChannelSignal: t,
|
|
851
846
|
onVideoStateChange: n,
|
|
852
847
|
report: i
|
|
853
|
-
}) : o === W.Fluent &&
|
|
848
|
+
}) : o === W.Fluent && pt({
|
|
854
849
|
statsSignal: e,
|
|
855
850
|
dataChannelSignal: t,
|
|
856
851
|
onVideoStateChange: n,
|
|
@@ -867,7 +862,7 @@ async function yt(e, t, {
|
|
|
867
862
|
}) {
|
|
868
863
|
var J;
|
|
869
864
|
ye = n;
|
|
870
|
-
let a = !1, s = !1,
|
|
865
|
+
let a = !1, s = !1, u = h.Stop, d = h.Stop;
|
|
871
866
|
const {
|
|
872
867
|
startConnection: y,
|
|
873
868
|
sendStreamRequest: A,
|
|
@@ -879,45 +874,45 @@ async function yt(e, t, {
|
|
|
879
874
|
offer: U,
|
|
880
875
|
ice_servers: K,
|
|
881
876
|
session_id: T,
|
|
882
|
-
fluent:
|
|
883
|
-
interrupt_enabled:
|
|
877
|
+
fluent: l,
|
|
878
|
+
interrupt_enabled: w
|
|
884
879
|
} = await x(t);
|
|
885
880
|
(J = r.onStreamCreated) == null || J.call(r, {
|
|
886
881
|
stream_id: R,
|
|
887
882
|
session_id: T,
|
|
888
883
|
agent_id: e
|
|
889
884
|
});
|
|
890
|
-
const
|
|
885
|
+
const m = new gt({
|
|
891
886
|
iceServers: K
|
|
892
|
-
}), D =
|
|
887
|
+
}), D = m.createDataChannel("JanusDataChannel");
|
|
893
888
|
if (!T)
|
|
894
889
|
throw new Error("Could not create session_id");
|
|
895
|
-
const v =
|
|
890
|
+
const v = l ? W.Fluent : W.Legacy;
|
|
896
891
|
c.enrich({
|
|
897
892
|
"stream-type": v
|
|
898
893
|
});
|
|
899
|
-
const
|
|
900
|
-
var
|
|
901
|
-
a = !0, s && ((
|
|
902
|
-
}, B =
|
|
903
|
-
statsSignal: d =
|
|
904
|
-
dataChannelSignal: v === W.Legacy ?
|
|
894
|
+
const p = t.stream_warmup && !l, _ = () => a, $ = () => {
|
|
895
|
+
var f;
|
|
896
|
+
a = !0, s && ((f = r.onConnectionStateChange) == null || f.call(r, I.Connected));
|
|
897
|
+
}, B = mt(m, _, $, (f, g) => oe({
|
|
898
|
+
statsSignal: d = f,
|
|
899
|
+
dataChannelSignal: v === W.Legacy ? u : void 0,
|
|
905
900
|
onVideoStateChange: r.onVideoStateChange,
|
|
906
901
|
onAgentActivityStateChange: r.onAgentActivityStateChange,
|
|
907
902
|
report: g,
|
|
908
903
|
streamType: v
|
|
909
|
-
}), (
|
|
904
|
+
}), (f) => {
|
|
910
905
|
var g;
|
|
911
|
-
return (g = r.onConnectivityStateChange) == null ? void 0 : g.call(r,
|
|
912
|
-
},
|
|
913
|
-
|
|
906
|
+
return (g = r.onConnectivityStateChange) == null ? void 0 : g.call(r, f);
|
|
907
|
+
}, p);
|
|
908
|
+
m.onicecandidate = (f) => {
|
|
914
909
|
var g;
|
|
915
|
-
b("peerConnection.onicecandidate",
|
|
910
|
+
b("peerConnection.onicecandidate", f);
|
|
916
911
|
try {
|
|
917
|
-
|
|
918
|
-
candidate:
|
|
919
|
-
sdpMid:
|
|
920
|
-
sdpMLineIndex:
|
|
912
|
+
f.candidate && f.candidate.sdpMid && f.candidate.sdpMLineIndex !== null ? F(R, {
|
|
913
|
+
candidate: f.candidate.candidate,
|
|
914
|
+
sdpMid: f.candidate.sdpMid,
|
|
915
|
+
sdpMLineIndex: f.candidate.sdpMLineIndex
|
|
921
916
|
}, T) : F(R, {
|
|
922
917
|
candidate: null
|
|
923
918
|
}, T);
|
|
@@ -927,26 +922,26 @@ async function yt(e, t, {
|
|
|
927
922
|
});
|
|
928
923
|
}
|
|
929
924
|
}, D.onopen = () => {
|
|
930
|
-
s = !0, (!
|
|
925
|
+
s = !0, (!p || a) && $();
|
|
931
926
|
};
|
|
932
|
-
const k = (
|
|
927
|
+
const k = (f) => {
|
|
933
928
|
var g;
|
|
934
|
-
(g = r.onVideoIdChange) == null || g.call(r,
|
|
929
|
+
(g = r.onVideoIdChange) == null || g.call(r, f);
|
|
935
930
|
};
|
|
936
|
-
function E(
|
|
937
|
-
if (
|
|
931
|
+
function E(f, g) {
|
|
932
|
+
if (f === j.StreamStarted && typeof g == "object" && "metadata" in g) {
|
|
938
933
|
const S = g.metadata;
|
|
939
934
|
k(S.videoId);
|
|
940
935
|
}
|
|
941
|
-
|
|
936
|
+
f === j.StreamDone && k(null), u = f === j.StreamStarted ? h.Start : h.Stop, oe({
|
|
942
937
|
statsSignal: v === W.Legacy ? d : void 0,
|
|
943
|
-
dataChannelSignal:
|
|
938
|
+
dataChannelSignal: u,
|
|
944
939
|
onVideoStateChange: r.onVideoStateChange,
|
|
945
940
|
onAgentActivityStateChange: r.onAgentActivityStateChange,
|
|
946
941
|
streamType: v
|
|
947
942
|
});
|
|
948
943
|
}
|
|
949
|
-
function C(
|
|
944
|
+
function C(f, g) {
|
|
950
945
|
const S = typeof g == "string" ? g : g == null ? void 0 : g.metadata;
|
|
951
946
|
S && c.enrich({
|
|
952
947
|
streamMetadata: S
|
|
@@ -959,44 +954,44 @@ async function yt(e, t, {
|
|
|
959
954
|
[j.StreamDone]: E,
|
|
960
955
|
[j.StreamReady]: C
|
|
961
956
|
};
|
|
962
|
-
D.onmessage = (
|
|
957
|
+
D.onmessage = (f) => {
|
|
963
958
|
var Y;
|
|
964
959
|
const {
|
|
965
960
|
subject: g,
|
|
966
961
|
data: S
|
|
967
|
-
} = ht(
|
|
962
|
+
} = ht(f.data);
|
|
968
963
|
(Y = L[g]) == null || Y.call(L, g, S);
|
|
969
|
-
},
|
|
964
|
+
}, m.oniceconnectionstatechange = () => {
|
|
970
965
|
var g;
|
|
971
|
-
b("peerConnection.oniceconnectionstatechange => " +
|
|
972
|
-
const
|
|
973
|
-
|
|
974
|
-
},
|
|
966
|
+
b("peerConnection.oniceconnectionstatechange => " + m.iceConnectionState);
|
|
967
|
+
const f = se(m.iceConnectionState);
|
|
968
|
+
f !== I.Connected && ((g = r.onConnectionStateChange) == null || g.call(r, f));
|
|
969
|
+
}, m.ontrack = (f) => {
|
|
975
970
|
var g;
|
|
976
|
-
b("peerConnection.ontrack",
|
|
977
|
-
}, await
|
|
978
|
-
const z = await
|
|
979
|
-
return b("create answer OK"), await
|
|
971
|
+
b("peerConnection.ontrack", f), (g = r.onSrcObjectReady) == null || g.call(r, f.streams[0]);
|
|
972
|
+
}, await m.setRemoteDescription(U), b("set remote description OK");
|
|
973
|
+
const z = await m.createAnswer();
|
|
974
|
+
return b("create answer OK"), await m.setLocalDescription(z), b("set local description OK"), await y(R, z, T), b("start connection OK"), {
|
|
980
975
|
/**
|
|
981
976
|
* Method to send request to server to get clip or talk depend on you payload
|
|
982
977
|
* @param payload
|
|
983
978
|
*/
|
|
984
|
-
speak(
|
|
985
|
-
return A(R, T,
|
|
979
|
+
speak(f) {
|
|
980
|
+
return A(R, T, f);
|
|
986
981
|
},
|
|
987
982
|
/**
|
|
988
983
|
* Method to close RTC connection
|
|
989
984
|
*/
|
|
990
985
|
async disconnect() {
|
|
991
|
-
var
|
|
986
|
+
var f;
|
|
992
987
|
if (R) {
|
|
993
|
-
const g = se(
|
|
994
|
-
if (
|
|
988
|
+
const g = se(m.iceConnectionState);
|
|
989
|
+
if (m) {
|
|
995
990
|
if (g === I.New) {
|
|
996
991
|
clearInterval(B);
|
|
997
992
|
return;
|
|
998
993
|
}
|
|
999
|
-
|
|
994
|
+
m.close(), m.oniceconnectionstatechange = null, m.onnegotiationneeded = null, m.onicecandidate = null, m.ontrack = null;
|
|
1000
995
|
}
|
|
1001
996
|
try {
|
|
1002
997
|
g === I.Connected && await P(R, T).catch((S) => {
|
|
@@ -1004,13 +999,13 @@ async function yt(e, t, {
|
|
|
1004
999
|
} catch (S) {
|
|
1005
1000
|
b("Error on close stream connection", S);
|
|
1006
1001
|
}
|
|
1007
|
-
(
|
|
1002
|
+
(f = r.onAgentActivityStateChange) == null || f.call(r, X.Idle), clearInterval(B);
|
|
1008
1003
|
}
|
|
1009
1004
|
},
|
|
1010
1005
|
/**
|
|
1011
1006
|
* Method to send data channel messages to the server
|
|
1012
1007
|
*/
|
|
1013
|
-
sendDataChannelMessage(
|
|
1008
|
+
sendDataChannelMessage(f) {
|
|
1014
1009
|
var g, S;
|
|
1015
1010
|
if (!a || D.readyState !== "open") {
|
|
1016
1011
|
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"), {
|
|
@@ -1019,7 +1014,7 @@ async function yt(e, t, {
|
|
|
1019
1014
|
return;
|
|
1020
1015
|
}
|
|
1021
1016
|
try {
|
|
1022
|
-
D.send(
|
|
1017
|
+
D.send(f);
|
|
1023
1018
|
} catch (Y) {
|
|
1024
1019
|
b("Error sending data channel message", Y), (S = r.onError) == null || S.call(r, Y, {
|
|
1025
1020
|
streamId: R
|
|
@@ -1035,7 +1030,7 @@ async function yt(e, t, {
|
|
|
1035
1030
|
*/
|
|
1036
1031
|
streamId: R,
|
|
1037
1032
|
streamType: v,
|
|
1038
|
-
interruptAvailable:
|
|
1033
|
+
interruptAvailable: w
|
|
1039
1034
|
};
|
|
1040
1035
|
}
|
|
1041
1036
|
function vt(e, t) {
|
|
@@ -1104,8 +1099,8 @@ function St(e, t, n) {
|
|
|
1104
1099
|
(s = (a = t.callbacks).onConnectionStateChange) == null || s.call(a, c), c === I.Connected && r(i);
|
|
1105
1100
|
},
|
|
1106
1101
|
onVideoStateChange: (c, a) => {
|
|
1107
|
-
var s,
|
|
1108
|
-
(
|
|
1102
|
+
var s, u;
|
|
1103
|
+
(u = (s = t.callbacks).onVideoStateChange) == null || u.call(s, c), kt(c, e, a, n, i.streamType);
|
|
1109
1104
|
},
|
|
1110
1105
|
onAgentActivityStateChange: (c) => {
|
|
1111
1106
|
var a, s;
|
|
@@ -1119,12 +1114,12 @@ function St(e, t, n) {
|
|
|
1119
1114
|
});
|
|
1120
1115
|
}
|
|
1121
1116
|
async function It(e, t, n, r, o) {
|
|
1122
|
-
var s,
|
|
1117
|
+
var s, u, d, y;
|
|
1123
1118
|
const {
|
|
1124
1119
|
chat: i,
|
|
1125
1120
|
chatMode: c
|
|
1126
|
-
} = await
|
|
1127
|
-
if (c && c !== t.mode && (t.mode = c, (
|
|
1121
|
+
} = await pe(e, n, r, t.mode, t.persistentChat, o);
|
|
1122
|
+
if (c && c !== t.mode && (t.mode = c, (u = (s = t.callbacks).onModeChange) == null || u.call(s, c), c === M.TextOnly))
|
|
1128
1123
|
return (y = (d = t.callbacks).onError) == null || y.call(d, new Ce(c)), {
|
|
1129
1124
|
chat: i
|
|
1130
1125
|
};
|
|
@@ -1149,36 +1144,36 @@ async function Et(e, t) {
|
|
|
1149
1144
|
s.track("agent-sdk", {
|
|
1150
1145
|
event: "init"
|
|
1151
1146
|
});
|
|
1152
|
-
const
|
|
1147
|
+
const u = me(t.auth, c, t.callbacks.onError), d = await u.getById(e);
|
|
1153
1148
|
s.enrich(Ue(d));
|
|
1154
1149
|
const {
|
|
1155
1150
|
onMessage: y,
|
|
1156
1151
|
clearQueue: A
|
|
1157
1152
|
} = rt(s, a, t, d, () => {
|
|
1158
|
-
var
|
|
1159
|
-
return (
|
|
1153
|
+
var l;
|
|
1154
|
+
return (l = a.socketManager) == null ? void 0 : l.disconnect();
|
|
1160
1155
|
});
|
|
1161
1156
|
a.messages = Xe(t.initialMessages), (K = (U = t.callbacks).onNewMessage) == null || K.call(U, [...a.messages], "answer");
|
|
1162
|
-
const P = (
|
|
1163
|
-
r =
|
|
1157
|
+
const P = (l) => {
|
|
1158
|
+
r = l;
|
|
1164
1159
|
};
|
|
1165
1160
|
s.track("agent-sdk", {
|
|
1166
1161
|
event: "loaded",
|
|
1167
1162
|
...We(d)
|
|
1168
1163
|
});
|
|
1169
|
-
async function x(
|
|
1164
|
+
async function x(l) {
|
|
1170
1165
|
var _, $, B, k, E, C, L;
|
|
1171
|
-
($ = (_ = t.callbacks).onConnectionStateChange) == null || $.call(_, I.Connecting), N.reset(),
|
|
1172
|
-
const
|
|
1166
|
+
($ = (_ = t.callbacks).onConnectionStateChange) == null || $.call(_, I.Connecting), N.reset(), l && !n && (delete a.chat, (k = (B = t.callbacks).onNewMessage) == null || k.call(B, [...a.messages], "answer"));
|
|
1167
|
+
const w = t.mode === M.DirectPlayback ? Promise.resolve(void 0) : Ge(t.auth, i, {
|
|
1173
1168
|
onMessage: y,
|
|
1174
1169
|
onError: t.callbacks.onError
|
|
1175
|
-
}),
|
|
1170
|
+
}), m = te(() => It(d, {
|
|
1176
1171
|
...t,
|
|
1177
1172
|
callbacks: {
|
|
1178
1173
|
...t.callbacks,
|
|
1179
1174
|
onVideoIdChange: P
|
|
1180
1175
|
}
|
|
1181
|
-
},
|
|
1176
|
+
}, u, s, a.chat), {
|
|
1182
1177
|
limit: 3,
|
|
1183
1178
|
timeout: $e,
|
|
1184
1179
|
timeoutErrorMessage: "Timeout initializing the stream",
|
|
@@ -1186,88 +1181,73 @@ async function Et(e, t) {
|
|
|
1186
1181
|
shouldRetryFn: (z) => (z == null ? void 0 : z.message) !== "Could not connect" && z.status !== 429,
|
|
1187
1182
|
delayMs: 1e3
|
|
1188
1183
|
}).catch((z) => {
|
|
1189
|
-
var J,
|
|
1190
|
-
throw R(M.Maintenance), (
|
|
1184
|
+
var J, f;
|
|
1185
|
+
throw R(M.Maintenance), (f = (J = t.callbacks).onConnectionStateChange) == null || f.call(J, I.Fail), z;
|
|
1191
1186
|
}), [D, {
|
|
1192
1187
|
streamingManager: v,
|
|
1193
|
-
chat:
|
|
1194
|
-
}] = await Promise.all([
|
|
1195
|
-
|
|
1188
|
+
chat: p
|
|
1189
|
+
}] = await Promise.all([w, m]);
|
|
1190
|
+
p && p.id !== ((E = a.chat) == null ? void 0 : E.id) && ((L = (C = t.callbacks).onNewChat) == null || L.call(C, p.id)), a.streamingManager = v, a.socketManager = D, a.chat = p, n = !1, R((p == null ? void 0 : p.chat_mode) ?? t.mode ?? M.Functional);
|
|
1196
1191
|
}
|
|
1197
1192
|
async function F() {
|
|
1198
|
-
var
|
|
1199
|
-
(
|
|
1193
|
+
var l, w, m, D;
|
|
1194
|
+
(l = a.socketManager) == null || l.disconnect(), await ((w = a.streamingManager) == null ? void 0 : w.disconnect()), delete a.streamingManager, delete a.socketManager, (D = (m = t.callbacks).onConnectionStateChange) == null || D.call(m, I.Disconnected);
|
|
1200
1195
|
}
|
|
1201
|
-
async function R(
|
|
1202
|
-
var
|
|
1203
|
-
|
|
1204
|
-
mode:
|
|
1205
|
-
}), a.chatMode =
|
|
1196
|
+
async function R(l) {
|
|
1197
|
+
var w, m;
|
|
1198
|
+
l !== a.chatMode && (s.track("agent-mode-change", {
|
|
1199
|
+
mode: l
|
|
1200
|
+
}), a.chatMode = l, a.chatMode !== M.Functional && await F(), (m = (w = t.callbacks).onModeChange) == null || m.call(w, l));
|
|
1206
1201
|
}
|
|
1207
1202
|
return {
|
|
1208
1203
|
agent: d,
|
|
1209
1204
|
getStreamType: () => {
|
|
1210
|
-
var
|
|
1211
|
-
return (
|
|
1205
|
+
var l;
|
|
1206
|
+
return (l = a.streamingManager) == null ? void 0 : l.streamType;
|
|
1212
1207
|
},
|
|
1213
1208
|
getIsInterruptAvailable: () => {
|
|
1214
|
-
var
|
|
1215
|
-
return ((
|
|
1209
|
+
var l;
|
|
1210
|
+
return ((l = a.streamingManager) == null ? void 0 : l.interruptAvailable) ?? !1;
|
|
1216
1211
|
},
|
|
1217
1212
|
starterMessages: ((T = d.knowledge) == null ? void 0 : T.starter_message) || [],
|
|
1218
|
-
getSTTToken: () =>
|
|
1213
|
+
getSTTToken: () => u.getSTTToken(d.id),
|
|
1219
1214
|
changeMode: R,
|
|
1220
1215
|
enrichAnalytics: s.enrich,
|
|
1221
1216
|
async connect() {
|
|
1222
|
-
var
|
|
1217
|
+
var l;
|
|
1223
1218
|
await x(!0), s.track("agent-chat", {
|
|
1224
1219
|
event: "connect",
|
|
1225
|
-
chatId: (
|
|
1220
|
+
chatId: (l = a.chat) == null ? void 0 : l.id,
|
|
1226
1221
|
agentId: d.id,
|
|
1227
|
-
mode: a.chatMode
|
|
1228
|
-
access: d.access,
|
|
1229
|
-
name: d.preview_name,
|
|
1230
|
-
...d.access === "public" ? {
|
|
1231
|
-
from: "agent-template"
|
|
1232
|
-
} : {}
|
|
1222
|
+
mode: a.chatMode
|
|
1233
1223
|
});
|
|
1234
1224
|
},
|
|
1235
1225
|
async reconnect() {
|
|
1236
|
-
var
|
|
1226
|
+
var l;
|
|
1237
1227
|
await F(), await x(!1), s.track("agent-chat", {
|
|
1238
1228
|
event: "reconnect",
|
|
1239
|
-
chatId: (
|
|
1229
|
+
chatId: (l = a.chat) == null ? void 0 : l.id,
|
|
1240
1230
|
agentId: d.id,
|
|
1241
|
-
mode: a.chatMode
|
|
1242
|
-
access: d.access,
|
|
1243
|
-
name: d.preview_name,
|
|
1244
|
-
...d.access === "public" ? {
|
|
1245
|
-
from: "agent-template"
|
|
1246
|
-
} : {}
|
|
1231
|
+
mode: a.chatMode
|
|
1247
1232
|
});
|
|
1248
1233
|
},
|
|
1249
1234
|
async disconnect() {
|
|
1250
|
-
var
|
|
1235
|
+
var l;
|
|
1251
1236
|
await F(), s.track("agent-chat", {
|
|
1252
1237
|
event: "disconnect",
|
|
1253
|
-
chatId: (
|
|
1238
|
+
chatId: (l = a.chat) == null ? void 0 : l.id,
|
|
1254
1239
|
agentId: d.id,
|
|
1255
|
-
mode: a.chatMode
|
|
1256
|
-
access: d.access,
|
|
1257
|
-
name: d.preview_name,
|
|
1258
|
-
...d.access === "public" ? {
|
|
1259
|
-
from: "agent-template"
|
|
1260
|
-
} : {}
|
|
1240
|
+
mode: a.chatMode
|
|
1261
1241
|
});
|
|
1262
1242
|
},
|
|
1263
|
-
async chat(
|
|
1264
|
-
var v,
|
|
1265
|
-
const
|
|
1266
|
-
if (
|
|
1243
|
+
async chat(l) {
|
|
1244
|
+
var v, p, _, $, B;
|
|
1245
|
+
const w = () => {
|
|
1246
|
+
if (ue(t.mode))
|
|
1267
1247
|
throw new H(`${t.mode} is enabled, chat is disabled`);
|
|
1268
|
-
if (
|
|
1248
|
+
if (l.length >= 800)
|
|
1269
1249
|
throw new H("Message cannot be more than 800 characters");
|
|
1270
|
-
if (
|
|
1250
|
+
if (l.length === 0)
|
|
1271
1251
|
throw new H("Message cannot be empty");
|
|
1272
1252
|
if (a.chatMode === M.Maintenance)
|
|
1273
1253
|
throw new H("Chat is in maintenance mode");
|
|
@@ -1277,10 +1257,10 @@ async function Et(e, t) {
|
|
|
1277
1257
|
if (!a.chat)
|
|
1278
1258
|
throw new H("Chat is not initialized");
|
|
1279
1259
|
}
|
|
1280
|
-
},
|
|
1260
|
+
}, m = async () => {
|
|
1281
1261
|
var k, E;
|
|
1282
1262
|
if (!a.chat) {
|
|
1283
|
-
const C = await
|
|
1263
|
+
const C = await pe(d, u, s, a.chatMode, t.persistentChat);
|
|
1284
1264
|
if (!C.chat)
|
|
1285
1265
|
throw new De(a.chatMode, !!t.persistentChat);
|
|
1286
1266
|
a.chat = C.chat, (E = (k = t.callbacks).onNewChat) == null || E.call(k, a.chat.id);
|
|
@@ -1288,7 +1268,7 @@ async function Et(e, t) {
|
|
|
1288
1268
|
return a.chat.id;
|
|
1289
1269
|
}, D = async (k, E) => te(() => {
|
|
1290
1270
|
var C, L;
|
|
1291
|
-
return
|
|
1271
|
+
return u.chat(d.id, E, {
|
|
1292
1272
|
chatMode: a.chatMode,
|
|
1293
1273
|
streamId: (C = a.streamingManager) == null ? void 0 : C.streamId,
|
|
1294
1274
|
sessionId: (L = a.streamingManager) == null ? void 0 : L.sessionId,
|
|
@@ -1297,28 +1277,28 @@ async function Et(e, t) {
|
|
|
1297
1277
|
...J
|
|
1298
1278
|
}) => J)
|
|
1299
1279
|
}, {
|
|
1300
|
-
...
|
|
1280
|
+
...we(a.chatMode),
|
|
1301
1281
|
skipErrorHandler: !0
|
|
1302
1282
|
});
|
|
1303
1283
|
}, {
|
|
1304
1284
|
limit: 2,
|
|
1305
1285
|
shouldRetryFn: (C) => {
|
|
1306
|
-
var J,
|
|
1286
|
+
var J, f, g, S;
|
|
1307
1287
|
const L = (J = C == null ? void 0 : C.message) == null ? void 0 : J.includes("missing or invalid session_id");
|
|
1308
|
-
return !((
|
|
1288
|
+
return !((f = C == null ? void 0 : C.message) == null ? void 0 : f.includes("Stream Error")) && !L ? ((S = (g = t.callbacks).onError) == null || S.call(g, C), !1) : !0;
|
|
1309
1289
|
},
|
|
1310
1290
|
onRetry: async () => {
|
|
1311
1291
|
await F(), await x(!1);
|
|
1312
1292
|
}
|
|
1313
1293
|
});
|
|
1314
1294
|
try {
|
|
1315
|
-
A(),
|
|
1295
|
+
A(), w(), a.messages.push({
|
|
1316
1296
|
id: V(),
|
|
1317
1297
|
role: "user",
|
|
1318
|
-
content:
|
|
1298
|
+
content: l,
|
|
1319
1299
|
created_at: new Date(N.update()).toISOString()
|
|
1320
|
-
}), (
|
|
1321
|
-
const k = await
|
|
1300
|
+
}), (p = (v = t.callbacks).onNewMessage) == null || p.call(v, [...a.messages], "user");
|
|
1301
|
+
const k = await m(), E = await D([...a.messages], k);
|
|
1322
1302
|
return a.messages.push({
|
|
1323
1303
|
id: V(),
|
|
1324
1304
|
role: "assistant",
|
|
@@ -1343,77 +1323,77 @@ async function Et(e, t) {
|
|
|
1343
1323
|
}), k;
|
|
1344
1324
|
}
|
|
1345
1325
|
},
|
|
1346
|
-
rate(
|
|
1347
|
-
var
|
|
1348
|
-
const D = a.messages.find((k) => k.id ===
|
|
1326
|
+
rate(l, w, m) {
|
|
1327
|
+
var p, _, $, B;
|
|
1328
|
+
const D = a.messages.find((k) => k.id === l);
|
|
1349
1329
|
if (a.chat) {
|
|
1350
1330
|
if (!D)
|
|
1351
1331
|
throw new Error("Message not found");
|
|
1352
1332
|
} else
|
|
1353
1333
|
throw new Error("Chat is not initialized");
|
|
1354
|
-
const v = ((
|
|
1334
|
+
const v = ((p = D.matches) == null ? void 0 : p.map((k) => [k.document_id, k.id])) ?? [];
|
|
1355
1335
|
return s.track("agent-rate", {
|
|
1356
|
-
event:
|
|
1357
|
-
thumb:
|
|
1336
|
+
event: m ? "update" : "create",
|
|
1337
|
+
thumb: w === 1 ? "up" : "down",
|
|
1358
1338
|
knowledge_id: ((_ = d.knowledge) == null ? void 0 : _.id) ?? "",
|
|
1359
1339
|
mode: a.chatMode,
|
|
1360
1340
|
matches: v,
|
|
1361
|
-
score:
|
|
1362
|
-
}),
|
|
1341
|
+
score: w
|
|
1342
|
+
}), m ? u.updateRating(d.id, a.chat.id, m, {
|
|
1363
1343
|
knowledge_id: (($ = d.knowledge) == null ? void 0 : $.id) ?? "",
|
|
1364
|
-
message_id:
|
|
1344
|
+
message_id: l,
|
|
1365
1345
|
matches: v,
|
|
1366
|
-
score:
|
|
1367
|
-
}) :
|
|
1346
|
+
score: w
|
|
1347
|
+
}) : u.createRating(d.id, a.chat.id, {
|
|
1368
1348
|
knowledge_id: ((B = d.knowledge) == null ? void 0 : B.id) ?? "",
|
|
1369
|
-
message_id:
|
|
1349
|
+
message_id: l,
|
|
1370
1350
|
matches: v,
|
|
1371
|
-
score:
|
|
1351
|
+
score: w
|
|
1372
1352
|
});
|
|
1373
1353
|
},
|
|
1374
|
-
deleteRate(
|
|
1375
|
-
var
|
|
1354
|
+
deleteRate(l) {
|
|
1355
|
+
var w;
|
|
1376
1356
|
if (!a.chat)
|
|
1377
1357
|
throw new Error("Chat is not initialized");
|
|
1378
1358
|
return s.track("agent-rate-delete", {
|
|
1379
1359
|
type: "text",
|
|
1380
|
-
chat_id: (
|
|
1381
|
-
id:
|
|
1360
|
+
chat_id: (w = a.chat) == null ? void 0 : w.id,
|
|
1361
|
+
id: l,
|
|
1382
1362
|
mode: a.chatMode
|
|
1383
|
-
}),
|
|
1363
|
+
}), u.deleteRating(d.id, a.chat.id, l);
|
|
1384
1364
|
},
|
|
1385
|
-
async speak(
|
|
1386
|
-
var v,
|
|
1387
|
-
function
|
|
1388
|
-
if (typeof
|
|
1365
|
+
async speak(l) {
|
|
1366
|
+
var v, p, _;
|
|
1367
|
+
function w() {
|
|
1368
|
+
if (typeof l == "string") {
|
|
1389
1369
|
if (!d.presenter.voice)
|
|
1390
1370
|
throw new Error("Presenter voice is not initialized");
|
|
1391
1371
|
return {
|
|
1392
1372
|
type: "text",
|
|
1393
1373
|
provider: d.presenter.voice,
|
|
1394
|
-
input:
|
|
1374
|
+
input: l,
|
|
1395
1375
|
ssml: !1
|
|
1396
1376
|
};
|
|
1397
1377
|
}
|
|
1398
|
-
if (
|
|
1378
|
+
if (l.type === "text" && !l.provider) {
|
|
1399
1379
|
if (!d.presenter.voice)
|
|
1400
1380
|
throw new Error("Presenter voice is not initialized");
|
|
1401
1381
|
return {
|
|
1402
1382
|
type: "text",
|
|
1403
1383
|
provider: d.presenter.voice,
|
|
1404
|
-
input:
|
|
1405
|
-
ssml:
|
|
1384
|
+
input: l.input,
|
|
1385
|
+
ssml: l.ssml
|
|
1406
1386
|
};
|
|
1407
1387
|
}
|
|
1408
|
-
return
|
|
1388
|
+
return l;
|
|
1409
1389
|
}
|
|
1410
|
-
const
|
|
1411
|
-
if (s.track("agent-speak",
|
|
1390
|
+
const m = w();
|
|
1391
|
+
if (s.track("agent-speak", m), N.update(), a.messages && m.type === "text" && (a.messages.push({
|
|
1412
1392
|
id: V(),
|
|
1413
1393
|
role: "assistant",
|
|
1414
|
-
content:
|
|
1394
|
+
content: m.input,
|
|
1415
1395
|
created_at: new Date(N.get(!0)).toISOString()
|
|
1416
|
-
}), (
|
|
1396
|
+
}), (p = (v = t.callbacks).onNewMessage) == null || p.call(v, [...a.messages], "answer")), Ne(a.chatMode))
|
|
1417
1397
|
return {
|
|
1418
1398
|
duration: 0,
|
|
1419
1399
|
video_id: "",
|
|
@@ -1422,7 +1402,7 @@ async function Et(e, t) {
|
|
|
1422
1402
|
if (!a.streamingManager)
|
|
1423
1403
|
throw new Error("Please connect to the agent first");
|
|
1424
1404
|
return a.streamingManager.speak({
|
|
1425
|
-
script:
|
|
1405
|
+
script: m,
|
|
1426
1406
|
metadata: {
|
|
1427
1407
|
chat_id: (_ = a.chat) == null ? void 0 : _.id,
|
|
1428
1408
|
agent_id: d.id
|
|
@@ -1430,13 +1410,13 @@ async function Et(e, t) {
|
|
|
1430
1410
|
});
|
|
1431
1411
|
},
|
|
1432
1412
|
async interrupt({
|
|
1433
|
-
type:
|
|
1413
|
+
type: l
|
|
1434
1414
|
}) {
|
|
1435
|
-
var
|
|
1436
|
-
Ye(a.streamingManager, (
|
|
1437
|
-
const
|
|
1415
|
+
var m, D, v, p, _;
|
|
1416
|
+
Ye(a.streamingManager, (m = a.streamingManager) == null ? void 0 : m.streamType, r);
|
|
1417
|
+
const w = a.messages[a.messages.length - 1];
|
|
1438
1418
|
s.track("agent-video-interrupt", {
|
|
1439
|
-
type:
|
|
1419
|
+
type: l || "click",
|
|
1440
1420
|
stream_id: (D = a.streamingManager) == null ? void 0 : D.streamId,
|
|
1441
1421
|
agent_id: d.id,
|
|
1442
1422
|
owner_id: d.owner_id,
|
|
@@ -1444,14 +1424,14 @@ async function Et(e, t) {
|
|
|
1444
1424
|
message_duration_to_interrupt: N.get(!0),
|
|
1445
1425
|
chat_id: (v = a.chat) == null ? void 0 : v.id,
|
|
1446
1426
|
mode: a.chatMode
|
|
1447
|
-
}),
|
|
1427
|
+
}), w.interrupted = !0, (_ = (p = t.callbacks).onNewMessage) == null || _.call(p, [...a.messages], "answer"), Qe(a.streamingManager, r);
|
|
1448
1428
|
}
|
|
1449
1429
|
};
|
|
1450
1430
|
}
|
|
1451
1431
|
function Mt(e, t, n) {
|
|
1452
1432
|
const {
|
|
1453
1433
|
getById: r
|
|
1454
|
-
} =
|
|
1434
|
+
} = me(t, n || Z);
|
|
1455
1435
|
return r(e);
|
|
1456
1436
|
}
|
|
1457
1437
|
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 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"})});
|
|
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"})});
|