@memberjunction/ng-conversations 6.2.0-edge.4 → 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 (95) hide show
  1. package/README.md +29 -0
  2. package/dist/lib/components/conversation/conversation-agent-picker.component.d.ts +1 -1
  3. package/dist/lib/components/conversation/conversation-agent-picker.component.js +3 -3
  4. package/dist/lib/components/conversation/conversation-agent-picker.component.js.map +1 -1
  5. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +75 -14
  6. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
  7. package/dist/lib/components/conversation/conversation-chat-area.component.js +711 -359
  8. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
  9. package/dist/lib/components/message/message-input.component.js +9 -9
  10. package/dist/lib/components/message/message-input.component.js.map +1 -1
  11. package/dist/lib/components/message/message-item.component.d.ts +137 -16
  12. package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
  13. package/dist/lib/components/message/message-item.component.js +1361 -296
  14. package/dist/lib/components/message/message-item.component.js.map +1 -1
  15. package/dist/lib/components/message/message-list.component.d.ts +20 -2
  16. package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
  17. package/dist/lib/components/message/message-list.component.js +28 -4
  18. package/dist/lib/components/message/message-list.component.js.map +1 -1
  19. package/dist/lib/components/sidebar/routines-section.component.js +1 -1
  20. package/dist/lib/components/sidebar/routines-section.component.js.map +1 -1
  21. package/dist/lib/components/task/tasks-full-view.component.d.ts +152 -31
  22. package/dist/lib/components/task/tasks-full-view.component.d.ts.map +1 -1
  23. package/dist/lib/components/task/tasks-full-view.component.js +2227 -214
  24. package/dist/lib/components/task/tasks-full-view.component.js.map +1 -1
  25. package/dist/lib/components/tasks/tasks-dropdown.component.js +4 -4
  26. package/dist/lib/components/tasks/tasks-dropdown.component.js.map +1 -1
  27. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +11 -1
  28. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
  29. package/dist/lib/components/workspace/conversation-workspace.component.js +25 -28
  30. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
  31. package/dist/lib/services/agent-state.service.d.ts.map +1 -1
  32. package/dist/lib/services/agent-state.service.js +8 -8
  33. package/dist/lib/services/agent-state.service.js.map +1 -1
  34. package/dist/lib/services/browser-realtime-media-host.d.ts +7 -7
  35. package/dist/lib/services/browser-realtime-media-host.js +8 -78
  36. package/dist/lib/services/browser-realtime-media-host.js.map +1 -1
  37. package/dist/lib/services/conversation-agent.service.d.ts +16 -8
  38. package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
  39. package/dist/lib/services/conversation-agent.service.js +57 -27
  40. package/dist/lib/services/conversation-agent.service.js.map +1 -1
  41. package/dist/lib/services/conversation-naming.d.ts.map +1 -1
  42. package/dist/lib/services/conversation-naming.js +9 -2
  43. package/dist/lib/services/conversation-naming.js.map +1 -1
  44. package/dist/lib/services/conversation-tasks-filter.d.ts +15 -0
  45. package/dist/lib/services/conversation-tasks-filter.d.ts.map +1 -0
  46. package/dist/lib/services/conversation-tasks-filter.js +69 -0
  47. package/dist/lib/services/conversation-tasks-filter.js.map +1 -0
  48. package/dist/lib/services/realtime-audio-recorder.d.ts +94 -86
  49. package/dist/lib/services/realtime-audio-recorder.d.ts.map +1 -1
  50. package/dist/lib/services/realtime-audio-recorder.js +222 -195
  51. package/dist/lib/services/realtime-audio-recorder.js.map +1 -1
  52. package/dist/lib/services/realtime-session.service.d.ts +30 -2
  53. package/dist/lib/services/realtime-session.service.d.ts.map +1 -1
  54. package/dist/lib/services/realtime-session.service.js +33 -6
  55. package/dist/lib/services/realtime-session.service.js.map +1 -1
  56. package/dist/lib/services/recording/libopus-wasm-binary.d.ts +3 -0
  57. package/dist/lib/services/recording/libopus-wasm-binary.d.ts.map +1 -0
  58. package/dist/lib/services/recording/libopus-wasm-binary.js +489 -0
  59. package/dist/lib/services/recording/libopus-wasm-binary.js.map +1 -0
  60. package/dist/lib/services/recording/libopus-worker-source.d.ts +48 -0
  61. package/dist/lib/services/recording/libopus-worker-source.d.ts.map +1 -0
  62. package/dist/lib/services/recording/libopus-worker-source.js +170 -0
  63. package/dist/lib/services/recording/libopus-worker-source.js.map +1 -0
  64. package/dist/lib/services/recording/linear-resampler.d.ts +45 -0
  65. package/dist/lib/services/recording/linear-resampler.d.ts.map +1 -0
  66. package/dist/lib/services/recording/linear-resampler.js +85 -0
  67. package/dist/lib/services/recording/linear-resampler.js.map +1 -0
  68. package/dist/lib/services/recording/opus-packet-encoder.d.ts +50 -0
  69. package/dist/lib/services/recording/opus-packet-encoder.d.ts.map +1 -0
  70. package/dist/lib/services/recording/opus-packet-encoder.js +41 -0
  71. package/dist/lib/services/recording/opus-packet-encoder.js.map +1 -0
  72. package/dist/lib/services/recording/wasm-opus-encoder.d.ts +86 -0
  73. package/dist/lib/services/recording/wasm-opus-encoder.d.ts.map +1 -0
  74. package/dist/lib/services/recording/wasm-opus-encoder.js +232 -0
  75. package/dist/lib/services/recording/wasm-opus-encoder.js.map +1 -0
  76. package/dist/lib/services/recording/webcodecs-opus-encoder.d.ts +39 -0
  77. package/dist/lib/services/recording/webcodecs-opus-encoder.d.ts.map +1 -0
  78. package/dist/lib/services/recording/webcodecs-opus-encoder.js +101 -0
  79. package/dist/lib/services/recording/webcodecs-opus-encoder.js.map +1 -0
  80. package/dist/lib/services/search.service.d.ts.map +1 -1
  81. package/dist/lib/services/search.service.js +3 -16
  82. package/dist/lib/services/search.service.js.map +1 -1
  83. package/dist/lib/utils/distinct-artifacts.d.ts +9 -3
  84. package/dist/lib/utils/distinct-artifacts.d.ts.map +1 -1
  85. package/dist/lib/utils/distinct-artifacts.js +24 -5
  86. package/dist/lib/utils/distinct-artifacts.js.map +1 -1
  87. package/package.json +36 -36
  88. package/dist/lib/services/browser-recording-unload-guard.d.ts +0 -30
  89. package/dist/lib/services/browser-recording-unload-guard.d.ts.map +0 -1
  90. package/dist/lib/services/browser-recording-unload-guard.js +0 -43
  91. package/dist/lib/services/browser-recording-unload-guard.js.map +0 -1
  92. package/dist/lib/services/realtime-pcm-wav.d.ts +0 -79
  93. package/dist/lib/services/realtime-pcm-wav.d.ts.map +0 -1
  94. package/dist/lib/services/realtime-pcm-wav.js +0 -213
  95. package/dist/lib/services/realtime-pcm-wav.js.map +0 -1
