@revrag-ai/embed-react-native 1.0.17 → 1.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/build.gradle +3 -3
- package/dist/commonjs/events/agent-event-emitter.js +114 -0
- package/dist/commonjs/events/agent-event-emitter.js.map +1 -0
- package/dist/commonjs/events/embed.event.js +69 -142
- package/dist/commonjs/events/embed.event.js.map +1 -1
- package/dist/commonjs/events/embed.types.js +32 -0
- package/dist/commonjs/events/embed.types.js.map +1 -0
- package/dist/commonjs/events/embed.validators.js +36 -0
- package/dist/commonjs/events/embed.validators.js.map +1 -0
- package/dist/commonjs/events/index.js +47 -0
- package/dist/commonjs/events/index.js.map +1 -0
- package/dist/commonjs/utils/constant.js +11 -0
- package/dist/commonjs/utils/constant.js.map +1 -1
- package/dist/commonjs/utils/permision.js +48 -1
- package/dist/commonjs/utils/permision.js.map +1 -1
- package/dist/module/events/agent-event-emitter.js +109 -0
- package/dist/module/events/agent-event-emitter.js.map +1 -0
- package/dist/module/events/embed.event.js +59 -147
- package/dist/module/events/embed.event.js.map +1 -1
- package/dist/module/events/embed.types.js +33 -0
- package/dist/module/events/embed.types.js.map +1 -0
- package/dist/module/events/embed.validators.js +32 -0
- package/dist/module/events/embed.validators.js.map +1 -0
- package/dist/module/events/index.js +12 -0
- package/dist/module/events/index.js.map +1 -0
- package/dist/module/utils/constant.js +11 -0
- package/dist/module/utils/constant.js.map +1 -1
- package/dist/module/utils/permision.js +48 -1
- package/dist/module/utils/permision.js.map +1 -1
- package/dist/typescript/src/events/agent-event-emitter.d.ts +41 -0
- package/dist/typescript/src/events/agent-event-emitter.d.ts.map +1 -0
- package/dist/typescript/src/events/embed.event.d.ts +21 -67
- package/dist/typescript/src/events/embed.event.d.ts.map +1 -1
- package/dist/typescript/src/events/embed.types.d.ts +39 -0
- package/dist/typescript/src/events/embed.types.d.ts.map +1 -0
- package/dist/typescript/src/events/embed.validators.d.ts +17 -0
- package/dist/typescript/src/events/embed.validators.d.ts.map +1 -0
- package/dist/typescript/src/events/index.d.ts +10 -0
- package/dist/typescript/src/events/index.d.ts.map +1 -0
- package/dist/typescript/src/utils/constant.d.ts +1 -0
- package/dist/typescript/src/utils/constant.d.ts.map +1 -1
- package/dist/typescript/src/utils/permision.d.ts.map +1 -1
- package/package.json +11 -6
|
@@ -5,18 +5,27 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.checkPermissions = void 0;
|
|
7
7
|
var _reactNative = require("react-native");
|
|
8
|
+
var _constant = require("./constant.js");
|
|
9
|
+
var _api = require("../api/api.js");
|
|
10
|
+
var _storeKey = require("../store/store.key.js");
|
|
11
|
+
var _embedEvent = require("../events/embed.event.js");
|
|
8
12
|
const checkPermissions = async () => {
|
|
9
13
|
try {
|
|
14
|
+
console.error('RECORD_AUDIO permission not available');
|
|
10
15
|
// Check for required permissions on Android
|
|
11
16
|
if (_reactNative.Platform.OS === 'android') {
|
|
12
17
|
const recordAudioPermission = _reactNative.PermissionsAndroid.PERMISSIONS.RECORD_AUDIO;
|
|
13
18
|
if (!recordAudioPermission) {
|
|
14
|
-
|
|
19
|
+
const error = new Error('RECORD_AUDIO permission not available');
|
|
20
|
+
await sendPermissionDeniedEvent('RECORD_AUDIO permission not available');
|
|
21
|
+
throw error;
|
|
15
22
|
}
|
|
16
23
|
const permissions = [recordAudioPermission];
|
|
17
24
|
const results = await Promise.all(permissions.map(permission => _reactNative.PermissionsAndroid.request(permission)));
|
|
18
25
|
const allGranted = results.every(result => result === _reactNative.PermissionsAndroid.RESULTS.GRANTED);
|
|
19
26
|
if (!allGranted) {
|
|
27
|
+
const deniedPermissions = permissions.filter((_, index) => results[index] !== _reactNative.PermissionsAndroid.RESULTS.GRANTED);
|
|
28
|
+
await sendPermissionDeniedEvent('Required permissions not granted', deniedPermissions);
|
|
20
29
|
throw new Error('Required permissions not granted');
|
|
21
30
|
}
|
|
22
31
|
}
|
|
@@ -25,5 +34,43 @@ const checkPermissions = async () => {
|
|
|
25
34
|
throw new Error(errorMessage);
|
|
26
35
|
}
|
|
27
36
|
};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Send permission denied event to backend
|
|
40
|
+
* @param reason - The reason for permission denial
|
|
41
|
+
* @param deniedPermissions - List of denied permissions
|
|
42
|
+
*/
|
|
28
43
|
exports.checkPermissions = checkPermissions;
|
|
44
|
+
async function sendPermissionDeniedEvent(reason, deniedPermissions) {
|
|
45
|
+
try {
|
|
46
|
+
// Get user identity to include app_user_id
|
|
47
|
+
const userIdentity = await (0, _storeKey.getAgentData)(_embedEvent.EventKeys.USER_DATA);
|
|
48
|
+
if (!userIdentity?.app_user_id) {
|
|
49
|
+
console.warn('[Permission] Cannot send permission denied event: User identity not found');
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Build event payload
|
|
54
|
+
const payload = (0, _constant.buildEventPayload)({
|
|
55
|
+
eventKey: _embedEvent.EventKeys.ANALYTICS_DATA,
|
|
56
|
+
app_user_id: userIdentity.app_user_id,
|
|
57
|
+
error_type: 'permission_denied',
|
|
58
|
+
event_name: 'mic_permission_denied',
|
|
59
|
+
error_message: reason,
|
|
60
|
+
denied_permissions: deniedPermissions,
|
|
61
|
+
platform: _reactNative.Platform.OS,
|
|
62
|
+
timestamp: new Date().toISOString()
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
// Send to backend
|
|
66
|
+
const apiService = _api.APIService.getInstance();
|
|
67
|
+
const response = await apiService.updateUserData(payload);
|
|
68
|
+
if (!response.success) {
|
|
69
|
+
console.error('[Permission] Failed to send permission denied event:', response.error);
|
|
70
|
+
}
|
|
71
|
+
} catch (error) {
|
|
72
|
+
console.error('[Permission] Error sending permission denied event:', error);
|
|
73
|
+
// Fail silently - permission events should not break the app
|
|
74
|
+
}
|
|
75
|
+
}
|
|
29
76
|
//# sourceMappingURL=permision.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","checkPermissions","Platform","OS","recordAudioPermission","PermissionsAndroid","PERMISSIONS","RECORD_AUDIO","Error","permissions","results","Promise","all","map","permission","request","allGranted","every","result","RESULTS","GRANTED","err","errorMessage","message","exports"],"sourceRoot":"../../../src","sources":["utils/permision.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEO,
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_constant","_api","_storeKey","_embedEvent","checkPermissions","console","error","Platform","OS","recordAudioPermission","PermissionsAndroid","PERMISSIONS","RECORD_AUDIO","Error","sendPermissionDeniedEvent","permissions","results","Promise","all","map","permission","request","allGranted","every","result","RESULTS","GRANTED","deniedPermissions","filter","_","index","err","errorMessage","message","exports","reason","userIdentity","getAgentData","EventKeys","USER_DATA","app_user_id","warn","payload","buildEventPayload","eventKey","ANALYTICS_DATA","error_type","event_name","error_message","denied_permissions","platform","timestamp","Date","toISOString","apiService","APIService","getInstance","response","updateUserData","success"],"sourceRoot":"../../../src","sources":["utils/permision.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Agent Event Emitter
|
|
5
|
+
* Handles listening to agent state changes (connection, disconnection, popup visibility)
|
|
6
|
+
* Also sends agent events to the backend API
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { getAgentData } from "../store/store.key.js";
|
|
10
|
+
import { APIService } from "../api/api.js";
|
|
11
|
+
import { buildEventPayload } from "../utils/constant.js";
|
|
12
|
+
import { EventKeys } from "./embed.types.js";
|
|
13
|
+
export class AgentEventEmitter {
|
|
14
|
+
agentListeners = {};
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Add an event listener for agent events
|
|
18
|
+
* @param eventKey - The agent event to listen for
|
|
19
|
+
* @param callback - Callback function to execute when event fires
|
|
20
|
+
*/
|
|
21
|
+
on(eventKey, callback) {
|
|
22
|
+
if (!this.agentListeners[eventKey]) {
|
|
23
|
+
this.agentListeners[eventKey] = [];
|
|
24
|
+
}
|
|
25
|
+
this.agentListeners[eventKey]?.push(callback);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Remove an event listener for agent events
|
|
30
|
+
* @param eventKey - The agent event to stop listening to
|
|
31
|
+
* @param callback - The callback function to remove
|
|
32
|
+
*/
|
|
33
|
+
off(eventKey, callback) {
|
|
34
|
+
if (!this.agentListeners[eventKey]) return;
|
|
35
|
+
const index = this.agentListeners[eventKey]?.indexOf(callback);
|
|
36
|
+
if (index !== undefined && index > -1) {
|
|
37
|
+
this.agentListeners[eventKey]?.splice(index, 1);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Emit an agent event to all registered listeners AND send to backend
|
|
43
|
+
* @param eventKey - The agent event to emit
|
|
44
|
+
* @param data - Data to pass to listeners
|
|
45
|
+
* @internal - Used internally by the library
|
|
46
|
+
*/
|
|
47
|
+
async emit(eventKey, data) {
|
|
48
|
+
// Trigger local event listeners first
|
|
49
|
+
this.agentListeners[eventKey]?.forEach(callback => {
|
|
50
|
+
try {
|
|
51
|
+
callback(data);
|
|
52
|
+
} catch (error) {
|
|
53
|
+
console.error(`Error in agent event listener for ${eventKey}:`, error);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
// Send to backend API
|
|
58
|
+
await this.sendToBackend(eventKey, data);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Send agent event data to backend API
|
|
63
|
+
* @param eventKey - The agent event type
|
|
64
|
+
* @param data - Event data
|
|
65
|
+
* @private
|
|
66
|
+
*/
|
|
67
|
+
async sendToBackend(eventKey, data) {
|
|
68
|
+
try {
|
|
69
|
+
// Get user identity to include app_user_id
|
|
70
|
+
const userIdentity = await getAgentData(EventKeys.USER_DATA);
|
|
71
|
+
if (!userIdentity?.app_user_id) {
|
|
72
|
+
console.warn(`[AgentEvent] Cannot send ${eventKey} to backend: User identity not found`);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Prepare payload with app_user_id
|
|
77
|
+
const payload = {
|
|
78
|
+
...data,
|
|
79
|
+
app_user_id: userIdentity.app_user_id,
|
|
80
|
+
eventKey: eventKey,
|
|
81
|
+
eventType: 'agent_event'
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
// Send to API
|
|
85
|
+
const apiService = APIService.getInstance();
|
|
86
|
+
const paramsData = buildEventPayload(payload);
|
|
87
|
+
const response = await apiService.updateUserData(paramsData);
|
|
88
|
+
if (!response.success) {
|
|
89
|
+
console.error(`[AgentEvent] Failed to send ${eventKey} to backend:`, response.error);
|
|
90
|
+
}
|
|
91
|
+
} catch (error) {
|
|
92
|
+
console.error(`[AgentEvent] Error sending ${eventKey} to backend:`, error);
|
|
93
|
+
// Fail silently - agent events should not break the app
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Remove all listeners for a specific event
|
|
99
|
+
* @param eventKey - The agent event to clear listeners for
|
|
100
|
+
*/
|
|
101
|
+
removeAllListeners(eventKey) {
|
|
102
|
+
if (eventKey) {
|
|
103
|
+
delete this.agentListeners[eventKey];
|
|
104
|
+
} else {
|
|
105
|
+
this.agentListeners = {};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=agent-event-emitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getAgentData","APIService","buildEventPayload","EventKeys","AgentEventEmitter","agentListeners","on","eventKey","callback","push","off","index","indexOf","undefined","splice","emit","data","forEach","error","console","sendToBackend","userIdentity","USER_DATA","app_user_id","warn","payload","eventType","apiService","getInstance","paramsData","response","updateUserData","success","removeAllListeners"],"sourceRoot":"../../../src","sources":["events/agent-event-emitter.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;;AAEA,SAASA,YAAY,QAAQ,uBAAoB;AACjD,SAASC,UAAU,QAAQ,eAAY;AACvC,SAASC,iBAAiB,QAAQ,sBAAmB;AAErD,SAASC,SAAS,QAAQ,kBAAe;AAEzC,OAAO,MAAMC,iBAAiB,CAAC;EACrBC,cAAc,GAA8C,CAAC,CAAC;;EAEtE;AACF;AACA;AACA;AACA;EACEC,EAAEA,CAACC,QAAoB,EAAEC,QAAuB,EAAQ;IACtD,IAAI,CAAC,IAAI,CAACH,cAAc,CAACE,QAAQ,CAAC,EAAE;MAClC,IAAI,CAACF,cAAc,CAACE,QAAQ,CAAC,GAAG,EAAE;IACpC;IACA,IAAI,CAACF,cAAc,CAACE,QAAQ,CAAC,EAAEE,IAAI,CAACD,QAAQ,CAAC;EAC/C;;EAEA;AACF;AACA;AACA;AACA;EACEE,GAAGA,CAACH,QAAoB,EAAEC,QAAuB,EAAQ;IACvD,IAAI,CAAC,IAAI,CAACH,cAAc,CAACE,QAAQ,CAAC,EAAE;IAEpC,MAAMI,KAAK,GAAG,IAAI,CAACN,cAAc,CAACE,QAAQ,CAAC,EAAEK,OAAO,CAACJ,QAAQ,CAAC;IAC9D,IAAIG,KAAK,KAAKE,SAAS,IAAIF,KAAK,GAAG,CAAC,CAAC,EAAE;MACrC,IAAI,CAACN,cAAc,CAACE,QAAQ,CAAC,EAAEO,MAAM,CAACH,KAAK,EAAE,CAAC,CAAC;IACjD;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,MAAMI,IAAIA,CAACR,QAAoB,EAAES,IAAS,EAAiB;IACzD;IACA,IAAI,CAACX,cAAc,CAACE,QAAQ,CAAC,EAAEU,OAAO,CAAET,QAAQ,IAAK;MACnD,IAAI;QACFA,QAAQ,CAACQ,IAAI,CAAC;MAChB,CAAC,CAAC,OAAOE,KAAK,EAAE;QACdC,OAAO,CAACD,KAAK,CAAC,qCAAqCX,QAAQ,GAAG,EAAEW,KAAK,CAAC;MACxE;IACF,CAAC,CAAC;;IAEF;IACA,MAAM,IAAI,CAACE,aAAa,CAACb,QAAQ,EAAES,IAAI,CAAC;EAC1C;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,MAAcI,aAAaA,CAACb,QAAoB,EAAES,IAAS,EAAiB;IAC1E,IAAI;MACF;MACA,MAAMK,YAAY,GAAG,MAAMrB,YAAY,CAACG,SAAS,CAACmB,SAAS,CAAC;MAC5D,IAAI,CAACD,YAAY,EAAEE,WAAW,EAAE;QAC9BJ,OAAO,CAACK,IAAI,CACV,4BAA4BjB,QAAQ,sCACtC,CAAC;QACD;MACF;;MAEA;MACA,MAAMkB,OAAO,GAAG;QACd,GAAGT,IAAI;QACPO,WAAW,EAAEF,YAAY,CAACE,WAAW;QACrChB,QAAQ,EAAEA,QAAQ;QAClBmB,SAAS,EAAE;MACb,CAAC;;MAED;MACA,MAAMC,UAAU,GAAG1B,UAAU,CAAC2B,WAAW,CAAC,CAAC;MAC3C,MAAMC,UAAU,GAAG3B,iBAAiB,CAACuB,OAAO,CAAC;MAC7C,MAAMK,QAAQ,GAAG,MAAMH,UAAU,CAACI,cAAc,CAACF,UAAU,CAAC;MAE5D,IAAI,CAACC,QAAQ,CAACE,OAAO,EAAE;QACrBb,OAAO,CAACD,KAAK,CACX,+BAA+BX,QAAQ,cAAc,EACrDuB,QAAQ,CAACZ,KACX,CAAC;MACH;IACF,CAAC,CAAC,OAAOA,KAAK,EAAE;MACdC,OAAO,CAACD,KAAK,CACX,8BAA8BX,QAAQ,cAAc,EACpDW,KACF,CAAC;MACD;IACF;EACF;;EAEA;AACF;AACA;AACA;EACEe,kBAAkBA,CAAC1B,QAAqB,EAAQ;IAC9C,IAAIA,QAAQ,EAAE;MACZ,OAAO,IAAI,CAACF,cAAc,CAACE,QAAQ,CAAC;IACtC,CAAC,MAAM;MACL,IAAI,CAACF,cAAc,GAAG,CAAC,CAAC;IAC1B;EACF;AACF","ignoreList":[]}
|
|
@@ -1,135 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { getAgentData, setAgentData } from "../store/store.key.js";
|
|
4
|
-
import { APIService } from "../api/api.js";
|
|
5
|
-
import { buildEventPayload } from "../utils/constant.js";
|
|
6
|
-
// Predefined event keys for sending data to the agent
|
|
7
|
-
export let EventKeys = /*#__PURE__*/function (EventKeys) {
|
|
8
|
-
EventKeys["USER_DATA"] = "user_data";
|
|
9
|
-
EventKeys["SCREEN_STATE"] = "screen_state";
|
|
10
|
-
EventKeys["OFFER_STATE"] = "offer_state";
|
|
11
|
-
EventKeys["CUSTOM_EVENT"] = "custom_event";
|
|
12
|
-
EventKeys["FORM_STATE"] = "form_state";
|
|
13
|
-
EventKeys["ACTION_STATE"] = "action_state";
|
|
14
|
-
EventKeys["ERROR_STATE"] = "error_state";
|
|
15
|
-
EventKeys["SUCCESS_STATE"] = "success_state";
|
|
16
|
-
EventKeys["WARNING_STATE"] = "warning_state";
|
|
17
|
-
EventKeys["INFO_STATE"] = "info_state";
|
|
18
|
-
EventKeys["DEBUG_STATE"] = "debug_state";
|
|
19
|
-
return EventKeys;
|
|
20
|
-
}({});
|
|
21
|
-
|
|
22
|
-
// Agent event keys for listening to agent state changes
|
|
23
|
-
export let AgentEvent = /*#__PURE__*/function (AgentEvent) {
|
|
24
|
-
AgentEvent["AGENT_CONNECTED"] = "agent_connected";
|
|
25
|
-
AgentEvent["AGENT_DISCONNECTED"] = "agent_disconnected";
|
|
26
|
-
AgentEvent["POPUP_MESSAGE_VISIBLE"] = "popup_message_visible";
|
|
27
|
-
return AgentEvent;
|
|
28
|
-
}({});
|
|
29
|
-
|
|
30
|
-
// Event data interfaces
|
|
31
|
-
|
|
32
3
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
* Also sends agent events to the backend API
|
|
4
|
+
* Embed Event Manager
|
|
5
|
+
* Main class for managing embed events and agent communication
|
|
36
6
|
*/
|
|
37
|
-
class AgentEventEmitter {
|
|
38
|
-
agentListeners = {};
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Add an event listener for agent events
|
|
42
|
-
* @param eventKey - The agent event to listen for
|
|
43
|
-
* @param callback - Callback function to execute when event fires
|
|
44
|
-
*/
|
|
45
|
-
on(eventKey, callback) {
|
|
46
|
-
if (!this.agentListeners[eventKey]) {
|
|
47
|
-
this.agentListeners[eventKey] = [];
|
|
48
|
-
}
|
|
49
|
-
this.agentListeners[eventKey]?.push(callback);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Remove an event listener for agent events
|
|
54
|
-
* @param eventKey - The agent event to stop listening to
|
|
55
|
-
* @param callback - The callback function to remove
|
|
56
|
-
*/
|
|
57
|
-
off(eventKey, callback) {
|
|
58
|
-
if (!this.agentListeners[eventKey]) return;
|
|
59
|
-
const index = this.agentListeners[eventKey]?.indexOf(callback);
|
|
60
|
-
if (index !== undefined && index > -1) {
|
|
61
|
-
this.agentListeners[eventKey]?.splice(index, 1);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Emit an agent event to all registered listeners AND send to backend
|
|
67
|
-
* @param eventKey - The agent event to emit
|
|
68
|
-
* @param data - Data to pass to listeners
|
|
69
|
-
* @internal - Used internally by the library
|
|
70
|
-
*/
|
|
71
|
-
async emit(eventKey, data) {
|
|
72
|
-
// Trigger local event listeners first
|
|
73
|
-
this.agentListeners[eventKey]?.forEach(callback => {
|
|
74
|
-
try {
|
|
75
|
-
callback(data);
|
|
76
|
-
} catch (error) {
|
|
77
|
-
console.error(`Error in agent event listener for ${eventKey}:`, error);
|
|
78
|
-
}
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
// Send to backend API
|
|
82
|
-
await this.sendToBackend(eventKey, data);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Send agent event data to backend API
|
|
87
|
-
* @param eventKey - The agent event type
|
|
88
|
-
* @param data - Event data
|
|
89
|
-
* @private
|
|
90
|
-
*/
|
|
91
|
-
async sendToBackend(eventKey, data) {
|
|
92
|
-
try {
|
|
93
|
-
// Get user identity to include app_user_id
|
|
94
|
-
const userIdentity = await getAgentData(EventKeys.USER_DATA);
|
|
95
|
-
if (!userIdentity?.app_user_id) {
|
|
96
|
-
console.warn(`[AgentEvent] Cannot send ${eventKey} to backend: User identity not found`);
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// Prepare payload with app_user_id
|
|
101
|
-
const payload = {
|
|
102
|
-
...data,
|
|
103
|
-
app_user_id: userIdentity.app_user_id,
|
|
104
|
-
eventKey: eventKey,
|
|
105
|
-
eventType: 'agent_event'
|
|
106
|
-
};
|
|
107
|
-
|
|
108
|
-
// Send to API
|
|
109
|
-
const apiService = APIService.getInstance();
|
|
110
|
-
const paramsData = buildEventPayload(payload);
|
|
111
|
-
const response = await apiService.updateUserData(paramsData);
|
|
112
|
-
if (!response.success) {
|
|
113
|
-
console.error(`[AgentEvent] Failed to send ${eventKey} to backend:`, response.error);
|
|
114
|
-
}
|
|
115
|
-
} catch (error) {
|
|
116
|
-
console.error(`[AgentEvent] Error sending ${eventKey} to backend:`, error);
|
|
117
|
-
// Fail silently - agent events should not break the app
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
7
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
if (eventKey) {
|
|
127
|
-
delete this.agentListeners[eventKey];
|
|
128
|
-
} else {
|
|
129
|
-
this.agentListeners = {};
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
8
|
+
import { getAgentData, setAgentData } from "../store/store.key.js";
|
|
9
|
+
import { APIService } from "../api/api.js";
|
|
10
|
+
import { buildEventPayload } from "../utils/constant.js";
|
|
11
|
+
import { AgentEventEmitter } from "./agent-event-emitter.js";
|
|
12
|
+
import { validateEventKey, validateAnalyticsEvent } from "./embed.validators.js";
|
|
133
13
|
class Embed {
|
|
134
14
|
events = {};
|
|
135
15
|
|
|
@@ -139,46 +19,48 @@ class Embed {
|
|
|
139
19
|
this.event = new AgentEventEmitter();
|
|
140
20
|
}
|
|
141
21
|
|
|
142
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Automatically adds a default listener if none exists
|
|
24
|
+
* @private
|
|
25
|
+
*/
|
|
143
26
|
ensureDefaultListener(eventKey) {
|
|
144
27
|
if (!this.events[eventKey]) {
|
|
145
|
-
this.events[eventKey] = [
|
|
28
|
+
this.events[eventKey] = [_data => {
|
|
29
|
+
// console.i('default event this', _data);
|
|
146
30
|
// todo: handle default event
|
|
147
|
-
console.info('default event this', data);
|
|
148
31
|
}];
|
|
149
32
|
}
|
|
150
33
|
}
|
|
151
34
|
|
|
152
35
|
/**
|
|
153
|
-
*
|
|
154
|
-
* @
|
|
155
|
-
* @param data - Event data payload
|
|
36
|
+
* Enriches event data with user identity
|
|
37
|
+
* @private
|
|
156
38
|
*/
|
|
157
|
-
async
|
|
158
|
-
if (
|
|
159
|
-
|
|
160
|
-
throw new Error(`Invalid event key: ${eventKey}. Must be one of: ${Object.values(EventKeys).join(', ')}`);
|
|
161
|
-
}
|
|
162
|
-
const key = eventKey;
|
|
163
|
-
if (key !== EventKeys.USER_DATA) {
|
|
164
|
-
const userIdentity = await getAgentData(EventKeys.USER_DATA);
|
|
39
|
+
async enrichEventData(eventKey, data) {
|
|
40
|
+
if (eventKey !== 'user_data') {
|
|
41
|
+
const userIdentity = await getAgentData('user_data');
|
|
165
42
|
if (userIdentity) {
|
|
166
43
|
data.app_user_id = userIdentity.app_user_id;
|
|
167
44
|
} else {
|
|
168
45
|
throw new Error('User identity not found');
|
|
169
46
|
}
|
|
170
47
|
}
|
|
48
|
+
}
|
|
171
49
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
50
|
+
/**
|
|
51
|
+
* Sends event data to the backend API
|
|
52
|
+
* @private
|
|
53
|
+
*/
|
|
54
|
+
async sendEventToAPI(eventKey, data, key) {
|
|
176
55
|
try {
|
|
177
56
|
const apiService = APIService.getInstance();
|
|
178
57
|
const paramsData = buildEventPayload({
|
|
179
58
|
...data,
|
|
180
59
|
eventKey: key
|
|
181
60
|
});
|
|
61
|
+
|
|
62
|
+
// Validate analytics events have event_name
|
|
63
|
+
validateAnalyticsEvent(paramsData);
|
|
182
64
|
const response = await apiService.updateUserData({
|
|
183
65
|
...paramsData
|
|
184
66
|
});
|
|
@@ -188,13 +70,40 @@ class Embed {
|
|
|
188
70
|
setAgentData(data, key);
|
|
189
71
|
} catch (error) {
|
|
190
72
|
throw new Error(`Failed to trigger API for event: ${eventKey}`);
|
|
191
|
-
// todo: handle error triggering API
|
|
192
73
|
}
|
|
74
|
+
}
|
|
193
75
|
|
|
194
|
-
|
|
76
|
+
/**
|
|
77
|
+
* Triggers local event listeners
|
|
78
|
+
* @private
|
|
79
|
+
*/
|
|
80
|
+
triggerEventListeners(key, data) {
|
|
195
81
|
this.events[key]?.forEach(callback => callback(data));
|
|
196
82
|
}
|
|
197
83
|
|
|
84
|
+
/**
|
|
85
|
+
* Send an event to the AI agent
|
|
86
|
+
* @param eventKey - The event type to send
|
|
87
|
+
* @param data - Event data payload
|
|
88
|
+
*/
|
|
89
|
+
async Event(eventKey, data) {
|
|
90
|
+
// Validate event key
|
|
91
|
+
validateEventKey(eventKey);
|
|
92
|
+
const key = eventKey;
|
|
93
|
+
|
|
94
|
+
// Enrich event data with user identity
|
|
95
|
+
await this.enrichEventData(key, data);
|
|
96
|
+
|
|
97
|
+
// Ensure a default listener is registered
|
|
98
|
+
this.ensureDefaultListener(key);
|
|
99
|
+
|
|
100
|
+
// Send event to backend API
|
|
101
|
+
await this.sendEventToAPI(eventKey, data, key);
|
|
102
|
+
|
|
103
|
+
// Trigger local event listeners
|
|
104
|
+
this.triggerEventListeners(key, data);
|
|
105
|
+
}
|
|
106
|
+
|
|
198
107
|
/**
|
|
199
108
|
* Add listener for data events (legacy support)
|
|
200
109
|
* @deprecated Use event.on() for agent events instead
|
|
@@ -208,4 +117,7 @@ class Embed {
|
|
|
208
117
|
}
|
|
209
118
|
const embed = new Embed();
|
|
210
119
|
export default embed;
|
|
120
|
+
|
|
121
|
+
// Re-export types and enums for convenience
|
|
122
|
+
export { EventKeys, AgentEvent } from "./embed.types.js";
|
|
211
123
|
//# sourceMappingURL=embed.event.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getAgentData","setAgentData","APIService","buildEventPayload","
|
|
1
|
+
{"version":3,"names":["getAgentData","setAgentData","APIService","buildEventPayload","AgentEventEmitter","validateEventKey","validateAnalyticsEvent","Embed","events","constructor","event","ensureDefaultListener","eventKey","_data","enrichEventData","data","userIdentity","app_user_id","Error","sendEventToAPI","key","apiService","getInstance","paramsData","response","updateUserData","success","error","triggerEventListeners","forEach","callback","Event","on","push","embed","EventKeys","AgentEvent"],"sourceRoot":"../../../src","sources":["events/embed.event.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAEA,SAASA,YAAY,EAAEC,YAAY,QAAQ,uBAAoB;AAC/D,SAASC,UAAU,QAAQ,eAAY;AACvC,SAASC,iBAAiB,QAAQ,sBAAmB;AACrD,SAASC,iBAAiB,QAAQ,0BAAuB;AACzD,SAASC,gBAAgB,EAAEC,sBAAsB,QAAQ,uBAAoB;AAG7E,MAAMC,KAAK,CAAC;EACFC,MAAM,GAA6C,CAAC,CAAC;;EAE7D;;EAGAC,WAAWA,CAAA,EAAG;IACZ,IAAI,CAACC,KAAK,GAAG,IAAIN,iBAAiB,CAAC,CAAC;EACtC;;EAEA;AACF;AACA;AACA;EACUO,qBAAqBA,CAACC,QAAmB,EAAQ;IACvD,IAAI,CAAC,IAAI,CAACJ,MAAM,CAACI,QAAQ,CAAC,EAAE;MAC1B,IAAI,CAACJ,MAAM,CAACI,QAAQ,CAAC,GAAG,CACrBC,KAAU,IAAK;QACd;QACA;MAAA,CACD,CACF;IACH;EACF;;EAEA;AACF;AACA;AACA;EACE,MAAcC,eAAeA,CAACF,QAAmB,EAAEG,IAAS,EAAiB;IAC3E,IAAIH,QAAQ,KAAK,WAAW,EAAE;MAC5B,MAAMI,YAAY,GAAG,MAAMhB,YAAY,CAAC,WAAwB,CAAC;MACjE,IAAIgB,YAAY,EAAE;QAChBD,IAAI,CAACE,WAAW,GAAGD,YAAY,CAACC,WAAW;MAC7C,CAAC,MAAM;QACL,MAAM,IAAIC,KAAK,CAAC,yBAAyB,CAAC;MAC5C;IACF;EACF;;EAEA;AACF;AACA;AACA;EACE,MAAcC,cAAcA,CAC1BP,QAAgB,EAChBG,IAAS,EACTK,GAAc,EACC;IACf,IAAI;MACF,MAAMC,UAAU,GAAGnB,UAAU,CAACoB,WAAW,CAAC,CAAC;MAC3C,MAAMC,UAAU,GAAGpB,iBAAiB,CAAC;QAAE,GAAGY,IAAI;QAAEH,QAAQ,EAAEQ;MAAI,CAAC,CAAC;;MAEhE;MACAd,sBAAsB,CAACiB,UAAU,CAAC;MAElC,MAAMC,QAAQ,GAAG,MAAMH,UAAU,CAACI,cAAc,CAAC;QAC/C,GAAGF;MACL,CAAC,CAAC;MAEF,IAAI,CAACC,QAAQ,CAACE,OAAO,EAAE;QACrB,MAAM,IAAIR,KAAK,CAAC,oCAAoCN,QAAQ,EAAE,CAAC;MACjE;MAEAX,YAAY,CAACc,IAAI,EAAEK,GAAG,CAAC;IACzB,CAAC,CAAC,OAAOO,KAAK,EAAE;MACd,MAAM,IAAIT,KAAK,CAAC,oCAAoCN,QAAQ,EAAE,CAAC;IACjE;EACF;;EAEA;AACF;AACA;AACA;EACUgB,qBAAqBA,CAACR,GAAc,EAAEL,IAAS,EAAQ;IAC7D,IAAI,CAACP,MAAM,CAACY,GAAG,CAAC,EAAES,OAAO,CAAEC,QAAQ,IAAKA,QAAQ,CAACf,IAAI,CAAC,CAAC;EACzD;;EAEA;AACF;AACA;AACA;AACA;EACE,MAAMgB,KAAKA,CAACnB,QAAgB,EAAEG,IAAS,EAAiB;IACtD;IACAV,gBAAgB,CAACO,QAAQ,CAAC;IAE1B,MAAMQ,GAAG,GAAGR,QAAqB;;IAEjC;IACA,MAAM,IAAI,CAACE,eAAe,CAACM,GAAG,EAAEL,IAAI,CAAC;;IAErC;IACA,IAAI,CAACJ,qBAAqB,CAACS,GAAG,CAAC;;IAE/B;IACA,MAAM,IAAI,CAACD,cAAc,CAACP,QAAQ,EAAEG,IAAI,EAAEK,GAAG,CAAC;;IAE9C;IACA,IAAI,CAACQ,qBAAqB,CAACR,GAAG,EAAEL,IAAI,CAAC;EACvC;;EAEA;AACF;AACA;AACA;EACEiB,EAAEA,CAACpB,QAAmB,EAAEkB,QAAuB,EAAQ;IACrD,IAAI,CAAC,IAAI,CAACtB,MAAM,CAACI,QAAQ,CAAC,EAAE;MAC1B,IAAI,CAACJ,MAAM,CAACI,QAAQ,CAAC,GAAG,EAAE;IAC5B;IACA,IAAI,CAACJ,MAAM,CAACI,QAAQ,CAAC,EAAEqB,IAAI,CAACH,QAAQ,CAAC;EACvC;AACF;AAEA,MAAMI,KAAK,GAAG,IAAI3B,KAAK,CAAC,CAAC;AACzB,eAAe2B,KAAK;;AAEpB;AACA,SAASC,SAAS,EAAEC,UAAU,QAAQ,kBAAe","ignoreList":[]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Types and interfaces for Embed events
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
// Predefined event keys for sending data to the agent
|
|
8
|
+
export let EventKeys = /*#__PURE__*/function (EventKeys) {
|
|
9
|
+
EventKeys["USER_DATA"] = "user_data";
|
|
10
|
+
EventKeys["SCREEN_STATE"] = "screen_state";
|
|
11
|
+
EventKeys["OFFER_STATE"] = "offer_state";
|
|
12
|
+
EventKeys["CUSTOM_EVENT"] = "custom_event";
|
|
13
|
+
EventKeys["FORM_STATE"] = "form_state";
|
|
14
|
+
EventKeys["ANALYTICS_DATA"] = "analytics_data";
|
|
15
|
+
EventKeys["ACTION_STATE"] = "action_state";
|
|
16
|
+
EventKeys["ERROR_STATE"] = "error_state";
|
|
17
|
+
EventKeys["SUCCESS_STATE"] = "success_state";
|
|
18
|
+
EventKeys["WARNING_STATE"] = "warning_state";
|
|
19
|
+
EventKeys["INFO_STATE"] = "info_state";
|
|
20
|
+
EventKeys["DEBUG_STATE"] = "debug_state";
|
|
21
|
+
return EventKeys;
|
|
22
|
+
}({});
|
|
23
|
+
|
|
24
|
+
// Agent event keys for listening to agent state changes
|
|
25
|
+
export let AgentEvent = /*#__PURE__*/function (AgentEvent) {
|
|
26
|
+
AgentEvent["AGENT_CONNECTED"] = "agent_connected";
|
|
27
|
+
AgentEvent["AGENT_DISCONNECTED"] = "agent_disconnected";
|
|
28
|
+
AgentEvent["POPUP_MESSAGE_VISIBLE"] = "popup_message_visible";
|
|
29
|
+
return AgentEvent;
|
|
30
|
+
}({});
|
|
31
|
+
|
|
32
|
+
// Event data interfaces
|
|
33
|
+
//# sourceMappingURL=embed.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["EventKeys","AgentEvent"],"sourceRoot":"../../../src","sources":["events/embed.types.ts"],"mappings":";;AAAA;AACA;AACA;;AAIA;AACA,WAAYA,SAAS,0BAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAAA,OAATA,SAAS;AAAA;;AAerB;AACA,WAAYC,UAAU,0BAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;;AAMtB","ignoreList":[]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Validation helpers for Embed events
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { EventKeys } from "./embed.types.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Validates event key is valid
|
|
11
|
+
* @param eventKey - The event key to validate
|
|
12
|
+
* @throws Error if event key is invalid
|
|
13
|
+
*/
|
|
14
|
+
export function validateEventKey(eventKey) {
|
|
15
|
+
if (!Object.values(EventKeys).includes(eventKey)) {
|
|
16
|
+
throw new Error(`Invalid event key: ${eventKey}. Must be one of: ${Object.values(EventKeys).join(', ')}`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Validates analytics events have required event_name
|
|
22
|
+
* @param paramsData - The event payload to validate
|
|
23
|
+
* @throws Error if analytics event is missing event_name
|
|
24
|
+
*/
|
|
25
|
+
export function validateAnalyticsEvent(paramsData) {
|
|
26
|
+
if (paramsData.type === 'analytics_data') {
|
|
27
|
+
if (!paramsData.event_name || paramsData.event_name.trim() === '') {
|
|
28
|
+
throw new Error(`Analytics event requires an event_name. Please provide event_name in the data payload.`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=embed.validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["EventKeys","validateEventKey","eventKey","Object","values","includes","Error","join","validateAnalyticsEvent","paramsData","type","event_name","trim"],"sourceRoot":"../../../src","sources":["events/embed.validators.ts"],"mappings":";;AAAA;AACA;AACA;;AAGA,SAASA,SAAS,QAAQ,kBAAe;;AAEzC;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAACC,QAAgB,EAAQ;EACvD,IAAI,CAACC,MAAM,CAACC,MAAM,CAACJ,SAAS,CAAC,CAACK,QAAQ,CAACH,QAAqB,CAAC,EAAE;IAC7D,MAAM,IAAII,KAAK,CACb,sBAAsBJ,QAAQ,qBAAqBC,MAAM,CAACC,MAAM,CAACJ,SAAS,CAAC,CAACO,IAAI,CAAC,IAAI,CAAC,EACxF,CAAC;EACH;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,sBAAsBA,CAACC,UAAwB,EAAQ;EACrE,IAAIA,UAAU,CAACC,IAAI,KAAK,gBAAgB,EAAE;IACxC,IAAI,CAACD,UAAU,CAACE,UAAU,IAAIF,UAAU,CAACE,UAAU,CAACC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;MACjE,MAAM,IAAIN,KAAK,CACb,wFACF,CAAC;IACH;EACF;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Events module
|
|
5
|
+
* Exports the main Embed event manager and related types
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export { default } from "./embed.event.js";
|
|
9
|
+
export { EventKeys, AgentEvent } from "./embed.types.js";
|
|
10
|
+
export { AgentEventEmitter } from "./agent-event-emitter.js";
|
|
11
|
+
export { validateEventKey, validateAnalyticsEvent } from "./embed.validators.js";
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["default","EventKeys","AgentEvent","AgentEventEmitter","validateEventKey","validateAnalyticsEvent"],"sourceRoot":"../../../src","sources":["events/index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAEA,SAASA,OAAO,QAAQ,kBAAe;AACvC,SAASC,SAAS,EAAEC,UAAU,QAAQ,kBAAe;AAOrD,SAASC,iBAAiB,QAAQ,0BAAuB;AACzD,SAASC,gBAAgB,EAAEC,sBAAsB,QAAQ,uBAAoB","ignoreList":[]}
|
|
@@ -29,6 +29,7 @@ export function buildEventPayload(params) {
|
|
|
29
29
|
screen,
|
|
30
30
|
flow,
|
|
31
31
|
app_version,
|
|
32
|
+
event_name,
|
|
32
33
|
...rest
|
|
33
34
|
} = params;
|
|
34
35
|
const resolvedAppUserId = typeof app_user_id === 'string' && app_user_id || typeof appUserId === 'string' && appUserId;
|
|
@@ -41,6 +42,15 @@ export function buildEventPayload(params) {
|
|
|
41
42
|
...(incomingData ?? {}),
|
|
42
43
|
...(eventData ?? {})
|
|
43
44
|
};
|
|
45
|
+
|
|
46
|
+
// Extract event_name if present in data, remove it from data object
|
|
47
|
+
let resolvedEventName = '';
|
|
48
|
+
if (typeof event_name === 'string' && event_name) {
|
|
49
|
+
resolvedEventName = event_name;
|
|
50
|
+
} else if (typeof data.event_name === 'string' && data.event_name) {
|
|
51
|
+
resolvedEventName = data.event_name;
|
|
52
|
+
delete data.event_name;
|
|
53
|
+
}
|
|
44
54
|
Object.entries(rest).forEach(([key, value]) => {
|
|
45
55
|
if (value !== undefined) {
|
|
46
56
|
data[key] = value;
|
|
@@ -51,6 +61,7 @@ export function buildEventPayload(params) {
|
|
|
51
61
|
type: eventKey,
|
|
52
62
|
app_user_id: resolvedAppUserId,
|
|
53
63
|
timestamp: new Date().toISOString(),
|
|
64
|
+
event_name: resolvedEventName,
|
|
54
65
|
sdk: {
|
|
55
66
|
sdk_name: SDK_NAME,
|
|
56
67
|
sdk_version: SDK_VERSION,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SDK_NAME","SDK_VERSION","SDK_PLATFORM","DEFAULT_EMBED_URL","generateEventId","Date","now","Math","random","toString","substr","buildEventPayload","params","eventKey","app_user_id","appUserId","eventData","data","incomingData","sessionId","session_id","context","screen","flow","app_version","rest","resolvedAppUserId","Error","Object","entries","forEach","key","value","undefined","payload","event_id","type","timestamp","toISOString","sdk","sdk_name","sdk_version","platform","resolvedSessionId","resolvedAppVersion"],"sourceRoot":"../../../src","sources":["utils/constant.ts"],"mappings":";;AAAA;;AAEA,OAAO,MAAMA,QAAQ,GAAG,oBAAoB;AAC5C,OAAO,MAAMC,WAAW,GAAG,QAAQ;AACnC,OAAO,MAAMC,YAAY,GAAG,cAAc;AAC1C,OAAO,MAAMC,iBAAiB,GAAG,yBAAyB;;AAE1D;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAAA,EAAW;EACxC,OAAO,SAASC,IAAI,CAACC,GAAG,CAAC,CAAC,IAAIC,IAAI,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC,CAACC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AACzE;
|
|
1
|
+
{"version":3,"names":["SDK_NAME","SDK_VERSION","SDK_PLATFORM","DEFAULT_EMBED_URL","generateEventId","Date","now","Math","random","toString","substr","buildEventPayload","params","eventKey","app_user_id","appUserId","eventData","data","incomingData","sessionId","session_id","context","screen","flow","app_version","event_name","rest","resolvedAppUserId","Error","resolvedEventName","Object","entries","forEach","key","value","undefined","payload","event_id","type","timestamp","toISOString","sdk","sdk_name","sdk_version","platform","resolvedSessionId","resolvedAppVersion"],"sourceRoot":"../../../src","sources":["utils/constant.ts"],"mappings":"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","ignoreList":[]}
|