@d-id/client-sdk 1.0.19-beta.67 → 1.0.19-beta.69
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,32 +1,32 @@
|
|
|
1
|
-
var
|
|
2
|
-
const $ = "https://api.d-id.com",
|
|
3
|
-
function
|
|
1
|
+
var F = /* @__PURE__ */ ((e) => (e.Amazon = "amazon", e.Microsoft = "microsoft", e.Afflorithmics = "afflorithmics", e.Elevenlabs = "elevenlabs", e))(F || {}), U = /* @__PURE__ */ ((e) => (e.Public = "public", e.Premium = "premium", e.Private = "private", e))(U || {}), E = /* @__PURE__ */ ((e) => (e.Start = "START", e.Stop = "STOP", e))(E || {}), I = /* @__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))(I || {}), k = /* @__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))(k || {}), j = /* @__PURE__ */ ((e) => (e.TRIAL = "trial", e.BASIC = "basic", e.ENTERPRISE = "enterprise", e.LITE = "lite", e.ADVANCED = "advanced", e))(j || {}), V = /* @__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))(V || {}), q = /* @__PURE__ */ ((e) => (e.Unrated = "Unrated", e.Positive = "Positive", e.Negative = "Negative", e))(q || {}), J = /* @__PURE__ */ ((e) => (e.Functional = "Functional", e.TextOnly = "TextOnly", e.Maintenance = "Maintenance", e))(J || {}), K = /* @__PURE__ */ ((e) => (e.Embed = "embed", e.Query = "query", e.Partial = "partial", e.Answer = "answer", e.Complete = "done", e))(K || {}), Q = /* @__PURE__ */ ((e) => (e.KnowledgeProcessing = "knowledge/processing", e.KnowledgeIndexing = "knowledge/indexing", e.KnowledgeFailed = "knowledge/error", e.KnowledgeDone = "knowledge/done", e))(Q || {}), X = /* @__PURE__ */ ((e) => (e.Knowledge = "knowledge", e.Document = "document", e.Record = "record", e))(X || {}), Y = /* @__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))(Y || {}), L = /* @__PURE__ */ ((e) => (e.Clip = "clip", e.Talk = "talk", e))(L || {});
|
|
2
|
+
const $ = "https://api.d-id.com", Z = "wss://notifications.d-id.com", G = "79f81a83a67430be2bc0fd61042b8faa", N = () => Math.random().toString(16).slice(2);
|
|
3
|
+
function W() {
|
|
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 ee = N();
|
|
8
|
+
function H(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}.${W()}_${ee}`;
|
|
15
15
|
throw new Error(`Unknown auth type: ${e}`);
|
|
16
16
|
}
|
|
17
|
-
function
|
|
17
|
+
function x(e, a = $) {
|
|
18
18
|
const t = async (n, r) => {
|
|
19
19
|
const i = await fetch(a + (n != null && n.startsWith("/") ? n : `/${n}`), {
|
|
20
20
|
...r,
|
|
21
21
|
headers: {
|
|
22
22
|
...r == null ? void 0 : r.headers,
|
|
23
|
-
Authorization:
|
|
23
|
+
Authorization: H(e),
|
|
24
24
|
"Content-Type": "application/json"
|
|
25
25
|
}
|
|
26
26
|
});
|
|
27
27
|
if (!i.ok) {
|
|
28
|
-
let
|
|
29
|
-
throw new Error(
|
|
28
|
+
let u = await i.text().catch(() => "Failed to fetch");
|
|
29
|
+
throw new Error(u);
|
|
30
30
|
}
|
|
31
31
|
return i.json();
|
|
32
32
|
};
|
|
@@ -60,8 +60,8 @@ function K(e, a = $) {
|
|
|
60
60
|
}
|
|
61
61
|
};
|
|
62
62
|
}
|
|
63
|
-
function
|
|
64
|
-
const t =
|
|
63
|
+
function z(e, a = $) {
|
|
64
|
+
const t = x(e, `${a}/agents`);
|
|
65
65
|
return {
|
|
66
66
|
create(n, r) {
|
|
67
67
|
return t.post("/", n, r);
|
|
@@ -81,13 +81,13 @@ function F(e, a = $) {
|
|
|
81
81
|
newChat(n, r) {
|
|
82
82
|
return t.post(`/${n}/chat`, void 0, r);
|
|
83
83
|
},
|
|
84
|
-
chat(n, r, i,
|
|
85
|
-
return t.post(`/${n}/chat/${r}`, i,
|
|
84
|
+
chat(n, r, i, u) {
|
|
85
|
+
return t.post(`/${n}/chat/${r}`, i, u);
|
|
86
86
|
}
|
|
87
87
|
};
|
|
88
88
|
}
|
|
89
|
-
function
|
|
90
|
-
const t =
|
|
89
|
+
function te(e, a = $) {
|
|
90
|
+
const t = x(e, `${a}/knowledge`);
|
|
91
91
|
return {
|
|
92
92
|
createKnowledge(n, r) {
|
|
93
93
|
return t.post("/", n, r);
|
|
@@ -123,8 +123,8 @@ function re(e, a = $) {
|
|
|
123
123
|
}
|
|
124
124
|
};
|
|
125
125
|
}
|
|
126
|
-
function
|
|
127
|
-
const t =
|
|
126
|
+
function ne(e, a = $) {
|
|
127
|
+
const t = x(e, `${a}/chats/ratings`);
|
|
128
128
|
return {
|
|
129
129
|
create(n, r) {
|
|
130
130
|
return t.post("/", n, r);
|
|
@@ -140,50 +140,50 @@ function ie(e, a = $) {
|
|
|
140
140
|
}
|
|
141
141
|
};
|
|
142
142
|
}
|
|
143
|
-
const
|
|
144
|
-
function
|
|
143
|
+
const re = (e) => new Promise((a) => setTimeout(a, e));
|
|
144
|
+
function ie(e) {
|
|
145
145
|
return new Promise((a, t) => {
|
|
146
146
|
const {
|
|
147
147
|
callbacks: n,
|
|
148
148
|
host: r,
|
|
149
149
|
auth: i
|
|
150
150
|
} = e, {
|
|
151
|
-
onMessage:
|
|
152
|
-
onOpen:
|
|
153
|
-
onClose:
|
|
154
|
-
onError:
|
|
155
|
-
} = n || {},
|
|
156
|
-
|
|
157
|
-
console.error(
|
|
158
|
-
},
|
|
159
|
-
|
|
151
|
+
onMessage: u = null,
|
|
152
|
+
onOpen: f = null,
|
|
153
|
+
onClose: v = null,
|
|
154
|
+
onError: S = null
|
|
155
|
+
} = n || {}, o = new WebSocket(`${r}?authorization=${H(i)}`);
|
|
156
|
+
o.onmessage = u, o.onclose = v, o.onerror = (p) => {
|
|
157
|
+
console.error(p), S == null || S("Websocket failed to connect", p), t(p);
|
|
158
|
+
}, o.onopen = (p) => {
|
|
159
|
+
f == null || f(p), a(o);
|
|
160
160
|
};
|
|
161
161
|
});
|
|
162
162
|
}
|
|
163
|
-
async function
|
|
163
|
+
async function ae(e) {
|
|
164
164
|
const {
|
|
165
165
|
retries: a = 1
|
|
166
166
|
} = e;
|
|
167
167
|
let t = null;
|
|
168
168
|
for (let n = 0; (t == null ? void 0 : t.readyState) !== WebSocket.OPEN; n++)
|
|
169
169
|
try {
|
|
170
|
-
t = await
|
|
170
|
+
t = await ie(e);
|
|
171
171
|
} catch (r) {
|
|
172
172
|
if (n === a)
|
|
173
173
|
throw r;
|
|
174
|
-
await
|
|
174
|
+
await re(n * 500);
|
|
175
175
|
}
|
|
176
176
|
return t;
|
|
177
177
|
}
|
|
178
|
-
async function
|
|
179
|
-
const n = t != null && t.onMessage ? [t.onMessage] : [], r = await
|
|
178
|
+
async function O(e, a, t) {
|
|
179
|
+
const n = t != null && t.onMessage ? [t.onMessage] : [], r = await ae({
|
|
180
180
|
auth: e,
|
|
181
181
|
host: a,
|
|
182
182
|
callbacks: {
|
|
183
183
|
onError: t == null ? void 0 : t.onError,
|
|
184
184
|
onMessage: (i) => {
|
|
185
|
-
const
|
|
186
|
-
n.forEach((
|
|
185
|
+
const u = JSON.parse(i.data);
|
|
186
|
+
n.forEach((f) => f(u.event, u));
|
|
187
187
|
}
|
|
188
188
|
}
|
|
189
189
|
});
|
|
@@ -193,14 +193,15 @@ async function W(e, a, t) {
|
|
|
193
193
|
subscribeToEvents: (i) => n.push(i)
|
|
194
194
|
};
|
|
195
195
|
}
|
|
196
|
-
function
|
|
197
|
-
const t =
|
|
196
|
+
function se(e, a) {
|
|
197
|
+
const t = x(e, a);
|
|
198
198
|
return {
|
|
199
199
|
createStream(n) {
|
|
200
200
|
return t.post("/clips/streams", {
|
|
201
201
|
driver_id: n.driver_id,
|
|
202
202
|
presenter_id: n.presenter_id,
|
|
203
|
-
compatibility_mode: n.compatibility_mode
|
|
203
|
+
compatibility_mode: n.compatibility_mode,
|
|
204
|
+
stream_warmup: n.stream_warmup
|
|
204
205
|
});
|
|
205
206
|
},
|
|
206
207
|
startConnection(n, r, i) {
|
|
@@ -228,34 +229,35 @@ function de(e, a) {
|
|
|
228
229
|
}
|
|
229
230
|
};
|
|
230
231
|
}
|
|
231
|
-
function
|
|
232
|
-
const t =
|
|
232
|
+
function oe(e, a) {
|
|
233
|
+
const t = x(e, a);
|
|
233
234
|
return {
|
|
234
235
|
createStream(n, r) {
|
|
235
236
|
return t.post("/talks/streams", {
|
|
236
237
|
source_url: n.source_url,
|
|
237
238
|
driver_url: n.driver_url,
|
|
238
239
|
face: n.face,
|
|
239
|
-
config: n.config
|
|
240
|
+
config: n.config,
|
|
241
|
+
stream_warmup: n.stream_warmup
|
|
240
242
|
}, r);
|
|
241
243
|
},
|
|
242
|
-
startConnection(n, r, i,
|
|
244
|
+
startConnection(n, r, i, u) {
|
|
243
245
|
return t.post(`/talks/streams/${n}/sdp`, {
|
|
244
246
|
session_id: i,
|
|
245
247
|
answer: r
|
|
246
|
-
},
|
|
248
|
+
}, u);
|
|
247
249
|
},
|
|
248
|
-
addIceCandidate(n, r, i,
|
|
250
|
+
addIceCandidate(n, r, i, u) {
|
|
249
251
|
return t.post(`/talks/streams/${n}/ice`, {
|
|
250
252
|
session_id: i,
|
|
251
253
|
...r
|
|
252
|
-
},
|
|
254
|
+
}, u);
|
|
253
255
|
},
|
|
254
|
-
sendStreamRequest(n, r, i,
|
|
256
|
+
sendStreamRequest(n, r, i, u) {
|
|
255
257
|
return t.post(`/talks/streams/${n}`, {
|
|
256
258
|
session_id: r,
|
|
257
259
|
...i
|
|
258
|
-
},
|
|
260
|
+
}, u);
|
|
259
261
|
},
|
|
260
262
|
close(n, r, i) {
|
|
261
263
|
return t.delete(`/talks/streams/${n}`, {
|
|
@@ -264,7 +266,7 @@ function ce(e, a) {
|
|
|
264
266
|
}
|
|
265
267
|
};
|
|
266
268
|
}
|
|
267
|
-
function
|
|
269
|
+
function de(e, a) {
|
|
268
270
|
return e.map((t, n) => n === 0 ? a ? {
|
|
269
271
|
index: n,
|
|
270
272
|
timestamp: t.timestamp,
|
|
@@ -297,154 +299,154 @@ function ge(e, a) {
|
|
|
297
299
|
framesPerSecond: t.framesPerSecond
|
|
298
300
|
});
|
|
299
301
|
}
|
|
300
|
-
let
|
|
301
|
-
const R = (e, a) =>
|
|
302
|
-
function
|
|
302
|
+
let B = !1;
|
|
303
|
+
const R = (e, a) => B && console.log(e, a), ce = (window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection).bind(window);
|
|
304
|
+
function ge(e) {
|
|
303
305
|
switch (e) {
|
|
304
306
|
case "connected":
|
|
305
|
-
return
|
|
307
|
+
return k.Connected;
|
|
306
308
|
case "checking":
|
|
307
|
-
return
|
|
309
|
+
return k.Connecting;
|
|
308
310
|
case "failed":
|
|
309
|
-
return
|
|
311
|
+
return k.Fail;
|
|
310
312
|
case "new":
|
|
311
313
|
case "closed":
|
|
312
314
|
case "disconnected":
|
|
313
315
|
default:
|
|
314
|
-
return
|
|
316
|
+
return k.New;
|
|
315
317
|
}
|
|
316
318
|
}
|
|
317
|
-
function
|
|
319
|
+
function me(e, a) {
|
|
318
320
|
let t = [], n = 0, r = 0, i;
|
|
319
321
|
return setInterval(() => {
|
|
320
|
-
e.getStats().then((
|
|
321
|
-
|
|
322
|
-
if (
|
|
323
|
-
if (r = t.length - 1,
|
|
324
|
-
const
|
|
325
|
-
let
|
|
326
|
-
i =
|
|
327
|
-
let
|
|
328
|
-
if (
|
|
322
|
+
e.getStats().then((f) => {
|
|
323
|
+
f.forEach((v) => {
|
|
324
|
+
if (v.type === "inbound-rtp" && v.kind === "video") {
|
|
325
|
+
if (r = t.length - 1, v && t[r]) {
|
|
326
|
+
const S = v.bytesReceived, o = t[r].bytesReceived;
|
|
327
|
+
let p = i;
|
|
328
|
+
i = S - o > 0;
|
|
329
|
+
let d;
|
|
330
|
+
if (p !== i) {
|
|
329
331
|
if (i)
|
|
330
332
|
n = t.length;
|
|
331
333
|
else {
|
|
332
334
|
const A = t.slice(n), y = n === 0 ? void 0 : t[n - 1];
|
|
333
|
-
|
|
335
|
+
d = de(A, y), d = d.sort((_, h) => h.packetsLost - _.packetsLost).slice(0, 5);
|
|
334
336
|
}
|
|
335
|
-
a == null || a(i ?
|
|
337
|
+
a == null || a(i ? E.Start : E.Stop, d);
|
|
336
338
|
}
|
|
337
339
|
}
|
|
338
|
-
t.push(
|
|
340
|
+
t.push(v);
|
|
339
341
|
}
|
|
340
342
|
});
|
|
341
343
|
});
|
|
342
344
|
}, 500);
|
|
343
345
|
}
|
|
344
|
-
async function
|
|
346
|
+
async function ue(e, {
|
|
345
347
|
debug: a = !1,
|
|
346
348
|
callbacks: t,
|
|
347
349
|
auth: n,
|
|
348
350
|
analytics: r,
|
|
349
351
|
baseURL: i = $
|
|
350
352
|
}) {
|
|
351
|
-
|
|
352
|
-
let
|
|
353
|
+
B = a;
|
|
354
|
+
let u;
|
|
353
355
|
const {
|
|
354
|
-
startConnection:
|
|
355
|
-
sendStreamRequest:
|
|
356
|
-
close:
|
|
357
|
-
createStream:
|
|
358
|
-
addIceCandidate:
|
|
359
|
-
} = e.videoType ===
|
|
360
|
-
id:
|
|
356
|
+
startConnection: f,
|
|
357
|
+
sendStreamRequest: v,
|
|
358
|
+
close: S,
|
|
359
|
+
createStream: o,
|
|
360
|
+
addIceCandidate: p
|
|
361
|
+
} = e.videoType === L.Clip ? se(n, i) : oe(n, i), {
|
|
362
|
+
id: d,
|
|
361
363
|
offer: A,
|
|
362
364
|
ice_servers: y,
|
|
363
|
-
session_id:
|
|
364
|
-
} = await
|
|
365
|
+
session_id: _
|
|
366
|
+
} = await o(e), h = new ce({
|
|
365
367
|
iceServers: y
|
|
366
|
-
}),
|
|
367
|
-
if (!
|
|
368
|
+
}), c = h.createDataChannel("JanusDataChannel");
|
|
369
|
+
if (!_)
|
|
368
370
|
throw new Error("Could not create session_id");
|
|
369
|
-
const
|
|
370
|
-
|
|
371
|
-
R("peerConnection.onicecandidate", s), s.candidate && s.candidate.sdpMid && s.candidate.sdpMLineIndex !== null ?
|
|
371
|
+
const l = me(h, t.onVideoStateChange);
|
|
372
|
+
h.onicecandidate = (s) => {
|
|
373
|
+
R("peerConnection.onicecandidate", s), s.candidate && s.candidate.sdpMid && s.candidate.sdpMLineIndex !== null ? p(d, {
|
|
372
374
|
candidate: s.candidate.candidate,
|
|
373
375
|
sdpMid: s.candidate.sdpMid,
|
|
374
376
|
sdpMLineIndex: s.candidate.sdpMLineIndex
|
|
375
|
-
},
|
|
377
|
+
}, _) : p(d, {
|
|
376
378
|
candidate: null
|
|
377
|
-
},
|
|
378
|
-
},
|
|
379
|
-
var
|
|
380
|
-
R("peerConnection.oniceconnectionstatechange => " +
|
|
381
|
-
const s =
|
|
382
|
-
s ===
|
|
383
|
-
var
|
|
384
|
-
(
|
|
385
|
-
}, 5e3) : (clearTimeout(
|
|
386
|
-
},
|
|
387
|
-
var
|
|
388
|
-
R("peerConnection.ontrack", s), (
|
|
389
|
-
},
|
|
390
|
-
var
|
|
391
|
-
if (
|
|
392
|
-
const [
|
|
393
|
-
|
|
379
|
+
}, _);
|
|
380
|
+
}, h.oniceconnectionstatechange = () => {
|
|
381
|
+
var m;
|
|
382
|
+
R("peerConnection.oniceconnectionstatechange => " + h.iceConnectionState);
|
|
383
|
+
const s = ge(h.iceConnectionState);
|
|
384
|
+
s === k.Connected ? u = setTimeout(() => {
|
|
385
|
+
var w;
|
|
386
|
+
(w = t.onConnectionStateChange) == null || w.call(t, k.Connected);
|
|
387
|
+
}, 5e3) : (clearTimeout(u), (m = t.onConnectionStateChange) == null || m.call(t, s));
|
|
388
|
+
}, h.ontrack = (s) => {
|
|
389
|
+
var m;
|
|
390
|
+
R("peerConnection.ontrack", s), (m = t.onSrcObjectReady) == null || m.call(t, s.streams[0]);
|
|
391
|
+
}, c.onmessage = (s) => {
|
|
392
|
+
var m, w;
|
|
393
|
+
if (c.readyState === "open") {
|
|
394
|
+
const [C, M] = s.data.split(":");
|
|
395
|
+
C === I.StreamStarted ? r == null || r.track("agent-video", {
|
|
394
396
|
event: "start",
|
|
395
397
|
...s
|
|
396
|
-
}) :
|
|
398
|
+
}) : C === I.StreamDone ? r == null || r.track("agent-video", {
|
|
397
399
|
event: "stop",
|
|
398
400
|
...s
|
|
399
|
-
}) :
|
|
400
|
-
event:
|
|
401
|
-
data:
|
|
402
|
-
}), clearInterval(
|
|
401
|
+
}) : C === I.StreamFailed ? ((m = t.onVideoStateChange) == null || m.call(t, E.Stop, {
|
|
402
|
+
event: C,
|
|
403
|
+
data: M
|
|
404
|
+
}), clearInterval(l)) : C === I.StreamReady ? (clearTimeout(u), (w = t.onConnectionStateChange) == null || w.call(t, k.Connected)) : C === I.StreamCreated ? r == null || r.track("agent-video", {
|
|
403
405
|
event: "created",
|
|
404
406
|
...s
|
|
405
|
-
}) :
|
|
407
|
+
}) : C === I.StreamVideoCreated ? r == null || r.track("agent-video", {
|
|
406
408
|
event: "video-created",
|
|
407
409
|
...s
|
|
408
|
-
}) :
|
|
410
|
+
}) : C === I.StreamVideoDone ? r == null || r.track("agent-video", {
|
|
409
411
|
event: "video-done",
|
|
410
412
|
...s
|
|
411
|
-
}) :
|
|
413
|
+
}) : C === I.StreamVideoError && (r == null || r.track("agent-video", {
|
|
412
414
|
event: "video-error",
|
|
413
415
|
...s
|
|
414
416
|
}));
|
|
415
417
|
}
|
|
416
|
-
}, await
|
|
417
|
-
const
|
|
418
|
-
return R("create answer OK"), await
|
|
418
|
+
}, await h.setRemoteDescription(A), R("set remote description OK");
|
|
419
|
+
const g = await h.createAnswer();
|
|
420
|
+
return R("create answer OK"), await h.setLocalDescription(g), R("set local description OK"), await f(d, g, _), R("start connection OK"), {
|
|
419
421
|
/**
|
|
420
422
|
* Method to send request to server to get clip or talk depend on you payload
|
|
421
423
|
* @param payload
|
|
422
424
|
*/
|
|
423
425
|
speak(s) {
|
|
424
|
-
return
|
|
426
|
+
return v(d, _, s);
|
|
425
427
|
},
|
|
426
428
|
/**
|
|
427
429
|
* Method to close RTC connection
|
|
428
430
|
*/
|
|
429
431
|
async disconnect() {
|
|
430
|
-
var s,
|
|
431
|
-
|
|
432
|
-
}), (s = t.onConnectionStateChange) == null || s.call(t,
|
|
432
|
+
var s, m;
|
|
433
|
+
d && (h && (h.close(), h.oniceconnectionstatechange = null, h.onnegotiationneeded = null, h.onicecandidate = null, h.ontrack = null), await S(d, _).catch((w) => {
|
|
434
|
+
}), (s = t.onConnectionStateChange) == null || s.call(t, k.New), (m = t.onVideoStateChange) == null || m.call(t, E.Stop), clearInterval(l));
|
|
433
435
|
},
|
|
434
436
|
/**
|
|
435
437
|
* Session identifier information, should be returned in the body of all streaming requests
|
|
436
438
|
*/
|
|
437
|
-
sessionId:
|
|
439
|
+
sessionId: _,
|
|
438
440
|
/**
|
|
439
441
|
* Id of current RTC stream
|
|
440
442
|
*/
|
|
441
|
-
streamId:
|
|
443
|
+
streamId: d
|
|
442
444
|
};
|
|
443
445
|
}
|
|
444
|
-
function
|
|
446
|
+
function le(e) {
|
|
445
447
|
const a = {
|
|
446
448
|
mixPanelKey: e.mixPanelKey || "testKey",
|
|
447
|
-
distinct_id: e.distinctId ||
|
|
449
|
+
distinct_id: e.distinctId || W(),
|
|
448
450
|
isEnabled: e.isEnabled ?? !0,
|
|
449
451
|
agentId: e.agent.id,
|
|
450
452
|
owner_id: e.agent.owner_id ?? ""
|
|
@@ -480,7 +482,7 @@ function he(e) {
|
|
|
480
482
|
}
|
|
481
483
|
};
|
|
482
484
|
}
|
|
483
|
-
function
|
|
485
|
+
function we(e) {
|
|
484
486
|
var n, r;
|
|
485
487
|
const a = () => /Mobi|Android/i.test(navigator.userAgent) ? "Mobile" : "Desktop";
|
|
486
488
|
return {
|
|
@@ -498,59 +500,61 @@ function fe(e) {
|
|
|
498
500
|
}
|
|
499
501
|
};
|
|
500
502
|
}
|
|
501
|
-
function
|
|
503
|
+
function he(e, a) {
|
|
502
504
|
var t;
|
|
503
505
|
return (t = e.knowledge) != null && t.id ? a.getKnowledge(e.knowledge.id).then((n) => (n == null ? void 0 : n.starter_message) || []) : [];
|
|
504
506
|
}
|
|
505
|
-
function
|
|
506
|
-
return e.presenter.type ===
|
|
507
|
-
videoType:
|
|
507
|
+
function fe(e) {
|
|
508
|
+
return e.presenter.type === L.Clip ? {
|
|
509
|
+
videoType: L.Clip,
|
|
508
510
|
driver_id: e.presenter.driver_id,
|
|
509
|
-
presenter_id: e.presenter.presenter_id
|
|
511
|
+
presenter_id: e.presenter.presenter_id,
|
|
512
|
+
stream_warmup: !0
|
|
510
513
|
} : {
|
|
511
|
-
videoType:
|
|
512
|
-
source_url: e.presenter.source_url
|
|
514
|
+
videoType: L.Talk,
|
|
515
|
+
source_url: e.presenter.source_url,
|
|
516
|
+
stream_warmup: !0
|
|
513
517
|
};
|
|
514
518
|
}
|
|
515
|
-
function
|
|
516
|
-
return new Promise(async (i,
|
|
517
|
-
let
|
|
518
|
-
const
|
|
519
|
+
function D(e, a, t, n, r) {
|
|
520
|
+
return new Promise(async (i, u) => {
|
|
521
|
+
let f = r;
|
|
522
|
+
const v = await ue(fe(e), {
|
|
519
523
|
...a,
|
|
520
524
|
callbacks: {
|
|
521
525
|
...a.callbacks,
|
|
522
|
-
onConnectionStateChange: async (
|
|
523
|
-
var
|
|
524
|
-
if (
|
|
526
|
+
onConnectionStateChange: async (S) => {
|
|
527
|
+
var o, p;
|
|
528
|
+
if (S === k.Connected)
|
|
525
529
|
try {
|
|
526
|
-
|
|
530
|
+
f || (f = await t.newChat(e.id), n.track("agent-chat", {
|
|
527
531
|
event: "created",
|
|
528
|
-
chat_id:
|
|
532
|
+
chat_id: f.id,
|
|
529
533
|
agent_id: e.id
|
|
530
|
-
})),
|
|
531
|
-
chat:
|
|
532
|
-
streamingManager:
|
|
534
|
+
})), v && i({
|
|
535
|
+
chat: f,
|
|
536
|
+
streamingManager: v
|
|
533
537
|
});
|
|
534
|
-
} catch (
|
|
535
|
-
console.error(
|
|
538
|
+
} catch (d) {
|
|
539
|
+
console.error(d), u("Cannot create new chat");
|
|
536
540
|
}
|
|
537
541
|
else
|
|
538
|
-
|
|
539
|
-
(
|
|
542
|
+
S === k.Fail && u(new Error("Cannot create connection"));
|
|
543
|
+
(p = (o = a.callbacks).onConnectionStateChange) == null || p.call(o, S);
|
|
540
544
|
},
|
|
541
|
-
onVideoStateChange(
|
|
542
|
-
var
|
|
545
|
+
onVideoStateChange(S, o) {
|
|
546
|
+
var p, d;
|
|
543
547
|
n.track("agent-video", {
|
|
544
|
-
event:
|
|
545
|
-
rtc_stats:
|
|
546
|
-
}), (
|
|
548
|
+
event: S,
|
|
549
|
+
rtc_stats: o ?? []
|
|
550
|
+
}), (d = (p = a.callbacks).onVideoStateChange) == null || d.call(p, S, o);
|
|
547
551
|
}
|
|
548
552
|
}
|
|
549
|
-
}).catch(
|
|
553
|
+
}).catch(u);
|
|
550
554
|
});
|
|
551
555
|
}
|
|
552
|
-
function
|
|
553
|
-
return
|
|
556
|
+
function pe(e, a, t) {
|
|
557
|
+
return z(a, t || $).getById(e);
|
|
554
558
|
}
|
|
555
559
|
function T(e) {
|
|
556
560
|
let a = "";
|
|
@@ -566,86 +570,77 @@ function T(e) {
|
|
|
566
570
|
created_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
567
571
|
}];
|
|
568
572
|
}
|
|
569
|
-
async function
|
|
570
|
-
var
|
|
573
|
+
async function ve(e, a) {
|
|
574
|
+
var _, h;
|
|
571
575
|
const t = {
|
|
572
576
|
messages: []
|
|
573
|
-
}
|
|
574
|
-
|
|
575
|
-
const
|
|
576
|
-
|
|
577
|
-
|
|
577
|
+
};
|
|
578
|
+
let n = -1;
|
|
579
|
+
const r = a.wsURL || Z, i = a.baseURL || $, u = a.mixpanelKey || G, f = z(a.auth, i), v = ne(a.auth, i), S = te(a.auth, i), o = await f.getById(e), p = await he(o, S);
|
|
580
|
+
t.messages = T(o), (h = (_ = a.callbacks).onNewMessage) == null || h.call(_, t.messages);
|
|
581
|
+
const d = le({
|
|
582
|
+
mixPanelKey: u,
|
|
583
|
+
agent: o,
|
|
578
584
|
...a
|
|
579
585
|
});
|
|
580
|
-
|
|
586
|
+
d.track("agent-sdk", {
|
|
581
587
|
event: "loaded",
|
|
582
|
-
...
|
|
588
|
+
...we(o)
|
|
583
589
|
});
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
messages: t.messages.length
|
|
595
|
-
}), (O = (b = a.callbacks).onNewMessage) == null || O.call(b, t.messages);
|
|
596
|
-
}
|
|
590
|
+
const A = {
|
|
591
|
+
onMessage: (c, l) => {
|
|
592
|
+
var g, s;
|
|
593
|
+
if ("content" in l) {
|
|
594
|
+
const {
|
|
595
|
+
content: m
|
|
596
|
+
} = l, w = t.messages[t.messages.length - 1];
|
|
597
|
+
(w == null ? void 0 : w.role) === "assistant" && (n < t.messages.length && (w.content = c === K.Partial ? w.content + m : m), c === K.Answer && (n = t.messages.length)), c === K.Complete && d.track("agent-message-received", {
|
|
598
|
+
messages: t.messages.length
|
|
599
|
+
}), (s = (g = a.callbacks).onNewMessage) == null || s.call(g, t.messages);
|
|
597
600
|
}
|
|
598
|
-
}
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
601
|
+
}
|
|
602
|
+
};
|
|
603
|
+
async function y() {
|
|
604
|
+
var s, m, w, C, M;
|
|
605
|
+
const c = await O(a.auth, r, A), {
|
|
606
|
+
streamingManager: l,
|
|
607
|
+
chat: g
|
|
608
|
+
} = await D(o, a, f, d, t.chat);
|
|
609
|
+
n = -1, t.messages = T(o), (m = (s = a.callbacks).onNewMessage) == null || m.call(s, t.messages), g != null && g.id && g.id !== ((w = t.chat) == null ? void 0 : w.id) && ((M = (C = a.callbacks).onNewChat) == null || M.call(C, g == null ? void 0 : g.id)), t.streamingManager = l, t.socketManager = c, t.chat = g, d.track("agent-chat", {
|
|
603
610
|
event: "connect",
|
|
604
|
-
chatId:
|
|
605
|
-
agentId:
|
|
611
|
+
chatId: g.id,
|
|
612
|
+
agentId: o.id
|
|
606
613
|
});
|
|
607
614
|
}
|
|
608
615
|
return {
|
|
609
|
-
agent:
|
|
610
|
-
starterMessages:
|
|
611
|
-
connect:
|
|
616
|
+
agent: o,
|
|
617
|
+
starterMessages: p,
|
|
618
|
+
connect: y,
|
|
612
619
|
async reconnect() {
|
|
613
620
|
if (!t.chat)
|
|
614
|
-
return
|
|
615
|
-
const c = await
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
content: C
|
|
621
|
-
} = h, l = t.messages[t.messages.length - 1];
|
|
622
|
-
(l == null ? void 0 : l.role) === "assistant" && (l.content = v === E.Partial ? l.content + C : C), v === E.Complete && g.track("agent-message-received", {
|
|
623
|
-
messages: t.messages.length
|
|
624
|
-
}), (f = (s = a.callbacks).onNewMessage) == null || f.call(s, t.messages);
|
|
625
|
-
}
|
|
626
|
-
}
|
|
627
|
-
}), {
|
|
628
|
-
streamingManager: o,
|
|
629
|
-
chat: u
|
|
630
|
-
} = await H(d, a, m, g, t.chat);
|
|
631
|
-
t.streamingManager = o, t.socketManager = c, g.track("agent-chat", {
|
|
621
|
+
return y();
|
|
622
|
+
const c = await O(a.auth, r, A), {
|
|
623
|
+
streamingManager: l,
|
|
624
|
+
chat: g
|
|
625
|
+
} = await D(o, a, f, d, t.chat);
|
|
626
|
+
t.streamingManager = l, t.socketManager = c, d.track("agent-chat", {
|
|
632
627
|
event: "reconnect",
|
|
633
|
-
chatId:
|
|
634
|
-
agentId:
|
|
628
|
+
chatId: g.id,
|
|
629
|
+
agentId: o.id
|
|
635
630
|
});
|
|
636
631
|
},
|
|
637
632
|
async disconnect() {
|
|
638
|
-
var c,
|
|
639
|
-
(c = t.socketManager) == null || c.disconnect(), await ((
|
|
633
|
+
var c, l, g, s, m;
|
|
634
|
+
(c = t.socketManager) == null || c.disconnect(), await ((l = t.streamingManager) == null ? void 0 : l.disconnect()), t.messages = T(o), (s = (g = a.callbacks).onNewMessage) == null || s.call(g, t.messages), d.track("agent-chat", {
|
|
640
635
|
event: "disconnect",
|
|
641
|
-
chatId: (
|
|
642
|
-
agentId:
|
|
636
|
+
chatId: (m = t.chat) == null ? void 0 : m.id,
|
|
637
|
+
agentId: o.id
|
|
643
638
|
});
|
|
644
639
|
},
|
|
645
|
-
async chat(c,
|
|
646
|
-
var
|
|
640
|
+
async chat(c, l = !1) {
|
|
641
|
+
var g, s;
|
|
647
642
|
try {
|
|
648
|
-
const
|
|
643
|
+
const m = Date.now();
|
|
649
644
|
if (c.length === 0)
|
|
650
645
|
throw new Error("Message cannot be empty");
|
|
651
646
|
if (!t.chat)
|
|
@@ -656,81 +651,81 @@ async function Ce(e, a) {
|
|
|
656
651
|
id: N(),
|
|
657
652
|
role: "user",
|
|
658
653
|
content: c,
|
|
659
|
-
created_at: new Date(
|
|
654
|
+
created_at: new Date(m).toISOString()
|
|
660
655
|
});
|
|
661
|
-
const
|
|
656
|
+
const w = await f.chat(o.id, t.chat.id, {
|
|
662
657
|
sessionId: t.streamingManager.sessionId,
|
|
663
658
|
streamId: t.streamingManager.streamId,
|
|
664
659
|
messages: t.messages,
|
|
665
|
-
append_chat:
|
|
660
|
+
append_chat: l
|
|
666
661
|
});
|
|
667
|
-
return
|
|
662
|
+
return d.track("agent-message-send", {
|
|
668
663
|
event: "success",
|
|
669
664
|
messages: t.messages.length + 1
|
|
670
665
|
}), t.messages.push({
|
|
671
666
|
id: N(),
|
|
672
667
|
role: "assistant",
|
|
673
|
-
content:
|
|
668
|
+
content: w.result ?? "",
|
|
674
669
|
created_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
675
|
-
matches:
|
|
676
|
-
}),
|
|
677
|
-
latency: Date.now() -
|
|
670
|
+
matches: w.matches
|
|
671
|
+
}), w.result && d.track("agent-message-received", {
|
|
672
|
+
latency: Date.now() - m,
|
|
678
673
|
messages: t.messages.length
|
|
679
|
-
}), (
|
|
680
|
-
} catch (
|
|
681
|
-
throw
|
|
674
|
+
}), (s = (g = a.callbacks).onNewMessage) == null || s.call(g, t.messages), w;
|
|
675
|
+
} catch (m) {
|
|
676
|
+
throw d.track("agent-message-send", {
|
|
682
677
|
event: "error",
|
|
683
678
|
messages: t.messages.length
|
|
684
|
-
}),
|
|
679
|
+
}), m;
|
|
685
680
|
}
|
|
686
681
|
},
|
|
687
|
-
rate(c,
|
|
688
|
-
var
|
|
689
|
-
const
|
|
682
|
+
rate(c, l, g) {
|
|
683
|
+
var w, C, M, b;
|
|
684
|
+
const s = t.messages.find((P) => P.id === c);
|
|
690
685
|
if (t.chat) {
|
|
691
|
-
if (!
|
|
686
|
+
if (!s)
|
|
692
687
|
throw new Error("Message not found");
|
|
693
688
|
} else
|
|
694
689
|
throw new Error("Chat is not initialized");
|
|
695
|
-
const
|
|
696
|
-
return
|
|
697
|
-
event:
|
|
698
|
-
thumb:
|
|
699
|
-
knowledge_id: ((
|
|
700
|
-
matches:
|
|
701
|
-
score:
|
|
702
|
-
}),
|
|
703
|
-
agent_id:
|
|
704
|
-
knowledge_id: ((
|
|
690
|
+
const m = ((w = s.matches) == null ? void 0 : w.map((P) => [P.document_id, P.id])) ?? [];
|
|
691
|
+
return d.track("agent-rate", {
|
|
692
|
+
event: g ? "update" : "create",
|
|
693
|
+
thumb: l === 1 ? "up" : "down",
|
|
694
|
+
knowledge_id: ((C = o.knowledge) == null ? void 0 : C.id) ?? "",
|
|
695
|
+
matches: m,
|
|
696
|
+
score: l
|
|
697
|
+
}), g ? v.update(g, {
|
|
698
|
+
agent_id: o.id,
|
|
699
|
+
knowledge_id: ((M = o.knowledge) == null ? void 0 : M.id) ?? "",
|
|
705
700
|
chat_id: t.chat.id,
|
|
706
701
|
message_id: c,
|
|
707
|
-
matches:
|
|
708
|
-
score:
|
|
709
|
-
}) :
|
|
710
|
-
agent_id:
|
|
711
|
-
knowledge_id: ((
|
|
702
|
+
matches: m,
|
|
703
|
+
score: l
|
|
704
|
+
}) : v.create({
|
|
705
|
+
agent_id: o.id,
|
|
706
|
+
knowledge_id: ((b = o.knowledge) == null ? void 0 : b.id) ?? "",
|
|
712
707
|
chat_id: t.chat.id,
|
|
713
708
|
message_id: c,
|
|
714
|
-
matches:
|
|
715
|
-
score:
|
|
709
|
+
matches: m,
|
|
710
|
+
score: l
|
|
716
711
|
});
|
|
717
712
|
},
|
|
718
713
|
deleteRate(c) {
|
|
719
|
-
var
|
|
720
|
-
return
|
|
714
|
+
var l;
|
|
715
|
+
return d.track("agent-rate-delete", {
|
|
721
716
|
type: "text",
|
|
722
|
-
chat_id: (
|
|
717
|
+
chat_id: (l = t.chat) == null ? void 0 : l.id,
|
|
723
718
|
id: c
|
|
724
|
-
}),
|
|
719
|
+
}), v.delete(c);
|
|
725
720
|
},
|
|
726
721
|
speak(c) {
|
|
727
722
|
if (!t.streamingManager)
|
|
728
723
|
throw new Error("Streaming manager is not initialized");
|
|
729
|
-
function
|
|
724
|
+
function l() {
|
|
730
725
|
if (c.type === "text")
|
|
731
726
|
return {
|
|
732
727
|
type: "text",
|
|
733
|
-
provider: c.provider ? c.provider :
|
|
728
|
+
provider: c.provider ? c.provider : o.presenter.voice,
|
|
734
729
|
input: c.input,
|
|
735
730
|
ssml: c.ssml || !1
|
|
736
731
|
};
|
|
@@ -741,23 +736,23 @@ async function Ce(e, a) {
|
|
|
741
736
|
};
|
|
742
737
|
throw new Error("Invalid payload");
|
|
743
738
|
}
|
|
744
|
-
const
|
|
745
|
-
return
|
|
746
|
-
script:
|
|
739
|
+
const g = l();
|
|
740
|
+
return d.track("agent-speak", g), t.streamingManager.speak({
|
|
741
|
+
script: g
|
|
747
742
|
});
|
|
748
743
|
}
|
|
749
744
|
};
|
|
750
745
|
}
|
|
751
746
|
export {
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
747
|
+
J as ChatMode,
|
|
748
|
+
Y as DocumentType,
|
|
749
|
+
X as KnowledgeType,
|
|
750
|
+
V as PlanGroup,
|
|
751
|
+
F as Providers,
|
|
752
|
+
q as RateState,
|
|
753
|
+
Q as Subject,
|
|
754
|
+
j as UserPlan,
|
|
755
|
+
U as VoiceAccess,
|
|
756
|
+
ve as createAgentManager,
|
|
757
|
+
pe as getAgent
|
|
763
758
|
};
|
package/dist/index.umd.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(C,A){typeof exports=="object"&&typeof module<"u"?A(exports):typeof define=="function"&&define.amd?define(["exports"],A):(C=typeof globalThis<"u"?globalThis:C||self,A(C.index={}))})(this,function(C){"use strict";var A=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(A||{}),D=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(D||{}),P=(e=>(e.Start="START",e.Stop="STOP",e))(P||{}),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||{}),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||{}),W=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(W||{}),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||{}),U=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e))(U||{}),T=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(T||{}),z=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(z||{}),B=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(B||{}),F=(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))(F||{}),K=(e=>(e.Clip="clip",e.Talk="talk",e))(K||{});const y="https://api.d-id.com",te="wss://notifications.d-id.com",ne="79f81a83a67430be2bc0fd61042b8faa",O=()=>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 re=O();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()}_${re}`;throw new Error(`Unknown auth type: ${e}`)}function b(e,a=y){const t=async(n,r)=>{const i=await fetch(a+(n!=null&&n.startsWith("/")?n:`/${n}`),{...r,headers:{...r==null?void 0:r.headers,Authorization:q(e),"Content-Type":"application/json"}});if(!i.ok){let u=await i.text().catch(()=>"Failed to fetch");throw new Error(u)}return i.json()};return{get(n,r){return t(n,{...r,method:"GET"})},post(n,r,i){return t(n,{...i,body:JSON.stringify(r),method:"POST"})},delete(n,r,i){return t(n,{...i,body:JSON.stringify(r),method:"DELETE"})},patch(n,r,i){return t(n,{...i,body:JSON.stringify(r),method:"PATCH"})}}}function J(e,a=y){const t=b(e,`${a}/agents`);return{create(n,r){return t.post("/",n,r)},getAgents(n,r){return t.get(`/${n?`?tag=${n}`:""}`,r).then(i=>i??[])},getById(n,r){return t.get(`/${n}`,r)},delete(n,r){return t.delete(`/${n}`,void 0,r)},update(n,r,i){return t.patch(`/${n}`,r,i)},newChat(n,r){return t.post(`/${n}/chat`,void 0,r)},chat(n,r,i,u){return t.post(`/${n}/chat/${r}`,i,u)}}}function ie(e,a=y){const t=b(e,`${a}/knowledge`);return{createKnowledge(n,r){return t.post("/",n,r)},getKnowledgeBase(n){return t.get("/",n)},getKnowledge(n,r){return t.get(`/${n}`,r)},deleteKnowledge(n,r){return t.delete(`/${n}`,void 0,r)},createDocument(n,r,i){return t.post(`/${n}/documents`,r,i)},deleteDocument(n,r,i){return t.delete(`/${n}/documents/${r}`,void 0,i)},getDocuments(n,r){return t.get(`/${n}/documents`,r)},getDocument(n,r,i){return t.get(`/${n}/documents/${r}`,i)},getRecords(n,r,i){return t.get(`/${n}/documents/${r}/records`,i)},query(n,r,i){return t.post(`/${n}/query`,{query:r},i)}}}function ae(e,a=y){const t=b(e,`${a}/chats/ratings`);return{create(n,r){return t.post("/",n,r)},getByKnowledge(n,r){return t.get(`/${n}`,r).then(i=>i??[])},update(n,r,i){return t.patch(`/${n}`,r,i)},delete(n,r){return t.delete(`/${n}`,r)}}}const se=e=>new Promise(a=>setTimeout(a,e));function oe(e){return new Promise((a,t)=>{const{callbacks:n,host:r,auth:i}=e,{onMessage:u=null,onOpen:v=null,onClose:_=null,onError:d=null}=n||{},S=new WebSocket(`${r}?authorization=${q(i)}`);S.onmessage=u,S.onclose=_,S.onerror=g=>{console.error(g),d==null||d("Websocket failed to connect",g),t(g)},S.onopen=g=>{v==null||v(g),a(S)}})}async function de(e){const{retries:a=1}=e;let t=null;for(let n=0;(t==null?void 0:t.readyState)!==WebSocket.OPEN;n++)try{t=await oe(e)}catch(r){if(n===a)throw r;await se(n*500)}return t}async function Q(e,a,t){const n=t!=null&&t.onMessage?[t.onMessage]:[],r=await de({auth:e,host:a,callbacks:{onError:t==null?void 0:t.onError,onMessage:i=>{const u=JSON.parse(i.data);n.forEach(v=>v(u.event,u))}}});return{socket:r,disconnect:()=>r.close(),subscribeToEvents:i=>n.push(i)}}function ce(e,a){const t=b(e,a);return{createStream(n){return t.post("/clips/streams",{driver_id:n.driver_id,presenter_id:n.presenter_id,compatibility_mode:n.compatibility_mode})},startConnection(n,r,i){return t.post(`/clips/streams/${n}/sdp`,{session_id:i,answer:r})},addIceCandidate(n,r,i){return t.post(`/clips/streams/${n}/ice`,{session_id:i,...r})},sendStreamRequest(n,r,i){return t.post(`/clips/streams/${n}`,{session_id:r,...i})},close(n,r){return t.delete(`/clips/streams/${n}`,{session_id:r})}}}function ge(e,a){const t=b(e,a);return{createStream(n,r){return t.post("/talks/streams",{source_url:n.source_url,driver_url:n.driver_url,face:n.face,config:n.config},r)},startConnection(n,r,i,u){return t.post(`/talks/streams/${n}/sdp`,{session_id:i,answer:r},u)},addIceCandidate(n,r,i,u){return t.post(`/talks/streams/${n}/ice`,{session_id:i,...r},u)},sendStreamRequest(n,r,i,u){return t.post(`/talks/streams/${n}`,{session_id:r,...i},u)},close(n,r,i){return t.delete(`/talks/streams/${n}`,{session_id:r},i)}}}function ue(e,a){return e.map((t,n)=>n===0?a?{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived-a.bytesReceived,packetsReceived:t.packetsReceived-a.packetsReceived,packetsLost:t.packetsLost-a.packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond}:{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived,packetsReceived:t.packetsReceived,packetsLost:t.packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond}:{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived-e[n-1].bytesReceived,packetsReceived:t.packetsReceived-e[n-1].packetsReceived,packetsLost:t.packetsLost-e[n-1].packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond})}let X=!1;const $=(e,a)=>X&&console.log(e,a),me=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function le(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 he(e,a){let t=[],n=0,r=0,i;return setInterval(()=>{e.getStats().then(v=>{v.forEach(_=>{if(_.type==="inbound-rtp"&&_.kind==="video"){if(r=t.length-1,_&&t[r]){const d=_.bytesReceived,S=t[r].bytesReceived;let g=i;i=d-S>0;let h;if(g!==i){if(i)n=t.length;else{const L=t.slice(n),E=n===0?void 0:t[n-1];h=ue(L,E),h=h.sort((c,o)=>o.packetsLost-c.packetsLost).slice(0,5)}a==null||a(i?P.Start:P.Stop,h)}}t.push(_)}})})},500)}async function we(e,{debug:a=!1,callbacks:t,auth:n,analytics:r,baseURL:i=y}){X=a;let u;const{startConnection:v,sendStreamRequest:_,close:d,createStream:S,addIceCandidate:g}=e.videoType===K.Clip?ce(n,i):ge(n,i),{id:h,offer:L,ice_servers:E,session_id:c}=await S(e),o=new me({iceServers:E}),m=o.createDataChannel("JanusDataChannel");if(!c)throw new Error("Could not create session_id");const p=he(o,t.onVideoStateChange);o.onicecandidate=s=>{$("peerConnection.onicecandidate",s),s.candidate&&s.candidate.sdpMid&&s.candidate.sdpMLineIndex!==null?g(h,{candidate:s.candidate.candidate,sdpMid:s.candidate.sdpMid,sdpMLineIndex:s.candidate.sdpMLineIndex},c):g(h,{candidate:null},c)},o.oniceconnectionstatechange=()=>{var f;$("peerConnection.oniceconnectionstatechange => "+o.iceConnectionState);const s=le(o.iceConnectionState);s===M.Connected?u=setTimeout(()=>{var k;(k=t.onConnectionStateChange)==null||k.call(t,M.Connected)},5e3):(clearTimeout(u),(f=t.onConnectionStateChange)==null||f.call(t,s))},o.ontrack=s=>{var f;$("peerConnection.ontrack",s),(f=t.onSrcObjectReady)==null||f.call(t,s.streams[0])},m.onmessage=s=>{var f,k;if(m.readyState==="open"){const[l,I]=s.data.split(":");l===R.StreamStarted?r==null||r.track("agent-video",{event:"start",...s}):l===R.StreamDone?r==null||r.track("agent-video",{event:"stop",...s}):l===R.StreamFailed?((f=t.onVideoStateChange)==null||f.call(t,P.Stop,{event:l,data:I}),clearInterval(p)):l===R.StreamReady?(clearTimeout(u),(k=t.onConnectionStateChange)==null||k.call(t,M.Connected)):l===R.StreamCreated?r==null||r.track("agent-video",{event:"created",...s}):l===R.StreamVideoCreated?r==null||r.track("agent-video",{event:"video-created",...s}):l===R.StreamVideoDone?r==null||r.track("agent-video",{event:"video-done",...s}):l===R.StreamVideoError&&(r==null||r.track("agent-video",{event:"video-error",...s}))}},await o.setRemoteDescription(L),$("set remote description OK");const w=await o.createAnswer();return $("create answer OK"),await o.setLocalDescription(w),$("set local description OK"),await v(h,w,c),$("start connection OK"),{speak(s){return _(h,c,s)},async disconnect(){var s,f;h&&(o&&(o.close(),o.oniceconnectionstatechange=null,o.onnegotiationneeded=null,o.onicecandidate=null,o.ontrack=null),await d(h,c).catch(k=>{}),(s=t.onConnectionStateChange)==null||s.call(t,M.New),(f=t.onVideoStateChange)==null||f.call(t,P.Stop),clearInterval(p))},sessionId:c,streamId:h}}function fe(e){const a={mixPanelKey:e.mixPanelKey||"testKey",distinct_id:e.distinctId||V(),isEnabled:e.isEnabled??!0,agentId:e.agent.id,owner_id:e.agent.owner_id??""};return{...a,getRandom:()=>Math.random().toString(16).slice(2),track(t,n){if(!this.isEnabled)return Promise.reject("MixPanel analytics is disabled on creation");const r={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:t,properties:{...n,...a,time:Date.now(),$insert_id:this.getRandom(),origin:window.location.href,"Screen Height":window.screen.height||window.innerWidth,"Screen Width":window.screen.width||window.innerHeight,"User Agent":navigator.userAgent}}])})};return fetch("https://api-js.mixpanel.com/track/?verbose=1&ip=1",r).then(i=>i.json()).catch(i=>console.error(i))}}}function ve(e){var n,r;const a=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop";return{$os:`${(()=>{const i=navigator.platform;return i.toLowerCase().includes("win")?"Windows":i.toLowerCase().includes("mac")?"Mac OS X":i.toLowerCase().includes("linux")?"Linux":"Unknown"})()}`,isMobile:`${a()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:e.presenter.type,agentVoice:{voiceId:(n=e.presenter.voice)==null?void 0:n.voice_id,provider:(r=e.presenter.voice)==null?void 0:r.type}}}function pe(e,a){var t;return(t=e.knowledge)!=null&&t.id?a.getKnowledge(e.knowledge.id).then(n=>(n==null?void 0:n.starter_message)||[]):[]}function Se(e){return e.presenter.type===K.Clip?{videoType:K.Clip,driver_id:e.presenter.driver_id,presenter_id:e.presenter.presenter_id}:{videoType:K.Talk,source_url:e.presenter.source_url}}function Y(e,a,t,n,r){return new Promise(async(i,u)=>{let v=r;const _=await we(Se(e),{...a,callbacks:{...a.callbacks,onConnectionStateChange:async d=>{var S,g;if(d===M.Connected)try{v||(v=await t.newChat(e.id),n.track("agent-chat",{event:"created",chat_id:v.id,agent_id:e.id})),_&&i({chat:v,streamingManager:_})}catch(h){console.error(h),u("Cannot create new chat")}else d===M.Fail&&u(new Error("Cannot create connection"));(g=(S=a.callbacks).onConnectionStateChange)==null||g.call(S,d)},onVideoStateChange(d,S){var g,h;n.track("agent-video",{event:d,rtc_stats:S??[]}),(h=(g=a.callbacks).onVideoStateChange)==null||h.call(g,d,S)}}}).catch(u)})}function Ce(e,a,t){return J(a,t||y).getById(e)}function x(e){let a="";if(e.greetings&&e.greetings.length>0){const t=Math.floor(Math.random()*e.greetings.length);a=e.greetings[t]}else a=`Hi! I'm ${e.preview_name}, welcome to agents. How can I help you?`;return[{content:a,id:O(),role:"assistant",created_at:new Date().toISOString()}]}async function ke(e,a){var L,E;const t={messages:[]},n=a.wsURL||te,r=a.baseURL||y,i=a.mixpanelKey||ne,u=J(a.auth,r),v=ae(a.auth,r),_=ie(a.auth,r),d=await u.getById(e),S=await pe(d,_);t.messages=x(d),(E=(L=a.callbacks).onNewMessage)==null||E.call(L,t.messages);const g=fe({mixPanelKey:i,agent:d,...a});g.track("agent-sdk",{event:"loaded",...ve(d)});async function h(){var p,w,s,f,k;const c=await Q(a.auth,n,{onMessage:(l,I)=>{var Z,G;if("content"in I){const{content:ee}=I,N=t.messages[t.messages.length-1];(N==null?void 0:N.role)==="assistant"&&(N.content=l===T.Partial?N.content+ee:ee),l===T.Complete&&g.track("agent-message-received",{messages:t.messages.length}),(G=(Z=a.callbacks).onNewMessage)==null||G.call(Z,t.messages)}}}),{streamingManager:o,chat:m}=await Y(d,a,u,g,t.chat);t.messages=x(d),(w=(p=a.callbacks).onNewMessage)==null||w.call(p,t.messages),m!=null&&m.id&&m.id!==((s=t.chat)==null?void 0:s.id)&&((k=(f=a.callbacks).onNewChat)==null||k.call(f,m==null?void 0:m.id)),t.streamingManager=o,t.socketManager=c,t.chat=m,g.track("agent-chat",{event:"connect",chatId:m.id,agentId:d.id})}return{agent:d,starterMessages:S,connect:h,async reconnect(){if(!t.chat)return h();const c=await Q(a.auth,n,{onMessage:(p,w)=>{var s,f;if("content"in w){const{content:k}=w,l=t.messages[t.messages.length-1];(l==null?void 0:l.role)==="assistant"&&(l.content=p===T.Partial?l.content+k:k),p===T.Complete&&g.track("agent-message-received",{messages:t.messages.length}),(f=(s=a.callbacks).onNewMessage)==null||f.call(s,t.messages)}}}),{streamingManager:o,chat:m}=await Y(d,a,u,g,t.chat);t.streamingManager=o,t.socketManager=c,g.track("agent-chat",{event:"reconnect",chatId:m.id,agentId:d.id})},async disconnect(){var c,o,m,p,w;(c=t.socketManager)==null||c.disconnect(),await((o=t.streamingManager)==null?void 0:o.disconnect()),t.messages=x(d),(p=(m=a.callbacks).onNewMessage)==null||p.call(m,t.messages),g.track("agent-chat",{event:"disconnect",chatId:(w=t.chat)==null?void 0:w.id,agentId:d.id})},async chat(c,o=!1){var m,p;try{const w=Date.now();if(c.length===0)throw new Error("Message cannot be empty");if(!t.chat)throw new Error("Chat is not initialized");if(!t.streamingManager)throw new Error("Streaming manager is not initialized");t.messages.push({id:O(),role:"user",content:c,created_at:new Date(w).toISOString()});const s=await u.chat(d.id,t.chat.id,{sessionId:t.streamingManager.sessionId,streamId:t.streamingManager.streamId,messages:t.messages,append_chat:o});return g.track("agent-message-send",{event:"success",messages:t.messages.length+1}),t.messages.push({id:O(),role:"assistant",content:s.result??"",created_at:new Date().toISOString(),matches:s.matches}),s.result&&g.track("agent-message-received",{latency:Date.now()-w,messages:t.messages.length}),(p=(m=a.callbacks).onNewMessage)==null||p.call(m,t.messages),s}catch(w){throw g.track("agent-message-send",{event:"error",messages:t.messages.length}),w}},rate(c,o,m){var s,f,k,l;const p=t.messages.find(I=>I.id===c);if(t.chat){if(!p)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const w=((s=p.matches)==null?void 0:s.map(I=>[I.document_id,I.id]))??[];return g.track("agent-rate",{event:m?"update":"create",thumb:o===1?"up":"down",knowledge_id:((f=d.knowledge)==null?void 0:f.id)??"",matches:w,score:o}),m?v.update(m,{agent_id:d.id,knowledge_id:((k=d.knowledge)==null?void 0:k.id)??"",chat_id:t.chat.id,message_id:c,matches:w,score:o}):v.create({agent_id:d.id,knowledge_id:((l=d.knowledge)==null?void 0:l.id)??"",chat_id:t.chat.id,message_id:c,matches:w,score:o})},deleteRate(c){var o;return g.track("agent-rate-delete",{type:"text",chat_id:(o=t.chat)==null?void 0:o.id,id:c}),v.delete(c)},speak(c){if(!t.streamingManager)throw new Error("Streaming manager is not initialized");function o(){if(c.type==="text")return{type:"text",provider:c.provider?c.provider:d.presenter.voice,input:c.input,ssml:c.ssml||!1};if(c.type==="audio")return{type:"audio",audio_url:c.audio_url};throw new Error("Invalid payload")}const m=o();return g.track("agent-speak",m),t.streamingManager.speak({script:m})}}}C.ChatMode=U,C.DocumentType=F,C.KnowledgeType=B,C.PlanGroup=H,C.Providers=A,C.RateState=j,C.Subject=z,C.UserPlan=W,C.VoiceAccess=D,C.createAgentManager=ke,C.getAgent=Ce,Object.defineProperty(C,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(v,$){typeof exports=="object"&&typeof module<"u"?$(exports):typeof define=="function"&&define.amd?define(["exports"],$):(v=typeof globalThis<"u"?globalThis:v||self,$(v.index={}))})(this,function(v){"use strict";var $=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))($||{}),D=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(D||{}),P=(e=>(e.Start="START",e.Stop="STOP",e))(P||{}),I=(e=>(e.ChatAnswer="chat/answer",e.ChatPartial="chat/partial",e.StreamDone="stream/done",e.StreamStarted="stream/started",e.StreamFailed="stream/error",e.StreamReady="stream/ready",e.StreamCreated="stream/created",e.StreamVideoCreated="stream-video/started",e.StreamVideoDone="stream-video/done",e.StreamVideoError="stream-video/error",e.StreamVideoRejected="stream-video/rejected",e))(I||{}),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||{}),W=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(W||{}),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||{}),U=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e))(U||{}),b=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(b||{}),z=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(z||{}),B=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(B||{}),F=(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))(F||{}),T=(e=>(e.Clip="clip",e.Talk="talk",e))(T||{});const R="https://api.d-id.com",G="wss://notifications.d-id.com",ee="79f81a83a67430be2bc0fd61042b8faa",N=()=>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=N();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,a=R){const t=async(n,r)=>{const i=await fetch(a+(n!=null&&n.startsWith("/")?n:`/${n}`),{...r,headers:{...r==null?void 0:r.headers,Authorization:q(e),"Content-Type":"application/json"}});if(!i.ok){let m=await i.text().catch(()=>"Failed to fetch");throw new Error(m)}return i.json()};return{get(n,r){return t(n,{...r,method:"GET"})},post(n,r,i){return t(n,{...i,body:JSON.stringify(r),method:"POST"})},delete(n,r,i){return t(n,{...i,body:JSON.stringify(r),method:"DELETE"})},patch(n,r,i){return t(n,{...i,body:JSON.stringify(r),method:"PATCH"})}}}function J(e,a=R){const t=K(e,`${a}/agents`);return{create(n,r){return t.post("/",n,r)},getAgents(n,r){return t.get(`/${n?`?tag=${n}`:""}`,r).then(i=>i??[])},getById(n,r){return t.get(`/${n}`,r)},delete(n,r){return t.delete(`/${n}`,void 0,r)},update(n,r,i){return t.patch(`/${n}`,r,i)},newChat(n,r){return t.post(`/${n}/chat`,void 0,r)},chat(n,r,i,m){return t.post(`/${n}/chat/${r}`,i,m)}}}function ne(e,a=R){const t=K(e,`${a}/knowledge`);return{createKnowledge(n,r){return t.post("/",n,r)},getKnowledgeBase(n){return t.get("/",n)},getKnowledge(n,r){return t.get(`/${n}`,r)},deleteKnowledge(n,r){return t.delete(`/${n}`,void 0,r)},createDocument(n,r,i){return t.post(`/${n}/documents`,r,i)},deleteDocument(n,r,i){return t.delete(`/${n}/documents/${r}`,void 0,i)},getDocuments(n,r){return t.get(`/${n}/documents`,r)},getDocument(n,r,i){return t.get(`/${n}/documents/${r}`,i)},getRecords(n,r,i){return t.get(`/${n}/documents/${r}/records`,i)},query(n,r,i){return t.post(`/${n}/query`,{query:r},i)}}}function re(e,a=R){const t=K(e,`${a}/chats/ratings`);return{create(n,r){return t.post("/",n,r)},getByKnowledge(n,r){return t.get(`/${n}`,r).then(i=>i??[])},update(n,r,i){return t.patch(`/${n}`,r,i)},delete(n,r){return t.delete(`/${n}`,r)}}}const ie=e=>new Promise(a=>setTimeout(a,e));function ae(e){return new Promise((a,t)=>{const{callbacks:n,host:r,auth:i}=e,{onMessage:m=null,onOpen:f=null,onClose:S=null,onError:C=null}=n||{},o=new WebSocket(`${r}?authorization=${q(i)}`);o.onmessage=m,o.onclose=S,o.onerror=p=>{console.error(p),C==null||C("Websocket failed to connect",p),t(p)},o.onopen=p=>{f==null||f(p),a(o)}})}async function se(e){const{retries:a=1}=e;let t=null;for(let n=0;(t==null?void 0:t.readyState)!==WebSocket.OPEN;n++)try{t=await ae(e)}catch(r){if(n===a)throw r;await ie(n*500)}return t}async function Q(e,a,t){const n=t!=null&&t.onMessage?[t.onMessage]:[],r=await se({auth:e,host:a,callbacks:{onError:t==null?void 0:t.onError,onMessage:i=>{const m=JSON.parse(i.data);n.forEach(f=>f(m.event,m))}}});return{socket:r,disconnect:()=>r.close(),subscribeToEvents:i=>n.push(i)}}function oe(e,a){const t=K(e,a);return{createStream(n){return t.post("/clips/streams",{driver_id:n.driver_id,presenter_id:n.presenter_id,compatibility_mode:n.compatibility_mode,stream_warmup:n.stream_warmup})},startConnection(n,r,i){return t.post(`/clips/streams/${n}/sdp`,{session_id:i,answer:r})},addIceCandidate(n,r,i){return t.post(`/clips/streams/${n}/ice`,{session_id:i,...r})},sendStreamRequest(n,r,i){return t.post(`/clips/streams/${n}`,{session_id:r,...i})},close(n,r){return t.delete(`/clips/streams/${n}`,{session_id:r})}}}function de(e,a){const t=K(e,a);return{createStream(n,r){return t.post("/talks/streams",{source_url:n.source_url,driver_url:n.driver_url,face:n.face,config:n.config,stream_warmup:n.stream_warmup},r)},startConnection(n,r,i,m){return t.post(`/talks/streams/${n}/sdp`,{session_id:i,answer:r},m)},addIceCandidate(n,r,i,m){return t.post(`/talks/streams/${n}/ice`,{session_id:i,...r},m)},sendStreamRequest(n,r,i,m){return t.post(`/talks/streams/${n}`,{session_id:r,...i},m)},close(n,r,i){return t.delete(`/talks/streams/${n}`,{session_id:r},i)}}}function ce(e,a){return e.map((t,n)=>n===0?a?{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived-a.bytesReceived,packetsReceived:t.packetsReceived-a.packetsReceived,packetsLost:t.packetsLost-a.packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond}:{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived,packetsReceived:t.packetsReceived,packetsLost:t.packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond}:{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived-e[n-1].bytesReceived,packetsReceived:t.packetsReceived-e[n-1].packetsReceived,packetsLost:t.packetsLost-e[n-1].packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond})}let X=!1;const y=(e,a)=>X&&console.log(e,a),ge=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function ue(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 me(e,a){let t=[],n=0,r=0,i;return setInterval(()=>{e.getStats().then(f=>{f.forEach(S=>{if(S.type==="inbound-rtp"&&S.kind==="video"){if(r=t.length-1,S&&t[r]){const C=S.bytesReceived,o=t[r].bytesReceived;let p=i;i=C-o>0;let d;if(p!==i){if(i)n=t.length;else{const L=t.slice(n),E=n===0?void 0:t[n-1];d=ce(L,E),d=d.sort((k,h)=>h.packetsLost-k.packetsLost).slice(0,5)}a==null||a(i?P.Start:P.Stop,d)}}t.push(S)}})})},500)}async function le(e,{debug:a=!1,callbacks:t,auth:n,analytics:r,baseURL:i=R}){X=a;let m;const{startConnection:f,sendStreamRequest:S,close:C,createStream:o,addIceCandidate:p}=e.videoType===T.Clip?oe(n,i):de(n,i),{id:d,offer:L,ice_servers:E,session_id:k}=await o(e),h=new ge({iceServers:E}),c=h.createDataChannel("JanusDataChannel");if(!k)throw new Error("Could not create session_id");const l=me(h,t.onVideoStateChange);h.onicecandidate=s=>{y("peerConnection.onicecandidate",s),s.candidate&&s.candidate.sdpMid&&s.candidate.sdpMLineIndex!==null?p(d,{candidate:s.candidate.candidate,sdpMid:s.candidate.sdpMid,sdpMLineIndex:s.candidate.sdpMLineIndex},k):p(d,{candidate:null},k)},h.oniceconnectionstatechange=()=>{var u;y("peerConnection.oniceconnectionstatechange => "+h.iceConnectionState);const s=ue(h.iceConnectionState);s===M.Connected?m=setTimeout(()=>{var w;(w=t.onConnectionStateChange)==null||w.call(t,M.Connected)},5e3):(clearTimeout(m),(u=t.onConnectionStateChange)==null||u.call(t,s))},h.ontrack=s=>{var u;y("peerConnection.ontrack",s),(u=t.onSrcObjectReady)==null||u.call(t,s.streams[0])},c.onmessage=s=>{var u,w;if(c.readyState==="open"){const[_,A]=s.data.split(":");_===I.StreamStarted?r==null||r.track("agent-video",{event:"start",...s}):_===I.StreamDone?r==null||r.track("agent-video",{event:"stop",...s}):_===I.StreamFailed?((u=t.onVideoStateChange)==null||u.call(t,P.Stop,{event:_,data:A}),clearInterval(l)):_===I.StreamReady?(clearTimeout(m),(w=t.onConnectionStateChange)==null||w.call(t,M.Connected)):_===I.StreamCreated?r==null||r.track("agent-video",{event:"created",...s}):_===I.StreamVideoCreated?r==null||r.track("agent-video",{event:"video-created",...s}):_===I.StreamVideoDone?r==null||r.track("agent-video",{event:"video-done",...s}):_===I.StreamVideoError&&(r==null||r.track("agent-video",{event:"video-error",...s}))}},await h.setRemoteDescription(L),y("set remote description OK");const g=await h.createAnswer();return y("create answer OK"),await h.setLocalDescription(g),y("set local description OK"),await f(d,g,k),y("start connection OK"),{speak(s){return S(d,k,s)},async disconnect(){var s,u;d&&(h&&(h.close(),h.oniceconnectionstatechange=null,h.onnegotiationneeded=null,h.onicecandidate=null,h.ontrack=null),await C(d,k).catch(w=>{}),(s=t.onConnectionStateChange)==null||s.call(t,M.New),(u=t.onVideoStateChange)==null||u.call(t,P.Stop),clearInterval(l))},sessionId:k,streamId:d}}function we(e){const a={mixPanelKey:e.mixPanelKey||"testKey",distinct_id:e.distinctId||V(),isEnabled:e.isEnabled??!0,agentId:e.agent.id,owner_id:e.agent.owner_id??""};return{...a,getRandom:()=>Math.random().toString(16).slice(2),track(t,n){if(!this.isEnabled)return Promise.reject("MixPanel analytics is disabled on creation");const r={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:t,properties:{...n,...a,time:Date.now(),$insert_id:this.getRandom(),origin:window.location.href,"Screen Height":window.screen.height||window.innerWidth,"Screen Width":window.screen.width||window.innerHeight,"User Agent":navigator.userAgent}}])})};return fetch("https://api-js.mixpanel.com/track/?verbose=1&ip=1",r).then(i=>i.json()).catch(i=>console.error(i))}}}function he(e){var n,r;const a=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop";return{$os:`${(()=>{const i=navigator.platform;return i.toLowerCase().includes("win")?"Windows":i.toLowerCase().includes("mac")?"Mac OS X":i.toLowerCase().includes("linux")?"Linux":"Unknown"})()}`,isMobile:`${a()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:e.presenter.type,agentVoice:{voiceId:(n=e.presenter.voice)==null?void 0:n.voice_id,provider:(r=e.presenter.voice)==null?void 0:r.type}}}function fe(e,a){var t;return(t=e.knowledge)!=null&&t.id?a.getKnowledge(e.knowledge.id).then(n=>(n==null?void 0:n.starter_message)||[]):[]}function pe(e){return e.presenter.type===T.Clip?{videoType:T.Clip,driver_id:e.presenter.driver_id,presenter_id:e.presenter.presenter_id,stream_warmup:!0}:{videoType:T.Talk,source_url:e.presenter.source_url,stream_warmup:!0}}function Y(e,a,t,n,r){return new Promise(async(i,m)=>{let f=r;const S=await le(pe(e),{...a,callbacks:{...a.callbacks,onConnectionStateChange:async C=>{var o,p;if(C===M.Connected)try{f||(f=await t.newChat(e.id),n.track("agent-chat",{event:"created",chat_id:f.id,agent_id:e.id})),S&&i({chat:f,streamingManager:S})}catch(d){console.error(d),m("Cannot create new chat")}else C===M.Fail&&m(new Error("Cannot create connection"));(p=(o=a.callbacks).onConnectionStateChange)==null||p.call(o,C)},onVideoStateChange(C,o){var p,d;n.track("agent-video",{event:C,rtc_stats:o??[]}),(d=(p=a.callbacks).onVideoStateChange)==null||d.call(p,C,o)}}}).catch(m)})}function ve(e,a,t){return J(a,t||R).getById(e)}function O(e){let a="";if(e.greetings&&e.greetings.length>0){const t=Math.floor(Math.random()*e.greetings.length);a=e.greetings[t]}else a=`Hi! I'm ${e.preview_name}, welcome to agents. How can I help you?`;return[{content:a,id:N(),role:"assistant",created_at:new Date().toISOString()}]}async function Se(e,a){var k,h;const t={messages:[]};let n=-1;const r=a.wsURL||G,i=a.baseURL||R,m=a.mixpanelKey||ee,f=J(a.auth,i),S=re(a.auth,i),C=ne(a.auth,i),o=await f.getById(e),p=await fe(o,C);t.messages=O(o),(h=(k=a.callbacks).onNewMessage)==null||h.call(k,t.messages);const d=we({mixPanelKey:m,agent:o,...a});d.track("agent-sdk",{event:"loaded",...he(o)});const L={onMessage:(c,l)=>{var g,s;if("content"in l){const{content:u}=l,w=t.messages[t.messages.length-1];(w==null?void 0:w.role)==="assistant"&&(n<t.messages.length&&(w.content=c===b.Partial?w.content+u:u),c===b.Answer&&(n=t.messages.length)),c===b.Complete&&d.track("agent-message-received",{messages:t.messages.length}),(s=(g=a.callbacks).onNewMessage)==null||s.call(g,t.messages)}}};async function E(){var s,u,w,_,A;const c=await Q(a.auth,r,L),{streamingManager:l,chat:g}=await Y(o,a,f,d,t.chat);n=-1,t.messages=O(o),(u=(s=a.callbacks).onNewMessage)==null||u.call(s,t.messages),g!=null&&g.id&&g.id!==((w=t.chat)==null?void 0:w.id)&&((A=(_=a.callbacks).onNewChat)==null||A.call(_,g==null?void 0:g.id)),t.streamingManager=l,t.socketManager=c,t.chat=g,d.track("agent-chat",{event:"connect",chatId:g.id,agentId:o.id})}return{agent:o,starterMessages:p,connect:E,async reconnect(){if(!t.chat)return E();const c=await Q(a.auth,r,L),{streamingManager:l,chat:g}=await Y(o,a,f,d,t.chat);t.streamingManager=l,t.socketManager=c,d.track("agent-chat",{event:"reconnect",chatId:g.id,agentId:o.id})},async disconnect(){var c,l,g,s,u;(c=t.socketManager)==null||c.disconnect(),await((l=t.streamingManager)==null?void 0:l.disconnect()),t.messages=O(o),(s=(g=a.callbacks).onNewMessage)==null||s.call(g,t.messages),d.track("agent-chat",{event:"disconnect",chatId:(u=t.chat)==null?void 0:u.id,agentId:o.id})},async chat(c,l=!1){var g,s;try{const u=Date.now();if(c.length===0)throw new Error("Message cannot be empty");if(!t.chat)throw new Error("Chat is not initialized");if(!t.streamingManager)throw new Error("Streaming manager is not initialized");t.messages.push({id:N(),role:"user",content:c,created_at:new Date(u).toISOString()});const w=await f.chat(o.id,t.chat.id,{sessionId:t.streamingManager.sessionId,streamId:t.streamingManager.streamId,messages:t.messages,append_chat:l});return d.track("agent-message-send",{event:"success",messages:t.messages.length+1}),t.messages.push({id:N(),role:"assistant",content:w.result??"",created_at:new Date().toISOString(),matches:w.matches}),w.result&&d.track("agent-message-received",{latency:Date.now()-u,messages:t.messages.length}),(s=(g=a.callbacks).onNewMessage)==null||s.call(g,t.messages),w}catch(u){throw d.track("agent-message-send",{event:"error",messages:t.messages.length}),u}},rate(c,l,g){var w,_,A,Z;const s=t.messages.find(x=>x.id===c);if(t.chat){if(!s)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const u=((w=s.matches)==null?void 0:w.map(x=>[x.document_id,x.id]))??[];return d.track("agent-rate",{event:g?"update":"create",thumb:l===1?"up":"down",knowledge_id:((_=o.knowledge)==null?void 0:_.id)??"",matches:u,score:l}),g?S.update(g,{agent_id:o.id,knowledge_id:((A=o.knowledge)==null?void 0:A.id)??"",chat_id:t.chat.id,message_id:c,matches:u,score:l}):S.create({agent_id:o.id,knowledge_id:((Z=o.knowledge)==null?void 0:Z.id)??"",chat_id:t.chat.id,message_id:c,matches:u,score:l})},deleteRate(c){var l;return d.track("agent-rate-delete",{type:"text",chat_id:(l=t.chat)==null?void 0:l.id,id:c}),S.delete(c)},speak(c){if(!t.streamingManager)throw new Error("Streaming manager is not initialized");function l(){if(c.type==="text")return{type:"text",provider:c.provider?c.provider:o.presenter.voice,input:c.input,ssml:c.ssml||!1};if(c.type==="audio")return{type:"audio",audio_url:c.audio_url};throw new Error("Invalid payload")}const g=l();return d.track("agent-speak",g),t.streamingManager.speak({script:g})}}}v.ChatMode=U,v.DocumentType=F,v.KnowledgeType=B,v.PlanGroup=H,v.Providers=$,v.RateState=j,v.Subject=z,v.UserPlan=W,v.VoiceAccess=D,v.createAgentManager=Se,v.getAgent=ve,Object.defineProperty(v,Symbol.toStringTag,{value:"Module"})});
|
|
@@ -38,7 +38,6 @@ export interface Agent {
|
|
|
38
38
|
preview_thumbnail?: string;
|
|
39
39
|
preview_url?: string;
|
|
40
40
|
owner_id?: string;
|
|
41
|
-
source_url?: string;
|
|
42
41
|
}
|
|
43
42
|
export type AgentPayload = Omit<Agent, 'type' | 'created_at' | 'modified_at' | 'id' | 'owner_id' | 'metadata' | 'idle_video_url'>;
|
|
44
43
|
export interface AgentsAPI {
|
|
@@ -43,6 +43,12 @@ export interface CreateClipStreamRequest {
|
|
|
43
43
|
* @default auto
|
|
44
44
|
*/
|
|
45
45
|
compatibility_mode?: CompatibilityMode;
|
|
46
|
+
/**
|
|
47
|
+
* Whether to stream wamrup video on the connection.
|
|
48
|
+
* If set to true, will stream a warmup video when connection is established.
|
|
49
|
+
* At the end of the warmup video, a message containing "stream/ready" will be sent on the data channel.
|
|
50
|
+
*/
|
|
51
|
+
stream_warmup?: boolean;
|
|
46
52
|
}
|
|
47
53
|
export interface SendClipStreamPayload extends StickyRequest {
|
|
48
54
|
script: StreamScript;
|