@d-id/client-sdk 1.1.49 → 1.1.50-staging.219
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 +641 -640
- package/dist/index.umd.cjs +13 -13
- package/dist/livekit-client.esm-RGXA_gNu.js +19564 -0
- package/package.json +2 -2
- package/dist/livekit-client.esm-C1GRQdZY.js +0 -16663
package/dist/index.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
1
|
+
var nt = Object.defineProperty;
|
|
2
|
+
var rt = (e, t, i) => t in e ? nt(e, t, { enumerable: !0, configurable: !0, writable: !0, value: i }) : e[t] = i;
|
|
3
|
+
var me = (e, t, i) => rt(e, typeof t != "symbol" ? t + "" : t, i);
|
|
4
4
|
class Se extends Error {
|
|
5
5
|
constructor({ kind: i, description: r, error: o }) {
|
|
6
6
|
super(JSON.stringify({ kind: i, description: r }));
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
me(this, "kind");
|
|
8
|
+
me(this, "description");
|
|
9
|
+
me(this, "error");
|
|
10
10
|
this.kind = i, this.description = r, this.error = o;
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
|
-
class
|
|
13
|
+
class it extends Se {
|
|
14
14
|
constructor(t, i) {
|
|
15
15
|
super({
|
|
16
16
|
kind: "ChatCreationFailed",
|
|
@@ -18,25 +18,25 @@ class at extends Se {
|
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
-
class
|
|
21
|
+
class at extends Se {
|
|
22
22
|
constructor(t) {
|
|
23
23
|
super({ kind: "ChatModeDowngraded", description: `Chat mode downgraded to ${t}` });
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
-
class
|
|
26
|
+
class le extends Se {
|
|
27
27
|
constructor(i, r) {
|
|
28
28
|
super({ kind: "ValidationError", description: i });
|
|
29
|
-
|
|
29
|
+
me(this, "key");
|
|
30
30
|
this.key = r;
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
-
class
|
|
33
|
+
class ot extends Se {
|
|
34
34
|
constructor(t) {
|
|
35
35
|
super({ kind: "WSError", description: t });
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
-
var
|
|
39
|
-
const
|
|
38
|
+
var st = /* @__PURE__ */ ((e) => (e.TRIAL = "trial", e.BASIC = "basic", e.ENTERPRISE = "enterprise", e.LITE = "lite", e.ADVANCED = "advanced", e))(st || {}), ct = /* @__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))(ct || {}), dt = /* @__PURE__ */ ((e) => (e.Created = "created", e.Started = "started", e.Done = "done", e.Error = "error", e.Rejected = "rejected", e.Ready = "ready", e))(dt || {}), ut = /* @__PURE__ */ ((e) => (e.Unrated = "Unrated", e.Positive = "Positive", e.Negative = "Negative", e))(ut || {}), x = /* @__PURE__ */ ((e) => (e.Functional = "Functional", e.TextOnly = "TextOnly", e.Maintenance = "Maintenance", e.Playground = "Playground", e.DirectPlayback = "DirectPlayback", e.Off = "Off", e))(x || {}), Y = /* @__PURE__ */ ((e) => (e.Embed = "embed", e.Query = "query", e.Partial = "partial", e.Answer = "answer", e.Transcribe = "transcribe", e.Complete = "done", e))(Y || {}), lt = /* @__PURE__ */ ((e) => (e.KnowledgeProcessing = "knowledge/processing", e.KnowledgeIndexing = "knowledge/indexing", e.KnowledgeFailed = "knowledge/error", e.KnowledgeDone = "knowledge/done", e))(lt || {}), ft = /* @__PURE__ */ ((e) => (e.Knowledge = "knowledge", e.Document = "document", e.Record = "record", e))(ft || {}), mt = /* @__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))(mt || {}), He = /* @__PURE__ */ ((e) => (e.Clip = "clip", e.Talk = "talk", e.Expressive = "expressive", e))(He || {});
|
|
39
|
+
const Sn = (e) => {
|
|
40
40
|
switch (e) {
|
|
41
41
|
case "clip":
|
|
42
42
|
return "clip";
|
|
@@ -48,13 +48,13 @@ const kn = (e) => {
|
|
|
48
48
|
throw new Error(`Unknown video type: ${e}`);
|
|
49
49
|
}
|
|
50
50
|
};
|
|
51
|
-
var C = /* @__PURE__ */ ((e) => (e.Start = "START", e.Stop = "STOP", e))(C || {}),
|
|
52
|
-
const
|
|
53
|
-
},
|
|
51
|
+
var C = /* @__PURE__ */ ((e) => (e.Start = "START", e.Stop = "STOP", e))(C || {}), re = /* @__PURE__ */ ((e) => (e.Strong = "STRONG", e.Weak = "WEAK", e.Unknown = "UNKNOWN", e))(re || {}), O = /* @__PURE__ */ ((e) => (e.Idle = "IDLE", e.Loading = "LOADING", e.Talking = "TALKING", e))(O || {}), A = /* @__PURE__ */ ((e) => (e.ChatAnswer = "chat/answer", e.ChatPartial = "chat/partial", e.ChatAudioTranscribed = "chat/audio-transcribed", e.StreamDone = "stream/done", e.StreamStarted = "stream/started", e.StreamFailed = "stream/error", e.StreamReady = "stream/ready", e.StreamCreated = "stream/created", e.StreamInterrupt = "stream/interrupt", e.StreamVideoCreated = "stream-video/started", e.StreamVideoDone = "stream-video/done", e.StreamVideoError = "stream-video/error", e.StreamVideoRejected = "stream-video/rejected", e))(A || {}), T = /* @__PURE__ */ ((e) => (e.New = "new", e.Fail = "fail", e.Connected = "connected", e.Connecting = "connecting", e.Closed = "closed", e.Completed = "completed", e.Disconnecting = "disconnecting", e.Disconnected = "disconnected", e))(T || {}), ie = /* @__PURE__ */ ((e) => (e.Legacy = "legacy", e.Fluent = "fluent", e))(ie || {}), ke = /* @__PURE__ */ ((e) => (e.Livekit = "livekit", e))(ke || {}), gt = /* @__PURE__ */ ((e) => (e.Amazon = "amazon", e.AzureOpenAi = "azure-openai", e.Microsoft = "microsoft", e.Afflorithmics = "afflorithmics", e.Elevenlabs = "elevenlabs", e))(gt || {}), ht = /* @__PURE__ */ ((e) => (e.Public = "public", e.Premium = "premium", e.Private = "private", e))(ht || {});
|
|
52
|
+
const pt = 45 * 1e3, wt = "X-Playground-Chat", he = "https://api.d-id.com", yt = "wss://notifications.d-id.com", vt = "79f81a83a67430be2bc0fd61042b8faa", Ct = (...e) => {
|
|
53
|
+
}, qe = (e) => new Promise((t) => setTimeout(t, e)), fe = (e = 16) => {
|
|
54
54
|
const t = new Uint8Array(e);
|
|
55
55
|
return window.crypto.getRandomValues(t), Array.from(t, (i) => i.toString(16).padStart(2, "0")).join("").slice(0, 13);
|
|
56
|
-
},
|
|
57
|
-
function
|
|
56
|
+
}, Qe = (e) => e.type === "clip" && e.presenter_id.startsWith("v2_") ? "clip_v2" : e.type, _e = (e) => e === He.Expressive, St = (e) => [x.TextOnly, x.Playground, x.Maintenance].includes(e), Xe = (e) => e && [x.DirectPlayback, x.Off].includes(e);
|
|
57
|
+
function kt(e, t) {
|
|
58
58
|
let i;
|
|
59
59
|
return {
|
|
60
60
|
promise: new Promise((o, a) => {
|
|
@@ -78,12 +78,12 @@ async function De(e, t) {
|
|
|
78
78
|
try {
|
|
79
79
|
if (!i.timeout)
|
|
80
80
|
return await e();
|
|
81
|
-
const { promise: a, clear: s } =
|
|
81
|
+
const { promise: a, clear: s } = kt(i.timeout, i.timeoutErrorMessage), d = e().finally(s);
|
|
82
82
|
return await Promise.race([d, a]);
|
|
83
83
|
} catch (a) {
|
|
84
84
|
if (r = a, !i.shouldRetryFn(a) || o >= i.limit)
|
|
85
85
|
throw a;
|
|
86
|
-
await
|
|
86
|
+
await qe(i.delayMs), i.onRetry(a);
|
|
87
87
|
}
|
|
88
88
|
throw r;
|
|
89
89
|
}
|
|
@@ -92,43 +92,43 @@ function Ee(e) {
|
|
|
92
92
|
return window.localStorage.setItem("did_external_key_id", e), e;
|
|
93
93
|
let t = window.localStorage.getItem("did_external_key_id");
|
|
94
94
|
if (!t) {
|
|
95
|
-
let i =
|
|
95
|
+
let i = fe();
|
|
96
96
|
window.localStorage.setItem("did_external_key_id", i), t = i;
|
|
97
97
|
}
|
|
98
98
|
return t;
|
|
99
99
|
}
|
|
100
|
-
let
|
|
101
|
-
function
|
|
100
|
+
let Rt = fe();
|
|
101
|
+
function Ye(e, t) {
|
|
102
102
|
if (e.type === "bearer")
|
|
103
103
|
return `Bearer ${e.token}`;
|
|
104
104
|
if (e.type === "basic")
|
|
105
105
|
return `Basic ${btoa(`${e.username}:${e.password}`)}`;
|
|
106
106
|
if (e.type === "key")
|
|
107
|
-
return `Client-Key ${e.clientKey}.${Ee(t)}_${
|
|
107
|
+
return `Client-Key ${e.clientKey}.${Ee(t)}_${Rt}`;
|
|
108
108
|
throw new Error(`Unknown auth type: ${e}`);
|
|
109
109
|
}
|
|
110
|
-
const
|
|
110
|
+
const Dt = (e) => De(e, {
|
|
111
111
|
limit: 3,
|
|
112
112
|
delayMs: 1e3,
|
|
113
113
|
timeout: 0,
|
|
114
114
|
shouldRetryFn: (t) => t.status === 429
|
|
115
115
|
});
|
|
116
|
-
function Ae(e, t =
|
|
116
|
+
function Ae(e, t = he, i, r) {
|
|
117
117
|
const o = async (a, s) => {
|
|
118
|
-
const { skipErrorHandler: d, ...n } = s || {}, c = await
|
|
118
|
+
const { skipErrorHandler: d, ...n } = s || {}, c = await Dt(
|
|
119
119
|
() => fetch(t + (a != null && a.startsWith("/") ? a : `/${a}`), {
|
|
120
120
|
...n,
|
|
121
121
|
headers: {
|
|
122
122
|
...n.headers,
|
|
123
|
-
Authorization:
|
|
123
|
+
Authorization: Ye(e, r),
|
|
124
124
|
"Content-Type": "application/json"
|
|
125
125
|
}
|
|
126
126
|
})
|
|
127
127
|
);
|
|
128
128
|
if (!c.ok) {
|
|
129
129
|
let g = await c.text().catch(() => `Failed to fetch with status ${c.status}`);
|
|
130
|
-
const
|
|
131
|
-
throw i && !d && i(
|
|
130
|
+
const p = new Error(g);
|
|
131
|
+
throw i && !d && i(p, { url: a, options: n, headers: c.headers }), p;
|
|
132
132
|
}
|
|
133
133
|
return c.json();
|
|
134
134
|
};
|
|
@@ -147,7 +147,7 @@ function Ae(e, t = pe, i, r) {
|
|
|
147
147
|
}
|
|
148
148
|
};
|
|
149
149
|
}
|
|
150
|
-
function
|
|
150
|
+
function Et(e, t = he, i, r) {
|
|
151
151
|
const o = Ae(e, `${t}/agents`, i, r);
|
|
152
152
|
return {
|
|
153
153
|
create(a, s) {
|
|
@@ -185,7 +185,7 @@ function Mt(e, t = pe, i, r) {
|
|
|
185
185
|
}
|
|
186
186
|
};
|
|
187
187
|
}
|
|
188
|
-
function
|
|
188
|
+
function Mt(e) {
|
|
189
189
|
var o, a, s, d;
|
|
190
190
|
const t = () => /Mobi|Android/i.test(navigator.userAgent) ? "Mobile" : "Desktop", i = () => {
|
|
191
191
|
const n = navigator.platform;
|
|
@@ -196,18 +196,18 @@ function It(e) {
|
|
|
196
196
|
isMobile: `${t() == "Mobile"}`,
|
|
197
197
|
browser: navigator.userAgent,
|
|
198
198
|
origin: window.location.origin,
|
|
199
|
-
agentType:
|
|
199
|
+
agentType: Qe(r),
|
|
200
200
|
agentVoice: {
|
|
201
201
|
voiceId: (a = (o = e.presenter) == null ? void 0 : o.voice) == null ? void 0 : a.voice_id,
|
|
202
202
|
provider: (d = (s = e.presenter) == null ? void 0 : s.voice) == null ? void 0 : d.type
|
|
203
203
|
}
|
|
204
204
|
};
|
|
205
205
|
}
|
|
206
|
-
function
|
|
206
|
+
function It(e) {
|
|
207
207
|
var i, r, o, a, s, d;
|
|
208
208
|
const t = (i = e.llm) == null ? void 0 : i.prompt_customization;
|
|
209
209
|
return {
|
|
210
|
-
agentType:
|
|
210
|
+
agentType: Qe(e.presenter),
|
|
211
211
|
owner_id: e.owner_id ?? "",
|
|
212
212
|
promptVersion: (r = e.llm) == null ? void 0 : r.prompt_version,
|
|
213
213
|
behavior: {
|
|
@@ -226,8 +226,8 @@ function Tt(e) {
|
|
|
226
226
|
...e.access === "public" ? { from: "agent-template" } : {}
|
|
227
227
|
};
|
|
228
228
|
}
|
|
229
|
-
const
|
|
230
|
-
function
|
|
229
|
+
const Tt = (e) => e.reduce((t, i) => t + i, 0), ze = (e) => Tt(e) / e.length;
|
|
230
|
+
function _t(e, t, i) {
|
|
231
231
|
var n, c, g;
|
|
232
232
|
const { event: r, ...o } = e, { template: a } = (t == null ? void 0 : t.llm) || {}, { language: s } = ((n = t == null ? void 0 : t.presenter) == null ? void 0 : n.voice) || {};
|
|
233
233
|
return {
|
|
@@ -241,8 +241,8 @@ function At(e, t, i) {
|
|
|
241
241
|
function Ke(e) {
|
|
242
242
|
"requestIdleCallback" in window ? requestIdleCallback(e, { timeout: 2e3 }) : setTimeout(e, 0);
|
|
243
243
|
}
|
|
244
|
-
const
|
|
245
|
-
function
|
|
244
|
+
const At = "https://api-js.mixpanel.com/track/?verbose=1&ip=1";
|
|
245
|
+
function Lt(e) {
|
|
246
246
|
const t = window != null && window.hasOwnProperty("DID_AGENTS_API") ? "agents-ui" : "agents-sdk", i = {};
|
|
247
247
|
return {
|
|
248
248
|
token: e.token || "testKey",
|
|
@@ -253,7 +253,7 @@ function Pt(e) {
|
|
|
253
253
|
...e.mixpanelAdditionalProperties || {}
|
|
254
254
|
},
|
|
255
255
|
isEnabled: e.isEnabled ?? !0,
|
|
256
|
-
getRandom:
|
|
256
|
+
getRandom: fe,
|
|
257
257
|
enrich(r) {
|
|
258
258
|
this.additionalProperties = { ...this.additionalProperties, ...r };
|
|
259
259
|
},
|
|
@@ -286,7 +286,7 @@ function Pt(e) {
|
|
|
286
286
|
])
|
|
287
287
|
})
|
|
288
288
|
};
|
|
289
|
-
return fetch(
|
|
289
|
+
return fetch(At, c).catch((g) => console.error("Analytics tracking error:", g)), Promise.resolve();
|
|
290
290
|
},
|
|
291
291
|
linkTrack(r, o, a, s) {
|
|
292
292
|
i[r] || (i[r] = { events: {}, resolvedDependencies: [] }), s.includes(a) || s.push(a);
|
|
@@ -294,7 +294,7 @@ function Pt(e) {
|
|
|
294
294
|
if (d.events[a] = { props: o }, d.resolvedDependencies.push(a), s.every(
|
|
295
295
|
(c) => d.resolvedDependencies.includes(c)
|
|
296
296
|
)) {
|
|
297
|
-
const c = s.reduce((g,
|
|
297
|
+
const c = s.reduce((g, p) => d.events[p] ? { ...g, ...d.events[p].props } : g, {});
|
|
298
298
|
this.track(r, c), d.resolvedDependencies = d.resolvedDependencies.filter(
|
|
299
299
|
(g) => !s.includes(g)
|
|
300
300
|
), s.forEach((g) => {
|
|
@@ -312,22 +312,22 @@ function Le() {
|
|
|
312
312
|
get: (t = !1) => t ? Date.now() - e : e
|
|
313
313
|
};
|
|
314
314
|
}
|
|
315
|
-
const
|
|
316
|
-
function
|
|
317
|
-
return e === x.Playground ? { headers: { [
|
|
315
|
+
const ne = Le(), Me = Le(), Ne = Le();
|
|
316
|
+
function Ge(e) {
|
|
317
|
+
return e === x.Playground ? { headers: { [wt]: "true" } } : {};
|
|
318
318
|
}
|
|
319
|
-
async function
|
|
319
|
+
async function Ze(e, t, i, r, o = !1, a) {
|
|
320
320
|
try {
|
|
321
|
-
return !a && !
|
|
321
|
+
return !a && !Xe(r) && (a = await t.newChat(e.id, { persist: o }, Ge(r)), i.track("agent-chat", {
|
|
322
322
|
event: "created",
|
|
323
323
|
chatId: a.id,
|
|
324
324
|
mode: r
|
|
325
325
|
})), { chat: a, chatMode: (a == null ? void 0 : a.chat_mode) ?? r };
|
|
326
326
|
} catch (s) {
|
|
327
|
-
throw
|
|
327
|
+
throw Pt(s) === "InsufficientCreditsError" ? new Error("InsufficientCreditsError") : new Error("Cannot create new chat");
|
|
328
328
|
}
|
|
329
329
|
}
|
|
330
|
-
const
|
|
330
|
+
const Pt = (e) => {
|
|
331
331
|
try {
|
|
332
332
|
const t = JSON.parse(e.message);
|
|
333
333
|
return t == null ? void 0 : t.kind;
|
|
@@ -335,10 +335,10 @@ const bt = (e) => {
|
|
|
335
335
|
return "UnknownError";
|
|
336
336
|
}
|
|
337
337
|
};
|
|
338
|
-
function
|
|
338
|
+
function bt(e) {
|
|
339
339
|
return e && e.length > 0 ? e : [];
|
|
340
340
|
}
|
|
341
|
-
function
|
|
341
|
+
function jt(e, t, i, r) {
|
|
342
342
|
const o = Ae(e, `${t}/v2/agents/${i}`, r);
|
|
343
343
|
return {
|
|
344
344
|
async createStream(a) {
|
|
@@ -346,8 +346,8 @@ function $t(e, t, i, r) {
|
|
|
346
346
|
}
|
|
347
347
|
};
|
|
348
348
|
}
|
|
349
|
-
const
|
|
350
|
-
function
|
|
349
|
+
const et = (e, t) => (i, r) => e && console.log(`[${t}] ${i}`, r ?? "");
|
|
350
|
+
function $t(e, t, i) {
|
|
351
351
|
const r = (t.timestamp - e.timestamp) / 1e3;
|
|
352
352
|
return {
|
|
353
353
|
duration: r,
|
|
@@ -367,7 +367,7 @@ function Bt(e, t, i) {
|
|
|
367
367
|
lowFpsCount: i
|
|
368
368
|
};
|
|
369
369
|
}
|
|
370
|
-
function
|
|
370
|
+
function Bt(e) {
|
|
371
371
|
return e.filter(
|
|
372
372
|
(t) => t.freezeCount > 0 || t.framesPerSecond < 21 || t.framesDropped > 0 || t.packetsLost > 0
|
|
373
373
|
).map((t) => {
|
|
@@ -378,7 +378,7 @@ function xt(e) {
|
|
|
378
378
|
};
|
|
379
379
|
});
|
|
380
380
|
}
|
|
381
|
-
function
|
|
381
|
+
function xt(e) {
|
|
382
382
|
let t = "", i = 0;
|
|
383
383
|
for (const r of e.values()) {
|
|
384
384
|
if (r && r.type === "codec" && r.mimeType.startsWith("video") && (t = r.mimeType.split("/")[1]), r && r.type === "candidate-pair") {
|
|
@@ -460,14 +460,14 @@ function Ve(e, t, i) {
|
|
|
460
460
|
framesPerSecond: n.framesPerSecond,
|
|
461
461
|
freezeCount: n.freezeCount - e[c - 1].freezeCount,
|
|
462
462
|
freezeDuration: n.freezeDuration - e[c - 1].freezeDuration
|
|
463
|
-
}), o =
|
|
463
|
+
}), o = Bt(r), a = o.reduce((n, c) => n + (c.causes.includes("low fps") ? 1 : 0), 0), s = r.filter((n) => !!n.avgJitterDelayInInterval).map((n) => n.avgJitterDelayInInterval), d = r.filter((n) => !!n.rtt).map((n) => n.rtt);
|
|
464
464
|
return {
|
|
465
465
|
webRTCStats: {
|
|
466
466
|
anomalies: o,
|
|
467
467
|
minRtt: Math.min(...d),
|
|
468
468
|
avgRtt: ze(d),
|
|
469
469
|
maxRtt: Math.max(...d),
|
|
470
|
-
aggregateReport:
|
|
470
|
+
aggregateReport: $t(e[0], e[e.length - 1], a),
|
|
471
471
|
minJitterDelayInInterval: Math.min(...s),
|
|
472
472
|
maxJitterDelayInInterval: Math.max(...s),
|
|
473
473
|
avgJitterDelayInInterval: ze(s)
|
|
@@ -476,16 +476,16 @@ function Ve(e, t, i) {
|
|
|
476
476
|
resolution: `${e[0].frameWidth}x${e[0].frameHeight}`
|
|
477
477
|
};
|
|
478
478
|
}
|
|
479
|
-
const Ce = 100,
|
|
480
|
-
function
|
|
479
|
+
const Ce = 100, Ft = Math.max(Math.ceil(400 / Ce), 1), zt = 0.25, Kt = 0.28;
|
|
480
|
+
function Nt() {
|
|
481
481
|
let e = 0, t, i, r = 0;
|
|
482
482
|
return (o) => {
|
|
483
483
|
for (const a of o.values())
|
|
484
484
|
if (a && a.type === "inbound-rtp" && a.kind === "video") {
|
|
485
485
|
const s = a.jitterBufferDelay, d = a.jitterBufferEmittedCount;
|
|
486
486
|
if (i && d > i) {
|
|
487
|
-
const g = s - t,
|
|
488
|
-
r = g /
|
|
487
|
+
const g = s - t, p = d - i;
|
|
488
|
+
r = g / p;
|
|
489
489
|
}
|
|
490
490
|
t = s, i = d;
|
|
491
491
|
const n = a.framesDecoded, c = n - e > 0;
|
|
@@ -494,24 +494,24 @@ function Vt() {
|
|
|
494
494
|
return { isReceiving: !1, avgJitterDelayInInterval: r };
|
|
495
495
|
};
|
|
496
496
|
}
|
|
497
|
-
function
|
|
498
|
-
let a = null, s = [], d, n = 0, c = !1, g =
|
|
499
|
-
const
|
|
500
|
-
async function
|
|
501
|
-
const
|
|
502
|
-
if (!
|
|
497
|
+
function tt(e, t, i, r, o) {
|
|
498
|
+
let a = null, s = [], d, n = 0, c = !1, g = re.Unknown, p = re.Unknown, u = 0, v = 0;
|
|
499
|
+
const F = Nt();
|
|
500
|
+
async function P() {
|
|
501
|
+
const k = await e();
|
|
502
|
+
if (!k)
|
|
503
503
|
return;
|
|
504
|
-
const { isReceiving:
|
|
505
|
-
if (
|
|
506
|
-
n = 0,
|
|
507
|
-
else if (c && (n++, n >=
|
|
508
|
-
const
|
|
509
|
-
r == null || r(C.Stop,
|
|
504
|
+
const { isReceiving: S, avgJitterDelayInInterval: N, freezeCount: E } = F(k), b = xt(k);
|
|
505
|
+
if (S)
|
|
506
|
+
n = 0, u = E - v, p = N < zt ? re.Strong : N > Kt && u > 1 ? re.Weak : g, p !== g && (o == null || o(p), g = p, v += u, u = 0), c || (r == null || r(C.Start), d = s[s.length - 1], s = [], c = !0), s.push(b);
|
|
507
|
+
else if (c && (n++, n >= Ft)) {
|
|
508
|
+
const V = Ve(s, Ce, d);
|
|
509
|
+
r == null || r(C.Stop, V), t() || i(), v = E, c = !1;
|
|
510
510
|
}
|
|
511
511
|
}
|
|
512
512
|
return {
|
|
513
513
|
start: () => {
|
|
514
|
-
a || (a = setInterval(
|
|
514
|
+
a || (a = setInterval(P, Ce));
|
|
515
515
|
},
|
|
516
516
|
stop: () => {
|
|
517
517
|
a && (clearInterval(a), a = null);
|
|
@@ -519,22 +519,23 @@ function et(e, t, i, r, o) {
|
|
|
519
519
|
getReport: () => Ve(s, Ce, d)
|
|
520
520
|
};
|
|
521
521
|
}
|
|
522
|
-
|
|
522
|
+
const Je = 2e4;
|
|
523
|
+
async function Vt() {
|
|
523
524
|
try {
|
|
524
|
-
return await import("./livekit-client.esm-
|
|
525
|
+
return await import("./livekit-client.esm-RGXA_gNu.js");
|
|
525
526
|
} catch {
|
|
526
527
|
throw new Error(
|
|
527
528
|
"LiveKit client is required for this streaming manager. Please install it using: npm install livekit-client"
|
|
528
529
|
);
|
|
529
530
|
}
|
|
530
531
|
}
|
|
531
|
-
const
|
|
532
|
-
excellent:
|
|
533
|
-
good:
|
|
534
|
-
poor:
|
|
535
|
-
lost:
|
|
536
|
-
unknown:
|
|
537
|
-
},
|
|
532
|
+
const Jt = {
|
|
533
|
+
excellent: re.Strong,
|
|
534
|
+
good: re.Strong,
|
|
535
|
+
poor: re.Weak,
|
|
536
|
+
lost: re.Unknown,
|
|
537
|
+
unknown: re.Unknown
|
|
538
|
+
}, ge = JSON.stringify({
|
|
538
539
|
kind: "InternalServerError",
|
|
539
540
|
description: "Stream Error"
|
|
540
541
|
});
|
|
@@ -543,365 +544,365 @@ function Ie(e, t, i) {
|
|
|
543
544
|
var r, o;
|
|
544
545
|
throw t("Failed to connect to LiveKit room:", e), (r = i.onConnectionStateChange) == null || r.call(i, T.Fail, "internal:init-error"), (o = i.onError) == null || o.call(i, e, { sessionId: "" }), e;
|
|
545
546
|
}
|
|
546
|
-
async function
|
|
547
|
+
async function Ut(e, t, i) {
|
|
547
548
|
var be;
|
|
548
|
-
const r =
|
|
549
|
-
let
|
|
550
|
-
const
|
|
551
|
-
let
|
|
552
|
-
|
|
549
|
+
const r = et(i.debug || !1, "LiveKitStreamingManager"), { Room: o, RoomEvent: a, ConnectionState: s, Track: d } = await Vt(), { callbacks: n, auth: c, baseURL: g, analytics: p } = i;
|
|
550
|
+
let u = null, v = !1;
|
|
551
|
+
const F = ie.Fluent;
|
|
552
|
+
let P = null, k = null, S = null, N = null, E = !1;
|
|
553
|
+
u = new o({
|
|
553
554
|
adaptiveStream: !1,
|
|
554
555
|
// Must be false to use mediaStreamTrack directly
|
|
555
556
|
dynacast: !0
|
|
556
557
|
});
|
|
557
|
-
let
|
|
558
|
-
const H =
|
|
559
|
-
let Z
|
|
560
|
-
const se = $t(c, g || pe, e, n.onError);
|
|
561
|
-
let N, u, S;
|
|
558
|
+
let b = null, V = O.Idle;
|
|
559
|
+
const H = jt(c, g || he, e, n.onError);
|
|
560
|
+
let z, Z, ee;
|
|
562
561
|
try {
|
|
563
|
-
const
|
|
562
|
+
const f = await H.createStream({
|
|
564
563
|
transport_provider: ke.Livekit,
|
|
565
564
|
chat_persist: t.chat_persist ?? !0
|
|
566
|
-
}), { id:
|
|
567
|
-
(be = n.onStreamCreated) == null || be.call(n, { session_id:
|
|
568
|
-
} catch (
|
|
569
|
-
Ie(
|
|
565
|
+
}), { id: h, session_token: y, session_url: I } = f;
|
|
566
|
+
(be = n.onStreamCreated) == null || be.call(n, { session_id: h, stream_id: h, agent_id: e }), z = h, Z = y, ee = I, await u.prepareConnection(ee, Z);
|
|
567
|
+
} catch (f) {
|
|
568
|
+
Ie(f, r, n);
|
|
570
569
|
}
|
|
571
|
-
if (!
|
|
570
|
+
if (!ee || !Z || !z)
|
|
572
571
|
return Promise.reject(new Error("Failed to initialize LiveKit stream"));
|
|
573
|
-
|
|
574
|
-
function
|
|
575
|
-
var
|
|
576
|
-
|
|
572
|
+
u.on(a.ConnectionStateChanged, D).on(a.ConnectionQualityChanged, R).on(a.ParticipantConnected, K).on(a.ParticipantDisconnected, L).on(a.TrackSubscribed, q).on(a.TrackUnsubscribed, Q).on(a.DataReceived, j).on(a.MediaDevicesError, $).on(a.TranscriptionReceived, l).on(a.EncryptionError, G).on(a.TrackSubscriptionFailed, ae);
|
|
573
|
+
function l(f, h) {
|
|
574
|
+
var y;
|
|
575
|
+
h != null && h.isLocal && (ne.update(), V === O.Talking && ((y = n.onInterruptDetected) == null || y.call(n, { type: "audio" }), V = O.Idle));
|
|
577
576
|
}
|
|
578
577
|
try {
|
|
579
|
-
await
|
|
580
|
-
var
|
|
581
|
-
r(
|
|
578
|
+
await u.connect(ee, Z), r("LiveKit room joined successfully"), b = setTimeout(() => {
|
|
579
|
+
var f;
|
|
580
|
+
r(
|
|
581
|
+
`Track subscription timeout - no track subscribed within ${Je / 1e3} seconds after connect`
|
|
582
|
+
), b = null, p.track("connectivity-error", {
|
|
582
583
|
error: "Track subscription timeout",
|
|
583
|
-
sessionId:
|
|
584
|
-
}), (
|
|
585
|
-
},
|
|
586
|
-
} catch (
|
|
587
|
-
Ie(
|
|
584
|
+
sessionId: z
|
|
585
|
+
}), (f = n.onError) == null || f.call(n, new Error("Track subscription timeout"), { sessionId: z }), Re("internal:track-subscription-timeout");
|
|
586
|
+
}, Je);
|
|
587
|
+
} catch (f) {
|
|
588
|
+
Ie(f, r, n);
|
|
588
589
|
}
|
|
589
|
-
|
|
590
|
-
"stream-type":
|
|
590
|
+
p.enrich({
|
|
591
|
+
"stream-type": F
|
|
591
592
|
});
|
|
592
|
-
function
|
|
593
|
-
var
|
|
594
|
-
switch (r("Connection state changed:",
|
|
593
|
+
function D(f) {
|
|
594
|
+
var h, y, I, U;
|
|
595
|
+
switch (r("Connection state changed:", f), f) {
|
|
595
596
|
case s.Connecting:
|
|
596
|
-
r("CALLBACK: onConnectionStateChange(Connecting)"), (
|
|
597
|
+
r("CALLBACK: onConnectionStateChange(Connecting)"), (h = n.onConnectionStateChange) == null || h.call(n, T.Connecting, "livekit:connecting");
|
|
597
598
|
break;
|
|
598
599
|
case s.Connected:
|
|
599
|
-
r("LiveKit room connected successfully"),
|
|
600
|
+
r("LiveKit room connected successfully"), v = !0;
|
|
600
601
|
break;
|
|
601
602
|
case s.Disconnected:
|
|
602
|
-
r("LiveKit room disconnected"),
|
|
603
|
+
r("LiveKit room disconnected"), v = !1, E = !1, (y = n.onConnectionStateChange) == null || y.call(n, T.Disconnected, "livekit:disconnected");
|
|
603
604
|
break;
|
|
604
605
|
case s.Reconnecting:
|
|
605
|
-
r("LiveKit room reconnecting..."), (
|
|
606
|
+
r("LiveKit room reconnecting..."), (I = n.onConnectionStateChange) == null || I.call(n, T.Connecting, "livekit:reconnecting");
|
|
606
607
|
break;
|
|
607
608
|
case s.SignalReconnecting:
|
|
608
609
|
r("LiveKit room signal reconnecting..."), (U = n.onConnectionStateChange) == null || U.call(n, T.Connecting, "livekit:signal-reconnecting");
|
|
609
610
|
break;
|
|
610
611
|
}
|
|
611
612
|
}
|
|
612
|
-
function
|
|
613
|
-
var
|
|
614
|
-
r("Connection quality:",
|
|
613
|
+
function R(f, h) {
|
|
614
|
+
var y;
|
|
615
|
+
r("Connection quality:", f), h != null && h.isLocal && ((y = n.onConnectivityStateChange) == null || y.call(n, Jt[f]));
|
|
615
616
|
}
|
|
616
|
-
function
|
|
617
|
-
r("Participant connected:",
|
|
617
|
+
function K(f) {
|
|
618
|
+
r("Participant connected:", f.identity);
|
|
618
619
|
}
|
|
619
|
-
function
|
|
620
|
-
r("Participant disconnected:",
|
|
620
|
+
function L(f) {
|
|
621
|
+
r("Participant disconnected:", f.identity), Re("livekit:participant-disconnected");
|
|
621
622
|
}
|
|
622
|
-
function
|
|
623
|
-
var
|
|
624
|
-
|
|
623
|
+
function _() {
|
|
624
|
+
var f;
|
|
625
|
+
N !== C.Start && (r("CALLBACK: onVideoStateChange(Start)"), N = C.Start, (f = n.onVideoStateChange) == null || f.call(n, C.Start));
|
|
625
626
|
}
|
|
626
|
-
function
|
|
627
|
-
var
|
|
628
|
-
|
|
627
|
+
function B(f) {
|
|
628
|
+
var h;
|
|
629
|
+
N !== C.Stop && (r("CALLBACK: onVideoStateChange(Stop)"), N = C.Stop, (h = n.onVideoStateChange) == null || h.call(n, C.Stop, f));
|
|
629
630
|
}
|
|
630
|
-
function
|
|
631
|
-
var U,
|
|
632
|
-
r(`Track subscribed: ${
|
|
633
|
-
const
|
|
634
|
-
if (!
|
|
635
|
-
r(`No mediaStreamTrack available for ${
|
|
631
|
+
function q(f, h, y) {
|
|
632
|
+
var U, J, oe;
|
|
633
|
+
r(`Track subscribed: ${f.kind} from ${y.identity}`);
|
|
634
|
+
const I = f.mediaStreamTrack;
|
|
635
|
+
if (!I) {
|
|
636
|
+
r(`No mediaStreamTrack available for ${f.kind}`);
|
|
636
637
|
return;
|
|
637
638
|
}
|
|
638
|
-
|
|
639
|
-
() =>
|
|
640
|
-
() =>
|
|
641
|
-
|
|
642
|
-
(
|
|
643
|
-
r(`Video state change: ${
|
|
639
|
+
P ? (P.addTrack(I), r(`Added ${f.kind} track to shared MediaStream`)) : (P = new MediaStream([I]), r(`Created shared MediaStream with ${f.kind} track`)), f.kind === "video" && ((U = n.onStreamReady) == null || U.call(n), r("CALLBACK: onSrcObjectReady"), (J = n.onSrcObjectReady) == null || J.call(n, P), E || (E = !0, r("CALLBACK: onConnectionStateChange(Connected)"), (oe = n.onConnectionStateChange) == null || oe.call(n, T.Connected, "livekit:track-subscribed")), S = tt(
|
|
640
|
+
() => f.getRTCStatsReport(),
|
|
641
|
+
() => v,
|
|
642
|
+
Ct,
|
|
643
|
+
(ue, ye) => {
|
|
644
|
+
r(`Video state change: ${ue}`), ue === C.Start ? (b && (clearTimeout(b), b = null, r("Track subscription timeout cleared")), _()) : ue === C.Stop && B(ye);
|
|
644
645
|
}
|
|
645
|
-
),
|
|
646
|
+
), S.start());
|
|
646
647
|
}
|
|
647
|
-
function
|
|
648
|
-
r(`Track unsubscribed: ${
|
|
648
|
+
function Q(f, h, y) {
|
|
649
|
+
r(`Track unsubscribed: ${f.kind} from ${y.identity}`), f.kind === "video" && (B(S == null ? void 0 : S.getReport()), S == null || S.stop(), S = null);
|
|
649
650
|
}
|
|
650
|
-
function
|
|
651
|
-
var
|
|
652
|
-
const U = new TextDecoder().decode(
|
|
651
|
+
function j(f, h, y, I) {
|
|
652
|
+
var J, oe, ue, ye, je, $e, Be, xe;
|
|
653
|
+
const U = new TextDecoder().decode(f);
|
|
653
654
|
try {
|
|
654
|
-
const
|
|
655
|
-
if (r("Data received:", { subject:
|
|
656
|
-
const
|
|
657
|
-
(
|
|
658
|
-
event:
|
|
659
|
-
...
|
|
655
|
+
const X = JSON.parse(U), se = I || X.subject;
|
|
656
|
+
if (r("Data received:", { subject: se, data: X }), se === A.ChatAnswer) {
|
|
657
|
+
const te = Y.Answer;
|
|
658
|
+
(J = n.onMessage) == null || J.call(n, te, {
|
|
659
|
+
event: te,
|
|
660
|
+
...X
|
|
660
661
|
});
|
|
661
|
-
} else if (
|
|
662
|
-
const
|
|
663
|
-
(
|
|
664
|
-
event:
|
|
665
|
-
...
|
|
662
|
+
} else if (se === A.ChatPartial) {
|
|
663
|
+
const te = Y.Partial;
|
|
664
|
+
(oe = n.onMessage) == null || oe.call(n, te, {
|
|
665
|
+
event: te,
|
|
666
|
+
...X
|
|
666
667
|
});
|
|
667
668
|
} else if ([
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
].includes(
|
|
673
|
-
|
|
674
|
-
const
|
|
675
|
-
i.debug && (($e =
|
|
676
|
-
id:
|
|
677
|
-
name:
|
|
678
|
-
}), (Be = n.onMessage) == null || Be.call(n,
|
|
679
|
-
} else if (
|
|
680
|
-
const
|
|
681
|
-
(xe = n.onMessage) == null || xe.call(n,
|
|
682
|
-
event:
|
|
683
|
-
...
|
|
669
|
+
A.StreamVideoCreated,
|
|
670
|
+
A.StreamVideoDone,
|
|
671
|
+
A.StreamVideoError,
|
|
672
|
+
A.StreamVideoRejected
|
|
673
|
+
].includes(se)) {
|
|
674
|
+
V = se === A.StreamVideoCreated ? O.Talking : O.Idle, (ue = n.onAgentActivityStateChange) == null || ue.call(n, V);
|
|
675
|
+
const te = ((je = (ye = S == null ? void 0 : S.getReport()) == null ? void 0 : ye.webRTCStats) == null ? void 0 : je.avgRtt) ?? 0, ve = te > 0 ? Math.round(te / 2 * 1e3) : 0, Fe = { ...X, downstreamNetworkLatency: ve };
|
|
676
|
+
i.debug && (($e = X == null ? void 0 : X.metadata) != null && $e.sentiment) && (Fe.sentiment = {
|
|
677
|
+
id: X.metadata.sentiment.id,
|
|
678
|
+
name: X.metadata.sentiment.sentiment
|
|
679
|
+
}), (Be = n.onMessage) == null || Be.call(n, se, Fe);
|
|
680
|
+
} else if (se === A.ChatAudioTranscribed) {
|
|
681
|
+
const te = Y.Transcribe;
|
|
682
|
+
(xe = n.onMessage) == null || xe.call(n, te, {
|
|
683
|
+
event: te,
|
|
684
|
+
...X
|
|
684
685
|
}), queueMicrotask(() => {
|
|
685
686
|
var ve;
|
|
686
687
|
(ve = n.onAgentActivityStateChange) == null || ve.call(n, O.Loading);
|
|
687
688
|
});
|
|
688
689
|
}
|
|
689
|
-
} catch (
|
|
690
|
-
r("Failed to parse data channel message:",
|
|
690
|
+
} catch (X) {
|
|
691
|
+
r("Failed to parse data channel message:", X);
|
|
691
692
|
}
|
|
692
693
|
}
|
|
693
|
-
function
|
|
694
|
-
var
|
|
695
|
-
r("Media devices error:",
|
|
694
|
+
function $(f) {
|
|
695
|
+
var h;
|
|
696
|
+
r("Media devices error:", f), (h = n.onError) == null || h.call(n, new Error(ge), { sessionId: z });
|
|
696
697
|
}
|
|
697
|
-
function
|
|
698
|
-
var
|
|
699
|
-
r("Encryption error:",
|
|
698
|
+
function G(f) {
|
|
699
|
+
var h;
|
|
700
|
+
r("Encryption error:", f), (h = n.onError) == null || h.call(n, new Error(ge), { sessionId: z });
|
|
700
701
|
}
|
|
701
|
-
function
|
|
702
|
-
r("Track subscription failed:", { trackSid:
|
|
702
|
+
function ae(f, h, y) {
|
|
703
|
+
r("Track subscription failed:", { trackSid: f, participant: h, reason: y });
|
|
703
704
|
}
|
|
704
|
-
function
|
|
705
|
-
if (!
|
|
706
|
-
const
|
|
707
|
-
if (
|
|
708
|
-
for (const [
|
|
709
|
-
if (
|
|
710
|
-
const
|
|
711
|
-
if (
|
|
712
|
-
return
|
|
705
|
+
function w(f) {
|
|
706
|
+
if (!u) return null;
|
|
707
|
+
const h = u.localParticipant.audioTrackPublications;
|
|
708
|
+
if (h) {
|
|
709
|
+
for (const [y, I] of h)
|
|
710
|
+
if (I.source === d.Source.Microphone && I.track) {
|
|
711
|
+
const J = I.track.mediaStreamTrack;
|
|
712
|
+
if (J === f || J && J.id === f.id)
|
|
713
|
+
return I;
|
|
713
714
|
}
|
|
714
715
|
}
|
|
715
716
|
return null;
|
|
716
717
|
}
|
|
717
|
-
function
|
|
718
|
+
function m(f) {
|
|
718
719
|
if (!k || !k.track)
|
|
719
720
|
return !1;
|
|
720
|
-
const
|
|
721
|
-
return
|
|
721
|
+
const h = k.track.mediaStreamTrack;
|
|
722
|
+
return h !== f && (h == null ? void 0 : h.id) !== f.id;
|
|
722
723
|
}
|
|
723
|
-
async function
|
|
724
|
-
var U,
|
|
725
|
-
if (!
|
|
724
|
+
async function M(f) {
|
|
725
|
+
var U, J;
|
|
726
|
+
if (!v || !u)
|
|
726
727
|
throw r("Room is not connected, cannot publish microphone stream"), new Error("Room is not connected");
|
|
727
|
-
const
|
|
728
|
-
if (
|
|
728
|
+
const h = f.getAudioTracks();
|
|
729
|
+
if (h.length === 0) {
|
|
729
730
|
r("No audio track found in the provided MediaStream");
|
|
730
731
|
return;
|
|
731
732
|
}
|
|
732
|
-
const
|
|
733
|
-
if (
|
|
733
|
+
const y = h[0], I = w(y);
|
|
734
|
+
if (I) {
|
|
734
735
|
r("Microphone track is already published, skipping", {
|
|
735
|
-
trackId:
|
|
736
|
-
publishedTrackId: (
|
|
737
|
-
}), k =
|
|
736
|
+
trackId: y.id,
|
|
737
|
+
publishedTrackId: (J = (U = I.track) == null ? void 0 : U.mediaStreamTrack) == null ? void 0 : J.id
|
|
738
|
+
}), k = I;
|
|
738
739
|
return;
|
|
739
740
|
}
|
|
740
|
-
|
|
741
|
+
m(y) && (r("Unpublishing existing microphone track before publishing new one"), await W()), r("Publishing microphone track from provided MediaStream", { trackId: y.id });
|
|
741
742
|
try {
|
|
742
|
-
k = await
|
|
743
|
+
k = await u.localParticipant.publishTrack(y, {
|
|
743
744
|
source: d.Source.Microphone
|
|
744
745
|
}), r("Microphone track published successfully", { trackSid: k.trackSid });
|
|
745
|
-
} catch (
|
|
746
|
-
throw r("Failed to publish microphone track:",
|
|
746
|
+
} catch (oe) {
|
|
747
|
+
throw r("Failed to publish microphone track:", oe), oe;
|
|
747
748
|
}
|
|
748
749
|
}
|
|
749
|
-
async function
|
|
750
|
+
async function W() {
|
|
750
751
|
if (!(!k || !k.track))
|
|
751
752
|
try {
|
|
752
|
-
|
|
753
|
-
} catch (
|
|
754
|
-
r("Error unpublishing microphone track:",
|
|
753
|
+
u && (await u.localParticipant.unpublishTrack(k.track), r("Microphone track unpublished"));
|
|
754
|
+
} catch (f) {
|
|
755
|
+
r("Error unpublishing microphone track:", f);
|
|
755
756
|
} finally {
|
|
756
757
|
k = null;
|
|
757
758
|
}
|
|
758
759
|
}
|
|
759
|
-
function
|
|
760
|
-
|
|
760
|
+
function ce() {
|
|
761
|
+
P && (P.getTracks().forEach((f) => f.stop()), P = null);
|
|
761
762
|
}
|
|
762
|
-
async function
|
|
763
|
-
var
|
|
764
|
-
if (!
|
|
765
|
-
r("Room is not connected for sending messages"), (
|
|
766
|
-
sessionId:
|
|
763
|
+
async function de(f, h) {
|
|
764
|
+
var y, I;
|
|
765
|
+
if (!v || !u) {
|
|
766
|
+
r("Room is not connected for sending messages"), (y = n.onError) == null || y.call(n, new Error(ge), {
|
|
767
|
+
sessionId: z
|
|
767
768
|
});
|
|
768
769
|
return;
|
|
769
770
|
}
|
|
770
771
|
try {
|
|
771
|
-
await
|
|
772
|
+
await u.localParticipant.sendText(f, { topic: h }), r("Message sent successfully:", f);
|
|
772
773
|
} catch (U) {
|
|
773
|
-
r("Failed to send message:", U), (
|
|
774
|
+
r("Failed to send message:", U), (I = n.onError) == null || I.call(n, new Error(ge), { sessionId: z });
|
|
774
775
|
}
|
|
775
776
|
}
|
|
776
|
-
async function
|
|
777
|
-
var
|
|
777
|
+
async function pe(f) {
|
|
778
|
+
var h;
|
|
778
779
|
try {
|
|
779
|
-
const
|
|
780
|
-
return
|
|
781
|
-
} catch (
|
|
782
|
-
r("Failed to send data channel message:",
|
|
780
|
+
const I = JSON.parse(f).topic;
|
|
781
|
+
return de("", I);
|
|
782
|
+
} catch (y) {
|
|
783
|
+
r("Failed to send data channel message:", y), (h = n.onError) == null || h.call(n, new Error(ge), { sessionId: z });
|
|
783
784
|
}
|
|
784
785
|
}
|
|
785
|
-
function
|
|
786
|
-
return
|
|
787
|
-
|
|
786
|
+
function we(f) {
|
|
787
|
+
return de(
|
|
788
|
+
f,
|
|
788
789
|
"lk.chat"
|
|
789
790
|
/* Chat */
|
|
790
791
|
);
|
|
791
792
|
}
|
|
792
|
-
async function Re(
|
|
793
|
-
var
|
|
794
|
-
|
|
793
|
+
async function Re(f) {
|
|
794
|
+
var h, y;
|
|
795
|
+
b && (clearTimeout(b), b = null), u && (await W(), (h = n.onConnectionStateChange) == null || h.call(n, T.Disconnecting, f), await u.disconnect()), ce(), v = !1, E = !1, (y = n.onAgentActivityStateChange) == null || y.call(n, O.Idle), V = O.Idle;
|
|
795
796
|
}
|
|
796
797
|
return {
|
|
797
|
-
speak(
|
|
798
|
-
const
|
|
799
|
-
return
|
|
800
|
-
|
|
798
|
+
speak(f) {
|
|
799
|
+
const h = typeof f == "string" ? f : JSON.stringify(f);
|
|
800
|
+
return de(
|
|
801
|
+
h,
|
|
801
802
|
"did.speak"
|
|
802
803
|
/* Speak */
|
|
803
804
|
);
|
|
804
805
|
},
|
|
805
806
|
disconnect: () => Re("user:disconnect"),
|
|
806
807
|
async reconnect() {
|
|
807
|
-
var
|
|
808
|
-
if ((
|
|
808
|
+
var f, h;
|
|
809
|
+
if ((u == null ? void 0 : u.state) === s.Connected) {
|
|
809
810
|
r("Room is already connected");
|
|
810
811
|
return;
|
|
811
812
|
}
|
|
812
|
-
if (!
|
|
813
|
+
if (!u || !ee || !Z)
|
|
813
814
|
throw r("Cannot reconnect: missing room, URL or token"), new Error("Cannot reconnect: session not available");
|
|
814
|
-
r("Reconnecting to LiveKit room, state:",
|
|
815
|
+
r("Reconnecting to LiveKit room, state:", u.state), E = !1, (f = n.onConnectionStateChange) == null || f.call(n, T.Connecting, "user:reconnect");
|
|
815
816
|
try {
|
|
816
|
-
if (await
|
|
817
|
-
if (r("Waiting for agent to join..."), !await new Promise((
|
|
817
|
+
if (await u.connect(ee, Z), r("Room reconnected"), v = !0, u.remoteParticipants.size === 0) {
|
|
818
|
+
if (r("Waiting for agent to join..."), !await new Promise((I) => {
|
|
818
819
|
const U = setTimeout(() => {
|
|
819
|
-
|
|
820
|
-
}, 5e3),
|
|
821
|
-
clearTimeout(U),
|
|
820
|
+
u == null || u.off(a.ParticipantConnected, J), I(!1);
|
|
821
|
+
}, 5e3), J = () => {
|
|
822
|
+
clearTimeout(U), u == null || u.off(a.ParticipantConnected, J), I(!0);
|
|
822
823
|
};
|
|
823
|
-
|
|
824
|
+
u == null || u.on(a.ParticipantConnected, J);
|
|
824
825
|
}))
|
|
825
|
-
throw r("Agent did not join within timeout"), await
|
|
826
|
+
throw r("Agent did not join within timeout"), await u.disconnect(), new Error("Agent did not rejoin the room");
|
|
826
827
|
r("Agent joined, reconnection successful");
|
|
827
828
|
}
|
|
828
|
-
} catch (
|
|
829
|
-
throw r("Failed to reconnect:",
|
|
829
|
+
} catch (y) {
|
|
830
|
+
throw r("Failed to reconnect:", y), (h = n.onConnectionStateChange) == null || h.call(n, T.Fail, "user:reconnect-failed"), y;
|
|
830
831
|
}
|
|
831
832
|
},
|
|
832
|
-
sendDataChannelMessage:
|
|
833
|
-
sendTextMessage:
|
|
834
|
-
publishMicrophoneStream:
|
|
835
|
-
unpublishMicrophoneStream:
|
|
836
|
-
sessionId:
|
|
837
|
-
streamId:
|
|
838
|
-
streamType:
|
|
833
|
+
sendDataChannelMessage: pe,
|
|
834
|
+
sendTextMessage: we,
|
|
835
|
+
publishMicrophoneStream: M,
|
|
836
|
+
unpublishMicrophoneStream: W,
|
|
837
|
+
sessionId: z,
|
|
838
|
+
streamId: z,
|
|
839
|
+
streamType: F,
|
|
839
840
|
interruptAvailable: !0,
|
|
840
841
|
triggersAvailable: !1
|
|
841
842
|
};
|
|
842
843
|
}
|
|
843
|
-
const
|
|
844
|
+
const Wt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
844
845
|
__proto__: null,
|
|
845
846
|
DataChannelTopic: Pe,
|
|
846
|
-
createLiveKitStreamingManager:
|
|
847
|
+
createLiveKitStreamingManager: Ut,
|
|
847
848
|
handleInitError: Ie
|
|
848
849
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
849
|
-
function
|
|
850
|
+
function Ot(e, t, i) {
|
|
850
851
|
if (!e)
|
|
851
852
|
throw new Error("Please connect to the agent first");
|
|
852
853
|
if (!e.interruptAvailable)
|
|
853
854
|
throw new Error("Interrupt is not enabled for this stream");
|
|
854
|
-
if (t !==
|
|
855
|
+
if (t !== ie.Fluent)
|
|
855
856
|
throw new Error("Interrupt only available for Fluent streams");
|
|
856
857
|
if (!i)
|
|
857
858
|
throw new Error("No active video to interrupt");
|
|
858
859
|
}
|
|
859
|
-
async function
|
|
860
|
+
async function Ht(e, t) {
|
|
860
861
|
const i = {
|
|
861
|
-
type:
|
|
862
|
+
type: A.StreamInterrupt,
|
|
862
863
|
videoId: t,
|
|
863
864
|
timestamp: Date.now()
|
|
864
865
|
};
|
|
865
866
|
e.sendDataChannelMessage(JSON.stringify(i));
|
|
866
867
|
}
|
|
867
|
-
async function
|
|
868
|
+
async function qt(e) {
|
|
868
869
|
const t = {
|
|
869
870
|
topic: Pe.Interrupt
|
|
870
871
|
};
|
|
871
872
|
e.sendDataChannelMessage(JSON.stringify(t));
|
|
872
873
|
}
|
|
873
|
-
function
|
|
874
|
+
function Qt(e) {
|
|
874
875
|
return new Promise((t, i) => {
|
|
875
|
-
const { callbacks: r, host: o, auth: a, externalId: s } = e, { onMessage: d = null, onOpen: n = null, onClose: c = null, onError: g = null } = r || {},
|
|
876
|
-
|
|
877
|
-
console.error(
|
|
878
|
-
},
|
|
879
|
-
n == null || n(
|
|
876
|
+
const { callbacks: r, host: o, auth: a, externalId: s } = e, { onMessage: d = null, onOpen: n = null, onClose: c = null, onError: g = null } = r || {}, p = new WebSocket(`${o}?authorization=${encodeURIComponent(Ye(a, s))}`);
|
|
877
|
+
p.onmessage = d, p.onclose = c, p.onerror = (u) => {
|
|
878
|
+
console.error(u), g == null || g("Websocket failed to connect", u), i(u);
|
|
879
|
+
}, p.onopen = (u) => {
|
|
880
|
+
n == null || n(u), t(p);
|
|
880
881
|
};
|
|
881
882
|
});
|
|
882
883
|
}
|
|
883
|
-
async function
|
|
884
|
+
async function Xt(e) {
|
|
884
885
|
const { retries: t = 1 } = e;
|
|
885
886
|
let i = null;
|
|
886
887
|
for (let r = 0; (i == null ? void 0 : i.readyState) !== WebSocket.OPEN; r++)
|
|
887
888
|
try {
|
|
888
|
-
i = await
|
|
889
|
+
i = await Qt(e);
|
|
889
890
|
} catch (o) {
|
|
890
891
|
if (r === t)
|
|
891
892
|
throw o;
|
|
892
|
-
await
|
|
893
|
+
await qe(r * 500);
|
|
893
894
|
}
|
|
894
895
|
return i;
|
|
895
896
|
}
|
|
896
|
-
async function
|
|
897
|
-
const o = i != null && i.onMessage ? [i.onMessage] : [], a = await
|
|
897
|
+
async function Yt(e, t, i, r) {
|
|
898
|
+
const o = i != null && i.onMessage ? [i.onMessage] : [], a = await Xt({
|
|
898
899
|
auth: e,
|
|
899
900
|
host: t,
|
|
900
901
|
externalId: r,
|
|
901
902
|
callbacks: {
|
|
902
903
|
onError: (s) => {
|
|
903
904
|
var d;
|
|
904
|
-
return (d = i.onError) == null ? void 0 : d.call(i, new
|
|
905
|
+
return (d = i.onError) == null ? void 0 : d.call(i, new ot(s));
|
|
905
906
|
},
|
|
906
907
|
onMessage(s) {
|
|
907
908
|
const d = JSON.parse(s.data);
|
|
@@ -915,7 +916,7 @@ async function Gt(e, t, i, r) {
|
|
|
915
916
|
subscribeToEvents: (s) => o.push(s)
|
|
916
917
|
};
|
|
917
918
|
}
|
|
918
|
-
function
|
|
919
|
+
function Gt(e) {
|
|
919
920
|
if (e.answer !== void 0)
|
|
920
921
|
return e.answer;
|
|
921
922
|
let t = 0, i = "";
|
|
@@ -923,7 +924,7 @@ function Zt(e) {
|
|
|
923
924
|
i += e[t++];
|
|
924
925
|
return i;
|
|
925
926
|
}
|
|
926
|
-
function
|
|
927
|
+
function Zt(e, t, i) {
|
|
927
928
|
if (!e.content)
|
|
928
929
|
return;
|
|
929
930
|
const r = t.messages[t.messages.length - 1];
|
|
@@ -937,17 +938,17 @@ function en(e, t, i) {
|
|
|
937
938
|
};
|
|
938
939
|
t.messages.push(o), i == null || i([...t.messages], "user");
|
|
939
940
|
}
|
|
940
|
-
function
|
|
941
|
-
if (e ===
|
|
942
|
-
|
|
941
|
+
function en(e, t, i, r, o) {
|
|
942
|
+
if (e === Y.Transcribe && t.content) {
|
|
943
|
+
Zt(t, r, o);
|
|
943
944
|
return;
|
|
944
945
|
}
|
|
945
|
-
if (!(e ===
|
|
946
|
+
if (!(e === Y.Partial || e === Y.Answer))
|
|
946
947
|
return;
|
|
947
948
|
const a = r.messages[r.messages.length - 1];
|
|
948
949
|
let s;
|
|
949
950
|
if (a != null && a.transcribed && a.role === "user")
|
|
950
|
-
e ===
|
|
951
|
+
e === Y.Answer && t.content, s = {
|
|
951
952
|
id: t.id || `assistant-${Date.now()}`,
|
|
952
953
|
role: t.role || "assistant",
|
|
953
954
|
content: t.content || "",
|
|
@@ -958,48 +959,48 @@ function tn(e, t, i, r, o) {
|
|
|
958
959
|
else
|
|
959
960
|
return;
|
|
960
961
|
const { content: d, sequence: n } = t;
|
|
961
|
-
e ===
|
|
962
|
-
const c =
|
|
963
|
-
(s.content !== c || e ===
|
|
962
|
+
e === Y.Partial ? i[n] = d : i.answer = d;
|
|
963
|
+
const c = Gt(i);
|
|
964
|
+
(s.content !== c || e === Y.Answer) && (s.content = c, o == null || o([...r.messages], e));
|
|
964
965
|
}
|
|
965
|
-
function
|
|
966
|
+
function tn(e, t, i, r, o) {
|
|
966
967
|
let a = {};
|
|
967
968
|
const s = () => a = {};
|
|
968
969
|
let d = "answer";
|
|
969
970
|
const n = (c, g) => {
|
|
970
|
-
var
|
|
971
|
-
g === "user" && s(), d = g, (
|
|
971
|
+
var p, u;
|
|
972
|
+
g === "user" && s(), d = g, (u = (p = i.callbacks).onNewMessage) == null || u.call(p, c, g);
|
|
972
973
|
};
|
|
973
974
|
return {
|
|
974
975
|
clearQueue: s,
|
|
975
976
|
onMessage: (c, g) => {
|
|
976
|
-
var
|
|
977
|
+
var p, u;
|
|
977
978
|
if ("content" in g) {
|
|
978
|
-
const
|
|
979
|
-
|
|
979
|
+
const v = c === A.ChatAnswer ? Y.Answer : c === A.ChatAudioTranscribed ? Y.Transcribe : c;
|
|
980
|
+
en(v, g, a, t, n), v === Y.Answer && e.track("agent-message-received", {
|
|
980
981
|
content: g.content,
|
|
981
982
|
messages: t.messages.length,
|
|
982
983
|
mode: t.chatMode
|
|
983
984
|
});
|
|
984
985
|
} else {
|
|
985
|
-
const
|
|
986
|
-
if (c = c, c ===
|
|
987
|
-
const
|
|
988
|
-
if ((
|
|
989
|
-
const
|
|
990
|
-
t.messages[t.messages.length - 1] =
|
|
986
|
+
const v = A, F = [v.StreamVideoDone, v.StreamVideoError, v.StreamVideoRejected], P = [v.StreamFailed, v.StreamVideoError, v.StreamVideoRejected], k = _t(g, r, { mode: t.chatMode });
|
|
987
|
+
if (c = c, c === v.StreamVideoCreated && (e.linkTrack("agent-video", k, v.StreamVideoCreated, ["start"]), g.sentiment)) {
|
|
988
|
+
const S = t.messages[t.messages.length - 1];
|
|
989
|
+
if ((S == null ? void 0 : S.role) === "assistant") {
|
|
990
|
+
const N = { ...S, sentiment: g.sentiment };
|
|
991
|
+
t.messages[t.messages.length - 1] = N, n == null || n([...t.messages], d);
|
|
991
992
|
}
|
|
992
993
|
}
|
|
993
|
-
if (
|
|
994
|
-
const
|
|
995
|
-
|
|
994
|
+
if (F.includes(c)) {
|
|
995
|
+
const S = c.split("/")[1];
|
|
996
|
+
P.includes(c) ? e.track("agent-video", { ...k, event: S }) : e.linkTrack("agent-video", { ...k, event: S }, c, ["done"]);
|
|
996
997
|
}
|
|
997
|
-
|
|
998
|
+
P.includes(c) && ((u = (p = i.callbacks).onError) == null || u.call(p, new Error(`Stream failed with event ${c}`), { data: g })), g.event === v.StreamDone && o();
|
|
998
999
|
}
|
|
999
1000
|
}
|
|
1000
1001
|
};
|
|
1001
1002
|
}
|
|
1002
|
-
function
|
|
1003
|
+
function nn(e, t, i, r) {
|
|
1003
1004
|
const o = Ae(e, `${t}/agents/${i}`, r);
|
|
1004
1005
|
return {
|
|
1005
1006
|
createStream(a, s) {
|
|
@@ -1036,8 +1037,8 @@ function rn(e, t, i, r) {
|
|
|
1036
1037
|
}
|
|
1037
1038
|
};
|
|
1038
1039
|
}
|
|
1039
|
-
const
|
|
1040
|
-
function
|
|
1040
|
+
const rn = (window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection).bind(window);
|
|
1041
|
+
function Ue(e) {
|
|
1041
1042
|
switch (e) {
|
|
1042
1043
|
case "connected":
|
|
1043
1044
|
return T.Connected;
|
|
@@ -1057,7 +1058,7 @@ function Je(e) {
|
|
|
1057
1058
|
return T.New;
|
|
1058
1059
|
}
|
|
1059
1060
|
}
|
|
1060
|
-
const
|
|
1061
|
+
const an = (e) => (t) => {
|
|
1061
1062
|
const [i, r = ""] = t.split(/:(.+)/);
|
|
1062
1063
|
try {
|
|
1063
1064
|
const o = JSON.parse(r);
|
|
@@ -1066,7 +1067,7 @@ const on = (e) => (t) => {
|
|
|
1066
1067
|
return e("Failed to parse data channel message, returning data as string", { subject: i, rawData: r, error: o }), { subject: i, data: r };
|
|
1067
1068
|
}
|
|
1068
1069
|
};
|
|
1069
|
-
function
|
|
1070
|
+
function on({
|
|
1070
1071
|
statsSignal: e,
|
|
1071
1072
|
dataChannelSignal: t,
|
|
1072
1073
|
onVideoStateChange: i,
|
|
@@ -1075,7 +1076,7 @@ function sn({
|
|
|
1075
1076
|
}) {
|
|
1076
1077
|
e === C.Start && t === C.Start ? (o("CALLBACK: onVideoStateChange(Start)"), i == null || i(C.Start)) : e === C.Stop && t === C.Stop && (o("CALLBACK: onVideoStateChange(Stop)"), i == null || i(C.Stop, r));
|
|
1077
1078
|
}
|
|
1078
|
-
function
|
|
1079
|
+
function sn({
|
|
1079
1080
|
statsSignal: e,
|
|
1080
1081
|
dataChannelSignal: t,
|
|
1081
1082
|
onVideoStateChange: i,
|
|
@@ -1085,7 +1086,7 @@ function cn({
|
|
|
1085
1086
|
}) {
|
|
1086
1087
|
e === C.Start ? (a("CALLBACK: onVideoStateChange(Start)"), i == null || i(C.Start)) : e === C.Stop && (a("CALLBACK: onVideoStateChange(Stop)"), i == null || i(C.Stop, o)), t === C.Start ? r == null || r(O.Talking) : t === C.Stop && (r == null || r(O.Idle));
|
|
1087
1088
|
}
|
|
1088
|
-
function
|
|
1089
|
+
function We({
|
|
1089
1090
|
statsSignal: e,
|
|
1090
1091
|
dataChannelSignal: t,
|
|
1091
1092
|
onVideoStateChange: i,
|
|
@@ -1094,7 +1095,7 @@ function Ue({
|
|
|
1094
1095
|
report: a,
|
|
1095
1096
|
log: s
|
|
1096
1097
|
}) {
|
|
1097
|
-
o ===
|
|
1098
|
+
o === ie.Legacy ? on({ statsSignal: e, dataChannelSignal: t, onVideoStateChange: i, report: a, log: s }) : o === ie.Fluent && sn({
|
|
1098
1099
|
statsSignal: e,
|
|
1099
1100
|
dataChannelSignal: t,
|
|
1100
1101
|
onVideoStateChange: i,
|
|
@@ -1103,161 +1104,161 @@ function Ue({
|
|
|
1103
1104
|
log: s
|
|
1104
1105
|
});
|
|
1105
1106
|
}
|
|
1106
|
-
async function
|
|
1107
|
-
var
|
|
1108
|
-
const n =
|
|
1109
|
-
let g = !1,
|
|
1110
|
-
const { startConnection:
|
|
1107
|
+
async function cn(e, t, { debug: i = !1, callbacks: r, auth: o, baseURL: a = he, analytics: s }, d) {
|
|
1108
|
+
var ae;
|
|
1109
|
+
const n = et(i, "WebRTCStreamingManager"), c = an(n);
|
|
1110
|
+
let g = !1, p = !1, u = C.Stop, v = C.Stop;
|
|
1111
|
+
const { startConnection: F, sendStreamRequest: P, close: k, createStream: S, addIceCandidate: N } = nn(
|
|
1111
1112
|
o,
|
|
1112
1113
|
a,
|
|
1113
1114
|
e,
|
|
1114
1115
|
r.onError
|
|
1115
1116
|
), {
|
|
1116
|
-
id:
|
|
1117
|
-
offer:
|
|
1118
|
-
ice_servers:
|
|
1117
|
+
id: E,
|
|
1118
|
+
offer: b,
|
|
1119
|
+
ice_servers: V,
|
|
1119
1120
|
session_id: H,
|
|
1120
|
-
fluent:
|
|
1121
|
-
interrupt_enabled:
|
|
1122
|
-
triggers_enabled:
|
|
1123
|
-
} = await
|
|
1124
|
-
(
|
|
1125
|
-
const
|
|
1121
|
+
fluent: z,
|
|
1122
|
+
interrupt_enabled: Z,
|
|
1123
|
+
triggers_enabled: ee
|
|
1124
|
+
} = await S(t, d);
|
|
1125
|
+
(ae = r.onStreamCreated) == null || ae.call(r, { stream_id: E, session_id: H, agent_id: e });
|
|
1126
|
+
const l = new rn({ iceServers: V }), D = l.createDataChannel("JanusDataChannel");
|
|
1126
1127
|
if (!H)
|
|
1127
1128
|
throw new Error("Could not create session_id");
|
|
1128
|
-
const R =
|
|
1129
|
+
const R = z ? ie.Fluent : ie.Legacy;
|
|
1129
1130
|
s.enrich({
|
|
1130
1131
|
"stream-type": R
|
|
1131
1132
|
});
|
|
1132
|
-
const
|
|
1133
|
-
var
|
|
1134
|
-
g = !0,
|
|
1135
|
-
},
|
|
1136
|
-
() =>
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
(
|
|
1140
|
-
statsSignal:
|
|
1141
|
-
dataChannelSignal: R ===
|
|
1133
|
+
const K = t.stream_warmup && !z, L = () => g, _ = () => {
|
|
1134
|
+
var w;
|
|
1135
|
+
g = !0, p && (n("CALLBACK: onConnectionStateChange(Connected)"), (w = r.onConnectionStateChange) == null || w.call(r, T.Connected));
|
|
1136
|
+
}, B = tt(
|
|
1137
|
+
() => l.getStats(),
|
|
1138
|
+
L,
|
|
1139
|
+
_,
|
|
1140
|
+
(w, m) => We({
|
|
1141
|
+
statsSignal: v = w,
|
|
1142
|
+
dataChannelSignal: R === ie.Legacy ? u : void 0,
|
|
1142
1143
|
onVideoStateChange: r.onVideoStateChange,
|
|
1143
1144
|
onAgentActivityStateChange: r.onAgentActivityStateChange,
|
|
1144
1145
|
report: m,
|
|
1145
1146
|
streamType: R,
|
|
1146
1147
|
log: n
|
|
1147
1148
|
}),
|
|
1148
|
-
(
|
|
1149
|
+
(w) => {
|
|
1149
1150
|
var m;
|
|
1150
|
-
return (m = r.onConnectivityStateChange) == null ? void 0 : m.call(r,
|
|
1151
|
+
return (m = r.onConnectivityStateChange) == null ? void 0 : m.call(r, w);
|
|
1151
1152
|
}
|
|
1152
1153
|
);
|
|
1153
|
-
|
|
1154
|
+
B.start(), l.onicecandidate = (w) => {
|
|
1154
1155
|
var m;
|
|
1155
|
-
n("peerConnection.onicecandidate",
|
|
1156
|
+
n("peerConnection.onicecandidate", w);
|
|
1156
1157
|
try {
|
|
1157
|
-
|
|
1158
|
-
|
|
1158
|
+
w.candidate && w.candidate.sdpMid && w.candidate.sdpMLineIndex !== null ? N(
|
|
1159
|
+
E,
|
|
1159
1160
|
{
|
|
1160
|
-
candidate:
|
|
1161
|
-
sdpMid:
|
|
1162
|
-
sdpMLineIndex:
|
|
1161
|
+
candidate: w.candidate.candidate,
|
|
1162
|
+
sdpMid: w.candidate.sdpMid,
|
|
1163
|
+
sdpMLineIndex: w.candidate.sdpMLineIndex
|
|
1163
1164
|
},
|
|
1164
1165
|
H,
|
|
1165
1166
|
d
|
|
1166
|
-
) :
|
|
1167
|
-
} catch (
|
|
1168
|
-
(m = r.onError) == null || m.call(r,
|
|
1167
|
+
) : N(E, { candidate: null }, H, d);
|
|
1168
|
+
} catch (M) {
|
|
1169
|
+
(m = r.onError) == null || m.call(r, M, { streamId: E });
|
|
1169
1170
|
}
|
|
1170
|
-
},
|
|
1171
|
-
|
|
1171
|
+
}, D.onopen = () => {
|
|
1172
|
+
p = !0, (!K || g) && _();
|
|
1172
1173
|
};
|
|
1173
|
-
const q = (
|
|
1174
|
+
const q = (w) => {
|
|
1174
1175
|
var m;
|
|
1175
|
-
(m = r.onVideoIdChange) == null || m.call(r,
|
|
1176
|
+
(m = r.onVideoIdChange) == null || m.call(r, w);
|
|
1176
1177
|
};
|
|
1177
|
-
function
|
|
1178
|
-
if (
|
|
1179
|
-
const
|
|
1180
|
-
q(
|
|
1178
|
+
function Q(w, m) {
|
|
1179
|
+
if (w === A.StreamStarted && typeof m == "object" && "metadata" in m) {
|
|
1180
|
+
const M = m.metadata;
|
|
1181
|
+
q(M.videoId);
|
|
1181
1182
|
}
|
|
1182
|
-
|
|
1183
|
-
statsSignal: R ===
|
|
1184
|
-
dataChannelSignal:
|
|
1183
|
+
w === A.StreamDone && q(null), u = w === A.StreamStarted ? C.Start : C.Stop, We({
|
|
1184
|
+
statsSignal: R === ie.Legacy ? v : void 0,
|
|
1185
|
+
dataChannelSignal: u,
|
|
1185
1186
|
onVideoStateChange: r.onVideoStateChange,
|
|
1186
1187
|
onAgentActivityStateChange: r.onAgentActivityStateChange,
|
|
1187
1188
|
streamType: R,
|
|
1188
1189
|
log: n
|
|
1189
1190
|
});
|
|
1190
1191
|
}
|
|
1191
|
-
function j(
|
|
1192
|
-
var
|
|
1193
|
-
const
|
|
1194
|
-
|
|
1192
|
+
function j(w, m) {
|
|
1193
|
+
var W;
|
|
1194
|
+
const M = typeof m == "string" ? m : m == null ? void 0 : m.metadata;
|
|
1195
|
+
M && s.enrich({ streamMetadata: M }), (W = r.onStreamReady) == null || W.call(r);
|
|
1195
1196
|
}
|
|
1196
|
-
const
|
|
1197
|
-
[
|
|
1198
|
-
[
|
|
1199
|
-
[
|
|
1197
|
+
const $ = {
|
|
1198
|
+
[A.StreamStarted]: Q,
|
|
1199
|
+
[A.StreamDone]: Q,
|
|
1200
|
+
[A.StreamReady]: j
|
|
1200
1201
|
};
|
|
1201
|
-
|
|
1202
|
-
var
|
|
1203
|
-
const { subject: m, data:
|
|
1204
|
-
(
|
|
1205
|
-
},
|
|
1202
|
+
D.onmessage = (w) => {
|
|
1203
|
+
var W;
|
|
1204
|
+
const { subject: m, data: M } = c(w.data);
|
|
1205
|
+
(W = $[m]) == null || W.call($, m, M);
|
|
1206
|
+
}, l.oniceconnectionstatechange = () => {
|
|
1206
1207
|
var m;
|
|
1207
|
-
n("peerConnection.oniceconnectionstatechange => " +
|
|
1208
|
-
const
|
|
1209
|
-
|
|
1210
|
-
},
|
|
1208
|
+
n("peerConnection.oniceconnectionstatechange => " + l.iceConnectionState);
|
|
1209
|
+
const w = Ue(l.iceConnectionState);
|
|
1210
|
+
w !== T.Connected && ((m = r.onConnectionStateChange) == null || m.call(r, w));
|
|
1211
|
+
}, l.ontrack = (w) => {
|
|
1211
1212
|
var m;
|
|
1212
|
-
n("peerConnection.ontrack",
|
|
1213
|
-
}, await
|
|
1214
|
-
const
|
|
1215
|
-
return n("create answer OK"), await
|
|
1213
|
+
n("peerConnection.ontrack", w), n("CALLBACK: onSrcObjectReady"), (m = r.onSrcObjectReady) == null || m.call(r, w.streams[0]);
|
|
1214
|
+
}, await l.setRemoteDescription(b), n("set remote description OK");
|
|
1215
|
+
const G = await l.createAnswer();
|
|
1216
|
+
return n("create answer OK"), await l.setLocalDescription(G), n("set local description OK"), await F(E, G, H, d), n("start connection OK"), {
|
|
1216
1217
|
/**
|
|
1217
1218
|
* Method to send request to server to get clip or talk depend on you payload
|
|
1218
1219
|
* @param payload
|
|
1219
1220
|
*/
|
|
1220
|
-
speak(
|
|
1221
|
-
return
|
|
1221
|
+
speak(w) {
|
|
1222
|
+
return P(E, H, w);
|
|
1222
1223
|
},
|
|
1223
1224
|
/**
|
|
1224
1225
|
* Method to close RTC connection
|
|
1225
1226
|
*/
|
|
1226
1227
|
async disconnect() {
|
|
1227
|
-
var
|
|
1228
|
-
if (
|
|
1229
|
-
const m =
|
|
1230
|
-
if (
|
|
1228
|
+
var w;
|
|
1229
|
+
if (E) {
|
|
1230
|
+
const m = Ue(l.iceConnectionState);
|
|
1231
|
+
if (l) {
|
|
1231
1232
|
if (m === T.New) {
|
|
1232
|
-
|
|
1233
|
+
B.stop();
|
|
1233
1234
|
return;
|
|
1234
1235
|
}
|
|
1235
|
-
|
|
1236
|
+
l.close(), l.oniceconnectionstatechange = null, l.onnegotiationneeded = null, l.onicecandidate = null, l.ontrack = null;
|
|
1236
1237
|
}
|
|
1237
1238
|
try {
|
|
1238
|
-
m === T.Connected && await
|
|
1239
|
+
m === T.Connected && await k(E, H).catch((M) => {
|
|
1239
1240
|
});
|
|
1240
|
-
} catch (
|
|
1241
|
-
n("Error on close stream connection",
|
|
1241
|
+
} catch (M) {
|
|
1242
|
+
n("Error on close stream connection", M);
|
|
1242
1243
|
}
|
|
1243
|
-
(
|
|
1244
|
+
(w = r.onAgentActivityStateChange) == null || w.call(r, O.Idle), B.stop();
|
|
1244
1245
|
}
|
|
1245
1246
|
},
|
|
1246
1247
|
/**
|
|
1247
1248
|
* Method to send data channel messages to the server
|
|
1248
1249
|
*/
|
|
1249
|
-
sendDataChannelMessage(
|
|
1250
|
-
var m,
|
|
1251
|
-
if (!g ||
|
|
1250
|
+
sendDataChannelMessage(w) {
|
|
1251
|
+
var m, M;
|
|
1252
|
+
if (!g || D.readyState !== "open") {
|
|
1252
1253
|
n("Data channel is not ready for sending messages"), (m = r.onError) == null || m.call(r, new Error("Data channel is not ready for sending messages"), {
|
|
1253
|
-
streamId:
|
|
1254
|
+
streamId: E
|
|
1254
1255
|
});
|
|
1255
1256
|
return;
|
|
1256
1257
|
}
|
|
1257
1258
|
try {
|
|
1258
|
-
|
|
1259
|
-
} catch (
|
|
1260
|
-
n("Error sending data channel message",
|
|
1259
|
+
D.send(w);
|
|
1260
|
+
} catch (W) {
|
|
1261
|
+
n("Error sending data channel message", W), (M = r.onError) == null || M.call(r, W, { streamId: E });
|
|
1261
1262
|
}
|
|
1262
1263
|
},
|
|
1263
1264
|
/**
|
|
@@ -1267,25 +1268,25 @@ async function dn(e, t, { debug: i = !1, callbacks: r, auth: o, baseURL: a = pe,
|
|
|
1267
1268
|
/**
|
|
1268
1269
|
* Id of current RTC stream
|
|
1269
1270
|
*/
|
|
1270
|
-
streamId:
|
|
1271
|
+
streamId: E,
|
|
1271
1272
|
streamType: R,
|
|
1272
|
-
interruptAvailable:
|
|
1273
|
-
triggersAvailable:
|
|
1273
|
+
interruptAvailable: Z ?? !1,
|
|
1274
|
+
triggersAvailable: ee ?? !1
|
|
1274
1275
|
};
|
|
1275
1276
|
}
|
|
1276
1277
|
var Te = /* @__PURE__ */ ((e) => (e.V1 = "v1", e.V2 = "v2", e))(Te || {});
|
|
1277
|
-
async function
|
|
1278
|
+
async function dn(e, t, i, r) {
|
|
1278
1279
|
const o = e.id;
|
|
1279
1280
|
switch (t.version) {
|
|
1280
1281
|
case "v1": {
|
|
1281
1282
|
const { version: a, ...s } = t;
|
|
1282
|
-
return
|
|
1283
|
+
return cn(o, s, i, r);
|
|
1283
1284
|
}
|
|
1284
1285
|
case "v2": {
|
|
1285
1286
|
const { version: a, ...s } = t;
|
|
1286
1287
|
switch (s.transport_provider) {
|
|
1287
1288
|
case ke.Livekit:
|
|
1288
|
-
const { createLiveKitStreamingManager: d } = await Promise.resolve().then(() =>
|
|
1289
|
+
const { createLiveKitStreamingManager: d } = await Promise.resolve().then(() => Wt);
|
|
1289
1290
|
return d(o, s, i);
|
|
1290
1291
|
default:
|
|
1291
1292
|
throw new Error(`Unsupported transport provider: ${s.transport_provider}`);
|
|
@@ -1295,13 +1296,13 @@ async function un(e, t, i, r) {
|
|
|
1295
1296
|
throw new Error(`Invalid stream version: ${t.version}`);
|
|
1296
1297
|
}
|
|
1297
1298
|
}
|
|
1298
|
-
const
|
|
1299
|
-
function
|
|
1299
|
+
const un = "cht";
|
|
1300
|
+
function ln() {
|
|
1300
1301
|
return {
|
|
1301
1302
|
transport_provider: ke.Livekit
|
|
1302
1303
|
};
|
|
1303
1304
|
}
|
|
1304
|
-
function
|
|
1305
|
+
function fn(e) {
|
|
1305
1306
|
var o, a;
|
|
1306
1307
|
const { streamOptions: t } = e ?? {}, i = ((o = e == null ? void 0 : e.mixpanelAdditionalProperties) == null ? void 0 : o.plan) !== void 0 ? {
|
|
1307
1308
|
plan: (a = e.mixpanelAdditionalProperties) == null ? void 0 : a.plan
|
|
@@ -1314,16 +1315,16 @@ function mn(e) {
|
|
|
1314
1315
|
fluent: t == null ? void 0 : t.fluent
|
|
1315
1316
|
}, ...i && { end_user_data: i } };
|
|
1316
1317
|
}
|
|
1317
|
-
function
|
|
1318
|
-
return _e(e.presenter.type) ? { version: Te.V2, ...
|
|
1318
|
+
function mn(e, t) {
|
|
1319
|
+
return _e(e.presenter.type) ? { version: Te.V2, ...ln() } : { version: Te.V1, ...fn(t) };
|
|
1319
1320
|
}
|
|
1320
|
-
function
|
|
1321
|
+
function gn(e, t, i) {
|
|
1321
1322
|
i.track("agent-connection-state-change", { state: e, ...t && { reason: t } });
|
|
1322
1323
|
}
|
|
1323
|
-
function
|
|
1324
|
-
o ===
|
|
1324
|
+
function hn(e, t, i, r, o) {
|
|
1325
|
+
o === ie.Fluent ? pn(e, t, i, r, o) : yn(e, t, i, r, o);
|
|
1325
1326
|
}
|
|
1326
|
-
function
|
|
1327
|
+
function pn(e, t, i, r, o) {
|
|
1327
1328
|
e === C.Start ? r.track("stream-session", { event: "start", "stream-type": o }) : e === C.Stop && r.track("stream-session", {
|
|
1328
1329
|
event: "stop",
|
|
1329
1330
|
is_greenscreen: t.presenter.type === "clip" && t.presenter.is_greenscreen,
|
|
@@ -1332,12 +1333,12 @@ function wn(e, t, i, r, o) {
|
|
|
1332
1333
|
...i
|
|
1333
1334
|
});
|
|
1334
1335
|
}
|
|
1335
|
-
function
|
|
1336
|
-
|
|
1336
|
+
function wn(e, t, i, r) {
|
|
1337
|
+
ne.get() <= 0 || (e === C.Start ? i.linkTrack(
|
|
1337
1338
|
"agent-video",
|
|
1338
|
-
{ event: "start", latency:
|
|
1339
|
+
{ event: "start", latency: ne.get(!0), "stream-type": r },
|
|
1339
1340
|
"start",
|
|
1340
|
-
[
|
|
1341
|
+
[A.StreamVideoCreated]
|
|
1341
1342
|
) : e === C.Stop && i.linkTrack(
|
|
1342
1343
|
"agent-video",
|
|
1343
1344
|
{
|
|
@@ -1347,15 +1348,15 @@ function yn(e, t, i, r) {
|
|
|
1347
1348
|
"stream-type": r
|
|
1348
1349
|
},
|
|
1349
1350
|
"done",
|
|
1350
|
-
[
|
|
1351
|
+
[A.StreamVideoDone]
|
|
1351
1352
|
));
|
|
1352
1353
|
}
|
|
1353
|
-
function
|
|
1354
|
-
|
|
1354
|
+
function yn(e, t, i, r, o) {
|
|
1355
|
+
ne.get() <= 0 || (e === C.Start ? r.linkTrack(
|
|
1355
1356
|
"agent-video",
|
|
1356
|
-
{ event: "start", latency:
|
|
1357
|
+
{ event: "start", latency: ne.get(!0), "stream-type": o },
|
|
1357
1358
|
"start",
|
|
1358
|
-
[
|
|
1359
|
+
[A.StreamVideoCreated]
|
|
1359
1360
|
) : e === C.Stop && r.linkTrack(
|
|
1360
1361
|
"agent-video",
|
|
1361
1362
|
{
|
|
@@ -1366,17 +1367,17 @@ function vn(e, t, i, r, o) {
|
|
|
1366
1367
|
...i
|
|
1367
1368
|
},
|
|
1368
1369
|
"done",
|
|
1369
|
-
[
|
|
1370
|
+
[A.StreamVideoDone]
|
|
1370
1371
|
));
|
|
1371
1372
|
}
|
|
1372
|
-
function
|
|
1373
|
-
return
|
|
1373
|
+
function Oe(e, t, i, r) {
|
|
1374
|
+
return ne.reset(), Ne.update(), new Promise(async (o, a) => {
|
|
1374
1375
|
try {
|
|
1375
1376
|
let s, d = !1;
|
|
1376
|
-
const n =
|
|
1377
|
+
const n = mn(e, t);
|
|
1377
1378
|
i.enrich({
|
|
1378
1379
|
"stream-version": n.version.toString()
|
|
1379
|
-
}), s = await
|
|
1380
|
+
}), s = await dn(
|
|
1380
1381
|
e,
|
|
1381
1382
|
n,
|
|
1382
1383
|
{
|
|
@@ -1385,12 +1386,12 @@ function We(e, t, i, r) {
|
|
|
1385
1386
|
callbacks: {
|
|
1386
1387
|
...t.callbacks,
|
|
1387
1388
|
onConnectionStateChange: (c, g) => {
|
|
1388
|
-
var
|
|
1389
|
-
(
|
|
1389
|
+
var p, u;
|
|
1390
|
+
(u = (p = t.callbacks).onConnectionStateChange) == null || u.call(p, c), gn(c, g, i), c === T.Connected && (s ? o(s) : d = !0);
|
|
1390
1391
|
},
|
|
1391
1392
|
onVideoStateChange: (c, g) => {
|
|
1392
|
-
var
|
|
1393
|
-
(
|
|
1393
|
+
var p, u;
|
|
1394
|
+
(u = (p = t.callbacks).onVideoStateChange) == null || u.call(p, c), hn(
|
|
1394
1395
|
c,
|
|
1395
1396
|
e,
|
|
1396
1397
|
g,
|
|
@@ -1399,8 +1400,8 @@ function We(e, t, i, r) {
|
|
|
1399
1400
|
);
|
|
1400
1401
|
},
|
|
1401
1402
|
onAgentActivityStateChange: (c) => {
|
|
1402
|
-
var g,
|
|
1403
|
-
(
|
|
1403
|
+
var g, p;
|
|
1404
|
+
(p = (g = t.callbacks).onAgentActivityStateChange) == null || p.call(g, c), c === O.Talking ? Me.update() : Me.reset(), wn(
|
|
1404
1405
|
c === O.Talking ? C.Start : C.Stop,
|
|
1405
1406
|
e,
|
|
1406
1407
|
i,
|
|
@@ -1420,53 +1421,53 @@ function We(e, t, i, r) {
|
|
|
1420
1421
|
}
|
|
1421
1422
|
});
|
|
1422
1423
|
}
|
|
1423
|
-
async function
|
|
1424
|
-
var g,
|
|
1424
|
+
async function vn(e, t, i, r, o) {
|
|
1425
|
+
var g, p, u, v;
|
|
1425
1426
|
const a = async () => {
|
|
1426
1427
|
if (_e(e.presenter.type)) {
|
|
1427
|
-
const
|
|
1428
|
+
const F = await Oe(e, t, r), P = `${un}_${F.sessionId}`, k = (/* @__PURE__ */ new Date()).toISOString();
|
|
1428
1429
|
return { chatResult: {
|
|
1429
1430
|
chatMode: x.Functional,
|
|
1430
1431
|
chat: {
|
|
1431
|
-
id:
|
|
1432
|
+
id: P,
|
|
1432
1433
|
agent_id: e.id,
|
|
1433
1434
|
owner_id: e.owner_id ?? "",
|
|
1434
|
-
created:
|
|
1435
|
-
modified:
|
|
1436
|
-
agent_id__created_at:
|
|
1437
|
-
agent_id__modified_at:
|
|
1435
|
+
created: k,
|
|
1436
|
+
modified: k,
|
|
1437
|
+
agent_id__created_at: k,
|
|
1438
|
+
agent_id__modified_at: k,
|
|
1438
1439
|
chat_mode: x.Functional,
|
|
1439
1440
|
messages: []
|
|
1440
1441
|
}
|
|
1441
|
-
}, streamingManager:
|
|
1442
|
+
}, streamingManager: F };
|
|
1442
1443
|
} else {
|
|
1443
|
-
const
|
|
1444
|
-
let
|
|
1444
|
+
const F = new AbortController(), P = F.signal;
|
|
1445
|
+
let k;
|
|
1445
1446
|
try {
|
|
1446
|
-
const
|
|
1447
|
+
const S = Ze(
|
|
1447
1448
|
e,
|
|
1448
1449
|
i,
|
|
1449
1450
|
r,
|
|
1450
1451
|
t.mode,
|
|
1451
1452
|
t.persistentChat,
|
|
1452
1453
|
o
|
|
1453
|
-
),
|
|
1454
|
-
return { chatResult:
|
|
1455
|
-
} catch (
|
|
1456
|
-
throw
|
|
1457
|
-
}),
|
|
1454
|
+
), N = Oe(e, t, r, P).then((V) => (k = V, V)), [E, b] = await Promise.all([S, N]);
|
|
1455
|
+
return { chatResult: E, streamingManager: b };
|
|
1456
|
+
} catch (S) {
|
|
1457
|
+
throw F.abort(), k && await k.disconnect().catch(() => {
|
|
1458
|
+
}), S;
|
|
1458
1459
|
}
|
|
1459
1460
|
}
|
|
1460
1461
|
}, { chatResult: s, streamingManager: d } = await a(), { chat: n, chatMode: c } = s;
|
|
1461
|
-
return c && t.mode !== void 0 && c !== t.mode && (t.mode = c, (
|
|
1462
|
+
return c && t.mode !== void 0 && c !== t.mode && (t.mode = c, (p = (g = t.callbacks).onModeChange) == null || p.call(g, c), c !== x.Functional) ? ((v = (u = t.callbacks).onError) == null || v.call(u, new at(c)), d == null || d.disconnect(), { chat: n }) : { chat: n, streamingManager: d };
|
|
1462
1463
|
}
|
|
1463
|
-
async function
|
|
1464
|
-
var H,
|
|
1464
|
+
async function kn(e, t) {
|
|
1465
|
+
var H, z, Z, ee;
|
|
1465
1466
|
let i = !0, r = null;
|
|
1466
|
-
const o = t.mixpanelKey ||
|
|
1467
|
+
const o = t.mixpanelKey || vt, a = t.wsURL || yt, s = t.baseURL || he, d = t.mode || x.Functional, n = {
|
|
1467
1468
|
messages: [],
|
|
1468
1469
|
chatMode: d
|
|
1469
|
-
}, c =
|
|
1470
|
+
}, c = Lt({
|
|
1470
1471
|
token: o,
|
|
1471
1472
|
agentId: e,
|
|
1472
1473
|
isEnabled: t.enableAnalitics,
|
|
@@ -1476,302 +1477,302 @@ async function Rn(e, t) {
|
|
|
1476
1477
|
Ke(() => {
|
|
1477
1478
|
c.track("agent-sdk", { event: "init" }, g);
|
|
1478
1479
|
});
|
|
1479
|
-
const
|
|
1480
|
-
t.debug = t.debug || ((H =
|
|
1481
|
-
const
|
|
1482
|
-
c.enrich(
|
|
1483
|
-
const { onMessage:
|
|
1480
|
+
const p = Et(t.auth, s, t.callbacks.onError, t.externalId), u = await p.getById(e);
|
|
1481
|
+
t.debug = t.debug || ((H = u == null ? void 0 : u.advanced_settings) == null ? void 0 : H.ui_debug_mode);
|
|
1482
|
+
const v = _e(u.presenter.type);
|
|
1483
|
+
c.enrich(It(u));
|
|
1484
|
+
const { onMessage: F, clearQueue: P } = tn(
|
|
1484
1485
|
c,
|
|
1485
1486
|
n,
|
|
1486
1487
|
t,
|
|
1487
|
-
|
|
1488
|
+
u,
|
|
1488
1489
|
() => {
|
|
1489
|
-
var
|
|
1490
|
-
return (
|
|
1490
|
+
var l;
|
|
1491
|
+
return (l = n.socketManager) == null ? void 0 : l.disconnect();
|
|
1491
1492
|
}
|
|
1492
1493
|
);
|
|
1493
|
-
n.messages =
|
|
1494
|
-
const
|
|
1495
|
-
r =
|
|
1496
|
-
},
|
|
1497
|
-
var R,
|
|
1498
|
-
const
|
|
1494
|
+
n.messages = bt(t.initialMessages), (Z = (z = t.callbacks).onNewMessage) == null || Z.call(z, [...n.messages], "answer");
|
|
1495
|
+
const k = (l) => {
|
|
1496
|
+
r = l;
|
|
1497
|
+
}, S = ({ type: l }) => {
|
|
1498
|
+
var R, K, L;
|
|
1499
|
+
const D = n.messages[n.messages.length - 1];
|
|
1499
1500
|
c.track("agent-video-interrupt", {
|
|
1500
|
-
type:
|
|
1501
|
+
type: l || "click",
|
|
1501
1502
|
video_duration_to_interrupt: Me.get(!0),
|
|
1502
|
-
message_duration_to_interrupt:
|
|
1503
|
-
}),
|
|
1504
|
-
},
|
|
1503
|
+
message_duration_to_interrupt: ne.get(!0)
|
|
1504
|
+
}), D.interrupted = !0, (K = (R = t.callbacks).onNewMessage) == null || K.call(R, [...n.messages], "answer"), v ? qt(n.streamingManager) : (Ot(n.streamingManager, (L = n.streamingManager) == null ? void 0 : L.streamType, r), Ht(n.streamingManager, r));
|
|
1505
|
+
}, N = Date.now();
|
|
1505
1506
|
Ke(() => {
|
|
1506
|
-
c.track("agent-sdk", { event: "loaded", ...
|
|
1507
|
+
c.track("agent-sdk", { event: "loaded", ...Mt(u) }, N);
|
|
1507
1508
|
});
|
|
1508
|
-
async function
|
|
1509
|
-
var
|
|
1510
|
-
(q = (
|
|
1511
|
-
const
|
|
1509
|
+
async function E(l) {
|
|
1510
|
+
var B, q, Q, j, $, G, ae;
|
|
1511
|
+
(q = (B = t.callbacks).onConnectionStateChange) == null || q.call(B, T.Connecting), ne.reset(), l && !i && (delete n.chat, (j = (Q = t.callbacks).onNewMessage) == null || j.call(Q, [...n.messages], "answer"));
|
|
1512
|
+
const D = d === x.DirectPlayback || v ? Promise.resolve(void 0) : Yt(
|
|
1512
1513
|
t.auth,
|
|
1513
1514
|
a,
|
|
1514
|
-
{ onMessage:
|
|
1515
|
+
{ onMessage: F, onError: t.callbacks.onError },
|
|
1515
1516
|
t.externalId
|
|
1516
1517
|
), R = De(
|
|
1517
|
-
() =>
|
|
1518
|
-
|
|
1518
|
+
() => vn(
|
|
1519
|
+
u,
|
|
1519
1520
|
{
|
|
1520
1521
|
...t,
|
|
1521
1522
|
mode: d,
|
|
1522
1523
|
callbacks: {
|
|
1523
1524
|
...t.callbacks,
|
|
1524
|
-
onVideoIdChange:
|
|
1525
|
-
onMessage:
|
|
1526
|
-
onInterruptDetected:
|
|
1525
|
+
onVideoIdChange: k,
|
|
1526
|
+
onMessage: F,
|
|
1527
|
+
onInterruptDetected: S
|
|
1527
1528
|
}
|
|
1528
1529
|
},
|
|
1529
|
-
|
|
1530
|
+
p,
|
|
1530
1531
|
c,
|
|
1531
1532
|
n.chat
|
|
1532
1533
|
),
|
|
1533
1534
|
{
|
|
1534
1535
|
limit: 3,
|
|
1535
|
-
timeout:
|
|
1536
|
+
timeout: pt,
|
|
1536
1537
|
timeoutErrorMessage: "Timeout initializing the stream",
|
|
1537
|
-
shouldRetryFn: (
|
|
1538
|
+
shouldRetryFn: (w) => (w == null ? void 0 : w.message) !== "Could not connect" && w.status !== 429 && (w == null ? void 0 : w.message) !== "InsufficientCreditsError",
|
|
1538
1539
|
delayMs: 1e3
|
|
1539
1540
|
}
|
|
1540
|
-
).catch((
|
|
1541
|
-
var m,
|
|
1542
|
-
throw
|
|
1543
|
-
}), [
|
|
1544
|
-
|
|
1545
|
-
chatId:
|
|
1546
|
-
streamId:
|
|
1541
|
+
).catch((w) => {
|
|
1542
|
+
var m, M;
|
|
1543
|
+
throw V(x.Maintenance), (M = (m = t.callbacks).onConnectionStateChange) == null || M.call(m, T.Fail), w;
|
|
1544
|
+
}), [K, { streamingManager: L, chat: _ }] = await Promise.all([D, R]);
|
|
1545
|
+
_ && _.id !== (($ = n.chat) == null ? void 0 : $.id) && ((ae = (G = t.callbacks).onNewChat) == null || ae.call(G, _.id)), n.streamingManager = L, n.socketManager = K, n.chat = _, i = !1, c.enrich({
|
|
1546
|
+
chatId: _ == null ? void 0 : _.id,
|
|
1547
|
+
streamId: L == null ? void 0 : L.streamId,
|
|
1547
1548
|
mode: n.chatMode
|
|
1548
|
-
}),
|
|
1549
|
+
}), V((_ == null ? void 0 : _.chat_mode) ?? d);
|
|
1549
1550
|
}
|
|
1550
|
-
async function
|
|
1551
|
-
var
|
|
1552
|
-
(
|
|
1551
|
+
async function b() {
|
|
1552
|
+
var l, D, R, K;
|
|
1553
|
+
(l = n.socketManager) == null || l.disconnect(), await ((D = n.streamingManager) == null ? void 0 : D.disconnect()), delete n.streamingManager, delete n.socketManager, (K = (R = t.callbacks).onConnectionStateChange) == null || K.call(R, T.Disconnected);
|
|
1553
1554
|
}
|
|
1554
|
-
async function
|
|
1555
|
-
var
|
|
1556
|
-
|
|
1555
|
+
async function V(l) {
|
|
1556
|
+
var D, R;
|
|
1557
|
+
l !== n.chatMode && (c.track("agent-mode-change", { mode: l }), n.chatMode = l, n.chatMode !== x.Functional && await b(), (R = (D = t.callbacks).onModeChange) == null || R.call(D, l));
|
|
1557
1558
|
}
|
|
1558
1559
|
return {
|
|
1559
|
-
agent:
|
|
1560
|
+
agent: u,
|
|
1560
1561
|
getStreamType: () => {
|
|
1561
|
-
var
|
|
1562
|
-
return (
|
|
1562
|
+
var l;
|
|
1563
|
+
return (l = n.streamingManager) == null ? void 0 : l.streamType;
|
|
1563
1564
|
},
|
|
1564
1565
|
getIsInterruptAvailable: () => {
|
|
1565
|
-
var
|
|
1566
|
-
return ((
|
|
1566
|
+
var l;
|
|
1567
|
+
return ((l = n.streamingManager) == null ? void 0 : l.interruptAvailable) ?? !1;
|
|
1567
1568
|
},
|
|
1568
1569
|
getIsTriggersAvailable: () => {
|
|
1569
|
-
var
|
|
1570
|
-
return ((
|
|
1570
|
+
var l;
|
|
1571
|
+
return ((l = n.streamingManager) == null ? void 0 : l.triggersAvailable) ?? !1;
|
|
1571
1572
|
},
|
|
1572
|
-
starterMessages: ((
|
|
1573
|
-
getSTTToken: () =>
|
|
1574
|
-
changeMode:
|
|
1573
|
+
starterMessages: ((ee = u.knowledge) == null ? void 0 : ee.starter_message) || [],
|
|
1574
|
+
getSTTToken: () => p.getSTTToken(u.id),
|
|
1575
|
+
changeMode: V,
|
|
1575
1576
|
enrichAnalytics: c.enrich,
|
|
1576
1577
|
async connect() {
|
|
1577
|
-
await
|
|
1578
|
+
await E(!0), c.track("agent-chat", {
|
|
1578
1579
|
event: "connect",
|
|
1579
1580
|
mode: n.chatMode
|
|
1580
1581
|
});
|
|
1581
1582
|
},
|
|
1582
1583
|
async reconnect() {
|
|
1583
|
-
const
|
|
1584
|
-
if (
|
|
1584
|
+
const l = n.streamingManager;
|
|
1585
|
+
if (v && (l != null && l.reconnect)) {
|
|
1585
1586
|
try {
|
|
1586
|
-
await
|
|
1587
|
+
await l.reconnect(), c.track("agent-chat", {
|
|
1587
1588
|
event: "reconnect",
|
|
1588
1589
|
mode: n.chatMode
|
|
1589
1590
|
});
|
|
1590
1591
|
} catch {
|
|
1591
|
-
await
|
|
1592
|
+
await b(), await E(!1);
|
|
1592
1593
|
}
|
|
1593
1594
|
return;
|
|
1594
1595
|
}
|
|
1595
|
-
await
|
|
1596
|
+
await b(), await E(!1), c.track("agent-chat", {
|
|
1596
1597
|
event: "reconnect",
|
|
1597
1598
|
mode: n.chatMode
|
|
1598
1599
|
});
|
|
1599
1600
|
},
|
|
1600
1601
|
async disconnect() {
|
|
1601
|
-
await
|
|
1602
|
+
await b(), c.track("agent-chat", {
|
|
1602
1603
|
event: "disconnect",
|
|
1603
1604
|
mode: n.chatMode
|
|
1604
1605
|
});
|
|
1605
1606
|
},
|
|
1606
|
-
async publishMicrophoneStream(
|
|
1607
|
-
var
|
|
1608
|
-
if (!((
|
|
1607
|
+
async publishMicrophoneStream(l) {
|
|
1608
|
+
var D;
|
|
1609
|
+
if (!((D = n.streamingManager) != null && D.publishMicrophoneStream))
|
|
1609
1610
|
throw new Error("publishMicrophoneStream is not available for this streaming manager");
|
|
1610
|
-
return n.streamingManager.publishMicrophoneStream(
|
|
1611
|
+
return n.streamingManager.publishMicrophoneStream(l);
|
|
1611
1612
|
},
|
|
1612
1613
|
async unpublishMicrophoneStream() {
|
|
1613
|
-
var
|
|
1614
|
-
if (!((
|
|
1614
|
+
var l;
|
|
1615
|
+
if (!((l = n.streamingManager) != null && l.unpublishMicrophoneStream))
|
|
1615
1616
|
throw new Error("unpublishMicrophoneStream is not available for this streaming manager");
|
|
1616
1617
|
return n.streamingManager.unpublishMicrophoneStream();
|
|
1617
1618
|
},
|
|
1618
|
-
async chat(
|
|
1619
|
-
var
|
|
1620
|
-
const
|
|
1621
|
-
if (
|
|
1622
|
-
throw new
|
|
1623
|
-
if (
|
|
1624
|
-
throw new
|
|
1625
|
-
if (
|
|
1626
|
-
throw new
|
|
1619
|
+
async chat(l) {
|
|
1620
|
+
var L, _, B, q, Q;
|
|
1621
|
+
const D = () => {
|
|
1622
|
+
if (Xe(d))
|
|
1623
|
+
throw new le(`${d} is enabled, chat is disabled`);
|
|
1624
|
+
if (l.length >= 800)
|
|
1625
|
+
throw new le("Message cannot be more than 800 characters");
|
|
1626
|
+
if (l.length === 0)
|
|
1627
|
+
throw new le("Message cannot be empty");
|
|
1627
1628
|
if (n.chatMode === x.Maintenance)
|
|
1628
|
-
throw new
|
|
1629
|
+
throw new le("Chat is in maintenance mode");
|
|
1629
1630
|
if (![x.TextOnly, x.Playground].includes(n.chatMode)) {
|
|
1630
1631
|
if (!n.streamingManager)
|
|
1631
|
-
throw new
|
|
1632
|
+
throw new le("Streaming manager is not initialized");
|
|
1632
1633
|
if (!n.chat)
|
|
1633
|
-
throw new
|
|
1634
|
+
throw new le("Chat is not initialized");
|
|
1634
1635
|
}
|
|
1635
1636
|
}, R = async () => {
|
|
1636
|
-
var j,
|
|
1637
|
+
var j, $;
|
|
1637
1638
|
if (!n.chat) {
|
|
1638
|
-
const
|
|
1639
|
-
|
|
1640
|
-
|
|
1639
|
+
const G = await Ze(
|
|
1640
|
+
u,
|
|
1641
|
+
p,
|
|
1641
1642
|
c,
|
|
1642
1643
|
n.chatMode,
|
|
1643
1644
|
t.persistentChat
|
|
1644
1645
|
);
|
|
1645
|
-
if (!
|
|
1646
|
-
throw new
|
|
1647
|
-
n.chat =
|
|
1646
|
+
if (!G.chat)
|
|
1647
|
+
throw new it(n.chatMode, !!t.persistentChat);
|
|
1648
|
+
n.chat = G.chat, ($ = (j = t.callbacks).onNewChat) == null || $.call(j, n.chat.id);
|
|
1648
1649
|
}
|
|
1649
1650
|
return n.chat.id;
|
|
1650
|
-
},
|
|
1651
|
-
const
|
|
1652
|
-
return De(
|
|
1653
|
-
var m,
|
|
1654
|
-
return await ((
|
|
1651
|
+
}, K = async (j, $) => {
|
|
1652
|
+
const G = n.chatMode === x.Playground;
|
|
1653
|
+
return De(v && !G ? async () => {
|
|
1654
|
+
var m, M;
|
|
1655
|
+
return await ((M = (m = n.streamingManager) == null ? void 0 : m.sendTextMessage) == null ? void 0 : M.call(m, l)), Promise.resolve({});
|
|
1655
1656
|
} : async () => {
|
|
1656
|
-
var m,
|
|
1657
|
-
return
|
|
1658
|
-
|
|
1659
|
-
|
|
1657
|
+
var m, M;
|
|
1658
|
+
return p.chat(
|
|
1659
|
+
u.id,
|
|
1660
|
+
$,
|
|
1660
1661
|
{
|
|
1661
1662
|
chatMode: n.chatMode,
|
|
1662
1663
|
streamId: (m = n.streamingManager) == null ? void 0 : m.streamId,
|
|
1663
|
-
sessionId: (
|
|
1664
|
-
messages: j.map(({ matches:
|
|
1664
|
+
sessionId: (M = n.streamingManager) == null ? void 0 : M.sessionId,
|
|
1665
|
+
messages: j.map(({ matches: W, ...ce }) => ce)
|
|
1665
1666
|
},
|
|
1666
1667
|
{
|
|
1667
|
-
...
|
|
1668
|
+
...Ge(n.chatMode),
|
|
1668
1669
|
skipErrorHandler: !0
|
|
1669
1670
|
}
|
|
1670
1671
|
);
|
|
1671
1672
|
}, {
|
|
1672
1673
|
limit: 2,
|
|
1673
1674
|
shouldRetryFn: (m) => {
|
|
1674
|
-
var ce, de,
|
|
1675
|
-
const
|
|
1676
|
-
return !((de = m == null ? void 0 : m.message) == null ? void 0 : de.includes("Stream Error")) && !
|
|
1675
|
+
var ce, de, pe, we;
|
|
1676
|
+
const M = (ce = m == null ? void 0 : m.message) == null ? void 0 : ce.includes("missing or invalid session_id");
|
|
1677
|
+
return !((de = m == null ? void 0 : m.message) == null ? void 0 : de.includes("Stream Error")) && !M ? ((we = (pe = t.callbacks).onError) == null || we.call(pe, m), !1) : !0;
|
|
1677
1678
|
},
|
|
1678
1679
|
onRetry: async () => {
|
|
1679
|
-
await
|
|
1680
|
+
await b(), await E(!1);
|
|
1680
1681
|
}
|
|
1681
1682
|
});
|
|
1682
1683
|
};
|
|
1683
1684
|
try {
|
|
1684
|
-
|
|
1685
|
-
id:
|
|
1685
|
+
P(), D(), n.messages.push({
|
|
1686
|
+
id: fe(),
|
|
1686
1687
|
role: "user",
|
|
1687
|
-
content:
|
|
1688
|
-
created_at: new Date(
|
|
1689
|
-
}), (
|
|
1690
|
-
const j = await R(),
|
|
1688
|
+
content: l,
|
|
1689
|
+
created_at: new Date(ne.update()).toISOString()
|
|
1690
|
+
}), (_ = (L = t.callbacks).onNewMessage) == null || _.call(L, [...n.messages], "user");
|
|
1691
|
+
const j = await R(), $ = await K([...n.messages], j);
|
|
1691
1692
|
return n.messages.push({
|
|
1692
|
-
id:
|
|
1693
|
+
id: fe(),
|
|
1693
1694
|
role: "assistant",
|
|
1694
|
-
content:
|
|
1695
|
+
content: $.result || "",
|
|
1695
1696
|
created_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1696
|
-
context:
|
|
1697
|
-
matches:
|
|
1697
|
+
context: $.context,
|
|
1698
|
+
matches: $.matches
|
|
1698
1699
|
}), c.track("agent-message-send", {
|
|
1699
1700
|
event: "success",
|
|
1700
1701
|
messages: n.messages.length + 1
|
|
1701
|
-
}),
|
|
1702
|
-
latency:
|
|
1702
|
+
}), $.result && ((q = (B = t.callbacks).onNewMessage) == null || q.call(B, [...n.messages], "answer"), c.track("agent-message-received", {
|
|
1703
|
+
latency: ne.get(!0),
|
|
1703
1704
|
messages: n.messages.length
|
|
1704
|
-
})),
|
|
1705
|
+
})), $;
|
|
1705
1706
|
} catch (j) {
|
|
1706
|
-
throw ((
|
|
1707
|
+
throw ((Q = n.messages[n.messages.length - 1]) == null ? void 0 : Q.role) === "assistant" && n.messages.pop(), c.track("agent-message-send", {
|
|
1707
1708
|
event: "error",
|
|
1708
1709
|
messages: n.messages.length
|
|
1709
1710
|
}), j;
|
|
1710
1711
|
}
|
|
1711
1712
|
},
|
|
1712
|
-
rate(
|
|
1713
|
-
var
|
|
1714
|
-
const
|
|
1713
|
+
rate(l, D, R) {
|
|
1714
|
+
var _, B, q, Q;
|
|
1715
|
+
const K = n.messages.find((j) => j.id === l);
|
|
1715
1716
|
if (n.chat) {
|
|
1716
|
-
if (!
|
|
1717
|
+
if (!K)
|
|
1717
1718
|
throw new Error("Message not found");
|
|
1718
1719
|
} else throw new Error("Chat is not initialized");
|
|
1719
|
-
const
|
|
1720
|
+
const L = ((_ = K.matches) == null ? void 0 : _.map((j) => [j.document_id, j.id])) ?? [];
|
|
1720
1721
|
return c.track("agent-rate", {
|
|
1721
1722
|
event: R ? "update" : "create",
|
|
1722
|
-
thumb:
|
|
1723
|
-
knowledge_id: ((
|
|
1724
|
-
matches:
|
|
1725
|
-
score:
|
|
1726
|
-
}), R ?
|
|
1727
|
-
knowledge_id: ((q =
|
|
1728
|
-
message_id:
|
|
1729
|
-
matches:
|
|
1730
|
-
score:
|
|
1731
|
-
}) :
|
|
1732
|
-
knowledge_id: ((
|
|
1733
|
-
message_id:
|
|
1734
|
-
matches:
|
|
1735
|
-
score:
|
|
1723
|
+
thumb: D === 1 ? "up" : "down",
|
|
1724
|
+
knowledge_id: ((B = u.knowledge) == null ? void 0 : B.id) ?? "",
|
|
1725
|
+
matches: L,
|
|
1726
|
+
score: D
|
|
1727
|
+
}), R ? p.updateRating(u.id, n.chat.id, R, {
|
|
1728
|
+
knowledge_id: ((q = u.knowledge) == null ? void 0 : q.id) ?? "",
|
|
1729
|
+
message_id: l,
|
|
1730
|
+
matches: L,
|
|
1731
|
+
score: D
|
|
1732
|
+
}) : p.createRating(u.id, n.chat.id, {
|
|
1733
|
+
knowledge_id: ((Q = u.knowledge) == null ? void 0 : Q.id) ?? "",
|
|
1734
|
+
message_id: l,
|
|
1735
|
+
matches: L,
|
|
1736
|
+
score: D
|
|
1736
1737
|
});
|
|
1737
1738
|
},
|
|
1738
|
-
deleteRate(
|
|
1739
|
+
deleteRate(l) {
|
|
1739
1740
|
if (!n.chat)
|
|
1740
1741
|
throw new Error("Chat is not initialized");
|
|
1741
|
-
return c.track("agent-rate-delete", { type: "text" }),
|
|
1742
|
+
return c.track("agent-rate-delete", { type: "text" }), p.deleteRating(u.id, n.chat.id, l);
|
|
1742
1743
|
},
|
|
1743
|
-
async speak(
|
|
1744
|
-
var
|
|
1745
|
-
function
|
|
1746
|
-
if (typeof
|
|
1747
|
-
if (!
|
|
1744
|
+
async speak(l) {
|
|
1745
|
+
var L, _, B;
|
|
1746
|
+
function D() {
|
|
1747
|
+
if (typeof l == "string") {
|
|
1748
|
+
if (!u.presenter.voice)
|
|
1748
1749
|
throw new Error("Presenter voice is not initialized");
|
|
1749
1750
|
return {
|
|
1750
1751
|
type: "text",
|
|
1751
|
-
provider:
|
|
1752
|
-
input:
|
|
1752
|
+
provider: u.presenter.voice,
|
|
1753
|
+
input: l,
|
|
1753
1754
|
ssml: !1
|
|
1754
1755
|
};
|
|
1755
1756
|
}
|
|
1756
|
-
if (
|
|
1757
|
-
if (!
|
|
1757
|
+
if (l.type === "text" && !l.provider) {
|
|
1758
|
+
if (!u.presenter.voice)
|
|
1758
1759
|
throw new Error("Presenter voice is not initialized");
|
|
1759
1760
|
return {
|
|
1760
1761
|
type: "text",
|
|
1761
|
-
provider:
|
|
1762
|
-
input:
|
|
1763
|
-
ssml:
|
|
1762
|
+
provider: u.presenter.voice,
|
|
1763
|
+
input: l.input,
|
|
1764
|
+
ssml: l.ssml
|
|
1764
1765
|
};
|
|
1765
1766
|
}
|
|
1766
|
-
return
|
|
1767
|
+
return l;
|
|
1767
1768
|
}
|
|
1768
|
-
const R =
|
|
1769
|
-
if (c.track("agent-speak", R),
|
|
1770
|
-
id:
|
|
1769
|
+
const R = D();
|
|
1770
|
+
if (c.track("agent-speak", R), ne.update(), n.messages && R.type === "text" && (n.messages.push({
|
|
1771
|
+
id: fe(),
|
|
1771
1772
|
role: "assistant",
|
|
1772
1773
|
content: R.input,
|
|
1773
1774
|
created_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
1774
|
-
}), (
|
|
1775
|
+
}), (_ = (L = t.callbacks).onNewMessage) == null || _.call(L, [...n.messages], "answer")), St(n.chatMode))
|
|
1775
1776
|
return {
|
|
1776
1777
|
duration: 0,
|
|
1777
1778
|
video_id: "",
|
|
@@ -1781,36 +1782,36 @@ async function Rn(e, t) {
|
|
|
1781
1782
|
throw new Error("Please connect to the agent first");
|
|
1782
1783
|
return n.streamingManager.speak({
|
|
1783
1784
|
script: R,
|
|
1784
|
-
metadata: { chat_id: (
|
|
1785
|
+
metadata: { chat_id: (B = n.chat) == null ? void 0 : B.id, agent_id: u.id }
|
|
1785
1786
|
});
|
|
1786
1787
|
},
|
|
1787
|
-
interrupt:
|
|
1788
|
+
interrupt: S
|
|
1788
1789
|
};
|
|
1789
1790
|
}
|
|
1790
1791
|
export {
|
|
1791
1792
|
O as AgentActivityState,
|
|
1792
|
-
|
|
1793
|
-
|
|
1793
|
+
dt as AgentStatus,
|
|
1794
|
+
it as ChatCreationFailed,
|
|
1794
1795
|
x as ChatMode,
|
|
1795
|
-
|
|
1796
|
-
|
|
1796
|
+
at as ChatModeDowngraded,
|
|
1797
|
+
Y as ChatProgress,
|
|
1797
1798
|
T as ConnectionState,
|
|
1798
|
-
|
|
1799
|
-
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1799
|
+
re as ConnectivityState,
|
|
1800
|
+
mt as DocumentType,
|
|
1801
|
+
ft as KnowledgeType,
|
|
1802
|
+
ct as PlanGroup,
|
|
1803
|
+
gt as Providers,
|
|
1804
|
+
ut as RateState,
|
|
1805
|
+
A as StreamEvents,
|
|
1806
|
+
ie as StreamType,
|
|
1806
1807
|
C as StreamingState,
|
|
1807
|
-
|
|
1808
|
+
lt as Subject,
|
|
1808
1809
|
ke as TransportProvider,
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1810
|
+
st as UserPlan,
|
|
1811
|
+
le as ValidationError,
|
|
1812
|
+
He as VideoType,
|
|
1813
|
+
ht as VoiceAccess,
|
|
1814
|
+
ot as WsError,
|
|
1815
|
+
kn as createAgentManager,
|
|
1816
|
+
Sn as mapVideoType
|
|
1816
1817
|
};
|