@memberjunction/ai-realtime-client 6.2.0-edge.3 → 6.2.0-edge.5

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.
Files changed (209) hide show
  1. package/README.md +156 -29
  2. package/dist/audio/audioMeter.d.ts +71 -0
  3. package/dist/audio/audioMeter.d.ts.map +1 -1
  4. package/dist/audio/audioMeter.js +83 -0
  5. package/dist/audio/audioMeter.js.map +1 -1
  6. package/dist/audio/mediaElementAudioRouter.d.ts +41 -0
  7. package/dist/audio/mediaElementAudioRouter.d.ts.map +1 -0
  8. package/dist/audio/mediaElementAudioRouter.js +82 -0
  9. package/dist/audio/mediaElementAudioRouter.js.map +1 -0
  10. package/dist/audio/micCapture.d.ts +12 -3
  11. package/dist/audio/micCapture.d.ts.map +1 -1
  12. package/dist/audio/micCapture.js +15 -1
  13. package/dist/audio/micCapture.js.map +1 -1
  14. package/dist/audio/pcmPlayback.d.ts +72 -4
  15. package/dist/audio/pcmPlayback.d.ts.map +1 -1
  16. package/dist/audio/pcmPlayback.js +101 -1
  17. package/dist/audio/pcmPlayback.js.map +1 -1
  18. package/dist/drivers/assemblyAIRealtimeClient.d.ts +2 -0
  19. package/dist/drivers/assemblyAIRealtimeClient.d.ts.map +1 -1
  20. package/dist/drivers/assemblyAIRealtimeClient.js +14 -0
  21. package/dist/drivers/assemblyAIRealtimeClient.js.map +1 -1
  22. package/dist/drivers/elevenLabsRealtimeClient.d.ts +2 -0
  23. package/dist/drivers/elevenLabsRealtimeClient.d.ts.map +1 -1
  24. package/dist/drivers/elevenLabsRealtimeClient.js +14 -0
  25. package/dist/drivers/elevenLabsRealtimeClient.js.map +1 -1
  26. package/dist/drivers/geminiAvatarOutput.d.ts +132 -0
  27. package/dist/drivers/geminiAvatarOutput.d.ts.map +1 -0
  28. package/dist/drivers/geminiAvatarOutput.js +310 -0
  29. package/dist/drivers/geminiAvatarOutput.js.map +1 -0
  30. package/dist/drivers/geminiEnterpriseRealtimeClient.d.ts +38 -0
  31. package/dist/drivers/geminiEnterpriseRealtimeClient.d.ts.map +1 -0
  32. package/dist/drivers/geminiEnterpriseRealtimeClient.js +99 -0
  33. package/dist/drivers/geminiEnterpriseRealtimeClient.js.map +1 -0
  34. package/dist/drivers/geminiRealtimeClient.d.ts +325 -50
  35. package/dist/drivers/geminiRealtimeClient.d.ts.map +1 -1
  36. package/dist/drivers/geminiRealtimeClient.js +782 -184
  37. package/dist/drivers/geminiRealtimeClient.js.map +1 -1
  38. package/dist/drivers/openAILiveClient.d.ts +5 -8
  39. package/dist/drivers/openAILiveClient.d.ts.map +1 -1
  40. package/dist/drivers/openAILiveClient.js +19 -32
  41. package/dist/drivers/openAILiveClient.js.map +1 -1
  42. package/dist/drivers/openAIRealtimeClient.d.ts +13 -26
  43. package/dist/drivers/openAIRealtimeClient.d.ts.map +1 -1
  44. package/dist/drivers/openAIRealtimeClient.js +28 -55
  45. package/dist/drivers/openAIRealtimeClient.js.map +1 -1
  46. package/dist/drivers/xaiRealtimeClient.d.ts.map +1 -1
  47. package/dist/drivers/xaiRealtimeClient.js +19 -14
  48. package/dist/drivers/xaiRealtimeClient.js.map +1 -1
  49. package/dist/generic/baseRealtimeClient.d.ts +183 -29
  50. package/dist/generic/baseRealtimeClient.d.ts.map +1 -1
  51. package/dist/generic/baseRealtimeClient.js +246 -14
  52. package/dist/generic/baseRealtimeClient.js.map +1 -1
  53. package/dist/generic/openAIProtocolClient.d.ts +2 -0
  54. package/dist/generic/openAIProtocolClient.d.ts.map +1 -1
  55. package/dist/generic/openAIProtocolClient.js +17 -0
  56. package/dist/generic/openAIProtocolClient.js.map +1 -1
  57. package/dist/index.d.ts +2 -3
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +3 -3
  60. package/dist/index.js.map +1 -1
  61. package/dist/media/attachVideoSource.d.ts +23 -0
  62. package/dist/media/attachVideoSource.d.ts.map +1 -0
  63. package/dist/media/attachVideoSource.js +49 -0
  64. package/dist/media/attachVideoSource.js.map +1 -0
  65. package/dist/media/channelVideoSource.d.ts +110 -14
  66. package/dist/media/channelVideoSource.d.ts.map +1 -1
  67. package/dist/media/channelVideoSource.js +183 -18
  68. package/dist/media/channelVideoSource.js.map +1 -1
  69. package/dist/media/decoders/frameScheduler.d.ts +119 -0
  70. package/dist/media/decoders/frameScheduler.d.ts.map +1 -0
  71. package/dist/media/decoders/frameScheduler.js +238 -0
  72. package/dist/media/decoders/frameScheduler.js.map +1 -0
  73. package/dist/media/decoders/imageFrameDecoder.d.ts +58 -0
  74. package/dist/media/decoders/imageFrameDecoder.d.ts.map +1 -0
  75. package/dist/media/decoders/imageFrameDecoder.js +110 -0
  76. package/dist/media/decoders/imageFrameDecoder.js.map +1 -0
  77. package/dist/media/decoders/mseFmp4Decoder.d.ts +130 -0
  78. package/dist/media/decoders/mseFmp4Decoder.d.ts.map +1 -0
  79. package/dist/media/decoders/mseFmp4Decoder.js +402 -0
  80. package/dist/media/decoders/mseFmp4Decoder.js.map +1 -0
  81. package/dist/media/decoders/streamCanvas.d.ts +46 -0
  82. package/dist/media/decoders/streamCanvas.d.ts.map +1 -0
  83. package/dist/media/decoders/streamCanvas.js +163 -0
  84. package/dist/media/decoders/streamCanvas.js.map +1 -0
  85. package/dist/media/decoders/videoMimeTypes.d.ts +29 -0
  86. package/dist/media/decoders/videoMimeTypes.d.ts.map +1 -0
  87. package/dist/media/decoders/videoMimeTypes.js +50 -0
  88. package/dist/media/decoders/videoMimeTypes.js.map +1 -0
  89. package/dist/media/decoders/webCodecsChunkDecoder.d.ts +99 -0
  90. package/dist/media/decoders/webCodecsChunkDecoder.d.ts.map +1 -0
  91. package/dist/media/decoders/webCodecsChunkDecoder.js +265 -0
  92. package/dist/media/decoders/webCodecsChunkDecoder.js.map +1 -0
  93. package/dist/media/displayCapture.d.ts +128 -0
  94. package/dist/media/displayCapture.d.ts.map +1 -0
  95. package/dist/media/displayCapture.js +245 -0
  96. package/dist/media/displayCapture.js.map +1 -0
  97. package/dist/media/frameCapture.d.ts +25 -8
  98. package/dist/media/frameCapture.d.ts.map +1 -1
  99. package/dist/media/frameCapture.js +42 -72
  100. package/dist/media/frameCapture.js.map +1 -1
  101. package/dist/media/frameSampler.d.ts +94 -0
  102. package/dist/media/frameSampler.d.ts.map +1 -0
  103. package/dist/media/frameSampler.js +134 -0
  104. package/dist/media/frameSampler.js.map +1 -0
  105. package/dist/media/index.d.ts +32 -0
  106. package/dist/media/index.d.ts.map +1 -0
  107. package/dist/media/index.js +32 -0
  108. package/dist/media/index.js.map +1 -0
  109. package/dist/media/localMediaController.d.ts +116 -0
  110. package/dist/media/localMediaController.d.ts.map +1 -0
  111. package/dist/media/localMediaController.js +281 -0
  112. package/dist/media/localMediaController.js.map +1 -0
  113. package/dist/media/mediaLayout.d.ts +93 -0
  114. package/dist/media/mediaLayout.d.ts.map +1 -0
  115. package/dist/media/mediaLayout.js +187 -0
  116. package/dist/media/mediaLayout.js.map +1 -0
  117. package/dist/media/mediaPreview.d.ts +94 -0
  118. package/dist/media/mediaPreview.d.ts.map +1 -0
  119. package/dist/media/mediaPreview.js +154 -0
  120. package/dist/media/mediaPreview.js.map +1 -0
  121. package/dist/media/mediaStage.d.ts +99 -0
  122. package/dist/media/mediaStage.d.ts.map +1 -0
  123. package/dist/media/mediaStage.js +171 -0
  124. package/dist/media/mediaStage.js.map +1 -0
  125. package/dist/media/model.d.ts +154 -0
  126. package/dist/media/model.d.ts.map +1 -0
  127. package/dist/media/model.js +9 -0
  128. package/dist/media/model.js.map +1 -0
  129. package/dist/media/playbackClock.d.ts +20 -0
  130. package/dist/media/playbackClock.d.ts.map +1 -0
  131. package/dist/media/playbackClock.js +13 -0
  132. package/dist/media/playbackClock.js.map +1 -0
  133. package/dist/media/videoFrameDecoder.d.ts +86 -0
  134. package/dist/media/videoFrameDecoder.d.ts.map +1 -0
  135. package/dist/media/videoFrameDecoder.js +2 -0
  136. package/dist/media/videoFrameDecoder.js.map +1 -0
  137. package/dist/media/videoFrameDecoderRegistry.d.ts +40 -0
  138. package/dist/media/videoFrameDecoderRegistry.d.ts.map +1 -0
  139. package/dist/media/videoFrameDecoderRegistry.js +69 -0
  140. package/dist/media/videoFrameDecoderRegistry.js.map +1 -0
  141. package/dist/media/videoPacing.d.ts +32 -0
  142. package/dist/media/videoPacing.d.ts.map +1 -0
  143. package/dist/media/videoPacing.js +37 -0
  144. package/dist/media/videoPacing.js.map +1 -0
  145. package/dist/media/videoPlayout.d.ts +168 -0
  146. package/dist/media/videoPlayout.d.ts.map +1 -0
  147. package/dist/media/videoPlayout.js +217 -0
  148. package/dist/media/videoPlayout.js.map +1 -0
  149. package/dist/media/videoSourceArbiter.d.ts +250 -0
  150. package/dist/media/videoSourceArbiter.d.ts.map +1 -0
  151. package/dist/media/videoSourceArbiter.js +423 -0
  152. package/dist/media/videoSourceArbiter.js.map +1 -0
  153. package/dist/testing/conformanceAssertions.d.ts +25 -0
  154. package/dist/testing/conformanceAssertions.d.ts.map +1 -0
  155. package/dist/testing/conformanceAssertions.js +64 -0
  156. package/dist/testing/conformanceAssertions.js.map +1 -0
  157. package/dist/testing/conformanceFixtures.d.ts +76 -0
  158. package/dist/testing/conformanceFixtures.d.ts.map +1 -0
  159. package/dist/testing/conformanceFixtures.js +169 -0
  160. package/dist/testing/conformanceFixtures.js.map +1 -0
  161. package/dist/testing/conformanceGates.d.ts +32 -0
  162. package/dist/testing/conformanceGates.d.ts.map +1 -0
  163. package/dist/testing/conformanceGates.js +35 -0
  164. package/dist/testing/conformanceGates.js.map +1 -0
  165. package/dist/testing/conformanceMicrophone.d.ts +10 -0
  166. package/dist/testing/conformanceMicrophone.d.ts.map +1 -0
  167. package/dist/testing/conformanceMicrophone.js +71 -0
  168. package/dist/testing/conformanceMicrophone.js.map +1 -0
  169. package/dist/testing/conformanceTimeline.d.ts +128 -0
  170. package/dist/testing/conformanceTimeline.d.ts.map +1 -0
  171. package/dist/testing/conformanceTimeline.js +32 -0
  172. package/dist/testing/conformanceTimeline.js.map +1 -0
  173. package/dist/testing/conformanceVideoStream.d.ts +29 -0
  174. package/dist/testing/conformanceVideoStream.d.ts.map +1 -0
  175. package/dist/testing/conformanceVideoStream.js +39 -0
  176. package/dist/testing/conformanceVideoStream.js.map +1 -0
  177. package/dist/testing/index.d.ts +29 -0
  178. package/dist/testing/index.d.ts.map +1 -0
  179. package/dist/testing/index.js +28 -0
  180. package/dist/testing/index.js.map +1 -0
  181. package/dist/testing/realtimeVideoConformance.d.ts +23 -0
  182. package/dist/testing/realtimeVideoConformance.d.ts.map +1 -0
  183. package/dist/testing/realtimeVideoConformance.js +139 -0
  184. package/dist/testing/realtimeVideoConformance.js.map +1 -0
  185. package/dist/testing/realtimeVideoConformanceChecks.d.ts +4 -0
  186. package/dist/testing/realtimeVideoConformanceChecks.d.ts.map +1 -0
  187. package/dist/testing/realtimeVideoConformanceChecks.js +164 -0
  188. package/dist/testing/realtimeVideoConformanceChecks.js.map +1 -0
  189. package/dist/testing/realtimeVideoConformanceFrameChecks.d.ts +4 -0
  190. package/dist/testing/realtimeVideoConformanceFrameChecks.d.ts.map +1 -0
  191. package/dist/testing/realtimeVideoConformanceFrameChecks.js +63 -0
  192. package/dist/testing/realtimeVideoConformanceFrameChecks.js.map +1 -0
  193. package/dist/testing/realtimeVideoConformanceSession.d.ts +108 -0
  194. package/dist/testing/realtimeVideoConformanceSession.d.ts.map +1 -0
  195. package/dist/testing/realtimeVideoConformanceSession.js +270 -0
  196. package/dist/testing/realtimeVideoConformanceSession.js.map +1 -0
  197. package/dist/testing/realtimeVideoConformanceTurnChecks.d.ts +4 -0
  198. package/dist/testing/realtimeVideoConformanceTurnChecks.d.ts.map +1 -0
  199. package/dist/testing/realtimeVideoConformanceTurnChecks.js +248 -0
  200. package/dist/testing/realtimeVideoConformanceTurnChecks.js.map +1 -0
  201. package/dist/testing/realtimeVideoConformanceTypes.d.ts +155 -0
  202. package/dist/testing/realtimeVideoConformanceTypes.d.ts.map +1 -0
  203. package/dist/testing/realtimeVideoConformanceTypes.js +2 -0
  204. package/dist/testing/realtimeVideoConformanceTypes.js.map +1 -0
  205. package/dist/testing/recordingPlayout.d.ts +84 -0
  206. package/dist/testing/recordingPlayout.d.ts.map +1 -0
  207. package/dist/testing/recordingPlayout.js +120 -0
  208. package/dist/testing/recordingPlayout.js.map +1 -0
  209. package/package.json +29 -4
