@d-id/client-sdk 1.0.19-beta.78 → 1.0.19-beta.79
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js
CHANGED
|
@@ -107,11 +107,11 @@ function ne(e) {
|
|
|
107
107
|
onOpen: d = null,
|
|
108
108
|
onClose: g = null,
|
|
109
109
|
onError: l = null
|
|
110
|
-
} = n || {},
|
|
111
|
-
|
|
112
|
-
console.error(
|
|
113
|
-
},
|
|
114
|
-
d == null || d(
|
|
110
|
+
} = n || {}, h = new WebSocket(`${a}?authorization=${H(i)}`);
|
|
111
|
+
h.onmessage = o, h.onclose = g, h.onerror = (f) => {
|
|
112
|
+
console.error(f), l == null || l("Websocket failed to connect", f), t(f);
|
|
113
|
+
}, h.onopen = (f) => {
|
|
114
|
+
d == null || d(f), r(h);
|
|
115
115
|
};
|
|
116
116
|
});
|
|
117
117
|
}
|
|
@@ -265,7 +265,7 @@ function se(e, r) {
|
|
|
265
265
|
});
|
|
266
266
|
}
|
|
267
267
|
let j = !1;
|
|
268
|
-
const
|
|
268
|
+
const A = (e, r) => j && console.log(e, r), oe = (window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection).bind(window);
|
|
269
269
|
function ce(e) {
|
|
270
270
|
switch (e) {
|
|
271
271
|
case "connected":
|
|
@@ -288,16 +288,16 @@ function de(e, r) {
|
|
|
288
288
|
g.forEach((l) => {
|
|
289
289
|
if (l.type === "inbound-rtp" && l.kind === "video") {
|
|
290
290
|
if (a = t.length - 1, l && t[a]) {
|
|
291
|
-
const
|
|
292
|
-
let
|
|
293
|
-
if (o =
|
|
291
|
+
const h = l.bytesReceived, f = t[a].bytesReceived, k = o;
|
|
292
|
+
let v;
|
|
293
|
+
if (o = h - f > 0, i = o ? 0 : ++i, k !== o)
|
|
294
294
|
if (o)
|
|
295
|
-
n = t.length, r == null || r(N.Start,
|
|
295
|
+
n = t.length, r == null || r(N.Start, v);
|
|
296
296
|
else {
|
|
297
297
|
const L = t.slice(n), b = n === 0 ? void 0 : t[n - 1];
|
|
298
|
-
|
|
298
|
+
v = se(L, b), v = v.sort((M, s) => s.packetsLost - M.packetsLost).slice(0, 5);
|
|
299
299
|
}
|
|
300
|
-
!o && i ===
|
|
300
|
+
!o && i === 3 && (r == null || r(N.Stop, v));
|
|
301
301
|
}
|
|
302
302
|
t.push(l);
|
|
303
303
|
}
|
|
@@ -317,75 +317,62 @@ async function ge(e, r, {
|
|
|
317
317
|
const {
|
|
318
318
|
startConnection: g,
|
|
319
319
|
sendStreamRequest: l,
|
|
320
|
-
close:
|
|
321
|
-
createStream:
|
|
320
|
+
close: h,
|
|
321
|
+
createStream: f,
|
|
322
322
|
addIceCandidate: k
|
|
323
323
|
} = r.videoType === C.Clip ? re(a, o, e) : ie(a, o, e), {
|
|
324
|
-
id:
|
|
324
|
+
id: v,
|
|
325
325
|
offer: L,
|
|
326
326
|
ice_servers: b,
|
|
327
327
|
session_id: M
|
|
328
|
-
} = await
|
|
328
|
+
} = await f(r), s = new oe({
|
|
329
329
|
iceServers: b
|
|
330
330
|
}), u = s.createDataChannel("JanusDataChannel");
|
|
331
331
|
if (!M)
|
|
332
332
|
throw new Error("Could not create session_id");
|
|
333
333
|
const m = de(s, n.onVideoStateChange);
|
|
334
334
|
s.onicecandidate = (c) => {
|
|
335
|
-
|
|
335
|
+
A("peerConnection.onicecandidate", c), c.candidate && c.candidate.sdpMid && c.candidate.sdpMLineIndex !== null ? k(v, {
|
|
336
336
|
candidate: c.candidate.candidate,
|
|
337
337
|
sdpMid: c.candidate.sdpMid,
|
|
338
338
|
sdpMLineIndex: c.candidate.sdpMLineIndex
|
|
339
|
-
}, M) : k(
|
|
339
|
+
}, M) : k(v, {
|
|
340
340
|
candidate: null
|
|
341
341
|
}, M);
|
|
342
342
|
}, s.oniceconnectionstatechange = () => {
|
|
343
|
-
var
|
|
344
|
-
|
|
343
|
+
var w;
|
|
344
|
+
A("peerConnection.oniceconnectionstatechange => " + s.iceConnectionState);
|
|
345
345
|
const c = ce(s.iceConnectionState);
|
|
346
|
-
c === S.Connected ?
|
|
347
|
-
var
|
|
348
|
-
(
|
|
349
|
-
}, 5e3)
|
|
346
|
+
c === S.Connected ? d = setTimeout(() => {
|
|
347
|
+
var y;
|
|
348
|
+
(y = n.onConnectionStateChange) == null || y.call(n, S.Connected);
|
|
349
|
+
}, 5e3) : (clearTimeout(d), (w = n.onConnectionStateChange) == null || w.call(n, c));
|
|
350
350
|
}, s.ontrack = (c) => {
|
|
351
|
-
var
|
|
352
|
-
|
|
351
|
+
var w;
|
|
352
|
+
A("peerConnection.ontrack", c), (w = n.onSrcObjectReady) == null || w.call(n, c.streams[0]);
|
|
353
353
|
}, u.onmessage = (c) => {
|
|
354
|
-
var
|
|
354
|
+
var w;
|
|
355
355
|
if (u.readyState === "open") {
|
|
356
|
-
const [
|
|
357
|
-
|
|
358
|
-
event: f,
|
|
359
|
-
...c
|
|
360
|
-
}) : f === I.StreamFailed || f === I.StreamDone ? clearInterval(m) : f === I.StreamReady ? (clearTimeout(d), (h = n.onConnectionStateChange) == null || h.call(n, S.Connected)) : f === I.StreamCreated && i.track("agent-video", {
|
|
361
|
-
event: "created"
|
|
362
|
-
});
|
|
356
|
+
const [y, _] = c.data.split(":");
|
|
357
|
+
y === I.StreamFailed || y === I.StreamDone ? clearInterval(m) : y === I.StreamReady && (clearTimeout(d), (w = n.onConnectionStateChange) == null || w.call(n, S.Connected));
|
|
363
358
|
}
|
|
364
|
-
}, await s.setRemoteDescription(L),
|
|
365
|
-
const
|
|
366
|
-
return
|
|
359
|
+
}, await s.setRemoteDescription(L), A("set remote description OK");
|
|
360
|
+
const p = await s.createAnswer();
|
|
361
|
+
return A("create answer OK"), await s.setLocalDescription(p), A("set local description OK"), await g(v, p, M), A("start connection OK"), {
|
|
367
362
|
/**
|
|
368
363
|
* Method to send request to server to get clip or talk depend on you payload
|
|
369
364
|
* @param payload
|
|
370
365
|
*/
|
|
371
366
|
speak(c) {
|
|
372
|
-
return l(
|
|
367
|
+
return l(v, M, c);
|
|
373
368
|
},
|
|
374
369
|
/**
|
|
375
370
|
* Method to close RTC connection
|
|
376
371
|
*/
|
|
377
372
|
async disconnect() {
|
|
378
|
-
var c,
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
try {
|
|
382
|
-
await p(y, M).catch((f) => {
|
|
383
|
-
});
|
|
384
|
-
} catch (f) {
|
|
385
|
-
$("Error on close stream connection", f);
|
|
386
|
-
}
|
|
387
|
-
(c = n.onConnectionStateChange) == null || c.call(n, S.New), (h = n.onVideoStateChange) == null || h.call(n, N.Stop), clearInterval(m);
|
|
388
|
-
}
|
|
373
|
+
var c, w;
|
|
374
|
+
v && (s && (s.close(), s.oniceconnectionstatechange = null, s.onnegotiationneeded = null, s.onicecandidate = null, s.ontrack = null), await h(v, M).catch((y) => {
|
|
375
|
+
}), (c = n.onConnectionStateChange) == null || c.call(n, S.New), (w = n.onVideoStateChange) == null || w.call(n, N.Stop), clearInterval(m));
|
|
389
376
|
},
|
|
390
377
|
/**
|
|
391
378
|
* Session identifier information, should be returned in the body of all streaming requests
|
|
@@ -394,7 +381,7 @@ async function ge(e, r, {
|
|
|
394
381
|
/**
|
|
395
382
|
* Id of current RTC stream
|
|
396
383
|
*/
|
|
397
|
-
streamId:
|
|
384
|
+
streamId: v
|
|
398
385
|
};
|
|
399
386
|
}
|
|
400
387
|
function le(e) {
|
|
@@ -479,7 +466,7 @@ function z(e, r, t, n, a) {
|
|
|
479
466
|
callbacks: {
|
|
480
467
|
...r.callbacks,
|
|
481
468
|
onConnectionStateChange: async (l) => {
|
|
482
|
-
var
|
|
469
|
+
var h, f;
|
|
483
470
|
if (l === S.Connected)
|
|
484
471
|
try {
|
|
485
472
|
d || (d = await t.newChat(e.id), n.track("agent-chat", {
|
|
@@ -495,21 +482,21 @@ function z(e, r, t, n, a) {
|
|
|
495
482
|
}
|
|
496
483
|
else
|
|
497
484
|
l === S.Fail && o(new Error("Cannot create connection"));
|
|
498
|
-
(
|
|
485
|
+
(f = (h = r.callbacks).onConnectionStateChange) == null || f.call(h, l);
|
|
499
486
|
},
|
|
500
|
-
onVideoStateChange(l,
|
|
501
|
-
var
|
|
487
|
+
onVideoStateChange(l, h) {
|
|
488
|
+
var f, k;
|
|
502
489
|
n.track("agent-video", {
|
|
503
490
|
event: l,
|
|
504
|
-
rtc_stats:
|
|
505
|
-
}), (k = (
|
|
491
|
+
rtc_stats: h ?? []
|
|
492
|
+
}), (k = (f = r.callbacks).onVideoStateChange) == null || k.call(f, l, h);
|
|
506
493
|
}
|
|
507
494
|
},
|
|
508
495
|
analytics: n
|
|
509
496
|
}).catch(o);
|
|
510
497
|
});
|
|
511
498
|
}
|
|
512
|
-
function
|
|
499
|
+
function we(e, r, t) {
|
|
513
500
|
return K(r, t || T).getById(e);
|
|
514
501
|
}
|
|
515
502
|
function O(e) {
|
|
@@ -526,7 +513,7 @@ function O(e) {
|
|
|
526
513
|
created_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
527
514
|
}];
|
|
528
515
|
}
|
|
529
|
-
async function
|
|
516
|
+
async function he(e, r) {
|
|
530
517
|
var L, b, M;
|
|
531
518
|
const t = {
|
|
532
519
|
messages: [],
|
|
@@ -544,40 +531,46 @@ async function we(e, r) {
|
|
|
544
531
|
event: "loaded",
|
|
545
532
|
...me(g)
|
|
546
533
|
});
|
|
547
|
-
const
|
|
534
|
+
const h = {
|
|
548
535
|
onMessage: (s, u) => {
|
|
549
|
-
var m,
|
|
536
|
+
var m, p;
|
|
550
537
|
if ("content" in u) {
|
|
551
538
|
const {
|
|
552
539
|
content: c
|
|
553
|
-
} = u,
|
|
554
|
-
(
|
|
540
|
+
} = u, w = t.messages[t.messages.length - 1];
|
|
541
|
+
(w == null ? void 0 : w.role) === "assistant" && (n < t.messages.length && (w.content = s === x.Partial ? w.content + c : c), s === x.Answer && (n = t.messages.length)), s === x.Complete && l.track("agent-message-received", {
|
|
555
542
|
messages: t.messages.length
|
|
556
|
-
}), (
|
|
543
|
+
}), (p = (m = r.callbacks).onNewMessage) == null || p.call(m, t.messages);
|
|
544
|
+
} else if ([I.StreamVideoCreated, I.StreamVideoDone, I.StreamVideoError, I.StreamVideoRejected].includes(s)) {
|
|
545
|
+
const c = s.split("/")[1];
|
|
546
|
+
l.track("agent-video", {
|
|
547
|
+
...u,
|
|
548
|
+
event: c
|
|
549
|
+
});
|
|
557
550
|
}
|
|
558
551
|
}
|
|
559
552
|
};
|
|
560
|
-
async function
|
|
561
|
-
var
|
|
562
|
-
const s = await W(r.auth, a,
|
|
553
|
+
async function f() {
|
|
554
|
+
var p, c, w, y, _;
|
|
555
|
+
const s = await W(r.auth, a, h), {
|
|
563
556
|
streamingManager: u,
|
|
564
557
|
chat: m
|
|
565
558
|
} = await z(g, r, d, l, t.chat);
|
|
566
|
-
n = -1, t.messages
|
|
559
|
+
n = -1, t.messages = O(g), (c = (p = r.callbacks).onNewMessage) == null || c.call(p, t.messages), m != null && m.id && m.id !== ((w = t.chat) == null ? void 0 : w.id) && ((_ = (y = r.callbacks).onNewChat) == null || _.call(y, m == null ? void 0 : m.id)), t.streamingManager = u, t.socketManager = s, t.chat = m, v(E.Functional), l.track("agent-chat", {
|
|
567
560
|
event: "connect",
|
|
568
561
|
chatId: m.id,
|
|
569
562
|
agentId: g.id
|
|
570
563
|
});
|
|
571
564
|
}
|
|
572
565
|
async function k() {
|
|
573
|
-
var s, u, m,
|
|
574
|
-
(s = t.socketManager) == null || s.disconnect(), await ((u = t.streamingManager) == null ? void 0 : u.disconnect()), delete t.streamingManager, delete t.socketManager, t.messages = O(g), (
|
|
566
|
+
var s, u, m, p, c;
|
|
567
|
+
(s = t.socketManager) == null || s.disconnect(), await ((u = t.streamingManager) == null ? void 0 : u.disconnect()), delete t.streamingManager, delete t.socketManager, t.messages = O(g), (p = (m = r.callbacks).onNewMessage) == null || p.call(m, t.messages), l.track("agent-chat", {
|
|
575
568
|
event: "disconnect",
|
|
576
569
|
chatId: (c = t.chat) == null ? void 0 : c.id,
|
|
577
570
|
agentId: g.id
|
|
578
571
|
});
|
|
579
572
|
}
|
|
580
|
-
async function
|
|
573
|
+
async function v(s) {
|
|
581
574
|
var u, m;
|
|
582
575
|
s !== t.chatMode && (l.track("agent-mode-change", {
|
|
583
576
|
mode: s
|
|
@@ -586,36 +579,34 @@ async function we(e, r) {
|
|
|
586
579
|
return {
|
|
587
580
|
agent: g,
|
|
588
581
|
starterMessages: ((M = g.knowledge) == null ? void 0 : M.starter_message) || [],
|
|
589
|
-
connect:
|
|
582
|
+
connect: f,
|
|
590
583
|
disconnect: k,
|
|
591
|
-
changeMode:
|
|
584
|
+
changeMode: v,
|
|
592
585
|
async reconnect() {
|
|
593
|
-
var w, c;
|
|
594
586
|
if (!t.chat)
|
|
595
|
-
return
|
|
596
|
-
|
|
597
|
-
const s = await W(r.auth, a, p), {
|
|
587
|
+
return f();
|
|
588
|
+
const s = await W(r.auth, a, h), {
|
|
598
589
|
streamingManager: u,
|
|
599
590
|
chat: m
|
|
600
591
|
} = await z(g, r, d, l, t.chat);
|
|
601
|
-
t.streamingManager = u, t.socketManager = s,
|
|
592
|
+
t.streamingManager = u, t.socketManager = s, v(E.Functional), l.track("agent-chat", {
|
|
602
593
|
event: "reconnect",
|
|
603
594
|
chatId: m.id,
|
|
604
595
|
agentId: g.id
|
|
605
596
|
});
|
|
606
597
|
},
|
|
607
598
|
async chat(s, u = !1) {
|
|
608
|
-
var m,
|
|
599
|
+
var m, p, c, w, y, _;
|
|
609
600
|
try {
|
|
610
601
|
if (s.length >= 800)
|
|
611
602
|
throw new Error("Message cannot be more than 800 characters");
|
|
612
|
-
const
|
|
603
|
+
const $ = Date.now();
|
|
613
604
|
if (t.messages.push({
|
|
614
605
|
id: P(),
|
|
615
606
|
role: "user",
|
|
616
607
|
content: s,
|
|
617
|
-
created_at: new Date(
|
|
618
|
-
}), (
|
|
608
|
+
created_at: new Date($).toISOString()
|
|
609
|
+
}), (p = (m = r.callbacks).onNewMessage) == null || p.call(m, t.messages), s.length === 0)
|
|
619
610
|
throw new Error("Message cannot be empty");
|
|
620
611
|
if (t.chatMode === E.Maintenance)
|
|
621
612
|
throw new Error("Chat is in maintenance mode");
|
|
@@ -628,7 +619,7 @@ async function we(e, r) {
|
|
|
628
619
|
t.chat || (t.chat = await d.newChat(g.id));
|
|
629
620
|
const R = await d.chat(g.id, t.chat.id, {
|
|
630
621
|
sessionId: (c = t.streamingManager) == null ? void 0 : c.sessionId,
|
|
631
|
-
streamId: (
|
|
622
|
+
streamId: (w = t.streamingManager) == null ? void 0 : w.streamId,
|
|
632
623
|
messages: t.messages,
|
|
633
624
|
chatMode: t.chatMode,
|
|
634
625
|
append_chat: u
|
|
@@ -639,33 +630,33 @@ async function we(e, r) {
|
|
|
639
630
|
}), t.messages.push({
|
|
640
631
|
id: P(),
|
|
641
632
|
role: "assistant",
|
|
642
|
-
content: R.result
|
|
633
|
+
content: R.result ?? "",
|
|
643
634
|
created_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
644
635
|
matches: R.matches
|
|
645
|
-
}), R.result &&
|
|
646
|
-
latency: Date.now() -
|
|
636
|
+
}), R.result && l.track("agent-message-received", {
|
|
637
|
+
latency: Date.now() - $,
|
|
647
638
|
messages: t.messages.length
|
|
648
|
-
}), (_ = (
|
|
649
|
-
} catch (
|
|
639
|
+
}), (_ = (y = r.callbacks).onNewMessage) == null || _.call(y, t.messages), R;
|
|
640
|
+
} catch ($) {
|
|
650
641
|
throw l.track("agent-message-send", {
|
|
651
642
|
event: "error",
|
|
652
643
|
messages: t.messages.length
|
|
653
|
-
}),
|
|
644
|
+
}), $;
|
|
654
645
|
}
|
|
655
646
|
},
|
|
656
647
|
rate(s, u, m) {
|
|
657
|
-
var
|
|
658
|
-
const
|
|
648
|
+
var w, y, _, $;
|
|
649
|
+
const p = t.messages.find((R) => R.id === s);
|
|
659
650
|
if (t.chat) {
|
|
660
|
-
if (!
|
|
651
|
+
if (!p)
|
|
661
652
|
throw new Error("Message not found");
|
|
662
653
|
} else
|
|
663
654
|
throw new Error("Chat is not initialized");
|
|
664
|
-
const c = ((
|
|
655
|
+
const c = ((w = p.matches) == null ? void 0 : w.map((R) => [R.document_id, R.id])) ?? [];
|
|
665
656
|
return l.track("agent-rate", {
|
|
666
657
|
event: m ? "update" : "create",
|
|
667
658
|
thumb: u === 1 ? "up" : "down",
|
|
668
|
-
knowledge_id: ((
|
|
659
|
+
knowledge_id: ((y = g.knowledge) == null ? void 0 : y.id) ?? "",
|
|
669
660
|
matches: c,
|
|
670
661
|
score: u
|
|
671
662
|
}), m ? d.updateRating(g.id, t.chat.id, m, {
|
|
@@ -674,7 +665,7 @@ async function we(e, r) {
|
|
|
674
665
|
matches: c,
|
|
675
666
|
score: u
|
|
676
667
|
}) : d.createRating(g.id, t.chat.id, {
|
|
677
|
-
knowledge_id: ((
|
|
668
|
+
knowledge_id: (($ = g.knowledge) == null ? void 0 : $.id) ?? "",
|
|
678
669
|
message_id: s,
|
|
679
670
|
matches: c,
|
|
680
671
|
score: u
|
|
@@ -733,6 +724,6 @@ export {
|
|
|
733
724
|
U as UserPlan,
|
|
734
725
|
C as VideoType,
|
|
735
726
|
Y as VoiceAccess,
|
|
736
|
-
|
|
737
|
-
|
|
727
|
+
he as createAgentManager,
|
|
728
|
+
we as getAgent
|
|
738
729
|
};
|
package/dist/index.umd.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(w,b){typeof exports=="object"&&typeof module<"u"?b(exports):typeof define=="function"&&define.amd?define(["exports"],b):(w=typeof globalThis<"u"?globalThis:w||self,b(w.index={}))})(this,function(w){"use strict";var b=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(b||{}),j=(e=>(e.TRIAL="deid-trial",e.PRO="deid-pro",e.ENTERPRISE="deid-enterprise",e.LITE="deid-lite",e.ADVANCED="deid-advanced",e.BUILD="deid-api-build",e.LAUNCH="deid-api-launch",e.SCALE="deid-api-scale",e))(j||{}),z=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(z||{}),$=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e))($||{}),N=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(N||{}),H=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(H||{}),x=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(x||{}),U=(e=>(e.Pdf="pdf",e.Text="text",e.Html="html",e.Word="word",e.Json="json",e.Markdown="markdown",e.Csv="csv",e.Excel="excel",e.Powerpoint="powerpoint",e.Archive="archive",e.Image="image",e.Audio="audio",e.Video="video",e))(U||{}),S=(e=>(e.Clip="clip",e.Talk="talk",e))(S||{}),O=(e=>(e.Start="START",e.Stop="STOP",e))(O||{}),R=(e=>(e.ChatAnswer="chat/answer",e.ChatPartial="chat/partial",e.StreamDone="stream/done",e.StreamStarted="stream/started",e.StreamFailed="stream/error",e.StreamReady="stream/ready",e.StreamCreated="stream/created",e.StreamVideoCreated="stream-video/started",e.StreamVideoDone="stream-video/done",e.StreamVideoError="stream-video/error",e.StreamVideoRejected="stream-video/rejected",e))(R||{}),k=(e=>(e[e.New=0]="New",e[e.Fail=1]="Fail",e[e.Connected=2]="Connected",e[e.Connecting=3]="Connecting",e[e.Terminating=4]="Terminating",e))(k||{}),B=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(B||{}),J=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(J||{});const F="https://api.d-id.com",G="wss://notifications.d-id.com",ee="79f81a83a67430be2bc0fd61042b8faa",D=()=>Math.random().toString(16).slice(2);function V(){let e=window.localStorage.getItem("did_external_key_id");return e||(e=Math.random().toString(16).slice(2),window.localStorage.setItem("did_external_key_id",e)),e}let te=D();function q(e){if(e.type==="bearer")return`Bearer ${e.token}`;if(e.type==="basic")return`Basic ${btoa(`${e.username}:${e.password}`)}`;if(e.type==="key")return`Client-Key ${e.clientKey}.${V()}_${te}`;throw new Error(`Unknown auth type: ${e}`)}function K(e,i=F){const t=async(n,a)=>{const r=await fetch(i+(n!=null&&n.startsWith("/")?n:`/${n}`),{...a,headers:{...a==null?void 0:a.headers,Authorization:q(e),"Content-Type":"application/json"}});if(!r.ok){let o=await r.text().catch(()=>"Failed to fetch");throw new Error(o)}return r.json()};return{get(n,a){return t(n,{...a,method:"GET"})},post(n,a,r){return t(n,{...r,body:JSON.stringify(a),method:"POST"})},delete(n,a,r){return t(n,{...r,body:JSON.stringify(a),method:"DELETE"})},patch(n,a,r){return t(n,{...r,body:JSON.stringify(a),method:"PATCH"})}}}function Q(e,i=F){const t=K(e,`${i}/agents`);return{create(n,a){return t.post("/",n,a)},getAgents(n,a){return t.get(`/${n?`?tag=${n}`:""}`,a).then(r=>r??[])},getById(n,a){return t.get(`/${n}`,a)},delete(n,a){return t.delete(`/${n}`,void 0,a)},update(n,a,r){return t.patch(`/${n}`,a,r)},newChat(n,a){return t.post(`/${n}/chat`,void 0,a)},chat(n,a,r,o){return t.post(`/${n}/chat/${a}`,r,o)},createRating(n,a,r,o){return t.post(`/${n}/chat/${a}/ratings`,r,o)},updateRating(n,a,r,o,d){return t.patch(`/${n}/chat/${a}/ratings/${r}`,o,d)},deleteRating(n,a,r,o){return t.delete(`/${n}/chat/${a}/ratings/${r}`,o)}}}const ne=e=>new Promise(i=>setTimeout(i,e));function ae(e){return new Promise((i,t)=>{const{callbacks:n,host:a,auth:r}=e,{onMessage:o=null,onOpen:d=null,onClose:g=null,onError:l=null}=n||{},v=new WebSocket(`${a}?authorization=${q(r)}`);v.onmessage=o,v.onclose=g,v.onerror=y=>{console.error(y),l==null||l("Websocket failed to connect",y),t(y)},v.onopen=y=>{d==null||d(y),i(v)}})}async function ie(e){const{retries:i=1}=e;let t=null;for(let n=0;(t==null?void 0:t.readyState)!==WebSocket.OPEN;n++)try{t=await ae(e)}catch(a){if(n===i)throw a;await ne(n*500)}return t}async function X(e,i,t){const n=t!=null&&t.onMessage?[t.onMessage]:[],a=await ie({auth:e,host:i,callbacks:{onError:t==null?void 0:t.onError,onMessage:r=>{const o=JSON.parse(r.data);n.forEach(d=>d(o.event,o))}}});return{socket:a,disconnect:()=>a.close(),subscribeToEvents:r=>n.push(r)}}function re(e,i,t){const n=K(e,`${i}/agents/${t}`);return{createStream(a){return n.post("/streams",{driver_id:a.driver_id,presenter_id:a.presenter_id,compatibility_mode:a.compatibility_mode,stream_warmup:a.stream_warmup,type:S.Clip})},startConnection(a,r,o){return n.post(`/streams/${a}/sdp`,{session_id:o,answer:r,type:S.Clip})},addIceCandidate(a,r,o){return n.post(`/streams/${a}/ice`,{session_id:o,...r,type:S.Clip})},sendStreamRequest(a,r,o){return n.post(`/streams/${a}`,{session_id:r,...o,type:S.Clip})},close(a,r){return n.delete(`/streams/${a}`,{session_id:r,type:S.Clip})}}}function se(e,i,t){const n=K(e,`${i}/agents/${t}`);return{createStream(a,r){return n.post("/streams",{source_url:a.source_url,driver_url:a.driver_url,face:a.face,config:a.config,stream_warmup:a.stream_warmup,type:S.Talk},r)},startConnection(a,r,o,d){return n.post(`/streams/${a}/sdp`,{session_id:o,answer:r,type:S.Talk},d)},addIceCandidate(a,r,o,d){return n.post(`/streams/${a}/ice`,{session_id:o,...r,type:S.Talk},d)},sendStreamRequest(a,r,o,d){return n.post(`/streams/${a}`,{session_id:r,...o,type:S.Talk},d)},close(a,r,o){return n.delete(`/streams/${a}`,{session_id:r,type:S.Talk},o)}}}function oe(e,i){return e.map((t,n)=>n===0?i?{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived-i.bytesReceived,packetsReceived:t.packetsReceived-i.packetsReceived,packetsLost:t.packetsLost-i.packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond}:{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived,packetsReceived:t.packetsReceived,packetsLost:t.packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond}:{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived-e[n-1].bytesReceived,packetsReceived:t.packetsReceived-e[n-1].packetsReceived,packetsLost:t.packetsLost-e[n-1].packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond})}let Y=!1;const E=(e,i)=>Y&&console.log(e,i),ce=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function de(e){switch(e){case"connected":return k.Connected;case"checking":return k.Connecting;case"failed":return k.Fail;case"new":case"closed":case"disconnected":default:return k.New}}function ge(e,i){let t=[],n=0,a=0,r=0,o;return setInterval(()=>{e.getStats().then(g=>{g.forEach(l=>{if(l.type==="inbound-rtp"&&l.kind==="video"){if(a=t.length-1,l&&t[a]){const v=l.bytesReceived,y=t[a].bytesReceived,M=o;let C;if(o=v-y>0,r=o?0:++r,M!==o)if(o)n=t.length,i==null||i(O.Start,C);else{const L=t.slice(n),P=n===0?void 0:t[n-1];C=oe(L,P),C=C.sort((_,s)=>s.packetsLost-_.packetsLost).slice(0,5)}!o&&r===2&&(i==null||i(O.Stop,C))}t.push(l)}})})},500)}async function le(e,i,{debug:t=!1,callbacks:n,auth:a,analytics:r,baseURL:o=F}){Y=t;let d;const{startConnection:g,sendStreamRequest:l,close:v,createStream:y,addIceCandidate:M}=i.videoType===S.Clip?re(a,o,e):se(a,o,e),{id:C,offer:L,ice_servers:P,session_id:_}=await y(i),s=new ce({iceServers:P}),u=s.createDataChannel("JanusDataChannel");if(!_)throw new Error("Could not create session_id");const m=ge(s,n.onVideoStateChange);s.onicecandidate=c=>{E("peerConnection.onicecandidate",c),c.candidate&&c.candidate.sdpMid&&c.candidate.sdpMLineIndex!==null?M(C,{candidate:c.candidate.candidate,sdpMid:c.candidate.sdpMid,sdpMLineIndex:c.candidate.sdpMLineIndex},_):M(C,{candidate:null},_)},s.oniceconnectionstatechange=()=>{var h;E("peerConnection.oniceconnectionstatechange => "+s.iceConnectionState);const c=de(s.iceConnectionState);c===k.Connected?(r.track("agent-chat-loaded"),d=setTimeout(()=>{var p;(p=n.onConnectionStateChange)==null||p.call(n,k.Connected)},5e3)):(clearTimeout(d),(h=n.onConnectionStateChange)==null||h.call(n,c))},s.ontrack=c=>{var h;E("peerConnection.ontrack",c),(h=n.onSrcObjectReady)==null||h.call(n,c.streams[0])},u.onmessage=c=>{var h;if(u.readyState==="open"){const[p,I]=c.data.split(":");p===R.StreamVideoCreated||R.StreamVideoDone||R.StreamVideoError||R.StreamVideoRejected?r.track("agent-video",{event:p,...c}):p===R.StreamFailed||p===R.StreamDone?clearInterval(m):p===R.StreamReady?(clearTimeout(d),(h=n.onConnectionStateChange)==null||h.call(n,k.Connected)):p===R.StreamCreated&&r.track("agent-video",{event:"created"})}},await s.setRemoteDescription(L),E("set remote description OK");const f=await s.createAnswer();return E("create answer OK"),await s.setLocalDescription(f),E("set local description OK"),await g(C,f,_),E("start connection OK"),{speak(c){return l(C,_,c)},async disconnect(){var c,h;if(C){s&&(s.close(),s.oniceconnectionstatechange=null,s.onnegotiationneeded=null,s.onicecandidate=null,s.ontrack=null);try{await v(C,_).catch(p=>{})}catch(p){E("Error on close stream connection",p)}(c=n.onConnectionStateChange)==null||c.call(n,k.New),(h=n.onVideoStateChange)==null||h.call(n,O.Stop),clearInterval(m)}},sessionId:_,streamId:C}}function me(e){const i={token:e.token||"testKey",distinct_id:e.distinctId||V(),isEnabled:e.isEnabled??!0,agentId:e.agent.id,owner_id:e.agent.owner_id??""};return{...i,getRandom:()=>Math.random().toString(16).slice(2),track(t,n){if(!this.isEnabled)return Promise.reject("MixPanel analytics is disabled on creation");const a={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:t,properties:{...n,...i,time:Date.now(),$insert_id:this.getRandom(),origin:window.location.href,"Screen Height":window.screen.height||window.innerWidth,"Screen Width":window.screen.width||window.innerHeight,"User Agent":navigator.userAgent}}])})};return fetch("https://api-js.mixpanel.com/track/?verbose=1&ip=1",a).then(r=>r.json()).catch(r=>console.error(r))}}}function ue(e){var n,a,r,o,d;const i=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop";return{$os:`${(()=>{const g=navigator.platform;return g.toLowerCase().includes("win")?"Windows":g.toLowerCase().includes("mac")?"Mac OS X":g.toLowerCase().includes("linux")?"Linux":"Unknown"})()}`,isMobile:`${i()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:(n=e.presenter)==null?void 0:n.type,agentVoice:{voiceId:(r=(a=e.presenter)==null?void 0:a.voice)==null?void 0:r.voice_id,provider:(d=(o=e.presenter)==null?void 0:o.voice)==null?void 0:d.type}}}function he(e){if(e.presenter){if(e.presenter.type===S.Clip)return{videoType:S.Clip,driver_id:e.presenter.driver_id,presenter_id:e.presenter.presenter_id,stream_warmup:!0}}else throw new Error("Presenter is not initialized");return{videoType:S.Talk,source_url:e.presenter.source_url,stream_warmup:!0}}function Z(e,i,t,n,a){return new Promise(async(r,o)=>{let d=a;const g=await le(e.id,he(e),{...i,callbacks:{...i.callbacks,onConnectionStateChange:async l=>{var v,y;if(l===k.Connected)try{d||(d=await t.newChat(e.id),n.track("agent-chat",{event:"created",chat_id:d.id,agent_id:e.id})),g&&r({chat:d,streamingManager:g})}catch(M){console.error(M),o("Cannot create new chat")}else l===k.Fail&&o(new Error("Cannot create connection"));(y=(v=i.callbacks).onConnectionStateChange)==null||y.call(v,l)},onVideoStateChange(l,v){var y,M;n.track("agent-video",{event:l,rtc_stats:v??[]}),(M=(y=i.callbacks).onVideoStateChange)==null||M.call(y,l,v)}},analytics:n}).catch(o)})}function we(e,i,t){return Q(i,t||F).getById(e)}function W(e){let i="";if(e.greetings&&e.greetings.length>0){const t=Math.floor(Math.random()*e.greetings.length);i=e.greetings[t]}else i=`Hi! I'm ${e.preview_name}, welcome to agents. How can I help you?`;return[{content:i,id:D(),role:"assistant",created_at:new Date().toISOString()}]}async function fe(e,i){var L,P,_;const t={messages:[],chatMode:i.mode||$.Functional};let n=-1;const a=i.wsURL||G,r=i.baseURL||F,o=i.mixpanelKey||ee,d=Q(i.auth,r),g=await d.getById(e);t.messages=W(g),(P=(L=i.callbacks).onNewMessage)==null||P.call(L,t.messages);const l=me({token:o,agent:g,...i});l.track("agent-sdk",{event:"loaded",...ue(g)});const v={onMessage:(s,u)=>{var m,f;if("content"in u){const{content:c}=u,h=t.messages[t.messages.length-1];(h==null?void 0:h.role)==="assistant"&&(n<t.messages.length&&(h.content=s===N.Partial?h.content+c:c),s===N.Answer&&(n=t.messages.length)),s===N.Complete&&l.track("agent-message-received",{messages:t.messages.length}),(f=(m=i.callbacks).onNewMessage)==null||f.call(m,t.messages)}}};async function y(){var f,c,h,p,I;const s=await X(i.auth,a,v),{streamingManager:u,chat:m}=await Z(g,i,d,l,t.chat);n=-1,t.messages.length===0&&(t.messages=W(g),(c=(f=i.callbacks).onNewMessage)==null||c.call(f,t.messages)),m!=null&&m.id&&m.id!==((h=t.chat)==null?void 0:h.id)&&((I=(p=i.callbacks).onNewChat)==null||I.call(p,m==null?void 0:m.id)),t.streamingManager=u,t.socketManager=s,t.chat=m,C($.Functional),l.track("agent-chat",{event:"connect",chatId:m.id,agentId:g.id})}async function M(){var s,u,m,f,c;(s=t.socketManager)==null||s.disconnect(),await((u=t.streamingManager)==null?void 0:u.disconnect()),delete t.streamingManager,delete t.socketManager,t.messages=W(g),(f=(m=i.callbacks).onNewMessage)==null||f.call(m,t.messages),l.track("agent-chat",{event:"disconnect",chatId:(c=t.chat)==null?void 0:c.id,agentId:g.id})}async function C(s){var u,m;s!==t.chatMode&&(l.track("agent-mode-change",{mode:s}),t.chatMode=s,t.chatMode!==$.Functional&&await M(),(m=(u=i.callbacks).onModeChange)==null||m.call(u,s))}return{agent:g,starterMessages:((_=g.knowledge)==null?void 0:_.starter_message)||[],connect:y,disconnect:M,changeMode:C,async reconnect(){var f,c;if(!t.chat)return y();(f=t.socketManager)==null||f.disconnect(),await((c=t.streamingManager)==null?void 0:c.disconnect());const s=await X(i.auth,a,v),{streamingManager:u,chat:m}=await Z(g,i,d,l,t.chat);t.streamingManager=u,t.socketManager=s,C($.Functional),l.track("agent-chat",{event:"reconnect",chatId:m.id,agentId:g.id})},async chat(s,u=!1){var m,f,c,h,p,I;try{if(s.length>=800)throw new Error("Message cannot be more than 800 characters");const T=Date.now();if(t.messages.push({id:D(),role:"user",content:s,created_at:new Date(T).toISOString()}),(f=(m=i.callbacks).onNewMessage)==null||f.call(m,t.messages),s.length===0)throw new Error("Message cannot be empty");if(t.chatMode===$.Maintenance)throw new Error("Chat is in maintenance mode");if(t.chatMode!==$.TextOnly){if(!t.streamingManager)throw new Error("Streaming manager is not initialized");if(!t.chat)throw new Error("Chat is not initialized")}else t.chat||(t.chat=await d.newChat(g.id));const A=await d.chat(g.id,t.chat.id,{sessionId:(c=t.streamingManager)==null?void 0:c.sessionId,streamId:(h=t.streamingManager)==null?void 0:h.streamId,messages:t.messages,chatMode:t.chatMode,append_chat:u});return l.track("agent-message-send",{event:"success",messages:t.messages.length+1}),t.messages.push({id:D(),role:"assistant",content:A.result||"",created_at:new Date().toISOString(),matches:A.matches}),A.result&&(l.track("agent-message-received",{latency:Date.now()-T,messages:t.messages.length}),(I=(p=i.callbacks).onNewMessage)==null||I.call(p,t.messages)),A}catch(T){throw l.track("agent-message-send",{event:"error",messages:t.messages.length}),T}},rate(s,u,m){var h,p,I,T;const f=t.messages.find(A=>A.id===s);if(t.chat){if(!f)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const c=((h=f.matches)==null?void 0:h.map(A=>[A.document_id,A.id]))??[];return l.track("agent-rate",{event:m?"update":"create",thumb:u===1?"up":"down",knowledge_id:((p=g.knowledge)==null?void 0:p.id)??"",matches:c,score:u}),m?d.updateRating(g.id,t.chat.id,m,{knowledge_id:((I=g.knowledge)==null?void 0:I.id)??"",message_id:s,matches:c,score:u}):d.createRating(g.id,t.chat.id,{knowledge_id:((T=g.knowledge)==null?void 0:T.id)??"",message_id:s,matches:c,score:u})},deleteRate(s){var u;if(!t.chat)throw new Error("Chat is not initialized");return l.track("agent-rate-delete",{type:"text",chat_id:(u=t.chat)==null?void 0:u.id,id:s}),d.deleteRating(g.id,t.chat.id,s)},speak(s){if(!t.streamingManager)throw new Error("Streaming manager is not initialized");function u(){if(g.presenter){if(s.type==="text")return{type:"text",provider:s.provider?s.provider:g.presenter.voice,input:s.input,ssml:s.ssml||!1};if(s.type==="audio")return{type:"audio",audio_url:s.audio_url}}else throw new Error("Presenter is not initialized");throw new Error("Invalid payload")}const m=u();return l.track("agent-speak",m),t.streamingManager.speak({script:m})}}}w.ChatMode=$,w.ChatProgress=N,w.ConnectionState=k,w.DocumentType=U,w.KnowledgeType=x,w.PlanGroup=j,w.Providers=B,w.RateState=z,w.StreamEvents=R,w.StreamingState=O,w.Subject=H,w.UserPlan=b,w.VideoType=S,w.VoiceAccess=J,w.createAgentManager=fe,w.getAgent=we,Object.defineProperty(w,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(w,b){typeof exports=="object"&&typeof module<"u"?b(exports):typeof define=="function"&&define.amd?define(["exports"],b):(w=typeof globalThis<"u"?globalThis:w||self,b(w.index={}))})(this,function(w){"use strict";var b=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(b||{}),j=(e=>(e.TRIAL="deid-trial",e.PRO="deid-pro",e.ENTERPRISE="deid-enterprise",e.LITE="deid-lite",e.ADVANCED="deid-advanced",e.BUILD="deid-api-build",e.LAUNCH="deid-api-launch",e.SCALE="deid-api-scale",e))(j||{}),z=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(z||{}),$=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e))($||{}),N=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(N||{}),H=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(H||{}),x=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(x||{}),U=(e=>(e.Pdf="pdf",e.Text="text",e.Html="html",e.Word="word",e.Json="json",e.Markdown="markdown",e.Csv="csv",e.Excel="excel",e.Powerpoint="powerpoint",e.Archive="archive",e.Image="image",e.Audio="audio",e.Video="video",e))(U||{}),C=(e=>(e.Clip="clip",e.Talk="talk",e))(C||{}),O=(e=>(e.Start="START",e.Stop="STOP",e))(O||{}),R=(e=>(e.ChatAnswer="chat/answer",e.ChatPartial="chat/partial",e.StreamDone="stream/done",e.StreamStarted="stream/started",e.StreamFailed="stream/error",e.StreamReady="stream/ready",e.StreamCreated="stream/created",e.StreamVideoCreated="stream-video/started",e.StreamVideoDone="stream-video/done",e.StreamVideoError="stream-video/error",e.StreamVideoRejected="stream-video/rejected",e))(R||{}),k=(e=>(e[e.New=0]="New",e[e.Fail=1]="Fail",e[e.Connected=2]="Connected",e[e.Connecting=3]="Connecting",e[e.Terminating=4]="Terminating",e))(k||{}),B=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(B||{}),J=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(J||{});const F="https://api.d-id.com",G="wss://notifications.d-id.com",ee="79f81a83a67430be2bc0fd61042b8faa",D=()=>Math.random().toString(16).slice(2);function V(){let e=window.localStorage.getItem("did_external_key_id");return e||(e=Math.random().toString(16).slice(2),window.localStorage.setItem("did_external_key_id",e)),e}let te=D();function q(e){if(e.type==="bearer")return`Bearer ${e.token}`;if(e.type==="basic")return`Basic ${btoa(`${e.username}:${e.password}`)}`;if(e.type==="key")return`Client-Key ${e.clientKey}.${V()}_${te}`;throw new Error(`Unknown auth type: ${e}`)}function K(e,i=F){const t=async(n,a)=>{const r=await fetch(i+(n!=null&&n.startsWith("/")?n:`/${n}`),{...a,headers:{...a==null?void 0:a.headers,Authorization:q(e),"Content-Type":"application/json"}});if(!r.ok){let o=await r.text().catch(()=>"Failed to fetch");throw new Error(o)}return r.json()};return{get(n,a){return t(n,{...a,method:"GET"})},post(n,a,r){return t(n,{...r,body:JSON.stringify(a),method:"POST"})},delete(n,a,r){return t(n,{...r,body:JSON.stringify(a),method:"DELETE"})},patch(n,a,r){return t(n,{...r,body:JSON.stringify(a),method:"PATCH"})}}}function Q(e,i=F){const t=K(e,`${i}/agents`);return{create(n,a){return t.post("/",n,a)},getAgents(n,a){return t.get(`/${n?`?tag=${n}`:""}`,a).then(r=>r??[])},getById(n,a){return t.get(`/${n}`,a)},delete(n,a){return t.delete(`/${n}`,void 0,a)},update(n,a,r){return t.patch(`/${n}`,a,r)},newChat(n,a){return t.post(`/${n}/chat`,void 0,a)},chat(n,a,r,o){return t.post(`/${n}/chat/${a}`,r,o)},createRating(n,a,r,o){return t.post(`/${n}/chat/${a}/ratings`,r,o)},updateRating(n,a,r,o,d){return t.patch(`/${n}/chat/${a}/ratings/${r}`,o,d)},deleteRating(n,a,r,o){return t.delete(`/${n}/chat/${a}/ratings/${r}`,o)}}}const ne=e=>new Promise(i=>setTimeout(i,e));function ae(e){return new Promise((i,t)=>{const{callbacks:n,host:a,auth:r}=e,{onMessage:o=null,onOpen:d=null,onClose:g=null,onError:l=null}=n||{},f=new WebSocket(`${a}?authorization=${q(r)}`);f.onmessage=o,f.onclose=g,f.onerror=p=>{console.error(p),l==null||l("Websocket failed to connect",p),t(p)},f.onopen=p=>{d==null||d(p),i(f)}})}async function ie(e){const{retries:i=1}=e;let t=null;for(let n=0;(t==null?void 0:t.readyState)!==WebSocket.OPEN;n++)try{t=await ae(e)}catch(a){if(n===i)throw a;await ne(n*500)}return t}async function X(e,i,t){const n=t!=null&&t.onMessage?[t.onMessage]:[],a=await ie({auth:e,host:i,callbacks:{onError:t==null?void 0:t.onError,onMessage:r=>{const o=JSON.parse(r.data);n.forEach(d=>d(o.event,o))}}});return{socket:a,disconnect:()=>a.close(),subscribeToEvents:r=>n.push(r)}}function re(e,i,t){const n=K(e,`${i}/agents/${t}`);return{createStream(a){return n.post("/streams",{driver_id:a.driver_id,presenter_id:a.presenter_id,compatibility_mode:a.compatibility_mode,stream_warmup:a.stream_warmup,type:C.Clip})},startConnection(a,r,o){return n.post(`/streams/${a}/sdp`,{session_id:o,answer:r,type:C.Clip})},addIceCandidate(a,r,o){return n.post(`/streams/${a}/ice`,{session_id:o,...r,type:C.Clip})},sendStreamRequest(a,r,o){return n.post(`/streams/${a}`,{session_id:r,...o,type:C.Clip})},close(a,r){return n.delete(`/streams/${a}`,{session_id:r,type:C.Clip})}}}function se(e,i,t){const n=K(e,`${i}/agents/${t}`);return{createStream(a,r){return n.post("/streams",{source_url:a.source_url,driver_url:a.driver_url,face:a.face,config:a.config,stream_warmup:a.stream_warmup,type:C.Talk},r)},startConnection(a,r,o,d){return n.post(`/streams/${a}/sdp`,{session_id:o,answer:r,type:C.Talk},d)},addIceCandidate(a,r,o,d){return n.post(`/streams/${a}/ice`,{session_id:o,...r,type:C.Talk},d)},sendStreamRequest(a,r,o,d){return n.post(`/streams/${a}`,{session_id:r,...o,type:C.Talk},d)},close(a,r,o){return n.delete(`/streams/${a}`,{session_id:r,type:C.Talk},o)}}}function oe(e,i){return e.map((t,n)=>n===0?i?{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived-i.bytesReceived,packetsReceived:t.packetsReceived-i.packetsReceived,packetsLost:t.packetsLost-i.packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond}:{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived,packetsReceived:t.packetsReceived,packetsLost:t.packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond}:{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived-e[n-1].bytesReceived,packetsReceived:t.packetsReceived-e[n-1].packetsReceived,packetsLost:t.packetsLost-e[n-1].packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond})}let Y=!1;const E=(e,i)=>Y&&console.log(e,i),ce=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function de(e){switch(e){case"connected":return k.Connected;case"checking":return k.Connecting;case"failed":return k.Fail;case"new":case"closed":case"disconnected":default:return k.New}}function ge(e,i){let t=[],n=0,a=0,r=0,o;return setInterval(()=>{e.getStats().then(g=>{g.forEach(l=>{if(l.type==="inbound-rtp"&&l.kind==="video"){if(a=t.length-1,l&&t[a]){const f=l.bytesReceived,p=t[a].bytesReceived,M=o;let y;if(o=f-p>0,r=o?0:++r,M!==o)if(o)n=t.length,i==null||i(O.Start,y);else{const L=t.slice(n),P=n===0?void 0:t[n-1];y=oe(L,P),y=y.sort((_,s)=>s.packetsLost-_.packetsLost).slice(0,5)}!o&&r===3&&(i==null||i(O.Stop,y))}t.push(l)}})})},500)}async function le(e,i,{debug:t=!1,callbacks:n,auth:a,analytics:r,baseURL:o=F}){Y=t;let d;const{startConnection:g,sendStreamRequest:l,close:f,createStream:p,addIceCandidate:M}=i.videoType===C.Clip?re(a,o,e):se(a,o,e),{id:y,offer:L,ice_servers:P,session_id:_}=await p(i),s=new ce({iceServers:P}),u=s.createDataChannel("JanusDataChannel");if(!_)throw new Error("Could not create session_id");const m=ge(s,n.onVideoStateChange);s.onicecandidate=c=>{E("peerConnection.onicecandidate",c),c.candidate&&c.candidate.sdpMid&&c.candidate.sdpMLineIndex!==null?M(y,{candidate:c.candidate.candidate,sdpMid:c.candidate.sdpMid,sdpMLineIndex:c.candidate.sdpMLineIndex},_):M(y,{candidate:null},_)},s.oniceconnectionstatechange=()=>{var h;E("peerConnection.oniceconnectionstatechange => "+s.iceConnectionState);const c=de(s.iceConnectionState);c===k.Connected?d=setTimeout(()=>{var S;(S=n.onConnectionStateChange)==null||S.call(n,k.Connected)},5e3):(clearTimeout(d),(h=n.onConnectionStateChange)==null||h.call(n,c))},s.ontrack=c=>{var h;E("peerConnection.ontrack",c),(h=n.onSrcObjectReady)==null||h.call(n,c.streams[0])},u.onmessage=c=>{var h;if(u.readyState==="open"){const[S,I]=c.data.split(":");S===R.StreamFailed||S===R.StreamDone?clearInterval(m):S===R.StreamReady&&(clearTimeout(d),(h=n.onConnectionStateChange)==null||h.call(n,k.Connected))}},await s.setRemoteDescription(L),E("set remote description OK");const v=await s.createAnswer();return E("create answer OK"),await s.setLocalDescription(v),E("set local description OK"),await g(y,v,_),E("start connection OK"),{speak(c){return l(y,_,c)},async disconnect(){var c,h;y&&(s&&(s.close(),s.oniceconnectionstatechange=null,s.onnegotiationneeded=null,s.onicecandidate=null,s.ontrack=null),await f(y,_).catch(S=>{}),(c=n.onConnectionStateChange)==null||c.call(n,k.New),(h=n.onVideoStateChange)==null||h.call(n,O.Stop),clearInterval(m))},sessionId:_,streamId:y}}function me(e){const i={token:e.token||"testKey",distinct_id:e.distinctId||V(),isEnabled:e.isEnabled??!0,agentId:e.agent.id,owner_id:e.agent.owner_id??""};return{...i,getRandom:()=>Math.random().toString(16).slice(2),track(t,n){if(!this.isEnabled)return Promise.reject("MixPanel analytics is disabled on creation");const a={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:t,properties:{...n,...i,time:Date.now(),$insert_id:this.getRandom(),origin:window.location.href,"Screen Height":window.screen.height||window.innerWidth,"Screen Width":window.screen.width||window.innerHeight,"User Agent":navigator.userAgent}}])})};return fetch("https://api-js.mixpanel.com/track/?verbose=1&ip=1",a).then(r=>r.json()).catch(r=>console.error(r))}}}function ue(e){var n,a,r,o,d;const i=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop";return{$os:`${(()=>{const g=navigator.platform;return g.toLowerCase().includes("win")?"Windows":g.toLowerCase().includes("mac")?"Mac OS X":g.toLowerCase().includes("linux")?"Linux":"Unknown"})()}`,isMobile:`${i()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:(n=e.presenter)==null?void 0:n.type,agentVoice:{voiceId:(r=(a=e.presenter)==null?void 0:a.voice)==null?void 0:r.voice_id,provider:(d=(o=e.presenter)==null?void 0:o.voice)==null?void 0:d.type}}}function he(e){if(e.presenter){if(e.presenter.type===C.Clip)return{videoType:C.Clip,driver_id:e.presenter.driver_id,presenter_id:e.presenter.presenter_id,stream_warmup:!0}}else throw new Error("Presenter is not initialized");return{videoType:C.Talk,source_url:e.presenter.source_url,stream_warmup:!0}}function Z(e,i,t,n,a){return new Promise(async(r,o)=>{let d=a;const g=await le(e.id,he(e),{...i,callbacks:{...i.callbacks,onConnectionStateChange:async l=>{var f,p;if(l===k.Connected)try{d||(d=await t.newChat(e.id),n.track("agent-chat",{event:"created",chat_id:d.id,agent_id:e.id})),g&&r({chat:d,streamingManager:g})}catch(M){console.error(M),o("Cannot create new chat")}else l===k.Fail&&o(new Error("Cannot create connection"));(p=(f=i.callbacks).onConnectionStateChange)==null||p.call(f,l)},onVideoStateChange(l,f){var p,M;n.track("agent-video",{event:l,rtc_stats:f??[]}),(M=(p=i.callbacks).onVideoStateChange)==null||M.call(p,l,f)}},analytics:n}).catch(o)})}function we(e,i,t){return Q(i,t||F).getById(e)}function W(e){let i="";if(e.greetings&&e.greetings.length>0){const t=Math.floor(Math.random()*e.greetings.length);i=e.greetings[t]}else i=`Hi! I'm ${e.preview_name}, welcome to agents. How can I help you?`;return[{content:i,id:D(),role:"assistant",created_at:new Date().toISOString()}]}async function fe(e,i){var L,P,_;const t={messages:[],chatMode:i.mode||$.Functional};let n=-1;const a=i.wsURL||G,r=i.baseURL||F,o=i.mixpanelKey||ee,d=Q(i.auth,r),g=await d.getById(e);t.messages=W(g),(P=(L=i.callbacks).onNewMessage)==null||P.call(L,t.messages);const l=me({token:o,agent:g,...i});l.track("agent-sdk",{event:"loaded",...ue(g)});const f={onMessage:(s,u)=>{var m,v;if("content"in u){const{content:c}=u,h=t.messages[t.messages.length-1];(h==null?void 0:h.role)==="assistant"&&(n<t.messages.length&&(h.content=s===N.Partial?h.content+c:c),s===N.Answer&&(n=t.messages.length)),s===N.Complete&&l.track("agent-message-received",{messages:t.messages.length}),(v=(m=i.callbacks).onNewMessage)==null||v.call(m,t.messages)}else if([R.StreamVideoCreated,R.StreamVideoDone,R.StreamVideoError,R.StreamVideoRejected].includes(s)){const c=s.split("/")[1];l.track("agent-video",{...u,event:c})}}};async function p(){var v,c,h,S,I;const s=await X(i.auth,a,f),{streamingManager:u,chat:m}=await Z(g,i,d,l,t.chat);n=-1,t.messages=W(g),(c=(v=i.callbacks).onNewMessage)==null||c.call(v,t.messages),m!=null&&m.id&&m.id!==((h=t.chat)==null?void 0:h.id)&&((I=(S=i.callbacks).onNewChat)==null||I.call(S,m==null?void 0:m.id)),t.streamingManager=u,t.socketManager=s,t.chat=m,y($.Functional),l.track("agent-chat",{event:"connect",chatId:m.id,agentId:g.id})}async function M(){var s,u,m,v,c;(s=t.socketManager)==null||s.disconnect(),await((u=t.streamingManager)==null?void 0:u.disconnect()),delete t.streamingManager,delete t.socketManager,t.messages=W(g),(v=(m=i.callbacks).onNewMessage)==null||v.call(m,t.messages),l.track("agent-chat",{event:"disconnect",chatId:(c=t.chat)==null?void 0:c.id,agentId:g.id})}async function y(s){var u,m;s!==t.chatMode&&(l.track("agent-mode-change",{mode:s}),t.chatMode=s,t.chatMode!==$.Functional&&await M(),(m=(u=i.callbacks).onModeChange)==null||m.call(u,s))}return{agent:g,starterMessages:((_=g.knowledge)==null?void 0:_.starter_message)||[],connect:p,disconnect:M,changeMode:y,async reconnect(){if(!t.chat)return p();const s=await X(i.auth,a,f),{streamingManager:u,chat:m}=await Z(g,i,d,l,t.chat);t.streamingManager=u,t.socketManager=s,y($.Functional),l.track("agent-chat",{event:"reconnect",chatId:m.id,agentId:g.id})},async chat(s,u=!1){var m,v,c,h,S,I;try{if(s.length>=800)throw new Error("Message cannot be more than 800 characters");const T=Date.now();if(t.messages.push({id:D(),role:"user",content:s,created_at:new Date(T).toISOString()}),(v=(m=i.callbacks).onNewMessage)==null||v.call(m,t.messages),s.length===0)throw new Error("Message cannot be empty");if(t.chatMode===$.Maintenance)throw new Error("Chat is in maintenance mode");if(t.chatMode!==$.TextOnly){if(!t.streamingManager)throw new Error("Streaming manager is not initialized");if(!t.chat)throw new Error("Chat is not initialized")}else t.chat||(t.chat=await d.newChat(g.id));const A=await d.chat(g.id,t.chat.id,{sessionId:(c=t.streamingManager)==null?void 0:c.sessionId,streamId:(h=t.streamingManager)==null?void 0:h.streamId,messages:t.messages,chatMode:t.chatMode,append_chat:u});return l.track("agent-message-send",{event:"success",messages:t.messages.length+1}),t.messages.push({id:D(),role:"assistant",content:A.result??"",created_at:new Date().toISOString(),matches:A.matches}),A.result&&l.track("agent-message-received",{latency:Date.now()-T,messages:t.messages.length}),(I=(S=i.callbacks).onNewMessage)==null||I.call(S,t.messages),A}catch(T){throw l.track("agent-message-send",{event:"error",messages:t.messages.length}),T}},rate(s,u,m){var h,S,I,T;const v=t.messages.find(A=>A.id===s);if(t.chat){if(!v)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const c=((h=v.matches)==null?void 0:h.map(A=>[A.document_id,A.id]))??[];return l.track("agent-rate",{event:m?"update":"create",thumb:u===1?"up":"down",knowledge_id:((S=g.knowledge)==null?void 0:S.id)??"",matches:c,score:u}),m?d.updateRating(g.id,t.chat.id,m,{knowledge_id:((I=g.knowledge)==null?void 0:I.id)??"",message_id:s,matches:c,score:u}):d.createRating(g.id,t.chat.id,{knowledge_id:((T=g.knowledge)==null?void 0:T.id)??"",message_id:s,matches:c,score:u})},deleteRate(s){var u;if(!t.chat)throw new Error("Chat is not initialized");return l.track("agent-rate-delete",{type:"text",chat_id:(u=t.chat)==null?void 0:u.id,id:s}),d.deleteRating(g.id,t.chat.id,s)},speak(s){if(!t.streamingManager)throw new Error("Streaming manager is not initialized");function u(){if(g.presenter){if(s.type==="text")return{type:"text",provider:s.provider?s.provider:g.presenter.voice,input:s.input,ssml:s.ssml||!1};if(s.type==="audio")return{type:"audio",audio_url:s.audio_url}}else throw new Error("Presenter is not initialized");throw new Error("Invalid payload")}const m=u();return l.track("agent-speak",m),t.streamingManager.speak({script:m})}}}w.ChatMode=$,w.ChatProgress=N,w.ConnectionState=k,w.DocumentType=U,w.KnowledgeType=x,w.PlanGroup=j,w.Providers=B,w.RateState=z,w.StreamEvents=R,w.StreamingState=O,w.Subject=H,w.UserPlan=b,w.VideoType=C,w.VoiceAccess=J,w.createAgentManager=fe,w.getAgent=we,Object.defineProperty(w,Symbol.toStringTag,{value:"Module"})});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SupportedStreamScipt } from '../../StreamScript';
|
|
2
2
|
import { Auth } from '../../auth';
|
|
3
|
-
import { ConnectionState, SendStreamPayloadResponse, StreamingState } from '../../stream';
|
|
3
|
+
import { ConnectionState, SendStreamPayloadResponse, StreamEvents, StreamingState } from '../../stream';
|
|
4
4
|
import { Agent } from './agent';
|
|
5
5
|
import { ChatMode, ChatResponse, Message, RatingEntity } from './chat';
|
|
6
6
|
/**
|
|
@@ -28,7 +28,7 @@ export declare enum ChatProgress {
|
|
|
28
28
|
*/
|
|
29
29
|
Complete = "done"
|
|
30
30
|
}
|
|
31
|
-
export type ChatProgressCallback = (progress: ChatProgress, data: any) => void;
|
|
31
|
+
export type ChatProgressCallback = (progress: ChatProgress | StreamEvents, data: any) => void;
|
|
32
32
|
export type ConnectionStateChangeCallback = (state: ConnectionState) => void;
|
|
33
33
|
export type VideoStateChangeCallback = (state: StreamingState, data: any) => void;
|
|
34
34
|
interface ManagerCallbacks {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { Rect } from '../../face-rect';
|
|
2
1
|
import { ExtendedTextToSpeechProviders } from '../../tts';
|
|
3
2
|
export type videoType = 'talk' | 'clip';
|
|
4
3
|
export type Presenter = TalkPresenter | ClipPresenter;
|
|
@@ -12,8 +11,6 @@ export interface TalkPresenter extends BasePresenter {
|
|
|
12
11
|
type: 'talk';
|
|
13
12
|
source_url: string;
|
|
14
13
|
driver_url?: string;
|
|
15
|
-
stitch?: boolean;
|
|
16
|
-
face?: Rect;
|
|
17
14
|
}
|
|
18
15
|
export interface ClipPresenter extends BasePresenter {
|
|
19
16
|
type: 'clip';
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@d-id/client-sdk",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "1.0.19-beta.
|
|
4
|
+
"version": "1.0.19-beta.79",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "d-id client sdk",
|
|
7
7
|
"repository": {
|
|
@@ -44,4 +44,4 @@
|
|
|
44
44
|
"vite": "^5.1.4",
|
|
45
45
|
"vite-plugin-dts": "^3.7.3"
|
|
46
46
|
}
|
|
47
|
-
}
|
|
47
|
+
}
|