@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
JavaScript
;
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