@@ -32,17 +32,11 @@ let OpenAIRealtimeClient = class OpenAIRealtimeClient extends OpenAIProtocolReal
32
32
  super(...arguments);
33
33
  // ── Transport ──────────────────────────────────────────────────────────────
34
34
  this.peerConnection = null;
35
+ /** The senders carrying the mic tracks, kept so {@link ReplaceMicrophone} can move them to a new track. */
36
+ this.micSenders = [];
35
37
  /** Protected so test subclasses can inspect/inject; production code treats it as private. */
36
38
  this.dataChannel = null;
37
39
  this.remoteAudioEl = null;
38
- /**
39
- * The AGENT's remote-audio stream, captured from the peer connection's `ontrack` event
40
- * (see {@link attachRemoteAudio}). Exposed via {@link GetRemoteMediaStream} so a host can
41
- * mix the agent's voice into a browser-side recording. `null` until the remote track lands.
42
- */
43
- this.remoteStream = null;
44
- /** Host handlers notified when the agent's remote-audio stream lands (or immediately, if already present). */
45
- this.remoteStreamHandlers = [];
46
40
  /**
47
41
  * The server-built session config applied verbatim via `session.update` when the data
48
42
  * channel opens. Protected so test subclasses can seed it without a full Connect.
@@ -63,6 +57,7 @@ let OpenAIRealtimeClient = class OpenAIRealtimeClient extends OpenAIProtocolReal
63
57
  * data channel opens; the client reports `'listening'` at that point.
64
58
  */
