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