@mastra/voice-google-gemini-live 0.0.0-add-libsql-changeset-20250910154739

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.
@@ -0,0 +1,207 @@
1
+ import { PassThrough } from 'stream';
2
+ import type { AudioConfig } from '../types';
3
+ /**
4
+ * Default audio configuration for Gemini Live API
5
+ */
6
+ export declare const DEFAULT_AUDIO_CONFIG: AudioConfig;
7
+ /**
8
+ * Manages audio streams for the Gemini Live Voice API
9
+ * Handles speaker stream lifecycle, cleanup, and audio processing
10
+ */
11
+ export declare class AudioStreamManager {
12
+ private speakerStreams;
13
+ private currentResponseId?;
14
+ private readonly MAX_CONCURRENT_STREAMS;
15
+ private readonly STREAM_TIMEOUT_MS;
16
+ private readonly debug;
17
+ private readonly audioConfig;
18
+ private readonly maxChunkSize;
19
+ private readonly minSendInterval;
20
+ private lastSendTime;
21
+ private pendingChunks;
22
+ private pendingTimer?;
23
+ private sendToGemini?;
24
+ private readonly MAX_BUFFER_SIZE;
25
+ private readonly MAX_AUDIO_DURATION;
26
+ constructor(audioConfig: AudioConfig, debug?: boolean);
27
+ /**
28
+ * Provide a sender callback that will be used to deliver messages to Gemini
29
+ */
30
+ setSender(sender: (type: 'realtime_input' | 'client_content', message: Record<string, unknown>) => void): void;
31
+ /**
32
+ * Get the default audio configuration
33
+ */
34
+ static getDefaultAudioConfig(): AudioConfig;
35
+ /**
36
+ * Create a merged audio configuration with defaults
37
+ */
38
+ static createAudioConfig(customConfig?: Partial<AudioConfig>): AudioConfig;
39
+ /**
40
+ * Get the current response ID for the next audio chunk
41
+ */
42
+ getCurrentResponseId(): string | undefined;
43
+ /**
44
+ * Set the current response ID for the next audio chunk
45
+ */
46
+ setCurrentResponseId(responseId: string): void;
47
+ /**
48
+ * Get the current speaker stream
49
+ */
50
+ getCurrentSpeakerStream(): NodeJS.ReadableStream | null;
51
+ /**
52
+ * Add a new speaker stream for a response
53
+ */
54
+ addSpeakerStream(responseId: string, stream: PassThrough): void;
55
+ /**
56
+ * Remove a specific speaker stream
57
+ */
58
+ removeSpeakerStream(responseId: string): void;
59
+ /**
60
+ * Clean up all speaker streams
61
+ */
62
+ cleanupSpeakerStreams(): void;
63
+ /**
64
+ * Clean up old/stale streams to prevent memory leaks
65
+ */
66
+ cleanupStaleStreams(): void;
67
+ /**
68
+ * Enforce stream limits to prevent memory exhaustion
69
+ */
70
+ enforceStreamLimits(): void;
71
+ /**
72
+ * Get information about current streams for debugging
73
+ */
74
+ getStreamInfo(): {
75
+ totalStreams: number;
76
+ currentResponseId?: string;
77
+ streamDetails: Array<{
78
+ responseId: string;
79
+ created: number;
80
+ destroyed: boolean;
81
+ }>;
82
+ };
83
+ /**
84
+ * Convert Int16Array audio data to base64 string for WebSocket transmission
85
+ */
86
+ int16ArrayToBase64(int16Array: Int16Array): string;
87
+ /**
88
+ * Convert base64 string to Int16Array audio data
89
+ */
90
+ base64ToInt16Array(base64Audio: string): Int16Array;
91
+ /**
92
+ * Validate and convert audio data to the required format for Gemini Live API
93
+ * Gemini Live expects 16kHz PCM16 for input
94
+ */
95
+ validateAndConvertAudioInput(audioData: Buffer | Int16Array): Int16Array;
96
+ /**
97
+ * Process audio chunk for streaming - handles format validation and conversion
98
+ */
99
+ processAudioChunk(chunk: Buffer | Uint8Array | Int16Array): string;
100
+ /**
101
+ * Validate audio format and sample rate for Gemini Live API requirements
102
+ */
103
+ validateAudioFormat(sampleRate?: number, channels?: number): void;
104
+ /**
105
+ * Create an audio message for the Gemini Live API
106
+ */
107
+ createAudioMessage(audioData: string, messageType?: 'input' | 'realtime'): Record<string, unknown>;
108
+ /**
109
+ * Get a speaker stream by response ID
110
+ */
111
+ getSpeakerStream(responseId: string): PassThrough | undefined;
112
+ /**
113
+ * Create a new speaker stream for a response ID
114
+ */
115
+ createSpeakerStream(responseId: string): PassThrough;
116
+ /**
117
+ * Get the number of active streams
118
+ */
119
+ getActiveStreamCount(): number;
120
+ /**
121
+ * Check if a specific response ID has an active stream
122
+ */
123
+ hasStream(responseId: string): boolean;
124
+ /**
125
+ * Get all active response IDs
126
+ */
127
+ getActiveResponseIds(): string[];
128
+ /**
129
+ * Reset the manager state (useful for testing or reconnection)
130
+ */
131
+ reset(): void;
132
+ /**
133
+ * Validate audio chunk size and format
134
+ */
135
+ validateAudioChunk(chunk: Buffer): void;
136
+ /**
137
+ * Send audio chunk with throttling and validation
138
+ */
139
+ sendAudioChunk(chunk: Buffer): void;
140
+ /**
141
+ * Handle audio stream processing
142
+ */
143
+ handleAudioStream(stream: NodeJS.ReadableStream): Promise<void>;
144
+ /**
145
+ * Split large audio chunks into smaller ones
146
+ */
147
+ private splitAudioChunk;
148
+ /**
149
+ * Calculate audio duration from buffer length
150
+ */
151
+ calculateAudioDuration(bufferLength: number, sampleRate?: number): number;
152
+ /**
153
+ * Validate audio buffer size and duration
154
+ */
155
+ validateAudioBuffer(buffer: Buffer): void;
156
+ /**
157
+ * Process audio buffer for transcription
158
+ * Combines chunks, validates format, and converts to base64
159
+ */
160
+ processAudioBufferForTranscription(audioBuffer: Buffer): {
161
+ base64Audio: string;
162
+ duration: number;
163
+ size: number;
164
+ };
165
+ /**
166
+ * Process audio chunks for transcription with buffer management
167
+ * Handles chunk collection, size validation, and buffer management
168
+ */
169
+ processAudioChunksForTranscription(chunks: Buffer[], totalBufferSize: number): {
170
+ audioBuffer: Buffer;
171
+ base64Audio: string;
172
+ duration: number;
173
+ size: number;
174
+ };
175
+ /**
176
+ * Validate audio chunks and calculate total size
177
+ */
178
+ validateAudioChunks(chunks: Buffer[]): {
179
+ totalSize: number;
180
+ isValid: boolean;
181
+ error?: string;
182
+ };
183
+ /**
184
+ * Get audio buffer limits and configuration
185
+ */
186
+ getAudioBufferLimits(): {
187
+ maxBufferSize: number;
188
+ maxAudioDuration: number;
189
+ maxChunkSize: number;
190
+ };
191
+ /**
192
+ * Get audio configuration
193
+ */
194
+ getAudioConfig(): AudioConfig;
195
+ /**
196
+ * Log message if debug is enabled
197
+ */
198
+ private log;
199
+ /**
200
+ * Handle complete audio transcription workflow
201
+ * Manages stream processing, chunk collection, and transcription
202
+ */
203
+ handleAudioTranscription(audioStream: NodeJS.ReadableStream, sendAndAwaitTranscript: (base64Audio: string) => Promise<string>, onError: (error: Error) => void, timeoutMs?: number): Promise<string>;
204
+ private processChunk;
205
+ private processPendingChunks;
206
+ }
207
+ //# sourceMappingURL=AudioStreamManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioStreamManager.d.ts","sourceRoot":"","sources":["../../src/managers/AudioStreamManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ export interface AuthConfig {
2
+ apiKey?: string;
3
+ vertexAI?: boolean;
4
+ project?: string;
5
+ debug: boolean;
6
+ serviceAccountKeyFile?: string;
7
+ serviceAccountEmail?: string;
8
+ tokenExpirationTime?: number;
9
+ }
10
+ export declare class AuthManager {
11
+ private authClient?;
12
+ private accessToken?;
13
+ private tokenExpirationTime?;
14
+ private readonly config;
15
+ constructor(config: AuthConfig);
16
+ /**
17
+ * Initialize authentication based on configuration
18
+ */
19
+ initialize(): Promise<void>;
20
+ /**
21
+ * Initialize Vertex AI authentication
22
+ */
23
+ private initializeVertexAI;
24
+ /**
25
+ * Get access token for Vertex AI
26
+ */
27
+ getAccessToken(): Promise<string>;
28
+ /**
29
+ * Get API key if using API key authentication
30
+ */
31
+ getApiKey(): string | undefined;
32
+ /**
33
+ * Check if using Vertex AI authentication
34
+ */
35
+ isUsingVertexAI(): boolean;
36
+ /**
37
+ * Check if authentication is configured
38
+ */
39
+ isConfigured(): boolean;
40
+ /**
41
+ * Check if access token is valid
42
+ */
43
+ hasValidToken(): boolean;
44
+ /**
45
+ * Clear cached authentication data
46
+ */
47
+ clearCache(): void;
48
+ /**
49
+ * Get authentication configuration
50
+ */
51
+ getConfig(): AuthConfig;
52
+ /**
53
+ * Log message if debug is enabled
54
+ */
55
+ private log;
56
+ }
57
+ //# sourceMappingURL=AuthManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthManager.d.ts","sourceRoot":"","sources":["../../src/managers/AuthManager.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,mBAAmB,CAAC,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;gBAExB,MAAM,EAAE,UAAU;IAK9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAcjC;;OAEG;YACW,kBAAkB;IAmChC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAqCvC;;OAEG;IACH,SAAS,IAAI,MAAM,GAAG,SAAS;IAO/B;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,aAAa,IAAI,OAAO;IAKxB;;OAEG;IACH,UAAU,IAAI,IAAI;IAKlB;;OAEG;IACH,SAAS,IAAI,UAAU;IAIvB;;OAEG;IACH,OAAO,CAAC,GAAG;CAKZ"}
@@ -0,0 +1,57 @@
1
+ import { WebSocket } from 'ws';
2
+ export interface ConnectionConfig {
3
+ debug: boolean;
4
+ timeoutMs?: number;
5
+ }
6
+ export declare class ConnectionManager {
7
+ private ws?;
8
+ private eventEmitter;
9
+ private readonly debug;
10
+ private readonly timeoutMs;
11
+ constructor(config: ConnectionConfig);
12
+ /**
13
+ * Set the WebSocket instance
14
+ */
15
+ setWebSocket(ws: WebSocket): void;
16
+ /**
17
+ * Get the current WebSocket instance
18
+ */
19
+ getWebSocket(): WebSocket | undefined;
20
+ /**
21
+ * Check if WebSocket is connected
22
+ */
23
+ isConnected(): boolean;
24
+ /**
25
+ * Check if WebSocket is connecting
26
+ */
27
+ isConnecting(): boolean;
28
+ /**
29
+ * Check if WebSocket is closed
30
+ */
31
+ isClosed(): boolean;
32
+ /**
33
+ * Wait for WebSocket to open
34
+ */
35
+ waitForOpen(): Promise<void>;
36
+ /**
37
+ * Send data through WebSocket
38
+ */
39
+ send(data: string | Buffer): void;
40
+ /**
41
+ * Close the WebSocket connection
42
+ */
43
+ close(): void;
44
+ /**
45
+ * Get connection state
46
+ */
47
+ getConnectionState(): 'disconnected' | 'connecting' | 'connected' | 'closed';
48
+ /**
49
+ * Validate WebSocket state for operations
50
+ */
51
+ validateWebSocketState(): void;
52
+ /**
53
+ * Log message if debug is enabled
54
+ */
55
+ private log;
56
+ }
57
+ //# sourceMappingURL=ConnectionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectionManager.d.ts","sourceRoot":"","sources":["../../src/managers/ConnectionManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAI/B,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,EAAE,CAAC,CAAY;IACvB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,MAAM,EAAE,gBAAgB;IAMpC;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI;IAIjC;;OAEG;IACH,YAAY,IAAI,SAAS,GAAG,SAAS;IAIrC;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAgDlC;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAYjC;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,kBAAkB,IAAI,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ;IAe5E;;OAEG;IACH,sBAAsB,IAAI,IAAI;IAU9B;;OAEG;IACH,OAAO,CAAC,GAAG;CAKZ"}
@@ -0,0 +1,73 @@
1
+ export interface ContextEntry {
2
+ role: 'user' | 'assistant';
3
+ content: string;
4
+ timestamp: number;
5
+ }
6
+ export interface ContextConfig {
7
+ maxEntries?: number;
8
+ maxContentLength?: number;
9
+ compressionThreshold?: number;
10
+ compressionEnabled?: boolean;
11
+ }
12
+ export declare class ContextManager {
13
+ private contextHistory;
14
+ private readonly maxEntries;
15
+ private readonly maxContentLength;
16
+ private readonly compressionThreshold;
17
+ private compressionEnabled;
18
+ constructor(config?: ContextConfig);
19
+ /**
20
+ * Add entry to context history
21
+ */
22
+ addEntry(role: 'user' | 'assistant', content: string): void;
23
+ /**
24
+ * Get context history
25
+ */
26
+ getContextHistory(): ContextEntry[];
27
+ /**
28
+ * Get context history as array of role/content pairs
29
+ */
30
+ getContextArray(): Array<{
31
+ role: string;
32
+ content: string;
33
+ }>;
34
+ /**
35
+ * Clear context history
36
+ */
37
+ clearContext(): void;
38
+ /**
39
+ * Get context size
40
+ */
41
+ getContextSize(): number;
42
+ /**
43
+ * Compress context when it exceeds threshold
44
+ */
45
+ private compressContext;
46
+ /**
47
+ * Enable or disable compression at runtime
48
+ */
49
+ setCompressionEnabled(enabled: boolean): void;
50
+ /**
51
+ * Get context summary
52
+ */
53
+ getContextSummary(): {
54
+ totalEntries: number;
55
+ userEntries: number;
56
+ assistantEntries: number;
57
+ oldestTimestamp: number | null;
58
+ newestTimestamp: number | null;
59
+ };
60
+ /**
61
+ * Search context for specific content
62
+ */
63
+ searchContext(query: string, role?: 'user' | 'assistant'): ContextEntry[];
64
+ /**
65
+ * Get recent context entries
66
+ */
67
+ getRecentEntries(count: number): ContextEntry[];
68
+ /**
69
+ * Get context entries by role
70
+ */
71
+ getEntriesByRole(role: 'user' | 'assistant'): ContextEntry[];
72
+ }
73
+ //# sourceMappingURL=ContextManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextManager.d.ts","sourceRoot":"","sources":["../../src/managers/ContextManager.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,kBAAkB,CAAU;gBAExB,MAAM,GAAE,aAAkB;IAOtC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAwB3D;;OAEG;IACH,iBAAiB,IAAI,YAAY,EAAE;IAInC;;OAEG;IACH,eAAe,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAO3D;;OAEG;IACH,YAAY,IAAI,IAAI;IAIpB;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAyBvB;;OAEG;IACH,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAI7C;;OAEG;IACH,iBAAiB,IAAI;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC;QACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;KAChC;IAwBD;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,YAAY,EAAE;IAWzE;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE;IAI/C;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,YAAY,EAAE;CAG7D"}
@@ -0,0 +1,64 @@
1
+ import { EventEmitter } from 'events';
2
+ export type EventMap = Record<string, unknown>;
3
+ export interface EventConfig {
4
+ debug: boolean;
5
+ }
6
+ export declare class EventManager<TEvents extends EventMap = Record<string, unknown>> {
7
+ private eventEmitter;
8
+ private readonly debug;
9
+ private eventCounts;
10
+ constructor(config: EventConfig);
11
+ /**
12
+ * Emit an event with data
13
+ */
14
+ emit<K extends Extract<keyof TEvents, string>>(event: K, data: TEvents[K]): boolean;
15
+ /**
16
+ * Add event listener
17
+ */
18
+ on<E extends Extract<keyof TEvents, string>>(event: E, callback: (data: TEvents[E]) => void): void;
19
+ /**
20
+ * Remove event listener
21
+ */
22
+ off<E extends Extract<keyof TEvents, string>>(event: E, callback: (data: TEvents[E]) => void): void;
23
+ /**
24
+ * Add one-time event listener
25
+ */
26
+ once<E extends Extract<keyof TEvents, string>>(event: E, callback: (data: TEvents[E]) => void): void;
27
+ /**
28
+ * Remove all listeners for an event
29
+ */
30
+ removeAllListeners(event?: string): void;
31
+ /**
32
+ * Get event listener count
33
+ */
34
+ getListenerCount(event: string): number;
35
+ /**
36
+ * Get event listener info
37
+ */
38
+ getEventListenerInfo(): Record<string, number>;
39
+ /**
40
+ * Get event emission counts
41
+ */
42
+ getEventCounts(): Record<string, number>;
43
+ /**
44
+ * Reset event counts
45
+ */
46
+ resetEventCounts(): void;
47
+ /**
48
+ * Clean up event listeners
49
+ */
50
+ cleanup(): void;
51
+ /**
52
+ * Get the underlying EventEmitter
53
+ */
54
+ getEventEmitter(): EventEmitter;
55
+ /**
56
+ * Increment event count for tracking
57
+ */
58
+ private incrementEventCount;
59
+ /**
60
+ * Log message if debug is enabled
61
+ */
62
+ private log;
63
+ }
64
+ //# sourceMappingURL=EventManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventManager.d.ts","sourceRoot":"","sources":["../../src/managers/EventManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE/C,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,YAAY,CAAC,OAAO,SAAS,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1E,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,WAAW,CAA8B;gBAErC,MAAM,EAAE,WAAW;IAK/B;;OAEG;IACH,IAAI,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,OAAO,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO;IAWnF;;OAEG;IACH,EAAE,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,OAAO,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAQlG;;OAEG;IACH,GAAG,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,OAAO,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAQnG;;OAEG;IACH,IAAI,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,OAAO,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAQpG;;OAEG;IACH,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAQxC;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIvC;;OAEG;IACH,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAY9C;;OAEG;IACH,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAIxC;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAIxB;;OAEG;IACH,OAAO,IAAI,IAAI;IASf;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;OAEG;IACH,OAAO,CAAC,GAAG;CAKZ"}
@@ -0,0 +1,84 @@
1
+ import { EventEmitter } from 'events';
2
+ export interface SessionConfig {
3
+ debug: boolean;
4
+ timeoutMs?: number;
5
+ maxSessionDuration?: number;
6
+ }
7
+ export interface SessionInfo {
8
+ id?: string;
9
+ handle?: string;
10
+ startTime?: Date;
11
+ duration?: number;
12
+ state: string;
13
+ config?: any;
14
+ contextSize: number;
15
+ }
16
+ export declare class SessionManager {
17
+ private eventEmitter;
18
+ private readonly debug;
19
+ private readonly timeoutMs;
20
+ private readonly maxSessionDuration;
21
+ private sessionId?;
22
+ private sessionHandle?;
23
+ private sessionStartTime?;
24
+ private isResuming;
25
+ private sessionDurationTimeout?;
26
+ constructor(config: SessionConfig);
27
+ /**
28
+ * Set session ID
29
+ */
30
+ setSessionId(id: string): void;
31
+ /**
32
+ * Get session ID
33
+ */
34
+ getSessionId(): string | undefined;
35
+ /**
36
+ * Set session handle
37
+ */
38
+ setSessionHandle(handle: string): void;
39
+ /**
40
+ * Get session handle
41
+ */
42
+ getSessionHandle(): string | undefined;
43
+ /**
44
+ * Start session timing
45
+ */
46
+ startSession(): void;
47
+ /**
48
+ * Check if session is resuming
49
+ */
50
+ isSessionResuming(): boolean;
51
+ /**
52
+ * Set resuming state
53
+ */
54
+ setResuming(resuming: boolean): void;
55
+ /**
56
+ * Wait for session to be created and ready
57
+ */
58
+ waitForSessionCreated(): Promise<void>;
59
+ /**
60
+ * Start session duration monitoring
61
+ */
62
+ private startSessionDurationMonitor;
63
+ /**
64
+ * Get session information
65
+ */
66
+ getSessionInfo(): SessionInfo;
67
+ /**
68
+ * Get current session state
69
+ */
70
+ private getSessionState;
71
+ /**
72
+ * Reset session state
73
+ */
74
+ reset(): void;
75
+ /**
76
+ * Get event emitter for session events
77
+ */
78
+ getEventEmitter(): EventEmitter;
79
+ /**
80
+ * Log message if debug is enabled
81
+ */
82
+ private log;
83
+ }
84
+ //# sourceMappingURL=SessionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionManager.d.ts","sourceRoot":"","sources":["../../src/managers/SessionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAG5C,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,gBAAgB,CAAC,CAAO;IAChC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,sBAAsB,CAAC,CAAiB;gBAEpC,MAAM,EAAE,aAAa;IAOjC;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI9B;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,SAAS;IAIlC;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAItC;;OAEG;IACH,gBAAgB,IAAI,MAAM,GAAG,SAAS;IAItC;;OAEG;IACH,YAAY,IAAI,IAAI;IAKpB;;OAEG;IACH,iBAAiB,IAAI,OAAO;IAI5B;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAIpC;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAkD5C;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAanC;;OAEG;IACH,cAAc,IAAI,WAAW;IAe7B;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,KAAK,IAAI,IAAI;IAYb;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;OAEG;IACH,OAAO,CAAC,GAAG;CAKZ"}
@@ -0,0 +1,12 @@
1
+ export { AudioStreamManager } from './AudioStreamManager';
2
+ export { ConnectionManager } from './ConnectionManager';
3
+ export { SessionManager } from './SessionManager';
4
+ export { ContextManager } from './ContextManager';
5
+ export { AuthManager } from './AuthManager';
6
+ export { EventManager } from './EventManager';
7
+ export type { ConnectionConfig } from './ConnectionManager';
8
+ export type { SessionConfig, SessionInfo } from './SessionManager';
9
+ export type { ContextConfig, ContextEntry } from './ContextManager';
10
+ export type { AuthConfig } from './AuthManager';
11
+ export type { EventConfig } from './EventManager';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/managers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACnE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACpE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}