@d-id/client-sdk 1.0.19-beta.97 → 1.0.19-beta.99
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
|
|
2
|
-
const L = "https://api.d-id.com",
|
|
3
|
-
function
|
|
1
|
+
var Z = /* @__PURE__ */ ((e) => (e.TRIAL = "trial", e.BASIC = "basic", e.ENTERPRISE = "enterprise", e.LITE = "lite", e.ADVANCED = "advanced", e))(Z || {}), G = /* @__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))(G || {}), ee = /* @__PURE__ */ ((e) => (e.Unrated = "Unrated", e.Positive = "Positive", e.Negative = "Negative", e))(ee || {}), $ = /* @__PURE__ */ ((e) => (e.Functional = "Functional", e.TextOnly = "TextOnly", e.Maintenance = "Maintenance", e.Playground = "Playground", e))($ || {}), D = /* @__PURE__ */ ((e) => (e.Embed = "embed", e.Query = "query", e.Partial = "partial", e.Answer = "answer", e.Complete = "done", e))(D || {}), te = /* @__PURE__ */ ((e) => (e.KnowledgeProcessing = "knowledge/processing", e.KnowledgeIndexing = "knowledge/indexing", e.KnowledgeFailed = "knowledge/error", e.KnowledgeDone = "knowledge/done", e))(te || {}), ne = /* @__PURE__ */ ((e) => (e.Knowledge = "knowledge", e.Document = "document", e.Record = "record", e))(ne || {}), re = /* @__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))(re || {}), v = /* @__PURE__ */ ((e) => (e.Clip = "clip", e.Talk = "talk", e))(v || {}), N = /* @__PURE__ */ ((e) => (e.Start = "START", e.Stop = "STOP", e))(N || {}), A = /* @__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))(A || {}), I = /* @__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))(I || {}), ae = /* @__PURE__ */ ((e) => (e.Amazon = "amazon", e.Microsoft = "microsoft", e.Afflorithmics = "afflorithmics", e.Elevenlabs = "elevenlabs", e))(ae || {}), ie = /* @__PURE__ */ ((e) => (e.Public = "public", e.Premium = "premium", e.Private = "private", e))(ie || {});
|
|
2
|
+
const L = "https://api.d-id.com", se = "wss://notifications.d-id.com", oe = "79f81a83a67430be2bc0fd61042b8faa", F = () => Math.random().toString(16).slice(2);
|
|
3
|
+
function q() {
|
|
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
|
-
let
|
|
8
|
-
function
|
|
7
|
+
let ce = F();
|
|
8
|
+
function Q(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}.${q()}_${ce}`;
|
|
15
15
|
throw new Error(`Unknown auth type: ${e}`);
|
|
16
16
|
}
|
|
17
17
|
function V(e, i = L, t) {
|
|
@@ -20,7 +20,7 @@ function V(e, i = L, t) {
|
|
|
20
20
|
...n,
|
|
21
21
|
headers: {
|
|
22
22
|
...n == null ? void 0 : n.headers,
|
|
23
|
-
Authorization:
|
|
23
|
+
Authorization: Q(e),
|
|
24
24
|
"Content-Type": "application/json"
|
|
25
25
|
}
|
|
26
26
|
});
|
|
@@ -64,7 +64,7 @@ function V(e, i = L, t) {
|
|
|
64
64
|
}
|
|
65
65
|
};
|
|
66
66
|
}
|
|
67
|
-
function
|
|
67
|
+
function X(e, i = L, t) {
|
|
68
68
|
const a = V(e, `${i}/agents`, t);
|
|
69
69
|
return {
|
|
70
70
|
create(r, n) {
|
|
@@ -102,8 +102,8 @@ function Y(e, i = L, t) {
|
|
|
102
102
|
}
|
|
103
103
|
};
|
|
104
104
|
}
|
|
105
|
-
const
|
|
106
|
-
function
|
|
105
|
+
const de = (e) => new Promise((i) => setTimeout(i, e));
|
|
106
|
+
function ge(e) {
|
|
107
107
|
return new Promise((i, t) => {
|
|
108
108
|
const {
|
|
109
109
|
callbacks: a,
|
|
@@ -113,32 +113,32 @@ function le(e) {
|
|
|
113
113
|
onMessage: s = null,
|
|
114
114
|
onOpen: o = null,
|
|
115
115
|
onClose: c = null,
|
|
116
|
-
onError:
|
|
117
|
-
} = a || {},
|
|
118
|
-
|
|
119
|
-
console.error(
|
|
120
|
-
},
|
|
121
|
-
o == null || o(
|
|
116
|
+
onError: h = null
|
|
117
|
+
} = a || {}, M = new WebSocket(`${r}?authorization=${Q(n)}`);
|
|
118
|
+
M.onmessage = s, M.onclose = c, M.onerror = (y) => {
|
|
119
|
+
console.error(y), h == null || h("Websocket failed to connect", y), t(y);
|
|
120
|
+
}, M.onopen = (y) => {
|
|
121
|
+
o == null || o(y), i(M);
|
|
122
122
|
};
|
|
123
123
|
});
|
|
124
124
|
}
|
|
125
|
-
async function
|
|
125
|
+
async function le(e) {
|
|
126
126
|
const {
|
|
127
127
|
retries: i = 1
|
|
128
128
|
} = e;
|
|
129
129
|
let t = null;
|
|
130
130
|
for (let a = 0; (t == null ? void 0 : t.readyState) !== WebSocket.OPEN; a++)
|
|
131
131
|
try {
|
|
132
|
-
t = await
|
|
132
|
+
t = await ge(e);
|
|
133
133
|
} catch (r) {
|
|
134
134
|
if (a === i)
|
|
135
135
|
throw r;
|
|
136
|
-
await
|
|
136
|
+
await de(a * 500);
|
|
137
137
|
}
|
|
138
138
|
return t;
|
|
139
139
|
}
|
|
140
|
-
async function
|
|
141
|
-
const a = t != null && t.onMessage ? [t.onMessage] : [], r = await
|
|
140
|
+
async function J(e, i, t) {
|
|
141
|
+
const a = t != null && t.onMessage ? [t.onMessage] : [], r = await le({
|
|
142
142
|
auth: e,
|
|
143
143
|
host: i,
|
|
144
144
|
callbacks: {
|
|
@@ -155,7 +155,7 @@ async function j(e, i, t) {
|
|
|
155
155
|
subscribeToEvents: (n) => a.push(n)
|
|
156
156
|
};
|
|
157
157
|
}
|
|
158
|
-
function
|
|
158
|
+
function ue(e, i, t, a) {
|
|
159
159
|
const r = V(e, `${i}/agents/${t}`, a);
|
|
160
160
|
return {
|
|
161
161
|
createStream(n) {
|
|
@@ -196,7 +196,7 @@ function me(e, i, t, a) {
|
|
|
196
196
|
}
|
|
197
197
|
};
|
|
198
198
|
}
|
|
199
|
-
function
|
|
199
|
+
function me(e, i, t, a) {
|
|
200
200
|
const r = V(e, `${i}/agents/${t}`, a);
|
|
201
201
|
return {
|
|
202
202
|
createStream(n, s) {
|
|
@@ -240,24 +240,24 @@ function he(e, i, t, a) {
|
|
|
240
240
|
}
|
|
241
241
|
};
|
|
242
242
|
}
|
|
243
|
-
let
|
|
244
|
-
const
|
|
245
|
-
function
|
|
243
|
+
let Y = !1;
|
|
244
|
+
const E = (e, i) => Y && console.log(e, i), he = (window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection).bind(window);
|
|
245
|
+
function j(e) {
|
|
246
246
|
switch (e) {
|
|
247
247
|
case "connected":
|
|
248
|
-
return
|
|
248
|
+
return I.Connected;
|
|
249
249
|
case "checking":
|
|
250
|
-
return
|
|
250
|
+
return I.Connecting;
|
|
251
251
|
case "failed":
|
|
252
|
-
return
|
|
252
|
+
return I.Fail;
|
|
253
253
|
case "new":
|
|
254
254
|
case "closed":
|
|
255
255
|
case "disconnected":
|
|
256
256
|
default:
|
|
257
|
-
return
|
|
257
|
+
return I.New;
|
|
258
258
|
}
|
|
259
259
|
}
|
|
260
|
-
function
|
|
260
|
+
function we() {
|
|
261
261
|
let e = 0;
|
|
262
262
|
return (i) => {
|
|
263
263
|
for (const t of i.values())
|
|
@@ -268,135 +268,134 @@ function fe() {
|
|
|
268
268
|
return !1;
|
|
269
269
|
};
|
|
270
270
|
}
|
|
271
|
-
function
|
|
272
|
-
const
|
|
273
|
-
let
|
|
274
|
-
const
|
|
271
|
+
function fe(e, i) {
|
|
272
|
+
const a = Math.max(Math.ceil(10), 1);
|
|
273
|
+
let r = 0, n = !1;
|
|
274
|
+
const s = we();
|
|
275
275
|
return setInterval(async () => {
|
|
276
|
-
const
|
|
277
|
-
o
|
|
276
|
+
const o = await e.getStats();
|
|
277
|
+
s(o) ? (r = 0, n || (i == null || i(N.Start), n = !0)) : n && (r++, r >= a && (i == null || i(N.Stop), n = !1));
|
|
278
278
|
}, 100);
|
|
279
279
|
}
|
|
280
|
-
async function
|
|
280
|
+
async function pe(e, i, {
|
|
281
281
|
debug: t = !1,
|
|
282
282
|
callbacks: a,
|
|
283
283
|
auth: r,
|
|
284
284
|
analytics: n,
|
|
285
285
|
baseURL: s = L
|
|
286
286
|
}) {
|
|
287
|
-
|
|
287
|
+
Y = t;
|
|
288
288
|
let o;
|
|
289
289
|
const {
|
|
290
290
|
startConnection: c,
|
|
291
|
-
sendStreamRequest:
|
|
292
|
-
close:
|
|
293
|
-
createStream:
|
|
294
|
-
addIceCandidate:
|
|
295
|
-
} = i.videoType === v.Clip ?
|
|
296
|
-
id:
|
|
291
|
+
sendStreamRequest: h,
|
|
292
|
+
close: M,
|
|
293
|
+
createStream: y,
|
|
294
|
+
addIceCandidate: _
|
|
295
|
+
} = i.videoType === v.Clip ? ue(r, s, e, a.onError) : me(r, s, e, a.onError), {
|
|
296
|
+
id: S,
|
|
297
297
|
offer: K,
|
|
298
|
-
ice_servers:
|
|
299
|
-
session_id:
|
|
300
|
-
} = await
|
|
301
|
-
iceServers:
|
|
298
|
+
ice_servers: O,
|
|
299
|
+
session_id: k
|
|
300
|
+
} = await y(i), f = new he({
|
|
301
|
+
iceServers: O
|
|
302
302
|
}), d = f.createDataChannel("JanusDataChannel");
|
|
303
|
-
if (!
|
|
303
|
+
if (!k)
|
|
304
304
|
throw new Error("Could not create session_id");
|
|
305
|
-
const
|
|
305
|
+
const u = fe(f, a.onVideoStateChange);
|
|
306
306
|
f.onicecandidate = (g) => {
|
|
307
|
-
|
|
307
|
+
E("peerConnection.onicecandidate", g), g.candidate && g.candidate.sdpMid && g.candidate.sdpMLineIndex !== null ? _(S, {
|
|
308
308
|
candidate: g.candidate.candidate,
|
|
309
309
|
sdpMid: g.candidate.sdpMid,
|
|
310
310
|
sdpMLineIndex: g.candidate.sdpMLineIndex
|
|
311
|
-
},
|
|
311
|
+
}, k) : _(S, {
|
|
312
312
|
candidate: null
|
|
313
|
-
},
|
|
313
|
+
}, k);
|
|
314
314
|
}, f.oniceconnectionstatechange = () => {
|
|
315
|
-
var
|
|
316
|
-
|
|
317
|
-
const g =
|
|
318
|
-
g ===
|
|
315
|
+
var m;
|
|
316
|
+
E("peerConnection.oniceconnectionstatechange => " + f.iceConnectionState);
|
|
317
|
+
const g = j(f.iceConnectionState);
|
|
318
|
+
g === I.Connected ? o = setTimeout(() => {
|
|
319
319
|
var w;
|
|
320
|
-
(w = a.onConnectionStateChange) == null || w.call(a,
|
|
321
|
-
}, 5e3) : (clearTimeout(o), (
|
|
320
|
+
(w = a.onConnectionStateChange) == null || w.call(a, I.Connected);
|
|
321
|
+
}, 5e3) : (clearTimeout(o), (m = a.onConnectionStateChange) == null || m.call(a, g));
|
|
322
322
|
}, f.ontrack = (g) => {
|
|
323
|
-
var
|
|
324
|
-
|
|
323
|
+
var m;
|
|
324
|
+
E("peerConnection.ontrack", g), (m = a.onSrcObjectReady) == null || m.call(a, g.streams[0]);
|
|
325
325
|
}, d.onmessage = (g) => {
|
|
326
|
-
var
|
|
326
|
+
var m;
|
|
327
327
|
if (d.readyState === "open") {
|
|
328
328
|
const [w, p] = g.data.split(":");
|
|
329
|
-
w ===
|
|
329
|
+
w === A.StreamReady && (clearTimeout(o), (m = a.onConnectionStateChange) == null || m.call(a, I.Connected));
|
|
330
330
|
}
|
|
331
|
-
}, await f.setRemoteDescription(K),
|
|
331
|
+
}, await f.setRemoteDescription(K), E("set remote description OK");
|
|
332
332
|
const l = await f.createAnswer();
|
|
333
|
-
return
|
|
333
|
+
return E("create answer OK"), await f.setLocalDescription(l), E("set local description OK"), await c(S, l, k), E("start connection OK"), {
|
|
334
334
|
/**
|
|
335
335
|
* Method to send request to server to get clip or talk depend on you payload
|
|
336
336
|
* @param payload
|
|
337
337
|
*/
|
|
338
338
|
speak(g) {
|
|
339
|
-
return
|
|
339
|
+
return h(S, k, g);
|
|
340
340
|
},
|
|
341
341
|
/**
|
|
342
342
|
* Method to close RTC connection
|
|
343
343
|
*/
|
|
344
344
|
async disconnect() {
|
|
345
|
-
var g,
|
|
346
|
-
if (
|
|
345
|
+
var g, m, w;
|
|
346
|
+
if (S) {
|
|
347
347
|
if (f) {
|
|
348
|
-
if (
|
|
349
|
-
(g = a.onVideoStateChange) == null || g.call(a, N.Stop), clearInterval(
|
|
348
|
+
if (j(f.iceConnectionState) === I.New) {
|
|
349
|
+
(g = a.onVideoStateChange) == null || g.call(a, N.Stop), clearInterval(u);
|
|
350
350
|
return;
|
|
351
351
|
}
|
|
352
352
|
f.close(), f.oniceconnectionstatechange = null, f.onnegotiationneeded = null, f.onicecandidate = null, f.ontrack = null;
|
|
353
353
|
}
|
|
354
354
|
try {
|
|
355
|
-
await
|
|
355
|
+
await M(S, k).catch((p) => {
|
|
356
356
|
});
|
|
357
357
|
} catch (p) {
|
|
358
|
-
|
|
358
|
+
E("Error on close stream connection", p);
|
|
359
359
|
}
|
|
360
|
-
(
|
|
360
|
+
(m = a.onConnectionStateChange) == null || m.call(a, I.New), (w = a.onVideoStateChange) == null || w.call(a, N.Stop), clearInterval(u);
|
|
361
361
|
}
|
|
362
362
|
},
|
|
363
363
|
/**
|
|
364
364
|
* Session identifier information, should be returned in the body of all streaming requests
|
|
365
365
|
*/
|
|
366
|
-
sessionId:
|
|
366
|
+
sessionId: k,
|
|
367
367
|
/**
|
|
368
368
|
* Id of current RTC stream
|
|
369
369
|
*/
|
|
370
|
-
streamId:
|
|
370
|
+
streamId: S
|
|
371
371
|
};
|
|
372
372
|
}
|
|
373
373
|
function ye(e) {
|
|
374
|
-
|
|
375
|
-
const t = ((r = window == null ? void 0 : window.location) == null ? void 0 : r.hostname) === "studio.d-id.com" || ((n = window == null ? void 0 : window.location) == null ? void 0 : n.hostname) === "studio-staging.d-id.com" ? "studio" : window != null && window.hasOwnProperty("DID_AGENTS_API") ? "agents-ui" : "agents-sdk", a = {
|
|
374
|
+
const i = window != null && window.hasOwnProperty("DID_AGENTS_API") ? "agents-ui" : "agents-sdk", t = {
|
|
376
375
|
token: e.token || "testKey",
|
|
377
|
-
distinct_id: e.distinctId ||
|
|
376
|
+
distinct_id: e.distinctId || q(),
|
|
378
377
|
isEnabled: e.isEnabled ?? !0,
|
|
379
378
|
agentId: e.agent.id,
|
|
380
379
|
owner_id: e.agent.owner_id ?? ""
|
|
381
380
|
};
|
|
382
381
|
return {
|
|
383
|
-
...
|
|
382
|
+
...t,
|
|
384
383
|
getRandom: () => Math.random().toString(16).slice(2),
|
|
385
|
-
track(
|
|
384
|
+
track(a, r) {
|
|
386
385
|
if (!this.isEnabled)
|
|
387
386
|
return Promise.reject("MixPanel analytics is disabled on creation");
|
|
388
|
-
const
|
|
387
|
+
const n = {
|
|
389
388
|
method: "POST",
|
|
390
389
|
headers: {
|
|
391
390
|
"Content-Type": "application/x-www-form-urlencoded"
|
|
392
391
|
},
|
|
393
392
|
body: new URLSearchParams({
|
|
394
393
|
data: JSON.stringify([{
|
|
395
|
-
event:
|
|
394
|
+
event: a,
|
|
396
395
|
properties: {
|
|
397
|
-
...
|
|
398
|
-
...
|
|
399
|
-
source:
|
|
396
|
+
...r,
|
|
397
|
+
...t,
|
|
398
|
+
source: i,
|
|
400
399
|
time: Date.now(),
|
|
401
400
|
$insert_id: this.getRandom(),
|
|
402
401
|
origin: window.location.href,
|
|
@@ -407,11 +406,11 @@ function ye(e) {
|
|
|
407
406
|
}])
|
|
408
407
|
})
|
|
409
408
|
};
|
|
410
|
-
return fetch("https://api-js.mixpanel.com/track/?verbose=1&ip=1",
|
|
409
|
+
return fetch("https://api-js.mixpanel.com/track/?verbose=1&ip=1", n).then((s) => s.json()).catch((s) => console.error(s));
|
|
411
410
|
}
|
|
412
411
|
};
|
|
413
412
|
}
|
|
414
|
-
function
|
|
413
|
+
function Me(e) {
|
|
415
414
|
var a, r, n, s, o;
|
|
416
415
|
const i = () => /Mobi|Android/i.test(navigator.userAgent) ? "Mobile" : "Desktop";
|
|
417
416
|
return {
|
|
@@ -429,8 +428,8 @@ function ve(e) {
|
|
|
429
428
|
}
|
|
430
429
|
};
|
|
431
430
|
}
|
|
432
|
-
const
|
|
433
|
-
function
|
|
431
|
+
const ve = 1080;
|
|
432
|
+
function Ce(e, i) {
|
|
434
433
|
if (e.presenter) {
|
|
435
434
|
if (e.presenter.type === v.Clip)
|
|
436
435
|
return {
|
|
@@ -441,7 +440,7 @@ function _e(e, i) {
|
|
|
441
440
|
};
|
|
442
441
|
} else
|
|
443
442
|
throw new Error("Presenter is not initialized");
|
|
444
|
-
const t = i || (e.presenter.stitch ?
|
|
443
|
+
const t = i || (e.presenter.stitch ? ve : void 0);
|
|
445
444
|
return {
|
|
446
445
|
videoType: v.Talk,
|
|
447
446
|
source_url: e.presenter.source_url,
|
|
@@ -454,40 +453,44 @@ function _e(e, i) {
|
|
|
454
453
|
function U(e, i, t, a, r) {
|
|
455
454
|
return new Promise(async (n, s) => {
|
|
456
455
|
let o = r;
|
|
457
|
-
const c = await
|
|
456
|
+
const c = await pe(e.id, Ce(e, i.outputResolution), {
|
|
458
457
|
...i,
|
|
459
458
|
analytics: a,
|
|
460
459
|
callbacks: {
|
|
461
460
|
...i.callbacks,
|
|
462
|
-
onConnectionStateChange: async (
|
|
463
|
-
var
|
|
464
|
-
if (
|
|
461
|
+
onConnectionStateChange: async (h) => {
|
|
462
|
+
var M, y;
|
|
463
|
+
if (h === I.Connected)
|
|
465
464
|
try {
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
465
|
+
try {
|
|
466
|
+
o || (o = await t.newChat(e.id), a.track("agent-chat", {
|
|
467
|
+
event: "created",
|
|
468
|
+
chat_id: o.id,
|
|
469
|
+
agent_id: e.id
|
|
470
|
+
})), c && n({
|
|
471
|
+
chat: o,
|
|
472
|
+
streamingManager: c
|
|
473
|
+
});
|
|
474
|
+
} catch (_) {
|
|
475
|
+
console.error(_), (_ == null ? void 0 : _.kind) === "InsufficientCreditsError" && (i.mode, $.TextOnly), s("Cannot create new chat");
|
|
476
|
+
}
|
|
477
|
+
} catch (_) {
|
|
478
|
+
console.error(_), s("Cannot create new chat");
|
|
476
479
|
}
|
|
477
480
|
else
|
|
478
|
-
|
|
479
|
-
(
|
|
481
|
+
h === I.Fail && s(new Error("Cannot create connection"));
|
|
482
|
+
(y = (M = i.callbacks).onConnectionStateChange) == null || y.call(M, h);
|
|
480
483
|
},
|
|
481
|
-
onVideoStateChange(
|
|
482
|
-
var
|
|
483
|
-
(
|
|
484
|
+
onVideoStateChange(h) {
|
|
485
|
+
var M, y;
|
|
486
|
+
(y = (M = i.callbacks).onVideoStateChange) == null || y.call(M, h);
|
|
484
487
|
}
|
|
485
488
|
}
|
|
486
489
|
}).catch(s);
|
|
487
490
|
});
|
|
488
491
|
}
|
|
489
|
-
function
|
|
490
|
-
return
|
|
492
|
+
function _e(e, i, t) {
|
|
493
|
+
return X(i, t || L).getById(e);
|
|
491
494
|
}
|
|
492
495
|
function B(e) {
|
|
493
496
|
let i = "";
|
|
@@ -503,206 +506,202 @@ function B(e) {
|
|
|
503
506
|
created_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
504
507
|
}];
|
|
505
508
|
}
|
|
506
|
-
async function
|
|
507
|
-
var
|
|
509
|
+
async function Se(e, i) {
|
|
510
|
+
var O, k, f;
|
|
508
511
|
const t = {
|
|
509
512
|
messages: [],
|
|
510
|
-
chatMode: i.mode ||
|
|
513
|
+
chatMode: i.mode || $.Functional
|
|
511
514
|
};
|
|
512
515
|
let a = -1;
|
|
513
|
-
const r = i.wsURL ||
|
|
514
|
-
t.messages = B(c), (
|
|
515
|
-
const
|
|
516
|
+
const r = i.wsURL || se, n = i.baseURL || L, s = i.mixpanelKey || oe, o = X(i.auth, n, i.callbacks.onError), c = await o.getById(e);
|
|
517
|
+
t.messages = B(c), (k = (O = i.callbacks).onNewMessage) == null || k.call(O, t.messages);
|
|
518
|
+
const h = ye({
|
|
516
519
|
token: s,
|
|
517
520
|
agent: c,
|
|
518
521
|
...i
|
|
519
522
|
});
|
|
520
|
-
|
|
523
|
+
h.track("agent-sdk", {
|
|
521
524
|
event: "loaded",
|
|
522
|
-
...
|
|
525
|
+
...Me(c)
|
|
523
526
|
});
|
|
524
|
-
const
|
|
525
|
-
onMessage: (d,
|
|
526
|
-
var l, g,
|
|
527
|
-
if ("content" in
|
|
527
|
+
const M = {
|
|
528
|
+
onMessage: (d, u) => {
|
|
529
|
+
var l, g, m, w;
|
|
530
|
+
if ("content" in u) {
|
|
528
531
|
const {
|
|
529
532
|
content: p
|
|
530
|
-
} =
|
|
531
|
-
(C == null ? void 0 : C.role) === "assistant" && (a < t.messages.length && (C.content = d === D.Partial ? C.content + p : p), d === D.Answer && (a = t.messages.length)), d === D.Answer &&
|
|
533
|
+
} = u, C = t.messages[t.messages.length - 1];
|
|
534
|
+
(C == null ? void 0 : C.role) === "assistant" && (a < t.messages.length && (C.content = d === D.Partial ? C.content + p : p), d === D.Answer && (a = t.messages.length)), d === D.Answer && h.track("agent-message-received", {
|
|
532
535
|
messages: t.messages.length
|
|
533
536
|
}), (g = (l = i.callbacks).onNewMessage) == null || g.call(l, t.messages);
|
|
534
537
|
} else {
|
|
535
|
-
if ([
|
|
538
|
+
if ([A.StreamVideoCreated, A.StreamVideoDone, A.StreamVideoError, A.StreamVideoRejected].includes(d)) {
|
|
536
539
|
const p = d.split("/")[1];
|
|
537
|
-
|
|
538
|
-
...
|
|
540
|
+
h.track("agent-video", {
|
|
541
|
+
...u,
|
|
539
542
|
event: p
|
|
540
543
|
});
|
|
541
544
|
}
|
|
542
|
-
[
|
|
543
|
-
data:
|
|
545
|
+
[A.StreamFailed, A.StreamVideoError, A.StreamVideoRejected].includes(d) && ((w = (m = i.callbacks).onError) == null || w.call(m, new Error(`Stream failed with event ${d}`), {
|
|
546
|
+
data: u
|
|
544
547
|
}));
|
|
545
548
|
}
|
|
546
549
|
}
|
|
547
550
|
};
|
|
548
|
-
async function
|
|
549
|
-
var
|
|
550
|
-
const d = await
|
|
551
|
-
streamingManager:
|
|
551
|
+
async function y() {
|
|
552
|
+
var m, w, p, C, R;
|
|
553
|
+
const d = await J(i.auth, r, M), {
|
|
554
|
+
streamingManager: u,
|
|
552
555
|
chat: l
|
|
553
|
-
} = await U(c, i, o,
|
|
554
|
-
a = -1, t.messages.length === 0 && (t.messages = B(c), (w = (
|
|
555
|
-
const g = t.chat.chatMode ||
|
|
556
|
-
|
|
556
|
+
} = await U(c, i, o, h, t.chat);
|
|
557
|
+
a = -1, t.messages.length === 0 && (t.messages = B(c), (w = (m = i.callbacks).onNewMessage) == null || w.call(m, t.messages)), l != null && l.id && l.id !== ((p = t.chat) == null ? void 0 : p.id) && ((R = (C = i.callbacks).onNewChat) == null || R.call(C, l == null ? void 0 : l.id)), t.streamingManager = u, t.socketManager = d, t.chat = l;
|
|
558
|
+
const g = t.chat.chatMode || $.Functional;
|
|
559
|
+
S(g), h.track("agent-chat", {
|
|
557
560
|
event: "connect",
|
|
558
561
|
chatId: l.id,
|
|
559
562
|
agentId: c.id
|
|
560
563
|
});
|
|
561
564
|
}
|
|
562
|
-
async function
|
|
563
|
-
var d,
|
|
564
|
-
(d = t.socketManager) == null || d.disconnect(), await ((
|
|
565
|
+
async function _() {
|
|
566
|
+
var d, u, l, g, m;
|
|
567
|
+
(d = t.socketManager) == null || d.disconnect(), await ((u = t.streamingManager) == null ? void 0 : u.disconnect()), delete t.streamingManager, delete t.socketManager, t.messages = B(c), (g = (l = i.callbacks).onNewMessage) == null || g.call(l, t.messages), h.track("agent-chat", {
|
|
565
568
|
event: "disconnect",
|
|
566
|
-
chatId: (
|
|
569
|
+
chatId: (m = t.chat) == null ? void 0 : m.id,
|
|
567
570
|
agentId: c.id
|
|
568
571
|
});
|
|
569
572
|
}
|
|
570
|
-
async function
|
|
571
|
-
var
|
|
572
|
-
d !== t.chatMode && (
|
|
573
|
+
async function S(d) {
|
|
574
|
+
var u, l;
|
|
575
|
+
d !== t.chatMode && (h.track("agent-mode-change", {
|
|
573
576
|
mode: d
|
|
574
|
-
}), t.chatMode = d, t.chatMode !==
|
|
577
|
+
}), t.chatMode = d, t.chatMode !== $.Functional && await _(), (l = (u = i.callbacks).onModeChange) == null || l.call(u, d));
|
|
575
578
|
}
|
|
576
579
|
async function K() {
|
|
577
580
|
if (!t.chat)
|
|
578
|
-
return
|
|
581
|
+
return y();
|
|
579
582
|
const {
|
|
580
583
|
streamingManager: d,
|
|
581
|
-
chat:
|
|
582
|
-
} = await U(c, i, o,
|
|
583
|
-
t.streamingManager = d
|
|
584
|
-
const l = t.chat.chatMode || k.Functional;
|
|
585
|
-
_(l), u.track("agent-chat", {
|
|
584
|
+
chat: u
|
|
585
|
+
} = await U(c, i, o, h, t.chat);
|
|
586
|
+
t.streamingManager = d, S(t.chat.chatMode || $.Functional), h.track("agent-chat", {
|
|
586
587
|
event: "reconnect",
|
|
587
|
-
chatId:
|
|
588
|
+
chatId: u.id,
|
|
588
589
|
agentId: c.id
|
|
589
590
|
});
|
|
590
591
|
}
|
|
591
592
|
return {
|
|
592
593
|
agent: c,
|
|
593
594
|
starterMessages: ((f = c.knowledge) == null ? void 0 : f.starter_message) || [],
|
|
594
|
-
connect:
|
|
595
|
-
disconnect:
|
|
596
|
-
changeMode:
|
|
595
|
+
connect: y,
|
|
596
|
+
disconnect: _,
|
|
597
|
+
changeMode: S,
|
|
597
598
|
async reconnect() {
|
|
598
|
-
var
|
|
599
|
+
var m, w;
|
|
599
600
|
if (!t.chat)
|
|
600
|
-
return
|
|
601
|
-
(
|
|
602
|
-
const d = await
|
|
603
|
-
streamingManager:
|
|
601
|
+
return y();
|
|
602
|
+
(m = t.socketManager) == null || m.disconnect(), await ((w = t.streamingManager) == null ? void 0 : w.disconnect());
|
|
603
|
+
const d = await J(i.auth, r, M), {
|
|
604
|
+
streamingManager: u,
|
|
604
605
|
chat: l
|
|
605
|
-
} = await U(c, i, o,
|
|
606
|
-
t.streamingManager =
|
|
607
|
-
const g = t.chat.chatMode ||
|
|
608
|
-
|
|
606
|
+
} = await U(c, i, o, h, t.chat);
|
|
607
|
+
t.streamingManager = u, t.socketManager = d;
|
|
608
|
+
const g = t.chat.chatMode || $.Functional;
|
|
609
|
+
S(g), h.track("agent-chat", {
|
|
609
610
|
event: "reconnect",
|
|
610
611
|
chatId: l.id,
|
|
611
612
|
agentId: c.id
|
|
612
613
|
});
|
|
613
614
|
},
|
|
614
|
-
async chat(d
|
|
615
|
-
var g,
|
|
616
|
-
const
|
|
615
|
+
async chat(d) {
|
|
616
|
+
var l, g, m, w, p, C, R, x, W;
|
|
617
|
+
const u = F();
|
|
617
618
|
try {
|
|
618
|
-
const
|
|
619
|
+
const P = Date.now();
|
|
619
620
|
if (d.length >= 800)
|
|
620
621
|
throw new Error("Message cannot be more than 800 characters");
|
|
621
622
|
if (d.length === 0)
|
|
622
623
|
throw new Error("Message cannot be empty");
|
|
623
|
-
if (t.chatMode ===
|
|
624
|
+
if (t.chatMode === $.Maintenance)
|
|
624
625
|
throw new Error("Chat is in maintenance mode");
|
|
625
|
-
if (![
|
|
626
|
-
if (
|
|
626
|
+
if (![$.TextOnly, $.Playground].includes(t.chatMode))
|
|
627
|
+
if (t.streamingManager) {
|
|
628
|
+
if (!t.chat)
|
|
629
|
+
throw new Error("Chat is not initialized");
|
|
630
|
+
} else
|
|
627
631
|
throw new Error("Streaming manager is not initialized");
|
|
628
|
-
if (!t.chat)
|
|
629
|
-
throw new Error("Chat is not initialized");
|
|
630
|
-
}
|
|
631
632
|
t.messages.push({
|
|
632
633
|
id: F(),
|
|
633
634
|
role: "user",
|
|
634
635
|
content: d,
|
|
635
|
-
created_at: new Date(
|
|
636
|
-
}), (
|
|
636
|
+
created_at: new Date(P).toISOString()
|
|
637
|
+
}), (g = (l = i.callbacks).onNewMessage) == null || g.call(l, t.messages), t.chat || (t.chat = await o.newChat(c.id));
|
|
637
638
|
const b = {
|
|
638
|
-
id:
|
|
639
|
+
id: u,
|
|
639
640
|
role: "assistant",
|
|
640
641
|
content: "",
|
|
641
642
|
created_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
642
643
|
matches: []
|
|
643
644
|
};
|
|
644
645
|
t.messages.push(b);
|
|
645
|
-
const
|
|
646
|
+
const H = t.messages.slice(0, -1);
|
|
646
647
|
let T;
|
|
647
648
|
try {
|
|
648
649
|
T = await o.chat(c.id, t.chat.id, {
|
|
649
|
-
sessionId: (
|
|
650
|
-
streamId: (
|
|
651
|
-
messages:
|
|
652
|
-
chatMode: t.chatMode
|
|
653
|
-
append_chat: m
|
|
650
|
+
sessionId: (m = t.streamingManager) == null ? void 0 : m.sessionId,
|
|
651
|
+
streamId: (w = t.streamingManager) == null ? void 0 : w.streamId,
|
|
652
|
+
messages: H,
|
|
653
|
+
chatMode: t.chatMode
|
|
654
654
|
});
|
|
655
655
|
} catch (z) {
|
|
656
|
-
if ((
|
|
656
|
+
if ((p = z == null ? void 0 : z.message) != null && p.includes("missing or invalid session_id"))
|
|
657
657
|
console.log("Invalid stream, try reconnect with new stream id"), await K(), T = await o.chat(c.id, t.chat.id, {
|
|
658
|
-
sessionId: (
|
|
659
|
-
streamId: (
|
|
660
|
-
messages:
|
|
661
|
-
chatMode: t.chatMode
|
|
662
|
-
append_chat: m
|
|
658
|
+
sessionId: (C = t.streamingManager) == null ? void 0 : C.sessionId,
|
|
659
|
+
streamId: (R = t.streamingManager) == null ? void 0 : R.streamId,
|
|
660
|
+
messages: H,
|
|
661
|
+
chatMode: t.chatMode
|
|
663
662
|
});
|
|
664
663
|
else
|
|
665
664
|
throw z;
|
|
666
665
|
}
|
|
667
|
-
return
|
|
666
|
+
return h.track("agent-message-send", {
|
|
668
667
|
event: "success",
|
|
669
668
|
messages: t.messages.length + 1
|
|
670
|
-
}), b.context = T.context, T.result && (b.content = T.result, b.matches = T.matches,
|
|
671
|
-
latency: Date.now() -
|
|
669
|
+
}), b.context = T.context, T.result && (b.content = T.result, b.matches = T.matches, h.track("agent-message-received", {
|
|
670
|
+
latency: Date.now() - P,
|
|
672
671
|
messages: t.messages.length
|
|
673
|
-
}), (
|
|
674
|
-
} catch (
|
|
675
|
-
throw t.messages[t.messages.length - 1].id ===
|
|
672
|
+
}), (W = (x = i.callbacks).onNewMessage) == null || W.call(x, t.messages)), T;
|
|
673
|
+
} catch (P) {
|
|
674
|
+
throw t.messages[t.messages.length - 1].id === u && t.messages.pop(), h.track("agent-message-send", {
|
|
676
675
|
event: "error",
|
|
677
676
|
messages: t.messages.length
|
|
678
|
-
}),
|
|
677
|
+
}), P;
|
|
679
678
|
}
|
|
680
679
|
},
|
|
681
|
-
rate(d,
|
|
682
|
-
var w, p, C,
|
|
680
|
+
rate(d, u, l) {
|
|
681
|
+
var w, p, C, R;
|
|
683
682
|
const g = t.messages.find((x) => x.id === d);
|
|
684
683
|
if (t.chat) {
|
|
685
684
|
if (!g)
|
|
686
685
|
throw new Error("Message not found");
|
|
687
686
|
} else
|
|
688
687
|
throw new Error("Chat is not initialized");
|
|
689
|
-
const
|
|
690
|
-
return
|
|
688
|
+
const m = ((w = g.matches) == null ? void 0 : w.map((x) => [x.document_id, x.id])) ?? [];
|
|
689
|
+
return h.track("agent-rate", {
|
|
691
690
|
event: l ? "update" : "create",
|
|
692
|
-
thumb:
|
|
691
|
+
thumb: u === 1 ? "up" : "down",
|
|
693
692
|
knowledge_id: ((p = c.knowledge) == null ? void 0 : p.id) ?? "",
|
|
694
|
-
matches:
|
|
695
|
-
score:
|
|
693
|
+
matches: m,
|
|
694
|
+
score: u
|
|
696
695
|
}), l ? o.updateRating(c.id, t.chat.id, l, {
|
|
697
696
|
knowledge_id: ((C = c.knowledge) == null ? void 0 : C.id) ?? "",
|
|
698
697
|
message_id: d,
|
|
699
|
-
matches:
|
|
700
|
-
score:
|
|
698
|
+
matches: m,
|
|
699
|
+
score: u
|
|
701
700
|
}) : o.createRating(c.id, t.chat.id, {
|
|
702
|
-
knowledge_id: ((
|
|
701
|
+
knowledge_id: ((R = c.knowledge) == null ? void 0 : R.id) ?? "",
|
|
703
702
|
message_id: d,
|
|
704
|
-
matches:
|
|
705
|
-
score:
|
|
703
|
+
matches: m,
|
|
704
|
+
score: u
|
|
706
705
|
});
|
|
707
706
|
},
|
|
708
707
|
getChatmode() {
|
|
@@ -711,19 +710,19 @@ async function Ie(e, i) {
|
|
|
711
710
|
return o.getChatMode(c.id, t.chat.id);
|
|
712
711
|
},
|
|
713
712
|
deleteRate(d) {
|
|
714
|
-
var
|
|
713
|
+
var u;
|
|
715
714
|
if (!t.chat)
|
|
716
715
|
throw new Error("Chat is not initialized");
|
|
717
|
-
return
|
|
716
|
+
return h.track("agent-rate-delete", {
|
|
718
717
|
type: "text",
|
|
719
|
-
chat_id: (
|
|
718
|
+
chat_id: (u = t.chat) == null ? void 0 : u.id,
|
|
720
719
|
id: d
|
|
721
720
|
}), o.deleteRating(c.id, t.chat.id, d);
|
|
722
721
|
},
|
|
723
722
|
speak(d) {
|
|
724
723
|
if (!t.streamingManager)
|
|
725
724
|
throw new Error("Streaming manager is not initialized");
|
|
726
|
-
function
|
|
725
|
+
function u() {
|
|
727
726
|
if (c.presenter) {
|
|
728
727
|
if (d.type === "text")
|
|
729
728
|
return {
|
|
@@ -741,28 +740,28 @@ async function Ie(e, i) {
|
|
|
741
740
|
throw new Error("Presenter is not initialized");
|
|
742
741
|
throw new Error("Invalid payload");
|
|
743
742
|
}
|
|
744
|
-
const l =
|
|
745
|
-
return
|
|
743
|
+
const l = u();
|
|
744
|
+
return h.track("agent-speak", l), t.streamingManager.speak({
|
|
746
745
|
script: l
|
|
747
746
|
});
|
|
748
747
|
}
|
|
749
748
|
};
|
|
750
749
|
}
|
|
751
750
|
export {
|
|
752
|
-
|
|
751
|
+
$ as ChatMode,
|
|
753
752
|
D as ChatProgress,
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
753
|
+
I as ConnectionState,
|
|
754
|
+
re as DocumentType,
|
|
755
|
+
ne as KnowledgeType,
|
|
756
|
+
G as PlanGroup,
|
|
757
|
+
ae as Providers,
|
|
758
|
+
ee as RateState,
|
|
759
|
+
A as StreamEvents,
|
|
761
760
|
N as StreamingState,
|
|
762
|
-
|
|
763
|
-
|
|
761
|
+
te as Subject,
|
|
762
|
+
Z as UserPlan,
|
|
764
763
|
v as VideoType,
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
764
|
+
ie as VoiceAccess,
|
|
765
|
+
Se as createAgentManager,
|
|
766
|
+
_e as getAgent
|
|
768
767
|
};
|
package/dist/index.umd.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(f,b){typeof exports=="object"&&typeof module<"u"?b(exports):typeof define=="function"&&define.amd?define(["exports"],b):(f=typeof globalThis<"u"?globalThis:f||self,b(f.index={}))})(this,function(f){"use strict";var b=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(b||{}),H=(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))(H||{}),J=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(J||{}),A=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e))(A||{}),L=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(L||{}),q=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(q||{}),Q=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(Q||{}),X=(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))(X||{}),v=(e=>(e.Clip="clip",e.Talk="talk",e))(v||{}),x=(e=>(e.Start="START",e.Stop="STOP",e))(x||{}),k=(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))(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))(_||{}),Y=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(Y||{}),Z=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(Z||{});const O="https://api.d-id.com",ce="wss://notifications.d-id.com",de="79f81a83a67430be2bc0fd61042b8faa",D=()=>Math.random().toString(16).slice(2);function G(){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 ge=D();function ee(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}.${G()}_${ge}`;throw new Error(`Unknown auth type: ${e}`)}function V(e,i=O,t){const a=async(r,n)=>{const s=await fetch(i+(r!=null&&r.startsWith("/")?r:`/${r}`),{...n,headers:{...n==null?void 0:n.headers,Authorization:ee(e),"Content-Type":"application/json"}});if(!s.ok){let o=await s.text().catch(()=>"Failed to fetch");throw t&&t(new Error(o),{url:r,options:n,headers:s.headers}),new Error(o)}return s.json()};return{get(r,n){return a(r,{...n,method:"GET"})},post(r,n,s){return a(r,{...s,body:JSON.stringify(n),method:"POST"})},delete(r,n,s){return a(r,{...s,body:JSON.stringify(n),method:"DELETE"})},patch(r,n,s){return a(r,{...s,body:JSON.stringify(n),method:"PATCH"})}}}function te(e,i=O,t){const a=V(e,`${i}/agents`,t);return{create(r,n){return a.post("/",r,n)},getAgents(r,n){return a.get(`/${r?`?tag=${r}`:""}`,n).then(s=>s??[])},getById(r,n){return a.get(`/${r}`,n)},delete(r,n){return a.delete(`/${r}`,void 0,n)},update(r,n,s){return a.patch(`/${r}`,n,s)},newChat(r,n){return a.post(`/${r}/chat`,void 0,n)},chat(r,n,s,o){return a.post(`/${r}/chat/${n}`,s,o)},getChatMode(r,n,s){return a.get(`/${r}/chat/${n}/mode`,s)},createRating(r,n,s,o){return a.post(`/${r}/chat/${n}/ratings`,s,o)},updateRating(r,n,s,o,c){return a.patch(`/${r}/chat/${n}/ratings/${s}`,o,c)},deleteRating(r,n,s,o){return a.delete(`/${r}/chat/${n}/ratings/${s}`,o)}}}const le=e=>new Promise(i=>setTimeout(i,e));function ue(e){return new Promise((i,t)=>{const{callbacks:a,host:r,auth:n}=e,{onMessage:s=null,onOpen:o=null,onClose:c=null,onError:u=null}=a||{},C=new WebSocket(`${r}?authorization=${ee(n)}`);C.onmessage=s,C.onclose=c,C.onerror=M=>{console.error(M),u==null||u("Websocket failed to connect",M),t(M)},C.onopen=M=>{o==null||o(M),i(C)}})}async function me(e){const{retries:i=1}=e;let t=null;for(let a=0;(t==null?void 0:t.readyState)!==WebSocket.OPEN;a++)try{t=await ue(e)}catch(r){if(a===i)throw r;await le(a*500)}return t}async function ne(e,i,t){const a=t!=null&&t.onMessage?[t.onMessage]:[],r=await me({auth:e,host:i,callbacks:{onError:t==null?void 0:t.onError,onMessage:n=>{const s=JSON.parse(n.data);a.forEach(o=>o(s.event,s))}}});return{socket:r,disconnect:()=>r.close(),subscribeToEvents:n=>a.push(n)}}function he(e,i,t,a){const r=V(e,`${i}/agents/${t}`,a);return{createStream(n){return r.post("/streams",{driver_id:n.driver_id,presenter_id:n.presenter_id,compatibility_mode:n.compatibility_mode,stream_warmup:n.stream_warmup,type:v.Clip})},startConnection(n,s,o){return r.post(`/streams/${n}/sdp`,{session_id:o,answer:s,type:v.Clip})},addIceCandidate(n,s,o){return r.post(`/streams/${n}/ice`,{session_id:o,...s,type:v.Clip})},sendStreamRequest(n,s,o){return r.post(`/streams/${n}`,{session_id:s,...o,type:v.Clip})},close(n,s){return r.delete(`/streams/${n}`,{session_id:s,type:v.Clip})}}}function we(e,i,t,a){const r=V(e,`${i}/agents/${t}`,a);return{createStream(n,s){return r.post("/streams",{source_url:n.source_url,driver_url:n.driver_url,face:n.face,config:n.config,compatibility_mode:n.compatibility_mode,stream_warmup:n.stream_warmup,output_resolution:n.output_resolution,type:v.Talk},s)},startConnection(n,s,o,c){return r.post(`/streams/${n}/sdp`,{session_id:o,answer:s,type:v.Talk},c)},addIceCandidate(n,s,o,c){return r.post(`/streams/${n}/ice`,{session_id:o,...s,type:v.Talk},c)},sendStreamRequest(n,s,o,c){return r.post(`/streams/${n}`,{session_id:s,...o,type:v.Talk},c)},close(n,s,o){return r.delete(`/streams/${n}`,{session_id:s,type:v.Talk},o)}}}let re=!1;const R=(e,i)=>re&&console.log(e,i),fe=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function ae(e){switch(e){case"connected":return _.Connected;case"checking":return _.Connecting;case"failed":return _.Fail;case"new":case"closed":case"disconnected":default:return _.New}}function pe(){let e=0;return i=>{for(const t of i.values())if(t&&t.type==="inbound-rtp"&&t.kind==="video"){const a=t.bytesReceived,r=a-e>0;return e=a,r}return!1}}function ye(e,i,t){const r=Math.max(Math.ceil(10),1);let n=0,s=!1;const o=pe();return setInterval(async()=>{const c=await e.getStats();o(c)?(n=0,s||(i==null||i(x.Start),s=!0)):s&&(n++,n>=r&&(i==null||i(x.Stop),s=!1))},100)}async function Me(e,i,{debug:t=!1,callbacks:a,auth:r,analytics:n,baseURL:s=O}){re=t;let o;const{startConnection:c,sendStreamRequest:u,close:C,createStream:M,addIceCandidate:T}=i.videoType===v.Clip?he(r,s,e,a.onError):we(r,s,e,a.onError),{id:I,offer:W,ice_servers:z,session_id:$}=await M(i),p=new fe({iceServers:z}),d=p.createDataChannel("JanusDataChannel");if(!$)throw new Error("Could not create session_id");const m=ye(p,a.onVideoStateChange);p.onicecandidate=g=>{R("peerConnection.onicecandidate",g),g.candidate&&g.candidate.sdpMid&&g.candidate.sdpMLineIndex!==null?T(I,{candidate:g.candidate.candidate,sdpMid:g.candidate.sdpMid,sdpMLineIndex:g.candidate.sdpMLineIndex},$):T(I,{candidate:null},$)},p.oniceconnectionstatechange=()=>{var h;R("peerConnection.oniceconnectionstatechange => "+p.iceConnectionState);const g=ae(p.iceConnectionState);g===_.Connected?o=setTimeout(()=>{var w;(w=a.onConnectionStateChange)==null||w.call(a,_.Connected)},5e3):(clearTimeout(o),(h=a.onConnectionStateChange)==null||h.call(a,g))},p.ontrack=g=>{var h;R("peerConnection.ontrack",g),(h=a.onSrcObjectReady)==null||h.call(a,g.streams[0])},d.onmessage=g=>{var h;if(d.readyState==="open"){const[w,y]=g.data.split(":");w===k.StreamReady&&(clearTimeout(o),(h=a.onConnectionStateChange)==null||h.call(a,_.Connected))}},await p.setRemoteDescription(W),R("set remote description OK");const l=await p.createAnswer();return R("create answer OK"),await p.setLocalDescription(l),R("set local description OK"),await c(I,l,$),R("start connection OK"),{speak(g){return u(I,$,g)},async disconnect(){var g,h,w;if(I){if(p){if(ae(p.iceConnectionState)===_.New){(g=a.onVideoStateChange)==null||g.call(a,x.Stop),clearInterval(m);return}p.close(),p.oniceconnectionstatechange=null,p.onnegotiationneeded=null,p.onicecandidate=null,p.ontrack=null}try{await C(I,$).catch(y=>{})}catch(y){R("Error on close stream connection",y)}(h=a.onConnectionStateChange)==null||h.call(a,_.New),(w=a.onVideoStateChange)==null||w.call(a,x.Stop),clearInterval(m)}},sessionId:$,streamId:I}}function ve(e){var r,n;const t=((r=window==null?void 0:window.location)==null?void 0:r.hostname)==="studio.d-id.com"||((n=window==null?void 0:window.location)==null?void 0:n.hostname)==="studio-staging.d-id.com"?"studio":window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk",a={token:e.token||"testKey",distinct_id:e.distinctId||G(),isEnabled:e.isEnabled??!0,agentId:e.agent.id,owner_id:e.agent.owner_id??""};return{...a,getRandom:()=>Math.random().toString(16).slice(2),track(s,o){if(!this.isEnabled)return Promise.reject("MixPanel analytics is disabled on creation");const c={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:s,properties:{...o,...a,source:t,time:Date.now(),$insert_id:this.getRandom(),origin:window.location.href,"Screen Height":window.screen.height||window.innerWidth,"Screen Width":window.screen.width||window.innerHeight,"User Agent":navigator.userAgent}}])})};return fetch("https://api-js.mixpanel.com/track/?verbose=1&ip=1",c).then(u=>u.json()).catch(u=>console.error(u))}}}function Ce(e){var a,r,n,s,o;const i=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop";return{$os:`${(()=>{const c=navigator.platform;return c.toLowerCase().includes("win")?"Windows":c.toLowerCase().includes("mac")?"Mac OS X":c.toLowerCase().includes("linux")?"Linux":"Unknown"})()}`,isMobile:`${i()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:(a=e.presenter)==null?void 0:a.type,agentVoice:{voiceId:(n=(r=e.presenter)==null?void 0:r.voice)==null?void 0:n.voice_id,provider:(o=(s=e.presenter)==null?void 0:s.voice)==null?void 0:o.type}}}const Se=1080;function _e(e,i){if(e.presenter){if(e.presenter.type===v.Clip)return{videoType:v.Clip,driver_id:e.presenter.driver_id,presenter_id:e.presenter.presenter_id,stream_warmup:!0}}else throw new Error("Presenter is not initialized");const t=i||(e.presenter.stitch?Se:void 0);return{videoType:v.Talk,source_url:e.presenter.source_url,stream_warmup:!0,...t&&{output_resolution:t}}}function B(e,i,t,a,r){return new Promise(async(n,s)=>{let o=r;const c=await Me(e.id,_e(e,i.outputResolution),{...i,analytics:a,callbacks:{...i.callbacks,onConnectionStateChange:async u=>{var C,M;if(u===_.Connected)try{o||(o=await t.newChat(e.id),a.track("agent-chat",{event:"created",chat_id:o.id,agent_id:e.id})),c&&n({chat:o,streamingManager:c})}catch(T){console.error(T),s("Cannot create new chat")}else u===_.Fail&&s(new Error("Cannot create connection"));(M=(C=i.callbacks).onConnectionStateChange)==null||M.call(C,u)},onVideoStateChange(u){var C,M;(M=(C=i.callbacks).onVideoStateChange)==null||M.call(C,u)}}}).catch(s)})}function Ie(e,i,t){return te(i,t||O).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||"My Agent"}. How can I help you?`;return[{content:i,id:D(),role:"assistant",created_at:new Date().toISOString()}]}async function Ae(e,i){var z,$,p;const t={messages:[],chatMode:i.mode||A.Functional};let a=-1;const r=i.wsURL||ce,n=i.baseURL||O,s=i.mixpanelKey||de,o=te(i.auth,n,i.callbacks.onError),c=await o.getById(e);t.messages=j(c),($=(z=i.callbacks).onNewMessage)==null||$.call(z,t.messages);const u=ve({token:s,agent:c,...i});u.track("agent-sdk",{event:"loaded",...Ce(c)});const C={onMessage:(d,m)=>{var l,g,h,w;if("content"in m){const{content:y}=m,S=t.messages[t.messages.length-1];(S==null?void 0:S.role)==="assistant"&&(a<t.messages.length&&(S.content=d===L.Partial?S.content+y:y),d===L.Answer&&(a=t.messages.length)),d===L.Answer&&u.track("agent-message-received",{messages:t.messages.length}),(g=(l=i.callbacks).onNewMessage)==null||g.call(l,t.messages)}else{if([k.StreamVideoCreated,k.StreamVideoDone,k.StreamVideoError,k.StreamVideoRejected].includes(d)){const y=d.split("/")[1];u.track("agent-video",{...m,event:y})}[k.StreamFailed,k.StreamVideoError,k.StreamVideoRejected].includes(d)&&((w=(h=i.callbacks).onError)==null||w.call(h,new Error(`Stream failed with event ${d}`),{data:m}))}}};async function M(){var h,w,y,S,E;const d=await ne(i.auth,r,C),{streamingManager:m,chat:l}=await B(c,i,o,u,t.chat);a=-1,t.messages.length===0&&(t.messages=j(c),(w=(h=i.callbacks).onNewMessage)==null||w.call(h,t.messages)),l!=null&&l.id&&l.id!==((y=t.chat)==null?void 0:y.id)&&((E=(S=i.callbacks).onNewChat)==null||E.call(S,l==null?void 0:l.id)),t.streamingManager=m,t.socketManager=d,t.chat=l;const g=t.chat.chatMode||A.Functional;I(g),u.track("agent-chat",{event:"connect",chatId:l.id,agentId:c.id})}async function T(){var d,m,l,g,h;(d=t.socketManager)==null||d.disconnect(),await((m=t.streamingManager)==null?void 0:m.disconnect()),delete t.streamingManager,delete t.socketManager,t.messages=j(c),(g=(l=i.callbacks).onNewMessage)==null||g.call(l,t.messages),u.track("agent-chat",{event:"disconnect",chatId:(h=t.chat)==null?void 0:h.id,agentId:c.id})}async function I(d){var m,l;d!==t.chatMode&&(u.track("agent-mode-change",{mode:d}),t.chatMode=d,t.chatMode!==A.Functional&&await T(),(l=(m=i.callbacks).onModeChange)==null||l.call(m,d))}async function W(){if(!t.chat)return M();const{streamingManager:d,chat:m}=await B(c,i,o,u,t.chat);t.streamingManager=d;const l=t.chat.chatMode||A.Functional;I(l),u.track("agent-chat",{event:"reconnect",chatId:m.id,agentId:c.id})}return{agent:c,starterMessages:((p=c.knowledge)==null?void 0:p.starter_message)||[],connect:M,disconnect:T,changeMode:I,async reconnect(){var h,w;if(!t.chat)return M();(h=t.socketManager)==null||h.disconnect(),await((w=t.streamingManager)==null?void 0:w.disconnect());const d=await ne(i.auth,r,C),{streamingManager:m,chat:l}=await B(c,i,o,u,t.chat);t.streamingManager=m,t.socketManager=d;const g=t.chat.chatMode||A.Functional;I(g),u.track("agent-chat",{event:"reconnect",chatId:l.id,agentId:c.id})},async chat(d,m=!1){var g,h,w,y,S,E,N,ie,se;const l=D();try{const F=Date.now();if(d.length>=800)throw new Error("Message cannot be more than 800 characters");if(d.length===0)throw new Error("Message cannot be empty");if(t.chatMode===A.Maintenance)throw new Error("Chat is in maintenance mode");if(![A.TextOnly,A.Playground].includes(t.chatMode)){if(!t.streamingManager)throw new Error("Streaming manager is not initialized");if(!t.chat)throw new Error("Chat is not initialized")}t.messages.push({id:D(),role:"user",content:d,created_at:new Date(F).toISOString()}),(h=(g=i.callbacks).onNewMessage)==null||h.call(g,t.messages),t.chat||(t.chat=await o.newChat(c.id));const K={id:l,role:"assistant",content:"",created_at:new Date().toISOString(),matches:[]};t.messages.push(K);const oe=t.messages.slice(0,-1);let P;try{P=await o.chat(c.id,t.chat.id,{sessionId:(w=t.streamingManager)==null?void 0:w.sessionId,streamId:(y=t.streamingManager)==null?void 0:y.streamId,messages:oe,chatMode:t.chatMode,append_chat:m})}catch(U){if((S=U==null?void 0:U.message)!=null&&S.includes("missing or invalid session_id"))console.log("Invalid stream, try reconnect with new stream id"),await W(),P=await o.chat(c.id,t.chat.id,{sessionId:(E=t.streamingManager)==null?void 0:E.sessionId,streamId:(N=t.streamingManager)==null?void 0:N.streamId,messages:oe,chatMode:t.chatMode,append_chat:m});else throw U}return u.track("agent-message-send",{event:"success",messages:t.messages.length+1}),K.context=P.context,P.result&&(K.content=P.result,K.matches=P.matches,u.track("agent-message-received",{latency:Date.now()-F,messages:t.messages.length}),(se=(ie=i.callbacks).onNewMessage)==null||se.call(ie,t.messages)),P}catch(F){throw t.messages[t.messages.length-1].id===l&&t.messages.pop(),u.track("agent-message-send",{event:"error",messages:t.messages.length}),F}},rate(d,m,l){var w,y,S,E;const g=t.messages.find(N=>N.id===d);if(t.chat){if(!g)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const h=((w=g.matches)==null?void 0:w.map(N=>[N.document_id,N.id]))??[];return u.track("agent-rate",{event:l?"update":"create",thumb:m===1?"up":"down",knowledge_id:((y=c.knowledge)==null?void 0:y.id)??"",matches:h,score:m}),l?o.updateRating(c.id,t.chat.id,l,{knowledge_id:((S=c.knowledge)==null?void 0:S.id)??"",message_id:d,matches:h,score:m}):o.createRating(c.id,t.chat.id,{knowledge_id:((E=c.knowledge)==null?void 0:E.id)??"",message_id:d,matches:h,score:m})},getChatmode(){if(!t.chat)throw new Error("Chat is not initialized");return o.getChatMode(c.id,t.chat.id)},deleteRate(d){var m;if(!t.chat)throw new Error("Chat is not initialized");return u.track("agent-rate-delete",{type:"text",chat_id:(m=t.chat)==null?void 0:m.id,id:d}),o.deleteRating(c.id,t.chat.id,d)},speak(d){if(!t.streamingManager)throw new Error("Streaming manager is not initialized");function m(){if(c.presenter){if(d.type==="text")return{type:"text",provider:d.provider?d.provider:c.presenter.voice,input:d.input,ssml:d.ssml||!1};if(d.type==="audio")return{type:"audio",audio_url:d.audio_url}}else throw new Error("Presenter is not initialized");throw new Error("Invalid payload")}const l=m();return u.track("agent-speak",l),t.streamingManager.speak({script:l})}}}f.ChatMode=A,f.ChatProgress=L,f.ConnectionState=_,f.DocumentType=X,f.KnowledgeType=Q,f.PlanGroup=H,f.Providers=Y,f.RateState=J,f.StreamEvents=k,f.StreamingState=x,f.Subject=q,f.UserPlan=b,f.VideoType=v,f.VoiceAccess=Z,f.createAgentManager=Ae,f.getAgent=Ie,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(f,x){typeof exports=="object"&&typeof module<"u"?x(exports):typeof define=="function"&&define.amd?define(["exports"],x):(f=typeof globalThis<"u"?globalThis:f||self,x(f.index={}))})(this,function(f){"use strict";var x=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(x||{}),H=(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))(H||{}),J=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(J||{}),k=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e))(k||{}),b=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(b||{}),q=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(q||{}),Q=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(Q||{}),X=(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))(X||{}),v=(e=>(e.Clip="clip",e.Talk="talk",e))(v||{}),O=(e=>(e.Start="START",e.Stop="STOP",e))(O||{}),$=(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=>(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))(_||{}),Y=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(Y||{}),Z=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(Z||{});const L="https://api.d-id.com",oe="wss://notifications.d-id.com",ce="79f81a83a67430be2bc0fd61042b8faa",D=()=>Math.random().toString(16).slice(2);function G(){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 de=D();function ee(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}.${G()}_${de}`;throw new Error(`Unknown auth type: ${e}`)}function V(e,i=L,t){const a=async(r,n)=>{const s=await fetch(i+(r!=null&&r.startsWith("/")?r:`/${r}`),{...n,headers:{...n==null?void 0:n.headers,Authorization:ee(e),"Content-Type":"application/json"}});if(!s.ok){let o=await s.text().catch(()=>"Failed to fetch");throw t&&t(new Error(o),{url:r,options:n,headers:s.headers}),new Error(o)}return s.json()};return{get(r,n){return a(r,{...n,method:"GET"})},post(r,n,s){return a(r,{...s,body:JSON.stringify(n),method:"POST"})},delete(r,n,s){return a(r,{...s,body:JSON.stringify(n),method:"DELETE"})},patch(r,n,s){return a(r,{...s,body:JSON.stringify(n),method:"PATCH"})}}}function te(e,i=L,t){const a=V(e,`${i}/agents`,t);return{create(r,n){return a.post("/",r,n)},getAgents(r,n){return a.get(`/${r?`?tag=${r}`:""}`,n).then(s=>s??[])},getById(r,n){return a.get(`/${r}`,n)},delete(r,n){return a.delete(`/${r}`,void 0,n)},update(r,n,s){return a.patch(`/${r}`,n,s)},newChat(r,n){return a.post(`/${r}/chat`,void 0,n)},chat(r,n,s,o){return a.post(`/${r}/chat/${n}`,s,o)},getChatMode(r,n,s){return a.get(`/${r}/chat/${n}/mode`,s)},createRating(r,n,s,o){return a.post(`/${r}/chat/${n}/ratings`,s,o)},updateRating(r,n,s,o,c){return a.patch(`/${r}/chat/${n}/ratings/${s}`,o,c)},deleteRating(r,n,s,o){return a.delete(`/${r}/chat/${n}/ratings/${s}`,o)}}}const ge=e=>new Promise(i=>setTimeout(i,e));function le(e){return new Promise((i,t)=>{const{callbacks:a,host:r,auth:n}=e,{onMessage:s=null,onOpen:o=null,onClose:c=null,onError:h=null}=a||{},C=new WebSocket(`${r}?authorization=${ee(n)}`);C.onmessage=s,C.onclose=c,C.onerror=M=>{console.error(M),h==null||h("Websocket failed to connect",M),t(M)},C.onopen=M=>{o==null||o(M),i(C)}})}async function ue(e){const{retries:i=1}=e;let t=null;for(let a=0;(t==null?void 0:t.readyState)!==WebSocket.OPEN;a++)try{t=await le(e)}catch(r){if(a===i)throw r;await ge(a*500)}return t}async function ne(e,i,t){const a=t!=null&&t.onMessage?[t.onMessage]:[],r=await ue({auth:e,host:i,callbacks:{onError:t==null?void 0:t.onError,onMessage:n=>{const s=JSON.parse(n.data);a.forEach(o=>o(s.event,s))}}});return{socket:r,disconnect:()=>r.close(),subscribeToEvents:n=>a.push(n)}}function me(e,i,t,a){const r=V(e,`${i}/agents/${t}`,a);return{createStream(n){return r.post("/streams",{driver_id:n.driver_id,presenter_id:n.presenter_id,compatibility_mode:n.compatibility_mode,stream_warmup:n.stream_warmup,type:v.Clip})},startConnection(n,s,o){return r.post(`/streams/${n}/sdp`,{session_id:o,answer:s,type:v.Clip})},addIceCandidate(n,s,o){return r.post(`/streams/${n}/ice`,{session_id:o,...s,type:v.Clip})},sendStreamRequest(n,s,o){return r.post(`/streams/${n}`,{session_id:s,...o,type:v.Clip})},close(n,s){return r.delete(`/streams/${n}`,{session_id:s,type:v.Clip})}}}function he(e,i,t,a){const r=V(e,`${i}/agents/${t}`,a);return{createStream(n,s){return r.post("/streams",{source_url:n.source_url,driver_url:n.driver_url,face:n.face,config:n.config,compatibility_mode:n.compatibility_mode,stream_warmup:n.stream_warmup,output_resolution:n.output_resolution,type:v.Talk},s)},startConnection(n,s,o,c){return r.post(`/streams/${n}/sdp`,{session_id:o,answer:s,type:v.Talk},c)},addIceCandidate(n,s,o,c){return r.post(`/streams/${n}/ice`,{session_id:o,...s,type:v.Talk},c)},sendStreamRequest(n,s,o,c){return r.post(`/streams/${n}`,{session_id:s,...o,type:v.Talk},c)},close(n,s,o){return r.delete(`/streams/${n}`,{session_id:s,type:v.Talk},o)}}}let re=!1;const E=(e,i)=>re&&console.log(e,i),we=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function ae(e){switch(e){case"connected":return _.Connected;case"checking":return _.Connecting;case"failed":return _.Fail;case"new":case"closed":case"disconnected":default:return _.New}}function fe(){let e=0;return i=>{for(const t of i.values())if(t&&t.type==="inbound-rtp"&&t.kind==="video"){const a=t.bytesReceived,r=a-e>0;return e=a,r}return!1}}function pe(e,i){const a=Math.max(Math.ceil(10),1);let r=0,n=!1;const s=fe();return setInterval(async()=>{const o=await e.getStats();s(o)?(r=0,n||(i==null||i(O.Start),n=!0)):n&&(r++,r>=a&&(i==null||i(O.Stop),n=!1))},100)}async function ye(e,i,{debug:t=!1,callbacks:a,auth:r,analytics:n,baseURL:s=L}){re=t;let o;const{startConnection:c,sendStreamRequest:h,close:C,createStream:M,addIceCandidate:I}=i.videoType===v.Clip?me(r,s,e,a.onError):he(r,s,e,a.onError),{id:A,offer:j,ice_servers:z,session_id:R}=await M(i),p=new we({iceServers:z}),d=p.createDataChannel("JanusDataChannel");if(!R)throw new Error("Could not create session_id");const u=pe(p,a.onVideoStateChange);p.onicecandidate=g=>{E("peerConnection.onicecandidate",g),g.candidate&&g.candidate.sdpMid&&g.candidate.sdpMLineIndex!==null?I(A,{candidate:g.candidate.candidate,sdpMid:g.candidate.sdpMid,sdpMLineIndex:g.candidate.sdpMLineIndex},R):I(A,{candidate:null},R)},p.oniceconnectionstatechange=()=>{var m;E("peerConnection.oniceconnectionstatechange => "+p.iceConnectionState);const g=ae(p.iceConnectionState);g===_.Connected?o=setTimeout(()=>{var w;(w=a.onConnectionStateChange)==null||w.call(a,_.Connected)},5e3):(clearTimeout(o),(m=a.onConnectionStateChange)==null||m.call(a,g))},p.ontrack=g=>{var m;E("peerConnection.ontrack",g),(m=a.onSrcObjectReady)==null||m.call(a,g.streams[0])},d.onmessage=g=>{var m;if(d.readyState==="open"){const[w,y]=g.data.split(":");w===$.StreamReady&&(clearTimeout(o),(m=a.onConnectionStateChange)==null||m.call(a,_.Connected))}},await p.setRemoteDescription(j),E("set remote description OK");const l=await p.createAnswer();return E("create answer OK"),await p.setLocalDescription(l),E("set local description OK"),await c(A,l,R),E("start connection OK"),{speak(g){return h(A,R,g)},async disconnect(){var g,m,w;if(A){if(p){if(ae(p.iceConnectionState)===_.New){(g=a.onVideoStateChange)==null||g.call(a,O.Stop),clearInterval(u);return}p.close(),p.oniceconnectionstatechange=null,p.onnegotiationneeded=null,p.onicecandidate=null,p.ontrack=null}try{await C(A,R).catch(y=>{})}catch(y){E("Error on close stream connection",y)}(m=a.onConnectionStateChange)==null||m.call(a,_.New),(w=a.onVideoStateChange)==null||w.call(a,O.Stop),clearInterval(u)}},sessionId:R,streamId:A}}function Me(e){const i=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk",t={token:e.token||"testKey",distinct_id:e.distinctId||G(),isEnabled:e.isEnabled??!0,agentId:e.agent.id,owner_id:e.agent.owner_id??""};return{...t,getRandom:()=>Math.random().toString(16).slice(2),track(a,r){if(!this.isEnabled)return Promise.reject("MixPanel analytics is disabled on creation");const n={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:a,properties:{...r,...t,source: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",n).then(s=>s.json()).catch(s=>console.error(s))}}}function ve(e){var a,r,n,s,o;const i=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop";return{$os:`${(()=>{const c=navigator.platform;return c.toLowerCase().includes("win")?"Windows":c.toLowerCase().includes("mac")?"Mac OS X":c.toLowerCase().includes("linux")?"Linux":"Unknown"})()}`,isMobile:`${i()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:(a=e.presenter)==null?void 0:a.type,agentVoice:{voiceId:(n=(r=e.presenter)==null?void 0:r.voice)==null?void 0:n.voice_id,provider:(o=(s=e.presenter)==null?void 0:s.voice)==null?void 0:o.type}}}const Ce=1080;function Se(e,i){if(e.presenter){if(e.presenter.type===v.Clip)return{videoType:v.Clip,driver_id:e.presenter.driver_id,presenter_id:e.presenter.presenter_id,stream_warmup:!0}}else throw new Error("Presenter is not initialized");const t=i||(e.presenter.stitch?Ce:void 0);return{videoType:v.Talk,source_url:e.presenter.source_url,stream_warmup:!0,...t&&{output_resolution:t}}}function B(e,i,t,a,r){return new Promise(async(n,s)=>{let o=r;const c=await ye(e.id,Se(e,i.outputResolution),{...i,analytics:a,callbacks:{...i.callbacks,onConnectionStateChange:async h=>{var C,M;if(h===_.Connected)try{try{o||(o=await t.newChat(e.id),a.track("agent-chat",{event:"created",chat_id:o.id,agent_id:e.id})),c&&n({chat:o,streamingManager:c})}catch(I){console.error(I),(I==null?void 0:I.kind)==="InsufficientCreditsError"&&(i.mode,k.TextOnly),s("Cannot create new chat")}}catch(I){console.error(I),s("Cannot create new chat")}else h===_.Fail&&s(new Error("Cannot create connection"));(M=(C=i.callbacks).onConnectionStateChange)==null||M.call(C,h)},onVideoStateChange(h){var C,M;(M=(C=i.callbacks).onVideoStateChange)==null||M.call(C,h)}}}).catch(s)})}function _e(e,i,t){return te(i,t||L).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||"My Agent"}. How can I help you?`;return[{content:i,id:D(),role:"assistant",created_at:new Date().toISOString()}]}async function Ie(e,i){var z,R,p;const t={messages:[],chatMode:i.mode||k.Functional};let a=-1;const r=i.wsURL||oe,n=i.baseURL||L,s=i.mixpanelKey||ce,o=te(i.auth,n,i.callbacks.onError),c=await o.getById(e);t.messages=W(c),(R=(z=i.callbacks).onNewMessage)==null||R.call(z,t.messages);const h=Me({token:s,agent:c,...i});h.track("agent-sdk",{event:"loaded",...ve(c)});const C={onMessage:(d,u)=>{var l,g,m,w;if("content"in u){const{content:y}=u,S=t.messages[t.messages.length-1];(S==null?void 0:S.role)==="assistant"&&(a<t.messages.length&&(S.content=d===b.Partial?S.content+y:y),d===b.Answer&&(a=t.messages.length)),d===b.Answer&&h.track("agent-message-received",{messages:t.messages.length}),(g=(l=i.callbacks).onNewMessage)==null||g.call(l,t.messages)}else{if([$.StreamVideoCreated,$.StreamVideoDone,$.StreamVideoError,$.StreamVideoRejected].includes(d)){const y=d.split("/")[1];h.track("agent-video",{...u,event:y})}[$.StreamFailed,$.StreamVideoError,$.StreamVideoRejected].includes(d)&&((w=(m=i.callbacks).onError)==null||w.call(m,new Error(`Stream failed with event ${d}`),{data:u}))}}};async function M(){var m,w,y,S,T;const d=await ne(i.auth,r,C),{streamingManager:u,chat:l}=await B(c,i,o,h,t.chat);a=-1,t.messages.length===0&&(t.messages=W(c),(w=(m=i.callbacks).onNewMessage)==null||w.call(m,t.messages)),l!=null&&l.id&&l.id!==((y=t.chat)==null?void 0:y.id)&&((T=(S=i.callbacks).onNewChat)==null||T.call(S,l==null?void 0:l.id)),t.streamingManager=u,t.socketManager=d,t.chat=l;const g=t.chat.chatMode||k.Functional;A(g),h.track("agent-chat",{event:"connect",chatId:l.id,agentId:c.id})}async function I(){var d,u,l,g,m;(d=t.socketManager)==null||d.disconnect(),await((u=t.streamingManager)==null?void 0:u.disconnect()),delete t.streamingManager,delete t.socketManager,t.messages=W(c),(g=(l=i.callbacks).onNewMessage)==null||g.call(l,t.messages),h.track("agent-chat",{event:"disconnect",chatId:(m=t.chat)==null?void 0:m.id,agentId:c.id})}async function A(d){var u,l;d!==t.chatMode&&(h.track("agent-mode-change",{mode:d}),t.chatMode=d,t.chatMode!==k.Functional&&await I(),(l=(u=i.callbacks).onModeChange)==null||l.call(u,d))}async function j(){if(!t.chat)return M();const{streamingManager:d,chat:u}=await B(c,i,o,h,t.chat);t.streamingManager=d,A(t.chat.chatMode||k.Functional),h.track("agent-chat",{event:"reconnect",chatId:u.id,agentId:c.id})}return{agent:c,starterMessages:((p=c.knowledge)==null?void 0:p.starter_message)||[],connect:M,disconnect:I,changeMode:A,async reconnect(){var m,w;if(!t.chat)return M();(m=t.socketManager)==null||m.disconnect(),await((w=t.streamingManager)==null?void 0:w.disconnect());const d=await ne(i.auth,r,C),{streamingManager:u,chat:l}=await B(c,i,o,h,t.chat);t.streamingManager=u,t.socketManager=d;const g=t.chat.chatMode||k.Functional;A(g),h.track("agent-chat",{event:"reconnect",chatId:l.id,agentId:c.id})},async chat(d){var l,g,m,w,y,S,T,N,ie;const u=D();try{const F=Date.now();if(d.length>=800)throw new Error("Message cannot be more than 800 characters");if(d.length===0)throw new Error("Message cannot be empty");if(t.chatMode===k.Maintenance)throw new Error("Chat is in maintenance mode");if(![k.TextOnly,k.Playground].includes(t.chatMode))if(t.streamingManager){if(!t.chat)throw new Error("Chat is not initialized")}else throw new Error("Streaming manager is not initialized");t.messages.push({id:D(),role:"user",content:d,created_at:new Date(F).toISOString()}),(g=(l=i.callbacks).onNewMessage)==null||g.call(l,t.messages),t.chat||(t.chat=await o.newChat(c.id));const K={id:u,role:"assistant",content:"",created_at:new Date().toISOString(),matches:[]};t.messages.push(K);const se=t.messages.slice(0,-1);let P;try{P=await o.chat(c.id,t.chat.id,{sessionId:(m=t.streamingManager)==null?void 0:m.sessionId,streamId:(w=t.streamingManager)==null?void 0:w.streamId,messages:se,chatMode:t.chatMode})}catch(U){if((y=U==null?void 0:U.message)!=null&&y.includes("missing or invalid session_id"))console.log("Invalid stream, try reconnect with new stream id"),await j(),P=await o.chat(c.id,t.chat.id,{sessionId:(S=t.streamingManager)==null?void 0:S.sessionId,streamId:(T=t.streamingManager)==null?void 0:T.streamId,messages:se,chatMode:t.chatMode});else throw U}return h.track("agent-message-send",{event:"success",messages:t.messages.length+1}),K.context=P.context,P.result&&(K.content=P.result,K.matches=P.matches,h.track("agent-message-received",{latency:Date.now()-F,messages:t.messages.length}),(ie=(N=i.callbacks).onNewMessage)==null||ie.call(N,t.messages)),P}catch(F){throw t.messages[t.messages.length-1].id===u&&t.messages.pop(),h.track("agent-message-send",{event:"error",messages:t.messages.length}),F}},rate(d,u,l){var w,y,S,T;const g=t.messages.find(N=>N.id===d);if(t.chat){if(!g)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const m=((w=g.matches)==null?void 0:w.map(N=>[N.document_id,N.id]))??[];return h.track("agent-rate",{event:l?"update":"create",thumb:u===1?"up":"down",knowledge_id:((y=c.knowledge)==null?void 0:y.id)??"",matches:m,score:u}),l?o.updateRating(c.id,t.chat.id,l,{knowledge_id:((S=c.knowledge)==null?void 0:S.id)??"",message_id:d,matches:m,score:u}):o.createRating(c.id,t.chat.id,{knowledge_id:((T=c.knowledge)==null?void 0:T.id)??"",message_id:d,matches:m,score:u})},getChatmode(){if(!t.chat)throw new Error("Chat is not initialized");return o.getChatMode(c.id,t.chat.id)},deleteRate(d){var u;if(!t.chat)throw new Error("Chat is not initialized");return h.track("agent-rate-delete",{type:"text",chat_id:(u=t.chat)==null?void 0:u.id,id:d}),o.deleteRating(c.id,t.chat.id,d)},speak(d){if(!t.streamingManager)throw new Error("Streaming manager is not initialized");function u(){if(c.presenter){if(d.type==="text")return{type:"text",provider:d.provider?d.provider:c.presenter.voice,input:d.input,ssml:d.ssml||!1};if(d.type==="audio")return{type:"audio",audio_url:d.audio_url}}else throw new Error("Presenter is not initialized");throw new Error("Invalid payload")}const l=u();return h.track("agent-speak",l),t.streamingManager.speak({script:l})}}}f.ChatMode=k,f.ChatProgress=b,f.ConnectionState=_,f.DocumentType=X,f.KnowledgeType=Q,f.PlanGroup=H,f.Providers=Y,f.RateState=J,f.StreamEvents=$,f.StreamingState=O,f.Subject=q,f.UserPlan=x,f.VideoType=v,f.VoiceAccess=Z,f.createAgentManager=Ie,f.getAgent=_e,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})});
|
|
@@ -116,9 +116,8 @@ export interface AgentManager {
|
|
|
116
116
|
/**
|
|
117
117
|
* Method to send a chat message to existing chat with the agent
|
|
118
118
|
* @param messages
|
|
119
|
-
* @param append_chat: when true, append to existing agent chat, rather than creating a new one.
|
|
120
119
|
*/
|
|
121
|
-
chat: (userMessage: string
|
|
120
|
+
chat: (userMessage: string) => Promise<ChatResponse>;
|
|
122
121
|
/**
|
|
123
122
|
* Method to rate the answer in chat
|
|
124
123
|
* @param score: 1 | -1 - score of the answer. 1 for positive, -1 for negative
|