65
59
  async Connect(config, micStream) {
60
+ this.AssertTransportSupported(config);
66
61
  this.sessionConfig = config.SessionConfig;
67
62
  this.micStream = micStream;
68
63
  this.setState('connecting');
@@ -78,6 +73,22 @@ let OpenAIRealtimeClient = class OpenAIRealtimeClient extends OpenAIProtocolReal
78
73
  await this.performSdpHandshake(pc, config.EphemeralToken);
79
74
  this.setState('connected');
80
75
  }
76
+ /**
77
+ * Moves the mic senders and the input meter to the stream's current tracks (obligation #10).
78
+ * `replaceTrack` needs no renegotiation, so the call carries on.
79
+ */
80
+ async ReplaceMicrophone(micStream) {
81
+ if (this.micSenders.length === 0) {
82
+ return;
83
+ }
84
+ const tracks = micStream.getAudioTracks();
85
+ if (tracks.length === 0) {
86
+ throw new Error('The microphone stream has no audio track.');
87
+ }
88
+ await Promise.all(this.micSenders.map((sender, index) => sender.replaceTrack(tracks[index] ?? null)));
89
+ this.micStream = micStream;
90
+ this.attachInputAudioMeter(RealtimeAudioMeter.ForMicStream(micStream));
91
+ }
81
92
  /**
82
93
  * Tears down the channel, peer connection, mic tracks, and audio sink, resets the
83
94
  * response state machine, and emits a final `'closed'` (unless already `'error'`).
@@ -86,6 +97,7 @@ let OpenAIRealtimeClient = class OpenAIRealtimeClient extends OpenAIProtocolReal
86
97
  this.closeAudioMeters();
87
98
  this.micStream?.getTracks().forEach((t) => t.stop());
88
99
  this.micStream = null;
100
+ this.micSenders = [];
89
101
  if (this.dataChannel) {
90
102
  try {
91
103
  this.dataChannel.close();
@@ -105,9 +117,8 @@ let OpenAIRealtimeClient = class OpenAIRealtimeClient extends OpenAIProtocolReal
105
117
  this.remoteAudioEl.remove();
106
118
  this.remoteAudioEl = null;
107
119
  }
108
- this.remoteStream = null;
109
- // Session-scoped host handlers must not survive into a later Connect on a reused instance.
110
- this.remoteStreamHandlers = [];
120
+ // Drops the stream and the session-scoped host handlers (must not survive a reused instance).
121
+ this.clearRemoteMediaStream();
111
122
  this.sessionConfig = null;
112
123
  this.resetResponseState();
113
124
  this.audioPlaying = false;
@@ -194,11 +205,9 @@ let OpenAIRealtimeClient = class OpenAIRealtimeClient extends OpenAIProtocolReal
194
205
  return response.text();
195
206
  }
196
207
  // ── Connection internals ───────────────────────────────────────────────────
197
- /** Streams the mic tracks to the provider. */
208
+ /** Streams the mic tracks to the provider, keeping their senders. */
198
209
  attachMicrophone(pc, micStream) {
199
- for (const track of micStream.getAudioTracks()) {
200
- pc.addTrack(track, micStream);
201
- }
210
+ this.micSenders = micStream.getAudioTracks().map((track) => pc.addTrack(track, micStream));
202
211
  }
203
212
  /** Routes the provider's audio track into the hidden `<audio>` sink. */
204
213
  attachRemoteAudio(pc) {
@@ -206,52 +215,16 @@ let OpenAIRealtimeClient = class OpenAIRealtimeClient extends OpenAIProtocolReal
206
215
  pc.ontrack = (e) => {
207
216
  if (this.remoteAudioEl && e.streams[0]) {
208
217
  this.remoteAudioEl.srcObject = e.streams[0];
209
- // Capture the agent's remote stream so a host can mix it into a recording
210
- // (see GetRemoteMediaStream). Playback still flows through the <audio> element.
211
- this.remoteStream = e.streams[0];
212
- // Notify hosts (e.g. a browser recorder) that the agent's stream is now available
213
- // so they can mix it in — the track typically lands AFTER recording already began.
214
- this.notifyRemoteStream(e.streams[0]);
218
+ // Publish the agent's remote stream so a host can mix it into a recording
219
+ // (see GetRemoteMediaStream) — the track typically lands AFTER recording already
220
+ // began. Playback still flows through the <audio> element.
221
+ this.publishRemoteMediaStream(e.streams[0]);
215
222
  // Agent-side audio meter taps the remote stream (obligation #9). The
216
223
  // analyser sinks nowhere — playback still flows through the <audio> element.
217
224
  this.attachOutputAudioMeter(RealtimeAudioMeter.ForStream(e.streams[0]));
218
225
  }
219
226
  };
220
227
  }
