@d-id/client-sdk 1.0.19-beta.62 → 1.0.19-beta.64
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 +92 -92
- package/dist/index.umd.cjs +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -152,11 +152,11 @@ function re(e) {
|
|
|
152
152
|
onOpen: w = null,
|
|
153
153
|
onClose: v = null,
|
|
154
154
|
onError: o = null
|
|
155
|
-
} = n || {},
|
|
156
|
-
|
|
155
|
+
} = n || {}, f = new WebSocket(`${r}?authorization=${W(i)}`);
|
|
156
|
+
f.onmessage = c, f.onclose = v, f.onerror = (d) => {
|
|
157
157
|
console.error(d), o == null || o("Websocket failed to connect", d), t(d);
|
|
158
|
-
},
|
|
159
|
-
w == null || w(d), s(
|
|
158
|
+
}, f.onopen = (d) => {
|
|
159
|
+
w == null || w(d), s(f);
|
|
160
160
|
};
|
|
161
161
|
});
|
|
162
162
|
}
|
|
@@ -321,16 +321,16 @@ function me(e, s) {
|
|
|
321
321
|
w.forEach((v) => {
|
|
322
322
|
if (v.type === "inbound-rtp" && v.kind === "video") {
|
|
323
323
|
if (r = t.length - 1, v && t[r]) {
|
|
324
|
-
const o = v.bytesReceived,
|
|
324
|
+
const o = v.bytesReceived, f = t[r].bytesReceived;
|
|
325
325
|
let d = i;
|
|
326
|
-
i = o -
|
|
326
|
+
i = o - f > 0;
|
|
327
327
|
let l;
|
|
328
328
|
if (d !== i) {
|
|
329
329
|
if (i)
|
|
330
330
|
n = t.length;
|
|
331
331
|
else {
|
|
332
|
-
const y = t.slice(n),
|
|
333
|
-
l = de(y,
|
|
332
|
+
const y = t.slice(n), m = n === 0 ? void 0 : t[n - 1];
|
|
333
|
+
l = de(y, m), l = l.sort((u, a) => a.packetsLost - u.packetsLost).slice(0, 5);
|
|
334
334
|
}
|
|
335
335
|
s == null || s(i ? x.Start : x.Stop, l);
|
|
336
336
|
}
|
|
@@ -354,89 +354,89 @@ async function ue(e, {
|
|
|
354
354
|
startConnection: w,
|
|
355
355
|
sendStreamRequest: v,
|
|
356
356
|
close: o,
|
|
357
|
-
createStream:
|
|
357
|
+
createStream: f,
|
|
358
358
|
addIceCandidate: d
|
|
359
359
|
} = e.videoType === L.Clip ? ae(n, i) : oe(n, i), {
|
|
360
360
|
id: l,
|
|
361
361
|
offer: y,
|
|
362
|
-
ice_servers:
|
|
363
|
-
session_id:
|
|
364
|
-
} = await
|
|
365
|
-
iceServers:
|
|
362
|
+
ice_servers: m,
|
|
363
|
+
session_id: u
|
|
364
|
+
} = await f(e), a = new ce({
|
|
365
|
+
iceServers: m
|
|
366
366
|
}), k = a.createDataChannel("JanusDataChannel");
|
|
367
|
-
if (!
|
|
367
|
+
if (!u)
|
|
368
368
|
throw new Error("Could not create session_id");
|
|
369
369
|
const S = me(a, t.onVideoStateChange);
|
|
370
|
-
a.onicecandidate = (
|
|
371
|
-
M("peerConnection.onicecandidate",
|
|
372
|
-
candidate:
|
|
373
|
-
sdpMid:
|
|
374
|
-
sdpMLineIndex:
|
|
375
|
-
},
|
|
370
|
+
a.onicecandidate = (g) => {
|
|
371
|
+
M("peerConnection.onicecandidate", g), g.candidate && g.candidate.sdpMid && g.candidate.sdpMLineIndex !== null ? d(l, {
|
|
372
|
+
candidate: g.candidate.candidate,
|
|
373
|
+
sdpMid: g.candidate.sdpMid,
|
|
374
|
+
sdpMLineIndex: g.candidate.sdpMLineIndex
|
|
375
|
+
}, u) : d(l, {
|
|
376
376
|
candidate: null
|
|
377
|
-
},
|
|
377
|
+
}, u);
|
|
378
378
|
}, a.oniceconnectionstatechange = () => {
|
|
379
|
-
var
|
|
379
|
+
var p;
|
|
380
380
|
M("peerConnection.oniceconnectionstatechange => " + a.iceConnectionState);
|
|
381
|
-
const
|
|
382
|
-
e.videoType === L.Talk &&
|
|
381
|
+
const g = ge(a.iceConnectionState);
|
|
382
|
+
e.videoType === L.Talk && g === I.Connected ? c = setTimeout(() => {
|
|
383
383
|
var R;
|
|
384
384
|
(R = t.onConnectionStateChange) == null || R.call(t, I.Connected);
|
|
385
|
-
}, 5e3) : (clearTimeout(c), (
|
|
386
|
-
}, a.ontrack = (
|
|
387
|
-
var
|
|
388
|
-
M("peerConnection.ontrack",
|
|
389
|
-
}, k.onmessage = (
|
|
390
|
-
var
|
|
385
|
+
}, 5e3) : (clearTimeout(c), (p = t.onConnectionStateChange) == null || p.call(t, g));
|
|
386
|
+
}, a.ontrack = (g) => {
|
|
387
|
+
var p;
|
|
388
|
+
M("peerConnection.ontrack", g), (p = t.onSrcObjectReady) == null || p.call(t, g.streams[0]);
|
|
389
|
+
}, k.onmessage = (g) => {
|
|
390
|
+
var p, R;
|
|
391
391
|
if (k.readyState === "open") {
|
|
392
|
-
const [
|
|
393
|
-
console.log("data", _),
|
|
392
|
+
const [h, _] = g.data.split(":");
|
|
393
|
+
console.log("data", h, _, g), h === $.StreamStarted ? r == null || r.track("agent-video", {
|
|
394
394
|
event: "start",
|
|
395
395
|
..._
|
|
396
|
-
}) :
|
|
396
|
+
}) : h === $.StreamDone ? r == null || r.track("agent-video", {
|
|
397
397
|
event: "stop",
|
|
398
398
|
rtcStats: _ ?? [],
|
|
399
399
|
..._
|
|
400
|
-
}) :
|
|
401
|
-
event:
|
|
400
|
+
}) : h === $.StreamFailed ? ((p = t.onVideoStateChange) == null || p.call(t, x.Stop, {
|
|
401
|
+
event: h,
|
|
402
402
|
data: _
|
|
403
|
-
}), clearInterval(S)) :
|
|
403
|
+
}), clearInterval(S)) : h === $.StreamReady ? (clearTimeout(c), (R = t.onConnectionStateChange) == null || R.call(t, I.Connected)) : h === $.StreamCreated ? r == null || r.track("agent-video", {
|
|
404
404
|
event: "created",
|
|
405
405
|
..._
|
|
406
|
-
}) :
|
|
406
|
+
}) : h === $.StreamVideoCreated ? r == null || r.track("agent-video", {
|
|
407
407
|
event: "video-created",
|
|
408
408
|
..._
|
|
409
|
-
}) :
|
|
409
|
+
}) : h === $.StreamVideoDone ? r == null || r.track("agent-video", {
|
|
410
410
|
event: "video-done",
|
|
411
411
|
rtcStats: _ ?? [],
|
|
412
412
|
..._
|
|
413
|
-
}) :
|
|
413
|
+
}) : h === $.StreamVideoError && (r == null || r.track("agent-video", {
|
|
414
414
|
event: "video-error",
|
|
415
415
|
..._
|
|
416
416
|
}));
|
|
417
417
|
}
|
|
418
418
|
}, await a.setRemoteDescription(y), M("set remote description OK");
|
|
419
419
|
const C = await a.createAnswer();
|
|
420
|
-
return M("create answer OK"), await a.setLocalDescription(C), M("set local description OK"), await w(l, C,
|
|
420
|
+
return M("create answer OK"), await a.setLocalDescription(C), M("set local description OK"), await w(l, C, u), M("start connection OK"), {
|
|
421
421
|
/**
|
|
422
422
|
* Method to send request to server to get clip or talk depend on you payload
|
|
423
423
|
* @param payload
|
|
424
424
|
*/
|
|
425
|
-
speak(
|
|
426
|
-
return v(l,
|
|
425
|
+
speak(g) {
|
|
426
|
+
return v(l, u, g);
|
|
427
427
|
},
|
|
428
428
|
/**
|
|
429
429
|
* Method to close RTC connection
|
|
430
430
|
*/
|
|
431
431
|
async disconnect() {
|
|
432
|
-
var
|
|
433
|
-
l && (a && (a.close(), a.oniceconnectionstatechange = null, a.onnegotiationneeded = null, a.onicecandidate = null, a.ontrack = null), await o(l,
|
|
434
|
-
}), (
|
|
432
|
+
var g, p;
|
|
433
|
+
l && (a && (a.close(), a.oniceconnectionstatechange = null, a.onnegotiationneeded = null, a.onicecandidate = null, a.ontrack = null), await o(l, u).catch((R) => {
|
|
434
|
+
}), (g = t.onConnectionStateChange) == null || g.call(t, I.New), (p = t.onVideoStateChange) == null || p.call(t, x.Stop), clearInterval(S));
|
|
435
435
|
},
|
|
436
436
|
/**
|
|
437
437
|
* Session identifier information, should be returned in the body of all streaming requests
|
|
438
438
|
*/
|
|
439
|
-
sessionId:
|
|
439
|
+
sessionId: u,
|
|
440
440
|
/**
|
|
441
441
|
* Id of current RTC stream
|
|
442
442
|
*/
|
|
@@ -522,7 +522,7 @@ function pe(e, s, t, n, r) {
|
|
|
522
522
|
callbacks: {
|
|
523
523
|
...s.callbacks,
|
|
524
524
|
onConnectionStateChange: async (o) => {
|
|
525
|
-
var
|
|
525
|
+
var f, d;
|
|
526
526
|
if (o === I.Connected)
|
|
527
527
|
try {
|
|
528
528
|
w || (w = await t.newChat(e.id), n.track("agent-chat", {
|
|
@@ -538,14 +538,14 @@ function pe(e, s, t, n, r) {
|
|
|
538
538
|
}
|
|
539
539
|
else
|
|
540
540
|
o === I.Fail && c(new Error("Cannot create connection"));
|
|
541
|
-
(d = (
|
|
541
|
+
(d = (f = s.callbacks).onConnectionStateChange) == null || d.call(f, o);
|
|
542
542
|
},
|
|
543
|
-
onVideoStateChange(o,
|
|
543
|
+
onVideoStateChange(o, f) {
|
|
544
544
|
var d, l;
|
|
545
545
|
n.track("agent-video", {
|
|
546
546
|
event: o,
|
|
547
|
-
rtc_stats:
|
|
548
|
-
}), (l = (d = s.callbacks).onVideoStateChange) == null || l.call(d, o,
|
|
547
|
+
rtc_stats: f ?? []
|
|
548
|
+
}), (l = (d = s.callbacks).onVideoStateChange) == null || l.call(d, o, f);
|
|
549
549
|
}
|
|
550
550
|
}
|
|
551
551
|
}).catch(c);
|
|
@@ -572,7 +572,7 @@ async function Se(e, s) {
|
|
|
572
572
|
var l, y;
|
|
573
573
|
const t = {
|
|
574
574
|
messages: []
|
|
575
|
-
}, n = s.wsURL || Y, r = s.baseURL || A, i = s.mixpanelKey || Z, c = H(s.auth, r), w = te(s.auth, r), v = ee(s.auth, r), o = await c.getById(e),
|
|
575
|
+
}, n = s.wsURL || Y, r = s.baseURL || A, i = s.mixpanelKey || Z, c = H(s.auth, r), w = te(s.auth, r), v = ee(s.auth, r), o = await c.getById(e), f = await he(o, v);
|
|
576
576
|
t.messages = b(o), (y = (l = s.callbacks).onNewMessage) == null || y.call(l, t.messages);
|
|
577
577
|
const d = le({
|
|
578
578
|
mixPanelKey: i,
|
|
@@ -584,44 +584,44 @@ async function Se(e, s) {
|
|
|
584
584
|
...we(o)
|
|
585
585
|
}), {
|
|
586
586
|
agent: o,
|
|
587
|
-
starterMessages:
|
|
587
|
+
starterMessages: f,
|
|
588
588
|
async connect() {
|
|
589
|
-
var k, S, C,
|
|
590
|
-
const
|
|
591
|
-
onMessage: (R,
|
|
589
|
+
var k, S, C, g, p;
|
|
590
|
+
const m = await se(s.auth, n, {
|
|
591
|
+
onMessage: (R, h) => {
|
|
592
592
|
var _, N;
|
|
593
|
-
if ("content" in
|
|
593
|
+
if ("content" in h) {
|
|
594
594
|
const {
|
|
595
595
|
content: O
|
|
596
|
-
} =
|
|
596
|
+
} = h, E = t.messages[t.messages.length - 1];
|
|
597
597
|
(E == null ? void 0 : E.role) === "assistant" && (E.content = R === T.Partial ? E.content + O : O), R === T.Complete && d.track("agent-message-received", {
|
|
598
598
|
messages: t.messages.length
|
|
599
599
|
}), (N = (_ = s.callbacks).onNewMessage) == null || N.call(_, t.messages);
|
|
600
600
|
}
|
|
601
601
|
}
|
|
602
602
|
}), {
|
|
603
|
-
streamingManager:
|
|
603
|
+
streamingManager: u,
|
|
604
604
|
chat: a
|
|
605
605
|
} = await pe(o, s, c, d, t.chat);
|
|
606
|
-
t.messages = b(o), (S = (k = s.callbacks).onNewMessage) == null || S.call(k, t.messages), a != null && a.id && a.id !== ((C = t.chat) == null ? void 0 : C.id) && ((
|
|
606
|
+
t.messages = b(o), (S = (k = s.callbacks).onNewMessage) == null || S.call(k, t.messages), a != null && a.id && a.id !== ((C = t.chat) == null ? void 0 : C.id) && ((p = (g = s.callbacks).onNewChat) == null || p.call(g, a == null ? void 0 : a.id)), t.streamingManager = u, t.socketManager = m, t.chat = a, d.track("agent-chat", {
|
|
607
607
|
event: "connect",
|
|
608
608
|
chatId: a.id,
|
|
609
609
|
agentId: o.id
|
|
610
610
|
});
|
|
611
611
|
},
|
|
612
612
|
async disconnect() {
|
|
613
|
-
var
|
|
614
|
-
(
|
|
613
|
+
var m, u, a;
|
|
614
|
+
(m = t.socketManager) == null || m.disconnect(), await ((u = t.streamingManager) == null ? void 0 : u.disconnect()), d.track("agent-chat", {
|
|
615
615
|
event: "disconnect",
|
|
616
616
|
chatId: (a = t.chat) == null ? void 0 : a.id,
|
|
617
617
|
agentId: o.id
|
|
618
618
|
});
|
|
619
619
|
},
|
|
620
|
-
async chat(
|
|
620
|
+
async chat(m, u = !1) {
|
|
621
621
|
var a, k;
|
|
622
622
|
try {
|
|
623
623
|
const S = Date.now();
|
|
624
|
-
if (
|
|
624
|
+
if (m.length === 0)
|
|
625
625
|
throw new Error("Message cannot be empty");
|
|
626
626
|
if (!t.chat)
|
|
627
627
|
throw new Error("Chat is not initialized");
|
|
@@ -630,14 +630,14 @@ async function Se(e, s) {
|
|
|
630
630
|
t.messages.push({
|
|
631
631
|
id: K(),
|
|
632
632
|
role: "user",
|
|
633
|
-
content:
|
|
633
|
+
content: m,
|
|
634
634
|
created_at: new Date(S).toISOString()
|
|
635
635
|
});
|
|
636
636
|
const C = await c.chat(o.id, t.chat.id, {
|
|
637
637
|
sessionId: t.streamingManager.sessionId,
|
|
638
638
|
streamId: t.streamingManager.streamId,
|
|
639
639
|
messages: t.messages,
|
|
640
|
-
append_chat:
|
|
640
|
+
append_chat: u
|
|
641
641
|
});
|
|
642
642
|
return d.track("agent-message-send", {
|
|
643
643
|
event: "success",
|
|
@@ -659,64 +659,64 @@ async function Se(e, s) {
|
|
|
659
659
|
}), S;
|
|
660
660
|
}
|
|
661
661
|
},
|
|
662
|
-
rate(
|
|
663
|
-
var C,
|
|
664
|
-
const k = t.messages.find((
|
|
662
|
+
rate(m, u, a) {
|
|
663
|
+
var C, g, p, R;
|
|
664
|
+
const k = t.messages.find((h) => h.id === m);
|
|
665
665
|
if (t.chat) {
|
|
666
666
|
if (!k)
|
|
667
667
|
throw new Error("Message not found");
|
|
668
668
|
} else
|
|
669
669
|
throw new Error("Chat is not initialized");
|
|
670
|
-
const S = ((C = k.matches) == null ? void 0 : C.map((
|
|
670
|
+
const S = ((C = k.matches) == null ? void 0 : C.map((h) => [h.document_id, h.id])) ?? [];
|
|
671
671
|
return d.track("agent-rate", {
|
|
672
672
|
event: a ? "update" : "create",
|
|
673
|
-
thumb:
|
|
674
|
-
knowledge_id: ((
|
|
673
|
+
thumb: u === 1 ? "up" : "down",
|
|
674
|
+
knowledge_id: ((g = o.knowledge) == null ? void 0 : g.id) ?? "",
|
|
675
675
|
matches: S,
|
|
676
|
-
score:
|
|
676
|
+
score: u
|
|
677
677
|
}), a ? w.update(a, {
|
|
678
678
|
agent_id: o.id,
|
|
679
|
-
knowledge_id: ((
|
|
679
|
+
knowledge_id: ((p = o.knowledge) == null ? void 0 : p.id) ?? "",
|
|
680
680
|
chat_id: t.chat.id,
|
|
681
|
-
message_id:
|
|
681
|
+
message_id: m,
|
|
682
682
|
matches: S,
|
|
683
|
-
score:
|
|
683
|
+
score: u
|
|
684
684
|
}) : w.create({
|
|
685
685
|
agent_id: o.id,
|
|
686
686
|
knowledge_id: ((R = o.knowledge) == null ? void 0 : R.id) ?? "",
|
|
687
687
|
chat_id: t.chat.id,
|
|
688
|
-
message_id:
|
|
688
|
+
message_id: m,
|
|
689
689
|
matches: S,
|
|
690
|
-
score:
|
|
690
|
+
score: u
|
|
691
691
|
});
|
|
692
692
|
},
|
|
693
|
-
deleteRate(
|
|
694
|
-
var
|
|
693
|
+
deleteRate(m) {
|
|
694
|
+
var u;
|
|
695
695
|
return d.track("agent-rate-delete", {
|
|
696
696
|
type: "text",
|
|
697
|
-
chat_id: (
|
|
698
|
-
id:
|
|
699
|
-
}), w.delete(
|
|
697
|
+
chat_id: (u = t.chat) == null ? void 0 : u.id,
|
|
698
|
+
id: m
|
|
699
|
+
}), w.delete(m);
|
|
700
700
|
},
|
|
701
|
-
speak(
|
|
701
|
+
speak(m) {
|
|
702
702
|
if (!t.streamingManager)
|
|
703
703
|
throw new Error("Streaming manager is not initialized");
|
|
704
|
-
function
|
|
705
|
-
if (
|
|
704
|
+
function u() {
|
|
705
|
+
if (m.type === "text")
|
|
706
706
|
return {
|
|
707
707
|
type: "text",
|
|
708
|
-
provider:
|
|
709
|
-
input:
|
|
710
|
-
ssml:
|
|
708
|
+
provider: m.provider ? m.provider : o.presenter.voice,
|
|
709
|
+
input: m.input,
|
|
710
|
+
ssml: m.ssml || !1
|
|
711
711
|
};
|
|
712
|
-
if (
|
|
712
|
+
if (m.type === "audio")
|
|
713
713
|
return {
|
|
714
714
|
type: "audio",
|
|
715
|
-
audio_url:
|
|
715
|
+
audio_url: m.audio_url
|
|
716
716
|
};
|
|
717
717
|
throw new Error("Invalid payload");
|
|
718
718
|
}
|
|
719
|
-
const a =
|
|
719
|
+
const a = u();
|
|
720
720
|
return d.track("agent-speak", a), t.streamingManager.speak({
|
|
721
721
|
script: a
|
|
722
722
|
});
|
package/dist/index.umd.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(v,L){typeof exports=="object"&&typeof module<"u"?L(exports):typeof define=="function"&&define.amd?define(["exports"],L):(v=typeof globalThis<"u"?globalThis:v||self,L(v.index={}))})(this,function(v){"use strict";var L=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(L||{}),x=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(x||{}),T=(e=>(e.Start="START",e.Stop="STOP",e))(T||{}),$=(e=>(e.ChatAnswer="chat/answer",e.ChatPartial="chat/partial",e.StreamDone="stream/done",e.StreamStarted="stream/started",e.StreamFailed="stream/error",e.StreamReady="stream/ready",e.StreamCreated="stream/created",e.StreamVideoCreated="stream-video/started",e.StreamVideoDone="stream-video/done",e.StreamVideoError="stream-video/error",e.StreamVideoRejected="stream-video/rejected",e))($||{}),I=(e=>(e[e.New=0]="New",e[e.Fail=1]="Fail",e[e.Connected=2]="Connected",e[e.Connecting=3]="Connecting",e[e.Terminating=4]="Terminating",e))(I||{}),D=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(D||{}),W=(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))(W||{}),H=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(H||{}),j=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e))(j||{}),O=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(O||{}),U=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(U||{}),z=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(z||{}),B=(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))(B||{}),E=(e=>(e.Clip="clip",e.Talk="talk",e))(E||{});const M="https://api.d-id.com",Z="wss://notifications.d-id.com",G="79f81a83a67430be2bc0fd61042b8faa",N=()=>Math.random().toString(16).slice(2);function F(){let e=window.localStorage.getItem("did_external_key_id");return e||(e=Math.random().toString(16).slice(2),window.localStorage.setItem("did_external_key_id",e)),e}let ee=N();function V(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}.${F()}_${ee}`;throw new Error(`Unknown auth type: ${e}`)}function K(e,a=M){const t=async(n,r)=>{const i=await fetch(a+(n!=null&&n.startsWith("/")?n:`/${n}`),{...r,headers:{...r==null?void 0:r.headers,Authorization:V(e),"Content-Type":"application/json"}});if(!i.ok){let c=await i.text().catch(()=>"Failed to fetch");throw new Error(c)}return i.json()};return{get(n,r){return t(n,{...r,method:"GET"})},post(n,r,i){return t(n,{...i,body:JSON.stringify(r),method:"POST"})},delete(n,r,i){return t(n,{...i,body:JSON.stringify(r),method:"DELETE"})},patch(n,r,i){return t(n,{...i,body:JSON.stringify(r),method:"PATCH"})}}}function q(e,a=M){const t=K(e,`${a}/agents`);return{create(n,r){return t.post("/",n,r)},getAgents(n,r){return t.get(`/${n?`?tag=${n}`:""}`,r).then(i=>i??[])},getById(n,r){return t.get(`/${n}`,r)},delete(n,r){return t.delete(`/${n}`,void 0,r)},update(n,r,i){return t.patch(`/${n}`,r,i)},newChat(n,r){return t.post(`/${n}/chat`,void 0,r)},chat(n,r,i,c){return t.post(`/${n}/chat/${r}`,i,c)}}}function te(e,a=M){const t=K(e,`${a}/knowledge`);return{createKnowledge(n,r){return t.post("/",n,r)},getKnowledgeBase(n){return t.get("/",n)},getKnowledge(n,r){return t.get(`/${n}`,r)},deleteKnowledge(n,r){return t.delete(`/${n}`,void 0,r)},createDocument(n,r,i){return t.post(`/${n}/documents`,r,i)},deleteDocument(n,r,i){return t.delete(`/${n}/documents/${r}`,void 0,i)},getDocuments(n,r){return t.get(`/${n}/documents`,r)},getDocument(n,r,i){return t.get(`/${n}/documents/${r}`,i)},getRecords(n,r,i){return t.get(`/${n}/documents/${r}/records`,i)},query(n,r,i){return t.post(`/${n}/query`,{query:r},i)}}}function ne(e,a=M){const t=K(e,`${a}/chats/ratings`);return{create(n,r){return t.post("/",n,r)},getByKnowledge(n,r){return t.get(`/${n}`,r).then(i=>i??[])},update(n,r,i){return t.patch(`/${n}`,r,i)},delete(n,r){return t.delete(`/${n}`,r)}}}const re=e=>new Promise(a=>setTimeout(a,e));function ie(e){return new Promise((a,t)=>{const{callbacks:n,host:r,auth:i}=e,{onMessage:c=null,onOpen:w=null,onClose:S=null,onError:o=null}=n||{},h=new WebSocket(`${r}?authorization=${V(i)}`);h.onmessage=c,h.onclose=S,h.onerror=d=>{console.error(d),o==null||o("Websocket failed to connect",d),t(d)},h.onopen=d=>{w==null||w(d),a(h)}})}async function ae(e){const{retries:a=1}=e;let t=null;for(let n=0;(t==null?void 0:t.readyState)!==WebSocket.OPEN;n++)try{t=await ie(e)}catch(r){if(n===a)throw r;await re(n*500)}return t}async function se(e,a,t){const n=t!=null&&t.onMessage?[t.onMessage]:[],r=await ae({auth:e,host:a,callbacks:{onError:t==null?void 0:t.onError,onMessage:i=>{const c=JSON.parse(i.data);n.forEach(w=>w(c.event,c))}}});return{socket:r,disconnect:()=>r.close(),subscribeToEvents:i=>n.push(i)}}function oe(e,a){const t=K(e,a);return{createStream(n){return t.post("/clips/streams",{driver_id:n.driver_id,presenter_id:n.presenter_id,compatibility_mode:n.compatibility_mode})},startConnection(n,r,i){return t.post(`/clips/streams/${n}/sdp`,{session_id:i,answer:r})},addIceCandidate(n,r,i){return t.post(`/clips/streams/${n}/ice`,{session_id:i,...r})},sendStreamRequest(n,r,i){return t.post(`/clips/streams/${n}`,{session_id:r,...i})},close(n,r){return t.delete(`/clips/streams/${n}`,{session_id:r})}}}function de(e,a){const t=K(e,a);return{createStream(n,r){return t.post("/talks/streams",{source_url:n.source_url,driver_url:n.driver_url,face:n.face,config:n.config},r)},startConnection(n,r,i,c){return t.post(`/talks/streams/${n}/sdp`,{session_id:i,answer:r},c)},addIceCandidate(n,r,i,c){return t.post(`/talks/streams/${n}/ice`,{session_id:i,...r},c)},sendStreamRequest(n,r,i,c){return t.post(`/talks/streams/${n}`,{session_id:r,...i},c)},close(n,r,i){return t.delete(`/talks/streams/${n}`,{session_id:r},i)}}}function ce(e,a){return e.map((t,n)=>n===0?a?{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived-a.bytesReceived,packetsReceived:t.packetsReceived-a.packetsReceived,packetsLost:t.packetsLost-a.packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond}:{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived,packetsReceived:t.packetsReceived,packetsLost:t.packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond}:{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived-e[n-1].bytesReceived,packetsReceived:t.packetsReceived-e[n-1].packetsReceived,packetsLost:t.packetsLost-e[n-1].packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond})}let J=!1;const A=(e,a)=>J&&console.log(e,a),ge=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function ue(e){switch(e){case"connected":return I.Connected;case"checking":return I.Connecting;case"failed":return I.Fail;case"new":case"closed":case"disconnected":default:return I.New}}function me(e,a){let t=[],n=0,r=0,i;return setInterval(()=>{e.getStats().then(w=>{w.forEach(S=>{if(S.type==="inbound-rtp"&&S.kind==="video"){if(r=t.length-1,S&&t[r]){const o=S.bytesReceived,h=t[r].bytesReceived;let d=i;i=o-h>0;let l;if(d!==i){if(i)n=t.length;else{const P=t.slice(n),g=n===0?void 0:t[n-1];l=ce(P,g),l=l.sort((u,s)=>s.packetsLost-u.packetsLost).slice(0,5)}a==null||a(i?T.Start:T.Stop,l)}}t.push(S)}})})},500)}async function le(e,{debug:a=!1,callbacks:t,auth:n,analytics:r,baseURL:i=M}){J=a;let c;const{startConnection:w,sendStreamRequest:S,close:o,createStream:h,addIceCandidate:d}=e.videoType===E.Clip?oe(n,i):de(n,i),{id:l,offer:P,ice_servers:g,session_id:u}=await h(e),s=new ge({iceServers:g}),R=s.createDataChannel("JanusDataChannel");if(!u)throw new Error("Could not create session_id");const C=me(s,t.onVideoStateChange);s.onicecandidate=m=>{A("peerConnection.onicecandidate",m),m.candidate&&m.candidate.sdpMid&&m.candidate.sdpMLineIndex!==null?d(l,{candidate:m.candidate.candidate,sdpMid:m.candidate.sdpMid,sdpMLineIndex:m.candidate.sdpMLineIndex},u):d(l,{candidate:null},u)},s.oniceconnectionstatechange=()=>{var f;A("peerConnection.oniceconnectionstatechange => "+s.iceConnectionState);const m=ue(s.iceConnectionState);e.videoType===E.Talk&&m===I.Connected?c=setTimeout(()=>{var y;(y=t.onConnectionStateChange)==null||y.call(t,I.Connected)},5e3):(clearTimeout(c),(f=t.onConnectionStateChange)==null||f.call(t,m))},s.ontrack=m=>{var f;A("peerConnection.ontrack",m),(f=t.onSrcObjectReady)==null||f.call(t,m.streams[0])},R.onmessage=m=>{var f,y;if(R.readyState==="open"){const[p,k]=m.data.split(":");console.log("data",k),p===$.StreamStarted?r==null||r.track("agent-video",{event:"start",...k}):p===$.StreamDone?r==null||r.track("agent-video",{event:"stop",rtcStats:k??[],...k}):p===$.StreamFailed?((f=t.onVideoStateChange)==null||f.call(t,T.Stop,{event:p,data:k}),clearInterval(C)):p===$.StreamReady?(clearTimeout(c),(y=t.onConnectionStateChange)==null||y.call(t,I.Connected)):p===$.StreamCreated?r==null||r.track("agent-video",{event:"created",...k}):p===$.StreamVideoCreated?r==null||r.track("agent-video",{event:"video-created",...k}):p===$.StreamVideoDone?r==null||r.track("agent-video",{event:"video-done",rtcStats:k??[],...k}):p===$.StreamVideoError&&(r==null||r.track("agent-video",{event:"video-error",...k}))}},await s.setRemoteDescription(P),A("set remote description OK");const _=await s.createAnswer();return A("create answer OK"),await s.setLocalDescription(_),A("set local description OK"),await w(l,_,u),A("start connection OK"),{speak(m){return S(l,u,m)},async disconnect(){var m,f;l&&(s&&(s.close(),s.oniceconnectionstatechange=null,s.onnegotiationneeded=null,s.onicecandidate=null,s.ontrack=null),await o(l,u).catch(y=>{}),(m=t.onConnectionStateChange)==null||m.call(t,I.New),(f=t.onVideoStateChange)==null||f.call(t,T.Stop),clearInterval(C))},sessionId:u,streamId:l}}function we(e){const a={mixPanelKey:e.mixPanelKey||"testKey",distinct_id:e.distinctId||F(),isEnabled:e.isEnabled??!0,agentId:e.agent.id,owner_id:e.agent.owner_id??""};return{...a,getRandom:()=>Math.random().toString(16).slice(2),track(t,n){if(!this.isEnabled)return Promise.reject("MixPanel analytics is disabled on creation");const r={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:t,properties:{...n,...a,time:Date.now(),$insert_id:this.getRandom(),origin:window.location.href,"Screen Height":window.screen.height||window.innerWidth,"Screen Width":window.screen.width||window.innerHeight,"User Agent":navigator.userAgent}}])})};return fetch("https://api-js.mixpanel.com/track/?verbose=1&ip=1",r).then(i=>i.json()).catch(i=>console.error(i))}}}function he(e){var n,r;const a=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop";return{$os:`${(()=>{const i=navigator.platform;return i.toLowerCase().includes("win")?"Windows":i.toLowerCase().includes("mac")?"Mac OS X":i.toLowerCase().includes("linux")?"Linux":"Unknown"})()}`,isMobile:`${a()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:e.presenter.type,agentVoice:{voiceId:(n=e.presenter.voice)==null?void 0:n.voice_id,provider:(r=e.presenter.voice)==null?void 0:r.type}}}function fe(e,a){var t;return(t=e.knowledge)!=null&&t.id?a.getKnowledge(e.knowledge.id).then(n=>(n==null?void 0:n.starter_message)||[]):[]}function pe(e){return e.presenter.type===E.Clip?{videoType:E.Clip,driver_id:e.presenter.driver_id,presenter_id:e.presenter.presenter_id}:{videoType:E.Talk,source_url:e.presenter.source_url}}function ve(e,a,t,n,r){return new Promise(async(i,c)=>{let w=r;const S=await le(pe(e),{...a,callbacks:{...a.callbacks,onConnectionStateChange:async o=>{var h,d;if(o===I.Connected)try{w||(w=await t.newChat(e.id),n.track("agent-chat",{event:"created",chat_id:w.id,agent_id:e.id})),S&&w&&i({chat:w,streamingManager:S})}catch(l){console.error(l),c("Cannot create new chat")}else o===I.Fail&&c(new Error("Cannot create connection"));(d=(h=a.callbacks).onConnectionStateChange)==null||d.call(h,o)},onVideoStateChange(o,h){var d,l;n.track("agent-video",{event:o,rtc_stats:h??[]}),(l=(d=a.callbacks).onVideoStateChange)==null||l.call(d,o,h)}}}).catch(c)})}function Se(e,a,t){return q(a,t||M).getById(e)}function Q(e){let a="";if(e.greetings&&e.greetings.length>0){const t=Math.floor(Math.random()*e.greetings.length);a=e.greetings[t]}else a=`Hi! I'm ${e.preview_name}, welcome to agents. How can I help you?`;return[{content:a,id:N(),role:"assistant",created_at:new Date().toISOString()}]}async function Ce(e,a){var l,P;const t={messages:[]},n=a.wsURL||Z,r=a.baseURL||M,i=a.mixpanelKey||G,c=q(a.auth,r),w=ne(a.auth,r),S=te(a.auth,r),o=await c.getById(e),h=await fe(o,S);t.messages=Q(o),(P=(l=a.callbacks).onNewMessage)==null||P.call(l,t.messages);const d=we({mixPanelKey:i,agent:o,...a});return d.track("agent-sdk",{event:"loaded",...he(o)}),{agent:o,starterMessages:h,async connect(){var R,C,_,m,f;const g=await se(a.auth,n,{onMessage:(y,p)=>{var k,X;if("content"in p){const{content:Y}=p,b=t.messages[t.messages.length-1];(b==null?void 0:b.role)==="assistant"&&(b.content=y===O.Partial?b.content+Y:Y),y===O.Complete&&d.track("agent-message-received",{messages:t.messages.length}),(X=(k=a.callbacks).onNewMessage)==null||X.call(k,t.messages)}}}),{streamingManager:u,chat:s}=await ve(o,a,c,d,t.chat);t.messages=Q(o),(C=(R=a.callbacks).onNewMessage)==null||C.call(R,t.messages),s!=null&&s.id&&s.id!==((_=t.chat)==null?void 0:_.id)&&((f=(m=a.callbacks).onNewChat)==null||f.call(m,s==null?void 0:s.id)),t.streamingManager=u,t.socketManager=g,t.chat=s,d.track("agent-chat",{event:"connect",chatId:s.id,agentId:o.id})},async disconnect(){var g,u,s;(g=t.socketManager)==null||g.disconnect(),await((u=t.streamingManager)==null?void 0:u.disconnect()),d.track("agent-chat",{event:"disconnect",chatId:(s=t.chat)==null?void 0:s.id,agentId:o.id})},async chat(g,u=!1){var s,R;try{const C=Date.now();if(g.length===0)throw new Error("Message cannot be empty");if(!t.chat)throw new Error("Chat is not initialized");if(!t.streamingManager)throw new Error("Streaming manager is not initialized");t.messages.push({id:N(),role:"user",content:g,created_at:new Date(C).toISOString()});const _=await c.chat(o.id,t.chat.id,{sessionId:t.streamingManager.sessionId,streamId:t.streamingManager.streamId,messages:t.messages,append_chat:u});return d.track("agent-message-send",{event:"success",messages:t.messages.length+1}),t.messages.push({id:N(),role:"assistant",content:_.result??"",created_at:new Date().toISOString(),matches:_.matches}),_.result&&d.track("agent-message-received",{latency:Date.now()-C,messages:t.messages.length}),(R=(s=a.callbacks).onNewMessage)==null||R.call(s,t.messages),_}catch(C){throw d.track("agent-message-send",{event:"error",messages:t.messages.length}),C}},rate(g,u,s){var _,m,f,y;const R=t.messages.find(p=>p.id===g);if(t.chat){if(!R)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const C=((_=R.matches)==null?void 0:_.map(p=>[p.document_id,p.id]))??[];return d.track("agent-rate",{event:s?"update":"create",thumb:u===1?"up":"down",knowledge_id:((m=o.knowledge)==null?void 0:m.id)??"",matches:C,score:u}),s?w.update(s,{agent_id:o.id,knowledge_id:((f=o.knowledge)==null?void 0:f.id)??"",chat_id:t.chat.id,message_id:g,matches:C,score:u}):w.create({agent_id:o.id,knowledge_id:((y=o.knowledge)==null?void 0:y.id)??"",chat_id:t.chat.id,message_id:g,matches:C,score:u})},deleteRate(g){var u;return d.track("agent-rate-delete",{type:"text",chat_id:(u=t.chat)==null?void 0:u.id,id:g}),w.delete(g)},speak(g){if(!t.streamingManager)throw new Error("Streaming manager is not initialized");function u(){if(g.type==="text")return{type:"text",provider:g.provider?g.provider:o.presenter.voice,input:g.input,ssml:g.ssml||!1};if(g.type==="audio")return{type:"audio",audio_url:g.audio_url};throw new Error("Invalid payload")}const s=u();return d.track("agent-speak",s),t.streamingManager.speak({script:s})}}}v.ChatMode=j,v.DocumentType=B,v.KnowledgeType=z,v.PlanGroup=W,v.Providers=L,v.RateState=H,v.Subject=U,v.UserPlan=D,v.VoiceAccess=x,v.createAgentManager=Ce,v.getAgent=Se,Object.defineProperty(v,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(v,L){typeof exports=="object"&&typeof module<"u"?L(exports):typeof define=="function"&&define.amd?define(["exports"],L):(v=typeof globalThis<"u"?globalThis:v||self,L(v.index={}))})(this,function(v){"use strict";var L=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(L||{}),x=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(x||{}),T=(e=>(e.Start="START",e.Stop="STOP",e))(T||{}),$=(e=>(e.ChatAnswer="chat/answer",e.ChatPartial="chat/partial",e.StreamDone="stream/done",e.StreamStarted="stream/started",e.StreamFailed="stream/error",e.StreamReady="stream/ready",e.StreamCreated="stream/created",e.StreamVideoCreated="stream-video/started",e.StreamVideoDone="stream-video/done",e.StreamVideoError="stream-video/error",e.StreamVideoRejected="stream-video/rejected",e))($||{}),I=(e=>(e[e.New=0]="New",e[e.Fail=1]="Fail",e[e.Connected=2]="Connected",e[e.Connecting=3]="Connecting",e[e.Terminating=4]="Terminating",e))(I||{}),D=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(D||{}),W=(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))(W||{}),H=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(H||{}),j=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e))(j||{}),O=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(O||{}),U=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(U||{}),z=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(z||{}),B=(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))(B||{}),E=(e=>(e.Clip="clip",e.Talk="talk",e))(E||{});const M="https://api.d-id.com",Z="wss://notifications.d-id.com",G="79f81a83a67430be2bc0fd61042b8faa",N=()=>Math.random().toString(16).slice(2);function F(){let e=window.localStorage.getItem("did_external_key_id");return e||(e=Math.random().toString(16).slice(2),window.localStorage.setItem("did_external_key_id",e)),e}let ee=N();function V(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}.${F()}_${ee}`;throw new Error(`Unknown auth type: ${e}`)}function K(e,a=M){const t=async(n,r)=>{const i=await fetch(a+(n!=null&&n.startsWith("/")?n:`/${n}`),{...r,headers:{...r==null?void 0:r.headers,Authorization:V(e),"Content-Type":"application/json"}});if(!i.ok){let c=await i.text().catch(()=>"Failed to fetch");throw new Error(c)}return i.json()};return{get(n,r){return t(n,{...r,method:"GET"})},post(n,r,i){return t(n,{...i,body:JSON.stringify(r),method:"POST"})},delete(n,r,i){return t(n,{...i,body:JSON.stringify(r),method:"DELETE"})},patch(n,r,i){return t(n,{...i,body:JSON.stringify(r),method:"PATCH"})}}}function q(e,a=M){const t=K(e,`${a}/agents`);return{create(n,r){return t.post("/",n,r)},getAgents(n,r){return t.get(`/${n?`?tag=${n}`:""}`,r).then(i=>i??[])},getById(n,r){return t.get(`/${n}`,r)},delete(n,r){return t.delete(`/${n}`,void 0,r)},update(n,r,i){return t.patch(`/${n}`,r,i)},newChat(n,r){return t.post(`/${n}/chat`,void 0,r)},chat(n,r,i,c){return t.post(`/${n}/chat/${r}`,i,c)}}}function te(e,a=M){const t=K(e,`${a}/knowledge`);return{createKnowledge(n,r){return t.post("/",n,r)},getKnowledgeBase(n){return t.get("/",n)},getKnowledge(n,r){return t.get(`/${n}`,r)},deleteKnowledge(n,r){return t.delete(`/${n}`,void 0,r)},createDocument(n,r,i){return t.post(`/${n}/documents`,r,i)},deleteDocument(n,r,i){return t.delete(`/${n}/documents/${r}`,void 0,i)},getDocuments(n,r){return t.get(`/${n}/documents`,r)},getDocument(n,r,i){return t.get(`/${n}/documents/${r}`,i)},getRecords(n,r,i){return t.get(`/${n}/documents/${r}/records`,i)},query(n,r,i){return t.post(`/${n}/query`,{query:r},i)}}}function ne(e,a=M){const t=K(e,`${a}/chats/ratings`);return{create(n,r){return t.post("/",n,r)},getByKnowledge(n,r){return t.get(`/${n}`,r).then(i=>i??[])},update(n,r,i){return t.patch(`/${n}`,r,i)},delete(n,r){return t.delete(`/${n}`,r)}}}const re=e=>new Promise(a=>setTimeout(a,e));function ie(e){return new Promise((a,t)=>{const{callbacks:n,host:r,auth:i}=e,{onMessage:c=null,onOpen:w=null,onClose:S=null,onError:o=null}=n||{},f=new WebSocket(`${r}?authorization=${V(i)}`);f.onmessage=c,f.onclose=S,f.onerror=d=>{console.error(d),o==null||o("Websocket failed to connect",d),t(d)},f.onopen=d=>{w==null||w(d),a(f)}})}async function ae(e){const{retries:a=1}=e;let t=null;for(let n=0;(t==null?void 0:t.readyState)!==WebSocket.OPEN;n++)try{t=await ie(e)}catch(r){if(n===a)throw r;await re(n*500)}return t}async function se(e,a,t){const n=t!=null&&t.onMessage?[t.onMessage]:[],r=await ae({auth:e,host:a,callbacks:{onError:t==null?void 0:t.onError,onMessage:i=>{const c=JSON.parse(i.data);n.forEach(w=>w(c.event,c))}}});return{socket:r,disconnect:()=>r.close(),subscribeToEvents:i=>n.push(i)}}function oe(e,a){const t=K(e,a);return{createStream(n){return t.post("/clips/streams",{driver_id:n.driver_id,presenter_id:n.presenter_id,compatibility_mode:n.compatibility_mode})},startConnection(n,r,i){return t.post(`/clips/streams/${n}/sdp`,{session_id:i,answer:r})},addIceCandidate(n,r,i){return t.post(`/clips/streams/${n}/ice`,{session_id:i,...r})},sendStreamRequest(n,r,i){return t.post(`/clips/streams/${n}`,{session_id:r,...i})},close(n,r){return t.delete(`/clips/streams/${n}`,{session_id:r})}}}function de(e,a){const t=K(e,a);return{createStream(n,r){return t.post("/talks/streams",{source_url:n.source_url,driver_url:n.driver_url,face:n.face,config:n.config},r)},startConnection(n,r,i,c){return t.post(`/talks/streams/${n}/sdp`,{session_id:i,answer:r},c)},addIceCandidate(n,r,i,c){return t.post(`/talks/streams/${n}/ice`,{session_id:i,...r},c)},sendStreamRequest(n,r,i,c){return t.post(`/talks/streams/${n}`,{session_id:r,...i},c)},close(n,r,i){return t.delete(`/talks/streams/${n}`,{session_id:r},i)}}}function ce(e,a){return e.map((t,n)=>n===0?a?{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived-a.bytesReceived,packetsReceived:t.packetsReceived-a.packetsReceived,packetsLost:t.packetsLost-a.packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond}:{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived,packetsReceived:t.packetsReceived,packetsLost:t.packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond}:{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived-e[n-1].bytesReceived,packetsReceived:t.packetsReceived-e[n-1].packetsReceived,packetsLost:t.packetsLost-e[n-1].packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond})}let J=!1;const A=(e,a)=>J&&console.log(e,a),ge=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function ue(e){switch(e){case"connected":return I.Connected;case"checking":return I.Connecting;case"failed":return I.Fail;case"new":case"closed":case"disconnected":default:return I.New}}function me(e,a){let t=[],n=0,r=0,i;return setInterval(()=>{e.getStats().then(w=>{w.forEach(S=>{if(S.type==="inbound-rtp"&&S.kind==="video"){if(r=t.length-1,S&&t[r]){const o=S.bytesReceived,f=t[r].bytesReceived;let d=i;i=o-f>0;let l;if(d!==i){if(i)n=t.length;else{const P=t.slice(n),u=n===0?void 0:t[n-1];l=ce(P,u),l=l.sort((m,s)=>s.packetsLost-m.packetsLost).slice(0,5)}a==null||a(i?T.Start:T.Stop,l)}}t.push(S)}})})},500)}async function le(e,{debug:a=!1,callbacks:t,auth:n,analytics:r,baseURL:i=M}){J=a;let c;const{startConnection:w,sendStreamRequest:S,close:o,createStream:f,addIceCandidate:d}=e.videoType===E.Clip?oe(n,i):de(n,i),{id:l,offer:P,ice_servers:u,session_id:m}=await f(e),s=new ge({iceServers:u}),R=s.createDataChannel("JanusDataChannel");if(!m)throw new Error("Could not create session_id");const C=me(s,t.onVideoStateChange);s.onicecandidate=g=>{A("peerConnection.onicecandidate",g),g.candidate&&g.candidate.sdpMid&&g.candidate.sdpMLineIndex!==null?d(l,{candidate:g.candidate.candidate,sdpMid:g.candidate.sdpMid,sdpMLineIndex:g.candidate.sdpMLineIndex},m):d(l,{candidate:null},m)},s.oniceconnectionstatechange=()=>{var p;A("peerConnection.oniceconnectionstatechange => "+s.iceConnectionState);const g=ue(s.iceConnectionState);e.videoType===E.Talk&&g===I.Connected?c=setTimeout(()=>{var y;(y=t.onConnectionStateChange)==null||y.call(t,I.Connected)},5e3):(clearTimeout(c),(p=t.onConnectionStateChange)==null||p.call(t,g))},s.ontrack=g=>{var p;A("peerConnection.ontrack",g),(p=t.onSrcObjectReady)==null||p.call(t,g.streams[0])},R.onmessage=g=>{var p,y;if(R.readyState==="open"){const[h,k]=g.data.split(":");console.log("data",h,k,g),h===$.StreamStarted?r==null||r.track("agent-video",{event:"start",...k}):h===$.StreamDone?r==null||r.track("agent-video",{event:"stop",rtcStats:k??[],...k}):h===$.StreamFailed?((p=t.onVideoStateChange)==null||p.call(t,T.Stop,{event:h,data:k}),clearInterval(C)):h===$.StreamReady?(clearTimeout(c),(y=t.onConnectionStateChange)==null||y.call(t,I.Connected)):h===$.StreamCreated?r==null||r.track("agent-video",{event:"created",...k}):h===$.StreamVideoCreated?r==null||r.track("agent-video",{event:"video-created",...k}):h===$.StreamVideoDone?r==null||r.track("agent-video",{event:"video-done",rtcStats:k??[],...k}):h===$.StreamVideoError&&(r==null||r.track("agent-video",{event:"video-error",...k}))}},await s.setRemoteDescription(P),A("set remote description OK");const _=await s.createAnswer();return A("create answer OK"),await s.setLocalDescription(_),A("set local description OK"),await w(l,_,m),A("start connection OK"),{speak(g){return S(l,m,g)},async disconnect(){var g,p;l&&(s&&(s.close(),s.oniceconnectionstatechange=null,s.onnegotiationneeded=null,s.onicecandidate=null,s.ontrack=null),await o(l,m).catch(y=>{}),(g=t.onConnectionStateChange)==null||g.call(t,I.New),(p=t.onVideoStateChange)==null||p.call(t,T.Stop),clearInterval(C))},sessionId:m,streamId:l}}function we(e){const a={mixPanelKey:e.mixPanelKey||"testKey",distinct_id:e.distinctId||F(),isEnabled:e.isEnabled??!0,agentId:e.agent.id,owner_id:e.agent.owner_id??""};return{...a,getRandom:()=>Math.random().toString(16).slice(2),track(t,n){if(!this.isEnabled)return Promise.reject("MixPanel analytics is disabled on creation");const r={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:t,properties:{...n,...a,time:Date.now(),$insert_id:this.getRandom(),origin:window.location.href,"Screen Height":window.screen.height||window.innerWidth,"Screen Width":window.screen.width||window.innerHeight,"User Agent":navigator.userAgent}}])})};return fetch("https://api-js.mixpanel.com/track/?verbose=1&ip=1",r).then(i=>i.json()).catch(i=>console.error(i))}}}function he(e){var n,r;const a=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop";return{$os:`${(()=>{const i=navigator.platform;return i.toLowerCase().includes("win")?"Windows":i.toLowerCase().includes("mac")?"Mac OS X":i.toLowerCase().includes("linux")?"Linux":"Unknown"})()}`,isMobile:`${a()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:e.presenter.type,agentVoice:{voiceId:(n=e.presenter.voice)==null?void 0:n.voice_id,provider:(r=e.presenter.voice)==null?void 0:r.type}}}function fe(e,a){var t;return(t=e.knowledge)!=null&&t.id?a.getKnowledge(e.knowledge.id).then(n=>(n==null?void 0:n.starter_message)||[]):[]}function pe(e){return e.presenter.type===E.Clip?{videoType:E.Clip,driver_id:e.presenter.driver_id,presenter_id:e.presenter.presenter_id}:{videoType:E.Talk,source_url:e.presenter.source_url}}function ve(e,a,t,n,r){return new Promise(async(i,c)=>{let w=r;const S=await le(pe(e),{...a,callbacks:{...a.callbacks,onConnectionStateChange:async o=>{var f,d;if(o===I.Connected)try{w||(w=await t.newChat(e.id),n.track("agent-chat",{event:"created",chat_id:w.id,agent_id:e.id})),S&&w&&i({chat:w,streamingManager:S})}catch(l){console.error(l),c("Cannot create new chat")}else o===I.Fail&&c(new Error("Cannot create connection"));(d=(f=a.callbacks).onConnectionStateChange)==null||d.call(f,o)},onVideoStateChange(o,f){var d,l;n.track("agent-video",{event:o,rtc_stats:f??[]}),(l=(d=a.callbacks).onVideoStateChange)==null||l.call(d,o,f)}}}).catch(c)})}function Se(e,a,t){return q(a,t||M).getById(e)}function Q(e){let a="";if(e.greetings&&e.greetings.length>0){const t=Math.floor(Math.random()*e.greetings.length);a=e.greetings[t]}else a=`Hi! I'm ${e.preview_name}, welcome to agents. How can I help you?`;return[{content:a,id:N(),role:"assistant",created_at:new Date().toISOString()}]}async function Ce(e,a){var l,P;const t={messages:[]},n=a.wsURL||Z,r=a.baseURL||M,i=a.mixpanelKey||G,c=q(a.auth,r),w=ne(a.auth,r),S=te(a.auth,r),o=await c.getById(e),f=await fe(o,S);t.messages=Q(o),(P=(l=a.callbacks).onNewMessage)==null||P.call(l,t.messages);const d=we({mixPanelKey:i,agent:o,...a});return d.track("agent-sdk",{event:"loaded",...he(o)}),{agent:o,starterMessages:f,async connect(){var R,C,_,g,p;const u=await se(a.auth,n,{onMessage:(y,h)=>{var k,X;if("content"in h){const{content:Y}=h,b=t.messages[t.messages.length-1];(b==null?void 0:b.role)==="assistant"&&(b.content=y===O.Partial?b.content+Y:Y),y===O.Complete&&d.track("agent-message-received",{messages:t.messages.length}),(X=(k=a.callbacks).onNewMessage)==null||X.call(k,t.messages)}}}),{streamingManager:m,chat:s}=await ve(o,a,c,d,t.chat);t.messages=Q(o),(C=(R=a.callbacks).onNewMessage)==null||C.call(R,t.messages),s!=null&&s.id&&s.id!==((_=t.chat)==null?void 0:_.id)&&((p=(g=a.callbacks).onNewChat)==null||p.call(g,s==null?void 0:s.id)),t.streamingManager=m,t.socketManager=u,t.chat=s,d.track("agent-chat",{event:"connect",chatId:s.id,agentId:o.id})},async disconnect(){var u,m,s;(u=t.socketManager)==null||u.disconnect(),await((m=t.streamingManager)==null?void 0:m.disconnect()),d.track("agent-chat",{event:"disconnect",chatId:(s=t.chat)==null?void 0:s.id,agentId:o.id})},async chat(u,m=!1){var s,R;try{const C=Date.now();if(u.length===0)throw new Error("Message cannot be empty");if(!t.chat)throw new Error("Chat is not initialized");if(!t.streamingManager)throw new Error("Streaming manager is not initialized");t.messages.push({id:N(),role:"user",content:u,created_at:new Date(C).toISOString()});const _=await c.chat(o.id,t.chat.id,{sessionId:t.streamingManager.sessionId,streamId:t.streamingManager.streamId,messages:t.messages,append_chat:m});return d.track("agent-message-send",{event:"success",messages:t.messages.length+1}),t.messages.push({id:N(),role:"assistant",content:_.result??"",created_at:new Date().toISOString(),matches:_.matches}),_.result&&d.track("agent-message-received",{latency:Date.now()-C,messages:t.messages.length}),(R=(s=a.callbacks).onNewMessage)==null||R.call(s,t.messages),_}catch(C){throw d.track("agent-message-send",{event:"error",messages:t.messages.length}),C}},rate(u,m,s){var _,g,p,y;const R=t.messages.find(h=>h.id===u);if(t.chat){if(!R)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const C=((_=R.matches)==null?void 0:_.map(h=>[h.document_id,h.id]))??[];return d.track("agent-rate",{event:s?"update":"create",thumb:m===1?"up":"down",knowledge_id:((g=o.knowledge)==null?void 0:g.id)??"",matches:C,score:m}),s?w.update(s,{agent_id:o.id,knowledge_id:((p=o.knowledge)==null?void 0:p.id)??"",chat_id:t.chat.id,message_id:u,matches:C,score:m}):w.create({agent_id:o.id,knowledge_id:((y=o.knowledge)==null?void 0:y.id)??"",chat_id:t.chat.id,message_id:u,matches:C,score:m})},deleteRate(u){var m;return d.track("agent-rate-delete",{type:"text",chat_id:(m=t.chat)==null?void 0:m.id,id:u}),w.delete(u)},speak(u){if(!t.streamingManager)throw new Error("Streaming manager is not initialized");function m(){if(u.type==="text")return{type:"text",provider:u.provider?u.provider:o.presenter.voice,input:u.input,ssml:u.ssml||!1};if(u.type==="audio")return{type:"audio",audio_url:u.audio_url};throw new Error("Invalid payload")}const s=m();return d.track("agent-speak",s),t.streamingManager.speak({script:s})}}}v.ChatMode=j,v.DocumentType=B,v.KnowledgeType=z,v.PlanGroup=W,v.Providers=L,v.RateState=H,v.Subject=U,v.UserPlan=D,v.VoiceAccess=x,v.createAgentManager=Ce,v.getAgent=Se,Object.defineProperty(v,Symbol.toStringTag,{value:"Module"})});
|