@@ -1,53 +1,53 @@
1
+ import { IRealtimeSessionRecorder } from '@memberjunction/realtime-runtime';
2
+ import { IOpusPacketEncoder } from './recording/opus-packet-encoder';
1
3
  /**
2
- * Browser-side audio recorder for a CLIENT-DIRECT realtime voice session.
4
+ * Browser-side audio recorder for a CLIENT-DIRECT realtime voice session, implementing the
5
+ * runtime's {@link IRealtimeSessionRecorder} contract directly.
3
6
  *
4
- * Mixes the user's microphone stream with the agent's remote-audio stream (every driver exposes
5
- * one via `GetRemoteMediaStream()`: WebRTC drivers publish their remote track, PCM drivers —
6
- * Gemini, ElevenLabs, AssemblyAI, xAI, HuggingFace — publish their playout engine's output) into a
7
- * single mono **WAV** (16-bit PCM) blob via the Web Audio API. Rather than a `MediaRecorder` (which only emits webm/opus —
8
- * header-less, no duration/cues, so HTTP-range seeking is unreliable), the mix is routed into an
9
- * {@link AudioWorkletNode} (preferred) or a {@link ScriptProcessorNode} (fallback) that captures
10
- * Float32 PCM frames. PCM is accumulated in memory and encoded as a seekable RIFF/WAVE file at
11
- * {@link Stop}. WAV's header carries the exact duration and maps byte-offset → time linearly, so
12
- * range seeking is exact and waveform peaks are computed cheaply during capture. The tradeoff is
13
- * size (PCM WAV is larger than opus) — acceptable for these short session recordings.
7
+ * Mixes the user's microphone with the agent's remote-audio stream (every driver exposes one via
8
+ * `GetRemoteMediaStream()`: WebRTC drivers publish their remote track, PCM drivers — Gemini,
9
+ * ElevenLabs, AssemblyAI, xAI, HuggingFace — publish their playout engine's output) in a Web Audio
10
+ * graph, captures the mix as mono Float32 frames through an {@link AudioWorkletNode} (preferred) or a
11
+ * {@link ScriptProcessorNode} (fallback), and feeds them to ONE continuous Opus encoder for the whole
12
+ * call. The runtime pulls the encoded packets with {@link TakeEncodedPackets}, cuts them into shards
13
+ * and uploads them as the call goes, so nothing is held in memory until the end.
14
14
  *
15
- * Robust + MVP by design — every step degrades gracefully:
15
+ * Timing is the 48 kHz sample clock: the graph asks for a 48 kHz context, and when the browser
16
+ * refuses (or reports another rate) every frame is resampled to 48 kHz before encoding. The
17
+ * captured-sample count drives {@link NowOffsetMs} and is what {@link Stop} resolves.
18
+ *
19
+ * Robust by design — every step degrades gracefully:
16
20
  * - No `AudioContext` (server-side render / unsupported env) → the recorder disables itself
17
- * ({@link IsRecording} stays `false`, {@link Stop} resolves `null`); the voice call proceeds.
21
+ * ({@link IsRecording} stays `false`, {@link Stop} resolves 0); the voice call proceeds.
18
22
  * - No `AudioWorkletNode` AND no `ScriptProcessorNode` → disables itself rather than throwing.
23
+ * - A forced-48 kHz context that cannot take the microphone (Firefox rejects a source whose rate
24
+ * differs from its context's) → rebuilt once at the device rate with resampling.
19
25
  * - No remote stream yet (e.g. the WebRTC track hasn't landed) → records mic only until it does.
20
- * - A remote stream that can't be connected (e.g. a browser that rejects cross-sample-rate
21
- * `createMediaStreamSource` — the PCM playout context runs at 24 kHz, this one at the device
22
- * rate) → warns and records mic only; the mic recording is never lost to the agent stream.
23
- * - Any construction/start error is logged and disables the recorder rather than throwing into
24
- * the session-start path.
26
+ * - A remote stream that can't be connected (e.g. a cross-sample-rate `createMediaStreamSource`
27
+ * rejection) → warns and records mic only; the mic recording is never lost to the agent stream.
28
+ * - No usable encoder → logged, recording disabled for the call.
25
29
  *
26
- * Not an Angular service: it owns transient per-session media plumbing the
27
- * {@link RealtimeSessionService} creates and discards per call, so a plain class is the right
28
- * shape (no DI, no singleton).
30
+ * Not an Angular service: it owns transient per-session media plumbing the runtime creates and
31
+ * discards per call, so a plain class is the right shape (no DI, no singleton).
29
32
  */