221
- /**
222
- * Returns the AGENT's remote-audio stream once the WebRTC `ontrack` event has delivered it,
223
- * or `null` before the track lands. Lets a host mix the agent's voice into a browser-side
224
- * recording alongside the mic.
225
- */
226
- GetRemoteMediaStream() {
227
- return this.remoteStream;
228
- }
229
- /**
230
- * Registers a handler invoked when the agent's remote-audio stream becomes available — either
231
- * later via the WebRTC `ontrack`, or IMMEDIATELY if the track has already landed. Lets a host
232
- * attach the agent voice to a recording that started (mic-only) before the track arrived.
233
- */
234
- OnRemoteMediaStream(handler) {
235
- this.remoteStreamHandlers.push(handler);
236
- if (this.remoteStream) {
237
- this.invokeRemoteStreamHandler(handler, this.remoteStream);
238
- }
239
- }
240
- /** Fans a freshly-landed remote stream out to all registered host handlers. */
241
- notifyRemoteStream(stream) {
242
- for (const handler of this.remoteStreamHandlers) {
243
- this.invokeRemoteStreamHandler(handler, stream);
244
- }
245
- }
246
- /** Invokes one remote-stream handler, isolating host errors so they never disturb the call. */
247
- invokeRemoteStreamHandler(handler, stream) {
248
- try {
249
- handler(stream);
250
- }
251
- catch (error) {
252
- console.warn('[OpenAIRealtimeClient] remote-stream handler threw:', error);
253
- }
254
- }
255
228
  /**
256
229
  * Adopts + wires the events data channel: applies the session config and reports
257
230
  * `'listening'` on open; translates inbound frames through the shared protocol brain;
@@ -1 +1 @@
1
- {"version":3,"file":"openAIRealtimeClient.js","sourceRoot":"","sources":["../../src/drivers/openAIRealtimeClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openAIRealtimeClient.js","sourceRoot":"","sources":["../../src/drivers/openAIRealtimeClient.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"xaiRealtimeClient.d.ts","sourceRoot":"","sources":["../../src/drivers/xaiRealtimeClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAA4B,MAAM,oBAAoB,CAAC;AAE3F,OAAO,EACH,qCAAqC,EACrC,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,EAC5B,MAAM,iCAAiC,CAAC;AAIzC;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,+BAA+B,CAAC;AAEhE;;;;;GAKG;AACH,eAAO,MAAM,oCAAoC,uBAAuB,CAAC;AAEzE;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AAkBzC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBACa,iBAAkB,SAAQ,qCAAqC;IACxE;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB,CAAS;IAEpC;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB,CAAM;IAEhC,qEAAqE;IACrE,cAAuB,kBAAkB,IAAI,MAAM,CAElD;IAID,2EAA2E;IAC3E,SAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE,2BAA2B,GAAG,2BAA2B;IAM9F,yFAAyF;IACzF,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,2BAA2B,GAAG,MAAM;IAIzE;;;;;;OAMG;IACH,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,2BAA2B;IAuBrF;;;;;;;;OAQG;cACgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAkBlE;;;;;;;OAOG;IACH;;;;;;OAMG;cACgB,iBAAiB,IAAI,IAAI;cAIzB,oBAAoB,IAAI,IAAI;IAa/C,2FAA2F;cACxE,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAIhE,4FAA4F;IAC5F,cAAuB,sBAAsB,IAAI,MAAM,CAEtD;IAID,sFAAsF;cACnE,eAAe,CAAC,KAAK,EAAE,yBAAyB,GAAG,IAAI;IAK1E,kBAAkB;cACC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIpD,qFAAqF;cAClE,gBAAgB,CAAC,KAAK,EAAE,yBAAyB,GAAG,IAAI;CAK9E;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
1
+ {"version":3,"file":"xaiRealtimeClient.d.ts","sourceRoot":"","sources":["../../src/drivers/xaiRealtimeClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAA4B,MAAM,oBAAoB,CAAC;AAE3F,OAAO,EACH,qCAAqC,EACrC,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,EAC5B,MAAM,iCAAiC,CAAC;AAIzC;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,+BAA+B,CAAC;AAEhE;;;;;GAKG;AACH,eAAO,MAAM,oCAAoC,uBAAuB,CAAC;AAEzE;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AAkBzC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBACa,iBAAkB,SAAQ,qCAAqC;IACxE;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB,CAAS;IAEpC;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB,CAAM;IAEhC,qEAAqE;IACrE,cAAuB,kBAAkB,IAAI,MAAM,CAElD;IAID,2EAA2E;IAC3E,SAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE,2BAA2B,GAAG,2BAA2B;IAM9F,yFAAyF;IACzF,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,2BAA2B,GAAG,MAAM;IAIzE;;;;;;OAMG;IACH,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,2BAA2B;IAuBrF;;;;;;;;OAQG;cACgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAuBlE;;;;;;;OAOG;IACH;;;;;;OAMG;cACgB,iBAAiB,IAAI,IAAI;cAIzB,oBAAoB,IAAI,IAAI;IAa/C,2FAA2F;cACxE,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAIhE,4FAA4F;IAC5F,cAAuB,sBAAsB,IAAI,MAAM,CAEtD;IAID,sFAAsF;cACnE,eAAe,CAAC,KAAK,EAAE,yBAAyB,GAAG,IAAI;IAK1E,kBAAkB;cACC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIpD,qFAAqF;cAClE,gBAAgB,CAAC,KAAK,EAAE,yBAAyB,GAAG,IAAI;CAK9E;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
@@ -122,21 +122,26 @@ let xAIRealtimeClient = class xAIRealtimeClient extends OpenAIProtocolWebSocketR
122
122
  * per-turn flag resets on the next `speech_started` ({@link onSpeechStartedFrame}).
123
123
  */
