@d-id/client-sdk 1.0.19-beta.80 → 1.0.19-beta.81
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
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
var U = /* @__PURE__ */ ((e) => (e.TRIAL = "trial", e.BASIC = "basic", e.ENTERPRISE = "enterprise", e.LITE = "lite", e.ADVANCED = "advanced", e))(U || {}), B = /* @__PURE__ */ ((e) => (e.TRIAL = "deid-trial", e.PRO = "deid-pro", e.ENTERPRISE = "deid-enterprise", e.LITE = "deid-lite", e.ADVANCED = "deid-advanced", e.BUILD = "deid-api-build", e.LAUNCH = "deid-api-launch", e.SCALE = "deid-api-scale", e))(B || {}), J = /* @__PURE__ */ ((e) => (e.Unrated = "Unrated", e.Positive = "Positive", e.Negative = "Negative", e))(J || {}),
|
|
1
|
+
var U = /* @__PURE__ */ ((e) => (e.TRIAL = "trial", e.BASIC = "basic", e.ENTERPRISE = "enterprise", e.LITE = "lite", e.ADVANCED = "advanced", e))(U || {}), B = /* @__PURE__ */ ((e) => (e.TRIAL = "deid-trial", e.PRO = "deid-pro", e.ENTERPRISE = "deid-enterprise", e.LITE = "deid-lite", e.ADVANCED = "deid-advanced", e.BUILD = "deid-api-build", e.LAUNCH = "deid-api-launch", e.SCALE = "deid-api-scale", e))(B || {}), J = /* @__PURE__ */ ((e) => (e.Unrated = "Unrated", e.Positive = "Positive", e.Negative = "Negative", e))(J || {}), A = /* @__PURE__ */ ((e) => (e.Functional = "Functional", e.TextOnly = "TextOnly", e.Maintenance = "Maintenance", e))(A || {}), x = /* @__PURE__ */ ((e) => (e.Embed = "embed", e.Query = "query", e.Partial = "partial", e.Answer = "answer", e.Complete = "done", e))(x || {}), q = /* @__PURE__ */ ((e) => (e.KnowledgeProcessing = "knowledge/processing", e.KnowledgeIndexing = "knowledge/indexing", e.KnowledgeFailed = "knowledge/error", e.KnowledgeDone = "knowledge/done", e))(q || {}), V = /* @__PURE__ */ ((e) => (e.Knowledge = "knowledge", e.Document = "document", e.Record = "record", e))(V || {}), Q = /* @__PURE__ */ ((e) => (e.Pdf = "pdf", e.Text = "text", e.Html = "html", e.Word = "word", e.Json = "json", e.Markdown = "markdown", e.Csv = "csv", e.Excel = "excel", e.Powerpoint = "powerpoint", e.Archive = "archive", e.Image = "image", e.Audio = "audio", e.Video = "video", e))(Q || {}), C = /* @__PURE__ */ ((e) => (e.Clip = "clip", e.Talk = "talk", e))(C || {}), N = /* @__PURE__ */ ((e) => (e.Start = "START", e.Stop = "STOP", e))(N || {}), b = /* @__PURE__ */ ((e) => (e.ChatAnswer = "chat/answer", e.ChatPartial = "chat/partial", e.StreamDone = "stream/done", e.StreamStarted = "stream/started", e.StreamFailed = "stream/error", e.StreamReady = "stream/ready", e.StreamCreated = "stream/created", e.StreamVideoCreated = "stream-video/started", e.StreamVideoDone = "stream-video/done", e.StreamVideoError = "stream-video/error", e.StreamVideoRejected = "stream-video/rejected", e))(b || {}), S = /* @__PURE__ */ ((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))(S || {}), X = /* @__PURE__ */ ((e) => (e.Amazon = "amazon", e.Microsoft = "microsoft", e.Afflorithmics = "afflorithmics", e.Elevenlabs = "elevenlabs", e))(X || {}), Y = /* @__PURE__ */ ((e) => (e.Public = "public", e.Premium = "premium", e.Private = "private", e))(Y || {});
|
|
2
2
|
const T = "https://api.d-id.com", Z = "wss://notifications.d-id.com", G = "79f81a83a67430be2bc0fd61042b8faa", P = () => Math.random().toString(16).slice(2);
|
|
3
|
-
function
|
|
3
|
+
function H() {
|
|
4
4
|
let e = window.localStorage.getItem("did_external_key_id");
|
|
5
5
|
return e || (e = Math.random().toString(16).slice(2), window.localStorage.setItem("did_external_key_id", e)), e;
|
|
6
6
|
}
|
|
7
7
|
let ee = P();
|
|
8
|
-
function
|
|
8
|
+
function K(e) {
|
|
9
9
|
if (e.type === "bearer")
|
|
10
10
|
return `Bearer ${e.token}`;
|
|
11
11
|
if (e.type === "basic")
|
|
12
12
|
return `Basic ${btoa(`${e.username}:${e.password}`)}`;
|
|
13
13
|
if (e.type === "key")
|
|
14
|
-
return `Client-Key ${e.clientKey}.${
|
|
14
|
+
return `Client-Key ${e.clientKey}.${H()}_${ee}`;
|
|
15
15
|
throw new Error(`Unknown auth type: ${e}`);
|
|
16
16
|
}
|
|
17
17
|
function F(e, r = T) {
|
|
@@ -20,7 +20,7 @@ function F(e, r = T) {
|
|
|
20
20
|
...a,
|
|
21
21
|
headers: {
|
|
22
22
|
...a == null ? void 0 : a.headers,
|
|
23
|
-
Authorization:
|
|
23
|
+
Authorization: K(e),
|
|
24
24
|
"Content-Type": "application/json"
|
|
25
25
|
}
|
|
26
26
|
});
|
|
@@ -60,7 +60,7 @@ function F(e, r = T) {
|
|
|
60
60
|
}
|
|
61
61
|
};
|
|
62
62
|
}
|
|
63
|
-
function
|
|
63
|
+
function D(e, r = T) {
|
|
64
64
|
const t = F(e, `${r}/agents`);
|
|
65
65
|
return {
|
|
66
66
|
create(n, a) {
|
|
@@ -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
|
-
|
|
110
|
+
} = n || {}, p = new WebSocket(`${a}?authorization=${K(i)}`);
|
|
111
|
+
p.onmessage = o, p.onclose = g, p.onerror = (f) => {
|
|
112
112
|
console.error(f), l == null || l("Websocket failed to connect", f), t(f);
|
|
113
|
-
},
|
|
114
|
-
d == null || d(f), r(
|
|
113
|
+
}, p.onopen = (f) => {
|
|
114
|
+
d == null || d(f), r(p);
|
|
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 I = (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
|
|
291
|
+
const p = l.bytesReceived, f = t[a].bytesReceived, k = o;
|
|
292
292
|
let v;
|
|
293
|
-
if (o =
|
|
293
|
+
if (o = p - f > 0, i = o ? 0 : ++i, k !== o)
|
|
294
294
|
if (o)
|
|
295
295
|
n = t.length, r == null || r(N.Start, v);
|
|
296
296
|
else {
|
|
297
|
-
const
|
|
298
|
-
v = se(
|
|
297
|
+
const E = t.slice(n), L = n === 0 ? void 0 : t[n - 1];
|
|
298
|
+
v = se(E, L), v = v.sort((M, s) => s.packetsLost - M.packetsLost).slice(0, 5);
|
|
299
299
|
}
|
|
300
|
-
!o && i ===
|
|
300
|
+
!o && i === 2 && (r == null || r(N.Stop, v));
|
|
301
301
|
}
|
|
302
302
|
t.push(l);
|
|
303
303
|
}
|
|
@@ -317,22 +317,22 @@ async function ge(e, r, {
|
|
|
317
317
|
const {
|
|
318
318
|
startConnection: g,
|
|
319
319
|
sendStreamRequest: l,
|
|
320
|
-
close:
|
|
320
|
+
close: p,
|
|
321
321
|
createStream: f,
|
|
322
322
|
addIceCandidate: k
|
|
323
323
|
} = r.videoType === C.Clip ? re(a, o, e) : ie(a, o, e), {
|
|
324
324
|
id: v,
|
|
325
|
-
offer:
|
|
326
|
-
ice_servers:
|
|
325
|
+
offer: E,
|
|
326
|
+
ice_servers: L,
|
|
327
327
|
session_id: M
|
|
328
328
|
} = await f(r), s = new oe({
|
|
329
|
-
iceServers:
|
|
329
|
+
iceServers: L
|
|
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
|
+
I("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
|
|
@@ -340,25 +340,25 @@ async function ge(e, r, {
|
|
|
340
340
|
candidate: null
|
|
341
341
|
}, M);
|
|
342
342
|
}, s.oniceconnectionstatechange = () => {
|
|
343
|
-
var
|
|
344
|
-
|
|
343
|
+
var h;
|
|
344
|
+
I("peerConnection.oniceconnectionstatechange => " + s.iceConnectionState);
|
|
345
345
|
const c = ce(s.iceConnectionState);
|
|
346
346
|
c === S.Connected ? d = setTimeout(() => {
|
|
347
347
|
var y;
|
|
348
348
|
(y = n.onConnectionStateChange) == null || y.call(n, S.Connected);
|
|
349
|
-
}, 5e3) : (clearTimeout(d), (
|
|
349
|
+
}, 5e3) : (clearTimeout(d), (h = n.onConnectionStateChange) == null || h.call(n, c));
|
|
350
350
|
}, s.ontrack = (c) => {
|
|
351
|
-
var
|
|
352
|
-
|
|
351
|
+
var h;
|
|
352
|
+
I("peerConnection.ontrack", c), (h = n.onSrcObjectReady) == null || h.call(n, c.streams[0]);
|
|
353
353
|
}, u.onmessage = (c) => {
|
|
354
|
-
var
|
|
354
|
+
var h;
|
|
355
355
|
if (u.readyState === "open") {
|
|
356
356
|
const [y, _] = c.data.split(":");
|
|
357
|
-
y ===
|
|
357
|
+
y === b.StreamReady && (clearTimeout(d), (h = n.onConnectionStateChange) == null || h.call(n, S.Connected));
|
|
358
358
|
}
|
|
359
|
-
}, await s.setRemoteDescription(
|
|
360
|
-
const
|
|
361
|
-
return
|
|
359
|
+
}, await s.setRemoteDescription(E), I("set remote description OK");
|
|
360
|
+
const w = await s.createAnswer();
|
|
361
|
+
return I("create answer OK"), await s.setLocalDescription(w), I("set local description OK"), await g(v, w, M), I("start connection OK"), {
|
|
362
362
|
/**
|
|
363
363
|
* Method to send request to server to get clip or talk depend on you payload
|
|
364
364
|
* @param payload
|
|
@@ -370,9 +370,17 @@ async function ge(e, r, {
|
|
|
370
370
|
* Method to close RTC connection
|
|
371
371
|
*/
|
|
372
372
|
async disconnect() {
|
|
373
|
-
var c,
|
|
374
|
-
|
|
375
|
-
|
|
373
|
+
var c, h;
|
|
374
|
+
if (v) {
|
|
375
|
+
s && (s.close(), s.oniceconnectionstatechange = null, s.onnegotiationneeded = null, s.onicecandidate = null, s.ontrack = null);
|
|
376
|
+
try {
|
|
377
|
+
await p(v, M).catch((y) => {
|
|
378
|
+
});
|
|
379
|
+
} catch (y) {
|
|
380
|
+
I("Error on close stream connection", y);
|
|
381
|
+
}
|
|
382
|
+
(c = n.onConnectionStateChange) == null || c.call(n, S.New), (h = n.onVideoStateChange) == null || h.call(n, N.Stop), clearInterval(m);
|
|
383
|
+
}
|
|
376
384
|
},
|
|
377
385
|
/**
|
|
378
386
|
* Session identifier information, should be returned in the body of all streaming requests
|
|
@@ -387,7 +395,7 @@ async function ge(e, r, {
|
|
|
387
395
|
function le(e) {
|
|
388
396
|
const r = {
|
|
389
397
|
token: e.token || "testKey",
|
|
390
|
-
distinct_id: e.distinctId ||
|
|
398
|
+
distinct_id: e.distinctId || H(),
|
|
391
399
|
isEnabled: e.isEnabled ?? !0,
|
|
392
400
|
agentId: e.agent.id,
|
|
393
401
|
owner_id: e.agent.owner_id ?? ""
|
|
@@ -466,7 +474,7 @@ function z(e, r, t, n, a) {
|
|
|
466
474
|
callbacks: {
|
|
467
475
|
...r.callbacks,
|
|
468
476
|
onConnectionStateChange: async (l) => {
|
|
469
|
-
var
|
|
477
|
+
var p, f;
|
|
470
478
|
if (l === S.Connected)
|
|
471
479
|
try {
|
|
472
480
|
d || (d = await t.newChat(e.id), n.track("agent-chat", {
|
|
@@ -482,22 +490,19 @@ function z(e, r, t, n, a) {
|
|
|
482
490
|
}
|
|
483
491
|
else
|
|
484
492
|
l === S.Fail && o(new Error("Cannot create connection"));
|
|
485
|
-
(f = (
|
|
493
|
+
(f = (p = r.callbacks).onConnectionStateChange) == null || f.call(p, l);
|
|
486
494
|
},
|
|
487
|
-
onVideoStateChange(l,
|
|
495
|
+
onVideoStateChange(l, p) {
|
|
488
496
|
var f, k;
|
|
489
|
-
|
|
490
|
-
event: l,
|
|
491
|
-
rtc_stats: h ?? []
|
|
492
|
-
}), (k = (f = r.callbacks).onVideoStateChange) == null || k.call(f, l, h);
|
|
497
|
+
(k = (f = r.callbacks).onVideoStateChange) == null || k.call(f, l, p);
|
|
493
498
|
}
|
|
494
499
|
},
|
|
495
500
|
analytics: n
|
|
496
501
|
}).catch(o);
|
|
497
502
|
});
|
|
498
503
|
}
|
|
499
|
-
function
|
|
500
|
-
return
|
|
504
|
+
function he(e, r, t) {
|
|
505
|
+
return D(r, t || T).getById(e);
|
|
501
506
|
}
|
|
502
507
|
function O(e) {
|
|
503
508
|
let r = "";
|
|
@@ -513,15 +518,15 @@ function O(e) {
|
|
|
513
518
|
created_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
514
519
|
}];
|
|
515
520
|
}
|
|
516
|
-
async function
|
|
517
|
-
var
|
|
521
|
+
async function we(e, r) {
|
|
522
|
+
var E, L, M;
|
|
518
523
|
const t = {
|
|
519
524
|
messages: [],
|
|
520
|
-
chatMode: r.mode ||
|
|
525
|
+
chatMode: r.mode || A.Functional
|
|
521
526
|
};
|
|
522
527
|
let n = -1;
|
|
523
|
-
const a = r.wsURL || Z, i = r.baseURL || T, o = r.mixpanelKey || G, d =
|
|
524
|
-
t.messages = O(g), (
|
|
528
|
+
const a = r.wsURL || Z, i = r.baseURL || T, o = r.mixpanelKey || G, d = D(r.auth, i), g = await d.getById(e);
|
|
529
|
+
t.messages = O(g), (L = (E = r.callbacks).onNewMessage) == null || L.call(E, t.messages);
|
|
525
530
|
const l = le({
|
|
526
531
|
token: o,
|
|
527
532
|
agent: g,
|
|
@@ -531,17 +536,17 @@ async function he(e, r) {
|
|
|
531
536
|
event: "loaded",
|
|
532
537
|
...me(g)
|
|
533
538
|
});
|
|
534
|
-
const
|
|
539
|
+
const p = {
|
|
535
540
|
onMessage: (s, u) => {
|
|
536
|
-
var m,
|
|
541
|
+
var m, w;
|
|
537
542
|
if ("content" in u) {
|
|
538
543
|
const {
|
|
539
544
|
content: c
|
|
540
|
-
} = u,
|
|
541
|
-
(
|
|
545
|
+
} = u, h = t.messages[t.messages.length - 1];
|
|
546
|
+
(h == null ? void 0 : h.role) === "assistant" && (n < t.messages.length && (h.content = s === x.Partial ? h.content + c : c), s === x.Answer && (n = t.messages.length)), s === x.Complete && l.track("agent-message-received", {
|
|
542
547
|
messages: t.messages.length
|
|
543
|
-
}), (
|
|
544
|
-
} else if ([
|
|
548
|
+
}), (w = (m = r.callbacks).onNewMessage) == null || w.call(m, t.messages);
|
|
549
|
+
} else if ([b.StreamVideoCreated, b.StreamVideoDone, b.StreamVideoError, b.StreamVideoRejected].includes(s)) {
|
|
545
550
|
const c = s.split("/")[1];
|
|
546
551
|
l.track("agent-video", {
|
|
547
552
|
...u,
|
|
@@ -551,20 +556,20 @@ async function he(e, r) {
|
|
|
551
556
|
}
|
|
552
557
|
};
|
|
553
558
|
async function f() {
|
|
554
|
-
var
|
|
555
|
-
const s = await W(r.auth, a,
|
|
559
|
+
var w, c, h, y, _;
|
|
560
|
+
const s = await W(r.auth, a, p), {
|
|
556
561
|
streamingManager: u,
|
|
557
562
|
chat: m
|
|
558
563
|
} = await z(g, r, d, l, t.chat);
|
|
559
|
-
n = -1, t.messages = O(g), (c = (
|
|
564
|
+
n = -1, t.messages.length === 0 && (t.messages = O(g), (c = (w = r.callbacks).onNewMessage) == null || c.call(w, t.messages)), m != null && m.id && m.id !== ((h = t.chat) == null ? void 0 : h.id) && ((_ = (y = r.callbacks).onNewChat) == null || _.call(y, m == null ? void 0 : m.id)), t.streamingManager = u, t.socketManager = s, t.chat = m, v(A.Functional), l.track("agent-chat", {
|
|
560
565
|
event: "connect",
|
|
561
566
|
chatId: m.id,
|
|
562
567
|
agentId: g.id
|
|
563
568
|
});
|
|
564
569
|
}
|
|
565
570
|
async function k() {
|
|
566
|
-
var s, u, m,
|
|
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), (
|
|
571
|
+
var s, u, m, w, c;
|
|
572
|
+
(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), (w = (m = r.callbacks).onNewMessage) == null || w.call(m, t.messages), l.track("agent-chat", {
|
|
568
573
|
event: "disconnect",
|
|
569
574
|
chatId: (c = t.chat) == null ? void 0 : c.id,
|
|
570
575
|
agentId: g.id
|
|
@@ -574,7 +579,7 @@ async function he(e, r) {
|
|
|
574
579
|
var u, m;
|
|
575
580
|
s !== t.chatMode && (l.track("agent-mode-change", {
|
|
576
581
|
mode: s
|
|
577
|
-
}), t.chatMode = s, t.chatMode !==
|
|
582
|
+
}), t.chatMode = s, t.chatMode !== A.Functional && await k(), (m = (u = r.callbacks).onModeChange) == null || m.call(u, s));
|
|
578
583
|
}
|
|
579
584
|
return {
|
|
580
585
|
agent: g,
|
|
@@ -583,20 +588,22 @@ async function he(e, r) {
|
|
|
583
588
|
disconnect: k,
|
|
584
589
|
changeMode: v,
|
|
585
590
|
async reconnect() {
|
|
591
|
+
var w, c;
|
|
586
592
|
if (!t.chat)
|
|
587
593
|
return f();
|
|
588
|
-
|
|
594
|
+
(w = t.socketManager) == null || w.disconnect(), await ((c = t.streamingManager) == null ? void 0 : c.disconnect());
|
|
595
|
+
const s = await W(r.auth, a, p), {
|
|
589
596
|
streamingManager: u,
|
|
590
597
|
chat: m
|
|
591
598
|
} = await z(g, r, d, l, t.chat);
|
|
592
|
-
t.streamingManager = u, t.socketManager = s, v(
|
|
599
|
+
t.streamingManager = u, t.socketManager = s, v(A.Functional), l.track("agent-chat", {
|
|
593
600
|
event: "reconnect",
|
|
594
601
|
chatId: m.id,
|
|
595
602
|
agentId: g.id
|
|
596
603
|
});
|
|
597
604
|
},
|
|
598
605
|
async chat(s, u = !1) {
|
|
599
|
-
var m,
|
|
606
|
+
var m, w, c, h, y, _;
|
|
600
607
|
try {
|
|
601
608
|
if (s.length >= 800)
|
|
602
609
|
throw new Error("Message cannot be more than 800 characters");
|
|
@@ -606,11 +613,11 @@ async function he(e, r) {
|
|
|
606
613
|
role: "user",
|
|
607
614
|
content: s,
|
|
608
615
|
created_at: new Date($).toISOString()
|
|
609
|
-
}), (
|
|
616
|
+
}), (w = (m = r.callbacks).onNewMessage) == null || w.call(m, t.messages), s.length === 0)
|
|
610
617
|
throw new Error("Message cannot be empty");
|
|
611
|
-
if (t.chatMode ===
|
|
618
|
+
if (t.chatMode === A.Maintenance)
|
|
612
619
|
throw new Error("Chat is in maintenance mode");
|
|
613
|
-
if (t.chatMode !==
|
|
620
|
+
if (t.chatMode !== A.TextOnly) {
|
|
614
621
|
if (!t.streamingManager)
|
|
615
622
|
throw new Error("Streaming manager is not initialized");
|
|
616
623
|
if (!t.chat)
|
|
@@ -619,7 +626,7 @@ async function he(e, r) {
|
|
|
619
626
|
t.chat || (t.chat = await d.newChat(g.id));
|
|
620
627
|
const R = await d.chat(g.id, t.chat.id, {
|
|
621
628
|
sessionId: (c = t.streamingManager) == null ? void 0 : c.sessionId,
|
|
622
|
-
streamId: (
|
|
629
|
+
streamId: (h = t.streamingManager) == null ? void 0 : h.streamId,
|
|
623
630
|
messages: t.messages,
|
|
624
631
|
chatMode: t.chatMode,
|
|
625
632
|
append_chat: u
|
|
@@ -630,13 +637,13 @@ async function he(e, r) {
|
|
|
630
637
|
}), t.messages.push({
|
|
631
638
|
id: P(),
|
|
632
639
|
role: "assistant",
|
|
633
|
-
content: R.result
|
|
640
|
+
content: R.result || "",
|
|
634
641
|
created_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
635
642
|
matches: R.matches
|
|
636
|
-
}), R.result && l.track("agent-message-received", {
|
|
643
|
+
}), R.result && (l.track("agent-message-received", {
|
|
637
644
|
latency: Date.now() - $,
|
|
638
645
|
messages: t.messages.length
|
|
639
|
-
}), (_ = (y = r.callbacks).onNewMessage) == null || _.call(y, t.messages), R;
|
|
646
|
+
}), (_ = (y = r.callbacks).onNewMessage) == null || _.call(y, t.messages)), R;
|
|
640
647
|
} catch ($) {
|
|
641
648
|
throw l.track("agent-message-send", {
|
|
642
649
|
event: "error",
|
|
@@ -645,14 +652,14 @@ async function he(e, r) {
|
|
|
645
652
|
}
|
|
646
653
|
},
|
|
647
654
|
rate(s, u, m) {
|
|
648
|
-
var
|
|
649
|
-
const
|
|
655
|
+
var h, y, _, $;
|
|
656
|
+
const w = t.messages.find((R) => R.id === s);
|
|
650
657
|
if (t.chat) {
|
|
651
|
-
if (!
|
|
658
|
+
if (!w)
|
|
652
659
|
throw new Error("Message not found");
|
|
653
660
|
} else
|
|
654
661
|
throw new Error("Chat is not initialized");
|
|
655
|
-
const c = ((
|
|
662
|
+
const c = ((h = w.matches) == null ? void 0 : h.map((R) => [R.document_id, R.id])) ?? [];
|
|
656
663
|
return l.track("agent-rate", {
|
|
657
664
|
event: m ? "update" : "create",
|
|
658
665
|
thumb: u === 1 ? "up" : "down",
|
|
@@ -710,7 +717,7 @@ async function he(e, r) {
|
|
|
710
717
|
};
|
|
711
718
|
}
|
|
712
719
|
export {
|
|
713
|
-
|
|
720
|
+
A as ChatMode,
|
|
714
721
|
x as ChatProgress,
|
|
715
722
|
S as ConnectionState,
|
|
716
723
|
Q as DocumentType,
|
|
@@ -718,12 +725,12 @@ export {
|
|
|
718
725
|
B as PlanGroup,
|
|
719
726
|
X as Providers,
|
|
720
727
|
J as RateState,
|
|
721
|
-
|
|
728
|
+
b as StreamEvents,
|
|
722
729
|
N as StreamingState,
|
|
723
730
|
q as Subject,
|
|
724
731
|
U as UserPlan,
|
|
725
732
|
C as VideoType,
|
|
726
733
|
Y as VoiceAccess,
|
|
727
|
-
|
|
728
|
-
|
|
734
|
+
we as createAgentManager,
|
|
735
|
+
he as getAgent
|
|
729
736
|
};
|
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||{}),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
|
+
(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||{}),z=(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))(z||{}),D=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(D||{}),A=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e))(A||{}),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||{}),E=(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))(E||{}),M=(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))(M||{}),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",K=()=>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=K();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 W(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=W(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=p=>{console.error(p),l==null||l("Websocket failed to connect",p),t(p)},v.onopen=p=>{d==null||d(p),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=W(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=W(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,i)=>Y&&console.log(e,i),ce=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function de(e){switch(e){case"connected":return M.Connected;case"checking":return M.Connecting;case"failed":return M.Fail;case"new":case"closed":case"disconnected":default:return M.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,p=t[a].bytesReceived,k=o;let y;if(o=v-p>0,r=o?0:++r,k!==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===2&&(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:v,createStream:p,addIceCandidate:k}=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=>{$("peerConnection.onicecandidate",c),c.candidate&&c.candidate.sdpMid&&c.candidate.sdpMLineIndex!==null?k(y,{candidate:c.candidate.candidate,sdpMid:c.candidate.sdpMid,sdpMLineIndex:c.candidate.sdpMLineIndex},_):k(y,{candidate:null},_)},s.oniceconnectionstatechange=()=>{var h;$("peerConnection.oniceconnectionstatechange => "+s.iceConnectionState);const c=de(s.iceConnectionState);c===M.Connected?d=setTimeout(()=>{var S;(S=n.onConnectionStateChange)==null||S.call(n,M.Connected)},5e3):(clearTimeout(d),(h=n.onConnectionStateChange)==null||h.call(n,c))},s.ontrack=c=>{var h;$("peerConnection.ontrack",c),(h=n.onSrcObjectReady)==null||h.call(n,c.streams[0])},u.onmessage=c=>{var h;if(u.readyState==="open"){const[S,R]=c.data.split(":");S===E.StreamReady&&(clearTimeout(d),(h=n.onConnectionStateChange)==null||h.call(n,M.Connected))}},await s.setRemoteDescription(L),$("set remote description OK");const f=await s.createAnswer();return $("create answer OK"),await s.setLocalDescription(f),$("set local description OK"),await g(y,f,_),$("start connection OK"),{speak(c){return l(y,_,c)},async disconnect(){var c,h;if(y){s&&(s.close(),s.oniceconnectionstatechange=null,s.onnegotiationneeded=null,s.onicecandidate=null,s.ontrack=null);try{await v(y,_).catch(S=>{})}catch(S){$("Error on close stream connection",S)}(c=n.onConnectionStateChange)==null||c.call(n,M.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 v,p;if(l===M.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(k){console.error(k),o("Cannot create new chat")}else l===M.Fail&&o(new Error("Cannot create connection"));(p=(v=i.callbacks).onConnectionStateChange)==null||p.call(v,l)},onVideoStateChange(l,v){var p,k;(k=(p=i.callbacks).onVideoStateChange)==null||k.call(p,l,v)}},analytics:n}).catch(o)})}function we(e,i,t){return Q(i,t||F).getById(e)}function j(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:K(),role:"assistant",created_at:new Date().toISOString()}]}async function fe(e,i){var L,P,_;const t={messages:[],chatMode:i.mode||A.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=j(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)}else if([E.StreamVideoCreated,E.StreamVideoDone,E.StreamVideoError,E.StreamVideoRejected].includes(s)){const c=s.split("/")[1];l.track("agent-video",{...u,event:c})}}};async function p(){var f,c,h,S,R;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=j(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)&&((R=(S=i.callbacks).onNewChat)==null||R.call(S,m==null?void 0:m.id)),t.streamingManager=u,t.socketManager=s,t.chat=m,y(A.Functional),l.track("agent-chat",{event:"connect",chatId:m.id,agentId:g.id})}async function k(){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=j(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 y(s){var u,m;s!==t.chatMode&&(l.track("agent-mode-change",{mode:s}),t.chatMode=s,t.chatMode!==A.Functional&&await k(),(m=(u=i.callbacks).onModeChange)==null||m.call(u,s))}return{agent:g,starterMessages:((_=g.knowledge)==null?void 0:_.starter_message)||[],connect:p,disconnect:k,changeMode:y,async reconnect(){var f,c;if(!t.chat)return p();(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,y(A.Functional),l.track("agent-chat",{event:"reconnect",chatId:m.id,agentId:g.id})},async chat(s,u=!1){var m,f,c,h,S,R;try{if(s.length>=800)throw new Error("Message cannot be more than 800 characters");const T=Date.now();if(t.messages.push({id:K(),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===A.Maintenance)throw new Error("Chat is in maintenance mode");if(t.chatMode!==A.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 I=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:K(),role:"assistant",content:I.result||"",created_at:new Date().toISOString(),matches:I.matches}),I.result&&(l.track("agent-message-received",{latency:Date.now()-T,messages:t.messages.length}),(R=(S=i.callbacks).onNewMessage)==null||R.call(S,t.messages)),I}catch(T){throw l.track("agent-message-send",{event:"error",messages:t.messages.length}),T}},rate(s,u,m){var h,S,R,T;const f=t.messages.find(I=>I.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(I=>[I.document_id,I.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:((R=g.knowledge)==null?void 0:R.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=A,w.ChatProgress=N,w.ConnectionState=M,w.DocumentType=U,w.KnowledgeType=x,w.PlanGroup=z,w.Providers=B,w.RateState=D,w.StreamEvents=E,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,3 +1,4 @@
|
|
|
1
|
+
import { Rect } from '../../face-rect';
|
|
1
2
|
import { ExtendedTextToSpeechProviders } from '../../tts';
|
|
2
3
|
export type videoType = 'talk' | 'clip';
|
|
3
4
|
export type Presenter = TalkPresenter | ClipPresenter;
|
|
@@ -11,6 +12,8 @@ export interface TalkPresenter extends BasePresenter {
|
|
|
11
12
|
type: 'talk';
|
|
12
13
|
source_url: string;
|
|
13
14
|
driver_url?: string;
|
|
15
|
+
stitch?: boolean;
|
|
16
|
+
face?: Rect;
|
|
14
17
|
}
|
|
15
18
|
export interface ClipPresenter extends BasePresenter {
|
|
16
19
|
type: 'clip';
|