@d-id/client-sdk 1.1.18 → 1.1.19-staging.87

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.
@@ -0,0 +1,1353 @@
1
+ var Se = Object.defineProperty;
2
+ var Ie = (e, t, a) => t in e ? Se(e, t, { enumerable: !0, configurable: !0, writable: !0, value: a }) : e[t] = a;
3
+ var Q = (e, t, a) => Ie(e, typeof t != "symbol" ? t + "" : t, a);
4
+ class ee extends Error {
5
+ constructor({ kind: a, description: r, error: o }) {
6
+ super(JSON.stringify({ kind: a, description: r }));
7
+ Q(this, "kind");
8
+ Q(this, "description");
9
+ Q(this, "error");
10
+ this.kind = a, this.description = r, this.error = o;
11
+ }
12
+ }
13
+ class Ee extends ee {
14
+ constructor(t, a) {
15
+ super({
16
+ kind: "ChatCreationFailed",
17
+ description: `Failed to create ${a ? "persistent" : ""} chat, mode: ${t}`
18
+ });
19
+ }
20
+ }
21
+ class Me extends ee {
22
+ constructor(t) {
23
+ super({ kind: "ChatModeDowngraded", description: `Chat mode downgraded to ${t}` });
24
+ }
25
+ }
26
+ class V extends ee {
27
+ constructor(a, r) {
28
+ super({ kind: "ValidationError", description: a });
29
+ Q(this, "key");
30
+ this.key = r;
31
+ }
32
+ }
33
+ class _e extends ee {
34
+ constructor(t) {
35
+ super({ kind: "WSError", description: t });
36
+ }
37
+ }
38
+ var Te = /* @__PURE__ */ ((e) => (e.TRIAL = "trial", e.BASIC = "basic", e.ENTERPRISE = "enterprise", e.LITE = "lite", e.ADVANCED = "advanced", e))(Te || {}), Ae = /* @__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))(Ae || {}), Pe = /* @__PURE__ */ ((e) => (e.Created = "created", e.Started = "started", e.Done = "done", e.Error = "error", e.Rejected = "rejected", e.Ready = "ready", e))(Pe || {}), be = /* @__PURE__ */ ((e) => (e.Unrated = "Unrated", e.Positive = "Positive", e.Negative = "Negative", e))(be || {}), T = /* @__PURE__ */ ((e) => (e.Functional = "Functional", e.TextOnly = "TextOnly", e.Maintenance = "Maintenance", e.Playground = "Playground", e.DirectPlayback = "DirectPlayback", e.Off = "Off", e))(T || {}), q = /* @__PURE__ */ ((e) => (e.Embed = "embed", e.Query = "query", e.Partial = "partial", e.Answer = "answer", e.Complete = "done", e))(q || {}), je = /* @__PURE__ */ ((e) => (e.KnowledgeProcessing = "knowledge/processing", e.KnowledgeIndexing = "knowledge/indexing", e.KnowledgeFailed = "knowledge/error", e.KnowledgeDone = "knowledge/done", e))(je || {}), Le = /* @__PURE__ */ ((e) => (e.Knowledge = "knowledge", e.Document = "document", e.Record = "record", e))(Le || {}), xe = /* @__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))(xe || {}), we = /* @__PURE__ */ ((e) => (e.Clip = "clip", e.Talk = "talk", e.Expressive = "expressive", e))(we || {});
39
+ const Lt = (e) => {
40
+ switch (e) {
41
+ case "clip":
42
+ return "clip";
43
+ case "talk":
44
+ return "talk";
45
+ case "expressive":
46
+ return "expressive";
47
+ default:
48
+ throw new Error(`Unknown video type: ${e}`);
49
+ }
50
+ };
51
+ var w = /* @__PURE__ */ ((e) => (e.Start = "START", e.Stop = "STOP", e))(w || {}), Z = /* @__PURE__ */ ((e) => (e.Strong = "STRONG", e.Weak = "WEAK", e.Unknown = "UNKNOWN", e))(Z || {}), X = /* @__PURE__ */ ((e) => (e.Idle = "IDLE", e.Talking = "TALKING", e))(X || {}), b = /* @__PURE__ */ ((e) => (e.ChatAnswer = "chat/answer", e.ChatPartial = "chat/partial", e.StreamDone = "stream/done", e.StreamStarted = "stream/started", e.StreamFailed = "stream/error", e.StreamReady = "stream/ready", e.StreamCreated = "stream/created", e.StreamInterrupt = "stream/interrupt", e.StreamVideoCreated = "stream-video/started", e.StreamVideoDone = "stream-video/done", e.StreamVideoError = "stream-video/error", e.StreamVideoRejected = "stream-video/rejected", e))(b || {}), M = /* @__PURE__ */ ((e) => (e.New = "new", e.Fail = "fail", e.Connected = "connected", e.Connecting = "connecting", e.Closed = "closed", e.Completed = "completed", e.Disconnected = "disconnected", e))(M || {}), J = /* @__PURE__ */ ((e) => (e.Legacy = "legacy", e.Fluent = "fluent", e))(J || {}), de = /* @__PURE__ */ ((e) => (e.Livekit = "livekit", e))(de || {}), Be = /* @__PURE__ */ ((e) => (e.Amazon = "amazon", e.AzureOpenAi = "azure-openai", e.Microsoft = "microsoft", e.Afflorithmics = "afflorithmics", e.Elevenlabs = "elevenlabs", e))(Be || {}), $e = /* @__PURE__ */ ((e) => (e.Public = "public", e.Premium = "premium", e.Private = "private", e))($e || {});
52
+ const ze = 45 * 1e3, Fe = "X-Playground-Chat", te = "https://api.d-id.com", Ne = "wss://notifications.d-id.com", Je = "79f81a83a67430be2bc0fd61042b8faa", pe = (e) => new Promise((t) => setTimeout(t, e)), O = (e = 16) => {
53
+ const t = new Uint8Array(e);
54
+ return window.crypto.getRandomValues(t), Array.from(t, (a) => a.toString(16).padStart(2, "0")).join("").slice(0, 13);
55
+ }, ve = (e) => e.type === "clip" && e.presenter_id.startsWith("v2_") ? "clip_v2" : e.type, le = (e) => e === we.Expressive, We = (e) => [T.TextOnly, T.Playground, T.Maintenance].includes(e), ye = (e) => e && [T.DirectPlayback, T.Off].includes(e);
56
+ function Ue(e, t) {
57
+ let a;
58
+ return {
59
+ promise: new Promise((o, i) => {
60
+ a = setTimeout(() => i(new Error(t)), e);
61
+ }),
62
+ clear: () => clearTimeout(a)
63
+ };
64
+ }
65
+ async function ne(e, t) {
66
+ const a = {
67
+ limit: (t == null ? void 0 : t.limit) ?? 3,
68
+ delayMs: (t == null ? void 0 : t.delayMs) ?? 0,
69
+ timeout: (t == null ? void 0 : t.timeout) ?? 3e4,
70
+ timeoutErrorMessage: (t == null ? void 0 : t.timeoutErrorMessage) || "Timeout error",
71
+ shouldRetryFn: (t == null ? void 0 : t.shouldRetryFn) ?? (() => !0),
72
+ onRetry: (t == null ? void 0 : t.onRetry) ?? (() => {
73
+ })
74
+ };
75
+ let r;
76
+ for (let o = 1; o <= a.limit; o++)
77
+ try {
78
+ if (!a.timeout)
79
+ return await e();
80
+ const { promise: i, clear: c } = Ue(a.timeout, a.timeoutErrorMessage), n = e().finally(c);
81
+ return await Promise.race([n, i]);
82
+ } catch (i) {
83
+ if (r = i, !a.shouldRetryFn(i) || o >= a.limit)
84
+ throw i;
85
+ await pe(a.delayMs), a.onRetry(i);
86
+ }
87
+ throw r;
88
+ }
89
+ function ae(e) {
90
+ if (e !== void 0)
91
+ return window.localStorage.setItem("did_external_key_id", e), e;
92
+ let t = window.localStorage.getItem("did_external_key_id");
93
+ if (!t) {
94
+ let a = O();
95
+ window.localStorage.setItem("did_external_key_id", a), t = a;
96
+ }
97
+ return t;
98
+ }
99
+ let Ke = O();
100
+ function ke(e, t) {
101
+ if (e.type === "bearer")
102
+ return `Bearer ${e.token}`;
103
+ if (e.type === "basic")
104
+ return `Basic ${btoa(`${e.username}:${e.password}`)}`;
105
+ if (e.type === "key")
106
+ return `Client-Key ${e.clientKey}.${ae(t)}_${Ke}`;
107
+ throw new Error(`Unknown auth type: ${e}`);
108
+ }
109
+ const He = (e) => ne(e, {
110
+ limit: 3,
111
+ delayMs: 1e3,
112
+ timeout: 0,
113
+ shouldRetryFn: (t) => t.status === 429
114
+ });
115
+ function Ce(e, t = te, a, r) {
116
+ const o = async (i, c) => {
117
+ const { skipErrorHandler: n, ...s } = c || {}, d = await He(
118
+ () => fetch(t + (i != null && i.startsWith("/") ? i : `/${i}`), {
119
+ ...s,
120
+ headers: {
121
+ ...s.headers,
122
+ Authorization: ke(e, r),
123
+ "Content-Type": "application/json"
124
+ }
125
+ })
126
+ );
127
+ if (!d.ok) {
128
+ let l = await d.text().catch(() => `Failed to fetch with status ${d.status}`);
129
+ const u = new Error(l);
130
+ throw a && !n && a(u, { url: i, options: s, headers: d.headers }), u;
131
+ }
132
+ return d.json();
133
+ };
134
+ return {
135
+ get(i, c) {
136
+ return o(i, { ...c, method: "GET" });
137
+ },
138
+ post(i, c, n) {
139
+ return o(i, { ...n, body: JSON.stringify(c), method: "POST" });
140
+ },
141
+ delete(i, c, n) {
142
+ return o(i, { ...n, body: JSON.stringify(c), method: "DELETE" });
143
+ },
144
+ patch(i, c, n) {
145
+ return o(i, { ...n, body: JSON.stringify(c), method: "PATCH" });
146
+ }
147
+ };
148
+ }
149
+ function Ve(e, t = te, a, r) {
150
+ const o = Ce(e, `${t}/agents`, a, r);
151
+ return {
152
+ create(i, c) {
153
+ return o.post("/", i, c);
154
+ },
155
+ getAgents(i, c) {
156
+ return o.get(`/${i ? `?tag=${i}` : ""}`, c).then((n) => n ?? []);
157
+ },
158
+ getById(i, c) {
159
+ return o.get(`/${i}`, c);
160
+ },
161
+ delete(i, c) {
162
+ return o.delete(`/${i}`, void 0, c);
163
+ },
164
+ update(i, c, n) {
165
+ return o.patch(`/${i}`, c, n);
166
+ },
167
+ newChat(i, c, n) {
168
+ return o.post(`/${i}/chat`, c, n);
169
+ },
170
+ chat(i, c, n, s) {
171
+ return o.post(`/${i}/chat/${c}`, n, s);
172
+ },
173
+ createRating(i, c, n, s) {
174
+ return o.post(`/${i}/chat/${c}/ratings`, n, s);
175
+ },
176
+ updateRating(i, c, n, s, d) {
177
+ return o.patch(`/${i}/chat/${c}/ratings/${n}`, s, d);
178
+ },
179
+ deleteRating(i, c, n, s) {
180
+ return o.delete(`/${i}/chat/${c}/ratings/${n}`, s);
181
+ },
182
+ getSTTToken(i, c) {
183
+ return o.get(`/${i}/stt-token`, c);
184
+ }
185
+ };
186
+ }
187
+ function qe(e) {
188
+ var o, i, c, n;
189
+ const t = () => /Mobi|Android/i.test(navigator.userAgent) ? "Mobile" : "Desktop", a = () => {
190
+ const s = navigator.platform;
191
+ return s.toLowerCase().includes("win") ? "Windows" : s.toLowerCase().includes("mac") ? "Mac OS X" : s.toLowerCase().includes("linux") ? "Linux" : "Unknown";
192
+ }, r = e.presenter;
193
+ return {
194
+ $os: `${a()}`,
195
+ isMobile: `${t() == "Mobile"}`,
196
+ browser: navigator.userAgent,
197
+ origin: window.location.origin,
198
+ agentType: ve(r),
199
+ agentVoice: {
200
+ voiceId: (i = (o = e.presenter) == null ? void 0 : o.voice) == null ? void 0 : i.voice_id,
201
+ provider: (n = (c = e.presenter) == null ? void 0 : c.voice) == null ? void 0 : n.type
202
+ }
203
+ };
204
+ }
205
+ function Oe(e) {
206
+ var a, r, o, i, c, n;
207
+ const t = (a = e.llm) == null ? void 0 : a.prompt_customization;
208
+ return {
209
+ agentType: ve(e.presenter),
210
+ owner_id: e.owner_id ?? "",
211
+ promptVersion: (r = e.llm) == null ? void 0 : r.prompt_version,
212
+ behavior: {
213
+ role: t == null ? void 0 : t.role,
214
+ personality: t == null ? void 0 : t.personality,
215
+ instructions: (o = e.llm) == null ? void 0 : o.instructions
216
+ },
217
+ temperature: (i = e.llm) == null ? void 0 : i.temperature,
218
+ knowledgeSource: t == null ? void 0 : t.knowledge_source,
219
+ starterQuestionsCount: (n = (c = e.knowledge) == null ? void 0 : c.starter_message) == null ? void 0 : n.length,
220
+ topicsToAvoid: t == null ? void 0 : t.topics_to_avoid,
221
+ maxResponseLength: t == null ? void 0 : t.max_response_length,
222
+ agentId: e.id,
223
+ access: e.access,
224
+ name: e.preview_name,
225
+ ...e.access === "public" ? { from: "agent-template" } : {}
226
+ };
227
+ }
228
+ const Xe = (e) => e.reduce((t, a) => t + a, 0), ue = (e) => Xe(e) / e.length;
229
+ function Ye(e, t, a) {
230
+ var s, d, l;
231
+ const { event: r, ...o } = e, { template: i } = (t == null ? void 0 : t.llm) || {}, { language: c } = ((s = t == null ? void 0 : t.presenter) == null ? void 0 : s.voice) || {};
232
+ return {
233
+ ...o,
234
+ llm: { ...o.llm, template: i },
235
+ script: { ...o.script, provider: { ...(d = o == null ? void 0 : o.script) == null ? void 0 : d.provider, language: c } },
236
+ stitch: (t == null ? void 0 : t.presenter.type) === "talk" ? (l = t == null ? void 0 : t.presenter) == null ? void 0 : l.stitch : void 0,
237
+ ...a
238
+ };
239
+ }
240
+ function fe(e) {
241
+ "requestIdleCallback" in window ? requestIdleCallback(e, { timeout: 2e3 }) : setTimeout(e, 0);
242
+ }
243
+ let re = {};
244
+ const Qe = "https://api-js.mixpanel.com/track/?verbose=1&ip=1";
245
+ function Ze(e) {
246
+ const t = window != null && window.hasOwnProperty("DID_AGENTS_API") ? "agents-ui" : "agents-sdk";
247
+ return {
248
+ token: e.token || "testKey",
249
+ distinct_id: ae(e.externalId),
250
+ agentId: e.agentId,
251
+ additionalProperties: {
252
+ id: ae(e.externalId),
253
+ ...e.mixpanelAdditionalProperties || {}
254
+ },
255
+ isEnabled: e.isEnabled ?? !0,
256
+ getRandom: O,
257
+ enrich(a) {
258
+ this.additionalProperties = { ...this.additionalProperties, ...a };
259
+ },
260
+ async track(a, r, o) {
261
+ if (!this.isEnabled)
262
+ return Promise.resolve();
263
+ const { audioPath: i, ...c } = r || {}, n = o || Date.now(), s = {
264
+ method: "POST",
265
+ headers: {
266
+ "Content-Type": "application/x-www-form-urlencoded"
267
+ },
268
+ body: new URLSearchParams({
269
+ data: JSON.stringify([
270
+ {
271
+ event: a,
272
+ properties: {
273
+ ...this.additionalProperties,
274
+ ...c,
275
+ agentId: this.agentId,
276
+ source: t,
277
+ token: this.token,
278
+ time: n,
279
+ $insert_id: this.getRandom(),
280
+ origin: window.location.href,
281
+ "Screen Height": window.screen.height || window.innerWidth,
282
+ "Screen Width": window.screen.width || window.innerHeight,
283
+ "User Agent": navigator.userAgent
284
+ }
285
+ }
286
+ ])
287
+ })
288
+ };
289
+ return fetch(Qe, {
290
+ ...s,
291
+ keepalive: !0
292
+ }).catch((d) => console.error("Analytics tracking error:", d)), Promise.resolve();
293
+ },
294
+ linkTrack(a, r, o, i) {
295
+ re[a] || (re[a] = { events: {}, resolvedDependencies: [] }), i.includes(o) || i.push(o);
296
+ const c = re[a];
297
+ if (c.events[o] = { props: r }, c.resolvedDependencies.push(o), i.every(
298
+ (s) => c.resolvedDependencies.includes(s)
299
+ )) {
300
+ const s = i.reduce((d, l) => c.events[l] ? { ...d, ...c.events[l].props } : d, {});
301
+ this.track(a, s), c.resolvedDependencies = c.resolvedDependencies.filter(
302
+ (d) => !i.includes(d)
303
+ ), i.forEach((d) => {
304
+ delete c.events[d];
305
+ });
306
+ }
307
+ }
308
+ };
309
+ }
310
+ function De() {
311
+ let e = 0;
312
+ return {
313
+ reset: () => e = 0,
314
+ update: () => e = Date.now(),
315
+ get: (t = !1) => t ? Date.now() - e : e
316
+ };
317
+ }
318
+ const N = De(), ie = De();
319
+ function Re(e) {
320
+ return e === T.Playground ? { headers: { [Fe]: "true" } } : {};
321
+ }
322
+ async function se(e, t, a, r, o = !1, i) {
323
+ try {
324
+ return !i && !ye(r) && (i = await t.newChat(e.id, { persist: o }, Re(r)), a.track("agent-chat", {
325
+ event: "created",
326
+ chatId: i.id,
327
+ mode: r
328
+ })), { chat: i, chatMode: (i == null ? void 0 : i.chat_mode) ?? r };
329
+ } catch (c) {
330
+ try {
331
+ const n = JSON.parse(c.message);
332
+ if ((n == null ? void 0 : n.kind) === "InsufficientCreditsError")
333
+ throw new Error("InsufficientCreditsError");
334
+ } catch (n) {
335
+ console.error("Error parsing the error message:", n);
336
+ }
337
+ throw new Error("Cannot create new chat");
338
+ }
339
+ }
340
+ function Ge(e) {
341
+ return e && e.length > 0 ? e : [];
342
+ }
343
+ function et(e, t, a) {
344
+ if (!e)
345
+ throw new Error("Please connect to the agent first");
346
+ if (!e.interruptAvailable)
347
+ throw new Error("Interrupt is not enabled for this stream");
348
+ if (t !== J.Fluent)
349
+ throw new Error("Interrupt only available for Fluent streams");
350
+ if (!a)
351
+ throw new Error("No active video to interrupt");
352
+ }
353
+ async function tt(e, t) {
354
+ const a = {
355
+ type: b.StreamInterrupt,
356
+ videoId: t,
357
+ timestamp: Date.now()
358
+ };
359
+ e.sendDataChannelMessage(JSON.stringify(a));
360
+ }
361
+ function rt(e) {
362
+ return new Promise((t, a) => {
363
+ const { callbacks: r, host: o, auth: i, externalId: c } = e, { onMessage: n = null, onOpen: s = null, onClose: d = null, onError: l = null } = r || {}, u = new WebSocket(`${o}?authorization=${encodeURIComponent(ke(i, c))}`);
364
+ u.onmessage = n, u.onclose = d, u.onerror = (y) => {
365
+ console.error(y), l == null || l("Websocket failed to connect", y), a(y);
366
+ }, u.onopen = (y) => {
367
+ s == null || s(y), t(u);
368
+ };
369
+ });
370
+ }
371
+ async function nt(e) {
372
+ const { retries: t = 1 } = e;
373
+ let a = null;
374
+ for (let r = 0; (a == null ? void 0 : a.readyState) !== WebSocket.OPEN; r++)
375
+ try {
376
+ a = await rt(e);
377
+ } catch (o) {
378
+ if (r === t)
379
+ throw o;
380
+ await pe(r * 500);
381
+ }
382
+ return a;
383
+ }
384
+ async function at(e, t, a, r) {
385
+ const o = a != null && a.onMessage ? [a.onMessage] : [], i = await nt({
386
+ auth: e,
387
+ host: t,
388
+ externalId: r,
389
+ callbacks: {
390
+ onError: (c) => {
391
+ var n;
392
+ return (n = a.onError) == null ? void 0 : n.call(a, new _e(c));
393
+ },
394
+ onMessage(c) {
395
+ const n = JSON.parse(c.data);
396
+ o.forEach((s) => s(n.event, n));
397
+ }
398
+ }
399
+ });
400
+ return {
401
+ socket: i,
402
+ disconnect: () => i.close(),
403
+ subscribeToEvents: (c) => o.push(c)
404
+ };
405
+ }
406
+ function it(e) {
407
+ if (e.answer !== void 0)
408
+ return e.answer;
409
+ let t = 0, a = "";
410
+ for (; t in e; )
411
+ a += e[t++];
412
+ return a;
413
+ }
414
+ function st(e, t, a, r, o) {
415
+ const i = r.messages[r.messages.length - 1];
416
+ if (!(e === q.Partial || e === q.Answer) || (i == null ? void 0 : i.role) !== "assistant")
417
+ return;
418
+ const { content: c, sequence: n } = t;
419
+ e === q.Partial ? a[n] = c : a.answer = c;
420
+ const s = it(a);
421
+ (i.content !== s || e === q.Answer) && (i.content = s, o == null || o([...r.messages], e));
422
+ }
423
+ function ot(e, t, a, r, o) {
424
+ let i = {};
425
+ return {
426
+ clearQueue: () => i = {},
427
+ onMessage: (c, n) => {
428
+ var s, d;
429
+ if ("content" in n)
430
+ st(c, n, i, t, a.callbacks.onNewMessage), c === q.Answer && e.track("agent-message-received", {
431
+ messages: t.messages.length,
432
+ mode: t.chatMode
433
+ });
434
+ else {
435
+ const l = b, u = [l.StreamVideoDone, l.StreamVideoError, l.StreamVideoRejected], y = [l.StreamFailed, l.StreamVideoError, l.StreamVideoRejected], A = Ye(n, r, { mode: t.chatMode });
436
+ if (c = c, c === l.StreamVideoCreated)
437
+ e.linkTrack("agent-video", A, l.StreamVideoCreated, ["start"]);
438
+ else if (u.includes(c)) {
439
+ const j = c.split("/")[1];
440
+ y.includes(c) ? e.track("agent-video", { ...A, event: j }) : e.linkTrack("agent-video", { ...A, event: j }, c, ["done"]);
441
+ }
442
+ y.includes(c) && ((d = (s = a.callbacks).onError) == null || d.call(s, new Error(`Stream failed with event ${c}`), { data: n })), n.event === l.StreamDone && o();
443
+ }
444
+ }
445
+ };
446
+ }
447
+ function ct(e, t, a, r) {
448
+ const o = Ce(e, `${t}/agents/${a}`, r);
449
+ return {
450
+ createStream(i) {
451
+ return o.post("/streams", i);
452
+ },
453
+ startConnection(i, c, n) {
454
+ return o.post(`/streams/${i}/sdp`, {
455
+ session_id: n,
456
+ answer: c
457
+ });
458
+ },
459
+ addIceCandidate(i, c, n) {
460
+ return o.post(`/streams/${i}/ice`, {
461
+ session_id: n,
462
+ ...c
463
+ });
464
+ },
465
+ sendStreamRequest(i, c, n) {
466
+ return o.post(`/streams/${i}`, {
467
+ session_id: c,
468
+ ...n
469
+ });
470
+ },
471
+ close(i, c) {
472
+ return o.delete(`/streams/${i}`, { session_id: c });
473
+ }
474
+ };
475
+ }
476
+ const dt = (e, t) => (a, r) => e && console.log(`[${t}] ${a}`, r ?? "");
477
+ function lt(e, t, a) {
478
+ const r = (t.timestamp - e.timestamp) / 1e3;
479
+ return {
480
+ duration: r,
481
+ bytesReceived: t.bytesReceived - e.bytesReceived,
482
+ bitrate: Math.round((t.bytesReceived - e.bytesReceived) * 8 / r),
483
+ packetsReceived: t.packetsReceived - e.packetsReceived,
484
+ packetsLost: t.packetsLost - e.packetsLost,
485
+ framesDropped: t.framesDropped - e.framesDropped,
486
+ framesDecoded: t.framesDecoded - e.framesDecoded,
487
+ jitter: t.jitter,
488
+ avgJitterDelayInInterval: (t.jitterBufferDelay - e.jitterBufferDelay) / (t.jitterBufferEmittedCount - e.jitterBufferEmittedCount),
489
+ jitterBufferEmittedCount: t.jitterBufferEmittedCount - e.jitterBufferEmittedCount,
490
+ jitterBufferDelay: (t.jitterBufferDelay - e.jitterBufferDelay) / r,
491
+ framesPerSecond: t.framesPerSecond,
492
+ freezeCount: t.freezeCount - e.freezeCount,
493
+ freezeDuration: t.freezeDuration - e.freezeDuration,
494
+ lowFpsCount: a
495
+ };
496
+ }
497
+ function ut(e) {
498
+ return e.filter(
499
+ (t) => t.freezeCount > 0 || t.framesPerSecond < 21 || t.framesDropped > 0 || t.packetsLost > 0
500
+ ).map((t) => {
501
+ const { timestamp: a, ...r } = t, o = [];
502
+ return t.freezeCount > 0 && o.push("freeze"), t.framesPerSecond < 21 && o.push("low fps"), t.framesDropped > 0 && o.push("frames dropped"), t.packetsLost > 0 && o.push("packet loss"), {
503
+ ...r,
504
+ causes: o
505
+ };
506
+ });
507
+ }
508
+ function ft(e) {
509
+ let t = "", a = 0;
510
+ for (const r of e.values()) {
511
+ if (r && r.type === "codec" && r.mimeType.startsWith("video") && (t = r.mimeType.split("/")[1]), r && r.type === "candidate-pair") {
512
+ const o = r.currentRoundTripTime, c = r.nominated === !0;
513
+ o > 0 && (c || a === 0) && (a = o);
514
+ }
515
+ if (r && r.type === "inbound-rtp" && r.kind === "video")
516
+ return {
517
+ codec: t,
518
+ rtt: a,
519
+ timestamp: r.timestamp,
520
+ bytesReceived: r.bytesReceived,
521
+ packetsReceived: r.packetsReceived,
522
+ packetsLost: r.packetsLost,
523
+ framesDropped: r.framesDropped,
524
+ framesDecoded: r.framesDecoded,
525
+ jitter: r.jitter,
526
+ jitterBufferDelay: r.jitterBufferDelay,
527
+ jitterBufferEmittedCount: r.jitterBufferEmittedCount,
528
+ avgJitterDelayInInterval: r.jitterBufferDelay / r.jitterBufferEmittedCount,
529
+ frameWidth: r.frameWidth,
530
+ frameHeight: r.frameHeight,
531
+ framesPerSecond: r.framesPerSecond,
532
+ freezeCount: r.freezeCount,
533
+ freezeDuration: r.totalFreezesDuration
534
+ };
535
+ }
536
+ return {};
537
+ }
538
+ function mt(e, t, a) {
539
+ const r = e.map((s, d) => d === 0 ? a ? {
540
+ timestamp: s.timestamp,
541
+ duration: 0,
542
+ rtt: s.rtt,
543
+ bytesReceived: s.bytesReceived - a.bytesReceived,
544
+ bitrate: (s.bytesReceived - a.bytesReceived) * 8 / (t / 1e3),
545
+ packetsReceived: s.packetsReceived - a.packetsReceived,
546
+ packetsLost: s.packetsLost - a.packetsLost,
547
+ framesDropped: s.framesDropped - a.framesDropped,
548
+ framesDecoded: s.framesDecoded - a.framesDecoded,
549
+ jitter: s.jitter,
550
+ jitterBufferDelay: s.jitterBufferDelay - a.jitterBufferDelay,
551
+ jitterBufferEmittedCount: s.jitterBufferEmittedCount - a.jitterBufferEmittedCount,
552
+ avgJitterDelayInInterval: (s.jitterBufferDelay - a.jitterBufferDelay) / (s.jitterBufferEmittedCount - a.jitterBufferEmittedCount),
553
+ framesPerSecond: s.framesPerSecond,
554
+ freezeCount: s.freezeCount - a.freezeCount,
555
+ freezeDuration: s.freezeDuration - a.freezeDuration
556
+ } : {
557
+ timestamp: s.timestamp,
558
+ rtt: s.rtt,
559
+ duration: 0,
560
+ bytesReceived: s.bytesReceived,
561
+ bitrate: s.bytesReceived * 8 / (t / 1e3),
562
+ packetsReceived: s.packetsReceived,
563
+ packetsLost: s.packetsLost,
564
+ framesDropped: s.framesDropped,
565
+ framesDecoded: s.framesDecoded,
566
+ jitter: s.jitter,
567
+ jitterBufferDelay: s.jitterBufferDelay,
568
+ jitterBufferEmittedCount: s.jitterBufferEmittedCount,
569
+ avgJitterDelayInInterval: s.jitterBufferDelay / s.jitterBufferEmittedCount,
570
+ framesPerSecond: s.framesPerSecond,
571
+ freezeCount: s.freezeCount,
572
+ freezeDuration: s.freezeDuration
573
+ } : {
574
+ timestamp: s.timestamp,
575
+ duration: t * d / 1e3,
576
+ rtt: s.rtt,
577
+ bytesReceived: s.bytesReceived - e[d - 1].bytesReceived,
578
+ bitrate: (s.bytesReceived - e[d - 1].bytesReceived) * 8 / (t / 1e3),
579
+ packetsReceived: s.packetsReceived - e[d - 1].packetsReceived,
580
+ packetsLost: s.packetsLost - e[d - 1].packetsLost,
581
+ framesDropped: s.framesDropped - e[d - 1].framesDropped,
582
+ framesDecoded: s.framesDecoded - e[d - 1].framesDecoded,
583
+ jitter: s.jitter,
584
+ jitterBufferDelay: s.jitterBufferDelay - e[d - 1].jitterBufferDelay,
585
+ jitterBufferEmittedCount: s.jitterBufferEmittedCount - e[d - 1].jitterBufferEmittedCount,
586
+ avgJitterDelayInInterval: (s.jitterBufferDelay - e[d - 1].jitterBufferDelay) / (s.jitterBufferEmittedCount - e[d - 1].jitterBufferEmittedCount),
587
+ framesPerSecond: s.framesPerSecond,
588
+ freezeCount: s.freezeCount - e[d - 1].freezeCount,
589
+ freezeDuration: s.freezeDuration - e[d - 1].freezeDuration
590
+ }), o = ut(r), i = o.reduce((s, d) => s + (d.causes.includes("low fps") ? 1 : 0), 0), c = r.filter((s) => !!s.avgJitterDelayInInterval).map((s) => s.avgJitterDelayInInterval), n = r.filter((s) => !!s.rtt).map((s) => s.rtt);
591
+ return {
592
+ webRTCStats: {
593
+ anomalies: o,
594
+ minRtt: Math.min(...n),
595
+ avgRtt: ue(n),
596
+ maxRtt: Math.max(...n),
597
+ aggregateReport: lt(e[0], e[e.length - 1], i),
598
+ minJitterDelayInInterval: Math.min(...c),
599
+ maxJitterDelayInInterval: Math.max(...c),
600
+ avgJitterDelayInInterval: ue(c)
601
+ },
602
+ codec: e[0].codec,
603
+ resolution: `${e[0].frameWidth}x${e[0].frameHeight}`
604
+ };
605
+ }
606
+ const oe = 100, gt = Math.max(Math.ceil(400 / oe), 1), ht = 0.25, wt = 0.28;
607
+ function pt() {
608
+ let e = 0, t, a, r = 0;
609
+ return (o) => {
610
+ for (const i of o.values())
611
+ if (i && i.type === "inbound-rtp" && i.kind === "video") {
612
+ const c = i.jitterBufferDelay, n = i.jitterBufferEmittedCount;
613
+ if (a && n > a) {
614
+ const l = c - t, u = n - a;
615
+ r = l / u;
616
+ }
617
+ t = c, a = n;
618
+ const s = i.framesDecoded, d = s - e > 0;
619
+ return e = s, { isReceiving: d, avgJitterDelayInInterval: r, freezeCount: i.freezeCount };
620
+ }
621
+ return { isReceiving: !1, avgJitterDelayInInterval: r };
622
+ };
623
+ }
624
+ function vt(e, t, a, r, o) {
625
+ let i = [], c, n = 0, s = !1, d = Z.Unknown, l = Z.Unknown, u = 0, y = 0;
626
+ const A = pt();
627
+ return setInterval(async () => {
628
+ const j = await e.getStats(), { isReceiving: z, avgJitterDelayInInterval: F, freezeCount: L } = A(j), C = ft(j);
629
+ if (z)
630
+ n = 0, u = L - y, l = F < ht ? Z.Strong : F > wt && u > 1 ? Z.Weak : d, l !== d && (o == null || o(l), d = l, y += u, u = 0), s || (r == null || r(w.Start), c = i[i.length - 1], i = [], s = !0), i.push(C);
631
+ else if (s && (n++, n >= gt)) {
632
+ const K = mt(i, oe, c);
633
+ r == null || r(w.Stop, K), t() || a(), y = L, s = !1;
634
+ }
635
+ }, oe);
636
+ }
637
+ const yt = (window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection).bind(window);
638
+ function me(e) {
639
+ switch (e) {
640
+ case "connected":
641
+ return M.Connected;
642
+ case "checking":
643
+ return M.Connecting;
644
+ case "failed":
645
+ return M.Fail;
646
+ case "new":
647
+ return M.New;
648
+ case "closed":
649
+ return M.Closed;
650
+ case "disconnected":
651
+ return M.Disconnected;
652
+ case "completed":
653
+ return M.Completed;
654
+ default:
655
+ return M.New;
656
+ }
657
+ }
658
+ const kt = (e) => (t) => {
659
+ const [a, r = ""] = t.split(/:(.+)/);
660
+ try {
661
+ const o = JSON.parse(r);
662
+ return e("parsed data channel message", { subject: a, data: o }), { subject: a, data: o };
663
+ } catch (o) {
664
+ return e("Failed to parse data channel message, returning data as string", { subject: a, rawData: r, error: o }), { subject: a, data: r };
665
+ }
666
+ };
667
+ function Ct({
668
+ statsSignal: e,
669
+ dataChannelSignal: t,
670
+ onVideoStateChange: a,
671
+ report: r
672
+ }) {
673
+ e === w.Start && t === w.Start ? a == null || a(w.Start) : e === w.Stop && t === w.Stop && (a == null || a(w.Stop, r));
674
+ }
675
+ function Dt({
676
+ statsSignal: e,
677
+ dataChannelSignal: t,
678
+ onVideoStateChange: a,
679
+ onAgentActivityStateChange: r,
680
+ report: o
681
+ }) {
682
+ e === w.Start ? a == null || a(w.Start) : e === w.Stop && (a == null || a(w.Stop, o)), t === w.Start ? r == null || r(X.Talking) : t === w.Stop && (r == null || r(X.Idle));
683
+ }
684
+ function ge({
685
+ statsSignal: e,
686
+ dataChannelSignal: t,
687
+ onVideoStateChange: a,
688
+ onAgentActivityStateChange: r,
689
+ streamType: o,
690
+ report: i
691
+ }) {
692
+ o === J.Legacy ? Ct({ statsSignal: e, dataChannelSignal: t, onVideoStateChange: a, report: i }) : o === J.Fluent && Dt({
693
+ statsSignal: e,
694
+ dataChannelSignal: t,
695
+ onVideoStateChange: a,
696
+ onAgentActivityStateChange: r,
697
+ report: i
698
+ });
699
+ }
700
+ async function Rt(e, t, { debug: a = !1, callbacks: r, auth: o, baseURL: i = te, analytics: c }) {
701
+ var H;
702
+ const n = dt(a, "WebRTCStreamingManager"), s = kt(n);
703
+ let d = !1, l = !1, u = w.Stop, y = w.Stop;
704
+ const { startConnection: A, sendStreamRequest: j, close: z, createStream: F, addIceCandidate: L } = ct(
705
+ o,
706
+ i,
707
+ e,
708
+ r.onError
709
+ ), {
710
+ id: C,
711
+ offer: K,
712
+ ice_servers: G,
713
+ session_id: x,
714
+ fluent: Y,
715
+ interrupt_enabled: f,
716
+ triggers_enabled: D
717
+ } = await F(t);
718
+ (H = r.onStreamCreated) == null || H.call(r, { stream_id: C, session_id: x, agent_id: e });
719
+ const g = new yt({ iceServers: G }), S = g.createDataChannel("JanusDataChannel");
720
+ if (!x)
721
+ throw new Error("Could not create session_id");
722
+ const p = Y ? J.Fluent : J.Legacy;
723
+ c.enrich({
724
+ "stream-type": p
725
+ });
726
+ const k = t.stream_warmup && !Y, P = () => d, B = () => {
727
+ var m;
728
+ d = !0, l && ((m = r.onConnectionStateChange) == null || m.call(r, M.Connected));
729
+ }, $ = vt(
730
+ g,
731
+ P,
732
+ B,
733
+ (m, h) => ge({
734
+ statsSignal: y = m,
735
+ dataChannelSignal: p === J.Legacy ? u : void 0,
736
+ onVideoStateChange: r.onVideoStateChange,
737
+ onAgentActivityStateChange: r.onAgentActivityStateChange,
738
+ report: h,
739
+ streamType: p
740
+ }),
741
+ (m) => {
742
+ var h;
743
+ return (h = r.onConnectivityStateChange) == null ? void 0 : h.call(r, m);
744
+ }
745
+ );
746
+ g.onicecandidate = (m) => {
747
+ var h;
748
+ n("peerConnection.onicecandidate", m);
749
+ try {
750
+ m.candidate && m.candidate.sdpMid && m.candidate.sdpMLineIndex !== null ? L(
751
+ C,
752
+ {
753
+ candidate: m.candidate.candidate,
754
+ sdpMid: m.candidate.sdpMid,
755
+ sdpMLineIndex: m.candidate.sdpMLineIndex
756
+ },
757
+ x
758
+ ) : L(C, { candidate: null }, x);
759
+ } catch (E) {
760
+ (h = r.onError) == null || h.call(r, E, { streamId: C });
761
+ }
762
+ }, S.onopen = () => {
763
+ l = !0, (!k || d) && B();
764
+ };
765
+ const R = (m) => {
766
+ var h;
767
+ (h = r.onVideoIdChange) == null || h.call(r, m);
768
+ };
769
+ function _(m, h) {
770
+ if (m === b.StreamStarted && typeof h == "object" && "metadata" in h) {
771
+ const E = h.metadata;
772
+ R(E.videoId);
773
+ }
774
+ m === b.StreamDone && R(null), u = m === b.StreamStarted ? w.Start : w.Stop, ge({
775
+ statsSignal: p === J.Legacy ? y : void 0,
776
+ dataChannelSignal: u,
777
+ onVideoStateChange: r.onVideoStateChange,
778
+ onAgentActivityStateChange: r.onAgentActivityStateChange,
779
+ streamType: p
780
+ });
781
+ }
782
+ function W(m, h) {
783
+ const E = typeof h == "string" ? h : h == null ? void 0 : h.metadata;
784
+ E && c.enrich({ streamMetadata: E }), c.track("agent-chat", { event: "ready" });
785
+ }
786
+ const v = {
787
+ [b.StreamStarted]: _,
788
+ [b.StreamDone]: _,
789
+ [b.StreamReady]: W
790
+ };
791
+ S.onmessage = (m) => {
792
+ var U;
793
+ const { subject: h, data: E } = s(m.data);
794
+ (U = v[h]) == null || U.call(v, h, E);
795
+ }, g.oniceconnectionstatechange = () => {
796
+ var h;
797
+ n("peerConnection.oniceconnectionstatechange => " + g.iceConnectionState);
798
+ const m = me(g.iceConnectionState);
799
+ m !== M.Connected && ((h = r.onConnectionStateChange) == null || h.call(r, m));
800
+ }, g.ontrack = (m) => {
801
+ var h;
802
+ n("peerConnection.ontrack", m), (h = r.onSrcObjectReady) == null || h.call(r, m.streams[0]);
803
+ }, await g.setRemoteDescription(K), n("set remote description OK");
804
+ const I = await g.createAnswer();
805
+ return n("create answer OK"), await g.setLocalDescription(I), n("set local description OK"), await A(C, I, x), n("start connection OK"), {
806
+ /**
807
+ * Method to send request to server to get clip or talk depend on you payload
808
+ * @param payload
809
+ */
810
+ speak(m) {
811
+ return j(C, x, m);
812
+ },
813
+ /**
814
+ * Method to close RTC connection
815
+ */
816
+ async disconnect() {
817
+ var m;
818
+ if (C) {
819
+ const h = me(g.iceConnectionState);
820
+ if (g) {
821
+ if (h === M.New) {
822
+ clearInterval($);
823
+ return;
824
+ }
825
+ g.close(), g.oniceconnectionstatechange = null, g.onnegotiationneeded = null, g.onicecandidate = null, g.ontrack = null;
826
+ }
827
+ try {
828
+ h === M.Connected && await z(C, x).catch((E) => {
829
+ });
830
+ } catch (E) {
831
+ n("Error on close stream connection", E);
832
+ }
833
+ (m = r.onAgentActivityStateChange) == null || m.call(r, X.Idle), clearInterval($);
834
+ }
835
+ },
836
+ /**
837
+ * Method to send data channel messages to the server
838
+ */
839
+ sendDataChannelMessage(m) {
840
+ var h, E;
841
+ if (!d || S.readyState !== "open") {
842
+ n("Data channel is not ready for sending messages"), (h = r.onError) == null || h.call(r, new Error("Data channel is not ready for sending messages"), {
843
+ streamId: C
844
+ });
845
+ return;
846
+ }
847
+ try {
848
+ S.send(m);
849
+ } catch (U) {
850
+ n("Error sending data channel message", U), (E = r.onError) == null || E.call(r, U, { streamId: C });
851
+ }
852
+ },
853
+ /**
854
+ * Session identifier information, should be returned in the body of all streaming requests
855
+ */
856
+ sessionId: x,
857
+ /**
858
+ * Id of current RTC stream
859
+ */
860
+ streamId: C,
861
+ streamType: p,
862
+ interruptAvailable: f ?? !1,
863
+ triggersAvailable: D ?? !1
864
+ };
865
+ }
866
+ var ce = /* @__PURE__ */ ((e) => (e.V1 = "v1", e.V2 = "v2", e))(ce || {});
867
+ async function St(e, t, a) {
868
+ const r = e.id;
869
+ switch (t.version) {
870
+ case "v1": {
871
+ const { version: o, ...i } = t;
872
+ return Rt(r, i, a);
873
+ }
874
+ case "v2": {
875
+ const { version: o, ...i } = t;
876
+ switch (i.transport_provider) {
877
+ case de.Livekit:
878
+ const { createLiveKitStreamingManager: c } = await import("./livekit-manager-CNKaXUpT.js");
879
+ return c(r, i, a);
880
+ default:
881
+ throw new Error(`Unsupported transport provider: ${i.transport_provider}`);
882
+ }
883
+ }
884
+ default:
885
+ throw new Error(`Invalid stream version: ${t.version}`);
886
+ }
887
+ }
888
+ function It(e) {
889
+ return {
890
+ transport_provider: de.Livekit,
891
+ chat_id: e == null ? void 0 : e.chatId
892
+ };
893
+ }
894
+ function Et(e) {
895
+ var o, i;
896
+ const { streamOptions: t } = e ?? {}, a = ((o = e == null ? void 0 : e.mixpanelAdditionalProperties) == null ? void 0 : o.plan) !== void 0 ? {
897
+ plan: (i = e.mixpanelAdditionalProperties) == null ? void 0 : i.plan
898
+ } : void 0;
899
+ return { ...{
900
+ output_resolution: t == null ? void 0 : t.outputResolution,
901
+ session_timeout: t == null ? void 0 : t.sessionTimeout,
902
+ stream_warmup: t == null ? void 0 : t.streamWarmup,
903
+ compatibility_mode: t == null ? void 0 : t.compatibilityMode,
904
+ fluent: t == null ? void 0 : t.fluent
905
+ }, ...a && { end_user_data: a } };
906
+ }
907
+ function Mt(e, t) {
908
+ return le(e.presenter.type) ? { version: ce.V2, ...It(t) } : { version: ce.V1, ...Et(t) };
909
+ }
910
+ function _t(e, t, a, r, o) {
911
+ o === J.Fluent ? Tt(e, t, a, r, o) : Pt(e, t, a, r, o);
912
+ }
913
+ function Tt(e, t, a, r, o) {
914
+ e === w.Start ? r.track("stream-session", { event: "start", "stream-type": o }) : e === w.Stop && r.track("stream-session", {
915
+ event: "stop",
916
+ is_greenscreen: t.presenter.type === "clip" && t.presenter.is_greenscreen,
917
+ background: t.presenter.type === "clip" && t.presenter.background,
918
+ "stream-type": o,
919
+ ...a
920
+ });
921
+ }
922
+ function At(e, t, a, r) {
923
+ N.get() <= 0 || (e === w.Start ? a.linkTrack(
924
+ "agent-video",
925
+ { event: "start", latency: N.get(!0), "stream-type": r },
926
+ "start",
927
+ [b.StreamVideoCreated]
928
+ ) : e === w.Stop && a.linkTrack(
929
+ "agent-video",
930
+ {
931
+ event: "stop",
932
+ is_greenscreen: t.presenter.type === "clip" && t.presenter.is_greenscreen,
933
+ background: t.presenter.type === "clip" && t.presenter.background,
934
+ "stream-type": r
935
+ },
936
+ "done",
937
+ [b.StreamVideoDone]
938
+ ));
939
+ }
940
+ function Pt(e, t, a, r, o) {
941
+ N.get() <= 0 || (e === w.Start ? r.linkTrack(
942
+ "agent-video",
943
+ { event: "start", latency: N.get(!0), "stream-type": o },
944
+ "start",
945
+ [b.StreamVideoCreated]
946
+ ) : e === w.Stop && r.linkTrack(
947
+ "agent-video",
948
+ {
949
+ event: "stop",
950
+ is_greenscreen: t.presenter.type === "clip" && t.presenter.is_greenscreen,
951
+ background: t.presenter.type === "clip" && t.presenter.background,
952
+ "stream-type": o,
953
+ ...a
954
+ },
955
+ "done",
956
+ [b.StreamVideoDone]
957
+ ));
958
+ }
959
+ function he(e, t, a) {
960
+ return N.reset(), new Promise(async (r, o) => {
961
+ try {
962
+ let i, c = !1;
963
+ i = await St(e, Mt(e, t), {
964
+ ...t,
965
+ analytics: a,
966
+ callbacks: {
967
+ ...t.callbacks,
968
+ onConnectionStateChange: (n) => {
969
+ var s, d;
970
+ (d = (s = t.callbacks).onConnectionStateChange) == null || d.call(s, n), n === M.Connected && (i ? r(i) : c = !0);
971
+ },
972
+ onVideoStateChange: (n, s) => {
973
+ var d, l;
974
+ (l = (d = t.callbacks).onVideoStateChange) == null || l.call(d, n), _t(
975
+ n,
976
+ e,
977
+ s,
978
+ a,
979
+ i.streamType
980
+ );
981
+ },
982
+ onAgentActivityStateChange: (n) => {
983
+ var s, d;
984
+ (d = (s = t.callbacks).onAgentActivityStateChange) == null || d.call(s, n), n === X.Talking ? ie.update() : ie.reset(), At(
985
+ n === X.Talking ? w.Start : w.Stop,
986
+ e,
987
+ a,
988
+ i.streamType
989
+ );
990
+ }
991
+ }
992
+ }), c && r(i);
993
+ } catch (i) {
994
+ o(i);
995
+ }
996
+ });
997
+ }
998
+ async function bt(e, t, a, r, o) {
999
+ var l, u, y, A;
1000
+ const i = async () => {
1001
+ var j;
1002
+ if (le(e.presenter.type)) {
1003
+ const z = await se(
1004
+ e,
1005
+ a,
1006
+ r,
1007
+ t.mode,
1008
+ t.persistentChat,
1009
+ o
1010
+ ), F = await he(
1011
+ e,
1012
+ { ...t, chatId: (j = z.chat) == null ? void 0 : j.id },
1013
+ r
1014
+ );
1015
+ return { chatResult: z, streamingManager: F };
1016
+ } else {
1017
+ const z = se(
1018
+ e,
1019
+ a,
1020
+ r,
1021
+ t.mode,
1022
+ t.persistentChat,
1023
+ o
1024
+ ), F = he(e, t, r), [L, C] = await Promise.all([z, F]);
1025
+ return { chatResult: L, streamingManager: C };
1026
+ }
1027
+ }, { chatResult: c, streamingManager: n } = await i(), { chat: s, chatMode: d } = c;
1028
+ return d && d !== t.mode && (t.mode = d, (u = (l = t.callbacks).onModeChange) == null || u.call(l, d), d !== T.Functional) ? ((A = (y = t.callbacks).onError) == null || A.call(y, new Me(d)), n == null || n.disconnect(), { chat: s }) : { chat: s, streamingManager: n };
1029
+ }
1030
+ async function xt(e, t) {
1031
+ var G, x, Y;
1032
+ let a = !0, r = null;
1033
+ const o = t.mixpanelKey || Je, i = t.wsURL || Ne, c = t.baseURL || te, n = {
1034
+ messages: [],
1035
+ chatMode: t.mode || T.Functional
1036
+ }, s = Ze({
1037
+ token: o,
1038
+ agentId: e,
1039
+ isEnabled: t.enableAnalitics,
1040
+ externalId: t.externalId,
1041
+ mixpanelAdditionalProperties: t.mixpanelAdditionalProperties
1042
+ }), d = Date.now();
1043
+ fe(() => {
1044
+ s.track("agent-sdk", { event: "init" }, d);
1045
+ });
1046
+ const l = Ve(t.auth, c, t.callbacks.onError, t.externalId), u = await l.getById(e), y = le(u.presenter.type);
1047
+ s.enrich(Oe(u));
1048
+ const { onMessage: A, clearQueue: j } = ot(
1049
+ s,
1050
+ n,
1051
+ t,
1052
+ u,
1053
+ () => {
1054
+ var f;
1055
+ return (f = n.socketManager) == null ? void 0 : f.disconnect();
1056
+ }
1057
+ );
1058
+ n.messages = Ge(t.initialMessages), (x = (G = t.callbacks).onNewMessage) == null || x.call(G, [...n.messages], "answer");
1059
+ const z = (f) => {
1060
+ r = f;
1061
+ }, F = Date.now();
1062
+ fe(() => {
1063
+ s.track("agent-sdk", { event: "loaded", ...qe(u) }, F);
1064
+ });
1065
+ async function L(f) {
1066
+ var P, B, $, R, _, W, v;
1067
+ (B = (P = t.callbacks).onConnectionStateChange) == null || B.call(P, M.Connecting), N.reset(), f && !a && (delete n.chat, (R = ($ = t.callbacks).onNewMessage) == null || R.call($, [...n.messages], "answer"));
1068
+ const D = t.mode === T.DirectPlayback || y ? Promise.resolve(void 0) : at(
1069
+ t.auth,
1070
+ i,
1071
+ { onMessage: A, onError: t.callbacks.onError },
1072
+ t.externalId
1073
+ ), g = ne(
1074
+ () => bt(
1075
+ u,
1076
+ {
1077
+ ...t,
1078
+ callbacks: { ...t.callbacks, onVideoIdChange: z, onMessage: A }
1079
+ },
1080
+ l,
1081
+ s,
1082
+ n.chat
1083
+ ),
1084
+ {
1085
+ limit: 3,
1086
+ timeout: ze,
1087
+ timeoutErrorMessage: "Timeout initializing the stream",
1088
+ // Retry on all errors except for connection errors and rate limit errors, these are already handled in client level.
1089
+ shouldRetryFn: (I) => (I == null ? void 0 : I.message) !== "Could not connect" && I.status !== 429,
1090
+ delayMs: 1e3
1091
+ }
1092
+ ).catch((I) => {
1093
+ var H, m;
1094
+ throw K(T.Maintenance), (m = (H = t.callbacks).onConnectionStateChange) == null || m.call(H, M.Fail), I;
1095
+ }), [S, { streamingManager: p, chat: k }] = await Promise.all([D, g]);
1096
+ k && k.id !== ((_ = n.chat) == null ? void 0 : _.id) && ((v = (W = t.callbacks).onNewChat) == null || v.call(W, k.id)), n.streamingManager = p, n.socketManager = S, n.chat = k, a = !1, s.enrich({
1097
+ chatId: k == null ? void 0 : k.id,
1098
+ streamId: p == null ? void 0 : p.streamId,
1099
+ mode: n.chatMode
1100
+ }), K((k == null ? void 0 : k.chat_mode) ?? t.mode ?? T.Functional);
1101
+ }
1102
+ async function C() {
1103
+ var f, D, g, S;
1104
+ (f = n.socketManager) == null || f.disconnect(), await ((D = n.streamingManager) == null ? void 0 : D.disconnect()), delete n.streamingManager, delete n.socketManager, (S = (g = t.callbacks).onConnectionStateChange) == null || S.call(g, M.Disconnected);
1105
+ }
1106
+ async function K(f) {
1107
+ var D, g;
1108
+ f !== n.chatMode && (s.track("agent-mode-change", { mode: f }), n.chatMode = f, n.chatMode !== T.Functional && await C(), (g = (D = t.callbacks).onModeChange) == null || g.call(D, f));
1109
+ }
1110
+ return {
1111
+ agent: u,
1112
+ getStreamType: () => {
1113
+ var f;
1114
+ return (f = n.streamingManager) == null ? void 0 : f.streamType;
1115
+ },
1116
+ getIsInterruptAvailable: () => {
1117
+ var f;
1118
+ return ((f = n.streamingManager) == null ? void 0 : f.interruptAvailable) ?? !1;
1119
+ },
1120
+ getIsTriggersAvailable: () => {
1121
+ var f;
1122
+ return ((f = n.streamingManager) == null ? void 0 : f.triggersAvailable) ?? !1;
1123
+ },
1124
+ starterMessages: ((Y = u.knowledge) == null ? void 0 : Y.starter_message) || [],
1125
+ getSTTToken: () => l.getSTTToken(u.id),
1126
+ changeMode: K,
1127
+ enrichAnalytics: s.enrich,
1128
+ async connect() {
1129
+ await L(!0), s.track("agent-chat", {
1130
+ event: "connect",
1131
+ mode: n.chatMode
1132
+ });
1133
+ },
1134
+ async reconnect() {
1135
+ await C(), await L(!1), s.track("agent-chat", {
1136
+ event: "reconnect",
1137
+ mode: n.chatMode
1138
+ });
1139
+ },
1140
+ async disconnect() {
1141
+ await C(), s.track("agent-chat", {
1142
+ event: "disconnect",
1143
+ mode: n.chatMode
1144
+ });
1145
+ },
1146
+ async chat(f) {
1147
+ var p, k, P, B, $;
1148
+ const D = () => {
1149
+ if (ye(t.mode))
1150
+ throw new V(`${t.mode} is enabled, chat is disabled`);
1151
+ if (f.length >= 800)
1152
+ throw new V("Message cannot be more than 800 characters");
1153
+ if (f.length === 0)
1154
+ throw new V("Message cannot be empty");
1155
+ if (n.chatMode === T.Maintenance)
1156
+ throw new V("Chat is in maintenance mode");
1157
+ if (![T.TextOnly, T.Playground].includes(n.chatMode)) {
1158
+ if (!n.streamingManager)
1159
+ throw new V("Streaming manager is not initialized");
1160
+ if (!n.chat)
1161
+ throw new V("Chat is not initialized");
1162
+ }
1163
+ }, g = async () => {
1164
+ var R, _;
1165
+ if (!n.chat) {
1166
+ const W = await se(
1167
+ u,
1168
+ l,
1169
+ s,
1170
+ n.chatMode,
1171
+ t.persistentChat
1172
+ );
1173
+ if (!W.chat)
1174
+ throw new Ee(n.chatMode, !!t.persistentChat);
1175
+ n.chat = W.chat, (_ = (R = t.callbacks).onNewChat) == null || _.call(R, n.chat.id);
1176
+ }
1177
+ return n.chat.id;
1178
+ }, S = async (R, _) => ne(y ? async () => {
1179
+ var v, I;
1180
+ return await ((I = (v = n.streamingManager) == null ? void 0 : v.sendTextMessage) == null ? void 0 : I.call(v, f)), Promise.resolve({});
1181
+ } : async () => {
1182
+ var v, I;
1183
+ return l.chat(
1184
+ u.id,
1185
+ _,
1186
+ {
1187
+ chatMode: n.chatMode,
1188
+ streamId: (v = n.streamingManager) == null ? void 0 : v.streamId,
1189
+ sessionId: (I = n.streamingManager) == null ? void 0 : I.sessionId,
1190
+ messages: R.map(({ matches: H, ...m }) => m)
1191
+ },
1192
+ {
1193
+ ...Re(n.chatMode),
1194
+ skipErrorHandler: !0
1195
+ }
1196
+ );
1197
+ }, {
1198
+ limit: 2,
1199
+ shouldRetryFn: (v) => {
1200
+ var m, h, E, U;
1201
+ const I = (m = v == null ? void 0 : v.message) == null ? void 0 : m.includes("missing or invalid session_id");
1202
+ return !((h = v == null ? void 0 : v.message) == null ? void 0 : h.includes("Stream Error")) && !I ? ((U = (E = t.callbacks).onError) == null || U.call(E, v), !1) : !0;
1203
+ },
1204
+ onRetry: async () => {
1205
+ await C(), await L(!1);
1206
+ }
1207
+ });
1208
+ try {
1209
+ j(), D(), n.messages.push({
1210
+ id: O(),
1211
+ role: "user",
1212
+ content: f,
1213
+ created_at: new Date(N.update()).toISOString()
1214
+ }), (k = (p = t.callbacks).onNewMessage) == null || k.call(p, [...n.messages], "user");
1215
+ const R = await g(), _ = await S([...n.messages], R);
1216
+ return n.messages.push({
1217
+ id: O(),
1218
+ role: "assistant",
1219
+ content: _.result || "",
1220
+ created_at: (/* @__PURE__ */ new Date()).toISOString(),
1221
+ context: _.context,
1222
+ matches: _.matches
1223
+ }), s.track("agent-message-send", {
1224
+ event: "success",
1225
+ messages: n.messages.length + 1
1226
+ }), _.result && ((B = (P = t.callbacks).onNewMessage) == null || B.call(P, [...n.messages], "answer"), s.track("agent-message-received", {
1227
+ latency: N.get(!0),
1228
+ messages: n.messages.length
1229
+ })), _;
1230
+ } catch (R) {
1231
+ throw (($ = n.messages[n.messages.length - 1]) == null ? void 0 : $.role) === "assistant" && n.messages.pop(), s.track("agent-message-send", {
1232
+ event: "error",
1233
+ messages: n.messages.length
1234
+ }), R;
1235
+ }
1236
+ },
1237
+ rate(f, D, g) {
1238
+ var k, P, B, $;
1239
+ const S = n.messages.find((R) => R.id === f);
1240
+ if (n.chat) {
1241
+ if (!S)
1242
+ throw new Error("Message not found");
1243
+ } else throw new Error("Chat is not initialized");
1244
+ const p = ((k = S.matches) == null ? void 0 : k.map((R) => [R.document_id, R.id])) ?? [];
1245
+ return s.track("agent-rate", {
1246
+ event: g ? "update" : "create",
1247
+ thumb: D === 1 ? "up" : "down",
1248
+ knowledge_id: ((P = u.knowledge) == null ? void 0 : P.id) ?? "",
1249
+ matches: p,
1250
+ score: D
1251
+ }), g ? l.updateRating(u.id, n.chat.id, g, {
1252
+ knowledge_id: ((B = u.knowledge) == null ? void 0 : B.id) ?? "",
1253
+ message_id: f,
1254
+ matches: p,
1255
+ score: D
1256
+ }) : l.createRating(u.id, n.chat.id, {
1257
+ knowledge_id: (($ = u.knowledge) == null ? void 0 : $.id) ?? "",
1258
+ message_id: f,
1259
+ matches: p,
1260
+ score: D
1261
+ });
1262
+ },
1263
+ deleteRate(f) {
1264
+ if (!n.chat)
1265
+ throw new Error("Chat is not initialized");
1266
+ return s.track("agent-rate-delete", { type: "text" }), l.deleteRating(u.id, n.chat.id, f);
1267
+ },
1268
+ async speak(f) {
1269
+ var p, k, P;
1270
+ function D() {
1271
+ if (typeof f == "string") {
1272
+ if (!u.presenter.voice)
1273
+ throw new Error("Presenter voice is not initialized");
1274
+ return {
1275
+ type: "text",
1276
+ provider: u.presenter.voice,
1277
+ input: f,
1278
+ ssml: !1
1279
+ };
1280
+ }
1281
+ if (f.type === "text" && !f.provider) {
1282
+ if (!u.presenter.voice)
1283
+ throw new Error("Presenter voice is not initialized");
1284
+ return {
1285
+ type: "text",
1286
+ provider: u.presenter.voice,
1287
+ input: f.input,
1288
+ ssml: f.ssml
1289
+ };
1290
+ }
1291
+ return f;
1292
+ }
1293
+ const g = D();
1294
+ if (s.track("agent-speak", g), N.update(), n.messages && g.type === "text" && (n.messages.push({
1295
+ id: O(),
1296
+ role: "assistant",
1297
+ content: g.input,
1298
+ created_at: (/* @__PURE__ */ new Date()).toISOString()
1299
+ }), (k = (p = t.callbacks).onNewMessage) == null || k.call(p, [...n.messages], "answer")), We(n.chatMode))
1300
+ return {
1301
+ duration: 0,
1302
+ video_id: "",
1303
+ status: "success"
1304
+ };
1305
+ if (!n.streamingManager)
1306
+ throw new Error("Please connect to the agent first");
1307
+ return n.streamingManager.speak({
1308
+ script: g,
1309
+ metadata: { chat_id: (P = n.chat) == null ? void 0 : P.id, agent_id: u.id }
1310
+ });
1311
+ },
1312
+ async interrupt({ type: f }) {
1313
+ var g, S, p;
1314
+ et(n.streamingManager, (g = n.streamingManager) == null ? void 0 : g.streamType, r);
1315
+ const D = n.messages[n.messages.length - 1];
1316
+ s.track("agent-video-interrupt", {
1317
+ type: f || "click",
1318
+ video_duration_to_interrupt: ie.get(!0),
1319
+ message_duration_to_interrupt: N.get(!0)
1320
+ }), D.interrupted = !0, (p = (S = t.callbacks).onNewMessage) == null || p.call(S, [...n.messages], "answer"), tt(n.streamingManager, r);
1321
+ }
1322
+ };
1323
+ }
1324
+ export {
1325
+ X as A,
1326
+ M as C,
1327
+ xe as D,
1328
+ Le as K,
1329
+ Ae as P,
1330
+ be as R,
1331
+ J as S,
1332
+ de as T,
1333
+ Te as U,
1334
+ V,
1335
+ _e as W,
1336
+ dt as a,
1337
+ Z as b,
1338
+ Ce as c,
1339
+ te as d,
1340
+ w as e,
1341
+ b as f,
1342
+ q as g,
1343
+ Ee as h,
1344
+ Me as i,
1345
+ xt as j,
1346
+ Pe as k,
1347
+ T as l,
1348
+ je as m,
1349
+ we as n,
1350
+ Lt as o,
1351
+ Be as p,
1352
+ $e as q
1353
+ };