124
124
  onUserTranscriptFrame(transcript) {
125
- if (transcript && transcript.trim().length > 0) {
126
- // Two ways this caption REPLACES rather than appends: another already landed in this turn,
127
- // OR it continues the previous utterance (the provider re-emits the whole thing with more
128
- // words). The second case rescues a mid-sentence pause — the VAD fires speech_started and
129
- // clears the flag even though the user never stopped, which would otherwise split one
130
- // spoken thought into several growing bubbles. Mirrors the server session exactly so both
131
- // topologies collapse the stream identically.
132
- const replacesPrevious = this.userTurnTranscribed || IsTranscriptContinuation(this.lastUserTranscript, transcript);
133
- this.emitTranscript({
134
- Role: 'User', Text: transcript, IsFinal: true, Kind: 'normal',
135
- ReplacesPrevious: replacesPrevious,
136
- });
137
- this.userTurnTranscribed = true;
138
- this.lastUserTranscript = transcript;
125
+ if (!transcript || transcript.trim().length === 0) {
126
+ // An empty transcription (a VAD false positive) passes through as a plain final, like the
127
+ // OpenAI base: the host releases the speech onset it stamped (MJ#5483). It is not part of
128
+ // the streamed utterance, so the per-turn flags stay as they are.
129
+ super.onUserTranscriptFrame(transcript ?? '');
130
+ return;
139
131
  }
132
+ // Two ways this caption REPLACES rather than appends: another already landed in this turn,
133
+ // OR it continues the previous utterance (the provider re-emits the whole thing with more
134
+ // words). The second case rescues a mid-sentence pause — the VAD fires speech_started and
135
+ // clears the flag even though the user never stopped, which would otherwise split one
136
+ // spoken thought into several growing bubbles. Mirrors the server session exactly so both
137
+ // topologies collapse the stream identically.
138
+ const replacesPrevious = this.userTurnTranscribed || IsTranscriptContinuation(this.lastUserTranscript, transcript);
139
+ this.emitTranscript({
140
+ Role: 'User', Text: transcript, IsFinal: true, Kind: 'normal',
141
+ ReplacesPrevious: replacesPrevious,
142
+ });
143
+ this.userTurnTranscribed = true;
144
+ this.lastUserTranscript = transcript;
140
145
  }
141
146
  /**
142
147
  * @inheritdoc
@@ -1 +1 @@
1
- {"version":3,"file":"xaiRealtimeClient.js","sourceRoot":"","sources":["../../src/drivers/xaiRealtimeClient.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAA+B,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EACH,qCAAqC,GAIxC,MAAM,iCAAiC,CAAC;AAEzC,kFAAkF;AAElF;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,4BAA4B,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAAG,oBAAoB,CAAC;AAEzE;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAgBzC,kFAAkF;AAElF;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEI,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,qCAAqC;IAArE;;QACH;;;;;WAKG;QACK,wBAAmB,GAAG,KAAK,CAAC;QAEpC;;;;;WAKG;QACK,uBAAkB,GAAG,EAAE,CAAC;IA2IpC,CAAC;IAzIG,qEAAqE;IACrE,IAAuB,kBAAkB;QACrC,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAED,8EAA8E;IAE9E,2EAA2E;IACjE,kBAAkB,CAAC,MAAmC;QAC5D,MAAM,GAAG,GAAG,GAAG,mBAAmB,UAAU,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/E,MAAM,WAAW,GAAG,GAAG,oCAAoC,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;QACtF,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC/C,CAAC;IAED,yFAAyF;IAC/E,iBAAiB,CAAC,OAAoC;QAC5D,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAED;;;;;;OAMG;IACO,YAAY,CAAC,GAAW,EAAE,WAAmB;QACnD,MAAM,EAAE,GAAI,UAAiH,CAAC,SAAS,CAAC;QACxI,IAAI,CAAC,EAAE,EAAE,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAC5F,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACpC,MAAM,IAAI,GAAgC;YACtC,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;YAC7B,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE;SAC1B,CAAC;QACF,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAClC,EAAE,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/D,EAAE,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,gCAAgC,CAAC,CAAC;QACpE,EAAE,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,8EAA8E;IAE9E;;;;;;;;OAQG;IACgB,qBAAqB,CAAC,UAAkB;QACvD,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,2FAA2F;YAC3F,0FAA0F;YAC1F,0FAA0F;YAC1F,sFAAsF;YACtF,0FAA0F;YAC1F,8CAA8C;YAC9C,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,IAAI,wBAAwB,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;YACnH,IAAI,CAAC,cAAc,CAAC;gBAChB,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ;gBAC7D,gBAAgB,EAAE,gBAAgB;aACrC,CAAC,CAAC;YACH,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAChC,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC;QACzC,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACH;;;;;;OAMG;IACgB,iBAAiB;QAChC,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;IACjC,CAAC;IAEkB,oBAAoB;QACnC,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC7C,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAC5B,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC;YACnC,gFAAgF;YAChF,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;YACnC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED,2FAA2F;IACxE,oBAAoB,CAAC,OAAe;QACnD,OAAO,4CAA4C,OAAO,EAAE,CAAC;IACjE,CAAC;IAED,4FAA4F;IAC5F,IAAuB,sBAAsB;QACzC,OAAO,wDAAwD,CAAC;IACpE,CAAC;IAED,6EAA6E;IAE7E,sFAAsF;IACnE,eAAe,CAAC,KAAgC;QAC/D,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,IAAI,EACtD,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,kBAAkB;IACC,cAAc,CAAC,GAAW;QACzC,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC9F,CAAC;IAED,qFAAqF;IAClE,gBAAgB,CAAC,KAAgC;QAChE,IAAI,KAAK,CAAC,IAAI,KAAK,2BAA2B,EAAE,CAAC;YAC7C,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACjE,CAAC;IACL,CAAC;CACJ,CAAA;AA1JY,iBAAiB;IAD7B,aAAa,CAAC,kBAAkB,EAAE,KAAK,CAAC;GAC5B,iBAAiB,CA0J7B;;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB;IACjC,oEAAoE;AACxE,CAAC"}
1
+ {"version":3,"file":"xaiRealtimeClient.js","sourceRoot":"","sources":["../../src/drivers/xaiRealtimeClient.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { ClientRealtimeSessionConfig, JSONObject, RealtimeTrack, RealtimeTrackDescriptor, RealtimeTrackDirection, RealtimeUsageModalityDetail } from '@memberjunction/ai';
2
2
  import { IRealtimeAudioMeter } from '../audio/audioMeter.js';
3
+ import type { MediaVideoSource } from '../media/model.js';
3
4
  /**
4
5
  * Session-config key under which the realtime runtime hands a driver the tracks to negotiate
5
6
  * (`RealtimeSessionRuntime.BuildClientConfig` aggregates them from the active channels). It is a
@@ -98,7 +99,9 @@ export interface RealtimeClientToolCall {
98
99
  * simply never emit):
99
100
  * - **OpenAI** — emits per-response deltas from the GA `response.done` frame's `usage` payload.
100
101
  * - **Gemini** — emits per-turn deltas from `LiveServerMessage.usageMetadata`
101
- * (`promptTokenCount` / `responseTokenCount` are per-response counts, not cumulative).
102
+ * (`promptTokenCount` / `responseTokenCount` are per-response counts, not cumulative), and,
103
+ * in an avatar session, the seconds of avatar video each turn generated, in updates of their
104
+ * own that carry only `OutputTokenDetails.VideoSeconds`.
102
105
  * - **ElevenLabs** — the Conversational AI socket exposes no usage events; never emits.
103
106
  * - **AssemblyAI** — the streaming STT socket exposes no token-usage events; never emits.
104
107
  */
@@ -114,7 +117,10 @@ export interface RealtimeClientUsage {
114
117
  DurationSeconds?: number;
115
118
  /** Per-modality breakdown of input tokens (text, audio, image/video). */
116
119
  InputTokenDetails?: RealtimeUsageModalityDetail;
117
- /** Per-modality breakdown of output tokens (text, audio). */
120
+ /**
121
+ * Per-modality breakdown of output tokens (text, audio, video), and the seconds of avatar video
122
+ * generated since the last update (`VideoSeconds`, an amount like the tokens).
123
+ */
118
124
  OutputTokenDetails?: RealtimeUsageModalityDetail;
119
125
  /** Cumulative video frames processed or sent across inbound video tracks. */
120
126
  VideoFrames?: number;
@@ -137,6 +143,11 @@ export interface RealtimeClientUsage {
137
143
  * receiving a tool call and calling {@link BaseRealtimeClient.SendToolResult}.
138
144
  */
139
145
  export type RealtimeClientState = 'connecting' | 'connected' | 'listening' | 'speaking' | 'closed' | 'error';
146
+ /**
147
+ * The {@link RealtimeClientError.Code} of a call that ended because its session reached its time limit (MJAPI's relay
148
+ * closed it with `REALTIME_RELAY_TIME_LIMIT_CLOSE_CODE`), so a host can say so instead of showing a connection error.
149
+ */
150
+ export declare const REALTIME_CLIENT_TIME_LIMIT_ERROR_CODE = "time-limit";
140
151
  /**
141
152
  * An error surfaced by a realtime client. `Fatal: true` means the session is unusable
142
153
  * (transport failure); `Fatal: false` is a provider-reported, recoverable error frame.
@@ -226,6 +237,32 @@ export interface RealtimeClientError {
226
237
  * client-owned-audio drivers, the remote WebRTC stream on peer-connection drivers.
227
238
  * Meters must be released on disconnect ({@link closeAudioMeters}). A driver with no
228
239
  * tappable plane simply attaches nothing — hosts fall back to turn-state animation.
240
+ * 10. **Follow a replaced microphone track, when the transport can.** A device switch or a
241
+ * lost device swaps the track inside the mic stream, and anything bound to the old track (a
242
+ * WebRTC sender, a Web Audio source node, the input meter's clone) goes silent. A driver
243
+ * implements {@link BaseRealtimeClient.ReplaceMicrophone} to rebind them: `replaceTrack` on
244
+ * its senders, or `IPcmMicCapture.Rebind` on its PCM capture, and a new input meter.
245
+ * 11. **Refuse a transport you don't speak.** A session minted to run through MJAPI's realtime
246
+ * relay (`ClientRealtimeSessionConfig.Transport` `'relay'`) has no provider token, only a relay
247
+ * URL. Every driver calls {@link BaseRealtimeClient.AssertTransportSupported} first in
248
+ * {@link BaseRealtimeClient.Connect}, so a driver that connects only to its provider refuses
249
+ * such a session with a clear error instead of failing at the provider. A driver that speaks
250
+ * its provider's protocol through the relay opts in by overriding
251
+ * {@link BaseRealtimeClient.SupportsRelayTransport}.
252
+ * 12. **The agent's video keeps the voice's rules.** A driver whose model sends the agent's video
253
+ * hands it over through {@link emitRemoteVideo} once per session, and only while its outbound
254
+ * video track is live; an audio-only session hands over nothing and never plays a video part as
255
+ * audio. Its player gets each frame as the model sent it (a `RealtimeVideoFrame`, in order).
256
+ * Barge-in flushes the video with the voice (obligation #3) and the cut turn's late media never
257
+ * plays; a turn's end lets its video play out; a video that carries the voice never plays it
258
+ * twice; each second of generated video is reported once (`OutputTokenDetails.VideoSeconds`); the
259
+ * video a model streams between answers (Vertex AI's avatar does) plays, but is not the agent
260
+ * speaking: it reports no `'speaking'`, leaves {@link IsBusy} as it was, and does not keep
261
+ * {@link IsAudioPlaying} true once the answer's media has played; a resumed session keeps its
262
+ * video; `Disconnect` releases it. A driver whose voice and video share a media timeline queues
263
+ * its PCM at its media times and gives the player its voice playback as the clock
264
+ * (`VideoPlayoutOptions.Clock`). The video conformance kit
265
+ * (`@memberjunction/ai-realtime-client/testing`) checks each rule.
229
266
  */
230
267
  export declare abstract class BaseRealtimeClient {
231
268
  private transcriptHandler?;
@@ -233,6 +270,7 @@ export declare abstract class BaseRealtimeClient {
233
270
  private stateChangeHandler?;
234
271
  private errorHandler?;
235
272
  private interruptionHandler?;
273
+ private userSpeechStartHandler?;
236
274
  private usageHandler?;
237
275
  private remoteVideoHandler?;
238
276
  private trackHandler?;
@@ -246,6 +284,32 @@ export declare abstract class BaseRealtimeClient {
246
284
  * All tracks evaluated for this session (including `'unsupported'` or `'denied'`).
247
285
  */
248
286
  get AllTracks(): readonly RealtimeTrack[];
287
+ /** The model's declared inbound video stream ceiling, recorded by {@link negotiateTracks}; `undefined` until a driver declares one. */
288
+ private inboundVideoStreamLimit;
289
+ /** What the driver supports, recorded by {@link negotiateTracks} so {@link AddTrack} can resolve against it later. */
290
+ private supportedTracks;
291
+ /** The index the next added track's id takes, so an added track never reuses an id. */
292
+ private nextTrackIndex;
293
+ /**
294
+ * How many concurrent inbound video streams the model accepts: the ceiling the driver declared when it
295
+ * negotiated tracks, else `1` when an inbound video track is live and `0` when it is not.
296
+ *
297
+ * A source arbiter reads this to decide whether several live video sources must be narrowed to one
298
+ * (with a note to the model on each switch) or passed through untouched.
299
+ */
300
+ get MaxInboundVideoStreams(): number;
301
+ /**
302
+ * The frame rate (frames per second) the live inbound video track was negotiated at — the model's
303
+ * ceiling or the session's request, whichever is lower — or `undefined` when no inbound video track
304
+ * is live or none declared a rate. Anything pacing a video feed reads THIS, never a constant of its own.
305
+ */
306
+ get InboundVideoRate(): number | undefined;
307
+ /**
308
+ * Whether the model takes inbound video on this session: the driver declared an inbound video track it supports when it
309
+ * negotiated tracks, and a stream limit above zero. No video track need be live; one is added when a capture starts
310
+ * ({@link AddTrack}). `false` before tracks are negotiated, and for a driver that does not negotiate them.
311
+ */
312
+ get SupportsInboundVideo(): boolean;
249
313
  /**
250
314
  * Returns whether a track of the requested modality and direction is established and `'live'`.
251
315
  */
@@ -255,7 +319,28 @@ export declare abstract class BaseRealtimeClient {
255
319
  * Audio (inbound + outbound) is the baseline floor of every realtime session;
256
320
  * any additional requested tracks (such as channel video) are unioned onto this baseline floor.
257
321
  */
258
- protected negotiateTracks(requested: readonly RealtimeTrackDescriptor[] | undefined, supported: readonly RealtimeTrackDescriptor[] | undefined): RealtimeTrack[];
322
+ protected negotiateTracks(requested: readonly RealtimeTrackDescriptor[] | undefined, supported: readonly RealtimeTrackDescriptor[] | undefined, maxInboundVideoStreams?: number): RealtimeTrack[];
323
+ /**
324
+ * Adds a track to a running session, such as inbound video when the user starts their camera, resolved against
325
+ * what the driver supported when it negotiated at connect. The new track is `'live'`, or `'unsupported'` with the
326
+ * reason (the model takes no such track, or no more inbound video streams). A live track with the same
327
+ * direction, modality and source is returned as it is. Other tracks keep their ids.
328
+ *
329
+ * The base re-negotiates locally, which is all a driver needs when its provider accepts the media without a
330
+ * setup change (Gemini Live takes video frames at any time). A driver whose wire must change overrides this and
331
+ * calls it.
332
+ *
333
+ * @returns The track, or `null` when the session has not negotiated tracks: before it connects, or with a driver
334
+ * that does not negotiate them (only the Gemini driver does today).
335
+ */
336
+ AddTrack(descriptor: RealtimeTrackDescriptor): RealtimeTrack | null;
337
+ /**
338
+ * Ends a track on a running session, such as inbound video when the user stops their camera: the track is
339
+ * reported `'ended'` and leaves {@link AllTracks}. Audio, the session's floor, cannot be removed.
340
+ *
341
+ * @returns Whether a track was ended.
342
+ */
343
+ RemoveTrack(descriptor: Pick<RealtimeTrackDescriptor, 'Modality' | 'Direction' | 'SourceID'>): boolean;
259
344
  /** Meter over the USER's microphone, when the driver attached one. */
260
345
  protected inputAudioMeter: IRealtimeAudioMeter | null;
261
346
  /** Meter over the AGENT's audio output, when the driver attached one. */
@@ -280,7 +365,8 @@ export declare abstract class BaseRealtimeClient {
280
365
  * private pact between this driver and the same-keyed server driver that minted it (see
281
366
  * driver obligation #8); how it is applied is entirely driver-specific.
282
367
  *
283
- * @param config The server-minted client session config (provider, model, ephemeral token, session config).
368
+ * @param config The server-minted client session config (provider, model, ephemeral token or relay transport,
369
+ * session config). A driver refuses a transport it does not speak first (see {@link AssertTransportSupported}).
284
370
  * @param micStream The user's microphone capture stream. The caller acquires it (so IT owns
285
371
  * the permission prompt UX); the client attaches it to the transport and stops its tracks
286
372
  * on {@link Disconnect}.
@@ -291,25 +377,56 @@ export declare abstract class BaseRealtimeClient {
291
377
  */
292
378
  abstract Connect(config: ClientRealtimeSessionConfig, micStream: MediaStream, cameraStream?: MediaStream): Promise<void>;
293
379
  /**
294
- * Returns the AGENT's remote-audio {@link MediaStream} when this driver owns a tappable
295
- * remote-audio plane (e.g. a WebRTC peer-connection driver routes the model's audio track
296
- * here), or `null` otherwise. Hosts use it to MIX the agent's voice into a browser-side
297
- * recording alongside the mic; a `null` return (the default, and what every non-WebRTC
298
- * driver gives) degrades gracefully to mic-only capture.
380
+ * Whether this driver can open a relay session (`ClientRealtimeSessionConfig.Transport` `'relay'`): connect to
381
+ * MJAPI's realtime relay at the session's `RelayUrl` rather than to its provider. `false` here; a driver that speaks
382
+ * its provider's protocol through the relay opts in by overriding it (the Gemini Enterprise client does).
383
+ */
384
+ protected get SupportsRelayTransport(): boolean;
385
+ /**
386
+ * Refuses a session this driver cannot open: a relay session, unless the driver opts in through
387
+ * {@link SupportsRelayTransport}. Every driver calls this first in {@link Connect}, before it touches the session's
388
+ * media or opens a connection (driver obligation #11). The message names the provider key and never quotes the
389
+ * relay URL, which carries the relay's ticket.
299
390
  *
300
- * **Optional capability:** the method itself is optional — call sites must use
301
- * `client.GetRemoteMediaStream?.() ?? null`. Drivers that can't expose a remote stream
302
- * simply don't implement it (or return `null`).
391
+ * @param config The session the host asked this driver to open.
392
+ * @throws When the session runs through the relay and this driver does not support it.
393
+ */
394
+ protected AssertTransportSupported(config: ClientRealtimeSessionConfig): void;
395
+ /** The agent's current remote-audio stream, or `null` until a driver publishes one. */
396
+ private remoteMediaStream;
397
+ /** Host handlers notified when the agent's stream lands (or immediately, if already present). */
398
+ private remoteMediaStreamHandlers;
399
+ /**
400
+ * Returns the AGENT's remote-audio {@link MediaStream} when this driver owns a tappable
401
+ * agent-audio plane (a WebRTC driver's remote track, or a PCM driver's playout output),
402
+ * or `null` otherwise. Hosts use it to MIX the agent's voice into a browser-side recording
403
+ * alongside the mic; `null` (drivers with no tappable plane, or before the stream lands)
404
+ * degrades gracefully to mic-only capture. Hosts may still call it as `client.GetRemoteMediaStream?.()`.
405
+ * Pure read — never mutates.
303
406
  */
304
- GetRemoteMediaStream?(): MediaStream | null;
407
+ GetRemoteMediaStream(): MediaStream | null;
305
408
  /**
306
- * **Optional capability:** registers a handler invoked when the agent's remote-audio stream
307
- * becomes available — immediately if it has already landed, otherwise when the WebRTC track
308
- * arrives (typically AFTER {@link Connect} resolves). Lets a host attach the agent voice to a
309
- * recording that began before the track landed. Call as `client.OnRemoteMediaStream?.(cb)`;
310
- * drivers without a remote stream simply don't implement it.
409
+ * Registers a handler invoked when the agent's remote-audio stream becomes available —
410
+ * IMMEDIATELY (synchronously) if it has already landed, otherwise when the driver publishes
411
+ * it (a WebRTC track typically lands AFTER {@link Connect} resolves). Lets a host attach the
412
+ * agent voice to a recording that began before the stream landed. Handler errors are
413
+ * isolated (logged) so a host bug never disturbs the call. Handlers are session-scoped:
414
+ * {@link clearRemoteMediaStream} (called from `Disconnect`) drops them.
311
415
  */
312
- OnRemoteMediaStream?(handler: (stream: MediaStream) => void): void;
416
+ OnRemoteMediaStream(handler: (stream: MediaStream) => void): void;
417
+ /**
418
+ * Driver hook: records the agent's remote-audio stream and fans it out to every registered
419
+ * handler. Passing `null` (a driver with no tappable plane) just records `null` and
420
+ * notifies nobody.
421
+ */
422
+ protected publishRemoteMediaStream(stream: MediaStream | null): void;
423
+ /**
424
+ * Driver hook for `Disconnect`: drops the stream AND the handlers. Handlers must not survive
425
+ * into a later `Connect` on a reused instance, or a stale host callback would receive the
426
+ * next session's stream.
427
+ */
428
+ protected clearRemoteMediaStream(): void;
429
+ private invokeRemoteMediaStreamHandler;
313
430
  /**
314
431
  * Injects typed text into the live session as a USER turn and asks the model to respond.
315
432
  * Implementations must route the reply through the same collision-safe path as tool
@@ -378,6 +495,24 @@ export declare abstract class BaseRealtimeClient {
378
495
  * @param muted `true` to mute the mic, `false` to unmute.
379
496
  */
380
497
  abstract SetMuted(muted: boolean): void;
498
+ /**
499
+ * Moves a connected session onto the microphone stream's current audio track: call it after the
500
+ * track changes (a device switch, or a lost device replaced by the default) or to use another
501
+ * stream. The connection stays up and the provider hears the new track. The driver now owns this
502
+ * stream as it owned the one given to {@link Connect}; the previous stream's tracks are the
503
+ * caller's to stop.
504
+ *
505
+ * Mute follows the track: the new track's `enabled` flag decides it, so a caller replacing a
506
+ * muted track carries `enabled` over (the `LocalMediaController` does).
507
+ *
508
+ * **Optional capability** (driver obligation #10): a driver that can't rebind its transport
509
+ * leaves it undefined. Does nothing when the session isn't connected.
510
+ *
511
+ * @param micStream The stream to follow, usually the one given to {@link Connect} after the
512
+ * controller swapped its track.
513
+ * @throws (rejects) When the stream has no audio track; the session keeps its current microphone.
514
+ */
515
+ ReplaceMicrophone?(micStream: MediaStream): Promise<void>;
381
516
  /**
382
517
  * Tears down the provider connection and all client-held resources (control channel,
383
518
  * transport, mic tracks, audio sink) and emits a final `'closed'` state (unless the
@@ -433,6 +568,13 @@ export declare abstract class BaseRealtimeClient {
433
568
  * into a conversation that has moved on.
434
569
  */
435
570
  OnInterruption(handler: () => void): void;
571
+ /**
572
+ * Registers the single handler invoked when the provider's voice-activity detection saw
573
+ * the user start to speak. Fires once per detected onset and may fire again inside one
574
+ * turn after a pause; it carries no text. Unlike {@link OnInterruption}, it fires whether
575
+ * or not the model was speaking.
576
+ */
577
+ OnUserSpeechStart(handler: () => void): void;
436
578
  /**
437
579
  * Registers the (single) usage handler.
438
580
  *
@@ -447,17 +589,21 @@ export declare abstract class BaseRealtimeClient {
447
589
  */
448
590
  OnUsage(handler: (usage: RealtimeClientUsage) => void): void;
449
591
  /**
450
- * Registers the (single) remote-VIDEO handler — the model/avatar's video track for a VIDEO session
451
- * (a talking-head the host renders, e.g. as the agent's tile). Invoked once the provider publishes
452
- * its video track.
592
+ * Registers the (single) remote-VIDEO handler — the model/avatar's video for a VIDEO session (a talking-head
593
+ * the host renders, e.g. as the agent's tile). Invoked once the provider's video is available.
594
+ *
595
+ * The video is a {@link MediaVideoSource}: a live stream (a WebRTC track), or a player that must own the
596
+ * `<video>` element (MSE or WebCodecs playout of encoded avatar video). Hosts show either with
597
+ * `AttachVideoSource`.
453
598
  *
454
599
  * **Optional capability:** audio-only drivers (the default) never emit — registering is always safe,
455
- * but hosts must not assume a video track arrives. Video-capable drivers
456
- * ({@link BaseRealtimeModel.SupportsVideo}) call {@link emitRemoteVideo} when the track is live.
600
+ * but hosts must not assume video arrives. A driver whose model sends video (the server driver declares an
601
+ * outbound video track in its session's `Capabilities.SupportedOutboundTracks`, or renders an avatar,
602
+ * `BaseRealtimeModel.SupportsAvatarOutput`) calls {@link emitRemoteVideo} when it is live.
457
603
  *
458
- * @param handler Invoked with the remote video `MediaStream` when it becomes available.
604
+ * @param handler Invoked with the remote video when it becomes available.
459
605
  */
460
- OnRemoteVideo(handler: (stream: MediaStream) => void): void;
606
+ OnRemoteVideo(handler: (video: MediaVideoSource) => void): void;
461
607
  /**
462
608
  * Registers the track-state-change handler — invoked when tracks transition in lifecycle
463
609
  * (e.g. established to `'live'`, `'denied'`, or `'unsupported'`).
@@ -469,9 +615,12 @@ export declare abstract class BaseRealtimeClient {
469
615
  *
470
616
  * @param base64Image Base64-encoded image data.
471
617
  * @param mimeType Image MIME type (defaults to 'image/jpeg').
618
+ * @param sourceId Which source this frame came from. A driver whose model takes ONE inbound video
619
+ * stream ignores it (the source arbiter already chose what to send); a driver whose model takes
620
+ * several routes the frame to the track bound to that `SourceID`.
472
621
  * @returns `true` if accepted and sent; `false` if dropped (throttled, unestablished, etc.).
473
622
  */
474
- SendVideoFrame?(base64Image: string, mimeType?: string): boolean;
623
+ SendVideoFrame?(base64Image: string, mimeType?: string, sourceId?: string): boolean;
475
624
  /** Emits a track state change to the registered handler (if any). */
476
625
  protected emitTrackStateChange(track: RealtimeTrack): void;
477
626
  /** Emits a transcript event to the registered handler (if any). */
@@ -484,9 +633,14 @@ export declare abstract class BaseRealtimeClient {
484
633
  protected emitError(error: RealtimeClientError): void;
485
634
  /** Emits a true barge-in interruption to the registered handler (if any). */
486
635
  protected emitInterruption(): void;
636
+ /** Emits a user-speech-onset to the registered handler (if any). */
637
+ protected emitUserSpeechStart(): void;
487
638
  /** Emits a usage update (token deltas for a completed response/turn) to the registered handler (if any). */
488
639
  protected emitUsage(usage: RealtimeClientUsage): void;
489
- /** Emits the model/avatar's remote video stream to the registered handler (video drivers only). */
490
- protected emitRemoteVideo(stream: MediaStream): void;
640
+ /**
641
+ * Emits the model/avatar's remote video to the registered handler (video drivers only). A driver with a plain
642
+ * `MediaStream` passes it as it is; it is handed on as a `'stream'` source.
643
+ */
644
+ protected emitRemoteVideo(video: MediaVideoSource | MediaStream): void;
491
645
  }
492
646
  //# sourceMappingURL=baseRealtimeClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"baseRealtimeClient.d.ts","sourceRoot":"","sources":["../../src/generic/baseRealtimeClient.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,2BAA2B,EAE3B,UAAU,EACV,aAAa,EACb,uBAAuB,EACvB,sBAAsB,EAEtB,2BAA2B,EAC9B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAA4B,MAAM,qBAAqB,CAAC;AAEpF;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,oBAAoB,CAAC;AAE9D;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,aAAa,EAAE,UAAU,GAAG,UAAU,CAG7E;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,qBAAqB;IAClC,4EAA4E;IAC5E,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,+EAA+E;IAC/E,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,6FAA6F;IAC7F,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC3B,sGAAsG;IACtG,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CAC/B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,wBAAwB;IACrC,6CAA6C;IAC7C,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,gGAAgG;IAChG,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,IAAI,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC7B;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACnC,8FAA8F;IAC9F,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,yFAAyF;IACzF,aAAa,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,mBAAmB;IAChC,sFAAsF;IACtF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uFAAuF;IACvF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,2BAA2B,CAAC;IAChD,6DAA6D;IAC7D,kBAAkB,CAAC,EAAE,2BAA2B,CAAC;IACjD,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oFAAoF;IACpF,GAAG,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE7G;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAChC,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,KAAK,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EG;AACH,8BAAsB,kBAAkB;IAEpC,OAAO,CAAC,iBAAiB,CAAC,CAAiD;IAC3E,OAAO,CAAC,eAAe,CAAC,CAAyC;IACjE,OAAO,CAAC,kBAAkB,CAAC,CAAuC;IAClE,OAAO,CAAC,YAAY,CAAC,CAAuC;IAC5D,OAAO,CAAC,mBAAmB,CAAC,CAAa;IACzC,OAAO,CAAC,YAAY,CAAC,CAAuC;IAC5D,OAAO,CAAC,kBAAkB,CAAC,CAAgC;IAC3D,OAAO,CAAC,YAAY,CAAC,CAAiC;IAGtD,gEAAgE;IAChE,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,CAAM;IAEvC;;OAEG;IACH,IAAW,iBAAiB,IAAI,SAAS,aAAa,EAAE,CAEvD;IAED;;OAEG;IACH,IAAW,SAAS,IAAI,SAAS,aAAa,EAAE,CAE/C;IAED;;OAEG;IACI,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,sBAAsB,GAAG,OAAO;IAOvF;;;;OAIG;IACH,SAAS,CAAC,eAAe,CACrB,SAAS,EAAE,SAAS,uBAAuB,EAAE,GAAG,SAAS,EACzD,SAAS,EAAE,SAAS,uBAAuB,EAAE,GAAG,SAAS,GAC1D,aAAa,EAAE;IA4BlB,sEAAsE;IACtE,SAAS,CAAC,eAAe,EAAE,mBAAmB,GAAG,IAAI,CAAQ;IAC7D,yEAAyE;IACzE,SAAS,CAAC,gBAAgB,EAAE,mBAAmB,GAAG,IAAI,CAAQ;IAE9D;;;;;OAKG;IACI,gBAAgB,IAAI,qBAAqB,GAAG,IAAI;IAYvD,8FAA8F;IAC9F,SAAS,CAAC,qBAAqB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,GAAG,IAAI;IAKxE,2FAA2F;IAC3F,SAAS,CAAC,sBAAsB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,GAAG,IAAI;IAKzE,wFAAwF;IACxF,SAAS,CAAC,gBAAgB,IAAI,IAAI;IAKlC;;;;;;;;;;;;;;;OAeG;aACa,OAAO,CAAC,MAAM,EAAE,2BAA2B,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/H;;;;;;;;;;OAUG;IACI,oBAAoB,CAAC,IAAI,WAAW,GAAG,IAAI;IAElD;;;;;;OAMG;IACI,mBAAmB,CAAC,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI;IAEzE;;;;;;;;;;;;;;OAcG;aACa,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAE5C;;;;;;;;;OASG;aACa,oBAAoB,IAAI,IAAI;IAE5C;;;;;OAKG;aACa,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAEnD;;;;;;;;;;;;;;;OAeG;aACa,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAE/D;;;;;;;;OAQG;aACa,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAExE;;;;;OAKG;aACa,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAE9C;;;;OAIG;aACa,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAE3C;;;;OAIG;IACH,aAAoB,MAAM,IAAI,OAAO,CAAC;IAEtC;;;;;OAKG;IACH,aAAoB,cAAc,IAAI,OAAO,CAAC;IAI9C;;;;OAIG;IACI,YAAY,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,wBAAwB,KAAK,IAAI,GAAG,IAAI;IAIlF;;;OAGG;IACI,UAAU,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,IAAI,GAAG,IAAI;IAIxE;;;OAGG;IACI,aAAa,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,GAAG,IAAI;IAIzE;;;OAGG;IACI,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,GAAG,IAAI;IAInE;;;;;;;;;;;;;OAaG;IACI,cAAc,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAIhD;;;;;;;;;;;OAWG;IACI,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,GAAG,IAAI;IAInE;;;;;;;;;;OAUG;IACI,aAAa,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI;IAIlE;;;OAGG;IACI,kBAAkB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,IAAI;IAIxE;;;;;;;OAOG;IACI,cAAc,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO;IAIvE,qEAAqE;IACrE,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAI1D,mEAAmE;IACnE,SAAS,CAAC,cAAc,CAAC,UAAU,EAAE,wBAAwB,GAAG,IAAI;IAIpE,oEAAoE;IACpE,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,sBAAsB,GAAG,IAAI;IAI1D,+DAA+D;IAC/D,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAI3D,yDAAyD;IACzD,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAIrD,6EAA6E;IAC7E,SAAS,CAAC,gBAAgB,IAAI,IAAI;IAIlC,4GAA4G;IAC5G,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAIrD,mGAAmG;IACnG,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;CAGvD"}
1
+ {"version":3,"file":"baseRealtimeClient.d.ts","sourceRoot":"","sources":["../../src/generic/baseRealtimeClient.ts"],"names":[],"mappings":"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"}