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

76 lines (72 loc) 3.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.checkPermissions = void 0; var _reactNative = require("react-native"); var _constant = require("./constant.js"); var _api = require("../api/api.js"); var _storeKey = require("../store/store.key.js"); var _embedEvent = require("../events/embed.event.js"); const checkPermissions = async () => { try { console.error('RECORD_AUDIO permission not available'); // Check for required permissions on Android if (_reactNative.Platform.OS === 'android') { const recordAudioPermission = _reactNative.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 => _reactNative.PermissionsAndroid.request(permission))); const allGranted = results.every(result => result === _reactNative.PermissionsAndroid.RESULTS.GRANTED); if (!allGranted) { const deniedPermissions = permissions.filter((_, index) => results[index] !== _reactNative.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 */ exports.checkPermissions = checkPermissions; async function sendPermissionDeniedEvent(reason, deniedPermissions) { try { // Get user identity to include app_user_id const userIdentity = await (0, _storeKey.getAgentData)(_embedEvent.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 = (0, _constant.buildEventPayload)({ eventKey: _embedEvent.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: _reactNative.Platform.OS, timestamp: new Date().toISOString() }); // Send to backend const apiService = _api.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