@aether-stack-dev/client-sdk 1.0.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.
Files changed (62) hide show
  1. package/README.md +257 -0
  2. package/dist/AStackCSRClient.d.ts +60 -0
  3. package/dist/AStackCSRClient.d.ts.map +1 -0
  4. package/dist/AStackClient.d.ts +90 -0
  5. package/dist/AStackClient.d.ts.map +1 -0
  6. package/dist/AStackEventSetup.d.ts +35 -0
  7. package/dist/AStackEventSetup.d.ts.map +1 -0
  8. package/dist/AStackMediaController.d.ts +34 -0
  9. package/dist/AStackMediaController.d.ts.map +1 -0
  10. package/dist/AnalyticsCollector.d.ts +63 -0
  11. package/dist/AnalyticsCollector.d.ts.map +1 -0
  12. package/dist/BillingMonitor.d.ts +35 -0
  13. package/dist/BillingMonitor.d.ts.map +1 -0
  14. package/dist/ConnectionStateManager.d.ts +48 -0
  15. package/dist/ConnectionStateManager.d.ts.map +1 -0
  16. package/dist/PerformanceMonitor.d.ts +34 -0
  17. package/dist/PerformanceMonitor.d.ts.map +1 -0
  18. package/dist/SecurityLogger.d.ts +30 -0
  19. package/dist/SecurityLogger.d.ts.map +1 -0
  20. package/dist/SessionManager.d.ts +20 -0
  21. package/dist/SessionManager.d.ts.map +1 -0
  22. package/dist/SupabaseSignalingClient.d.ts +35 -0
  23. package/dist/SupabaseSignalingClient.d.ts.map +1 -0
  24. package/dist/UsageTracker.d.ts +22 -0
  25. package/dist/UsageTracker.d.ts.map +1 -0
  26. package/dist/WebRTCManager.d.ts +26 -0
  27. package/dist/WebRTCManager.d.ts.map +1 -0
  28. package/dist/__tests__/setup.d.ts +32 -0
  29. package/dist/__tests__/setup.d.ts.map +1 -0
  30. package/dist/audio/AudioPlayer.d.ts +27 -0
  31. package/dist/audio/AudioPlayer.d.ts.map +1 -0
  32. package/dist/audio/index.d.ts +3 -0
  33. package/dist/audio/index.d.ts.map +1 -0
  34. package/dist/avatar/TalkingHeadAvatar.d.ts +9 -0
  35. package/dist/avatar/TalkingHeadAvatar.d.ts.map +1 -0
  36. package/dist/avatar/VRMAvatar.d.ts +10 -0
  37. package/dist/avatar/VRMAvatar.d.ts.map +1 -0
  38. package/dist/avatar/constants.d.ts +4 -0
  39. package/dist/avatar/constants.d.ts.map +1 -0
  40. package/dist/avatar/index.d.ts +7 -0
  41. package/dist/avatar/index.d.ts.map +1 -0
  42. package/dist/core.d.ts +14 -0
  43. package/dist/core.d.ts.map +1 -0
  44. package/dist/index.d.ts +22 -0
  45. package/dist/index.d.ts.map +1 -0
  46. package/dist/index.esm.js +2245 -0
  47. package/dist/index.esm.js.map +1 -0
  48. package/dist/index.js +2258 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/react/index.d.ts +9 -0
  51. package/dist/react/index.d.ts.map +1 -0
  52. package/dist/react/useAStack.d.ts +34 -0
  53. package/dist/react/useAStack.d.ts.map +1 -0
  54. package/dist/react/useAStackCSR.d.ts +20 -0
  55. package/dist/react/useAStackCSR.d.ts.map +1 -0
  56. package/dist/react.esm.js +2871 -0
  57. package/dist/react.esm.js.map +1 -0
  58. package/dist/react.js +2895 -0
  59. package/dist/react.js.map +1 -0
  60. package/dist/types.d.ts +221 -0
  61. package/dist/types.d.ts.map +1 -0
  62. package/package.json +88 -0
