@d-id/client-sdk 1.0.19-beta.97 → 1.0.19-beta.98
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 || {}), k = /* @__PURE__ */ ((e) => (e.Functional = "Functional", e.TextOnly = "TextOnly", e.Maintenance = "Maintenance", e.Playground = "Playground", e))(k || {}), 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 || {}), y = /* @__PURE__ */ ((e) => (e.Clip = "clip", e.Talk = "talk", e))(y || {}), N = /* @__PURE__ */ ((e) => (e.Start = "START", e.Stop = "STOP", e))(N || {}), $ = /* @__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))($ || {}), S = /* @__PURE__ */ ((e) => (e[e.New = 0] = "New", e[e.Fail = 1] = "Fail", e[e.Connected = 2] = "Connected", e[e.Connecting = 3] = "Connecting", e[e.Terminating = 4] = "Terminating", e))(S || {}), 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(M),
|
|
120
|
-
},
|
|
121
|
-
o == null || o(M), i(
|
|
116
|
+
onError: h = null
|
|
117
|
+
} = a || {}, v = new WebSocket(`${r}?authorization=${Q(n)}`);
|
|
118
|
+
v.onmessage = s, v.onclose = c, v.onerror = (M) => {
|
|
119
|
+
console.error(M), h == null || h("Websocket failed to connect", M), t(M);
|
|
120
|
+
}, v.onopen = (M) => {
|
|
121
|
+
o == null || o(M), i(v);
|
|
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) {
|
|
@@ -164,39 +164,39 @@ function me(e, i, t, a) {
|
|
|
164
164
|
presenter_id: n.presenter_id,
|
|
165
165
|
compatibility_mode: n.compatibility_mode,
|
|
166
166
|
stream_warmup: n.stream_warmup,
|
|
167
|
-
type:
|
|
167
|
+
type: y.Clip
|
|
168
168
|
});
|
|
169
169
|
},
|
|
170
170
|
startConnection(n, s, o) {
|
|
171
171
|
return r.post(`/streams/${n}/sdp`, {
|
|
172
172
|
session_id: o,
|
|
173
173
|
answer: s,
|
|
174
|
-
type:
|
|
174
|
+
type: y.Clip
|
|
175
175
|
});
|
|
176
176
|
},
|
|
177
177
|
addIceCandidate(n, s, o) {
|
|
178
178
|
return r.post(`/streams/${n}/ice`, {
|
|
179
179
|
session_id: o,
|
|
180
180
|
...s,
|
|
181
|
-
type:
|
|
181
|
+
type: y.Clip
|
|
182
182
|
});
|
|
183
183
|
},
|
|
184
184
|
sendStreamRequest(n, s, o) {
|
|
185
185
|
return r.post(`/streams/${n}`, {
|
|
186
186
|
session_id: s,
|
|
187
187
|
...o,
|
|
188
|
-
type:
|
|
188
|
+
type: y.Clip
|
|
189
189
|
});
|
|
190
190
|
},
|
|
191
191
|
close(n, s) {
|
|
192
192
|
return r.delete(`/streams/${n}`, {
|
|
193
193
|
session_id: s,
|
|
194
|
-
type:
|
|
194
|
+
type: y.Clip
|
|
195
195
|
});
|
|
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) {
|
|
@@ -208,41 +208,41 @@ function he(e, i, t, a) {
|
|
|
208
208
|
compatibility_mode: n.compatibility_mode,
|
|
209
209
|
stream_warmup: n.stream_warmup,
|
|
210
210
|
output_resolution: n.output_resolution,
|
|
211
|
-
type:
|
|
211
|
+
type: y.Talk
|
|
212
212
|
}, s);
|
|
213
213
|
},
|
|
214
214
|
startConnection(n, s, o, c) {
|
|
215
215
|
return r.post(`/streams/${n}/sdp`, {
|
|
216
216
|
session_id: o,
|
|
217
217
|
answer: s,
|
|
218
|
-
type:
|
|
218
|
+
type: y.Talk
|
|
219
219
|
}, c);
|
|
220
220
|
},
|
|
221
221
|
addIceCandidate(n, s, o, c) {
|
|
222
222
|
return r.post(`/streams/${n}/ice`, {
|
|
223
223
|
session_id: o,
|
|
224
224
|
...s,
|
|
225
|
-
type:
|
|
225
|
+
type: y.Talk
|
|
226
226
|
}, c);
|
|
227
227
|
},
|
|
228
228
|
sendStreamRequest(n, s, o, c) {
|
|
229
229
|
return r.post(`/streams/${n}`, {
|
|
230
230
|
session_id: s,
|
|
231
231
|
...o,
|
|
232
|
-
type:
|
|
232
|
+
type: y.Talk
|
|
233
233
|
}, c);
|
|
234
234
|
},
|
|
235
235
|
close(n, s, o) {
|
|
236
236
|
return r.delete(`/streams/${n}`, {
|
|
237
237
|
session_id: s,
|
|
238
|
-
type:
|
|
238
|
+
type: y.Talk
|
|
239
239
|
}, o);
|
|
240
240
|
}
|
|
241
241
|
};
|
|
242
242
|
}
|
|
243
|
-
let
|
|
244
|
-
const R = (e, i) =>
|
|
245
|
-
function
|
|
243
|
+
let Y = !1;
|
|
244
|
+
const R = (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
248
|
return S.Connected;
|
|
@@ -257,7 +257,7 @@ function q(e) {
|
|
|
257
257
|
return S.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,41 +268,41 @@ 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:
|
|
291
|
+
sendStreamRequest: h,
|
|
292
|
+
close: v,
|
|
293
293
|
createStream: M,
|
|
294
294
|
addIceCandidate: E
|
|
295
|
-
} = i.videoType ===
|
|
295
|
+
} = i.videoType === y.Clip ? ue(r, s, e, a.onError) : me(r, s, e, a.onError), {
|
|
296
296
|
id: _,
|
|
297
297
|
offer: K,
|
|
298
298
|
ice_servers: P,
|
|
299
299
|
session_id: I
|
|
300
|
-
} = await M(i), f = new
|
|
300
|
+
} = await M(i), f = new he({
|
|
301
301
|
iceServers: P
|
|
302
302
|
}), d = f.createDataChannel("JanusDataChannel");
|
|
303
303
|
if (!I)
|
|
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
|
R("peerConnection.onicecandidate", g), g.candidate && g.candidate.sdpMid && g.candidate.sdpMLineIndex !== null ? E(_, {
|
|
308
308
|
candidate: g.candidate.candidate,
|
|
@@ -312,21 +312,21 @@ async function Me(e, i, {
|
|
|
312
312
|
candidate: null
|
|
313
313
|
}, I);
|
|
314
314
|
}, f.oniceconnectionstatechange = () => {
|
|
315
|
-
var
|
|
315
|
+
var m;
|
|
316
316
|
R("peerConnection.oniceconnectionstatechange => " + f.iceConnectionState);
|
|
317
|
-
const g =
|
|
317
|
+
const g = j(f.iceConnectionState);
|
|
318
318
|
g === S.Connected ? o = setTimeout(() => {
|
|
319
319
|
var w;
|
|
320
320
|
(w = a.onConnectionStateChange) == null || w.call(a, S.Connected);
|
|
321
|
-
}, 5e3) : (clearTimeout(o), (
|
|
321
|
+
}, 5e3) : (clearTimeout(o), (m = a.onConnectionStateChange) == null || m.call(a, g));
|
|
322
322
|
}, f.ontrack = (g) => {
|
|
323
|
-
var
|
|
324
|
-
R("peerConnection.ontrack", g), (
|
|
323
|
+
var m;
|
|
324
|
+
R("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 === $.StreamReady && (clearTimeout(o), (
|
|
329
|
+
w === $.StreamReady && (clearTimeout(o), (m = a.onConnectionStateChange) == null || m.call(a, S.Connected));
|
|
330
330
|
}
|
|
331
331
|
}, await f.setRemoteDescription(K), R("set remote description OK");
|
|
332
332
|
const l = await f.createAnswer();
|
|
@@ -336,28 +336,28 @@ async function Me(e, i, {
|
|
|
336
336
|
* @param payload
|
|
337
337
|
*/
|
|
338
338
|
speak(g) {
|
|
339
|
-
return
|
|
339
|
+
return h(_, I, g);
|
|
340
340
|
},
|
|
341
341
|
/**
|
|
342
342
|
* Method to close RTC connection
|
|
343
343
|
*/
|
|
344
344
|
async disconnect() {
|
|
345
|
-
var g,
|
|
345
|
+
var g, m, w;
|
|
346
346
|
if (_) {
|
|
347
347
|
if (f) {
|
|
348
|
-
if (
|
|
349
|
-
(g = a.onVideoStateChange) == null || g.call(a, N.Stop), clearInterval(
|
|
348
|
+
if (j(f.iceConnectionState) === S.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 v(_, I).catch((p) => {
|
|
356
356
|
});
|
|
357
357
|
} catch (p) {
|
|
358
358
|
R("Error on close stream connection", p);
|
|
359
359
|
}
|
|
360
|
-
(
|
|
360
|
+
(m = a.onConnectionStateChange) == null || m.call(a, S.New), (w = a.onVideoStateChange) == null || w.call(a, N.Stop), clearInterval(u);
|
|
361
361
|
}
|
|
362
362
|
},
|
|
363
363
|
/**
|
|
@@ -370,33 +370,32 @@ async function Me(e, i, {
|
|
|
370
370
|
streamId: _
|
|
371
371
|
};
|
|
372
372
|
}
|
|
373
|
-
function
|
|
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 = {
|
|
373
|
+
function Me(e) {
|
|
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,7 +406,7 @@ 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
|
}
|
|
@@ -429,21 +428,21 @@ function ve(e) {
|
|
|
429
428
|
}
|
|
430
429
|
};
|
|
431
430
|
}
|
|
432
|
-
const
|
|
433
|
-
function
|
|
431
|
+
const ye = 1080;
|
|
432
|
+
function Ce(e, i) {
|
|
434
433
|
if (e.presenter) {
|
|
435
|
-
if (e.presenter.type ===
|
|
434
|
+
if (e.presenter.type === y.Clip)
|
|
436
435
|
return {
|
|
437
|
-
videoType:
|
|
436
|
+
videoType: y.Clip,
|
|
438
437
|
driver_id: e.presenter.driver_id,
|
|
439
438
|
presenter_id: e.presenter.presenter_id,
|
|
440
439
|
stream_warmup: !0
|
|
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 ? ye : void 0);
|
|
445
444
|
return {
|
|
446
|
-
videoType:
|
|
445
|
+
videoType: y.Talk,
|
|
447
446
|
source_url: e.presenter.source_url,
|
|
448
447
|
stream_warmup: !0,
|
|
449
448
|
...t && {
|
|
@@ -454,14 +453,14 @@ 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 v, M;
|
|
463
|
+
if (h === S.Connected)
|
|
465
464
|
try {
|
|
466
465
|
o || (o = await t.newChat(e.id), a.track("agent-chat", {
|
|
467
466
|
event: "created",
|
|
@@ -475,19 +474,19 @@ function U(e, i, t, a, r) {
|
|
|
475
474
|
console.error(E), s("Cannot create new chat");
|
|
476
475
|
}
|
|
477
476
|
else
|
|
478
|
-
|
|
479
|
-
(M = (
|
|
477
|
+
h === S.Fail && s(new Error("Cannot create connection"));
|
|
478
|
+
(M = (v = i.callbacks).onConnectionStateChange) == null || M.call(v, h);
|
|
480
479
|
},
|
|
481
|
-
onVideoStateChange(
|
|
482
|
-
var
|
|
483
|
-
(M = (
|
|
480
|
+
onVideoStateChange(h) {
|
|
481
|
+
var v, M;
|
|
482
|
+
(M = (v = i.callbacks).onVideoStateChange) == null || M.call(v, h);
|
|
484
483
|
}
|
|
485
484
|
}
|
|
486
485
|
}).catch(s);
|
|
487
486
|
});
|
|
488
487
|
}
|
|
489
|
-
function
|
|
490
|
-
return
|
|
488
|
+
function _e(e, i, t) {
|
|
489
|
+
return X(i, t || L).getById(e);
|
|
491
490
|
}
|
|
492
491
|
function B(e) {
|
|
493
492
|
let i = "";
|
|
@@ -503,88 +502,86 @@ function B(e) {
|
|
|
503
502
|
created_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
504
503
|
}];
|
|
505
504
|
}
|
|
506
|
-
async function
|
|
505
|
+
async function Se(e, i) {
|
|
507
506
|
var P, I, f;
|
|
508
507
|
const t = {
|
|
509
508
|
messages: [],
|
|
510
509
|
chatMode: i.mode || k.Functional
|
|
511
510
|
};
|
|
512
511
|
let a = -1;
|
|
513
|
-
const r = i.wsURL ||
|
|
512
|
+
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);
|
|
514
513
|
t.messages = B(c), (I = (P = i.callbacks).onNewMessage) == null || I.call(P, t.messages);
|
|
515
|
-
const
|
|
514
|
+
const h = Me({
|
|
516
515
|
token: s,
|
|
517
516
|
agent: c,
|
|
518
517
|
...i
|
|
519
518
|
});
|
|
520
|
-
|
|
519
|
+
h.track("agent-sdk", {
|
|
521
520
|
event: "loaded",
|
|
522
521
|
...ve(c)
|
|
523
522
|
});
|
|
524
|
-
const
|
|
525
|
-
onMessage: (d,
|
|
526
|
-
var l, g,
|
|
527
|
-
if ("content" in
|
|
523
|
+
const v = {
|
|
524
|
+
onMessage: (d, u) => {
|
|
525
|
+
var l, g, m, w;
|
|
526
|
+
if ("content" in u) {
|
|
528
527
|
const {
|
|
529
528
|
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 &&
|
|
529
|
+
} = u, C = t.messages[t.messages.length - 1];
|
|
530
|
+
(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
531
|
messages: t.messages.length
|
|
533
532
|
}), (g = (l = i.callbacks).onNewMessage) == null || g.call(l, t.messages);
|
|
534
533
|
} else {
|
|
535
534
|
if ([$.StreamVideoCreated, $.StreamVideoDone, $.StreamVideoError, $.StreamVideoRejected].includes(d)) {
|
|
536
535
|
const p = d.split("/")[1];
|
|
537
|
-
|
|
538
|
-
...
|
|
536
|
+
h.track("agent-video", {
|
|
537
|
+
...u,
|
|
539
538
|
event: p
|
|
540
539
|
});
|
|
541
540
|
}
|
|
542
|
-
[$.StreamFailed, $.StreamVideoError, $.StreamVideoRejected].includes(d) && ((w = (
|
|
543
|
-
data:
|
|
541
|
+
[$.StreamFailed, $.StreamVideoError, $.StreamVideoRejected].includes(d) && ((w = (m = i.callbacks).onError) == null || w.call(m, new Error(`Stream failed with event ${d}`), {
|
|
542
|
+
data: u
|
|
544
543
|
}));
|
|
545
544
|
}
|
|
546
545
|
}
|
|
547
546
|
};
|
|
548
547
|
async function M() {
|
|
549
|
-
var
|
|
550
|
-
const d = await
|
|
551
|
-
streamingManager:
|
|
548
|
+
var m, w, p, C, A;
|
|
549
|
+
const d = await J(i.auth, r, v), {
|
|
550
|
+
streamingManager: u,
|
|
552
551
|
chat: l
|
|
553
|
-
} = await U(c, i, o,
|
|
554
|
-
a = -1, t.messages.length === 0 && (t.messages = B(c), (w = (
|
|
552
|
+
} = await U(c, i, o, h, t.chat);
|
|
553
|
+
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) && ((A = (C = i.callbacks).onNewChat) == null || A.call(C, l == null ? void 0 : l.id)), t.streamingManager = u, t.socketManager = d, t.chat = l;
|
|
555
554
|
const g = t.chat.chatMode || k.Functional;
|
|
556
|
-
_(g),
|
|
555
|
+
_(g), h.track("agent-chat", {
|
|
557
556
|
event: "connect",
|
|
558
557
|
chatId: l.id,
|
|
559
558
|
agentId: c.id
|
|
560
559
|
});
|
|
561
560
|
}
|
|
562
561
|
async function E() {
|
|
563
|
-
var d,
|
|
564
|
-
(d = t.socketManager) == null || d.disconnect(), await ((
|
|
562
|
+
var d, u, l, g, m;
|
|
563
|
+
(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
564
|
event: "disconnect",
|
|
566
|
-
chatId: (
|
|
565
|
+
chatId: (m = t.chat) == null ? void 0 : m.id,
|
|
567
566
|
agentId: c.id
|
|
568
567
|
});
|
|
569
568
|
}
|
|
570
569
|
async function _(d) {
|
|
571
|
-
var
|
|
572
|
-
d !== t.chatMode && (
|
|
570
|
+
var u, l;
|
|
571
|
+
d !== t.chatMode && (h.track("agent-mode-change", {
|
|
573
572
|
mode: d
|
|
574
|
-
}), t.chatMode = d, t.chatMode !== k.Functional && await E(), (l = (
|
|
573
|
+
}), t.chatMode = d, t.chatMode !== k.Functional && await E(), (l = (u = i.callbacks).onModeChange) == null || l.call(u, d));
|
|
575
574
|
}
|
|
576
575
|
async function K() {
|
|
577
576
|
if (!t.chat)
|
|
578
577
|
return M();
|
|
579
578
|
const {
|
|
580
579
|
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", {
|
|
580
|
+
chat: u
|
|
581
|
+
} = await U(c, i, o, h, t.chat);
|
|
582
|
+
t.streamingManager = d, _(t.chat.chatMode || k.Functional), h.track("agent-chat", {
|
|
586
583
|
event: "reconnect",
|
|
587
|
-
chatId:
|
|
584
|
+
chatId: u.id,
|
|
588
585
|
agentId: c.id
|
|
589
586
|
});
|
|
590
587
|
}
|
|
@@ -595,25 +592,25 @@ async function Ie(e, i) {
|
|
|
595
592
|
disconnect: E,
|
|
596
593
|
changeMode: _,
|
|
597
594
|
async reconnect() {
|
|
598
|
-
var
|
|
595
|
+
var m, w;
|
|
599
596
|
if (!t.chat)
|
|
600
597
|
return M();
|
|
601
|
-
(
|
|
602
|
-
const d = await
|
|
603
|
-
streamingManager:
|
|
598
|
+
(m = t.socketManager) == null || m.disconnect(), await ((w = t.streamingManager) == null ? void 0 : w.disconnect());
|
|
599
|
+
const d = await J(i.auth, r, v), {
|
|
600
|
+
streamingManager: u,
|
|
604
601
|
chat: l
|
|
605
|
-
} = await U(c, i, o,
|
|
606
|
-
t.streamingManager =
|
|
602
|
+
} = await U(c, i, o, h, t.chat);
|
|
603
|
+
t.streamingManager = u, t.socketManager = d;
|
|
607
604
|
const g = t.chat.chatMode || k.Functional;
|
|
608
|
-
_(g),
|
|
605
|
+
_(g), h.track("agent-chat", {
|
|
609
606
|
event: "reconnect",
|
|
610
607
|
chatId: l.id,
|
|
611
608
|
agentId: c.id
|
|
612
609
|
});
|
|
613
610
|
},
|
|
614
|
-
async chat(d
|
|
615
|
-
var g,
|
|
616
|
-
const
|
|
611
|
+
async chat(d) {
|
|
612
|
+
var l, g, m, w, p, C, A, x, W;
|
|
613
|
+
const u = F();
|
|
617
614
|
try {
|
|
618
615
|
const O = Date.now();
|
|
619
616
|
if (d.length >= 800)
|
|
@@ -622,63 +619,61 @@ async function Ie(e, i) {
|
|
|
622
619
|
throw new Error("Message cannot be empty");
|
|
623
620
|
if (t.chatMode === k.Maintenance)
|
|
624
621
|
throw new Error("Chat is in maintenance mode");
|
|
625
|
-
if (![k.TextOnly, k.Playground].includes(t.chatMode))
|
|
626
|
-
if (
|
|
622
|
+
if (![k.TextOnly, k.Playground].includes(t.chatMode))
|
|
623
|
+
if (t.streamingManager) {
|
|
624
|
+
if (!t.chat)
|
|
625
|
+
throw new Error("Chat is not initialized");
|
|
626
|
+
} else
|
|
627
627
|
throw new Error("Streaming manager is not initialized");
|
|
628
|
-
if (!t.chat)
|
|
629
|
-
throw new Error("Chat is not initialized");
|
|
630
|
-
}
|
|
631
628
|
t.messages.push({
|
|
632
629
|
id: F(),
|
|
633
630
|
role: "user",
|
|
634
631
|
content: d,
|
|
635
632
|
created_at: new Date(O).toISOString()
|
|
636
|
-
}), (
|
|
633
|
+
}), (g = (l = i.callbacks).onNewMessage) == null || g.call(l, t.messages), t.chat || (t.chat = await o.newChat(c.id));
|
|
637
634
|
const b = {
|
|
638
|
-
id:
|
|
635
|
+
id: u,
|
|
639
636
|
role: "assistant",
|
|
640
637
|
content: "",
|
|
641
638
|
created_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
642
639
|
matches: []
|
|
643
640
|
};
|
|
644
641
|
t.messages.push(b);
|
|
645
|
-
const
|
|
642
|
+
const H = t.messages.slice(0, -1);
|
|
646
643
|
let T;
|
|
647
644
|
try {
|
|
648
645
|
T = await o.chat(c.id, t.chat.id, {
|
|
649
|
-
sessionId: (
|
|
650
|
-
streamId: (
|
|
651
|
-
messages:
|
|
652
|
-
chatMode: t.chatMode
|
|
653
|
-
append_chat: m
|
|
646
|
+
sessionId: (m = t.streamingManager) == null ? void 0 : m.sessionId,
|
|
647
|
+
streamId: (w = t.streamingManager) == null ? void 0 : w.streamId,
|
|
648
|
+
messages: H,
|
|
649
|
+
chatMode: t.chatMode
|
|
654
650
|
});
|
|
655
651
|
} catch (z) {
|
|
656
|
-
if ((
|
|
652
|
+
if ((p = z == null ? void 0 : z.message) != null && p.includes("missing or invalid session_id"))
|
|
657
653
|
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
|
|
654
|
+
sessionId: (C = t.streamingManager) == null ? void 0 : C.sessionId,
|
|
655
|
+
streamId: (A = t.streamingManager) == null ? void 0 : A.streamId,
|
|
656
|
+
messages: H,
|
|
657
|
+
chatMode: t.chatMode
|
|
663
658
|
});
|
|
664
659
|
else
|
|
665
660
|
throw z;
|
|
666
661
|
}
|
|
667
|
-
return
|
|
662
|
+
return h.track("agent-message-send", {
|
|
668
663
|
event: "success",
|
|
669
664
|
messages: t.messages.length + 1
|
|
670
|
-
}), b.context = T.context, T.result && (b.content = T.result, b.matches = T.matches,
|
|
665
|
+
}), b.context = T.context, T.result && (b.content = T.result, b.matches = T.matches, h.track("agent-message-received", {
|
|
671
666
|
latency: Date.now() - O,
|
|
672
667
|
messages: t.messages.length
|
|
673
|
-
}), (
|
|
668
|
+
}), (W = (x = i.callbacks).onNewMessage) == null || W.call(x, t.messages)), T;
|
|
674
669
|
} catch (O) {
|
|
675
|
-
throw t.messages[t.messages.length - 1].id ===
|
|
670
|
+
throw t.messages[t.messages.length - 1].id === u && t.messages.pop(), h.track("agent-message-send", {
|
|
676
671
|
event: "error",
|
|
677
672
|
messages: t.messages.length
|
|
678
673
|
}), O;
|
|
679
674
|
}
|
|
680
675
|
},
|
|
681
|
-
rate(d,
|
|
676
|
+
rate(d, u, l) {
|
|
682
677
|
var w, p, C, A;
|
|
683
678
|
const g = t.messages.find((x) => x.id === d);
|
|
684
679
|
if (t.chat) {
|
|
@@ -686,23 +681,23 @@ async function Ie(e, i) {
|
|
|
686
681
|
throw new Error("Message not found");
|
|
687
682
|
} else
|
|
688
683
|
throw new Error("Chat is not initialized");
|
|
689
|
-
const
|
|
690
|
-
return
|
|
684
|
+
const m = ((w = g.matches) == null ? void 0 : w.map((x) => [x.document_id, x.id])) ?? [];
|
|
685
|
+
return h.track("agent-rate", {
|
|
691
686
|
event: l ? "update" : "create",
|
|
692
|
-
thumb:
|
|
687
|
+
thumb: u === 1 ? "up" : "down",
|
|
693
688
|
knowledge_id: ((p = c.knowledge) == null ? void 0 : p.id) ?? "",
|
|
694
|
-
matches:
|
|
695
|
-
score:
|
|
689
|
+
matches: m,
|
|
690
|
+
score: u
|
|
696
691
|
}), l ? o.updateRating(c.id, t.chat.id, l, {
|
|
697
692
|
knowledge_id: ((C = c.knowledge) == null ? void 0 : C.id) ?? "",
|
|
698
693
|
message_id: d,
|
|
699
|
-
matches:
|
|
700
|
-
score:
|
|
694
|
+
matches: m,
|
|
695
|
+
score: u
|
|
701
696
|
}) : o.createRating(c.id, t.chat.id, {
|
|
702
697
|
knowledge_id: ((A = c.knowledge) == null ? void 0 : A.id) ?? "",
|
|
703
698
|
message_id: d,
|
|
704
|
-
matches:
|
|
705
|
-
score:
|
|
699
|
+
matches: m,
|
|
700
|
+
score: u
|
|
706
701
|
});
|
|
707
702
|
},
|
|
708
703
|
getChatmode() {
|
|
@@ -711,19 +706,19 @@ async function Ie(e, i) {
|
|
|
711
706
|
return o.getChatMode(c.id, t.chat.id);
|
|
712
707
|
},
|
|
713
708
|
deleteRate(d) {
|
|
714
|
-
var
|
|
709
|
+
var u;
|
|
715
710
|
if (!t.chat)
|
|
716
711
|
throw new Error("Chat is not initialized");
|
|
717
|
-
return
|
|
712
|
+
return h.track("agent-rate-delete", {
|
|
718
713
|
type: "text",
|
|
719
|
-
chat_id: (
|
|
714
|
+
chat_id: (u = t.chat) == null ? void 0 : u.id,
|
|
720
715
|
id: d
|
|
721
716
|
}), o.deleteRating(c.id, t.chat.id, d);
|
|
722
717
|
},
|
|
723
718
|
speak(d) {
|
|
724
719
|
if (!t.streamingManager)
|
|
725
720
|
throw new Error("Streaming manager is not initialized");
|
|
726
|
-
function
|
|
721
|
+
function u() {
|
|
727
722
|
if (c.presenter) {
|
|
728
723
|
if (d.type === "text")
|
|
729
724
|
return {
|
|
@@ -741,8 +736,8 @@ async function Ie(e, i) {
|
|
|
741
736
|
throw new Error("Presenter is not initialized");
|
|
742
737
|
throw new Error("Invalid payload");
|
|
743
738
|
}
|
|
744
|
-
const l =
|
|
745
|
-
return
|
|
739
|
+
const l = u();
|
|
740
|
+
return h.track("agent-speak", l), t.streamingManager.speak({
|
|
746
741
|
script: l
|
|
747
742
|
});
|
|
748
743
|
}
|
|
@@ -752,17 +747,17 @@ export {
|
|
|
752
747
|
k as ChatMode,
|
|
753
748
|
D as ChatProgress,
|
|
754
749
|
S as ConnectionState,
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
750
|
+
re as DocumentType,
|
|
751
|
+
ne as KnowledgeType,
|
|
752
|
+
G as PlanGroup,
|
|
753
|
+
ae as Providers,
|
|
754
|
+
ee as RateState,
|
|
760
755
|
$ as StreamEvents,
|
|
761
756
|
N as StreamingState,
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
757
|
+
te as Subject,
|
|
758
|
+
Z as UserPlan,
|
|
759
|
+
y as VideoType,
|
|
760
|
+
ie as VoiceAccess,
|
|
761
|
+
Se as createAgentManager,
|
|
762
|
+
_e as getAgent
|
|
768
763
|
};
|
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,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",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=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 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 R=(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(x.Start),n=!0)):n&&(r++,r>=a&&(i==null||i(x.Stop),n=!1))},100)}async function ye(e,i,{debug:t=!1,callbacks:a,auth:r,analytics:n,baseURL:s=O}){re=t;let o;const{startConnection:c,sendStreamRequest:h,close:C,createStream:M,addIceCandidate:T}=i.videoType===v.Clip?me(r,s,e,a.onError):he(r,s,e,a.onError),{id:I,offer:W,ice_servers:z,session_id:$}=await M(i),p=new we({iceServers:z}),d=p.createDataChannel("JanusDataChannel");if(!$)throw new Error("Could not create session_id");const u=pe(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 m;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),(m=a.onConnectionStateChange)==null||m.call(a,g))},p.ontrack=g=>{var m;R("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===k.StreamReady&&(clearTimeout(o),(m=a.onConnectionStateChange)==null||m.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 h(I,$,g)},async disconnect(){var g,m,w;if(I){if(p){if(ae(p.iceConnectionState)===_.New){(g=a.onVideoStateChange)==null||g.call(a,x.Stop),clearInterval(u);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)}(m=a.onConnectionStateChange)==null||m.call(a,_.New),(w=a.onVideoStateChange)==null||w.call(a,x.Stop),clearInterval(u)}},sessionId:$,streamId:I}}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{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 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||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 Ie(e,i){var z,$,p;const t={messages:[],chatMode:i.mode||A.Functional};let a=-1;const r=i.wsURL||oe,n=i.baseURL||O,s=i.mixpanelKey||ce,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 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===L.Partial?S.content+y:y),d===L.Answer&&(a=t.messages.length)),d===L.Answer&&h.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];h.track("agent-video",{...u,event:y})}[k.StreamFailed,k.StreamVideoError,k.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,E;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=j(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)&&((E=(S=i.callbacks).onNewChat)==null||E.call(S,l==null?void 0:l.id)),t.streamingManager=u,t.socketManager=d,t.chat=l;const g=t.chat.chatMode||A.Functional;I(g),h.track("agent-chat",{event:"connect",chatId:l.id,agentId:c.id})}async function T(){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=j(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 I(d){var u,l;d!==t.chatMode&&(h.track("agent-mode-change",{mode:d}),t.chatMode=d,t.chatMode!==A.Functional&&await T(),(l=(u=i.callbacks).onModeChange)==null||l.call(u,d))}async function W(){if(!t.chat)return M();const{streamingManager:d,chat:u}=await B(c,i,o,h,t.chat);t.streamingManager=d,I(t.chat.chatMode||A.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:T,changeMode:I,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||A.Functional;I(g),h.track("agent-chat",{event:"reconnect",chatId:l.id,agentId:c.id})},async chat(d){var l,g,m,w,y,S,E,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===A.Maintenance)throw new Error("Chat is in maintenance mode");if(![A.TextOnly,A.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 W(),P=await o.chat(c.id,t.chat.id,{sessionId:(S=t.streamingManager)==null?void 0:S.sessionId,streamId:(E=t.streamingManager)==null?void 0:E.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,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 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:((E=c.knowledge)==null?void 0:E.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=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=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
|