@llmrtc/llmrtc-web-client 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,63 @@
1
+ # @llmrtc/llmrtc-web-client
2
+
3
+ ## 1.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 3db8818: Realtime relay milestone 3 (RFC 0001): playbooks, client events,
8
+ reconnect grace.
9
+ - Playbooks work in relay mode (llm_decision transitions;
10
+ clearHistory and per-stage llmConfig are not applied in relay mode): playbook_transition tool calls
11
+ reconfigure the live session's instructions and tools via the shared
12
+ PlaybookEngine, emit stage-change to clients, and nudge the model to
13
+ speak the new stage.
14
+ - Web client: new assistantTranscript and usage events, plus a
15
+ reserved modeChanged event (mid-session pipeline fallback ships in a
16
+ later milestone);
17
+ new mode-changed protocol message; session interface gains optional
18
+ requestResponse (OpenAI adapter implements it).
19
+ - Client reconnect grace: a dropped client has clientReconnectGraceMs
20
+ (default 30s) to reconnect and adopt its still-live provider session
21
+ (honest historyRecovered semantics); playback re-targets the new
22
+ peer.
23
+ - New docs page: Realtime Speech-to-Speech (experimental).
24
+
25
+ ### Patch Changes
26
+
27
+ - Updated dependencies [6a74624]
28
+ - Updated dependencies [2cc97a0]
29
+ - Updated dependencies [3db8818]
30
+ - @llmrtc/llmrtc-core@1.3.0
31
+
32
+ ## 1.1.0
33
+
34
+ ### Minor Changes
35
+
36
+ - 8ff3ea3: Correctness release: make the advertised behavior actually work end to end.
37
+ - Core: system prompt is always sent and pinned outside the history window;
38
+ runTurnStream accepts an AbortSignal (barge-in); onLLMEnd has real
39
+ guardrail semantics; concurrent turns serialize correctly; clearHistory
40
+ transitions clear conversation history; PlaybookHooks are wired; tool
41
+ executor abort/ordering fixes; deep tool-argument validation.
42
+ - Providers: multi-turn tool calling now works across OpenAI, Anthropic,
43
+ Gemini, Bedrock, OpenRouter, LMStudio, and Ollama (history replay,
44
+ parallel tool results, streaming accumulation); malformed tool arguments
45
+ are flagged instead of silently becoming {}; Bedrock defaults to an
46
+ invocable inference profile; Ollama NDJSON streaming is buffered
47
+ correctly; ElevenLabs format mapping fixed; Whisper uploads are named by
48
+ their actual container.
49
+ - Backend: turns serialize per connection and barge-in aborts the in-flight
50
+ turn in any phase; session reconnection binds the recovered history;
51
+ Metered TURN credentials refresh on a TTL; start()/stop() lifecycle
52
+ fixes; real-time audio pacing.
53
+ - Web client: vision frames are delivered in time to reach the turn;
54
+ session resume follows the protocol and actually restores history;
55
+ close()/failure releases the microphone and camera; frame capture works
56
+ outside Chromium; non-WebRTC fallback (sendAudio/ttsChunk) is usable.
57
+ - Packaging: packages resolve under require(), clean checkouts build first
58
+ try, and npm tarballs ship the NOTICE file.
59
+
60
+ ### Patch Changes
61
+
62
+ - Updated dependencies [8ff3ea3]
63
+ - @llmrtc/llmrtc-core@1.1.0
package/NOTICE ADDED
@@ -0,0 +1,7 @@
1
+ LLMRTC
2
+ Copyright 2025 Next Path Software Consulting Inc., dba Metered
3
+
4
+ This product includes software developed by Next Path Software Consulting Inc., dba Metered.
5
+
6
+ Project home: https://www.llmrtc.org/
7
+ Company: https://www.metered.ca/
@@ -82,6 +82,10 @@ export declare class ConnectionStateMachine extends EventEmitter<ConnectionState
82
82
  * Reset the state machine to initial state.
83
83
  */
84
84
  reset(): void;
85
+ /**
86
+ * Reset only the retry counter (e.g. when the user restarts the client).
87
+ */
88
+ resetRetries(): void;
85
89
  /**
86
90
  * Update the configuration.
87
91
  */
@@ -116,7 +116,7 @@ export class ConnectionStateMachine extends EventEmitter {
116
116
  ConnectionState.FAILED
117
117
  ],
118
118
  [ConnectionState.FAILED]: [ConnectionState.CONNECTING], // Allow retry from failed
119
- [ConnectionState.CLOSED]: [] // No transitions from closed
119
+ [ConnectionState.CLOSED]: [ConnectionState.CONNECTING] // Allow restart after close()
120
120
  };
121
121
  return validTransitions[from]?.includes(to) ?? false;
122
122
  }
@@ -148,6 +148,12 @@ export class ConnectionStateMachine extends EventEmitter {
148
148
  this._state = ConnectionState.DISCONNECTED;
149
149
  this._retryCount = 0;
150
150
  }
151
+ /**
152
+ * Reset only the retry counter (e.g. when the user restarts the client).
153
+ */
154
+ resetRetries() {
155
+ this._retryCount = 0;
156
+ }
151
157
  /**
152
158
  * Update the configuration.
153
159
  */