30
- export declare class RealtimeAudioRecorder {
31
- /** The container/codec we now produce — a seekable mono 16-bit PCM WAV. */
32
- private static readonly wavMimeType;
33
- /** Target waveform-peak resolution (buckets) across the whole recording. */
34
- private static readonly peakBuckets;
33
+ export declare class RealtimeAudioRecorder implements IRealtimeSessionRecorder {
34
+ private readonly selectEncoder;
35
35
  /** PCM frame size for the ScriptProcessor fallback (worklet uses its native 128-frame quantum). */
36
36
  private static readonly scriptProcessorBufferSize;
37
+ /**
38
+ * Most 48 kHz audio held while the encoder is still being selected / loaded (10 s). Selection is
39
+ * normally well under a second; past this the encoder is stuck, and later frames are dropped
40
+ * (see {@link captureFrame} for why they are not counted either).
41
+ */
42
+ private static readonly maxPendingSamples;
37
43
  /** Inline AudioWorklet processor: forwards each 128-frame mono input block to the main thread. */
38
44
  private static readonly workletProcessorSource;
39
45
  private audioContext;
40
46
  private destination;
41
47
  private workletNode;
42
48
  private scriptNode;
43
- /** Captured mono Float32 PCM frames (in capture order); concatenated + encoded to WAV at Stop. */
44
- private pcmFrames;
45
- /** Total captured sample count across {@link pcmFrames} (kept in step to avoid re-summing). */
46
- private totalSamples;
47
- /** Streaming waveform-peak accumulator — bounded regardless of recording length. */
48
- private peaks;
49
- /** Final normalized peaks, snapshotted at {@link Stop} so {@link GetPeaks} survives cleanup. */
50
- private finalPeaks;
49
+ /** Converts the context's rate to 48 kHz; `null` when the context already runs at 48 kHz. */
50
+ private resampler;
51
51
  private recording;
52
52
  /** True once the agent's remote stream has been wired into the mix (prevents double-attach). */
53
53
  private remoteAttached;
@@ -57,37 +57,33 @@ export declare class RealtimeAudioRecorder {
57
57
  private micStream;
58
58
  /** The source node reading the microphone, swapped by ReplaceMicrophone. */
59
59
  private micSource;
60
- /** Sample index up to which crash-recovery shards have already been emitted (the segment cursor). */
61
- private flushedSampleCount;
62
- /** Wall-clock ms at recording start; anchors {@link NowOffsetMs}. 0 before {@link Start}. */
63
- private startedAtMs;
64
- /** Sample rate of the capturing {@link AudioContext}; 0 before {@link Start}. Needed to wrap shards. */
65
- private sampleRate;
60
+ /** 48 kHz samples captured (post-resample) — the recording's clock. */
61
+ private capturedSamples;
62
+ /** The call's encoder once selected; `null` while selecting, after a failure, or when not recording. */
63
+ private encoder;
64
+ /** Resolves to the encoder (or `null` on failure) — Stop awaits it so buffered audio still gets encoded. */
65
+ private encoderReady;
66
+ /** 48 kHz frames captured before the encoder was ready, fed to it in order once it is. */
67
+ private pendingFrames;
68
+ private pendingSamples;
69
+ private pendingOverflowWarned;
70
+ /** The first Stop's promise; later calls return it (idempotent). */
71
+ private stopping;
66
72
  /**
67
- * Bumped by {@link cleanup}. The async setup snapshots it and, after each await, gives up if it moved:
68
- * a {@link Stop} that lands mid-setup can only release what setup has already published, so setup
69
- * must release the rest itself rather than build a live graph on a stopped recorder.
73
+ * Bumped whenever the audio graph is released. The async graph setup snapshots it and, after each
74
+ * await, gives up if it moved: a {@link Stop} that lands mid-setup can only release what setup has
75
+ * already published, so setup must release the rest itself rather than build a live graph on a
76
+ * stopped recorder.
70
77
  */
71
78
  private setupGeneration;
79
+ /** @param selectEncoder picks the call's Opus encoder; injectable for tests. */
80
+ constructor(selectEncoder?: () => Promise<IOpusPacketEncoder>);
72
81
  /** True while a recorder is actively capturing. */
73
82
  get IsRecording(): boolean;
74
- /** Wall-clock ms when recording started (0 before {@link Start}). */
75
- get StartedAtMs(): number;
76
- /**
77
- * The container/codec the active recording uses. Always `'audio/wav'` once recording (empty
78
- * string before {@link Start} / when disabled) — the consolidated upload and the WAV-wrapped
79
- * crash-recovery shards are all 16-bit PCM WAV.
80
- */
81
- get MimeType(): string;
82
- /**
83
- * The captured AudioContext sample rate (0 before {@link Start} / when disabled). Exposed so a
84
- * recovery path can WAV-wrap the raw-PCM shards with the correct rate.
85
- */
86
- get SampleRate(): number;
87
83
  /**
88
84
  * Begins recording a mix of `micStream` and (when present) `remoteStream`. Best-effort:
89
85
  * a missing `AudioContext` / no worklet+scriptprocessor support / any setup failure disables
90
- * the recorder silently (logged) so the live call is never blocked.
86
+ * the recorder (logged) so the live call is never blocked.
91
87
  *
92
88
  * @param micStream The user's microphone capture stream (required).
93
89
  * @param remoteStream The agent's remote-audio stream, or `null` for mic-only capture.
@@ -107,31 +103,37 @@ export declare class RealtimeAudioRecorder {
107
103
  * stream, and Start replaces it); a stream without an audio track keeps the current one.
108
104
  */
109
105
  ReplaceMicrophone(micStream: MediaStream): void;
110
- /**
111
- * Returns a Blob of the raw PCM captured since the last call (a window of header-less,
112
- * little-endian PCM16 bytes), advancing the segment cursor. `null` when nothing new. Used to
113
- * upload crash-recovery shards mid-call. NOTE: shards are header-less raw PCM (NOT individually
114
- * playable WAV) — recovery is concatenation in order, then WAV-wrapping with {@link SampleRate}.
115
- * The canonical consolidated file is still authored as a single WAV from full memory at {@link Stop}.
116
- */
117
- SnapshotNewSegment(): Blob | null;
118
- /** Ms elapsed since recording started (>= 0); 0 when not recording. */
106
+ /** Milliseconds of audio captured so far, on the 48 kHz sample clock (never wall clock). */
119
107
  NowOffsetMs(): number;
108
+ /** The Opus packets the encoder produced since the last call (also its final packets after {@link Stop}). */
109
+ TakeEncodedPackets(): Uint8Array[];
120
110
  /**
121
- * The downsampled waveform peaks (each 0..1, max-abs per bucket, ~{@link RealtimeAudioRecorder.PeakBuckets}
122
- * buckets across the whole recording). Computed incrementally during capture so it's cheap and
123
- * bounded regardless of length. Returns `[]` before any audio / for a silent recording. Safe to
124
- * call after {@link Stop} — the peaks are snapshotted there before {@link cleanup} clears state.
111
+ * Stops capture, waits for the encoder (encoding any audio buffered while it loaded), flushes and
112
+ * closes it, and resolves the 48 kHz samples captured. The final packets stay available to
113
+ * {@link TakeEncodedPackets}. Idempotent: every call resolves the same count; 0 when the recorder
114
+ * never started.
125
115
  */
126
- GetPeaks(): number[];
116
+ Stop(): Promise<number>;
117
+ private stopOnce;
127
118
  /**
128
- * Stops recording and resolves the captured audio as a single mono 16-bit PCM **WAV**
129
- * {@link Blob}, then releases the audio graph. Resolves `null` when nothing was recorded
130
- * (recorder disabled, or no samples captured). Safe to call when not recording.
119
+ * Selects the encoder and feeds it what was captured meanwhile. A selection failure disables the
120
+ * recorder: with no encoder nothing captured could ever reach the server.
131
121
  */
132
- Stop(): Promise<Blob | null>;
133
- /** Wires up the Web Audio mix graph + PCM capture node (worklet preferred) and starts capture. */
122
+ private prepareEncoder;
123
+ /** Builds the mix graph + capture node, retrying once at the device rate if 48 kHz cannot take the mic. */
134
124
  private startMixedRecording;
125
+ /**
126
+ * Wires up the Web Audio mix graph + PCM capture node (worklet preferred) and starts capture.
127
+ * Resolves `'mic-rejected'` when a forced-48 kHz context refused the microphone source (the graph
128
+ * is released so the caller can rebuild at the device rate); otherwise `'done'`.
129
+ */
130
+ private buildGraph;
131
+ /**
132
+ * A 48 kHz context when asked for and the browser allows it, else the device-rate default. A
133
+ * browser that silently picks another rate is fine too: the resampler is chosen from the rate the
134
+ * context actually reports.
135
+ */
136
+ private createAudioContext;
135
137
  /**
136
138
  * Connects the agent stream, degrading to mic-only on failure. Unlike the mic (whose failure
137
139
  * rightly disables the recorder), the agent stream is best-effort: a browser may reject it
@@ -152,20 +154,26 @@ export declare class RealtimeAudioRecorder {
152
154
  private createScriptProcessorNode;
153
155
  /** The active capture node (worklet or script processor), or `null` before setup. */
154
156
  private captureNode;
155
- /** Absorbs one captured PCM frame: accumulate samples + update the bounded peak array. */
157
+ /**
158
+ * Absorbs one captured frame: resample to 48 kHz, count it, and hand it to the encoder (or buffer
159
+ * it while the encoder loads).
160
+ *
161
+ * Past the pending-buffer cap a frame is dropped AND not counted. Keeping the count equal to the
162
+ * audio actually handed to the encoder is what lets the runtime trust `packets × 960 ≥ captured`
163
+ * when it trims the final shard; a few lost seconds at the start of a call whose encoder never
164
+ * loaded is the smaller harm.
165
+ */
156
166
  private captureFrame;
157
167
  /** Routes one stream's audio tracks into the capture node; returns the source, or null when track-less / no node. */
158
168
  private connectStream;
159
- /** Concatenates a half-open sample range [from, to) across the captured frames into one Float32Array. */
160
- private collectSamples;
161
169
  /**
162
- * Converts a mono Float32 buffer to a little-endian PCM16 `ArrayBuffer` (for raw crash-recovery
163
- * shards). Returns the backing `ArrayBuffer` directly so it's a valid `BlobPart`.
170
+ * Turns recording off after a setup failure and releases the graph. Audio already captured stays
171
+ * queued for the encoder, so a graph failure mid-call still keeps what was recorded before it.
164
172
  */
165
- private floatToPcm16Bytes;
166
- /** Encodes all accumulated PCM into a single seekable WAV blob, or `null` when nothing captured. */
167
- private encodeWavBlob;
168
- /** Releases the audio graph + capture node and resets state. Idempotent. */
169
- private cleanup;
173
+ private disable;
174
+ /** Releases the audio graph + capture node. Idempotent; leaves the encoder and the sample count alone. */
175
+ private releaseGraph;
176
+ private disconnectNode;
177
+ private closeContext;
170
178
  }
171
179
  //# sourceMappingURL=realtime-audio-recorder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"realtime-audio-recorder.d.ts","sourceRoot":"","sources":["../../../src/lib/services/realtime-audio-recorder.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,qBAAqB;IAC9B,2EAA2E;IAC3E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAe;IAClD,4EAA4E;IAC5E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAO;IAC1C,mGAAmG;IACnG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAQ;IACzD,kGAAkG;IAClG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAY5C;IAEF,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,WAAW,CAAgD;IACnE,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,UAAU,CAAoC;IACtD,kGAAkG;IAClG,OAAO,CAAC,SAAS,CAAsB;IACvC,+FAA+F;IAC/F,OAAO,CAAC,YAAY,CAAK;IACzB,oFAAoF;IACpF,OAAO,CAAC,KAAK,CAA0D;IACvE,gGAAgG;IAChG,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,SAAS,CAAS;IAE1B,gGAAgG;IAChG,OAAO,CAAC,cAAc,CAAS;IAC/B,qGAAqG;IACrG,OAAO,CAAC,mBAAmB,CAA4B;IACvD,0GAA0G;IAC1G,OAAO,CAAC,SAAS,CAA4B;IAC7C,4EAA4E;IAC5E,OAAO,CAAC,SAAS,CAA2C;IAE5D,qGAAqG;IACrG,OAAO,CAAC,kBAAkB,CAAK;IAE/B,6FAA6F;IAC7F,OAAO,CAAC,WAAW,CAAK;IAExB,wGAAwG;IACxG,OAAO,CAAC,UAAU,CAAK;IAEvB;;;;OAIG;IACH,OAAO,CAAC,eAAe,CAAK;IAE5B,mDAAmD;IACnD,IAAW,WAAW,IAAI,OAAO,CAEhC;IAED,qEAAqE;IACrE,IAAW,WAAW,IAAI,MAAM,CAE/B;IAED;;;;OAIG;IACH,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED;;;OAGG;IACH,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI;IAwB5E;;;;;OAKG;IACI,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAYpD;;;;;OAKG;IACI,iBAAiB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAYtD;;;;;;OAMG;IACI,kBAAkB,IAAI,IAAI,GAAG,IAAI;IAaxC,uEAAuE;IAChE,WAAW,IAAI,MAAM;IAO5B;;;;;OAKG;IACI,QAAQ,IAAI,MAAM,EAAE;IAI3B;;;;OAIG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAczC,kGAAkG;YACpF,mBAAmB;IAuCjC;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;;;;OAKG;YACW,iBAAiB;IAO/B,oGAAoG;YACtF,oBAAoB;IAwBlC,sFAAsF;IACtF,OAAO,CAAC,yBAAyB;IAcjC,qFAAqF;IACrF,OAAO,CAAC,WAAW;IAInB,0FAA0F;IAC1F,OAAO,CAAC,YAAY;IAWpB,qHAAqH;IACrH,OAAO,CAAC,aAAa;IAUrB,yGAAyG;IACzG,OAAO,CAAC,cAAc;IA0BtB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAUzB,oGAAoG;IACpG,OAAO,CAAC,aAAa;IASrB,4EAA4E;IAC5E,OAAO,CAAC,OAAO;CA4BlB"}
1
+ {"version":3,"file":"realtime-audio-recorder.d.ts","sourceRoot":"","sources":["../../../src/lib/services/realtime-audio-recorder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,OAAO,EAAE,kBAAkB,EAA2B,MAAM,iCAAiC,CAAC;AAE9F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,qBAAsB,YAAW,wBAAwB;IA+DtD,OAAO,CAAC,QAAQ,CAAC,aAAa;IA9D1C,mGAAmG;IACnG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAQ;IACzD;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAA8B;IACvE,kGAAkG;IAClG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAY5C;IAEF,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,WAAW,CAAgD;IACnE,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,UAAU,CAAoC;IACtD,6FAA6F;IAC7F,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,SAAS,CAAS;IAE1B,gGAAgG;IAChG,OAAO,CAAC,cAAc,CAAS;IAC/B,qGAAqG;IACrG,OAAO,CAAC,mBAAmB,CAA4B;IACvD,0GAA0G;IAC1G,OAAO,CAAC,SAAS,CAA4B;IAC7C,4EAA4E;IAC5E,OAAO,CAAC,SAAS,CAA2C;IAE5D,uEAAuE;IACvE,OAAO,CAAC,eAAe,CAAK;IAC5B,wGAAwG;IACxG,OAAO,CAAC,OAAO,CAAmC;IAClD,4GAA4G;IAC5G,OAAO,CAAC,YAAY,CAAmD;IACvE,0FAA0F;IAC1F,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,qBAAqB,CAAS;IACtC,oEAAoE;IACpE,OAAO,CAAC,QAAQ,CAAgC;IAEhD;;;;;OAKG;IACH,OAAO,CAAC,eAAe,CAAK;IAE5B,gFAAgF;gBACnD,aAAa,GAAE,MAAM,OAAO,CAAC,kBAAkB,CAAmC;IAE/G,mDAAmD;IACnD,IAAW,WAAW,IAAI,OAAO,CAEhC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI;IAwB5E;;;;;OAKG;IACI,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAYpD;;;;;OAKG;IACI,iBAAiB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAYtD,4FAA4F;IACrF,WAAW,IAAI,MAAM;IAI5B,6GAA6G;IACtG,kBAAkB,IAAI,UAAU,EAAE;IAIzC;;;;;OAKG;IACI,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;YAOhB,QAAQ;IAetB;;;OAGG;YACW,cAAc;IAsB5B,2GAA2G;YAC7F,mBAAmB;IAOjC;;;;OAIG;YACW,UAAU;IAuDxB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;;;;OAKG;YACW,iBAAiB;IAO/B,oGAAoG;YACtF,oBAAoB;IAwBlC,sFAAsF;IACtF,OAAO,CAAC,yBAAyB;IAWjC,qFAAqF;IACrF,OAAO,CAAC,WAAW;IAInB;;;;;;;;OAQG;IACH,OAAO,CAAC,YAAY;IAwBpB,qHAAqH;IACrH,OAAO,CAAC,aAAa;IAUrB;;;OAGG;IACH,OAAO,CAAC,OAAO;IAKf,0GAA0G;IAC1G,OAAO,CAAC,YAAY;IAwBpB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,YAAY;CAMvB"}