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

123 lines (113 loc) 4.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.EventKeys = exports.AgentEvent = void 0; var _storeKey = require("../store/store.key.js"); var _api = require("../api/api.js"); var _eventEmitter = _interopRequireDefault(require("./eventEmitter.js")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } // Predefined event keys let EventKeys = exports.EventKeys = /*#__PURE__*/function (EventKeys) { EventKeys["USER_DATA"] = "user_data"; EventKeys["SCREEN_STATE"] = "screen_state"; EventKeys["OFFER_STATE"] = "offer_state"; EventKeys["SCREEN_VIEW"] = "screen_view"; EventKeys["FORM_STATE"] = "form_state"; return EventKeys; }({}); let AgentEvent = exports.AgentEvent = /*#__PURE__*/function (AgentEvent) { AgentEvent["AGENT_CONNECTED"] = "agent_connected"; AgentEvent["AGENT_DISCONNECTED"] = "agent_disconnected"; AgentEvent["POPUP_MESSAGE_VISIBLE"] = "popup_message_visible"; return AgentEvent; }({}); // // Event data structure for listener events // export interface EmbedEventData { // timestamp: number; // Unix timestamp when event occurred // value: boolean; // Boolean state (connected/visible = true) // metadata?: { // // Additional context data // connectionState?: string; // LiveKit connection state // roomId?: string; // Voice room identifier // trigger?: 'user_interaction' | 'auto_open' | 'call_ended'; // previousState?: boolean; // Previous state before change // // ... other contextual information // [key: string]: any; // }; // } // Listener callback type // export type EmbedEventListener = (data: EmbedEventData) => void; class Embed { events = {}; event = new _eventEmitter.default(); userDataInitialized = false; // Automatically adds a default listener if none exists // private ensureDefaultListener(eventKey: EventKeys) { // if (!this.events[eventKey]) { // this.events[eventKey] = [ // (data: any) => { // // todo: handle default event // console.log('default event', eventKey, data); // }, // ]; // } // } async Event(eventKey, data) { console.log('eventKey', 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; // Restrict all events except USER_DATA until USER_DATA is initialized if (key !== EventKeys.USER_DATA && !this.userDataInitialized) { throw new Error(`Cannot trigger ${eventKey} event. USER_DATA event must be triggered first to initialize user identity.`); } if (key !== EventKeys.USER_DATA) { const userIdentity = await (0, _storeKey.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 = _api.APIService.getInstance(); const response = await apiService.updateUserData({ eventKey: key, data }); if (!response.success) { throw new Error(`Failed to trigger API for event: ${eventKey}`); } (0, _storeKey.setAgentData)(data, key); // Mark USER_DATA as initialized after successful processing if (key === EventKeys.USER_DATA) { this.userDataInitialized = true; } } catch (error) { console.log('data_Event_error', key, data); 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); } // Check if USER_DATA has been initialized isUserDataInitialized() { return this.userDataInitialized; } } const embed = new Embed(); var _default = exports.default = embed; //# sourceMappingURL=embed.event.js.map