@@ -1 +1 @@
1
- {"version":3,"file":"connection-state.js","sourceRoot":"","sources":["../src/connection-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connection-state.js","sourceRoot":"","sources":["../src/connection-state.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -38,10 +38,24 @@ export interface StageChangePayload {
38
38
  reason: string;
39
39
  }
40
40
  export type ClientEvents = {
41
- transcript: (text: string) => void;
41
+ transcript: (text: string, isFinal?: boolean) => void;
42
+ /** Assistant-side transcript (realtime relay mode). */
43
+ assistantTranscript: (text: string, isFinal?: boolean) => void;
44
+ /** Per-response token usage (realtime relay mode). */
45
+ usage: (usage: {
46
+ inputTokens: number;
47
+ outputTokens: number;
48
+ audioInputTokens?: number;
49
+ audioOutputTokens?: number;
50
+ cachedTokens?: number;
51
+ }) => void;
52
+ /** Mid-session mode change (relay fell back to pipeline). */
53
+ modeChanged: (mode: 'pipeline' | 'realtime') => void;
42
54
  llm: (text: string) => void;
43
55
  llmChunk: (text: string) => void;
44
56
  tts: (audio: ArrayBuffer, format: string) => void;
57
+ /** Streaming TTS audio when no WebRTC audio track is available */
58
+ ttsChunk: (audio: ArrayBuffer, format: string, sampleRate?: number) => void;
45
59
  ttsTrack: (stream: MediaStream) => void;
46
60
  ttsStart: () => void;
47
61
  ttsComplete: () => void;
@@ -54,6 +68,8 @@ export type ClientEvents = {
54
68
  error: (error: ClientError) => void;
55
69
  stateChange: (state: ConnectionState) => void;
56
70
  reconnecting: (attempt: number, maxAttempts: number) => void;
71
+ /** Fired after a reconnect completes; indicates whether history was recovered */
72
+ reconnected: (historyRecovered: boolean) => void;
57
73
  };
58
74
  export interface FrameCaptureController {
59
75
  stop(): void;
@@ -72,6 +88,12 @@ export declare class LLMRTCWebClient extends EventEmitter<ClientEvents> {
72
88
  private heartbeatTimeout?;
73
89
  private missedHeartbeats;
74
90
  private reconnectTimeout?;
91
+ /**
92
+ * Incremented on every cleanup. An in-flight reconnect attempt compares
93
+ * its captured epoch after each await; a mismatch means close() (or a
94
+ * newer attempt) superseded it and it must not resurrect the connection.
95
+ */
96
+ private connectionEpoch;
75
97
  /** ICE servers received from server in ready message */
76
98
  private serverIceServers;
77
99
  private audioTrack?;
@@ -93,6 +115,11 @@ export declare class LLMRTCWebClient extends EventEmitter<ClientEvents> {
93
115
  */
94
116
  start(): Promise<void>;
95
117
  private connect;
118
+ /**
119
+ * Send a reconnect request and wait for the ack.
120
+ * Resolves with whether the server recovered the previous history.
121
+ */
122
+ private requestSessionResume;
96
123
  private connectWebSocket;
97
124
  private waitForReady;
98
125
  private setupPeerEventHandlers;
@@ -101,6 +128,14 @@ export declare class LLMRTCWebClient extends EventEmitter<ClientEvents> {
101
128
  private handlePayload;
102
129
  private handleWebSocketClose;
103
130
  private handleConnectionError;
131
+ /**
132
+ * Terminal failure: release every live resource (most importantly the
133
+ * microphone and camera - a failed client must not keep recording) and
134
+ * report the error.
135
+ */
136
+ private enterFailedState;
137
+ /** Stop microphone and capture tracks and drop the references. */
138
+ private stopMediaTracks;
104
139
  private scheduleReconnect;
105
140
  private attemptReconnect;
106
141
  private startHeartbeat;
@@ -111,6 +146,13 @@ export declare class LLMRTCWebClient extends EventEmitter<ClientEvents> {
111
146
  */
112
147
  shareAudio(stream: MediaStream): Promise<AudioController>;
113
148
  private waitForStableSignaling;
149
+ /**
150
+ * Send a complete audio utterance over the signaling channel.
151
+ * This is the non-WebRTC fallback path (e.g. when the server reports
152
+ * WEBRTC_UNAVAILABLE): the server transcribes the buffer and replies
153
+ * over the WebSocket, streaming TTS via 'ttsChunk'/'tts' events.
154
+ */
155
+ sendAudio(audio: ArrayBuffer, attachments?: AttachmentPayload[]): void;
114
156
  /**
115
157
  * Send vision attachments to include with next speech segment.
116
158
  */
@@ -119,7 +161,8 @@ export declare class LLMRTCWebClient extends EventEmitter<ClientEvents> {
119
161
  shareVideo(stream: MediaStream, intervalMs?: number): FrameCaptureController;
120
162
  shareScreen(stream: MediaStream, intervalMs?: number): FrameCaptureController;
121
163
  /**
122
- * Close the connection.
164
+ * Close the connection and release all media (microphone included).
165
+ * The client can be started again with start().
123
166
  */
124
167
  close(): void;
125
168
  private cleanup;
package/dist/index.js CHANGED
@@ -75,6 +75,17 @@ export class LLMRTCWebClient extends EventEmitter {
75
75
  writable: true,
76
76
  value: void 0
77
77
  });
78
+ /**
79
+ * Incremented on every cleanup. An in-flight reconnect attempt compares
80
+ * its captured epoch after each await; a mismatch means close() (or a
81
+ * newer attempt) superseded it and it must not resurrect the connection.
82
+ */
83
+ Object.defineProperty(this, "connectionEpoch", {
84
+ enumerable: true,
85
+ configurable: true,
86
+ writable: true,
87
+ value: 0
88
+ });
78
89
  /** ICE servers received from server in ready message */
79
90
  Object.defineProperty(this, "serverIceServers", {
80
91
  enumerable: true,
@@ -139,9 +150,15 @@ export class LLMRTCWebClient extends EventEmitter {
139
150
  * Start the connection to the server.
140
151
  */
141
152
  async start() {
142
- if (this.stateMachine.state !== ConnectionState.DISCONNECTED) {
153
+ const restartableStates = [
154
+ ConnectionState.DISCONNECTED,
155
+ ConnectionState.FAILED,
156
+ ConnectionState.CLOSED
157
+ ];
158
+ if (!restartableStates.includes(this.stateMachine.state)) {
143
159
  throw new Error('Client already started or connecting');
144
160
  }
161
+ this.stateMachine.resetRetries();
145
162
  this.stateMachine.transition(ConnectionState.CONNECTING);
146
163
  try {
147
164
  await this.connect();
@@ -152,12 +169,19 @@ export class LLMRTCWebClient extends EventEmitter {
152
169
  throw error;
153
170
  }
154
171
  }
155
- async connect() {
172
+ async connect(resumeSessionId) {
156
173
  // 1. Establish WebSocket
157
174
  await this.connectWebSocket();
158
175
  // 2. Wait for ready message with session ID and ICE servers
159
176
  await this.waitForReady();
160
- // 3. Resolve ICE servers
177
+ // 3. Resume the previous session BEFORE negotiating the peer, so the
178
+ // server binds the recovered conversation to this connection
179
+ // (protocol order: ready -> reconnect -> reconnect-ack -> offer)
180
+ if (resumeSessionId) {
181
+ const recovered = await this.requestSessionResume(resumeSessionId);
182
+ this.emit('reconnected', recovered);
183
+ }
184
+ // 4. Resolve ICE servers
161
185
  // Priority: client config > server-provided > default STUN
162
186
  const iceServers = this.config.iceServers?.length
163
187
  ? this.config.iceServers
@@ -165,16 +189,53 @@ export class LLMRTCWebClient extends EventEmitter {
165
189
  ? this.serverIceServers
166
190
  : DEFAULT_ICE_SERVERS;
167
191
  console.log('[web-client] Using', iceServers.length, 'ICE servers');
168
- // 4. Create peer connection
192
+ // 5. Create peer connection
169
193
  this.peer = new NativePeer({ iceServers, trickle: false }, true);
170
194
  this.setupPeerEventHandlers();
171
- // 5. Create offer (triggers signal event which sends to server)
195
+ // 6. Create offer (triggers signal event which sends to server)
172
196
  await this.peer.createOffer();
173
- // 6. Wait for peer connection to be established
197
+ // 7. Wait for peer connection to be established
174
198
  await this.waitForPeerConnection();
175
- // 7. Start heartbeat
199
+ // 8. Start heartbeat
176
200
  this.startHeartbeat();
177
201
  }
202
+ /**
203
+ * Send a reconnect request and wait for the ack.
204
+ * Resolves with whether the server recovered the previous history.
205
+ */
206
+ requestSessionResume(sessionId) {
207
+ return new Promise((resolve) => {
208
+ const ws = this.ws;
209
+ if (!ws || ws.readyState !== WebSocket.OPEN) {
210
+ resolve(false);
211
+ return;
212
+ }
213
+ const timeout = setTimeout(() => {
214
+ ws.removeEventListener('message', handler);
215
+ console.warn('[web-client] Timed out waiting for reconnect-ack');
216
+ resolve(false);
217
+ }, 5000);
218
+ const handler = (ev) => {
219
+ try {
220
+ const msg = JSON.parse(ev.data);
221
+ if (msg.type === 'reconnect-ack') {
222
+ clearTimeout(timeout);
223
+ ws.removeEventListener('message', handler);
224
+ if (msg.success && msg.sessionId) {
225
+ this.sessionId = msg.sessionId;
226
+ }
227
+ resolve(Boolean(msg.success && msg.historyRecovered));
228
+ }
229
+ }
230
+ catch {
231
+ // Ignore parse errors
232
+ }
233
+ };
234
+ ws.addEventListener('message', handler);
235
+ console.log('[web-client] Requesting session resume:', sessionId);
236
+ ws.send(JSON.stringify({ type: 'reconnect', sessionId }));
237
+ });
238
+ }
178
239
  connectWebSocket() {
179
240
  return new Promise((resolve, reject) => {
180
241
  console.log('[web-client] Connecting to', this.config.signallingUrl);
@@ -202,6 +263,7 @@ export class LLMRTCWebClient extends EventEmitter {
202
263
  waitForReady() {
203
264
  return new Promise((resolve, reject) => {
204
265
  const timeout = setTimeout(() => {
266
+ this.ws?.removeEventListener('message', handler);
205
267
  reject(new Error('Timeout waiting for ready message'));
206
268
  }, 10000);
207
269
  const handler = (ev) => {
@@ -313,7 +375,14 @@ export class LLMRTCWebClient extends EventEmitter {
313
375
  case 'signal':
314
376
  if (this.peer && !this.peer.destroyed) {
315
377
  console.log('[web-client] Received answer signal');
316
- this.peer.signal(msg.signal);
378
+ this.peer.signal(msg.signal).catch((err) => {
379
+ console.error('[web-client] Failed to apply signal:', err);
380
+ this.emit('error', {
381
+ code: 'SIGNALING_ERROR',
382
+ message: err.message,
383
+ recoverable: true
384
+ });
385
+ });
317
386
  }
318
387
  break;
319
388
  case 'pong':
@@ -351,7 +420,22 @@ export class LLMRTCWebClient extends EventEmitter {
351
420
  const msg = JSON.parse(raw);
352
421
  switch (msg.type) {
353
422
  case 'transcript':
354
- this.emit('transcript', msg.text);
423
+ this.emit('transcript', msg.text, msg.isFinal ?? true);
424
+ break;
425
+ case 'assistant-transcript':
426
+ this.emit('assistantTranscript', msg.text, msg.isFinal ?? true);
427
+ break;
428
+ case 'usage':
429
+ this.emit('usage', {
430
+ inputTokens: msg.inputTokens ?? 0,
431
+ outputTokens: msg.outputTokens ?? 0,
432
+ audioInputTokens: msg.audioInputTokens,
433
+ audioOutputTokens: msg.audioOutputTokens,
434
+ cachedTokens: msg.cachedTokens
435
+ });
436
+ break;
437
+ case 'mode-changed':
438
+ this.emit('modeChanged', msg.mode);
355
439
  break;
356
440
  case 'llm-chunk':
357
441
  if (msg.content)
@@ -364,6 +448,11 @@ export class LLMRTCWebClient extends EventEmitter {
364
448
  if (msg.data)
365
449
  this.emit('tts', base64ToArrayBuffer(msg.data), msg.format ?? 'mp3');
366
450
  break;
451
+ case 'tts-chunk':
452
+ // Streaming TTS fallback when no WebRTC audio track exists
453
+ if (msg.data)
454
+ this.emit('ttsChunk', base64ToArrayBuffer(msg.data), msg.format ?? 'pcm', msg.sampleRate);
455
+ break;
367
456
  case 'tts-start':
368
457
  this.emit('ttsStart');
369
458
  break;
@@ -374,10 +463,14 @@ export class LLMRTCWebClient extends EventEmitter {
374
463
  this.emit('ttsCancelled');
375
464
  break;
376
465
  case 'speech-start':
466
+ // Ship the current camera/screen frames now, while the utterance
467
+ // is still in progress - the server snapshots attachments the
468
+ // moment its VAD ends the turn, so sending them on speech-end
469
+ // arrives too late to be included
470
+ this.sendAttachments();
377
471
  this.emit('speechStart');
378
472
  break;
379
473
  case 'speech-end':
380
- this.sendAttachments();
381
474
  this.emit('speechEnd');
382
475
  break;
383
476
  case 'tool-call-start':
@@ -427,33 +520,49 @@ export class LLMRTCWebClient extends EventEmitter {
427
520
  this.scheduleReconnect();
428
521
  }
429
522
  else {
430
- this.stateMachine.transition(ConnectionState.FAILED);
431
- this.emit('error', {
432
- code: 'CONNECTION_ERROR',
433
- message: error.message,
434
- recoverable: false
435
- });
523
+ this.enterFailedState('CONNECTION_ERROR', error.message);
436
524
  }
437
525
  }
526
+ /**
527
+ * Terminal failure: release every live resource (most importantly the
528
+ * microphone and camera - a failed client must not keep recording) and
529
+ * report the error.
530
+ */
531
+ enterFailedState(code, message) {
532
+ this.stopMediaTracks();
533
+ this.cleanup(false);
534
+ this.stateMachine.transition(ConnectionState.FAILED);
535
+ this.emit('error', { code, message, recoverable: false });
536
+ }
537
+ /** Stop microphone and capture tracks and drop the references. */
538
+ stopMediaTracks() {
539
+ this.audioTrack?.stop();
540
+ this.audioStream?.getTracks().forEach((t) => t.stop());
541
+ this.audioTrack = undefined;
542
+ this.audioStream = undefined;
543
+ this.audioSender = undefined;
544
+ this.videoCapture?.stop();
545
+ this.screenCapture?.stop();
546
+ this.videoCapture = undefined;
547
+ this.screenCapture = undefined;
548
+ }
438
549
  scheduleReconnect() {
439
550
  if (!this.stateMachine.reconnectionEnabled) {
440
- this.stateMachine.transition(ConnectionState.FAILED);
551
+ this.enterFailedState('CONNECTION_ERROR', 'Connection lost');
441
552
  return;
442
553
  }
443
554
  // Clear any existing reconnect timeout
444
555
  if (this.reconnectTimeout) {
445
556
  clearTimeout(this.reconnectTimeout);
446
557
  }
558
+ // The old connection's heartbeat must not fire during backoff - it
559
+ // would burn retries against a socket we already know is dead
560
+ this.stopHeartbeat();
447
561
  this.stateMachine.transition(ConnectionState.RECONNECTING);
448
562
  const delay = this.stateMachine.getNextRetryDelay();
449
563
  if (delay === null) {
450
564
  // Max retries exceeded
451
- this.stateMachine.transition(ConnectionState.FAILED);
452
- this.emit('error', {
453
- code: 'RECONNECTION_FAILED',
454
- message: 'Maximum reconnection attempts exceeded',
455
- recoverable: false
456
- });
565
+ this.enterFailedState('RECONNECTION_FAILED', 'Maximum reconnection attempts exceeded');
457
566
  return;
458
567
  }
459
568
  console.log(`[web-client] Reconnecting in ${delay}ms (attempt ${this.stateMachine.retryCount}/${this.stateMachine.maxRetries})`);
@@ -461,31 +570,45 @@ export class LLMRTCWebClient extends EventEmitter {
461
570
  this.reconnectTimeout = setTimeout(() => this.attemptReconnect(), delay);
462
571
  }
463
572
  async attemptReconnect() {
573
+ if (this.stateMachine.state === ConnectionState.CLOSED ||
574
+ this.stateMachine.state === ConnectionState.FAILED) {
575
+ return;
576
+ }
464
577
  // Save old session ID BEFORE cleanup/connect (connect() will set a new sessionId)
465
578
  const oldSessionId = this.sessionId;
466
579
  // Clean up existing connections but keep session ID
467
580
  this.cleanup(false);
581
+ const epoch = this.connectionEpoch;
468
582
  this.stateMachine.transition(ConnectionState.CONNECTING);
469
583
  try {
470
- await this.connect();
471
- // Send reconnect message with OLD session ID to recover the previous session
472
- // Note: connect() sets this.sessionId to a new value from the server's ready message,
473
- // so we must use oldSessionId here to request session recovery
474
- if (oldSessionId) {
475
- console.log('[web-client] Sending reconnect request for session:', oldSessionId);
476
- this.ws?.send(JSON.stringify({
477
- type: 'reconnect',
478
- sessionId: oldSessionId
479
- }));
584
+ // connect() resumes the old session between ready and the offer, so
585
+ // the recovered history is bound before any turn can run
586
+ await this.connect(oldSessionId);
587
+ // close() may have run while we were connecting; don't resurrect a
588
+ // connection the user has already hung up
589
+ if (this.connectionEpoch !== epoch) {
590
+ console.log('[web-client] Reconnect superseded, tearing down');
591
+ this.peer?.destroy();
592
+ this.peer = null;
593
+ if (this.ws) {
594
+ this.ws.onclose = null;
595
+ this.ws.close();
596
+ this.ws = null;
597
+ }
598
+ this.stopHeartbeat();
599
+ return;
480
600
  }
481
601
  // Re-add audio track if we had one
482
- if (this.audioStream && this.audioTrack) {
602
+ if (this.audioStream && this.audioTrack && this.audioTrack.readyState === 'live') {
483
603
  console.log('[web-client] Re-adding audio track after reconnect');
484
604
  this.audioSender = this.peer?.addTrack(this.audioTrack, this.audioStream);
485
605
  }
486
606
  this.stateMachine.transition(ConnectionState.CONNECTED);
487
607
  }
488
608
  catch (error) {
609
+ if (this.connectionEpoch !== epoch) {
610
+ return;
611
+ }
489
612
  console.error('[web-client] Reconnect attempt failed:', error);
490
613
  this.scheduleReconnect();
491
614
  }
@@ -498,7 +621,8 @@ export class LLMRTCWebClient extends EventEmitter {
498
621
  this.heartbeatTimeout = setTimeout(() => {
499
622
  this.missedHeartbeats++;
500
623
  console.warn(`[web-client] Missed heartbeat (${this.missedHeartbeats}/${MAX_MISSED_HEARTBEATS})`);
501
- if (this.missedHeartbeats >= MAX_MISSED_HEARTBEATS) {
624
+ if (this.missedHeartbeats >= MAX_MISSED_HEARTBEATS &&
625
+ this.stateMachine.state === ConnectionState.CONNECTED) {
502
626
  console.warn('[web-client] Too many missed heartbeats, reconnecting');
503
627
  this.scheduleReconnect();
504
628
  }
@@ -525,43 +649,77 @@ export class LLMRTCWebClient extends EventEmitter {
525
649
  if (!this.peer?.connected) {
526
650
  throw new Error('Peer not connected');
527
651
  }
528
- this.audioStream = stream;
529
- this.audioTrack = stream.getAudioTracks()[0];
530
- if (!this.audioTrack) {
652
+ const track = stream.getAudioTracks()[0];
653
+ if (!track) {
531
654
  throw new Error('No audio track in stream');
532
655
  }
656
+ // Sharing again replaces the previous share; two live mic tracks would
657
+ // confuse the server's single-track VAD pipeline
658
+ if (this.audioSender && this.peer) {
659
+ console.log('[web-client] Replacing existing audio share');
660
+ this.peer.removeTrack(this.audioSender);
661
+ this.audioTrack?.stop();
662
+ }
663
+ this.audioStream = stream;
664
+ this.audioTrack = track;
533
665
  console.log('[web-client] Adding audio track to peer connection');
534
- this.audioSender = this.peer.addTrack(this.audioTrack, stream);
666
+ const sender = this.peer.addTrack(track, stream);
667
+ this.audioSender = sender;
535
668
  // Wait for signaling to stabilize
536
669
  await this.waitForStableSignaling();
537
670
  console.log('[web-client] Audio track added - VAD handled server-side');
538
671
  return {
539
672
  stop: async () => {
540
673
  console.log('[web-client] Stopping audio sharing');
541
- if (this.audioSender && this.peer) {
542
- this.peer.removeTrack(this.audioSender);
674
+ // Only touch client state if this share is still the active one
675
+ if (this.audioSender === sender && this.peer) {
676
+ this.peer.removeTrack(sender);
543
677
  this.audioSender = undefined;
678
+ this.audioTrack = undefined;
679
+ this.audioStream = undefined;
544
680
  }
545
- this.audioTrack?.stop();
681
+ track.stop();
546
682
  stream.getTracks().forEach((t) => t.stop());
547
- this.audioTrack = undefined;
548
- this.audioStream = undefined;
549
683
  }
550
684
  };
551
685
  }
552
- waitForStableSignaling() {
553
- return new Promise((resolve) => {
686
+ waitForStableSignaling(timeoutMs = 10000) {
687
+ return new Promise((resolve, reject) => {
688
+ const deadline = Date.now() + timeoutMs;
554
689
  const checkState = () => {
555
- if (this.peer?.signalingState === 'stable') {
690
+ if (!this.peer || this.peer.destroyed) {
691
+ reject(new Error('Peer closed while waiting for stable signaling'));
692
+ return;
693
+ }
694
+ if (this.peer.signalingState === 'stable') {
556
695
  resolve();
696
+ return;
557
697
  }
558
- else {
559
- setTimeout(checkState, 100);
698
+ if (Date.now() >= deadline) {
699
+ reject(new Error('Timed out waiting for stable signaling'));
700
+ return;
560
701
  }
702
+ setTimeout(checkState, 100);
561
703
  };
562
704
  setTimeout(checkState, 100);
563
705
  });
564
706
  }
707
+ /**
708
+ * Send a complete audio utterance over the signaling channel.
709
+ * This is the non-WebRTC fallback path (e.g. when the server reports
710
+ * WEBRTC_UNAVAILABLE): the server transcribes the buffer and replies
711
+ * over the WebSocket, streaming TTS via 'ttsChunk'/'tts' events.
712
+ */
713
+ sendAudio(audio, attachments) {
714
+ if (this.ws?.readyState !== WebSocket.OPEN) {
715
+ throw new Error('Signaling channel not open');
716
+ }
717
+ this.ws.send(JSON.stringify({
718
+ type: 'audio',
719
+ data: arrayBufferToBase64(audio),
720
+ attachments: attachments ?? this.gatherAttachments()
721
+ }));
722
+ }
565
723
  /**
566
724
  * Send vision attachments to include with next speech segment.
567
725
  */
@@ -594,20 +752,22 @@ export class LLMRTCWebClient extends EventEmitter {
594
752
  return ctrl;
595
753
  }
596
754
  /**
597
- * Close the connection.
755
+ * Close the connection and release all media (microphone included).
756
+ * The client can be started again with start().
598
757
  */
599
758
  close() {
600
759
  this.stateMachine.transition(ConnectionState.CLOSED);
760
+ this.stopMediaTracks();
601
761
  this.cleanup(true);
602
762
  }
603
763
  cleanup(fullCleanup) {
764
+ // Invalidate any in-flight reconnect attempt
765
+ this.connectionEpoch++;
604
766
  this.stopHeartbeat();
605
767
  if (this.reconnectTimeout) {
606
768
  clearTimeout(this.reconnectTimeout);
607
769
  this.reconnectTimeout = undefined;
608
770
  }
609
- this.videoCapture?.stop();
610
- this.screenCapture?.stop();
611
771
  this.peer?.destroy();
612
772
  this.peer = null;
613
773
  if (this.ws) {
@@ -616,16 +776,30 @@ export class LLMRTCWebClient extends EventEmitter {
616
776
  this.ws = null;
617
777
  }
618
778
  if (fullCleanup) {
779
+ // Frame captures are local (frames travel over the data channel), so
780
+ // they survive reconnects; they only stop on close()/failure
781
+ this.videoCapture?.stop();
782
+ this.screenCapture?.stop();
783
+ this.videoCapture = undefined;
784
+ this.screenCapture = undefined;
619
785
  this.sessionId = null;
620
786
  this.serverIceServers = null;
621
787
  this.audioTrack = undefined;
622
788
  this.audioStream = undefined;
623
789
  this.audioSender = undefined;
624
- this.stateMachine.reset();
625
790
  }
626
791
  }
627
792
  }
628
793
  // Helper functions
794
+ function arrayBufferToBase64(buffer) {
795
+ const bytes = new Uint8Array(buffer);
796
+ let binary = '';
797
+ const chunkSize = 0x8000;
798
+ for (let i = 0; i < bytes.length; i += chunkSize) {
799
+ binary += String.fromCharCode(...bytes.subarray(i, i + chunkSize));
800
+ }
801
+ return btoa(binary);
802
+ }
629
803
  function base64ToArrayBuffer(base64) {
630
804
  const binary = atob(base64);
631
805
  const bytes = new Uint8Array(binary.length);
@@ -636,15 +810,22 @@ function base64ToArrayBuffer(base64) {
636
810
  }
637
811
  export async function recordOnce(durationMs = 4000) {
638
812
  const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
639
- const recorder = new MediaRecorder(stream, { mimeType: 'audio/webm' });
813
+ // Pick a container the browser actually supports (Safari records mp4/aac,
814
+ // Chromium and Firefox record webm)
815
+ const mimeType = ['audio/webm', 'audio/mp4', 'audio/ogg'].find((t) => typeof MediaRecorder.isTypeSupported === 'function' ? MediaRecorder.isTypeSupported(t) : true);
816
+ const recorder = new MediaRecorder(stream, mimeType ? { mimeType } : undefined);
640
817
  const chunks = [];
641
- return new Promise((resolve) => {
818
+ return new Promise((resolve, reject) => {
642
819
  recorder.ondataavailable = (e) => {
643
820
  if (e.data.size > 0)
644
821
  chunks.push(e.data);
645
822
  };
823
+ recorder.onerror = (e) => {
824
+ stream.getTracks().forEach((t) => t.stop());
825
+ reject(e.error ?? new Error('Recording failed'));
826
+ };
646
827
  recorder.onstop = async () => {
647
- const blob = new Blob(chunks, { type: 'audio/webm' });
828
+ const blob = new Blob(chunks, { type: recorder.mimeType || 'audio/webm' });
648
829
  const buf = await blob.arrayBuffer();
649
830
  stream.getTracks().forEach((t) => t.stop());
650
831
  resolve(buf);
@@ -660,49 +841,98 @@ export async function captureScreenFrame() {
660
841
  track.stop();
661
842
  return image;
662
843
  }
663
- async function grabFrame(track) {
664
- const capture = new window.ImageCapture(track);
665
- const bitmap = await capture.grabFrame();
844
+ function createFrameGrabber(stream) {
845
+ const track = stream.getVideoTracks()[0];
846
+ if (!track) {
847
+ throw new Error('No video track in stream');
848
+ }
666
849
  const canvas = document.createElement('canvas');
667
- canvas.width = bitmap.width;
668
- canvas.height = bitmap.height;
669
850
  const ctx = canvas.getContext('2d');
670
- if (!ctx)
851
+ if (!ctx) {
671
852
  throw new Error('canvas context missing');
672
- ctx.drawImage(bitmap, 0, 0);
673
- const dataUrl = canvas.toDataURL('image/jpeg', 0.6);
674
- return dataUrl;
853
+ }
854
+ const ImageCaptureCtor = window.ImageCapture;
855
+ if (ImageCaptureCtor) {
856
+ const capture = new ImageCaptureCtor(track);
857
+ return {
858
+ grab: async () => {
859
+ const bitmap = await capture.grabFrame();
860
+ canvas.width = bitmap.width;
861
+ canvas.height = bitmap.height;
862
+ ctx.drawImage(bitmap, 0, 0);
863
+ return canvas.toDataURL('image/jpeg', 0.6);
864
+ },
865
+ dispose: () => {
866
+ // Nothing to release
867
+ }
868
+ };
869
+ }
870
+ // Fallback: hidden video element
871
+ const video = document.createElement('video');
872
+ video.muted = true;
873
+ video.playsInline = true;
874
+ video.srcObject = stream;
875
+ const playing = video.play().catch(() => {
876
+ // Autoplay of a muted, detached video element is permitted everywhere;
877
+ // failures surface on grab() as zero dimensions
878
+ });
879
+ return {
880
+ grab: async () => {
881
+ await playing;
882
+ if (!video.videoWidth || !video.videoHeight) {
883
+ throw new Error('Video frame not ready');
884
+ }
885
+ canvas.width = video.videoWidth;
886
+ canvas.height = video.videoHeight;
887
+ ctx.drawImage(video, 0, 0);
888
+ return canvas.toDataURL('image/jpeg', 0.6);
889
+ },
890
+ dispose: () => {
891
+ video.pause();
892
+ video.srcObject = null;
893
+ }
894
+ };
895
+ }
896
+ async function grabFrame(track) {
897
+ const grabber = createFrameGrabber(new MediaStream([track]));
898
+ try {
899
+ return await grabber.grab();
900
+ }
901
+ finally {
902
+ grabber.dispose();
903
+ }
675
904
  }
676
905
  function startFrameCapture(stream, intervalMs) {
677
- const track = stream.getVideoTracks()[0];
678
906
  let stopped = false;
679
- const canvas = document.createElement('canvas');
680
- const ctx = canvas.getContext('2d');
681
907
  let lastFrame = null;
908
+ let consecutiveFailures = 0;
909
+ const grabber = createFrameGrabber(stream);
682
910
  const tick = async () => {
683
911
  if (stopped)
684
912
  return;
685
913
  try {
686
- const capture = new window.ImageCapture(track);
687
- const bitmap = await capture.grabFrame();
688
- canvas.width = bitmap.width;
689
- canvas.height = bitmap.height;
690
- ctx?.drawImage(bitmap, 0, 0);
691
- lastFrame = canvas.toDataURL('image/jpeg', 0.6);
914
+ lastFrame = await grabber.grab();
915
+ consecutiveFailures = 0;
692
916
  }
693
917
  catch (err) {
694
- // ignore frame errors
918
+ consecutiveFailures++;
919
+ if (consecutiveFailures === 5) {
920
+ console.warn('[web-client] Frame capture failing repeatedly; no frames will be attached:', err);
921
+ }
922
+ }
923
+ if (!stopped) {
924
+ timer = window.setTimeout(tick, intervalMs);
695
925
  }
696
- timer = window.setTimeout(tick, intervalMs);
697
926
  };
698
927
  let timer = window.setTimeout(tick, intervalMs);
699
928
  return {
700
929
  stop: () => {
701
930
  stopped = true;
702
931
  window.clearTimeout(timer);
932
+ grabber.dispose();
703
933
  stream.getTracks().forEach((t) => t.stop());
704
934
  },
705
- getLastFrame: () => lastFrame
935
+ getLastFrame: () => (stopped ? null : lastFrame)
706
936
  };
707
937
  }
708
938
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACL,sBAAsB,EACtB,eAAe,EAEhB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,4BAA4B;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAsEvD,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAEnE,MAAM,qBAAqB,GAAG,KAAK,CAAC;AACpC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AACnC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEhC;;;GAGG;AACH,MAAM,mBAAmB,GAAmB;IAC1C,EAAE,IAAI,EAAE,yBAAyB,EAAE;CACpC,CAAC;AAEF,MAAM,OAAO,eAAgB,SAAQ,YAA0B;IAoB7D,YAA6B,MAAuB;QAClD,KAAK,EAAE,CAAC;QADE;;;;mBAAiB,MAAM;WAAiB;QAnB5C;;;;mBAAuB,IAAI;WAAC;QAC5B;;;;mBAA0B,IAAI;WAAC;QAC/B;;;;;WAAqC;QACrC;;;;mBAA2B,IAAI;WAAC;QAChC;;;;;WAAmD;QACnD;;;;;WAAiD;QACjD;;;;mBAA2B,CAAC;WAAC;QAC7B;;;;;WAAiD;QAEzD,wDAAwD;QAChD;;;;mBAA0C,IAAI;WAAC;QAEvD,cAAc;QACN;;;;;WAA8B;QAC9B;;;;;WAA0B;QAC1B;;;;;WAA2B;QAC3B;;;;;WAAsC;QACtC;;;;;WAAuC;QAK7C,kCAAkC;QAClC,MAAM,kBAAkB,GAAgC;YACtD,OAAO,EAAE,IAAI;YACb,GAAG,MAAM,CAAC,YAAY;SACvB,CAAC;QAEF,IAAI,CAAC,YAAY,GAAG,IAAI,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;QAEnE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;YAC7C,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,KAAK,eAAe,CAAC,YAAY,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAEzD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACrB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,qBAAqB,CAAC,KAAc,CAAC,CAAC;YAC3C,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,OAAO;QACnB,yBAAyB;QACzB,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE9B,4DAA4D;QAC5D,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAE1B,yBAAyB;QACzB,2DAA2D;QAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM;YAC/C,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU;YACxB,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM;gBAC7B,CAAC,CAAC,IAAI,CAAC,gBAAgB;gBACvB,CAAC,CAAC,mBAAmB,CAAC;QAE1B,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAEpE,4BAA4B;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,UAAU,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;QAEjE,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAE9B,gEAAgE;QAChE,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAE9B,gDAAgD;QAChD,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAEnC,qBAAqB;QACrB,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAEO,gBAAgB;QACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACrE,IAAI,CAAC,EAAE,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAEnD,MAAM,MAAM,GAAG,GAAG,EAAE;gBAClB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;gBAChD,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YAEF,MAAM,OAAO,GAAG,CAAC,CAAQ,EAAE,EAAE;gBAC3B,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,CAAC,CAAC,CAAC;gBAClD,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;YACnD,CAAC,CAAC;YAEF,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,IAAI,CAAC,EAAE,EAAE,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC7C,IAAI,CAAC,EAAE,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACjD,CAAC,CAAC;YAEF,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACzC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC3C,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YACjE,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,YAAY;QAClB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,MAAM,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;YACzD,CAAC,EAAE,KAAK,CAAC,CAAC;YAEV,MAAM,OAAO,GAAG,CAAC,EAAgB,EAAE,EAAE;gBACnC,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;oBAChC,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBACzB,YAAY,CAAC,OAAO,CAAC,CAAC;wBACtB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,EAAE,CAAC;wBAExB,oCAAoC;wBACpC,IAAI,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;4BAC3B,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,UAAU,CAAC;4BACvC,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;wBACzF,CAAC;wBAED,yBAAyB;wBACzB,MAAM,aAAa,GAAG,GAAG,CAAC,eAAe,IAAI,CAAC,CAAC;wBAC/C,IAAI,aAAa,KAAK,gBAAgB,EAAE,CAAC;4BACvC,OAAO,CAAC,IAAI,CACV,kDAAkD,gBAAgB,YAAY,aAAa,EAAE,CAC9F,CAAC;wBACJ,CAAC;wBAED,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,CAAC,SAAS,EAAE,mBAAmB,EAAE,aAAa,CAAC,CAAC;wBAC5F,IAAI,CAAC,EAAE,EAAE,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;wBACjD,OAAO,EAAE,CAAC;oBACZ,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,sBAAsB;gBACxB,CAAC;YACH,CAAC,CAAC;YAEF,IAAI,CAAC,EAAE,EAAE,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,sBAAsB;QAC5B,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO;QAEvB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YAChC,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;YACjD,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC5B,MAAM,GAAG,GACP,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAmB,CAAC,CAAC;YAClF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YAC3B,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACzB,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;gBAC1D,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC5B,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACtC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;gBACjE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAChC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,KAAK,EAAE,EAAE;YAC9C,OAAO,CAAC,GAAG,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;YAC7D,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;gBACnD,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;oBAC1D,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,qBAAqB;QAC3B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;gBACzB,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;YAC3D,CAAC,EAAE,KAAK,CAAC,CAAC;YAEV,MAAM,SAAS,GAAG,GAAG,EAAE;gBACrB,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YAEF,MAAM,OAAO,GAAG,CAAC,GAAU,EAAE,EAAE;gBAC7B,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC;YAEF,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;gBACrC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACnC,CAAC,CAAC;YAEF,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,sBAAsB,CAAC,GAAW;QACxC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YACxD,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAO;YAE5B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAW,CAAC;YAE/B,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;gBACjB,KAAK,QAAQ;oBACX,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;wBACtC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;wBACnD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAC/B,CAAC;oBACD,MAAM;gBAER,KAAK,MAAM;oBACT,kCAAkC;oBAClC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;oBAC1B,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBAC1B,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;wBACpC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;oBACpC,CAAC;oBACD,MAAM;gBAER,KAAK,eAAe;oBAClB,OAAO,CAAC,GAAG,CACT,sCAAsC,EACtC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,aAAa,EAC1D,YAAY,EAAE,GAAG,CAAC,SAAS,CAC5B,CAAC;oBACF,uDAAuD;oBACvD,qFAAqF;oBACrF,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;wBAClB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;oBACjC,CAAC;oBACD,MAAM;gBAER;oBACE,+EAA+E;oBAC/E,gFAAgF;oBAChF,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;wBAC1B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;oBAC1B,CAAC;gBACD,wEAAwE;gBACxE,yDAAyD;YAC7D,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,GAAG,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,GAAW;QAC/B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE5B,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;gBACjB,KAAK,YAAY;oBACf,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;oBAClC,MAAM;gBACR,KAAK,WAAW;oBACd,IAAI,GAAG,CAAC,OAAO;wBAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;oBACpD,MAAM;gBACR,KAAK,KAAK;oBACR,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;oBAC3B,MAAM;gBACR,KAAK,KAAK;oBACR,IAAI,GAAG,CAAC,IAAI;wBACV,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;oBACvE,MAAM;gBACR,KAAK,WAAW;oBACd,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBACtB,MAAM;gBACR,KAAK,cAAc;oBACjB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBACzB,MAAM;gBACR,KAAK,eAAe;oBAClB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;oBAC1B,MAAM;gBACR,KAAK,cAAc;oBACjB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBACzB,MAAM;gBACR,KAAK,YAAY;oBACf,IAAI,CAAC,eAAe,EAAE,CAAC;oBACvB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBACvB,MAAM;gBACR,KAAK,iBAAiB;oBACpB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;wBACzB,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE;qBAC/B,CAAC,CAAC;oBACH,MAAM;gBACR,KAAK,eAAe;oBAClB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;wBACvB,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,KAAK,EAAE,GAAG,CAAC,KAAK;wBAChB,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,CAAC;qBAChC,CAAC,CAAC;oBACH,MAAM;gBACR,KAAK,cAAc;oBACjB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;wBACvB,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,EAAE,EAAE,GAAG,CAAC,EAAE;wBACV,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE;qBACzB,CAAC,CAAC;oBACH,MAAM;gBACR,KAAK,OAAO;oBACV,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;wBACjB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,cAAc;wBAChC,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,eAAe;wBACvC,WAAW,EAAE,KAAK;qBACnB,CAAC,CAAC;oBACH,MAAM;YACV,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAEO,oBAAoB;QAC1B,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC7C,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;YAC1D,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,qBAAqB,CAAC,KAAY;QACxC,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAE/D,IAAI,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,CAAC;YAC1C,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,WAAW,EAAE,KAAK;aACnB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,CAAC;YAC3C,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QAED,uCAAuC;QACvC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC;QAEpD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,uBAAuB;YACvB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACjB,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE,wCAAwC;gBACjD,WAAW,EAAE,KAAK;aACnB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CACT,gCAAgC,KAAK,eAAe,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,CACpH,CAAC;QAEF,IAAI,CAAC,IAAI,CACP,cAAc,EACd,IAAI,CAAC,YAAY,CAAC,UAAU,EAC5B,IAAI,CAAC,YAAY,CAAC,UAAU,CAC7B,CAAC;QAEF,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,KAAK,CAAC,CAAC;IAC3E,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,kFAAkF;QAClF,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;QAEpC,oDAAoD;QACpD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAEpB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAEzD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YAErB,6EAA6E;YAC7E,sFAAsF;YACtF,+DAA+D;YAC/D,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,qDAAqD,EAAE,YAAY,CAAC,CAAC;gBACjF,IAAI,CAAC,EAAE,EAAE,IAAI,CACX,IAAI,CAAC,SAAS,CAAC;oBACb,IAAI,EAAE,WAAW;oBACjB,SAAS,EAAE,YAAY;iBACxB,CAAC,CACH,CAAC;YACJ,CAAC;YAED,mCAAmC;YACnC,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;gBAClE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC5E,CAAC;YAED,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;YAC/D,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;YACxC,IAAI,IAAI,CAAC,EAAE,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;gBAC3C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;gBAEtE,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,GAAG,EAAE;oBACtC,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACxB,OAAO,CAAC,IAAI,CACV,kCAAkC,IAAI,CAAC,gBAAgB,IAAI,qBAAqB,GAAG,CACpF,CAAC;oBAEF,IAAI,IAAI,CAAC,gBAAgB,IAAI,qBAAqB,EAAE,CAAC;wBACnD,OAAO,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;wBACtE,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBAC3B,CAAC;gBACH,CAAC,EAAE,oBAAoB,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC,EAAE,qBAAqB,CAAC,CAAC;IAC5B,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACtC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACrC,CAAC;QACD,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACpC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,MAAmB;QAClC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;QAE7C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAE/D,kCAAkC;QAClC,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAEpC,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;QAExE,OAAO;YACL,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;gBACnD,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBAClC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBACxC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;gBAC/B,CAAC;gBACD,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;gBACxB,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC5C,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;gBAC5B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;YAC/B,CAAC;SACF,CAAC;IACJ,CAAC;IAEO,sBAAsB;QAC5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,UAAU,GAAG,GAAG,EAAE;gBACtB,IAAI,IAAI,CAAC,IAAI,EAAE,cAAc,KAAK,QAAQ,EAAE,CAAC;oBAC3C,OAAO,EAAE,CAAC;gBACZ,CAAC;qBAAM,CAAC;oBACN,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC,CAAC;YACF,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,eAAe;QACb,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7C,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;YACnD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAEO,iBAAiB;QACvB,MAAM,WAAW,GAAwB,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,YAAY,EAAE,CAAC;QAClD,IAAI,GAAG;YACL,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,CAAC;QAC/E,IAAI,MAAM;YACR,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,CAAC;QAClF,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,UAAU,CAAC,MAAmB,EAAE,UAAU,GAAG,IAAI;QAC/C,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW,CAAC,MAAmB,EAAE,UAAU,GAAG,IAAI;QAChD,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAEO,OAAO,CAAC,WAAoB;QAClC,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACpC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;QAE3B,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,+BAA+B;YACvD,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QACjB,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAC5B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;YAC7B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;YAC7B,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;CACF;AAED,mBAAmB;AAEnB,SAAS,mBAAmB,CAAC,MAAc;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAU,GAAG,IAAI;IAChD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;IACvE,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,QAAQ,CAAC,eAAe,GAAG,CAAC,CAAC,EAAE,EAAE;YAC/B,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC,CAAC;QACF,QAAQ,CAAC,MAAM,GAAG,KAAK,IAAI,EAAE;YAC3B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YACtD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,CAAC,CAAC;QACF,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjB,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7E,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;IACrC,KAAK,CAAC,IAAI,EAAE,CAAC;IACb,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,KAAuB;IAC9C,MAAM,OAAO,GAAQ,IAAK,MAAc,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC5B,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACpD,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IACpD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,iBAAiB,CACxB,MAAmB,EACnB,UAAkB;IAElB,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,SAAS,GAAkB,IAAI,CAAC;IAEpC,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;QACtB,IAAI,OAAO;YAAE,OAAO;QACpB,IAAI,CAAC;YACH,MAAM,OAAO,GAAQ,IAAK,MAAc,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC7D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;YACzC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAC5B,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC9B,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,sBAAsB;QACxB,CAAC;QACD,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC9C,CAAC,CAAC;IAEF,IAAI,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAEhD,OAAO;QACL,IAAI,EAAE,GAAG,EAAE;YACT,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC3B,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9C,CAAC;QACD,YAAY,EAAE,GAAG,EAAE,CAAC,SAAS;KAC9B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@llmrtc/llmrtc-web-client",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "description": "Browser client SDK for @llmrtc/LLMRTC",
5
5
  "homepage": "https://www.llmrtc.org",
6
6
  "license": "Apache-2.0",
@@ -9,9 +9,11 @@
9
9
  "types": "dist/index.d.ts",
10
10
  "exports": {
11
11
  ".": {
12
+ "types": "./dist/index.d.ts",
12
13
  "import": "./dist/index.js",
13
- "types": "./dist/index.d.ts"
14
- }
14
+ "default": "./dist/index.js"
15
+ },
16
+ "./package.json": "./package.json"
15
17
  },
16
18
  "repository": {
17
19
  "type": "git",
@@ -28,7 +30,9 @@
28
30
  "files": [
29
31
  "dist",
30
32
  "README.md",
31
- "LICENSE"
33
+ "LICENSE",
34
+ "NOTICE",
35
+ "CHANGELOG.md"
32
36
  ],
33
37
  "scripts": {
34
38
  "build": "tsc -b",
@@ -36,8 +40,12 @@
36
40
  "prepublishOnly": "npm run build"
37
41
  },
38
42
  "dependencies": {
39
- "@llmrtc/llmrtc-core": "^1.0.0",
43
+ "@llmrtc/llmrtc-core": "^1.3.0",
40
44
  "eventemitter3": "^5.0.1",
41
45
  "zod": "^3.23.8"
46
+ },
47
+ "sideEffects": false,
48
+ "engines": {
49
+ "node": ">=20"
42
50
  }
43
51
  }