astack-client-sdk
v1.0.0
Published
JavaScript/TypeScript SDK for AStack video-to-video AI conversations
Maintainers
Readme
AStack Client SDK
JavaScript/TypeScript SDK for integrating AStack's real-time conversational AI into web applications.
Features
- 🎥 Real-time WebRTC - Low-latency audio/video communication
- 🤖 AI Conversations - Text, voice, and video input support
- ⚡ <1s Latency - Optimized for real-time interactions
- 🔒 Secure Sessions - Token-based authentication
- 📊 Usage Tracking - Built-in metrics and analytics
- ⚛️ React Support - Hooks for easy React integration
- 🔄 Auto-Reconnect - Resilient connection handling
- 📱 Cross-Platform - Works in all modern browsers
Installation
npm install @astack/client-sdkQuick Start
Vanilla JavaScript
import { AStackClient } from '@astack/client-sdk';
// Initialize client
const client = new AStackClient({
sessionToken: 'your-session-token',
userId: 'user-id'
});
// Handle events
client.on('message', (message) => {
console.log('AI response:', message.text);
});
client.on('audio', (audioData) => {
// Handle audio response
});
// Start conversation
await client.connect();
// Send text message
await client.sendMessage('Hello, AI assistant!');
// Send audio
await client.sendAudio(audioBlob);
// Disconnect when done
await client.disconnect();React
import { useAStack } from '@astack/client-sdk/react';
function ChatComponent() {
const {
isConnected,
isLoading,
messages,
sendMessage,
sendAudio,
startRecording,
stopRecording
} = useAStack({
sessionToken: 'your-session-token',
userId: 'user-id'
});
return (
<div>
{messages.map((msg) => (
<div key={msg.id}>
{msg.role}: {msg.text}
</div>
))}
<button onClick={() => sendMessage('Hello!')}>
Send Message
</button>
</div>
);
}API Reference
AStackClient
Main client class for managing AI conversations.
Constructor
new AStackClient(config: AStackClientConfig)Config Options:
sessionToken(string, required) - Authentication token from developer SDKuserId(string, required) - Unique user identifierdebug(boolean) - Enable debug loggingreconnectAttempts(number) - Max reconnection attempts (default: 3)reconnectDelay(number) - Delay between reconnects in ms (default: 1000)
Methods
connect()- Establish WebRTC connectiondisconnect()- Close connection and cleanupsendMessage(text: string)- Send text messagesendAudio(audio: Blob | ArrayBuffer)- Send audio datasendVideo(video: Blob)- Send video framesetAudioEnabled(enabled: boolean)- Toggle audio inputsetVideoEnabled(enabled: boolean)- Toggle video input
Events
connected- Connection establisheddisconnected- Connection closederror- Error occurredmessage- Text response receivedaudio- Audio response receivedvideo- Video response receivedusage- Usage metrics update
React Hook
const {
// State
isConnected,
isLoading,
error,
messages,
usage,
// Methods
connect,
disconnect,
sendMessage,
sendAudio,
sendVideo,
startRecording,
stopRecording,
// Media controls
setAudioEnabled,
setVideoEnabled
} = useAStack(config);Advanced Usage
Custom Audio Processing
// Configure audio constraints
const client = new AStackClient({
sessionToken: 'token',
userId: 'user',
mediaConstraints: {
audio: {
echoCancellation: true,
noiseSuppression: true,
sampleRate: 48000
}
}
});
// Process audio before sending
client.on('audioInput', (audioData) => {
const processed = processAudio(audioData);
client.sendAudio(processed);
});Usage Monitoring
// Monitor usage in real-time
client.on('usage', (metrics) => {
console.log('Characters:', metrics.characterCount);
console.log('Audio minutes:', metrics.audioMinutes);
console.log('Session duration:', metrics.sessionDuration);
});
// Get cumulative usage
const totalUsage = client.getUsage();Error Handling
client.on('error', (error) => {
switch (error.code) {
case 'CONNECTION_FAILED':
// Handle connection errors
break;
case 'QUOTA_EXCEEDED':
// Handle usage limits
break;
case 'AUTHENTICATION_FAILED':
// Handle auth errors
break;
}
});Browser Support
- Chrome/Edge 88+
- Firefox 78+
- Safari 14+
- Mobile browsers with WebRTC support
Development
# Install dependencies
npm install
# Run tests
npm test
# Build SDK
npm run build
# Development mode with watch
npm run dev
# Type checking
npm run typecheck
# Linting
npm run lintExamples
See the examples/ directory for complete working examples:
basic-usage.html- Vanilla JavaScript implementationreact-example.tsx- React component with full UI
License
MIT © AStack Team
