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

137 lines (122 loc) 3.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "AgentEvent", { enumerable: true, get: function () { return _embedTypes.AgentEvent; } }); Object.defineProperty(exports, "EventKeys", { enumerable: true, get: function () { return _embedTypes.EventKeys; } }); exports.default = void 0; var _storeKey = require("../store/store.key.js"); var _api = require("../api/api.js"); var _constant = require("../utils/constant.js"); var _agentEventEmitter = require("./agent-event-emitter.js"); var _embedValidators = require("./embed.validators.js"); var _embedTypes = require("./embed.types.js"); /** * Embed Event Manager * Main class for managing embed events and agent communication */ class Embed { events = {}; // Agent event emitter for listening to agent state changes constructor() { this.event = new _agentEventEmitter.AgentEventEmitter(); } /** * Automatically adds a default listener if none exists * @private */ ensureDefaultListener(eventKey) { if (!this.events[eventKey]) { this.events[eventKey] = [_data => { // console.i('default event this', _data); // todo: handle default event }]; } } /** * Enriches event data with user identity * @private */ async enrichEventData(eventKey, data) { if (eventKey !== 'user_data') { const userIdentity = await (0, _storeKey.getAgentData)('user_data'); if (userIdentity) { data.app_user_id = userIdentity.app_user_id; } else { throw new Error('User identity not found'); } } } /** * Sends event data to the backend API * @private */ async sendEventToAPI(eventKey, data, key) { try { const apiService = _api.APIService.getInstance(); const paramsData = (0, _constant.buildEventPayload)({ ...data, eventKey: key }); // Validate analytics events have event_name (0, _embedValidators.validateAnalyticsEvent)(paramsData); const response = await apiService.updateUserData({ ...paramsData }); 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}`); } } /** * Triggers local event listeners * @private */ triggerEventListeners(key, data) { this.events[key]?.forEach(callback => callback(data)); } /** * Send an event to the AI agent * @param eventKey - The event type to send * @param data - Event data payload */ async Event(eventKey, data) { // Validate event key (0, _embedValidators.validateEventKey)(eventKey); const key = eventKey; // Enrich event data with user identity await this.enrichEventData(key, data); // Ensure a default listener is registered this.ensureDefaultListener(key); // Send event to backend API await this.sendEventToAPI(eventKey, data, key); // Trigger local event listeners this.triggerEventListeners(key, data); } /** * Add listener for data events (legacy support) * @deprecated Use event.on() for agent events instead */ on(eventKey, callback) { if (!this.events[eventKey]) { this.events[eventKey] = []; } this.events[eventKey]?.push(callback); } } const embed = new Embed(); var _default = exports.default = embed; // Re-export types and enums for convenience //# sourceMappingURL=embed.event.js.map