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 (70 loc) 2.31 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.EventKeys = void 0; var _storeKey = require("../store/store.key.js"); var _api = require("../api/api.js"); // 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"; 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 (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); } 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(); var _default = exports.default = embed; //# sourceMappingURL=embed.event.js.map