UNPKG

@d-id/client-sdk

Version:
1,381 lines 59.1 kB
var We = Object.defineProperty; var Je = (e, t, r) => t in e ? We(e, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[t] = r; var Z = (e, t, r) => Je(e, typeof t != "symbol" ? t + "" : t, r); class ce extends Error { constructor({ kind: r, description: a, error: c }) { super(JSON.stringify({ kind: r, description: a })); Z(this, "kind"); Z(this, "description"); Z(this, "error"); this.kind = r, this.description = a, this.error = c; } } class Oe extends ce { constructor(t, r) { super({ kind: "ChatCreationFailed", description: `Failed to create ${r ? "persistent" : ""} chat, mode: ${t}` }); } } class He extends ce { constructor(t) { super({ kind: "ChatModeDowngraded", description: `Chat mode downgraded to ${t}` }); } } class G extends ce { constructor(r, a) { super({ kind: "ValidationError", description: r }); Z(this, "key"); this.key = a; } } class qe extends ce { constructor(t) { super({ kind: "WSError", description: t }); } } var Xe = /* @__PURE__ */ ((e) => (e.TRIAL = "trial", e.BASIC = "basic", e.ENTERPRISE = "enterprise", e.LITE = "lite", e.ADVANCED = "advanced", e))(Xe || {}), Ye = /* @__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))(Ye || {}), Ge = /* @__PURE__ */ ((e) => (e.Created = "created", e.Started = "started", e.Done = "done", e.Error = "error", e.Rejected = "rejected", e.Ready = "ready", e))(Ge || {}), Qe = /* @__PURE__ */ ((e) => (e.Unrated = "Unrated", e.Positive = "Positive", e.Negative = "Negative", e))(Qe || {}), x = /* @__PURE__ */ ((e) => (e.Functional = "Functional", e.TextOnly = "TextOnly", e.Maintenance = "Maintenance", e.Playground = "Playground", e.DirectPlayback = "DirectPlayback", e.Off = "Off", e))(x || {}), U = /* @__PURE__ */ ((e) => (e.Embed = "embed", e.Query = "query", e.Partial = "partial", e.Answer = "answer", e.Transcribe = "transcribe", e.Complete = "done", e))(U || {}), Ze = /* @__PURE__ */ ((e) => (e.KnowledgeProcessing = "knowledge/processing", e.KnowledgeIndexing = "knowledge/indexing", e.KnowledgeFailed = "knowledge/error", e.KnowledgeDone = "knowledge/done", e))(Ze || {}), et = /* @__PURE__ */ ((e) => (e.Knowledge = "knowledge", e.Document = "document", e.Record = "record", e))(et || {}), tt = /* @__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))(tt || {}), Pe = /* @__PURE__ */ ((e) => (e.Clip = "clip", e.Talk = "talk", e.Expressive = "expressive", e))(Pe || {}); const sr = (e) => { switch (e) { case "clip": return "clip"; case "talk": return "talk"; case "expressive": return "expressive"; default: throw new Error(`Unknown video type: ${e}`); } }; var S = /* @__PURE__ */ ((e) => (e.Start = "START", e.Stop = "STOP", e))(S || {}), te = /* @__PURE__ */ ((e) => (e.Strong = "STRONG", e.Weak = "WEAK", e.Unknown = "UNKNOWN", e))(te || {}), ne = /* @__PURE__ */ ((e) => (e.Idle = "IDLE", e.Loading = "LOADING", e.Talking = "TALKING", e.ToolActive = "TOOL_ACTIVE", e))(ne || {}), P = /* @__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.ToolCallStarted = "tool-call/started", e.ToolCallDone = "tool-call/done", e.ToolCallError = "tool-call/error", e))(P || {}), L = /* @__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))(L || {}), W = /* @__PURE__ */ ((e) => (e.Legacy = "legacy", e.Fluent = "fluent", e))(W || {}), he = /* @__PURE__ */ ((e) => (e.Livekit = "livekit", e))(he || {}), rt = /* @__PURE__ */ ((e) => (e.Amazon = "amazon", e.AzureOpenAi = "azure-openai", e.Microsoft = "microsoft", e.Afflorithmics = "afflorithmics", e.Elevenlabs = "elevenlabs", e))(rt || {}), nt = /* @__PURE__ */ ((e) => (e.Public = "public", e.Premium = "premium", e.Private = "private", e))(nt || {}); const at = 45 * 1e3, it = "X-Playground-Chat", de = "https://api.d-id.com", st = "wss://notifications.d-id.com", ot = "79f81a83a67430be2bc0fd61042b8faa", or = (...e) => { }, je = (e) => new Promise((t) => setTimeout(t, e)), Q = (e = 16) => { const t = new Uint8Array(e); return window.crypto.getRandomValues(t), Array.from(t, (r) => r.toString(16).padStart(2, "0")).join("").slice(0, 13); }, Be = (e) => e.type === "clip" && e.presenter_id.startsWith("v2_") ? "clip_v2" : e.type, ct = (e) => { switch (e.type) { case "expressive": return "v4"; case "clip": return "v3-pro"; case "talk": return "v2"; } }, dt = (e) => e.type === "talk" ? e.source_url : e.presenter_id, pe = (e) => e === Pe.Expressive, lt = (e) => [x.TextOnly, x.Playground, x.Maintenance].includes(e), $e = (e) => e && [x.DirectPlayback, x.Off].includes(e), Se = /\[!\[([^\[\]]*)\]\(([^)\s]+)\)\]\(([^)\s]+)\)/g, ke = /!\[([^\[\]]*)\]\(([^)\s]+)\)/g, ut = [".mp4", ".webm", ".mkv", ".mov", ".m4v", ".ogv"]; function mt(e) { const t = e.split("?")[0].split("#")[0].toLowerCase(); return ut.some((r) => t.endsWith(r)); } const Re = new RegExp("(?<!!)\\[([^\\[\\]]+)\\]\\(([^)\\s]+)\\)", "g"), De = /<a\s+href="([^"]*)"[^>]*?>([^<]*)<\/a>/gi; function ft(e) { if (e.length === 0) return []; const t = []; let r; for (Se.lastIndex = 0; (r = Se.exec(e)) !== null; ) t.push({ index: r.index, length: r[0].length, part: { type: "video", src: r[3], alt: r[1], thumbnail: r[2] } }); for (ke.lastIndex = 0; (r = ke.exec(e)) !== null; ) if (!t.some((o) => r.index >= o.index && r.index < o.index + o.length)) { const o = r[2], n = r[1]; let i; mt(o) ? i = { type: "video", src: o, alt: n } : (i = { type: "image", src: o, alt: n }, o.toLowerCase().endsWith(".gif") && (i.mimeType = "image/gif")), t.push({ index: r.index, length: r[0].length, part: i }); } for (Re.lastIndex = 0; (r = Re.exec(e)) !== null; ) t.some((o) => r.index >= o.index && r.index < o.index + o.length) || t.push({ index: r.index, length: r[0].length, part: { type: "link", href: r[2], label: r[1] } }); for (De.lastIndex = 0; (r = De.exec(e)) !== null; ) t.some((o) => r.index >= o.index && r.index < o.index + o.length) || t.push({ index: r.index, length: r[0].length, part: { type: "link", href: r[1], label: r[2] } }); if (t.length === 0) return [{ type: "text", text: e }]; t.sort((s, o) => s.index - o.index); const a = []; let c = 0; for (const s of t) s.index > c && a.push({ type: "text", text: e.slice(c, s.index) }), a.push(s.part), c = s.index + s.length; return c < e.length && a.push({ type: "text", text: e.slice(c) }), a; } let Ie = "", le = []; function re(e) { return e === Ie || (Ie = e, le = ft(e)), le; } function gt(e, t) { let r; return { promise: new Promise((c, s) => { r = setTimeout(() => s(new Error(t)), e); }), clear: () => clearTimeout(r) }; } async function ue(e, t) { const r = { limit: (t == null ? void 0 : t.limit) ?? 3, delayMs: (t == null ? void 0 : t.delayMs) ?? 0, timeout: (t == null ? void 0 : t.timeout) ?? 3e4, timeoutErrorMessage: (t == null ? void 0 : t.timeoutErrorMessage) || "Timeout error", shouldRetryFn: (t == null ? void 0 : t.shouldRetryFn) ?? (() => !0), onRetry: (t == null ? void 0 : t.onRetry) ?? (() => { }) }; let a; for (let c = 1; c <= r.limit; c++) try { if (!r.timeout) return await e(); const { promise: s, clear: o } = gt(r.timeout, r.timeoutErrorMessage), n = e().finally(o); return await Promise.race([n, s]); } catch (s) { if (a = s, !r.shouldRetryFn(s) || c >= r.limit) throw s; await je(r.delayMs), r.onRetry(s); } throw a; } function me(e) { if (e !== void 0) return window.localStorage.setItem("did_external_key_id", e), e; let t = window.localStorage.getItem("did_external_key_id"); if (!t) { let r = Q(); window.localStorage.setItem("did_external_key_id", r), t = r; } return t; } let ht = Q(); function ze(e, t) { if (e.type === "bearer") return `Bearer ${e.token}`; if (e.type === "basic") return `Basic ${"token" in e ? e.token : btoa(`${e.username}:${e.password}`)}`; if (e.type === "key") return `Client-Key ${e.clientKey}.${me(t)}_${ht}`; throw new Error(`Unknown auth type: ${e}`); } const pt = (e) => ue(e, { limit: 3, delayMs: 1e3, timeout: 0, shouldRetryFn: (t) => t.status === 429 }); function Fe(e, t = de, r, a) { const c = async (s, o) => { const { skipErrorHandler: n, ...i } = o || {}; let d; try { d = await pt( () => fetch(t + (s != null && s.startsWith("/") ? s : `/${s}`), { ...i, headers: { ...i.headers, Authorization: ze(e, a), "Content-Type": "application/json" } }) ); } catch (m) { throw !((m == null ? void 0 : m.name) === "AbortError") && r && !n && r(m, { url: s, options: i }), m; } if (!d.ok) { let m = await d.text().catch(() => `Failed to fetch with status ${d.status}`); const l = new Error(m); throw r && !n && r(l, { url: s, options: i, headers: d.headers }), l; } return d.json(); }; return { get(s, o) { return c(s, { ...o, method: "GET" }); }, post(s, o, n) { return c(s, { ...n, body: JSON.stringify(o), method: "POST" }); }, delete(s, o, n) { return c(s, { ...n, body: JSON.stringify(o), method: "DELETE" }); }, patch(s, o, n) { return c(s, { ...n, body: JSON.stringify(o), method: "PATCH" }); } }; } function wt(e, t = de, r, a) { const c = Fe(e, `${t}/agents`, r, a); return { create(s, o) { return c.post("/", s, o); }, getAgents(s, o) { return c.get(`/${s ? `?tag=${s}` : ""}`, o).then((n) => n ?? []); }, getById(s, o) { return c.get(`/${s}`, o); }, delete(s, o) { return c.delete(`/${s}`, void 0, o); }, update(s, o, n) { return c.patch(`/${s}`, o, n); }, newChat(s, o, n) { return c.post(`/${s}/chat`, o, n); }, chat(s, o, n, i) { return c.post(`/${s}/chat/${o}`, n, i); }, createRating(s, o, n, i) { return c.post(`/${s}/chat/${o}/ratings`, n, i); }, updateRating(s, o, n, i, d) { return c.patch(`/${s}/chat/${o}/ratings/${n}`, i, d); }, deleteRating(s, o, n, i) { return c.delete(`/${s}/chat/${o}/ratings/${n}`, i); }, getSTTToken(s, o) { return c.get(`/${s}/stt-token`, o); } }; } function vt(e) { var c, s, o, n; const t = () => /Mobi|Android/i.test(navigator.userAgent) ? "Mobile" : "Desktop", r = () => { const i = navigator.platform; return i.toLowerCase().includes("win") ? "Windows" : i.toLowerCase().includes("mac") ? "Mac OS X" : i.toLowerCase().includes("linux") ? "Linux" : "Unknown"; }, a = e.presenter; return { $os: `${r()}`, isMobile: `${t() == "Mobile"}`, browser: navigator.userAgent, origin: window.location.origin, agentType: Be(a), agentVoice: { voiceId: (s = (c = e.presenter) == null ? void 0 : c.voice) == null ? void 0 : s.voice_id, provider: (n = (o = e.presenter) == null ? void 0 : o.voice) == null ? void 0 : n.type } }; } function yt(e) { var r, a, c, s, o, n; const t = (r = e.llm) == null ? void 0 : r.prompt_customization; return { agentType: Be(e.presenter), presenterType: ct(e.presenter), presenter: dt(e.presenter), owner_id: e.owner_id ?? "", promptVersion: (a = e.llm) == null ? void 0 : a.prompt_version, behavior: { role: t == null ? void 0 : t.role, personality: t == null ? void 0 : t.personality, instructions: (c = e.llm) == null ? void 0 : c.instructions }, temperature: (s = e.llm) == null ? void 0 : s.temperature, knowledgeSource: t == null ? void 0 : t.knowledge_source, starterQuestionsCount: (n = (o = e.knowledge) == null ? void 0 : o.starter_message) == null ? void 0 : n.length, topicsToAvoid: t == null ? void 0 : t.topics_to_avoid, maxResponseLength: t == null ? void 0 : t.max_response_length, agentId: e.id, access: e.access, agentName: e.preview_name, ...e.access === "public" ? { from: "agent-template" } : {} }; } const Ct = (e) => e.reduce((t, r) => t + r, 0), Me = (e) => Ct(e) / e.length; function St(e, t, r) { var i, d, m; const { event: a, ...c } = e, { template: s } = (t == null ? void 0 : t.llm) || {}, { language: o } = ((i = t == null ? void 0 : t.presenter) == null ? void 0 : i.voice) || {}; return { ...c, llm: { ...c.llm, template: s }, script: { ...c.script, provider: { ...(d = c == null ? void 0 : c.script) == null ? void 0 : d.provider, language: o } }, stitch: (t == null ? void 0 : t.presenter.type) === "talk" ? (m = t == null ? void 0 : t.presenter) == null ? void 0 : m.stitch : void 0, ...r }; } function Ee(e) { "requestIdleCallback" in window ? requestIdleCallback(e, { timeout: 2e3 }) : setTimeout(e, 0); } const kt = "https://api-js.mixpanel.com/track/?verbose=1&ip=1"; function Rt(e) { const t = window != null && window.hasOwnProperty("DID_AGENTS_API") ? "agents-ui" : "agents-sdk", r = {}; return { token: e.token || "testKey", distinct_id: me(e.externalId), agentId: e.agentId, additionalProperties: { id: me(e.externalId), ...e.mixpanelAdditionalProperties || {} }, isEnabled: e.isEnabled ?? !0, getRandom: Q, enrich(a) { this.additionalProperties = { ...this.additionalProperties, ...a }; }, async track(a, c, s) { if (!this.isEnabled) return Promise.resolve(); const { audioPath: o, ...n } = c || {}, i = s || Date.now(), d = { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: new URLSearchParams({ data: JSON.stringify([ { event: a, properties: { ...this.additionalProperties, ...n, agentId: this.agentId, source: t, token: this.token, time: i, $insert_id: this.getRandom(), origin: window.location.href, "Screen Height": window.screen.height || window.innerWidth, "Screen Width": window.screen.width || window.innerHeight, "User Agent": navigator.userAgent } } ]) }) }; return fetch(kt, d).catch((m) => console.error("Analytics tracking error:", m)), Promise.resolve(); }, linkTrack(a, c, s, o) { r[a] || (r[a] = { events: {}, resolvedDependencies: [] }), o.includes(s) || o.push(s); const n = r[a]; if (n.events[s] = { props: c }, n.resolvedDependencies.push(s), o.every( (d) => n.resolvedDependencies.includes(d) )) { const d = o.reduce((m, l) => n.events[l] ? { ...m, ...n.events[l].props } : m, {}); this.track(a, d), n.resolvedDependencies = n.resolvedDependencies.filter( (m) => !o.includes(m) ), o.forEach((m) => { delete n.events[m]; }); } } }; } function we() { let e = 0; return { reset: () => e = 0, update: () => e = Date.now(), get: (t = !1) => t ? Date.now() - e : e }; } const H = we(), fe = we(), Te = we(); function Ne(e) { return e === x.Playground ? { headers: { [it]: "true" } } : {}; } async function Ve(e, t, r, a, c = !1, s) { try { return !s && !$e(a) && (s = await t.newChat(e.id, { persist: c }, Ne(a)), r.track("agent-chat", { event: "created", chatId: s.id, mode: a })), { chat: s, chatMode: (s == null ? void 0 : s.chat_mode) ?? a }; } catch (o) { throw Dt(o) === "InsufficientCreditsError" ? new Error("InsufficientCreditsError") : new Error("Cannot create new chat"); } } const Dt = (e) => { try { const t = JSON.parse(e.message); return t == null ? void 0 : t.kind; } catch { return "UnknownError"; } }; function It(e) { return e && e.length > 0 ? e : []; } function Mt(e) { return new Promise((t, r) => { const { callbacks: a, host: c, auth: s, externalId: o } = e, { onMessage: n = null, onOpen: i = null, onClose: d = null, onError: m = null } = a || {}, l = new WebSocket(`${c}?authorization=${encodeURIComponent(ze(s, o))}`); l.onmessage = n, l.onclose = d, l.onerror = (w) => { console.error(w), m == null || m("Websocket failed to connect", w), r(w); }, l.onopen = (w) => { i == null || i(w), t(l); }; }); } async function Et(e) { const { retries: t = 1 } = e; let r = null; for (let a = 0; (r == null ? void 0 : r.readyState) !== WebSocket.OPEN; a++) try { r = await Mt(e); } catch (c) { if (a === t) throw c; await je(a * 500); } return r; } async function Tt(e, t, r, a) { const c = r != null && r.onMessage ? [r.onMessage] : [], s = await Et({ auth: e, host: t, externalId: a, callbacks: { onError: (o) => { var n; return (n = r.onError) == null ? void 0 : n.call(r, new qe(o)); }, onMessage(o) { const n = JSON.parse(o.data); c.forEach((i) => i(n.event, n)); } } }); return { socket: s, disconnect: () => s.close(), subscribeToEvents: (o) => c.push(o) }; } function _t(e) { if (e.answer !== void 0) return e.answer; let t = 0, r = ""; for (; t in e; ) r += e[t++]; return r; } function bt(e, t, r) { if (!e.content) return; const a = t.messages[t.messages.length - 1]; (a == null ? void 0 : a.role) === "assistant" && !a.interrupted && (a.interrupted = !0); const c = { id: e.id || `user-${Date.now()}`, role: e.role, content: e.content, parts: re(e.content), created_at: e.created_at || (/* @__PURE__ */ new Date()).toISOString(), transcribed: !0 }; t.messages.push(c), r == null || r([...t.messages], "user"); } function At(e, t, r, a, c, s) { if (e === U.Transcribe && t.content) { bt(t, a, c); return; } if (!(e === U.Partial || e === U.Answer)) return; const o = a.messages[a.messages.length - 1], n = t.id && (o == null ? void 0 : o.role) === "assistant" && o.id !== t.id; let i; if ((o == null ? void 0 : o.role) === "assistant" && !n) i = o; else if (!o || o.transcribed && o.role === "user" || n) n && s(), i = { id: t.id || `assistant-${Date.now()}`, role: t.role || "assistant", content: t.content || "", parts: [], created_at: t.created_at || (/* @__PURE__ */ new Date()).toISOString() }, a.messages.push(i); else return; const { content: d, sequence: m } = t; e === U.Partial ? r[m] = d : r.answer = d; const l = _t(r); (i.content !== l || e === U.Answer) && (i.content = l, i.parts = re(l), c == null || c([...a.messages], e)); } function xt(e, t, r, a, c) { let s = {}; const o = () => s = {}; let n = "answer"; const i = (d, m) => { var l, w; m === "user" && o(), n = m, (w = (l = r.callbacks).onNewMessage) == null || w.call(l, d, m); }; return { clearQueue: o, onMessage: (d, m) => { var l, w; if ("content" in m) { const v = d === P.ChatAnswer ? U.Answer : d === P.ChatAudioTranscribed ? U.Transcribe : d; At(v, m, s, t, i, o), v === U.Answer && e.track("agent-message-received", { content: m.content, messages: t.messages.length, mode: t.chatMode }); } else { const v = P, k = [v.StreamVideoDone, v.StreamVideoError, v.StreamVideoRejected], B = [v.StreamFailed, v.StreamVideoError, v.StreamVideoRejected], M = St(m, a, { mode: t.chatMode }); if (d = d, d === v.StreamVideoCreated && (e.linkTrack("agent-video", M, v.StreamVideoCreated, ["start"]), m.sentiment)) { const D = t.messages[t.messages.length - 1]; if ((D == null ? void 0 : D.role) === "assistant") { const $ = { ...D, sentiment: m.sentiment }; t.messages[t.messages.length - 1] = $, i == null || i([...t.messages], n); } } if (k.includes(d)) { const D = d.split("/")[1]; B.includes(d) ? e.track("agent-video", { ...M, event: D }) : e.linkTrack("agent-video", { ...M, event: D }, d, ["done"]); } B.includes(d) && ((w = (l = r.callbacks).onError) == null || w.call(l, new Error(`Stream failed with event ${d}`), { data: m })), m.event === v.StreamDone && c(); } } }; } function Lt(e, t, r, a) { const c = Fe(e, `${t}/agents/${r}`, a); return { createStream(s, o) { return c.post("/streams", s, { signal: o }); }, startConnection(s, o, n, i) { return c.post( `/streams/${s}/sdp`, { session_id: n, answer: o }, { signal: i } ); }, addIceCandidate(s, o, n, i) { return c.post( `/streams/${s}/ice`, { session_id: n, ...o }, { signal: i } ); }, sendStreamRequest(s, o, n) { return c.post(`/streams/${s}`, { session_id: o, ...n }); }, close(s, o) { return c.delete(`/streams/${s}`, { session_id: o }); } }; } const Pt = (e, t) => (r, a) => e && console.log(`[${t}] ${r}`, a ?? ""); function jt(e, t, r) { const a = (t.timestamp - e.timestamp) / 1e3; return { duration: a, bytesReceived: t.bytesReceived - e.bytesReceived, bitrate: Math.round((t.bytesReceived - e.bytesReceived) * 8 / a), packetsReceived: t.packetsReceived - e.packetsReceived, packetsLost: t.packetsLost - e.packetsLost, framesDropped: t.framesDropped - e.framesDropped, framesDecoded: t.framesDecoded - e.framesDecoded, jitter: t.jitter, avgJitterDelayInInterval: (t.jitterBufferDelay - e.jitterBufferDelay) / (t.jitterBufferEmittedCount - e.jitterBufferEmittedCount), jitterBufferEmittedCount: t.jitterBufferEmittedCount - e.jitterBufferEmittedCount, jitterBufferDelay: (t.jitterBufferDelay - e.jitterBufferDelay) / a, framesPerSecond: t.framesPerSecond, freezeCount: t.freezeCount - e.freezeCount, freezeDuration: t.freezeDuration - e.freezeDuration, lowFpsCount: r }; } function Bt(e) { return e.filter( (t) => t.freezeCount > 0 || t.framesPerSecond < 21 || t.framesDropped > 0 || t.packetsLost > 0 ).map((t) => { const { timestamp: r, ...a } = t, c = []; return t.freezeCount > 0 && c.push("freeze"), t.framesPerSecond < 21 && c.push("low fps"), t.framesDropped > 0 && c.push("frames dropped"), t.packetsLost > 0 && c.push("packet loss"), { ...a, causes: c }; }); } function $t(e) { var o; let t = "", r = 0, a = null; const c = /* @__PURE__ */ new Map(); for (const n of e.values()) if (n) if (n.type === "codec" && ((o = n.mimeType) != null && o.startsWith("video"))) c.set(n.id, n.mimeType.split("/")[1]); else if (n.type === "candidate-pair") { const i = n, d = i.currentRoundTripTime ?? 0; d > 0 && (i.nominated === !0 || r === 0) && (r = d); } else n.type === "inbound-rtp" && n.kind === "video" && (a = n); if (!a) return {}; const s = a; return s.codecId && c.has(s.codecId) ? t = c.get(s.codecId) : c.size > 0 && (t = c.values().next().value ?? ""), { codec: t, rtt: r, timestamp: s.timestamp, bytesReceived: s.bytesReceived, packetsReceived: s.packetsReceived, packetsLost: s.packetsLost, framesDropped: s.framesDropped, framesDecoded: s.framesDecoded, jitter: s.jitter, jitterBufferDelay: s.jitterBufferDelay, jitterBufferEmittedCount: s.jitterBufferEmittedCount, avgJitterDelayInInterval: s.jitterBufferDelay / s.jitterBufferEmittedCount, frameWidth: s.frameWidth, frameHeight: s.frameHeight, framesPerSecond: s.framesPerSecond, freezeCount: s.freezeCount, freezeDuration: s.totalFreezesDuration }; } function _e(e, t, r) { const a = e.map((i, d) => d === 0 ? r ? { timestamp: i.timestamp, duration: 0, rtt: i.rtt, bytesReceived: i.bytesReceived - r.bytesReceived, bitrate: (i.bytesReceived - r.bytesReceived) * 8 / (t / 1e3), packetsReceived: i.packetsReceived - r.packetsReceived, packetsLost: i.packetsLost - r.packetsLost, framesDropped: i.framesDropped - r.framesDropped, framesDecoded: i.framesDecoded - r.framesDecoded, jitter: i.jitter, jitterBufferDelay: i.jitterBufferDelay - r.jitterBufferDelay, jitterBufferEmittedCount: i.jitterBufferEmittedCount - r.jitterBufferEmittedCount, avgJitterDelayInInterval: (i.jitterBufferDelay - r.jitterBufferDelay) / (i.jitterBufferEmittedCount - r.jitterBufferEmittedCount), framesPerSecond: i.framesPerSecond, freezeCount: i.freezeCount - r.freezeCount, freezeDuration: i.freezeDuration - r.freezeDuration } : { timestamp: i.timestamp, rtt: i.rtt, duration: 0, bytesReceived: i.bytesReceived, bitrate: i.bytesReceived * 8 / (t / 1e3), packetsReceived: i.packetsReceived, packetsLost: i.packetsLost, framesDropped: i.framesDropped, framesDecoded: i.framesDecoded, jitter: i.jitter, jitterBufferDelay: i.jitterBufferDelay, jitterBufferEmittedCount: i.jitterBufferEmittedCount, avgJitterDelayInInterval: i.jitterBufferDelay / i.jitterBufferEmittedCount, framesPerSecond: i.framesPerSecond, freezeCount: i.freezeCount, freezeDuration: i.freezeDuration } : { timestamp: i.timestamp, duration: t * d / 1e3, rtt: i.rtt, bytesReceived: i.bytesReceived - e[d - 1].bytesReceived, bitrate: (i.bytesReceived - e[d - 1].bytesReceived) * 8 / (t / 1e3), packetsReceived: i.packetsReceived - e[d - 1].packetsReceived, packetsLost: i.packetsLost - e[d - 1].packetsLost, framesDropped: i.framesDropped - e[d - 1].framesDropped, framesDecoded: i.framesDecoded - e[d - 1].framesDecoded, jitter: i.jitter, jitterBufferDelay: i.jitterBufferDelay - e[d - 1].jitterBufferDelay, jitterBufferEmittedCount: i.jitterBufferEmittedCount - e[d - 1].jitterBufferEmittedCount, avgJitterDelayInInterval: (i.jitterBufferDelay - e[d - 1].jitterBufferDelay) / (i.jitterBufferEmittedCount - e[d - 1].jitterBufferEmittedCount), framesPerSecond: i.framesPerSecond, freezeCount: i.freezeCount - e[d - 1].freezeCount, freezeDuration: i.freezeDuration - e[d - 1].freezeDuration }), c = Bt(a), s = c.reduce((i, d) => i + (d.causes.includes("low fps") ? 1 : 0), 0), o = a.filter((i) => !!i.avgJitterDelayInInterval).map((i) => i.avgJitterDelayInInterval), n = a.filter((i) => !!i.rtt).map((i) => i.rtt); return { webRTCStats: { anomalies: c, minRtt: Math.min(...n), avgRtt: Me(n), maxRtt: Math.max(...n), aggregateReport: jt(e[0], e[e.length - 1], s), minJitterDelayInInterval: Math.min(...o), maxJitterDelayInInterval: Math.max(...o), avgJitterDelayInInterval: Me(o) }, codec: e[0].codec, resolution: `${e[0].frameWidth}x${e[0].frameHeight}` }; } function Ke(e, t) { for (const r of e.values()) if ((r == null ? void 0 : r.type) === "inbound-rtp" && r.kind === t) return r; return null; } const ee = 10; function cr(e, t) { let r = !1, a = !1, c = null, s = 0, o = 0, n = {}; async function i() { if (r) { try { const d = await e(); if (!d) { c = setTimeout(i, ee); return; } const m = Ke(d, "audio"); if (!m) { c = setTimeout(i, ee); return; } const l = m.totalAudioEnergy ?? 0, w = m.totalSamplesReceived ?? 0; if (!a) { s = l, o = w, a = !0, c = setTimeout(i, ee); return; } const v = l - s, k = w - o; if (s = l, o = w, k > 0 && v > 0) { r = !1, t(n); return; } } catch { } r && (c = setTimeout(i, ee)); } } return { arm(d = {}) { n = d, r = !0, a = !1, performance.now(), c !== null && clearTimeout(c), c = setTimeout(i, ee); }, destroy() { r = !1, c !== null && (clearTimeout(c), c = null); } }; } const oe = 100, zt = Math.max(Math.ceil(400 / oe), 1), Ft = 0.25, Nt = 0.28; function Vt() { let e = 0, t, r, a = 0; return (c) => { const s = Ke(c, "video"); if (!s) return { isReceiving: !1, avgJitterDelayInInterval: a }; const o = s.jitterBufferDelay, n = s.jitterBufferEmittedCount; if (r && n > r) { const m = o - t, l = n - r; a = m / l; } t = o, r = n; const i = s.framesDecoded, d = i - e > 0; return e = i, { isReceiving: d, avgJitterDelayInInterval: a, freezeCount: s.freezeCount }; }; } function Kt(e, t, r, a, c) { let s = null, o = [], n, i = 0, d = !1, m = te.Unknown, l = te.Unknown, w = 0, v = 0; const k = Vt(); async function B() { const M = await e(); if (!M) return; const { isReceiving: D, avgJitterDelayInInterval: $, freezeCount: _ } = k(M), q = $t(M); if (D) i = 0, w = _ - v, l = $ < Ft ? te.Strong : $ > Nt && w > 1 ? te.Weak : m, l !== m && (c == null || c(l), m = l, v += w, w = 0), d || (a == null || a(S.Start), n = o[o.length - 1], o = [], d = !0), o.push(q); else if (d && (i++, i >= zt)) { const J = _e(o, oe, n); a == null || a(S.Stop, J), t() || r(), v = _, d = !1; } } return { start: () => { s || (s = setInterval(B, oe)); }, stop: () => { s && (clearInterval(s), s = null); }, getReport: () => _e(o, oe, n) }; } const Ut = (window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection).bind(window); function be(e) { switch (e) { case "connected": return L.Connected; case "checking": return L.Connecting; case "failed": return L.Fail; case "new": return L.New; case "closed": return L.Closed; case "disconnected": return L.Disconnected; case "completed": return L.Completed; default: return L.New; } } const Wt = (e) => (t) => { const [r, a = ""] = t.split(/:(.+)/); try { const c = JSON.parse(a); return e("parsed data channel message", { subject: r, data: c }), { subject: r, data: c }; } catch (c) { return e("Failed to parse data channel message, returning data as string", { subject: r, rawData: a, error: c }), { subject: r, data: a }; } }; function Jt({ statsSignal: e, dataChannelSignal: t, onVideoStateChange: r, report: a, log: c }) { e === S.Start && t === S.Start ? (c("CALLBACK: onVideoStateChange(Start)"), r == null || r(S.Start)) : e === S.Stop && t === S.Stop && (c("CALLBACK: onVideoStateChange(Stop)"), r == null || r(S.Stop, a)); } function Ot({ statsSignal: e, dataChannelSignal: t, onVideoStateChange: r, onAgentActivityStateChange: a, report: c, log: s }) { e === S.Start ? (s("CALLBACK: onVideoStateChange(Start)"), r == null || r(S.Start)) : e === S.Stop && (s("CALLBACK: onVideoStateChange(Stop)"), r == null || r(S.Stop, c)), t === S.Start ? a == null || a(ne.Talking) : t === S.Stop && (a == null || a(ne.Idle)); } function Ae({ statsSignal: e, dataChannelSignal: t, onVideoStateChange: r, onAgentActivityStateChange: a, streamType: c, report: s, log: o }) { c === W.Legacy ? Jt({ statsSignal: e, dataChannelSignal: t, onVideoStateChange: r, report: s, log: o }) : c === W.Fluent && Ot({ statsSignal: e, dataChannelSignal: t, onVideoStateChange: r, onAgentActivityStateChange: a, report: s, log: o }); } async function Ht(e, t, { debug: r = !1, callbacks: a, auth: c, baseURL: s = de, analytics: o }, n) { var E; const i = Pt(r, "WebRTCStreamingManager"), d = Wt(i); let m = !1, l = !1, w = S.Stop, v = S.Stop; const { startConnection: k, sendStreamRequest: B, close: M, createStream: D, addIceCandidate: $ } = Lt( c, s, e, a.onError ), { id: _, offer: q, ice_servers: J, session_id: N, fluent: X, interrupt_enabled: O } = await D(t, n); (E = a.onStreamCreated) == null || E.call(a, { stream_id: _, session_id: N, agent_id: e }); const I = new Ut({ iceServers: J }), Y = I.createDataChannel("JanusDataChannel"); if (!N) throw new Error("Could not create session_id"); const V = X ? W.Fluent : W.Legacy; o.enrich({ "stream-type": V }); const ae = t.stream_warmup && !X, ie = () => m, u = () => { var f; m = !0, l && (i("CALLBACK: onConnectionStateChange(Connected)"), (f = a.onConnectionStateChange) == null || f.call(a, L.Connected)); }, g = Kt( () => I.getStats(), ie, u, (f, h) => Ae({ statsSignal: v = f, dataChannelSignal: V === W.Legacy ? w : void 0, onVideoStateChange: a.onVideoStateChange, onAgentActivityStateChange: a.onAgentActivityStateChange, report: h, streamType: V, log: i }), (f) => { var h; return (h = a.onConnectivityStateChange) == null ? void 0 : h.call(a, f); } ); g.start(), I.onicecandidate = (f) => { var h; i("peerConnection.onicecandidate", f); try { f.candidate && f.candidate.sdpMid && f.candidate.sdpMLineIndex !== null ? $( _, { candidate: f.candidate.candidate, sdpMid: f.candidate.sdpMid, sdpMLineIndex: f.candidate.sdpMLineIndex }, N, n ) : $(_, { candidate: null }, N, n); } catch (b) { (h = a.onError) == null || h.call(a, b, { streamId: _ }); } }, Y.onopen = () => { l = !0, (!ae || m) && u(); }; let p = null; const y = (f) => { var h; p = f, (h = a.onVideoIdChange) == null || h.call(a, f); }; function C(f, h) { if (f === P.StreamStarted && typeof h == "object" && "metadata" in h) { const b = h.metadata; y(b.videoId); } f === P.StreamDone && y(null), w = f === P.StreamStarted ? S.Start : S.Stop, Ae({ statsSignal: V === W.Legacy ? v : void 0, dataChannelSignal: w, onVideoStateChange: a.onVideoStateChange, onAgentActivityStateChange: a.onAgentActivityStateChange, streamType: V, log: i }); } function R(f, h) { var T; const b = typeof h == "string" ? h : h == null ? void 0 : h.metadata; b && o.enrich({ streamMetadata: b }), (T = a.onStreamReady) == null || T.call(a); } const j = { [P.StreamStarted]: C, [P.StreamDone]: C, [P.StreamReady]: R }; Y.onmessage = (f) => { var T; const { subject: h, data: b } = d(f.data); (T = j[h]) == null || T.call(j, h, b); }, I.oniceconnectionstatechange = () => { var h; i("peerConnection.oniceconnectionstatechange => " + I.iceConnectionState); const f = be(I.iceConnectionState); f !== L.Connected && ((h = a.onConnectionStateChange) == null || h.call(a, f)); }, I.ontrack = (f) => { var h; i("peerConnection.ontrack", f), i("CALLBACK: onSrcObjectReady"), (h = a.onSrcObjectReady) == null || h.call(a, f.streams[0]); }, await I.setRemoteDescription(q), i("set remote description OK"); const z = await I.createAnswer(); i("create answer OK"), await I.setLocalDescription(z), i("set local description OK"), await k(_, z, N, n), i("start connection OK"); function F(f) { var h, b; if (!m || Y.readyState !== "open") { i("Data channel is not ready for sending messages"), (h = a.onError) == null || h.call(a, new Error("Data channel is not ready for sending messages"), { streamId: _ }); return; } try { Y.send(f); } catch (T) { i("Error sending data channel message", T), (b = a.onError) == null || b.call(a, T, { streamId: _ }); } } return { /** * Method to send request to server to get clip or talk depend on you payload * @param payload */ speak(f) { return B(_, N, f); }, /** * Method to close RTC connection */ async disconnect() { var f; if (_) { const h = be(I.iceConnectionState); if (I) { if (h === L.New) { g.stop(); return; } I.close(), I.oniceconnectionstatechange = null, I.onnegotiationneeded = null, I.onicecandidate = null, I.ontrack = null; } try { h === L.Connected && await M(_, N).catch((b) => { }); } catch (b) { i("Error on close stream connection", b); } (f = a.onAgentActivityStateChange) == null || f.call(a, ne.Idle), g.stop(); } }, sendDataChannelMessage: F, /** * Session identifier information, should be returned in the body of all streaming requests */ sessionId: N, /** * Id of current RTC stream */ streamId: _, streamType: V, interruptAvailable: O ?? !1, isInterruptible: !0, interrupt(f) { if (!O) throw new Error("Interrupt is not enabled for this stream"); if (V !== W.Fluent) throw new Error("Interrupt only available for Fluent streams"); if (!p) throw new Error("No active video to interrupt"); const h = { type: P.StreamInterrupt, videoId: p, timestamp: Date.now() }; F(JSON.stringify(h)); } }; } var ge = /* @__PURE__ */ ((e) => (e.V1 = "v1", e.V2 = "v2", e))(ge || {}); async function qt(e, t, r, a) { const c = e.id; switch (t.version) { case "v1": { const { version: s, ...o } = t; return Ht(c, o, r, a); } case "v2": { const { version: s, ...o } = t; switch (o.transport.provider) { case he.Livekit: const { createLiveKitStreamingManager: n } = await import("./livekit-manager-BtTtY9lx.js"); return n(c, o, r); default: throw new Error(`Unsupported transport provider: ${o.transport.provider}`); } } default: throw new Error(`Invalid stream version: ${t.version}`); } } const Xt = "cht"; function Yt() { return { transport: { provider: he.Livekit } }; } function Gt(e) { var c, s; const { streamOptions: t } = e ?? {}, r = ((c = e == null ? void 0 : e.mixpanelAdditionalProperties) == null ? void 0 : c.plan) !== void 0 ? { plan: (s = e.mixpanelAdditionalProperties) == null ? void 0 : s.plan } : void 0; return { ...{ output_resolution: t == null ? void 0 : t.outputResolution, session_timeout: t == null ? void 0 : t.sessionTimeout, stream_warmup: t == null ? void 0 : t.streamWarmup, compatibility_mode: t == null ? void 0 : t.compatibilityMode, fluent: t == null ? void 0 : t.fluent }, ...r && { end_user_data: r } }; } function Qt(e, t) { return pe(e.presenter.type) ? { version: ge.V2, ...Yt() } : { version: ge.V1, ...Gt(t) }; } function Zt(e, t, r) { r.track("agent-connection-state-change", { state: e, ...t && { reason: t } }); } function er(e, t, r, a, c) { c === W.Fluent ? tr(e, t, r, a, c) : rr(e, t, r, a, c); } function tr(e, t, r, a, c) { e === S.Start ? a.track("stream-session", { event: "start", "stream-type": c }) : e === S.Stop && a.track("stream-session", { event: "stop", is_greenscreen: t.presenter.type === "clip" && t.presenter.is_greenscreen, background: t.presenter.type === "clip" && t.presenter.background, "stream-type": c, ...r }); } function xe(e, t, r, a, c) { e === S.Start ? r.linkTrack("agent-video", { event: "start", ...c, "stream-type": a }, "start", [ P.StreamVideoCreated ]) : e === S.Stop && r.linkTrack( "agent-video", { event: "stop", is_greenscreen: t.presenter.type === "clip" && t.presenter.is_greenscreen, background: t.presenter.type === "clip" && t.presenter.background, "stream-type": a }, "done", [P.StreamVideoDone] ); } function rr(e, t, r, a, c) { e === S.Start ? a.linkTrack( "agent-video", { event: "start", latency: H.get(!0), "stream-type": c }, "start", [P.StreamVideoCreated] ) : e === S.Stop && a.linkTrack( "agent-video", { event: "stop", is_greenscreen: t.presenter.type === "clip" && t.presenter.is_greenscreen, background: t.presenter.type === "clip" && t.presenter.background, "stream-type": c, ...r }, "done", [P.StreamVideoDone] ); } function nr(e, t, r) { const a = { call_id: t.call_id, name: t.name }; if (e === P.ToolCallStarted) { r.track("agent-tool-call", { ...a, event: "started" }); return; } const c = t; r.track("agent-tool-call", { ...a, event: e === P.ToolCallDone ? "done" : "error", duration_ms: c.duration_ms, extra_keys: c.extra ? Object.keys(c.extra).length : 0 }); } function Le(e, t, r, a) { return H.reset(), Te.update(), new Promise(async (c, s) => { try { let o, n = !1; const i = Qt(e, t); r.enrich({ "stream-version": i.version.toString() }); let d = null; const m = e.presenter.type === "expressive"; o = await qt( e, i, { ...t, analytics: r, callbacks: { ...t.callbacks, onConnectionStateChange: (l, w) => { var v, k; (k = (v = t.callbacks).onConnectionStateChange) == null || k.call(v, l), Zt(l, w, r), l === L.Connected && (o ? c(o) : n = !0); }, onVideoStateChange: (l, w) => { var v, k; (k = (v = t.callbacks).onVideoStateChange) == null || k.call(v, l), er( l, e, w, r, o.streamType ); }, onAgentActivityStateChange: (l) => { var w, v; (v = (w = t.callbacks).onAgentActivityStateChange) == null || v.call(w, l), l === ne.Talking ? (fe.update(), d = (k) => { xe( S.Start, e, r, o.streamType, k ), d = null; }, m || d({ latency: H.get(!0) })) : (fe.reset(), d = null, xe( S.Stop, e, r, o.streamType )); }, onFirstAudioDetected: (l) => { d == null || d(l); }, onStreamReady: () => { const l = Te.get(!0); r.track("agent-chat", { event: "ready", latency: l }); }, onToolEvent: (l, w) => { var v, k; (k = (v = t.callbacks).onToolEvent) == null || k.call(v, l, w), nr(l, w, r); } } }, a ), n && c(o); } catch (o) { s(o); } }); } async function ar(e, t, r, a, c) { var m, l, w, v; const s = async () => { if (pe(e.presenter.type)) { const k = await Le(e, t, a), B = `${Xt}_${k.sessionId}`, M = (/* @__PURE__ */ new Date()).toISOString(); return { chatResult: { chatMode: x.Functional, chat: { id: B, agent_id: e.id, owner_id: e.owner_id ?? "", created: M, modified: M, agent_id__created_at: M, agent_id__modified_at: M, chat_mode: x.Functional, messages: [] } }, streamingManager: k }; } else { const k = new AbortController(), B = k.signal; let M; try { const D = Ve( e, r, a, t.mode, t.persistentChat, c ), $ = Le(e, t, a, B).then((J) => (M = J, J)), [_, q] = await Promise.all([D, $]); return { chatResult: _, streamingManager: q }; } catch (D) { throw k.abort(), M && await M.disconnect().catch(() => { }), D; } } }, { chatResult: o, streamingManager: n } = await s(), { chat: i, chatMode: d } = o; return d && t.mode !== void 0 && d !== t.mode && (t.mode = d, (l = (m = t.callbacks).onModeChange) == null || l.call(m, d), d !== x.Functional) ? ((v = (w = t.callbacks).onError) == null || v.call(w, new He(d)), n == null || n.disconnect(), { chat: i }) : { chat: i, streamingManager: n }; } async function dr(e, t) { var Y, V, ae, ie; let r = !0; const a = t.mixpanelKey || ot, c = t.wsURL || st, s = t.baseURL || de, o = t.mode || x.Functional, n = { messages: [], chatMode: o }, i = Rt({ token: a, agentId: e, isEnabled: t.enableAnalitics, externalId: t.externalId, mixpanelAdditionalProperties: t.mixpanelAdditionalProperties }), d = Date.now(); Ee(() => { i.track("agent-sdk", { event: "init" }, d); }); const m = wt(t.auth, s, t.callbacks.onError, t.externalId), l = await m.getById(e); t.debug = t.debug || ((Y = l == null ? void 0 : l.advanced_settings) == null ? void 0 : Y.ui_debug_mode); const w = pe(l.presenter.type); i.enrich(yt(l)); const { onMessage: v, clearQueue: k } = xt(i, n, t, l, () => { var u, g, p; (u = n.socketManager) == null || u.disconnect(), (p = (g = t.callbacks).onConnectionStateChange) == null || p.call(g, L.Disconnected); }); n.messages = It(t.initialMessages), (ae = (V = t.callbacks).onNewMessage) == null || ae.call(V, [...n.messages], "answer"); const B = (u) => { }, M = ({ type: u }) => { var p, y, C, R; if (!((p = n.streamingManager) != null && p.interruptAvailable) || !((y = n.streamingManager) != null && y.isInterruptible)) return; const g = n.messages[n.messages.length - 1]; i.track("agent-video-interrupt", { type: u || "click", video_duration_to_interrupt: fe.get(!0), message_duration_to_interrupt: H.get(!0) }), g.interrupted = !0, (R = (C = t.callbacks).onNewMessage) == null || R.call(C, [...n.messages], "answer"), n.streamingManager.interrupt(u); }, D = /* @__PURE__ */ new Map(); function $(u) { return async (g) => { const p = D.get(u); if (!p) throw new Error(`No handler registered for client tool: ${u}`); try { const y = JSON.parse(g.payload); return await p(y); } catch (y) { throw new Error(`Client tool "${u}" failed: ${y.message}`); } }; } function _() { var u, g, p, y; for (const [C] of D) (g = (u = n.streamingManager) == null ? void 0 : u.unregisterRpcMethod) == null || g.call(u, C), (y = (p = n.streamingManager) == null ? void 0 : p.registerRpcMethod) == null || y.call(p, C, $(C)); } function q(u, g) { var y, C; const p = !D.has(u); D.set(u, g), p && ((C = (y = n.streamingManager) == null ? void 0 : y.registerRpcMethod) == null || C.call(y, u, $(u))); } function J(u) { var g, p; D.delete(u), (p = (g = n.streamingManager) == null ? void 0 : g.unregisterRpcMethod) == null || p.call(g, u); } const N = Date.now(); Ee(() => { i.track("agent-sdk", { event: "loaded", ...vt(l) }, N); }); async function X(u) { var j, z, F, E, f, h, b; (z = (j = t.callbacks).onConnectionStateChange) == null || z.call(j, L.Connecting), H.reset(), u && !r && (delete n.chat, (E = (F = t.callbacks).onNewMessage) == null || E.call(F, [...n.messages], "answer")); const g = o === x.DirectPlayback || w ? Promise.resolve(void 0) : Tt( t.auth, c, { onMessage: v, onError: t.callbacks.onError }, t.externalId ), p = ue( () => ar( l, { ...t, mode: o, callbacks: { ...t.callbacks, onVideoIdChange: B, onMessage: v } }, m, i, n.chat ), { limit: 3, timeout: at, timeoutErrorMessage: "Timeout initializing the stream", shouldRetryFn: (T) => (T == null ? void 0 : T.message) !== "Could not connect" && T.status !== 429 && (T == null ? void 0 : T.message) !== "InsufficientCreditsError", delayMs: 1e3 } ).catch((T) => { var A, K; throw I(x.Maintenance), (K = (A = t.callbacks).onConnectionStateChange) == null || K.call(A, L.Fail), T; }), [y, { streamingManager: C, chat: R }] = await Promise.all([g, p]); R && R.id !== ((f = n.chat) == null ? void 0 : f.id) && ((b = (h = t.callbacks).onNewChat) == null || b.call(h, R.id)), n.streamingManager = C, n.socketManager = y, n.chat = R, _(), r = !1, i.enrich({ chatId: R == null ? void 0 : R.id, streamId: C == null ? void 0 : C.streamId, mode: n.chatMode }), I((R == null ? void 0 : R.chat_mode) ?? o); } async function O() { var u, g, p, y; (u = n.socketManager) == null || u.disconnect(), await ((g = n.streamingManager) == null ? void 0 : g.disconnect()), delete n.streamingManager, delete n.socketManager, (y = (p = t.callbacks).onConnectionStateChange) == null || y.call(p, L.Disconnected); } async function I(u) { var g, p; u !== n.chatMode && (i.track("agent-mode-change", { mode: u }), n.chatMode = u, n.chatMode !== x.F