@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.
- package/README.md +257 -0
- package/dist/AStackCSRClient.d.ts +60 -0
- package/dist/AStackCSRClient.d.ts.map +1 -0
- package/dist/AStackClient.d.ts +90 -0
- package/dist/AStackClient.d.ts.map +1 -0
- package/dist/AStackEventSetup.d.ts +35 -0
- package/dist/AStackEventSetup.d.ts.map +1 -0
- package/dist/AStackMediaController.d.ts +34 -0
- package/dist/AStackMediaController.d.ts.map +1 -0
- package/dist/AnalyticsCollector.d.ts +63 -0
- package/dist/AnalyticsCollector.d.ts.map +1 -0
- package/dist/BillingMonitor.d.ts +35 -0
- package/dist/BillingMonitor.d.ts.map +1 -0
- package/dist/ConnectionStateManager.d.ts +48 -0
- package/dist/ConnectionStateManager.d.ts.map +1 -0
- package/dist/PerformanceMonitor.d.ts +34 -0
- package/dist/PerformanceMonitor.d.ts.map +1 -0
- package/dist/SecurityLogger.d.ts +30 -0
- package/dist/SecurityLogger.d.ts.map +1 -0
- package/dist/SessionManager.d.ts +20 -0
- package/dist/SessionManager.d.ts.map +1 -0
- package/dist/SupabaseSignalingClient.d.ts +35 -0
- package/dist/SupabaseSignalingClient.d.ts.map +1 -0
- package/dist/UsageTracker.d.ts +22 -0
- package/dist/UsageTracker.d.ts.map +1 -0
- package/dist/WebRTCManager.d.ts +26 -0
- package/dist/WebRTCManager.d.ts.map +1 -0
- package/dist/__tests__/setup.d.ts +32 -0
- package/dist/__tests__/setup.d.ts.map +1 -0
- package/dist/audio/AudioPlayer.d.ts +27 -0
- package/dist/audio/AudioPlayer.d.ts.map +1 -0
- package/dist/audio/index.d.ts +3 -0
- package/dist/audio/index.d.ts.map +1 -0
- package/dist/avatar/TalkingHeadAvatar.d.ts +9 -0
- package/dist/avatar/TalkingHeadAvatar.d.ts.map +1 -0
- package/dist/avatar/VRMAvatar.d.ts +10 -0
- package/dist/avatar/VRMAvatar.d.ts.map +1 -0
- package/dist/avatar/constants.d.ts +4 -0
- package/dist/avatar/constants.d.ts.map +1 -0
- package/dist/avatar/index.d.ts +7 -0
- package/dist/avatar/index.d.ts.map +1 -0
- package/dist/core.d.ts +14 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.esm.js +2245 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +2258 -0
- package/dist/index.js.map +1 -0
- package/dist/react/index.d.ts +9 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/useAStack.d.ts +34 -0
- package/dist/react/useAStack.d.ts.map +1 -0
- package/dist/react/useAStackCSR.d.ts +20 -0
- package/dist/react/useAStackCSR.d.ts.map +1 -0
- package/dist/react.esm.js +2871 -0
- package/dist/react.esm.js.map +1 -0
- package/dist/react.js +2895 -0
- package/dist/react.js.map +1 -0
- package/dist/types.d.ts +221 -0
- package/dist/types.d.ts.map +1 -0
- 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"}
|