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

72 lines (66 loc) 2.16 kB
"use strict"; import { getAgentData, setAgentData } from "../store/store.key.js"; import { APIService } from "../api/api.js"; // Predefined event keys export let EventKeys = /*#__PURE__*/function (EventKeys) { EventKeys["USER_DATA"] = "user_data"; EventKeys["SCREEN_STATE"] = "screen_state"; EventKeys["OFFER_STATE"] = "offer_state"; return EventKeys; }({}); class Embed { events = {}; // Automatically adds a default listener if none exists ensureDefaultListener(eventKey) { if (!this.events[eventKey]) { this.events[eventKey] = [data => { // todo: handle default event console.info('default event', data); }]; } } async Event(eventKey, data) { if (!Object.values(EventKeys).includes(eventKey)) { // todo: handle invalid event key throw new Error(`Invalid event key: ${eventKey}. Must be one of: ${Object.values(EventKeys).join(', ')}`); } const key = eventKey; if (key !== EventKeys.USER_DATA) { const userIdentity = await getAgentData(EventKeys.USER_DATA); if (userIdentity) { data.app_user_id = userIdentity.app_user_id; } else { throw new Error('User identity not found'); } } // Ensure a default listener is registered if not already this.ensureDefaultListener(key); // Trigger API call try { const apiService = APIService.getInstance(); const response = await apiService.updateUserData({ eventKey: key, data }); if (!response.success) { throw new Error(`Failed to trigger API for event: ${eventKey}`); } setAgentData(data, key); } catch (error) { throw new Error(`Failed to trigger API for event: ${eventKey}`); // todo: handle error triggering API } // Trigger event listeners this.events[key]?.forEach(callback => callback(data)); } // Still allow custom listeners (optional) on(eventKey, callback) { if (!this.events[eventKey]) { this.events[eventKey] = []; } this.events[eventKey]?.push(callback); } } const embed = new Embed(); export default embed; //# sourceMappingURL=embed.event.js.map