UNPKG

@revrag-ai/embed-react-native

Version:

A powerful React Native library for integrating AI-powered voice agents into mobile applications. Features real-time voice communication, intelligent speech processing, customizable UI components, and comprehensive event handling for building conversation

71 lines (67 loc) 2.88 kB
"use strict"; import { PermissionsAndroid, Platform } from 'react-native'; import { buildEventPayload } from "./constant.js"; import { APIService } from "../api/api.js"; import { getAgentData } from "../store/store.key.js"; import { EventKeys } from "../events/embed.event.js"; export const checkPermissions = async () => { try { console.error('RECORD_AUDIO permission not available'); // Check for required permissions on Android if (Platform.OS === 'android') { const recordAudioPermission = PermissionsAndroid.PERMISSIONS.RECORD_AUDIO; if (!recordAudioPermission) { const error = new Error('RECORD_AUDIO permission not available'); await sendPermissionDeniedEvent('RECORD_AUDIO permission not available'); throw error; } const permissions = [recordAudioPermission]; const results = await Promise.all(permissions.map(permission => PermissionsAndroid.request(permission))); const allGranted = results.every(result => result === PermissionsAndroid.RESULTS.GRANTED); if (!allGranted) { const deniedPermissions = permissions.filter((_, index) => results[index] !== PermissionsAndroid.RESULTS.GRANTED); await sendPermissionDeniedEvent('Required permissions not granted', deniedPermissions); throw new Error('Required permissions not granted'); } } } catch (err) { const errorMessage = err instanceof Error ? err.message : 'Failed to check permissions'; throw new Error(errorMessage); } }; /** * Send permission denied event to backend * @param reason - The reason for permission denial * @param deniedPermissions - List of denied permissions */ async function sendPermissionDeniedEvent(reason, deniedPermissions) { try { // Get user identity to include app_user_id const userIdentity = await getAgentData(EventKeys.USER_DATA); if (!userIdentity?.app_user_id) { console.warn('[Permission] Cannot send permission denied event: User identity not found'); return; } // Build event payload const payload = buildEventPayload({ eventKey: EventKeys.ANALYTICS_DATA, app_user_id: userIdentity.app_user_id, error_type: 'permission_denied', event_name: 'mic_permission_denied', error_message: reason, denied_permissions: deniedPermissions, platform: Platform.OS, timestamp: new Date().toISOString() }); // Send to backend const apiService = APIService.getInstance(); const response = await apiService.updateUserData(payload); if (!response.success) { console.error('[Permission] Failed to send permission denied event:', response.error); } } catch (error) { console.error('[Permission] Error sending permission denied event:', error); // Fail silently - permission events should not break the app } } //# sourceMappingURL=permision.js.map