@dora-cell/sdk 0.1.1-beta.6
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 +276 -0
- package/dist/index.d.mts +210 -0
- package/dist/index.d.ts +210 -0
- package/dist/index.js +664 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +645 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types/index.ts","../src/core/AuthProvider.ts","../src/utils/phoneFormatter.ts","../src/core/CallManager.ts","../src/core/DoraCell.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Core TypeScript type definitions for Dora Cell SDK\n */\n\n// ============================================\n// Configuration Types\n// ============================================\n\nexport interface ApiTokenAuth {\n type: 'api-token';\n apiToken: string;\n apiBaseUrl?: string;\n}\n\nexport interface DirectCredentialsAuth {\n type: 'direct';\n sipUri: string;\n password: string;\n wsUrl: string;\n}\n\nexport type AuthConfig = ApiTokenAuth | DirectCredentialsAuth;\n\nexport interface DoraCellConfig {\n auth: AuthConfig;\n sipServer?: string;\n turnServers?: RTCIceServer[];\n debug?: boolean;\n autoSelectExtension?: boolean; // Auto-select first available extension\n}\n\n// ============================================\n// SIP Credentials\n// ============================================\n\nexport interface SipCredentials {\n wsUrl: string;\n sipUri: string;\n password: string;\n sipDomain?: string;\n extensions?: Extension[];\n expiresIn?: number;\n}\n\nexport interface Extension {\n extension: string;\n displayName?: string;\n isPrimary?: boolean;\n}\n\n// ============================================\n// Call Types\n// ============================================\n\nexport type CallStatus = 'idle' | 'connecting' | 'ringing' | 'ongoing' | 'ended';\n\nexport type CallDirection = 'inbound' | 'outbound';\n\nexport interface CallOptions {\n extension?: string; // Specific extension to use for this call\n mediaConstraints?: MediaStreamConstraints;\n}\n\nexport interface Call {\n id: string;\n status: CallStatus;\n direction: CallDirection;\n remoteNumber: string;\n localExtension: string;\n duration: number;\n startTime?: number;\n endTime?: number;\n\n // Methods\n mute(): void;\n unmute(): void;\n hangup(): void;\n isMuted(): boolean;\n}\n\n// ============================================\n// Connection Status\n// ============================================\n\nexport type ConnectionStatus =\n | 'disconnected'\n | 'connecting'\n | 'connected'\n | 'registered'\n | 'registrationFailed';\n\nexport interface ConnectionState {\n status: ConnectionStatus;\n extension?: string;\n error?: string;\n}\n\n// ============================================\n// Events\n// ============================================\n\nexport type DoraCellEventMap = {\n 'connection:status': (state: ConnectionState) => void;\n 'call:incoming': (call: Call) => void;\n 'call:outgoing': (call: Call) => void;\n 'call:ringing': (call: Call) => void;\n 'call:connected': (call: Call) => void;\n 'call:ended': (call: Call, reason?: string) => void;\n 'call:failed': (call: Call, error: string) => void;\n 'error': (error: Error) => void;\n};\n\nexport type DoraCellEvent = keyof DoraCellEventMap;\n\n// ============================================\n// API Response Types\n// ============================================\n\nexport interface ApiTokenResponse {\n ws_url?: string;\n wsUrl?: string;\n sip_uri?: string;\n sipUri?: string;\n password?: string;\n sip_domain?: string;\n sipDomain?: string;\n extensions?: Extension[];\n expires_in?: number;\n expiresIn?: number;\n}\n\n// ============================================\n// Error Types\n// ============================================\n\nexport class DoraCellError extends Error {\n constructor(\n message: string,\n public code?: string,\n public details?: any\n ) {\n super(message);\n this.name = 'DoraCellError';\n }\n}\n\nexport class AuthenticationError extends DoraCellError {\n constructor(message: string, details?: any) {\n super(message, 'AUTH_ERROR', details);\n this.name = 'AuthenticationError';\n }\n}\n\nexport class CallError extends DoraCellError {\n constructor(message: string, details?: any) {\n super(message, 'CALL_ERROR', details);\n this.name = 'CallError';\n }\n}\n\nexport class ConnectionError extends DoraCellError {\n constructor(message: string, details?: any) {\n super(message, 'CONNECTION_ERROR', details);\n this.name = 'ConnectionError';\n }\n}\n","/**\n * Authentication provider for API token-based authentication\n */\n\nimport type {\n AuthConfig,\n SipCredentials,\n ApiTokenResponse,\n Extension,\n} from '../types';\nimport { AuthenticationError } from '../types';\n\nexport interface AuthProvider {\n authenticate(config: AuthConfig): Promise<SipCredentials>;\n refreshCredentials?(): Promise<SipCredentials>;\n isAuthenticated(): boolean;\n}\n\n/**\n * API Token Authentication Provider\n * Exchanges API token for SIP credentials via backend API\n */\nexport class ApiTokenAuthProvider implements AuthProvider {\n private credentials: SipCredentials | null = null;\n private apiToken: string;\n private apiBaseUrl: string;\n\n constructor(apiToken: string, apiBaseUrl?: string) {\n this.apiToken = apiToken;\n this.apiBaseUrl = apiBaseUrl || process.env.NEXT_PUBLIC_BASE_API_URL || '';\n }\n\n async authenticate(config: AuthConfig): Promise<SipCredentials> {\n if (config.type !== 'api-token') {\n throw new AuthenticationError('Invalid auth config type for ApiTokenAuthProvider');\n }\n\n try {\n const response = await fetch(`${this.apiBaseUrl}/api/sip-credentials`, {\n method: 'GET',\n headers: {\n 'Authorization': `Bearer ${this.apiToken}`,\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n },\n credentials: 'include',\n });\n\n if (!response.ok) {\n if (response.status === 401 || response.status === 403) {\n throw new AuthenticationError(\n 'Invalid API token or insufficient permissions',\n { status: response.status }\n );\n }\n throw new AuthenticationError(\n `Failed to fetch SIP credentials: ${response.status}`,\n { status: response.status }\n );\n }\n\n const data: ApiTokenResponse = await response.json();\n this.credentials = this.parseCredentials(data);\n return this.credentials;\n } catch (error) {\n if (error instanceof AuthenticationError) {\n throw error;\n }\n throw new AuthenticationError(\n `Authentication failed: ${error instanceof Error ? error.message : 'Unknown error'}`,\n { originalError: error }\n );\n }\n }\n\n async refreshCredentials(): Promise<SipCredentials> {\n // Re-authenticate to get fresh credentials\n return this.authenticate({ type: 'api-token', apiToken: this.apiToken });\n }\n\n isAuthenticated(): boolean {\n return this.credentials !== null;\n }\n\n private parseCredentials(data: ApiTokenResponse): SipCredentials {\n const wsUrl = data.ws_url || data.wsUrl;\n const sipUri = data.sip_uri || data.sipUri;\n const password = data.password;\n const sipDomain = data.sip_domain || data.sipDomain;\n const extensions = data.extensions;\n const expiresIn = data.expires_in || data.expiresIn;\n\n if (!wsUrl || !sipUri) {\n throw new AuthenticationError(\n 'Invalid credentials response: missing ws_url or sip_uri'\n );\n }\n\n return {\n wsUrl,\n sipUri,\n password: password || '',\n sipDomain,\n extensions,\n expiresIn,\n };\n }\n}\n\n/**\n * Direct Credentials Authentication Provider\n * Uses credentials provided directly in configuration\n */\nexport class DirectCredentialsAuthProvider implements AuthProvider {\n private credentials: SipCredentials | null = null;\n\n async authenticate(config: AuthConfig): Promise<SipCredentials> {\n if (config.type !== 'direct') {\n throw new AuthenticationError('Invalid auth config type for DirectCredentialsAuthProvider');\n }\n\n this.credentials = {\n wsUrl: config.wsUrl,\n sipUri: config.sipUri,\n password: config.password,\n };\n\n return this.credentials;\n }\n\n isAuthenticated(): boolean {\n return this.credentials !== null;\n }\n}\n\n/**\n * Factory function to create appropriate auth provider\n */\nexport function createAuthProvider(config: AuthConfig): AuthProvider {\n switch (config.type) {\n case 'api-token':\n return new ApiTokenAuthProvider(config.apiToken, config.apiBaseUrl);\n case 'direct':\n return new DirectCredentialsAuthProvider();\n default:\n throw new AuthenticationError('Unknown authentication type');\n }\n}\n","/**\n * Phone number formatting utilities\n * Extracted from JsSIPProvider.tsx\n */\n\n/**\n * Format a phone number to SIP URI format\n * Handles Nigerian numbers, international format, and local extensions\n */\nexport function formatPhoneToSIP(phone: string, sipDomain: string): string {\n // Strip all non-numeric characters\n let cleaned = phone.replace(/\\D/g, '');\n\n // Case 1: Short local extension (like \"101\", \"102\", etc.)\n if (cleaned.length <= 4) {\n return `sip:${cleaned}@${sipDomain}`;\n }\n\n // Case 2: Nigerian number starting with 0 (like \"08012345678\")\n if (cleaned.startsWith('0')) {\n cleaned = '234' + cleaned.substring(1);\n return `sip:${cleaned}@${sipDomain}`;\n }\n\n // Case 3: Already in international format (starts with 234)\n if (cleaned.startsWith('234')) {\n return `sip:${cleaned}@${sipDomain}`;\n }\n\n // Case 4: Any other number - assume it needs 234 prefix\n cleaned = '234' + cleaned;\n return `sip:${cleaned}@${sipDomain}`;\n}\n\n/**\n * Normalize a phone number to E.164 format\n */\nexport function normalizePhoneNumber(\n phone: string,\n countryCode: string = '234'\n): string {\n let cleaned = phone.replace(/\\D/g, '');\n\n // If it's a short extension, return as-is\n if (cleaned.length <= 4) {\n return cleaned;\n }\n\n // Remove leading 0 and add country code\n if (cleaned.startsWith('0')) {\n return countryCode + cleaned.substring(1);\n }\n\n // If already has country code, return as-is\n if (cleaned.startsWith(countryCode)) {\n return cleaned;\n }\n\n // Otherwise add country code\n return countryCode + cleaned;\n}\n\n/**\n * Extract extension/number from SIP URI\n */\nexport function extractNumberFromSipUri(sipUri: string): string {\n const match = sipUri.match(/sip:([^@]+)@/);\n return match ? match[1] : sipUri;\n}\n\n/**\n * Validate phone number format\n */\nexport function isValidPhoneNumber(phone: string, minLength: number = 3): boolean {\n const cleaned = phone.replace(/\\D/g, '');\n return cleaned.length >= minLength;\n}\n","/**\n * Call Manager - Handles individual call sessions\n * Extracted and refactored from JsSIPProvider.tsx\n */\n\nimport type {\n Call,\n CallStatus,\n CallDirection,\n CallOptions,\n SipCredentials,\n} from '../types';\nimport { CallError } from '../types';\nimport { formatPhoneToSIP } from '../utils/phoneFormatter';\nimport EventEmitter from 'eventemitter3';\n\nexport interface CallConfig {\n pcConfig: RTCConfiguration;\n mediaConstraints?: MediaStreamConstraints;\n}\n\nexport class CallSession implements Call {\n public id: string;\n public status: CallStatus = 'idle';\n public direction: CallDirection;\n public remoteNumber: string;\n public localExtension: string;\n public duration: number = 0;\n public startTime?: number;\n public endTime?: number;\n\n private session: any; // JsSIP RTCSession\n private _isMuted: boolean = false;\n private remoteStreamValue: MediaStream | null = null;\n private durationInterval?: number;\n private events: EventEmitter;\n\n constructor(\n session: any,\n direction: CallDirection,\n remoteNumber: string,\n localExtension: string,\n events: EventEmitter\n ) {\n this.id = this.generateCallId();\n this.session = session;\n this.direction = direction;\n this.remoteNumber = remoteNumber;\n this.localExtension = localExtension;\n this.events = events;\n\n this.setupSessionHandlers();\n }\n\n private generateCallId(): string {\n return `call_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n }\n\n private setupSessionHandlers(): void {\n // Progress event (ringing)\n this.session.on('progress', (evt: any) => {\n const code = evt.response?.status_code;\n if (code === 180 || code === 183) {\n this.status = 'ringing';\n this.events.emit('call:ringing', this);\n }\n });\n\n // Call confirmed (connected)\n this.session.on('confirmed', () => {\n this.status = 'ongoing';\n this.startTime = Date.now();\n this.startDurationTimer();\n this.events.emit('call:connected', this);\n });\n\n // Peer connection setup\n this.session.on('peerconnection', (evt: any) => {\n evt.peerconnection.ontrack = (event: any) => {\n if (event.streams && event.streams[0]) {\n this.remoteStreamValue = event.streams[0];\n }\n };\n });\n\n // Call ended\n this.session.on('ended', (evt: any) => {\n this.handleCallEnd(evt?.cause);\n });\n\n // Call failed\n this.session.on('failed', (evt: any) => {\n this.handleCallEnd(evt?.cause || 'Call failed');\n });\n\n // Call rejected\n this.session.on('rejected', (evt: any) => {\n this.handleCallEnd(evt?.cause || 'Call rejected');\n });\n }\n\n private handleCallEnd(reason?: string): void {\n this.status = 'ended';\n this.endTime = Date.now();\n this.stopDurationTimer();\n this.remoteStreamValue = null;\n this._isMuted = false;\n this.events.emit('call:ended', this, reason);\n }\n\n private startDurationTimer(): void {\n this.durationInterval = window.setInterval(() => {\n if (this.startTime) {\n this.duration = Math.floor((Date.now() - this.startTime) / 1000);\n }\n }, 1000);\n }\n\n private stopDurationTimer(): void {\n if (this.durationInterval) {\n clearInterval(this.durationInterval);\n this.durationInterval = undefined;\n }\n }\n\n // Public methods\n mute(): void {\n if (this.session && !this._isMuted) {\n this.session.mute({ audio: true });\n this._isMuted = true;\n }\n }\n\n unmute(): void {\n if (this.session && this._isMuted) {\n this.session.unmute({ audio: true });\n this._isMuted = false;\n }\n }\n\n hangup(): void {\n if (this.session) {\n this.session.terminate();\n }\n }\n\n isMuted(): boolean {\n return this._isMuted;\n }\n\n getRemoteStream(): MediaStream | null {\n return this.remoteStreamValue;\n }\n\n getFormattedDuration(): string {\n const mm = String(Math.floor(this.duration / 60)).padStart(2, '0');\n const ss = String(this.duration % 60).padStart(2, '0');\n return `${mm}:${ss}`;\n }\n\n destroy(): void {\n this.stopDurationTimer();\n this.session = null;\n this.remoteStreamValue = null;\n }\n}\n\n/**\n * Call Manager - Manages call sessions and JsSIP integration\n */\nexport class CallManager {\n private ua: any | null = null; // JsSIP User Agent\n private currentCall: CallSession | null = null;\n private credentials: SipCredentials;\n private events: EventEmitter;\n private callConfig: CallConfig;\n\n constructor(\n credentials: SipCredentials,\n events: EventEmitter,\n callConfig: CallConfig\n ) {\n this.credentials = credentials;\n this.events = events;\n this.callConfig = callConfig;\n }\n\n setUserAgent(ua: any): void {\n this.ua = ua;\n }\n\n /**\n * Initiate an outbound call\n */\n async initiateCall(\n targetNumber: string,\n options?: CallOptions\n ): Promise<CallSession> {\n if (!this.ua) {\n throw new CallError('User Agent not initialized');\n }\n\n if (this.currentCall && this.currentCall.status !== 'ended') {\n throw new CallError('A call is already in progress');\n }\n\n try {\n // Request microphone permission\n await navigator.mediaDevices.getUserMedia({ audio: true });\n\n // Determine which extension to use\n const extension = options?.extension || this.getDefaultExtension();\n\n // Format the target number to SIP URI\n const sipDomain = this.extractDomain(this.credentials.sipUri);\n const sipTarget = formatPhoneToSIP(targetNumber, sipDomain);\n\n // Initiate the call\n const session = this.ua.call(sipTarget, {\n mediaConstraints: options?.mediaConstraints || { audio: true },\n pcConfig: this.callConfig.pcConfig,\n });\n\n // Create call session\n const call = new CallSession(\n session,\n 'outbound',\n targetNumber,\n extension,\n this.events\n );\n\n call.status = 'connecting';\n this.currentCall = call;\n this.events.emit('call:outgoing', call);\n\n return call;\n } catch (error) {\n throw new CallError(\n `Failed to initiate call: ${error instanceof Error ? error.message : 'Unknown error'}`,\n { originalError: error }\n );\n }\n }\n\n /**\n * Answer an incoming call\n */\n answerCall(session: any): CallSession {\n if (!session) {\n throw new CallError('No session provided');\n }\n\n try {\n const remoteUri = session.remote_identity?.uri?.toString() || 'Unknown';\n const extension = this.getDefaultExtension();\n\n session.answer({\n mediaConstraints: { audio: true },\n pcConfig: this.callConfig.pcConfig,\n });\n\n const call = new CallSession(\n session,\n 'inbound',\n remoteUri,\n extension,\n this.events\n );\n\n this.currentCall = call;\n return call;\n } catch (error) {\n throw new CallError(\n `Failed to answer call: ${error instanceof Error ? error.message : 'Unknown error'}`,\n { originalError: error }\n );\n }\n }\n\n /**\n * Handle incoming call from JsSIP\n */\n handleIncomingCall(session: any): CallSession {\n const remoteUri = session.remote_identity?.uri?.toString() || 'Unknown';\n const extension = this.getDefaultExtension();\n\n const call = new CallSession(\n session,\n 'inbound',\n remoteUri,\n extension,\n this.events\n );\n\n call.status = 'ringing';\n this.currentCall = call;\n this.events.emit('call:incoming', call);\n\n return call;\n }\n\n getCurrentCall(): CallSession | null {\n return this.currentCall;\n }\n\n clearCurrentCall(): void {\n if (this.currentCall) {\n this.currentCall.destroy();\n this.currentCall = null;\n }\n }\n\n private getDefaultExtension(): string {\n // Auto-select first extension if available\n if (this.credentials.extensions && this.credentials.extensions.length > 0) {\n return this.credentials.extensions[0].extension;\n }\n // Fallback to extracting from sipUri\n return this.extractExtension(this.credentials.sipUri);\n }\n\n private extractExtension(sipUri: string): string {\n const match = sipUri.match(/sip:([^@]+)@/);\n return match ? match[1] : 'unknown';\n }\n\n private extractDomain(sipUri: string): string {\n const match = sipUri.match(/@(.+)$/);\n return match ? match[1] : '';\n }\n\n destroy(): void {\n this.clearCurrentCall();\n this.ua = null;\n }\n}\n","/**\n * Dora Cell SDK - Main entry point\n * Framework-agnostic VoIP calling SDK using JsSIP\n */\n\nimport JsSIP from 'jssip';\nimport EventEmitter from 'eventemitter3';\nimport type {\n DoraCellConfig,\n DoraCellEventMap,\n DoraCellEvent,\n ConnectionStatus,\n ConnectionState,\n Call,\n CallOptions,\n SipCredentials,\n} from '../types';\nimport { ConnectionError, CallError } from '../types';\nimport { createAuthProvider, AuthProvider } from './AuthProvider';\nimport { CallManager } from './CallManager';\n\nexport class DoraCell {\n private config: DoraCellConfig;\n private events: EventEmitter;\n private authProvider: AuthProvider;\n private credentials: SipCredentials | null = null;\n private ua: any | null = null; // JsSIP User Agent\n private callManager: CallManager | null = null;\n private connectionStatus: ConnectionStatus = 'disconnected';\n private retryCount: number = 0;\n private maxRetries: number = 3;\n\n constructor(config: DoraCellConfig) {\n this.config = {\n autoSelectExtension: true,\n debug: false,\n ...config,\n };\n\n this.events = new EventEmitter();\n this.authProvider = createAuthProvider(config.auth);\n\n // Enable JsSIP debugging if requested\n if (this.config.debug) {\n JsSIP.debug.enable('JsSIP:*');\n }\n }\n\n /**\n * Initialize the SDK - authenticate and connect to SIP server\n */\n async initialize(): Promise<void> {\n try {\n // Step 1: Authenticate and get SIP credentials\n this.credentials = await this.authProvider.authenticate(this.config.auth);\n\n // Step 2: Initialize JsSIP User Agent\n await this.initializeUserAgent();\n\n // Step 3: Initialize Call Manager\n this.initializeCallManager();\n\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n this.emitError(new ConnectionError(`Initialization failed: ${errorMessage}`));\n throw error;\n }\n }\n\n private async initializeUserAgent(): Promise<void> {\n if (!this.credentials) {\n throw new ConnectionError('No credentials available');\n }\n\n try {\n // Create WebSocket connection\n const socket = new JsSIP.WebSocketInterface(this.credentials.wsUrl);\n\n // Build TURN/STUN configuration\n const pcConfig: RTCConfiguration = {\n iceServers: this.config.turnServers || this.getDefaultTurnServers(),\n };\n\n // Create User Agent configuration\n const uaConfig: any = {\n uri: this.credentials.sipUri,\n password: this.credentials.password,\n sockets: [socket],\n register: true,\n display_name: this.getDisplayName(),\n session_timers: false,\n use_preloaded_route: false,\n pcConfig: pcConfig,\n instance_id: this.generateInstanceId(),\n };\n\n // Create User Agent\n this.ua = new JsSIP.UA(uaConfig);\n\n // Set up UA event handlers\n this.setupUserAgentHandlers();\n\n // Start the UA\n this.ua.start();\n\n } catch (error) {\n throw new ConnectionError(\n `Failed to initialize User Agent: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n }\n\n private setupUserAgentHandlers(): void {\n if (!this.ua) return;\n\n this.ua.on('connected', () => {\n this.connectionStatus = 'connected';\n this.emitConnectionStatus();\n });\n\n this.ua.on('disconnected', () => {\n this.connectionStatus = 'disconnected';\n this.emitConnectionStatus();\n });\n\n this.ua.on('registered', () => {\n this.connectionStatus = 'registered';\n this.retryCount = 0;\n this.emitConnectionStatus();\n });\n\n this.ua.on('registrationFailed', (e: any) => {\n this.connectionStatus = 'registrationFailed';\n this.emitConnectionStatus(e.cause);\n\n // Retry logic\n if (this.retryCount < this.maxRetries) {\n this.retryCount++;\n setTimeout(() => {\n this.ua?.register();\n }, 3000);\n }\n });\n\n this.ua.on('newRTCSession', (e: any) => {\n const session = e.session;\n\n if (session.direction === 'incoming') {\n // Handle incoming call\n this.callManager?.handleIncomingCall(session);\n }\n });\n }\n\n private initializeCallManager(): void {\n if (!this.credentials) {\n throw new ConnectionError('No credentials available for call manager');\n }\n\n const pcConfig: RTCConfiguration = {\n iceServers: this.config.turnServers || this.getDefaultTurnServers(),\n };\n\n this.callManager = new CallManager(\n this.credentials,\n this.events,\n { pcConfig }\n );\n\n this.callManager.setUserAgent(this.ua);\n }\n\n /**\n * Make an outbound call\n */\n async call(phoneNumber: string, options?: CallOptions): Promise<Call> {\n if (!this.callManager) {\n throw new CallError('SDK not initialized. Call initialize() first.');\n }\n\n if (this.connectionStatus !== 'registered') {\n throw new CallError('Not registered to SIP server');\n }\n\n return this.callManager.initiateCall(phoneNumber, options);\n }\n\n /**\n * Answer an incoming call\n */\n answerCall(): void {\n const currentCall = this.callManager?.getCurrentCall();\n\n if (!currentCall) {\n throw new CallError('No incoming call to answer');\n }\n\n if (currentCall.direction !== 'inbound') {\n throw new CallError('Current call is not an incoming call');\n }\n\n // The CallSession will handle answering via its internal session\n // This is already set up in CallManager.handleIncomingCall\n }\n\n /**\n * Hangup the current call\n */\n hangup(): void {\n const currentCall = this.callManager?.getCurrentCall();\n\n if (!currentCall) {\n throw new CallError('No active call to hang up');\n }\n\n currentCall.hangup();\n }\n\n /**\n * Get current call\n */\n getCurrentCall(): Call | null {\n return this.callManager?.getCurrentCall() || null;\n }\n\n /**\n * Get connection status\n */\n getStatus(): ConnectionStatus {\n return this.connectionStatus;\n }\n\n /**\n * Get available extensions\n */\n getExtensions(): string[] {\n if (!this.credentials?.extensions) {\n return [];\n }\n return this.credentials.extensions.map(ext => ext.extension);\n }\n\n /**\n * Event listener management\n */\n on<K extends DoraCellEvent>(event: K, handler: DoraCellEventMap[K]): void {\n this.events.on(event, handler as any);\n }\n\n off<K extends DoraCellEvent>(event: K, handler: DoraCellEventMap[K]): void {\n this.events.off(event, handler as any);\n }\n\n once<K extends DoraCellEvent>(event: K, handler: DoraCellEventMap[K]): void {\n this.events.once(event, handler as any);\n }\n\n /**\n * Cleanup and destroy the SDK instance\n */\n destroy(): void {\n if (this.ua) {\n this.ua.stop();\n this.ua = null;\n }\n\n if (this.callManager) {\n this.callManager.destroy();\n this.callManager = null;\n }\n\n this.events.removeAllListeners();\n this.connectionStatus = 'disconnected';\n this.credentials = null;\n }\n\n // Helper methods\n private emitConnectionStatus(error?: string): void {\n const state: ConnectionState = {\n status: this.connectionStatus,\n extension: this.credentials?.extensions?.[0]?.extension,\n error,\n };\n this.events.emit('connection:status', state);\n }\n\n private emitError(error: Error): void {\n this.events.emit('error', error);\n }\n\n private getDefaultTurnServers(): RTCIceServer[] {\n const turnUri = process.env.NEXT_PUBLIC_TURN_URI || 'turn:64.227.10.164:3478';\n const turnUser = process.env.NEXT_PUBLIC_TURN_USER || '02018890089';\n const turnPass = process.env.NEXT_PUBLIC_TURN_PASS || 'dora12345';\n\n return [\n {\n urls: turnUri,\n username: turnUser,\n credential: turnPass,\n },\n ];\n }\n\n private getDisplayName(): string {\n if (this.credentials?.extensions?.[0]?.displayName) {\n return this.credentials.extensions[0].displayName;\n }\n if (this.credentials?.extensions?.[0]?.extension) {\n return `Ext ${this.credentials.extensions[0].extension}`;\n }\n return 'Dora Cell User';\n }\n\n private generateInstanceId(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\nexport default DoraCell;\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dora-cell/sdk",
|
|
3
|
+
"version": "0.1.1-beta.6",
|
|
4
|
+
"description": "VoIP calling SDK for Dora Cell - Make calls from any JavaScript application",
|
|
5
|
+
"main": "./dist/index.cjs",
|
|
6
|
+
"module": "./dist/index.mjs",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"publishConfig": {
|
|
9
|
+
"access": "public"
|
|
10
|
+
},
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"import": "./dist/index.mjs",
|
|
15
|
+
"require": "./dist/index.cjs"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist",
|
|
20
|
+
"README.md",
|
|
21
|
+
"LICENSE"
|
|
22
|
+
],
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "tsup",
|
|
25
|
+
"dev": "tsup --watch",
|
|
26
|
+
"type-check": "tsc --noEmit",
|
|
27
|
+
"test": "jest",
|
|
28
|
+
"test:watch": "jest --watch"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"voip",
|
|
32
|
+
"webrtc",
|
|
33
|
+
"sip",
|
|
34
|
+
"jssip",
|
|
35
|
+
"telephony",
|
|
36
|
+
"calling",
|
|
37
|
+
"dora-cell"
|
|
38
|
+
],
|
|
39
|
+
"author": "Dora Cell",
|
|
40
|
+
"license": "MIT",
|
|
41
|
+
"peerDependencies": {
|
|
42
|
+
"jssip": "^3.10.1"
|
|
43
|
+
},
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"eventemitter3": "^5.0.1"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@types/node": "^20.0.0",
|
|
49
|
+
"jssip": "^3.10.1",
|
|
50
|
+
"tsup": "^8.0.0",
|
|
51
|
+
"typescript": "^5.3.0"
|
|
52
|
+
},
|
|
53
|
+
"repository": {
|
|
54
|
+
"type": "git",
|
|
55
|
+
"url": "https://github.com/dora-cell/sdk"
|
|
56
|
+
},
|
|
57
|
+
"bugs": {
|
|
58
|
+
"url": "https://github.com/dora-cell/sdk/issues"
|
|
59
|
+
}
|
|
60
|
+
}
|