package/README.md ADDED
@@ -0,0 +1,257 @@
1
+ # AStack Client SDK
2
+
3
+ JavaScript/TypeScript SDK for integrating AStack's real-time conversational AI into web applications.
4
+
5
+ ## Features
6
+
7
+ - 🎥 **Real-time WebRTC** - Low-latency audio/video communication
8
+ - 🤖 **AI Conversations** - Text, voice, and video input support
9
+ - ⚡ **<1s Latency** - Optimized for real-time interactions
10
+ - 🔒 **Secure Sessions** - Token-based authentication
11
+ - 📊 **Usage Tracking** - Built-in metrics and analytics
12
+ - ⚛️ **React Support** - Hooks for easy React integration
13
+ - 🔄 **Auto-Reconnect** - Resilient connection handling
14
+ - 📱 **Cross-Platform** - Works in all modern browsers
15
+
16
+ ## Installation
17
+
18
+ ```bash
19
+ npm install @astack/client-sdk
20
+ ```
21
+
22
+ ## Quick Start
23
+
24
+ ### Vanilla JavaScript
25
+
26
+ ```javascript
27
+ import { AStackClient } from '@astack/client-sdk';
28
+
29
+ // Initialize client
30
+ const client = new AStackClient({
31
+ sessionToken: 'your-session-token',
32
+ userId: 'user-id'
33
+ });
34
+
35
+ // Handle events
36
+ client.on('message', (message) => {
37
+ console.log('AI response:', message.text);
38
+ });
39
+
40
+ client.on('audio', (audioData) => {
41
+ // Handle audio response
42
+ });
43
+
44
+ // Start conversation
45
+ await client.connect();
46
+
47
+ // Send text message
48
+ await client.sendMessage('Hello, AI assistant!');
49
+
50
+ // Send audio
51
+ await client.sendAudio(audioBlob);
52
+
53
+ // Disconnect when done
54
+ await client.disconnect();
55
+ ```
56
+
57
+ ### React
58
+
59
+ ```tsx
60
+ import { useAStack } from '@astack/client-sdk/react';
61
+
62
+ function ChatComponent() {
63
+ const {
64
+ isConnected,
65
+ isLoading,
66
+ messages,
67
+ sendMessage,
68
+ sendAudio,
69
+ startRecording,
70
+ stopRecording
71
+ } = useAStack({
72
+ sessionToken: 'your-session-token',
73
+ userId: 'user-id'
74
+ });
75
+
76
+ return (
77
+ <div>
78
+ {messages.map((msg) => (
79
+ <div key={msg.id}>
80
+ {msg.role}: {msg.text}
81
+ </div>
82
+ ))}
83
+
84
+ <button onClick={() => sendMessage('Hello!')}>
85
+ Send Message
86
+ </button>
87
+ </div>
88
+ );
89
+ }
90
+ ```
91
+
92
+ ## API Reference
93
+
94
+ ### AStackClient
95
+
96
+ Main client class for managing AI conversations.
97
+
98
+ #### Constructor
99
+
100
+ ```typescript
101
+ new AStackClient(config: AStackClientConfig)
102
+ ```
103
+
104
+ **Config Options:**
105
+ - `sessionToken` (string, required) - Authentication token from developer SDK
106
+ - `userId` (string, required) - Unique user identifier
107
+ - `debug` (boolean) - Enable debug logging
108
+ - `reconnectAttempts` (number) - Max reconnection attempts (default: 3)
109
+ - `reconnectDelay` (number) - Delay between reconnects in ms (default: 1000)
110
+
111
+ #### Methods
112
+
113
+ - `connect()` - Establish WebRTC connection
114
+ - `disconnect()` - Close connection and cleanup
115
+ - `sendMessage(text: string)` - Send text message
116
+ - `sendAudio(audio: Blob | ArrayBuffer)` - Send audio data
117
+ - `sendVideo(video: Blob)` - Send video frame
118
+ - `setAudioEnabled(enabled: boolean)` - Toggle audio input
119
+ - `setVideoEnabled(enabled: boolean)` - Toggle video input
120
+
121
+ #### Events
122
+
123
+ - `connected` - Connection established
124
+ - `disconnected` - Connection closed
125
+ - `error` - Error occurred
126
+ - `message` - Text response received
127
+ - `audio` - Audio response received
128
+ - `video` - Video response received
129
+ - `usage` - Usage metrics update
130
+
131
+ ### React Hook
132
+
133
+ ```typescript
134
+ const {
135
+ // State
136
+ isConnected,
137
+ isLoading,
138
+ error,
139
+ messages,
140
+ usage,
141
+
142
+ // Methods
143
+ connect,
144
+ disconnect,
145
+ sendMessage,
146
+ sendAudio,
147
+ sendVideo,
148
+ startRecording,
149
+ stopRecording,
150
+
151
+ // Media controls
152
+ setAudioEnabled,
153
+ setVideoEnabled
154
+ } = useAStack(config);
155
+ ```
156
+
157
+ ## Advanced Usage
158
+
159
+ ### Custom Audio Processing
160
+
161
+ ```javascript
162
+ // Configure audio constraints
163
+ const client = new AStackClient({
164
+ sessionToken: 'token',
165
+ userId: 'user',
166
+ mediaConstraints: {
167
+ audio: {
168
+ echoCancellation: true,
169
+ noiseSuppression: true,
170
+ sampleRate: 48000
171
+ }
172
+ }
173
+ });
174
+
175
+ // Process audio before sending
176
+ client.on('audioInput', (audioData) => {
177
+ const processed = processAudio(audioData);
178
+ client.sendAudio(processed);
179
+ });
180
+ ```
181
+
182
+ ### Usage Monitoring
183
+
184
+ ```javascript
185
+ // Monitor usage in real-time
186
+ client.on('usage', (metrics) => {
187
+ console.log('Characters:', metrics.characterCount);
188
+ console.log('Audio minutes:', metrics.audioMinutes);
189
+ console.log('Session duration:', metrics.sessionDuration);
190
+ });
191
+
192
+ // Get cumulative usage
193
+ const totalUsage = client.getUsage();
194
+ ```
195
+
196
+ ### Error Handling
197
+
198
+ ```javascript
199
+ client.on('error', (error) => {
200
+ switch (error.code) {
201
+ case 'CONNECTION_FAILED':
202
+ // Handle connection errors
203
+ break;
204
+ case 'QUOTA_EXCEEDED':
205
+ // Handle usage limits
206
+ break;
207
+ case 'AUTHENTICATION_FAILED':
208
+ // Handle auth errors
209
+ break;
210
+ }
211
+ });
212
+ ```
213
+
214
+ ## Browser Support
215
+
216
+ - Chrome/Edge 88+
217
+ - Firefox 78+
218
+ - Safari 14+
219
+ - Mobile browsers with WebRTC support
220
+
221
+ ## Development
222
+
223
+ ```bash
224
+ # Install dependencies
225
+ npm install
226
+
227
+ # Run tests
228
+ npm test
229
+
230
+ # Build SDK
231
+ npm run build
232
+
233
+ # Development mode with watch
234
+ npm run dev
235
+
236
+ # Type checking
237
+ npm run typecheck
238
+
239
+ # Linting
240
+ npm run lint
241
+ ```
242
+
243
+ ## Examples
244
+
245
+ See the `examples/` directory for complete working examples:
246
+ - `basic-usage.html` - Vanilla JavaScript implementation
247
+ - `react-example.tsx` - React component with full UI
248
+
249
+ ## License
250
+
251
+ MIT © AStack Team
252
+
253
+ ## Support
254
+
255
+ - [Documentation](https://docs.astack.ai)
256
+ - [GitHub Issues](https://github.com/aether-stack/astack-mono/issues)
257
+ - [Discord Community](https://discord.gg/astack)
@@ -0,0 +1,60 @@
1
+ import { EventEmitter } from 'eventemitter3';
2
+ export interface AStackCSRConfig {
3
+ workerUrl: string;
4
+ sessionToken?: string;
5
+ sessionId?: string;
6
+ sampleRate?: number;
7
+ providers?: {
8
+ asr?: 'deepinfra' | 'self';
9
+ llm?: 'deepinfra' | 'self';
10
+ tts?: 'deepinfra' | 'self';
11
+ };
12
+ fps?: number;
13
+ enableImageCapture?: boolean;
14
+ imageCaptureInterval?: number;
15
+ }
16
+ export interface AStackCSREvents {
17
+ connected: () => void;
18
+ disconnected: () => void;
19
+ error: (error: Error) => void;
20
+ callStarted: () => void;
21
+ callStopped: () => void;
22
+ transcript: (text: string) => void;
23
+ response: (text: string) => void;
24
+ blendshapeUpdate: (blendshapes: number[]) => void;
25
+ playbackStarted: () => void;
26
+ playbackEnded: () => void;
27
+ modelStatus: (status: {
28
+ model_loaded?: boolean;
29
+ blendshape_count?: number;
30
+ }) => void;
31
+ }
32
+ export type CallStatus = 'idle' | 'starting' | 'active' | 'stopping' | 'error';
33
+ export declare class AStackCSRClient extends EventEmitter<AStackCSREvents> {
34
+ private config;
35
+ private ws;
36
+ private audioPlayer;
37
+ private audioContext;
38
+ private audioProcessor;
39
+ private mediaStream;
40
+ private videoRef;
41
+ private imageCaptureCanvas;
42
+ private imageCaptureInterval;
43
+ private callStatus;
44
+ private currentBlendshapes;
45
+ constructor(config: AStackCSRConfig);
46
+ private setupAudioPlayerEvents;
47
+ connect(): Promise<void>;
48
+ private handleMessage;
49
+ startCall(): Promise<void>;
50
+ private startImageCapture;
51
+ private captureAndSendImage;
52
+ stopCall(): void;
53
+ sendText(message: string): void;
54
+ disconnect(): void;
55
+ getCallStatus(): CallStatus;
56
+ getCurrentBlendshapes(): number[];
57
+ isConnected(): boolean;
58
+ destroy(): Promise<void>;
59
+ }
60
+ //# sourceMappingURL=AStackCSRClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AStackCSRClient.d.ts","sourceRoot":"","sources":["../src/AStackCSRClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAI7C,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE;QACV,GAAG,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;QAC3B,GAAG,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;QAC3B,GAAG,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;KAC5B,CAAC;IACF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,gBAAgB,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAClD,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,WAAW,EAAE,CAAC,MAAM,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACtF;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAE/E,qBAAa,eAAgB,SAAQ,YAAY,CAAC,eAAe,CAAC;IAChE,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,cAAc,CAAiC;IACvD,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,OAAO,CAAC,oBAAoB,CAA+B;IAC3D,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,kBAAkB,CAAiD;gBAE/D,MAAM,EAAE,eAAe;IAkBnC,OAAO,CAAC,sBAAsB;IAmBjB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwCrC,OAAO,CAAC,aAAa;IA+DR,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAyEvC,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,mBAAmB;IAsBpB,QAAQ,IAAI,IAAI;IAqChB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAW/B,UAAU,IAAI,IAAI;IAQlB,aAAa,IAAI,UAAU;IAI3B,qBAAqB,IAAI,MAAM,EAAE;IAIjC,WAAW,IAAI,OAAO;IAIhB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAKtC"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * @deprecated AStackClient is deprecated. Use AStackCSRClient for WebSocket-based communication.
3
+ * This class is kept for backwards compatibility only.
4
+ *
5
+ * Example:
6
+ * ```typescript
7
+ * import { AStackCSRClient } from '@astack/client-sdk';
8
+ * const client = new AStackCSRClient({ apiEndpoint: 'https://api.astack.com' });
9
+ * ```
10
+ */
11
+ import { EventEmitter } from 'eventemitter3';
12
+ import { ConnectionState, ConnectionQuality } from './ConnectionStateManager';
13
+ import { AStackConfig, SessionStatus, MediaStreamInfo, AStackEventName, AStackEventHandler, UsageMetrics, BillingInfo, PerformanceMetrics, PerformanceBenchmark, WorkerPreferences, WorkerInfo } from './types';
14
+ export declare class AStackClient extends EventEmitter {
15
+ private config;
16
+ private webrtc;
17
+ private signaling;
18
+ private sessionManager;
19
+ private usageTracker;
20
+ private billingMonitor;
21
+ private securityLogger;
22
+ private connectionStateManager;
23
+ private performanceMonitor;
24
+ private analyticsCollector;
25
+ private mediaController;
26
+ private sessionId;
27
+ private status;
28
+ private statsCollectionTimer?;
29
+ localVideoRef: HTMLVideoElement | null;
30
+ remoteVideoRef: HTMLVideoElement | null;
31
+ constructor(config: AStackConfig);
32
+ private initEventHandlers;
33
+ private startWebRTCStatsCollection;
34
+ private stopWebRTCStatsCollection;
35
+ private processWebRTCStats;
36
+ connect(): Promise<void>;
37
+ startVideo(): Promise<MediaStream>;
38
+ stopVideo(): Promise<void>;
39
+ startAudio(): Promise<MediaStream>;
40
+ stopAudio(): Promise<void>;
41
+ sendText(message: string): Promise<void>;
42
+ sendAudio(audioBlob: Blob): Promise<void>;
43
+ startRecording(): void;
44
+ stopRecording(): void;
45
+ getDevices(): Promise<MediaDeviceInfo[]>;
46
+ switchCamera(deviceId: string): Promise<void>;
47
+ switchMicrophone(deviceId: string): Promise<void>;
48
+ muteAudio(): void;
49
+ unmuteAudio(): void;
50
+ pauseVideo(): void;
51
+ resumeVideo(): void;
52
+ getSessionStatus(): SessionStatus;
53
+ getLocalStreams(): MediaStreamInfo[];
54
+ getRemoteStreams(): MediaStreamInfo[];
55
+ attachVideo(localVideo: HTMLVideoElement, remoteVideo: HTMLVideoElement): void;
56
+ addEventListener<T extends AStackEventName>(event: T, listener: AStackEventHandler<T>): this;
57
+ removeEventListener<T extends AStackEventName>(event: T, listener: AStackEventHandler<T>): this;
58
+ disconnect(): Promise<void>;
59
+ renewSession(): Promise<void>;
60
+ getSessionTimeRemaining(): number;
61
+ isSessionValid(): boolean;
62
+ getUsageMetrics(): UsageMetrics | null;
63
+ trackQualityScore(score: number): void;
64
+ getBillingInfo(): Promise<BillingInfo>;
65
+ getCurrentBillingInfo(): BillingInfo | undefined;
66
+ setBillingWarningThresholds(thresholds: {
67
+ creditBalance?: number;
68
+ usagePercentage?: number;
69
+ }): void;
70
+ getConnectionState(): ConnectionState;
71
+ getConnectionQuality(): ConnectionQuality;
72
+ isHealthy(): boolean;
73
+ getConnectionHistory(): Array<{
74
+ state: ConnectionState;
75
+ timestamp: Date;
76
+ }>;
77
+ getPerformanceMetrics(): PerformanceMetrics;
78
+ getPerformanceBenchmarks(): PerformanceBenchmark[];
79
+ recordPerformanceBenchmark(benchmark: Omit<PerformanceBenchmark, 'timestamp'>): void;
80
+ recordLatency(type: 'signaling' | 'webrtc' | 'audio' | 'video', latency: number): void;
81
+ reportPerformanceMetrics(): Promise<void>;
82
+ setWorkerPreferences(preferences: WorkerPreferences): void;
83
+ getWorkerPreferences(): WorkerPreferences | undefined;
84
+ getAssignedWorkerInfo(): WorkerInfo | undefined;
85
+ trackEvent(eventType: string, metadata?: Record<string, any>): void;
86
+ getSessionAnalytics(): any;
87
+ flushAnalytics(): Promise<void>;
88
+ destroy(): Promise<void>;
89
+ }
90
+ //# sourceMappingURL=AStackClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AStackClient.d.ts","sourceRoot":"","sources":["../src/AStackClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @deprecated This module is deprecated. Use AStackCSRClient for WebSocket-based communication.
3
+ * This file is kept for backwards compatibility only.
4
+ */
5
+ import { WebRTCManager } from './WebRTCManager';
6
+ import { SupabaseSignalingClient } from './SupabaseSignalingClient';
7
+ import { UsageTracker } from './UsageTracker';
8
+ import { ConnectionStateManager } from './ConnectionStateManager';
9
+ import { AnalyticsCollector } from './AnalyticsCollector';
10
+ import { SecurityLogger } from './SecurityLogger';
11
+ import { PerformanceMonitor } from './PerformanceMonitor';
12
+ import { SessionStatus } from './types';
13
+ import { EventEmitter } from 'eventemitter3';
14
+ export interface EventSetupDependencies {
15
+ webrtc: WebRTCManager;
16
+ signaling: SupabaseSignalingClient;
17
+ connectionStateManager: ConnectionStateManager;
18
+ analyticsCollector: AnalyticsCollector;
19
+ securityLogger: SecurityLogger;
20
+ performanceMonitor: PerformanceMonitor;
21
+ getUsageTracker: () => UsageTracker | null;
22
+ setUsageTracker: (tracker: UsageTracker) => void;
23
+ getSessionId: () => string | null;
24
+ getStatus: () => SessionStatus;
25
+ setStatus: (status: Partial<SessionStatus>) => void;
26
+ localVideoRef: HTMLVideoElement | null;
27
+ remoteVideoRef: HTMLVideoElement | null;
28
+ startStatsCollection: () => void;
29
+ stopStatsCollection: () => void;
30
+ }
31
+ /**
32
+ * @deprecated Use AStackCSRClient instead. This function is kept for backwards compatibility.
33
+ */
34
+ export declare function setupEventHandlers(emitter: EventEmitter, deps: EventSetupDependencies): void;
35
+ //# sourceMappingURL=AStackEventSetup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AStackEventSetup.d.ts","sourceRoot":"","sources":["../src/AStackEventSetup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAuC,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,uBAAuB,CAAC;IACnC,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,cAAc,EAAE,cAAc,CAAC;IAC/B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,MAAM,YAAY,GAAG,IAAI,CAAC;IAC3C,eAAe,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IACjD,YAAY,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAClC,SAAS,EAAE,MAAM,aAAa,CAAC;IAC/B,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;IACpD,aAAa,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACvC,cAAc,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACxC,oBAAoB,EAAE,MAAM,IAAI,CAAC;IACjC,mBAAmB,EAAE,MAAM,IAAI,CAAC;CACjC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,sBAAsB,GAC3B,IAAI,CA0EN"}
@@ -0,0 +1,34 @@
1
+ import { EventEmitter } from 'eventemitter3';
2
+ import { WebRTCManager } from './WebRTCManager';
3
+ import { SupabaseSignalingClient } from './SupabaseSignalingClient';
4
+ import { AnalyticsCollector } from './AnalyticsCollector';
5
+ import { AStackConfig, MediaStreamInfo } from './types';
6
+ export declare class AStackMediaController {
7
+ private webrtc;
8
+ private signaling;
9
+ private analyticsCollector;
10
+ private config;
11
+ private emitter;
12
+ private audioRecorder;
13
+ private isRecording;
14
+ constructor(webrtc: WebRTCManager, signaling: SupabaseSignalingClient, analyticsCollector: AnalyticsCollector, config: AStackConfig, emitter: EventEmitter);
15
+ startVideo(): Promise<MediaStream>;
16
+ stopVideo(localVideoRef: HTMLVideoElement | null): Promise<void>;
17
+ startAudio(): Promise<MediaStream>;
18
+ stopAudio(): Promise<void>;
19
+ sendText(message: string): Promise<void>;
20
+ sendAudio(audioBlob: Blob): Promise<void>;
21
+ startRecording(): void;
22
+ stopRecording(): void;
23
+ getIsRecording(): boolean;
24
+ getDevices(): Promise<MediaDeviceInfo[]>;
25
+ switchCamera(deviceId: string): Promise<void>;
26
+ switchMicrophone(deviceId: string): Promise<void>;
27
+ muteAudio(): void;
28
+ unmuteAudio(): void;
29
+ pauseVideo(): void;
30
+ resumeVideo(): void;
31
+ getLocalStreams(): MediaStreamInfo[];
32
+ getRemoteStreams(): MediaStreamInfo[];
33
+ }
34
+ //# sourceMappingURL=AStackMediaController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AStackMediaController.d.ts","sourceRoot":"","sources":["../src/AStackMediaController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAA2B,eAAe,EAAE,MAAM,SAAS,CAAC;AAEjF,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,WAAW,CAAkB;gBAGnC,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,uBAAuB,EAClC,kBAAkB,EAAE,kBAAkB,EACtC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,YAAY;IASjB,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;IAgBlC,SAAS,CAAC,aAAa,EAAE,gBAAgB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAahE,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;IAgBlC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAa1B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYxC,SAAS,CAAC,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAY/C,cAAc,IAAI,IAAI;IAsBtB,aAAa,IAAI,IAAI;IAOrB,cAAc,IAAI,OAAO;IAInB,UAAU,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAIxC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD,SAAS,IAAI,IAAI;IAIjB,WAAW,IAAI,IAAI;IAInB,UAAU,IAAI,IAAI;IAIlB,WAAW,IAAI,IAAI;IAInB,eAAe,IAAI,eAAe,EAAE;IAIpC,gBAAgB,IAAI,eAAe,EAAE;CAGtC"}
@@ -0,0 +1,63 @@
1
+ import { EventEmitter } from 'eventemitter3';
2
+ export interface AnalyticsEvent {
3
+ eventType: string;
4
+ timestamp: Date;
5
+ sessionId?: string;
6
+ userId?: string;
7
+ organizationId?: string;
8
+ metadata: Record<string, any>;
9
+ }
10
+ export interface SessionAnalytics {
11
+ sessionId: string;
12
+ startTime: Date;
13
+ endTime?: Date;
14
+ duration: number;
15
+ eventsCount: number;
16
+ errorCount: number;
17
+ mediaTypes: string[];
18
+ connectionQuality: number;
19
+ dataTransferred: {
20
+ audio: {
21
+ sent: number;
22
+ received: number;
23
+ };
24
+ video: {
25
+ sent: number;
26
+ received: number;
27
+ };
28
+ text: {
29
+ sent: number;
30
+ received: number;
31
+ };
32
+ };
33
+ }
34
+ export interface AnalyticsCollectorConfig {
35
+ enableAutoFlush?: boolean;
36
+ flushInterval?: number;
37
+ batchSize?: number;
38
+ apiEndpoint: string;
39
+ apiKey: string;
40
+ sessionId?: string;
41
+ userId?: string;
42
+ organizationId?: string;
43
+ }
44
+ export declare class AnalyticsCollector extends EventEmitter {
45
+ private config;
46
+ private events;
47
+ private sessionAnalytics;
48
+ private flushTimer?;
49
+ private isCollecting;
50
+ constructor(config: AnalyticsCollectorConfig);
51
+ startSession(sessionId: string): void;
52
+ endSession(): void;
53
+ trackEvent(eventType: string, metadata?: Record<string, any>): void;
54
+ updateMediaTypes(mediaTypes: string[]): void;
55
+ updateConnectionQuality(quality: number): void;
56
+ updateDataTransferred(type: 'audio' | 'video' | 'text', direction: 'sent' | 'received', bytes: number): void;
57
+ getSessionAnalytics(): SessionAnalytics | null;
58
+ getEvents(): AnalyticsEvent[];
59
+ flush(): Promise<void>;
60
+ private sendSessionAnalytics;
61
+ destroy(): void;
62
+ }
63
+ //# sourceMappingURL=AnalyticsCollector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalyticsCollector.d.ts","sourceRoot":"","sources":["../src/AnalyticsCollector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE;QACf,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC;QAC1C,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC;QAC1C,IAAI,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC;KAC1C,CAAC;CACH;AAED,MAAM,WAAW,wBAAwB;IACvC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,UAAU,CAAC,CAAiB;IACpC,OAAO,CAAC,YAAY,CAAS;gBAEjB,MAAM,EAAE,wBAAwB;IAarC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAgCrC,UAAU,IAAI,IAAI;IAsBlB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,IAAI;IA2BvE,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI;IAM5C,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQ9C,qBAAqB,CAC1B,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,EAChC,SAAS,EAAE,MAAM,GAAG,UAAU,EAC9B,KAAK,EAAE,MAAM,GACZ,IAAI;IAMA,mBAAmB,IAAI,gBAAgB,GAAG,IAAI;IAW9C,SAAS,IAAI,cAAc,EAAE;IAIvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YA6BrB,oBAAoB;IAuB3B,OAAO,IAAI,IAAI;CAcvB"}
@@ -0,0 +1,35 @@
1
+ import { BillingInfo } from './types';
2
+ export interface BillingUpdateCallback {
3
+ (info: BillingInfo): void;
4
+ }
5
+ export interface BillingAlertCallback {
6
+ (alert: {
7
+ type: 'low_balance' | 'limit_exceeded';
8
+ details: any;
9
+ }): void;
10
+ }
11
+ export declare class BillingMonitor {
12
+ private apiEndpoint;
13
+ private apiKey;
14
+ private billingInfo?;
15
+ private updateCallbacks;
16
+ private alertCallbacks;
17
+ private checkInterval?;
18
+ private warningThresholds;
19
+ constructor(apiEndpoint: string, apiKey: string);
20
+ fetchBillingInfo(): Promise<BillingInfo>;
21
+ private updateBillingInfo;
22
+ private checkForAlerts;
23
+ private triggerAlert;
24
+ startMonitoring(intervalMs?: number): void;
25
+ stopMonitoring(): void;
26
+ onUpdate(callback: BillingUpdateCallback): void;
27
+ onAlert(callback: BillingAlertCallback): void;
28
+ removeUpdateCallback(callback: BillingUpdateCallback): void;
29
+ removeAlertCallback(callback: BillingAlertCallback): void;
30
+ getCurrentBillingInfo(): BillingInfo | undefined;
31
+ setWarningThresholds(thresholds: Partial<typeof this.warningThresholds>): void;
32
+ checkRateLimit(): Promise<boolean>;
33
+ destroy(): void;
34
+ }
35
+ //# sourceMappingURL=BillingMonitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BillingMonitor.d.ts","sourceRoot":"","sources":["../src/BillingMonitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,MAAM,WAAW,qBAAqB;IACpC,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,aAAa,GAAG,gBAAgB,CAAC;QAAC,OAAO,EAAE,GAAG,CAAA;KAAE,GAAG,IAAI,CAAC;CACzE;AAED,qBAAa,cAAc;IAUb,OAAO,CAAC,WAAW;IAAU,OAAO,CAAC,MAAM;IATvD,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,aAAa,CAAC,CAAiB;IACvC,OAAO,CAAC,iBAAiB,CAGvB;gBAEkB,WAAW,EAAE,MAAM,EAAU,MAAM,EAAE,MAAM;IAEzD,gBAAgB,IAAI,OAAO,CAAC,WAAW,CAAC;IAqB9C,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,cAAc;IAmCtB,OAAO,CAAC,YAAY;IAIpB,eAAe,CAAC,UAAU,GAAE,MAAc,GAAG,IAAI;IAUjD,cAAc,IAAI,IAAI;IAOtB,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI;IAI/C,OAAO,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAI7C,oBAAoB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI;IAI3D,mBAAmB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAIzD,qBAAqB,IAAI,WAAW,GAAG,SAAS;IAIhD,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAIxE,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAKxC,OAAO,IAAI,IAAI;CAKhB"}
@@ -0,0 +1,48 @@
1
+ import { EventEmitter } from 'eventemitter3';
2
+ export interface ConnectionState {
3
+ signaling: 'disconnected' | 'connecting' | 'connected' | 'reconnecting';
4
+ websocket: 'new' | 'connecting' | 'connected' | 'disconnected' | 'failed' | 'closed';
5
+ overall: 'disconnected' | 'connecting' | 'connected' | 'degraded' | 'error';
6
+ lastActivity: Date;
7
+ reconnectAttempts: number;
8
+ errors: Error[];
9
+ }
10
+ export interface ConnectionQuality {
11
+ latency?: number;
12
+ jitter?: number;
13
+ packetLoss?: number;
14
+ bandwidth?: number;
15
+ qualityScore: number;
16
+ }
17
+ export declare class ConnectionStateManager extends EventEmitter {
18
+ private state;
19
+ private quality;
20
+ private healthCheckInterval?;
21
+ private stateHistory;
22
+ private maxHistorySize;
23
+ constructor();
24
+ updateSignalingState(state: ConnectionState['signaling']): void;
25
+ updateWebSocketState(state: ConnectionState['websocket']): void;
26
+ updateWebRTCState(state: string): void;
27
+ updateICEState(state: string): void;
28
+ private updateOverallState;
29
+ addError(error: Error): void;
30
+ clearErrors(): void;
31
+ updateConnectionQuality(stats: Partial<ConnectionQuality>): void;
32
+ private calculateQualityScore;
33
+ startHealthCheck(intervalMs?: number): void;
34
+ stopHealthCheck(): void;
35
+ private addToHistory;
36
+ getState(): ConnectionState;
37
+ getQuality(): ConnectionQuality;
38
+ getStateHistory(): Array<{
39
+ state: ConnectionState;
40
+ timestamp: Date;
41
+ }>;
42
+ isConnected(): boolean;
43
+ isHealthy(): boolean;
44
+ getReconnectAttempts(): number;
45
+ reset(): void;
46
+ destroy(): void;
47
+ }
48
+ //# sourceMappingURL=ConnectionStateManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectionStateManager.d.ts","sourceRoot":"","sources":["../src/ConnectionStateManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,cAAc,CAAC;IACxE,SAAS,EAAE,KAAK,GAAG,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACrF,OAAO,EAAE,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC;IAC5E,YAAY,EAAE,IAAI,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,sBAAuB,SAAQ,YAAY;IACtD,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,mBAAmB,CAAC,CAAiB;IAC7C,OAAO,CAAC,YAAY,CAA0D;IAC9E,OAAO,CAAC,cAAc,CAAO;;IAmB7B,oBAAoB,CAAC,KAAK,EAAE,eAAe,CAAC,WAAW,CAAC,GAAG,IAAI;IAmB/D,oBAAoB,CAAC,KAAK,EAAE,eAAe,CAAC,WAAW,CAAC,GAAG,IAAI;IAa/D,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAItC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAInC,OAAO,CAAC,kBAAkB;IAsB1B,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAS5B,WAAW,IAAI,IAAI;IAKnB,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAehE,OAAO,CAAC,qBAAqB;IAuC7B,gBAAgB,CAAC,UAAU,GAAE,MAAa,GAAG,IAAI;IAYjD,eAAe,IAAI,IAAI;IAOvB,OAAO,CAAC,YAAY;IAWpB,QAAQ,IAAI,eAAe;IAI3B,UAAU,IAAI,iBAAiB;IAI/B,eAAe,IAAI,KAAK,CAAC;QAAE,KAAK,EAAE,eAAe,CAAC;QAAC,SAAS,EAAE,IAAI,CAAA;KAAE,CAAC;IAIrE,WAAW,IAAI,OAAO;IAItB,SAAS,IAAI,OAAO;IAMpB,oBAAoB,IAAI,MAAM;IAI9B,KAAK,IAAI,IAAI;IAkBb,OAAO,IAAI,IAAI;CAIhB"}