@d-id/client-sdk 2.0.7 → 2.0.8

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.
@@ -1,94 +1,96 @@
1
- import { c as Be, C as J, S as f, a as Je, b as Qe, A as m, d as We, l as pe, e as qe, t as Ge, f as A, g as U, h as He, D as ge, i as Xe, j as b, n as Ze } from "./index-DeKPoqBL.js";
2
- function Ye() {
1
+ import { c as Qe, C as J, S as l, a as We, b as qe, A as m, d as Ge, l as he, e as He, t as Xe, f as A, g as U, h as Ze, D as me, i as Ye, j as b, n as en } from "./index-CeqOE8FZ.js";
2
+ function nn() {
3
3
  try {
4
4
  return Intl.DateTimeFormat().resolvedOptions().timeZone ?? "";
5
5
  } catch {
6
6
  return "";
7
7
  }
8
8
  }
9
- function en() {
9
+ function tn() {
10
10
  if (typeof navigator > "u")
11
11
  return "";
12
- const l = navigator.userAgent ?? "", C = (navigator.platform ?? "").toLowerCase();
12
+ const f = navigator.userAgent ?? "", C = (navigator.platform ?? "").toLowerCase();
13
13
  let u = "Unknown";
14
- /android/i.test(l) ? u = "Android" : /iphone|ipad|ipod/i.test(l) ? u = "iOS" : C.includes("win") ? u = "Windows" : C.includes("mac") ? u = "Mac OS X" : C.includes("linux") && (u = "Linux");
15
- const i = u === "Android" || u === "iOS" || /Mobi/i.test(l);
14
+ /android/i.test(f) ? u = "Android" : /iphone|ipad|ipod/i.test(f) ? u = "iOS" : C.includes("win") ? u = "Windows" : C.includes("mac") ? u = "Mac OS X" : C.includes("linux") && (u = "Linux");
15
+ const i = u === "Android" || u === "iOS" || /Mobi/i.test(f);
16
16
  return `${u}, ${i ? "Mobile" : "Desktop"}`;
17
17
  }
18
- function nn() {
19
- const l = {}, C = Ye();
20
- C && (l.timezone = C);
21
- const u = en();
22
- return u && (l.device = u), l;
18
+ function on() {
19
+ const f = {}, C = nn();
20
+ C && (f.timezone = C);
21
+ const u = tn();
22
+ return u && (f.device = u), f;
23
23
  }
24
- function tn(l, C, u, i) {
25
- const k = Be(l, `${C}/v2/agents/${u}`, i);
24
+ function rn(f, C, u, i) {
25
+ const k = Qe(f, `${C}/v2/agents/${u}`, i);
26
26
  return {
27
27
  async createStream(g) {
28
28
  return k.post("/sessions", g);
29
29
  }
30
30
  };
31
31
  }
32
- const on = {
33
- [f.ChatAnswer]: J.Answer,
34
- [f.ChatPartial]: J.Partial
35
- }, he = 2e4, rn = [];
36
- async function an() {
32
+ const an = {
33
+ [l.ChatAnswer]: J.Answer,
34
+ [l.ChatPartial]: J.Partial
35
+ }, Ce = 2e4, cn = [];
36
+ async function sn() {
37
37
  try {
38
- return await import("./index-DeKPoqBL.js").then((l) => l.F);
38
+ return await import("./index-CeqOE8FZ.js").then((f) => f.G);
39
39
  } catch {
40
40
  throw new Error(
41
41
  "LiveKit client is required for this streaming manager. Please install it using: npm install livekit-client"
42
42
  );
43
43
  }
44
44
  }
45
- const cn = {
45
+ const un = {
46
46
  excellent: U.Strong,
47
47
  good: U.Strong,
48
48
  poor: U.Weak,
49
49
  lost: U.Unknown,
50
50
  unknown: U.Unknown
51
- }, O = (l = "Stream Error") => new qe(l);
52
- function me(l, C, u) {
51
+ }, j = (f = "Stream Error") => new He(f);
52
+ function Se(f, C, u) {
53
53
  var i, k;
54
- throw C("Failed to connect to LiveKit room:", l), (i = u.onConnectionStateChange) == null || i.call(u, A.Fail, "internal:init-error"), (k = u.onError) == null || k.call(u, l, { sessionId: "" }), l;
54
+ throw C("Failed to connect to LiveKit room:", f), (i = u.onConnectionStateChange) == null || i.call(u, A.Fail, "internal:init-error"), (k = u.onError) == null || k.call(u, f, { sessionId: "" }), f;
55
55
  }
56
- async function un(l, C, u) {
57
- var se;
58
- const i = Je(u.debug || !1, "LiveKitStreamingManager"), { Room: k, RoomEvent: g, ConnectionState: I, Track: Y } = await an(), { callbacks: n, auth: Ce, baseURL: Se, analytics: ee } = u;
56
+ async function ln(f, C, u) {
57
+ var de;
58
+ const i = We(u.debug || !1, "LiveKitStreamingManager"), { Room: k, RoomEvent: g, ConnectionState: I, Track: ee } = await sn(), { callbacks: n, auth: Te, baseURL: ye, analytics: ne } = u;
59
59
  let a = null, E = !1;
60
- const ne = Qe.Fluent;
60
+ const te = qe.Fluent;
61
61
  let L = null;
62
62
  const P = { isPublishing: !1, publication: null }, Q = { isPublishing: !1, publication: null };
63
- let h = null, S = null, j = null, K = !1;
63
+ let h = null, S = null, O = null, K = !1;
64
64
  a = new k({
65
65
  adaptiveStream: !1,
66
66
  // Must be false to use mediaStreamTrack directly
67
67
  dynacast: !0
68
68
  });
69
+ for (const [e, t] of u.rpcMethods ?? [])
70
+ a.registerRpcMethod(e, t);
69
71
  let R = null, M = m.Idle, W = !0;
70
72
  const y = /* @__PURE__ */ new Map();
71
- let x = null;
72
- const Te = tn(Ce, Se || We, l, n.onError);
73
- let v, _, $, te = !0;
73
+ let x = null, q = null;
74
+ const ve = rn(Te, ye || Ge, f, n.onError);
75
+ let v, _, $, ie = !0;
74
76
  try {
75
- const e = await Te.createStream({
77
+ const e = await ve.createStream({
76
78
  transport: C.transport,
77
79
  chat_persist: C.chat_persist ?? !0,
78
80
  verbose: u.verbose ?? !1
79
81
  }), { id: t, session_token: o, session_url: r, interrupt_enabled: c } = e;
80
- (se = n.onStreamCreated) == null || se.call(n, { session_id: t, stream_id: t, agent_id: l }), v = t, _ = o, $ = r, te = c ?? !0, await a.prepareConnection($, _);
82
+ (de = n.onStreamCreated) == null || de.call(n, { session_id: t, stream_id: t, agent_id: f }), v = t, _ = o, $ = r, ie = c ?? !0, await a.prepareConnection($, _);
81
83
  } catch (e) {
82
- me(e, i, n);
84
+ Se(e, i, n);
83
85
  }
84
86
  if (!$ || !_ || !v)
85
87
  return Promise.reject(new Error("Failed to initialize LiveKit stream"));
86
- a.on(g.ConnectionStateChanged, we).on(g.ConnectionQualityChanged, Ae).on(g.ParticipantConnected, Ee).on(g.ParticipantDisconnected, Re).on(g.TrackSubscribed, Le).on(g.TrackUnsubscribed, Pe).on(g.DataReceived, Ke).on(g.MediaDevicesError, xe).on(g.TranscriptionReceived, ye).on(g.EncryptionError, Ve).on(g.TrackSubscriptionFailed, Fe);
87
- function ye(e, t) {
88
- t != null && t.isLocal && pe.update();
88
+ a.on(g.ConnectionStateChanged, Ee).on(g.ConnectionQualityChanged, Re).on(g.ParticipantConnected, be).on(g.ParticipantDisconnected, Le).on(g.TrackSubscribed, Me).on(g.TrackUnsubscribed, ke).on(g.DataReceived, Ve).on(g.MediaDevicesError, Fe).on(g.TranscriptionReceived, we).on(g.EncryptionError, Ue).on(g.TrackSubscriptionFailed, je);
89
+ function we(e, t) {
90
+ t != null && t.isLocal && he.update();
89
91
  }
90
- async function ve() {
91
- const e = nn();
92
+ async function Ae() {
93
+ const e = on();
92
94
  if (!(!a || Object.keys(e).length === 0))
93
95
  try {
94
96
  await a.localParticipant.setAttributes(e);
@@ -97,24 +99,24 @@ async function un(l, C, u) {
97
99
  }
98
100
  }
99
101
  try {
100
- await a.connect($, _), i("LiveKit room joined successfully"), ve(), R = setTimeout(() => {
102
+ await a.connect($, _), i("LiveKit room joined successfully"), Ae(), R = setTimeout(() => {
101
103
  var t;
102
104
  i(
103
- `Track subscription timeout - no track subscribed within ${he / 1e3} seconds after connect`
105
+ `Track subscription timeout - no track subscribed within ${Ce / 1e3} seconds after connect`
104
106
  ), R = null;
105
- const e = O("Track subscription timeout");
106
- ee.track("connectivity-error", {
107
- error: Ge(e),
107
+ const e = j("Track subscription timeout");
108
+ ne.track("connectivity-error", {
109
+ error: Xe(e),
108
110
  sessionId: v
109
- }), (t = n.onError) == null || t.call(n, e, { sessionId: v }), Z("internal:track-subscription-timeout");
110
- }, he);
111
+ }), (t = n.onError) == null || t.call(n, e, { sessionId: v }), Y("internal:track-subscription-timeout");
112
+ }, Ce);
111
113
  } catch (e) {
112
- me(e, i, n);
114
+ Se(e, i, n);
113
115
  }
114
- ee.enrich({
115
- "stream-type": ne
116
+ ne.enrich({
117
+ "stream-type": te
116
118
  });
117
- function we(e) {
119
+ function Ee(e) {
118
120
  var t, o, r, c;
119
121
  switch (i("Connection state changed:", e), e) {
120
122
  case I.Connecting:
@@ -124,7 +126,11 @@ async function un(l, C, u) {
124
126
  i("LiveKit room connected successfully"), E = !0;
125
127
  break;
126
128
  case I.Disconnected:
127
- i("LiveKit room disconnected"), E = !1, K = !1, P.publication = null, Q.publication = null, (o = n.onConnectionStateChange) == null || o.call(n, A.Disconnected, "livekit:disconnected");
129
+ i("LiveKit room disconnected"), E = !1, K = !1, P.publication = null, Q.publication = null, (o = n.onConnectionStateChange) == null || o.call(
130
+ n,
131
+ A.Disconnected,
132
+ q ?? "livekit:disconnected"
133
+ );
128
134
  break;
129
135
  case I.Reconnecting:
130
136
  i("LiveKit room reconnecting..."), (r = n.onConnectionStateChange) == null || r.call(n, A.Connecting, "livekit:reconnecting");
@@ -134,25 +140,25 @@ async function un(l, C, u) {
134
140
  break;
135
141
  }
136
142
  }
137
- function Ae(e, t) {
143
+ function Re(e, t) {
138
144
  var o;
139
- i("Connection quality:", e), t != null && t.isLocal && ((o = n.onConnectivityStateChange) == null || o.call(n, cn[e]));
145
+ i("Connection quality:", e), t != null && t.isLocal && ((o = n.onConnectivityStateChange) == null || o.call(n, un[e]));
140
146
  }
141
- function Ee(e) {
147
+ function be(e) {
142
148
  i("Participant connected:", e.identity);
143
149
  }
144
- function Re(e) {
145
- i("Participant disconnected:", e.identity), Z("livekit:participant-disconnected");
150
+ function Le(e) {
151
+ i("Participant disconnected:", e.identity), Y("livekit:participant-disconnected");
146
152
  }
147
- function be() {
153
+ function Pe() {
148
154
  var e;
149
- j !== b.Start && (i("CALLBACK: onVideoStateChange(Start)"), j = b.Start, (e = n.onVideoStateChange) == null || e.call(n, b.Start));
155
+ O !== b.Start && (i("CALLBACK: onVideoStateChange(Start)"), O = b.Start, (e = n.onVideoStateChange) == null || e.call(n, b.Start));
150
156
  }
151
- function ie(e) {
157
+ function oe(e) {
152
158
  var t;
153
- j !== b.Stop && (i("CALLBACK: onVideoStateChange(Stop)"), j = b.Stop, (t = n.onVideoStateChange) == null || t.call(n, b.Stop, e));
159
+ O !== b.Stop && (i("CALLBACK: onVideoStateChange(Stop)"), O = b.Stop, (t = n.onVideoStateChange) == null || t.call(n, b.Stop, e));
154
160
  }
155
- function Le(e, t, o) {
161
+ function Me(e, t, o) {
156
162
  var c, d, s;
157
163
  i(`Track subscribed: ${e.kind} from ${o.identity}`);
158
164
  const r = e.mediaStreamTrack;
@@ -160,39 +166,39 @@ async function un(l, C, u) {
160
166
  i(`No mediaStreamTrack available for ${e.kind}`);
161
167
  return;
162
168
  }
163
- L ? (L.addTrack(r), i(`Added ${e.kind} track to shared MediaStream`)) : (L = new MediaStream([r]), i(`Created shared MediaStream with ${e.kind} track`)), e.kind === "audio" && (S = Xe(
169
+ L ? (L.addTrack(r), i(`Added ${e.kind} track to shared MediaStream`)) : (L = new MediaStream([r]), i(`Created shared MediaStream with ${e.kind} track`)), e.kind === "audio" && (S = Ye(
164
170
  () => e.getRTCStatsReport(),
165
171
  ({ sttLatency: p, serviceLatency: T }) => {
166
- var ue, de, le;
167
- const V = pe.get(!0);
172
+ var le, fe, pe;
173
+ const V = he.get(!0);
168
174
  let F = 0;
169
175
  if (p) {
170
- const fe = ((de = (ue = h == null ? void 0 : h.getReport()) == null ? void 0 : ue.webRTCStats) == null ? void 0 : de.avgRtt) ?? 0;
171
- F = fe > 0 ? Math.round(fe * 1e3) : 0;
176
+ const ge = ((fe = (le = h == null ? void 0 : h.getReport()) == null ? void 0 : le.webRTCStats) == null ? void 0 : fe.avgRtt) ?? 0;
177
+ F = ge > 0 ? Math.round(ge * 1e3) : 0;
172
178
  }
173
179
  const D = V > 0 ? V + (p ?? 0) + F : void 0, w = D !== void 0 && T !== void 0 ? D - T : void 0;
174
- (le = n.onFirstAudioDetected) == null || le.call(n, { latency: D, networkLatency: w });
180
+ (pe = n.onFirstAudioDetected) == null || pe.call(n, { latency: D, networkLatency: w });
175
181
  }
176
- )), e.kind === "video" && ((c = n.onStreamReady) == null || c.call(n), i("CALLBACK: onSrcObjectReady"), (d = n.onSrcObjectReady) == null || d.call(n, L), K || (K = !0, i("CALLBACK: onConnectionStateChange(Connected)"), (s = n.onConnectionStateChange) == null || s.call(n, A.Connected, "livekit:track-subscribed")), h = He(
182
+ )), e.kind === "video" && ((c = n.onStreamReady) == null || c.call(n), i("CALLBACK: onSrcObjectReady"), (d = n.onSrcObjectReady) == null || d.call(n, L), K || (K = !0, i("CALLBACK: onConnectionStateChange(Connected)"), (s = n.onConnectionStateChange) == null || s.call(n, A.Connected, "livekit:track-subscribed")), h = Ze(
177
183
  () => e.getRTCStatsReport(),
178
184
  () => E,
179
- Ze,
185
+ en,
180
186
  (p, T) => {
181
- i(`Video state change: ${p}`), p === b.Start ? (R && (clearTimeout(R), R = null, i("Track subscription timeout cleared")), be()) : p === b.Stop && ie(T);
187
+ i(`Video state change: ${p}`), p === b.Start ? (R && (clearTimeout(R), R = null, i("Track subscription timeout cleared")), Pe()) : p === b.Stop && oe(T);
182
188
  }
183
189
  ), h.start());
184
190
  }
185
- function Pe(e, t, o) {
186
- i(`Track unsubscribed: ${e.kind} from ${o.identity}`), e.kind === "audio" && (S == null || S.destroy(), S = null), e.kind === "video" && (ie(h == null ? void 0 : h.getReport()), h == null || h.stop(), h = null);
191
+ function ke(e, t, o) {
192
+ i(`Track unsubscribed: ${e.kind} from ${o.identity}`), e.kind === "audio" && (S == null || S.destroy(), S = null), e.kind === "video" && (oe(h == null ? void 0 : h.getReport()), h == null || h.stop(), h = null);
187
193
  }
188
- function oe(e, t) {
194
+ function re(e, t) {
189
195
  var r;
190
- const o = on[e];
196
+ const o = an[e];
191
197
  o && ((r = n.onMessage) == null || r.call(n, o, { event: o, ...t }));
192
198
  }
193
- function q(e, t) {
199
+ function G(e, t) {
194
200
  var o, r, c, d;
195
- if (e === f.ToolCallStarted) {
201
+ if (e === l.ToolCallStarted) {
196
202
  const s = t;
197
203
  y.set(s.call_id, {
198
204
  call: {
@@ -202,23 +208,23 @@ async function un(l, C, u) {
202
208
  },
203
209
  interruptible: s.interruptible === !0,
204
210
  turnId: s.turn_id ?? x
205
- }), N(), z(), M = m.ToolActive, (o = n.onAgentActivityStateChange) == null || o.call(n, m.ToolActive), (r = n.onToolEvent) == null || r.call(n, f.ToolCallStarted, s);
211
+ }), N(), z(), M = m.ToolActive, (o = n.onAgentActivityStateChange) == null || o.call(n, m.ToolActive), (r = n.onToolEvent) == null || r.call(n, l.ToolCallStarted, s);
206
212
  return;
207
213
  }
208
- if (e === f.ToolCallDone) {
214
+ if (e === l.ToolCallDone) {
209
215
  const s = t;
210
- re(s.call_id), (c = n.onToolEvent) == null || c.call(n, f.ToolCallDone, s);
216
+ ae(s.call_id), (c = n.onToolEvent) == null || c.call(n, l.ToolCallDone, s);
211
217
  return;
212
218
  }
213
- if (e === f.ToolCallError) {
219
+ if (e === l.ToolCallError) {
214
220
  const s = t;
215
- re(s.call_id), (d = n.onToolEvent) == null || d.call(n, f.ToolCallError, s);
221
+ ae(s.call_id), (d = n.onToolEvent) == null || d.call(n, l.ToolCallError, s);
216
222
  }
217
223
  }
218
- function re(e) {
224
+ function ae(e) {
219
225
  y.delete(e) && (N(), z());
220
226
  }
221
- function Me(e) {
227
+ function Ie(e) {
222
228
  let t = !1;
223
229
  for (const [o, r] of y)
224
230
  r.call.executionMode === "blocking" && (e !== null && r.turnId !== null && r.turnId !== e || (y.delete(o), t = !0));
@@ -233,12 +239,12 @@ async function un(l, C, u) {
233
239
  var e;
234
240
  (e = n.onRunningToolCallsChange) == null || e.call(
235
241
  n,
236
- y.size === 0 ? rn : [...y.values()].map(({ call: t }) => t)
242
+ y.size === 0 ? cn : [...y.values()].map(({ call: t }) => t)
237
243
  );
238
244
  }
239
- function ke(e, t) {
245
+ function _e(e, t) {
240
246
  var o, r, c;
241
- if (e === f.StreamVideoCreated) {
247
+ if (e === l.StreamVideoCreated) {
242
248
  M = m.Talking, (o = n.onAgentActivityStateChange) == null || o.call(n, m.Talking), S == null || S.arm({
243
249
  sttLatency: (r = t == null ? void 0 : t.stt) == null ? void 0 : r.latency,
244
250
  serviceLatency: t == null ? void 0 : t.serviceLatency
@@ -256,61 +262,66 @@ async function un(l, C, u) {
256
262
  u.debug && ((p = t == null ? void 0 : t.metadata) != null && p.sentiment) && (c.sentiment = {
257
263
  id: t.metadata.sentiment.id,
258
264
  name: t.metadata.sentiment.sentiment
259
- }), (T = n.onMessage) == null || T.call(n, e, c), ke(e, t);
265
+ }), (T = n.onMessage) == null || T.call(n, e, c), _e(e, t);
260
266
  }
261
- function Ie(e, t) {
267
+ function $e(e, t) {
262
268
  var o;
263
269
  (o = n.onMessage) == null || o.call(n, J.Transcribe, { event: J.Transcribe, ...t }), queueMicrotask(() => {
264
270
  var r;
265
271
  (r = n.onAgentActivityStateChange) == null || r.call(n, m.Loading);
266
272
  });
267
273
  }
268
- function _e(e, t) {
274
+ function De(e, t) {
269
275
  var o;
270
276
  x = (t == null ? void 0 : t.turn_id) ?? null, M = m.Loading, (o = n.onAgentActivityStateChange) == null || o.call(n, m.Loading);
271
277
  }
272
- function $e(e, t) {
278
+ function Ke(e, t) {
273
279
  var r;
274
280
  const o = (t == null ? void 0 : t.turn_id) ?? null;
275
- x !== null && o !== null && o < x || (Me(o), M = m.Idle, (r = n.onAgentActivityStateChange) == null || r.call(n, m.Idle));
276
- }
277
- const De = {
278
- [f.ChatAnswer]: oe,
279
- [f.ChatPartial]: oe,
280
- [f.ToolCallStarted]: q,
281
- [f.ToolCallDone]: q,
282
- [f.ToolCallError]: q,
283
- [f.StreamVideoCreated]: B,
284
- [f.StreamVideoDone]: B,
285
- [f.StreamVideoError]: B,
286
- [f.StreamVideoRejected]: B,
287
- [f.ChatAudioTranscribed]: Ie,
288
- [f.TurnStarted]: _e,
289
- [f.TurnEnded]: $e
281
+ x !== null && o !== null && o < x || (Ie(o), M = m.Idle, (r = n.onAgentActivityStateChange) == null || r.call(n, m.Idle));
282
+ }
283
+ function ce(e, t) {
284
+ q = (t == null ? void 0 : t.reason) ?? null;
285
+ }
286
+ const xe = {
287
+ [l.ChatAnswer]: re,
288
+ [l.ChatPartial]: re,
289
+ [l.ToolCallStarted]: G,
290
+ [l.ToolCallDone]: G,
291
+ [l.ToolCallError]: G,
292
+ [l.StreamVideoCreated]: B,
293
+ [l.StreamVideoDone]: B,
294
+ [l.StreamVideoError]: B,
295
+ [l.StreamVideoRejected]: B,
296
+ [l.ChatAudioTranscribed]: $e,
297
+ [l.TurnStarted]: De,
298
+ [l.TurnEnded]: Ke,
299
+ [l.StreamDone]: ce,
300
+ [l.StreamFailed]: ce
290
301
  };
291
- function Ke(e, t, o, r) {
302
+ function Ve(e, t, o, r) {
292
303
  const c = new TextDecoder().decode(e);
293
304
  try {
294
305
  const d = JSON.parse(c), s = r || d.subject;
295
306
  if (i("Data received:", { subject: s, data: d }), !s) return;
296
- const p = De[s];
307
+ const p = xe[s];
297
308
  p == null || p(s, d);
298
309
  } catch (d) {
299
310
  i("Failed to parse data channel message:", d);
300
311
  }
301
312
  }
302
- function xe(e) {
313
+ function Fe(e) {
303
314
  var t;
304
- i("Media devices error:", e), (t = n.onError) == null || t.call(n, O(), { sessionId: v });
315
+ i("Media devices error:", e), (t = n.onError) == null || t.call(n, j(), { sessionId: v });
305
316
  }
306
- function Ve(e) {
317
+ function Ue(e) {
307
318
  var t;
308
- i("Encryption error:", e), (t = n.onError) == null || t.call(n, O(), { sessionId: v });
319
+ i("Encryption error:", e), (t = n.onError) == null || t.call(n, j(), { sessionId: v });
309
320
  }
310
- function Fe(e, t, o) {
321
+ function je(e, t, o) {
311
322
  i("Track subscription failed:", { trackSid: e, participant: t, reason: o });
312
323
  }
313
- function Ue(e, t, o) {
324
+ function Oe(e, t, o) {
314
325
  for (const [r, c] of o)
315
326
  if (c.source === t && c.track) {
316
327
  const d = c.track.mediaStreamTrack;
@@ -319,7 +330,7 @@ async function un(l, C, u) {
319
330
  }
320
331
  return null;
321
332
  }
322
- async function ae(e, t, o, r, c, d) {
333
+ async function se(e, t, o, r, c, d) {
323
334
  var V, F, D;
324
335
  if (!E || !a)
325
336
  throw i(`Room is not connected, cannot publish ${r} stream`), new Error("Room is not connected");
@@ -330,7 +341,7 @@ async function un(l, C, u) {
330
341
  const s = o(t);
331
342
  if (s.length === 0)
332
343
  throw new Error(`No ${r} track found in the provided MediaStream`);
333
- const p = s[0], T = Ue(p, r, c());
344
+ const p = s[0], T = Oe(p, r, c());
334
345
  if (T) {
335
346
  i(`${r} track is already published, skipping`, {
336
347
  trackId: p.id,
@@ -351,7 +362,7 @@ async function un(l, C, u) {
351
362
  e.isPublishing = !1;
352
363
  }
353
364
  }
354
- async function ce(e, t) {
365
+ async function ue(e, t) {
355
366
  if (!(!e.publication || !e.publication.track))
356
367
  try {
357
368
  a && (await a.localParticipant.unpublishTrack(e.publication.track, !1), i(`${t} track unpublished`));
@@ -361,20 +372,20 @@ async function un(l, C, u) {
361
372
  e.publication = null;
362
373
  }
363
374
  }
364
- async function Oe(e) {
365
- return ae(
375
+ async function Ne(e) {
376
+ return se(
366
377
  P,
367
378
  e,
368
379
  (t) => t.getAudioTracks(),
369
- Y.Source.Microphone,
380
+ ee.Source.Microphone,
370
381
  () => a.localParticipant.audioTrackPublications,
371
- G
382
+ H
372
383
  );
373
384
  }
374
- async function G() {
375
- return ce(P, "Microphone");
385
+ async function H() {
386
+ return ue(P, "Microphone");
376
387
  }
377
- async function je(e) {
388
+ async function ze(e) {
378
389
  if (!E || !a)
379
390
  throw i("Cannot replace microphone track: room is not connected"), new Error("Room is not connected");
380
391
  if (e.kind !== "audio")
@@ -390,26 +401,26 @@ async function un(l, C, u) {
390
401
  P.isPublishing = !1;
391
402
  }
392
403
  }
393
- async function Ne(e) {
394
- return ae(
404
+ async function Be(e) {
405
+ return se(
395
406
  Q,
396
407
  e,
397
408
  (t) => t.getVideoTracks(),
398
- Y.Source.Camera,
409
+ ee.Source.Camera,
399
410
  () => a.localParticipant.videoTrackPublications,
400
- H
411
+ X
401
412
  );
402
413
  }
403
- async function H() {
404
- return ce(Q, "Camera");
414
+ async function X() {
415
+ return ue(Q, "Camera");
405
416
  }
406
- function ze() {
417
+ function Je() {
407
418
  L && (L.getTracks().forEach((e) => e.stop()), L = null);
408
419
  }
409
- async function X(e, t) {
420
+ async function Z(e, t) {
410
421
  var o, r;
411
422
  if (!E || !a) {
412
- i("Room is not connected for sending messages"), (o = n.onError) == null || o.call(n, O(), {
423
+ i("Room is not connected for sending messages"), (o = n.onError) == null || o.call(n, j(), {
413
424
  sessionId: v
414
425
  });
415
426
  return;
@@ -417,19 +428,19 @@ async function un(l, C, u) {
417
428
  try {
418
429
  await a.localParticipant.sendText(t, { topic: e }), i("Message sent successfully:", t);
419
430
  } catch (c) {
420
- i("Failed to send message:", c), (r = n.onError) == null || r.call(n, O(), { sessionId: v });
431
+ i("Failed to send message:", c), (r = n.onError) == null || r.call(n, j(), { sessionId: v });
421
432
  }
422
433
  }
423
- async function Z(e) {
434
+ async function Y(e) {
424
435
  var t, o;
425
- R && (clearTimeout(R), R = null), S == null || S.destroy(), S = null, a && ((t = n.onConnectionStateChange) == null || t.call(n, A.Disconnecting, e), await Promise.all([G(), H()]), await a.disconnect()), ze(), E = !1, K = !1, y.size > 0 && (y.clear(), N(), z()), x = null, (o = n.onAgentActivityStateChange) == null || o.call(n, m.Idle), M = m.Idle;
436
+ R && (clearTimeout(R), R = null), S == null || S.destroy(), S = null, a && ((t = n.onConnectionStateChange) == null || t.call(n, A.Disconnecting, e), await Promise.all([H(), X()]), await a.disconnect()), Je(), E = !1, K = !1, y.size > 0 && (y.clear(), N(), z()), x = null, (o = n.onAgentActivityStateChange) == null || o.call(n, m.Idle), M = m.Idle;
426
437
  }
427
438
  return {
428
439
  speak(e) {
429
440
  const t = typeof e == "string" ? e : JSON.stringify(e);
430
- return X(ge.Speak, t);
441
+ return Z(me.Speak, t);
431
442
  },
432
- disconnect: () => Z("user:disconnect"),
443
+ disconnect: () => Y("user:disconnect"),
433
444
  async reconnect() {
434
445
  var e, t;
435
446
  if ((a == null ? void 0 : a.state) === I.Connected) {
@@ -438,7 +449,7 @@ async function un(l, C, u) {
438
449
  }
439
450
  if (!a || !$ || !_)
440
451
  throw i("Cannot reconnect: missing room, URL or token"), new Error("Cannot reconnect: session not available");
441
- i("Reconnecting to LiveKit room, state:", a.state), K = !1, (e = n.onConnectionStateChange) == null || e.call(n, A.Connecting, "user:reconnect");
452
+ i("Reconnecting to LiveKit room, state:", a.state), K = !1, q = null, (e = n.onConnectionStateChange) == null || e.call(n, A.Connecting, "user:reconnect");
442
453
  try {
443
454
  if (await a.connect($, _), i("Room reconnected"), E = !0, a.remoteParticipants.size === 0) {
444
455
  if (i("Waiting for agent to join..."), !await new Promise((r) => {
@@ -456,14 +467,14 @@ async function un(l, C, u) {
456
467
  throw i("Failed to reconnect:", o), (t = n.onConnectionStateChange) == null || t.call(n, A.Fail, "user:reconnect-failed"), o;
457
468
  }
458
469
  },
459
- sendDataChannelMessage: X,
460
- publishMicrophoneStream: Oe,
461
- unpublishMicrophoneStream: G,
462
- replaceMicrophoneTrack: je,
463
- publishCameraStream: Ne,
464
- unpublishCameraStream: H,
470
+ sendDataChannelMessage: Z,
471
+ publishMicrophoneStream: Ne,
472
+ unpublishMicrophoneStream: H,
473
+ replaceMicrophoneTrack: ze,
474
+ publishCameraStream: Be,
475
+ unpublishCameraStream: X,
465
476
  interrupt(e) {
466
- e !== "text" && X(ge.Interrupt, "");
477
+ e !== "text" && Z(me.Interrupt, "");
467
478
  },
468
479
  registerRpcMethod(e, t) {
469
480
  a == null || a.registerRpcMethod(e, t);
@@ -473,12 +484,12 @@ async function un(l, C, u) {
473
484
  },
474
485
  sessionId: v,
475
486
  streamId: v,
476
- streamType: ne,
477
- interruptAvailable: te,
487
+ streamType: te,
488
+ interruptAvailable: ie,
478
489
  isInterruptible: W
479
490
  };
480
491
  }
481
492
  export {
482
- un as createLiveKitStreamingManager,
483
- me as handleInitError
493
+ ln as createLiveKitStreamingManager,
494
+ Se as handleInitError
484
495
  };
@@ -1,5 +1,5 @@
1
1
  import { StreamingManager } from '../streaming-manager';
2
- import { Agent, AgentManagerOptions, AgentsAPI, AudioDetectionMetrics, Chat, ChatProgressCallback, CreateSessionV2Options, CreateStreamOptions } from '../../types';
2
+ import { Agent, AgentManagerOptions, AgentsAPI, AudioDetectionMetrics, Chat, ChatProgressCallback, CreateSessionV2Options, CreateStreamOptions, StreamingManagerOptions } from '../../types';
3
3
  import { Analytics } from '../analytics/mixpanel';
4
4
 
5
5
  type ConnectToManagerOptions = AgentManagerOptions & {
@@ -10,6 +10,7 @@ type ConnectToManagerOptions = AgentManagerOptions & {
10
10
  onFirstAudioDetected?: (metrics: AudioDetectionMetrics) => void;
11
11
  };
12
12
  chatId?: string;
13
+ rpcMethods?: StreamingManagerOptions['rpcMethods'];
13
14
  };
14
15
  export declare function initializeStreamAndChat(agent: Agent, options: ConnectToManagerOptions, agentsApi: AgentsAPI, analytics: Analytics, chat?: Chat): Promise<{
15
16
  chat?: Chat;
@@ -6,7 +6,7 @@ export interface ChatEventQueue {
6
6
  [sequence: number]: string;
7
7
  answer?: string;
8
8
  }
9
- export declare function createMessageEventQueue(analytics: Analytics, items: AgentManagerItems, options: AgentManagerOptions, agentEntity: Agent, onStreamDone: () => void): {
9
+ export declare function createMessageEventQueue(analytics: Analytics, items: AgentManagerItems, options: AgentManagerOptions, agentEntity: Agent, onStreamDone: (reason?: string) => void): {
10
10
  clearQueue: () => void;
11
11
  onMessage: (event: ChatProgress | StreamEvents, data: any) => void;
12
12
  };
@@ -42,8 +42,9 @@ interface ManagerCallbacks {
42
42
  /**
43
43
  * Optional callback will be triggered each time the RTC connection changes state
44
44
  * @param state
45
+ * @param reason - a `StreamEndReason` when the server ended the stream, otherwise a diagnostic string
45
46
  */
46
- onConnectionStateChange?(state: ConnectionState): void;
47
+ onConnectionStateChange?(state: ConnectionState, reason?: string): void;
47
48
  /**
48
49
  * Optional callback function that will be triggered each time video events happen
49
50
  * @param state
@@ -70,6 +70,10 @@ export declare enum StreamType {
70
70
  Legacy = "legacy",
71
71
  Fluent = "fluent"
72
72
  }
73
+ /** @internal */
74
+ export type RpcMethodHandler = (data: {
75
+ payload: string;
76
+ }) => Promise<string>;
73
77
  export interface ManagerCallbacks {
74
78
  onMessage?: ChatProgressCallback;
75
79
  onConnectionStateChange?: (state: ConnectionState, reason?: string) => void;
@@ -128,6 +132,12 @@ export interface StreamingManagerOptions {
128
132
  * Supported by LiveKit streaming managers.
129
133
  */
130
134
  microphoneStream?: MediaStream;
135
+ /**
136
+ * RPC methods to register on the room before it connects, so the agent can
137
+ * call them from the moment this participant joins.
138
+ * @internal
139
+ */
140
+ rpcMethods?: ReadonlyMap<string, RpcMethodHandler>;
131
141
  }
132
142
  export interface SlimRTCStatsReport {
133
143
  index: number;
@@ -240,6 +250,15 @@ export type ToolEventPayload = ToolCallStartedPayload | ToolCallDonePayload | To
240
250
  export interface TurnEventPayload {
241
251
  turn_id: number | null;
242
252
  }
253
+ export declare enum StreamEndReason {
254
+ Ok = "ok",
255
+ UnknownError = "unknown_error",
256
+ NetworkIssue = "network_issue",
257
+ MessageLimit = "message_limit",
258
+ TimeLimit = "time_limit",
259
+ Inactivity = "inactivity",
260
+ EndedByAgent = "ended_by_agent"
261
+ }
243
262
  export type ToolEventCallback = {
244
263
  (event: StreamEvents.ToolCallStarted, data: ToolCallStartedPayload): void;
245
264
  (event: StreamEvents.ToolCallDone, data: ToolCallDonePayload): void;