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