@egain/ai-agent-sdk 0.1.0
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/README.md +295 -0
- package/dist/browser.js +22739 -0
- package/dist/core/AiAgent.d.ts +1126 -0
- package/dist/core/AiAgent.d.ts.map +1 -0
- package/dist/core/AiAgent.js +2037 -0
- package/dist/core/AiAgent.js.map +1 -0
- package/dist/core/api/ApiHelper.d.ts +433 -0
- package/dist/core/api/ApiHelper.d.ts.map +1 -0
- package/dist/core/api/ApiHelper.js +689 -0
- package/dist/core/api/ApiHelper.js.map +1 -0
- package/dist/core/api/CacheAdapter.d.ts +295 -0
- package/dist/core/api/CacheAdapter.d.ts.map +1 -0
- package/dist/core/api/CacheAdapter.js +298 -0
- package/dist/core/api/CacheAdapter.js.map +1 -0
- package/dist/core/auth/AnonymousAuthStrategy.d.ts +87 -0
- package/dist/core/auth/AnonymousAuthStrategy.d.ts.map +1 -0
- package/dist/core/auth/AnonymousAuthStrategy.js +257 -0
- package/dist/core/auth/AnonymousAuthStrategy.js.map +1 -0
- package/dist/core/auth/AuthProvider.d.ts +13 -0
- package/dist/core/auth/AuthProvider.d.ts.map +1 -0
- package/dist/core/auth/AuthProvider.js +2 -0
- package/dist/core/auth/AuthProvider.js.map +1 -0
- package/dist/core/auth/AuthStrategy.d.ts +74 -0
- package/dist/core/auth/AuthStrategy.d.ts.map +1 -0
- package/dist/core/auth/AuthStrategy.js +2 -0
- package/dist/core/auth/AuthStrategy.js.map +1 -0
- package/dist/core/auth/AuthenticationService.d.ts +226 -0
- package/dist/core/auth/AuthenticationService.d.ts.map +1 -0
- package/dist/core/auth/AuthenticationService.js +344 -0
- package/dist/core/auth/AuthenticationService.js.map +1 -0
- package/dist/core/auth/ClientCredentialsAuthStrategy.d.ts +62 -0
- package/dist/core/auth/ClientCredentialsAuthStrategy.d.ts.map +1 -0
- package/dist/core/auth/ClientCredentialsAuthStrategy.js +78 -0
- package/dist/core/auth/ClientCredentialsAuthStrategy.js.map +1 -0
- package/dist/core/auth/PKCEAuthStrategy.d.ts +136 -0
- package/dist/core/auth/PKCEAuthStrategy.d.ts.map +1 -0
- package/dist/core/auth/PKCEAuthStrategy.js +409 -0
- package/dist/core/auth/PKCEAuthStrategy.js.map +1 -0
- package/dist/core/auth/PreAuthStrategy.d.ts +101 -0
- package/dist/core/auth/PreAuthStrategy.d.ts.map +1 -0
- package/dist/core/auth/PreAuthStrategy.js +216 -0
- package/dist/core/auth/PreAuthStrategy.js.map +1 -0
- package/dist/core/auth/msal-browser.js +19683 -0
- package/dist/core/auth/msal-loader.d.ts +14 -0
- package/dist/core/auth/msal-loader.d.ts.map +1 -0
- package/dist/core/auth/msal-loader.js +43 -0
- package/dist/core/auth/msal-loader.js.map +1 -0
- package/dist/core/connection/Connection.d.ts +168 -0
- package/dist/core/connection/Connection.d.ts.map +1 -0
- package/dist/core/connection/Connection.js +290 -0
- package/dist/core/connection/Connection.js.map +1 -0
- package/dist/core/connection/ConnectionState.d.ts +11 -0
- package/dist/core/connection/ConnectionState.d.ts.map +1 -0
- package/dist/core/connection/ConnectionState.js +12 -0
- package/dist/core/connection/ConnectionState.js.map +1 -0
- package/dist/core/connection/Transport.d.ts +98 -0
- package/dist/core/connection/Transport.d.ts.map +1 -0
- package/dist/core/connection/Transport.js +27 -0
- package/dist/core/connection/Transport.js.map +1 -0
- package/dist/core/connection/WebSocketTransport.d.ts +65 -0
- package/dist/core/connection/WebSocketTransport.d.ts.map +1 -0
- package/dist/core/connection/WebSocketTransport.js +177 -0
- package/dist/core/connection/WebSocketTransport.js.map +1 -0
- package/dist/core/errors/SDKError.d.ts +27 -0
- package/dist/core/errors/SDKError.d.ts.map +1 -0
- package/dist/core/errors/SDKError.js +43 -0
- package/dist/core/errors/SDKError.js.map +1 -0
- package/dist/core/events/EventEmitter.d.ts +120 -0
- package/dist/core/events/EventEmitter.d.ts.map +1 -0
- package/dist/core/events/EventEmitter.js +183 -0
- package/dist/core/events/EventEmitter.js.map +1 -0
- package/dist/core/logging/LogLevel.d.ts +33 -0
- package/dist/core/logging/LogLevel.d.ts.map +1 -0
- package/dist/core/logging/LogLevel.js +40 -0
- package/dist/core/logging/LogLevel.js.map +1 -0
- package/dist/core/logging/Logger.d.ts +120 -0
- package/dist/core/logging/Logger.d.ts.map +1 -0
- package/dist/core/logging/Logger.js +204 -0
- package/dist/core/logging/Logger.js.map +1 -0
- package/dist/core/logging/globalLogger.d.ts +8 -0
- package/dist/core/logging/globalLogger.d.ts.map +1 -0
- package/dist/core/logging/globalLogger.js +12 -0
- package/dist/core/logging/globalLogger.js.map +1 -0
- package/dist/core/logging/types.d.ts +45 -0
- package/dist/core/logging/types.d.ts.map +1 -0
- package/dist/core/logging/types.js +2 -0
- package/dist/core/logging/types.js.map +1 -0
- package/dist/core/message/BaseMessageHandler.d.ts +208 -0
- package/dist/core/message/BaseMessageHandler.d.ts.map +1 -0
- package/dist/core/message/BaseMessageHandler.js +155 -0
- package/dist/core/message/BaseMessageHandler.js.map +1 -0
- package/dist/core/message/Message.d.ts +69 -0
- package/dist/core/message/Message.d.ts.map +1 -0
- package/dist/core/message/Message.js +131 -0
- package/dist/core/message/Message.js.map +1 -0
- package/dist/core/message/MessageProcessor.d.ts +51 -0
- package/dist/core/message/MessageProcessor.d.ts.map +1 -0
- package/dist/core/message/MessageProcessor.js +123 -0
- package/dist/core/message/MessageProcessor.js.map +1 -0
- package/dist/core/message/MessageTypes.d.ts +123 -0
- package/dist/core/message/MessageTypes.d.ts.map +1 -0
- package/dist/core/message/MessageTypes.js +106 -0
- package/dist/core/message/MessageTypes.js.map +1 -0
- package/dist/core/message/Transcript.d.ts +373 -0
- package/dist/core/message/Transcript.d.ts.map +1 -0
- package/dist/core/message/Transcript.js +355 -0
- package/dist/core/message/Transcript.js.map +1 -0
- package/dist/core/message/handlers/AgentMessageHandler.d.ts +26 -0
- package/dist/core/message/handlers/AgentMessageHandler.d.ts.map +1 -0
- package/dist/core/message/handlers/AgentMessageHandler.js +130 -0
- package/dist/core/message/handlers/AgentMessageHandler.js.map +1 -0
- package/dist/core/message/handlers/ChatHistoryHandler.d.ts +12 -0
- package/dist/core/message/handlers/ChatHistoryHandler.d.ts.map +1 -0
- package/dist/core/message/handlers/ChatHistoryHandler.js +49 -0
- package/dist/core/message/handlers/ChatHistoryHandler.js.map +1 -0
- package/dist/core/message/handlers/ErrorMessageHandler.d.ts +12 -0
- package/dist/core/message/handlers/ErrorMessageHandler.d.ts.map +1 -0
- package/dist/core/message/handlers/ErrorMessageHandler.js +49 -0
- package/dist/core/message/handlers/ErrorMessageHandler.js.map +1 -0
- package/dist/core/message/handlers/HeartbeatHandler.d.ts +12 -0
- package/dist/core/message/handlers/HeartbeatHandler.d.ts.map +1 -0
- package/dist/core/message/handlers/HeartbeatHandler.js +46 -0
- package/dist/core/message/handlers/HeartbeatHandler.js.map +1 -0
- package/dist/core/message/handlers/TokenRefreshHandler.d.ts +30 -0
- package/dist/core/message/handlers/TokenRefreshHandler.d.ts.map +1 -0
- package/dist/core/message/handlers/TokenRefreshHandler.js +84 -0
- package/dist/core/message/handlers/TokenRefreshHandler.js.map +1 -0
- package/dist/core/message/types.d.ts +107 -0
- package/dist/core/message/types.d.ts.map +1 -0
- package/dist/core/message/types.js +30 -0
- package/dist/core/message/types.js.map +1 -0
- package/dist/core/platform/HookContract.d.ts +112 -0
- package/dist/core/platform/HookContract.d.ts.map +1 -0
- package/dist/core/platform/HookContract.js +13 -0
- package/dist/core/platform/HookContract.js.map +1 -0
- package/dist/core/platform/PlatformComponentService.d.ts +40 -0
- package/dist/core/platform/PlatformComponentService.d.ts.map +1 -0
- package/dist/core/platform/PlatformComponentService.js +12 -0
- package/dist/core/platform/PlatformComponentService.js.map +1 -0
- package/dist/core/platform/PlatformScriptLoader.d.ts +41 -0
- package/dist/core/platform/PlatformScriptLoader.d.ts.map +1 -0
- package/dist/core/platform/PlatformScriptLoader.js +110 -0
- package/dist/core/platform/PlatformScriptLoader.js.map +1 -0
- package/dist/core/polyfills.d.ts +16 -0
- package/dist/core/polyfills.d.ts.map +1 -0
- package/dist/core/polyfills.js +168 -0
- package/dist/core/polyfills.js.map +1 -0
- package/dist/core/portal-initializer/PortalInitializer.d.ts +234 -0
- package/dist/core/portal-initializer/PortalInitializer.d.ts.map +1 -0
- package/dist/core/portal-initializer/PortalInitializer.js +636 -0
- package/dist/core/portal-initializer/PortalInitializer.js.map +1 -0
- package/dist/core/queue/MessageQueue.d.ts +277 -0
- package/dist/core/queue/MessageQueue.d.ts.map +1 -0
- package/dist/core/queue/MessageQueue.js +291 -0
- package/dist/core/queue/MessageQueue.js.map +1 -0
- package/dist/core/types/PortalTypes.d.ts +51 -0
- package/dist/core/types/PortalTypes.d.ts.map +1 -0
- package/dist/core/types/PortalTypes.js +8 -0
- package/dist/core/types/PortalTypes.js.map +1 -0
- package/dist/index.d.ts +91 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* # Transcript
|
|
3
|
+
*
|
|
4
|
+
* The Transcript feature automatically records all messages sent and received
|
|
5
|
+
* during a conversation, providing a complete history for display, debugging,
|
|
6
|
+
* or analytics.
|
|
7
|
+
*
|
|
8
|
+
* ## Overview
|
|
9
|
+
*
|
|
10
|
+
* Transcript is enabled by default and automatically captures:
|
|
11
|
+
* - Customer messages (sent)
|
|
12
|
+
* - Agent responses (received)
|
|
13
|
+
* - System messages
|
|
14
|
+
* - Context messages
|
|
15
|
+
*
|
|
16
|
+
* ## Quick Start
|
|
17
|
+
*
|
|
18
|
+
* Access the transcript through the agent instance:
|
|
19
|
+
*
|
|
20
|
+
* ```typescript
|
|
21
|
+
* // Get all transcript entries
|
|
22
|
+
* const entries = agent.getTranscript();
|
|
23
|
+
*
|
|
24
|
+
* // Get as JSON (for display or storage)
|
|
25
|
+
* const json = agent.getTranscriptAsJSON();
|
|
26
|
+
*
|
|
27
|
+
* // Get transcript size
|
|
28
|
+
* const count = agent.getTranscriptSize();
|
|
29
|
+
*
|
|
30
|
+
* // Clear transcript
|
|
31
|
+
* agent.clearTranscript();
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* ## Configuration
|
|
35
|
+
*
|
|
36
|
+
* Configure transcript behavior when creating the agent:
|
|
37
|
+
*
|
|
38
|
+
* ```typescript
|
|
39
|
+
* const agent = new AiAgent({
|
|
40
|
+
* id: "agent-id",
|
|
41
|
+
* endpoint: "https://your-endpoint.com",
|
|
42
|
+
* transcriptConfig: {
|
|
43
|
+
* enabled: true, // Enable/disable transcript
|
|
44
|
+
* excludeRoles: ["heartbeat"], // Exclude heartbeat messages
|
|
45
|
+
* excludePersonas: ["system"] // Exclude system messages
|
|
46
|
+
* }
|
|
47
|
+
* });
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* ## Filtering Entries
|
|
51
|
+
*
|
|
52
|
+
* Retrieve filtered transcript entries:
|
|
53
|
+
*
|
|
54
|
+
* ```typescript
|
|
55
|
+
* // Get only received messages
|
|
56
|
+
* const received = agent.getTranscript({ direction: 'received' });
|
|
57
|
+
*
|
|
58
|
+
* // Get messages from a specific time range
|
|
59
|
+
* const recent = agent.getTranscript({
|
|
60
|
+
* fromTimestamp: Date.now() - 3600000 // Last hour
|
|
61
|
+
* });
|
|
62
|
+
*
|
|
63
|
+
* // Get only agent messages
|
|
64
|
+
* const agentMessages = agent.getTranscript({ persona: 'agent' });
|
|
65
|
+
* ```
|
|
66
|
+
*
|
|
67
|
+
* ## Transcript Events
|
|
68
|
+
*
|
|
69
|
+
* Listen for transcript updates in real-time:
|
|
70
|
+
*
|
|
71
|
+
* ```typescript
|
|
72
|
+
* agent.on('transcriptUpdate', (event) => {
|
|
73
|
+
* const { entry } = event.payload;
|
|
74
|
+
* console.log(`${entry.direction}: ${entry.message.content}`);
|
|
75
|
+
* });
|
|
76
|
+
* ```
|
|
77
|
+
*
|
|
78
|
+
* ## Use Cases
|
|
79
|
+
*
|
|
80
|
+
* - **Chat UI**: Display conversation history
|
|
81
|
+
* - **Analytics**: Track conversation patterns
|
|
82
|
+
* - **Debugging**: Review message flow
|
|
83
|
+
* - **Persistence**: Save conversations to database
|
|
84
|
+
*
|
|
85
|
+
* @module Transcript
|
|
86
|
+
* @category Features
|
|
87
|
+
*/
|
|
88
|
+
/**
|
|
89
|
+
* Transcript storage class for managing conversation history.
|
|
90
|
+
*
|
|
91
|
+
* The Transcript class provides a complete record of all messages
|
|
92
|
+
* exchanged during a conversation. It supports filtering, JSON export,
|
|
93
|
+
* and real-time updates.
|
|
94
|
+
*
|
|
95
|
+
* @example Basic usage
|
|
96
|
+
* ```typescript
|
|
97
|
+
* const transcript = new Transcript();
|
|
98
|
+
*
|
|
99
|
+
* // Add a message
|
|
100
|
+
* transcript.add(message, 'sent', sessionId, agentId);
|
|
101
|
+
*
|
|
102
|
+
* // Get all entries
|
|
103
|
+
* const entries = transcript.getEntries();
|
|
104
|
+
*
|
|
105
|
+
* // Get as JSON for storage
|
|
106
|
+
* const json = transcript.getEntriesAsJSON();
|
|
107
|
+
*
|
|
108
|
+
* // Get entry count
|
|
109
|
+
* console.log(`${transcript.size()} messages`);
|
|
110
|
+
*
|
|
111
|
+
* // Clear all entries
|
|
112
|
+
* transcript.clear();
|
|
113
|
+
* ```
|
|
114
|
+
*
|
|
115
|
+
* @example With configuration
|
|
116
|
+
* ```typescript
|
|
117
|
+
* const transcript = new Transcript({
|
|
118
|
+
* enabled: true,
|
|
119
|
+
* excludeRoles: ['heartbeat'], // Don't record heartbeats
|
|
120
|
+
* });
|
|
121
|
+
* ```
|
|
122
|
+
*
|
|
123
|
+
* @example Filtering entries
|
|
124
|
+
* ```typescript
|
|
125
|
+
* // Get only agent responses
|
|
126
|
+
* const agentResponses = transcript.getEntries({
|
|
127
|
+
* direction: 'received',
|
|
128
|
+
* persona: 'agent'
|
|
129
|
+
* });
|
|
130
|
+
*
|
|
131
|
+
* // Get messages from the last 5 minutes
|
|
132
|
+
* const recentMessages = transcript.getEntries({
|
|
133
|
+
* fromTimestamp: Date.now() - 300000
|
|
134
|
+
* });
|
|
135
|
+
* ```
|
|
136
|
+
*
|
|
137
|
+
* @category Features
|
|
138
|
+
* @group Transcript
|
|
139
|
+
*/
|
|
140
|
+
export class Transcript {
|
|
141
|
+
/**
|
|
142
|
+
* Create a new Transcript instance
|
|
143
|
+
* @param config - Optional configuration for filtering
|
|
144
|
+
*/
|
|
145
|
+
constructor(config = {}) {
|
|
146
|
+
this.entries = [];
|
|
147
|
+
this.config = {
|
|
148
|
+
enabled: config.enabled ?? true,
|
|
149
|
+
includeMessageTypes: config.includeMessageTypes ?? [],
|
|
150
|
+
excludeRoles: config.excludeRoles ?? [],
|
|
151
|
+
excludePersonas: config.excludePersonas ?? [],
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Add a message to the transcript.
|
|
156
|
+
*
|
|
157
|
+
* Messages are automatically filtered based on configuration.
|
|
158
|
+
* If the transcript is disabled or the message matches an exclude filter,
|
|
159
|
+
* it will not be recorded.
|
|
160
|
+
*
|
|
161
|
+
* @param message - The message to add
|
|
162
|
+
* @param direction - Whether the message was 'sent' or 'received'
|
|
163
|
+
* @param sessionId - Optional session ID for context
|
|
164
|
+
* @param agentId - Optional agent ID for context
|
|
165
|
+
*
|
|
166
|
+
* @example
|
|
167
|
+
* ```typescript
|
|
168
|
+
* transcript.add(
|
|
169
|
+
* new Message('customer', 'human', 'Hello!'),
|
|
170
|
+
* 'sent',
|
|
171
|
+
* 'session-123',
|
|
172
|
+
* 'agent-456'
|
|
173
|
+
* );
|
|
174
|
+
* ```
|
|
175
|
+
*/
|
|
176
|
+
add(message, direction, sessionId, agentId) {
|
|
177
|
+
if (!this.config.enabled) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
// Check if message should be filtered out
|
|
181
|
+
if (!this.shouldInclude(message)) {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
const entry = {
|
|
185
|
+
message,
|
|
186
|
+
direction,
|
|
187
|
+
timestamp: message.timestamp || Date.now(),
|
|
188
|
+
sessionId,
|
|
189
|
+
agentId,
|
|
190
|
+
};
|
|
191
|
+
this.entries.push(entry);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Get transcript entries, optionally filtered.
|
|
195
|
+
*
|
|
196
|
+
* @param options - Optional filtering options
|
|
197
|
+
* @returns Array of transcript entries matching the filter
|
|
198
|
+
*
|
|
199
|
+
* @example
|
|
200
|
+
* ```typescript
|
|
201
|
+
* // Get all entries
|
|
202
|
+
* const all = transcript.getEntries();
|
|
203
|
+
*
|
|
204
|
+
* // Get only sent messages
|
|
205
|
+
* const sent = transcript.getEntries({ direction: 'sent' });
|
|
206
|
+
*
|
|
207
|
+
* // Get messages from last hour
|
|
208
|
+
* const recent = transcript.getEntries({
|
|
209
|
+
* fromTimestamp: Date.now() - 3600000
|
|
210
|
+
* });
|
|
211
|
+
* ```
|
|
212
|
+
*/
|
|
213
|
+
getEntries(options) {
|
|
214
|
+
let filtered = [...this.entries];
|
|
215
|
+
if (options) {
|
|
216
|
+
// Filter by timestamp range
|
|
217
|
+
if (options.fromTimestamp !== undefined) {
|
|
218
|
+
filtered = filtered.filter((entry) => entry.timestamp >= options.fromTimestamp);
|
|
219
|
+
}
|
|
220
|
+
if (options.toTimestamp !== undefined) {
|
|
221
|
+
filtered = filtered.filter((entry) => entry.timestamp <= options.toTimestamp);
|
|
222
|
+
}
|
|
223
|
+
// Filter by direction
|
|
224
|
+
if (options.direction && options.direction !== 'both') {
|
|
225
|
+
filtered = filtered.filter((entry) => entry.direction === options.direction);
|
|
226
|
+
}
|
|
227
|
+
// Filter by persona
|
|
228
|
+
if (options.persona) {
|
|
229
|
+
filtered = filtered.filter((entry) => entry.message.persona === options.persona);
|
|
230
|
+
}
|
|
231
|
+
// Filter by role
|
|
232
|
+
if (options.role) {
|
|
233
|
+
filtered = filtered.filter((entry) => entry.message.role === options.role);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return filtered;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Get transcript entries as plain JSON-serializable objects.
|
|
240
|
+
*
|
|
241
|
+
* Useful for storing transcripts in databases, sending to APIs,
|
|
242
|
+
* or displaying in UI components.
|
|
243
|
+
*
|
|
244
|
+
* @param options - Optional filtering options
|
|
245
|
+
* @returns Array of plain objects representing transcript entries
|
|
246
|
+
*
|
|
247
|
+
* @example
|
|
248
|
+
* ```typescript
|
|
249
|
+
* const json = transcript.getEntriesAsJSON();
|
|
250
|
+
*
|
|
251
|
+
* // Each entry includes:
|
|
252
|
+
* // {
|
|
253
|
+
* // messageId, persona, role, content, messageData,
|
|
254
|
+
* // timestamp, from, to, agentId, sessionId,
|
|
255
|
+
* // direction, entryTimestamp
|
|
256
|
+
* // }
|
|
257
|
+
*
|
|
258
|
+
* // Save to database
|
|
259
|
+
* await db.saveTranscript(json);
|
|
260
|
+
* ```
|
|
261
|
+
*/
|
|
262
|
+
getEntriesAsJSON(options) {
|
|
263
|
+
const entries = this.getEntries(options);
|
|
264
|
+
return entries.map((entry) => ({
|
|
265
|
+
messageId: entry.message.messageId,
|
|
266
|
+
persona: entry.message.persona,
|
|
267
|
+
role: entry.message.role,
|
|
268
|
+
content: entry.message.content,
|
|
269
|
+
messageData: entry.message.messageData,
|
|
270
|
+
timestamp: entry.message.timestamp,
|
|
271
|
+
from: entry.message.from,
|
|
272
|
+
to: entry.message.to,
|
|
273
|
+
agentId: entry.agentId ?? entry.message.agentId,
|
|
274
|
+
sessionId: entry.sessionId ?? entry.message.sessionId,
|
|
275
|
+
direction: entry.direction,
|
|
276
|
+
entryTimestamp: entry.timestamp,
|
|
277
|
+
}));
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Get the number of entries in the transcript.
|
|
281
|
+
* @returns Number of recorded messages
|
|
282
|
+
*/
|
|
283
|
+
size() {
|
|
284
|
+
return this.entries.length;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Clear all transcript entries.
|
|
288
|
+
*
|
|
289
|
+
* This removes all recorded messages. Use with caution as
|
|
290
|
+
* this action cannot be undone.
|
|
291
|
+
*/
|
|
292
|
+
clear() {
|
|
293
|
+
this.entries = [];
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Check if a message should be included based on configuration filters
|
|
297
|
+
* @param message - The message to check
|
|
298
|
+
* @returns True if message should be included
|
|
299
|
+
*/
|
|
300
|
+
shouldInclude(message) {
|
|
301
|
+
// Check exclude roles
|
|
302
|
+
if (this.config.excludeRoles.length > 0) {
|
|
303
|
+
if (this.config.excludeRoles.includes(message.role)) {
|
|
304
|
+
return false;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
// Check exclude personas
|
|
308
|
+
if (this.config.excludePersonas.length > 0) {
|
|
309
|
+
if (this.config.excludePersonas.includes(message.persona)) {
|
|
310
|
+
return false;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
// If includeMessageTypes is specified, check if message type matches
|
|
314
|
+
// Note: This is a simplified check. In a real implementation, you might
|
|
315
|
+
// want to map message persona/role combinations to message types
|
|
316
|
+
if (this.config.includeMessageTypes.length > 0) {
|
|
317
|
+
// For now, we'll include all messages if includeMessageTypes is specified
|
|
318
|
+
// This can be enhanced to map persona/role to message types
|
|
319
|
+
// For example: agent + human = 'agent_message', customer + human = 'customer_message'
|
|
320
|
+
}
|
|
321
|
+
return true;
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Update transcript configuration at runtime.
|
|
325
|
+
*
|
|
326
|
+
* @param config - New configuration options (partial update)
|
|
327
|
+
*
|
|
328
|
+
* @example
|
|
329
|
+
* ```typescript
|
|
330
|
+
* // Disable transcript temporarily
|
|
331
|
+
* transcript.updateConfig({ enabled: false });
|
|
332
|
+
*
|
|
333
|
+
* // Re-enable with new exclusions
|
|
334
|
+
* transcript.updateConfig({
|
|
335
|
+
* enabled: true,
|
|
336
|
+
* excludeRoles: ['heartbeat', 'token']
|
|
337
|
+
* });
|
|
338
|
+
* ```
|
|
339
|
+
*/
|
|
340
|
+
updateConfig(config) {
|
|
341
|
+
if (config.enabled !== undefined) {
|
|
342
|
+
this.config.enabled = config.enabled;
|
|
343
|
+
}
|
|
344
|
+
if (config.includeMessageTypes !== undefined) {
|
|
345
|
+
this.config.includeMessageTypes = config.includeMessageTypes;
|
|
346
|
+
}
|
|
347
|
+
if (config.excludeRoles !== undefined) {
|
|
348
|
+
this.config.excludeRoles = config.excludeRoles;
|
|
349
|
+
}
|
|
350
|
+
if (config.excludePersonas !== undefined) {
|
|
351
|
+
this.config.excludePersonas = config.excludePersonas;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
//# sourceMappingURL=Transcript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Transcript.js","sourceRoot":"","sources":["../../../src/core/message/Transcript.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { BaseMessageHandler } from '../BaseMessageHandler.js';
|
|
2
|
+
import { Message } from '../Message.js';
|
|
3
|
+
import { MessageHandlerResult } from '../types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Handler for agent messages (main chat responses)
|
|
6
|
+
* Processes agent messages and extracts follow-up options, escalation data, sources, and reasoning
|
|
7
|
+
*/
|
|
8
|
+
export declare class AgentMessageHandler extends BaseMessageHandler {
|
|
9
|
+
canHandle(message: Message): boolean;
|
|
10
|
+
handle(message: Message): MessageHandlerResult;
|
|
11
|
+
/**
|
|
12
|
+
* Checks if message has follow-up question options
|
|
13
|
+
* Only processes messages with role "follow up question agent"
|
|
14
|
+
*/
|
|
15
|
+
private hasFollowUpOptions;
|
|
16
|
+
/**
|
|
17
|
+
* Processes escalation data from an agent message
|
|
18
|
+
* Handles both live escalations (transfer to human agent) and alternate engagement options
|
|
19
|
+
*/
|
|
20
|
+
private processEscalation;
|
|
21
|
+
/**
|
|
22
|
+
* Builds an array of alternate engagement options based on escalation configuration
|
|
23
|
+
*/
|
|
24
|
+
private buildEscalationOptions;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=AgentMessageHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentMessageHandler.d.ts","sourceRoot":"","sources":["../../../../src/core/message/handlers/AgentMessageHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGnD;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,kBAAkB;IACzD,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAIpC,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,oBAAoB;IAqD9C;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAS1B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAqCzB;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAyC/B"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { BaseMessageHandler } from '../BaseMessageHandler.js';
|
|
2
|
+
import { PERSONA, ROLE } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Handler for agent messages (main chat responses)
|
|
5
|
+
* Processes agent messages and extracts follow-up options, escalation data, sources, and reasoning
|
|
6
|
+
*/
|
|
7
|
+
export class AgentMessageHandler extends BaseMessageHandler {
|
|
8
|
+
canHandle(message) {
|
|
9
|
+
return message.persona === PERSONA.AGENT;
|
|
10
|
+
}
|
|
11
|
+
handle(message) {
|
|
12
|
+
// Extract sessionId and agentId from messageData if available
|
|
13
|
+
const sessionId = message.sessionId;
|
|
14
|
+
const agentId = message.agentId;
|
|
15
|
+
// Build from object - agent is the sender
|
|
16
|
+
const from = {
|
|
17
|
+
name: message.from || 'AI Agent',
|
|
18
|
+
isAi: true,
|
|
19
|
+
};
|
|
20
|
+
// Build to object - customer is the recipient
|
|
21
|
+
const to = {
|
|
22
|
+
name: message.to || 'Customer',
|
|
23
|
+
isAi: false,
|
|
24
|
+
};
|
|
25
|
+
// Process escalation scenarios
|
|
26
|
+
const escalationResult = this.processEscalation(message);
|
|
27
|
+
// Check if there are follow-up options
|
|
28
|
+
const hasFollowUpOptions = this.hasFollowUpOptions(message);
|
|
29
|
+
// Build message object with persona, role, content, raw data, and additional fields
|
|
30
|
+
const messageObj = {
|
|
31
|
+
persona: message.persona,
|
|
32
|
+
role: message.role,
|
|
33
|
+
content: message.content,
|
|
34
|
+
raw: message.messageData || {},
|
|
35
|
+
...(escalationResult.escalationType && { escalationType: escalationResult.escalationType }),
|
|
36
|
+
...(escalationResult.escalationData && { escalationData: escalationResult.escalationData }),
|
|
37
|
+
...(message.messageData?.sources && { sources: message.messageData.sources }),
|
|
38
|
+
...(message.messageData?.reasoning && { reasoning: message.messageData.reasoning }),
|
|
39
|
+
...(escalationResult.isEscalation !== undefined && { showReasoning: escalationResult.isEscalation }),
|
|
40
|
+
...(message.role === ROLE.CUSTOMER_SUPPORT && { showFeedback: true }),
|
|
41
|
+
...(hasFollowUpOptions && { showOptions: true }),
|
|
42
|
+
};
|
|
43
|
+
// Build result in the required format
|
|
44
|
+
const result = {
|
|
45
|
+
type: 'agent_message',
|
|
46
|
+
messageId: message.messageId,
|
|
47
|
+
timestamp: message.timestamp || Date.now(),
|
|
48
|
+
sessionId: sessionId,
|
|
49
|
+
agentId: agentId,
|
|
50
|
+
from: from,
|
|
51
|
+
to: to,
|
|
52
|
+
message: messageObj,
|
|
53
|
+
};
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Checks if message has follow-up question options
|
|
58
|
+
* Only processes messages with role "follow up question agent"
|
|
59
|
+
*/
|
|
60
|
+
hasFollowUpOptions(message) {
|
|
61
|
+
if (message.role !== ROLE.FOLLOW_UP_QUESTION) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
const options = message.messageData?.options;
|
|
65
|
+
return !!(options && Array.isArray(options) && options.length > 0);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Processes escalation data from an agent message
|
|
69
|
+
* Handles both live escalations (transfer to human agent) and alternate engagement options
|
|
70
|
+
*/
|
|
71
|
+
processEscalation(message) {
|
|
72
|
+
const isEscalation = !!message.messageData?.escalation;
|
|
73
|
+
const escalationData = message.messageData?.escalationData;
|
|
74
|
+
const result = {
|
|
75
|
+
isEscalation,
|
|
76
|
+
escalationType: null,
|
|
77
|
+
escalationData: undefined,
|
|
78
|
+
};
|
|
79
|
+
if (!isEscalation || !escalationData) {
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
// Check for live escalation
|
|
83
|
+
if (escalationData.live) {
|
|
84
|
+
result.escalationType = 'live';
|
|
85
|
+
result.escalationData = escalationData;
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
// Build alternate engagement options
|
|
89
|
+
const escalationOptions = this.buildEscalationOptions(escalationData);
|
|
90
|
+
if (escalationOptions.length > 0) {
|
|
91
|
+
result.escalationType = 'alternate';
|
|
92
|
+
result.escalationData = {
|
|
93
|
+
...escalationData,
|
|
94
|
+
options: escalationOptions,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
return result;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Builds an array of alternate engagement options based on escalation configuration
|
|
101
|
+
*/
|
|
102
|
+
buildEscalationOptions(escalationData) {
|
|
103
|
+
const options = [];
|
|
104
|
+
if (escalationData.phone) {
|
|
105
|
+
options.push({
|
|
106
|
+
label: 'EG_CALL',
|
|
107
|
+
type: 'phone',
|
|
108
|
+
value: escalationData.phoneNumber,
|
|
109
|
+
icon: 'icon_phone_call_svg',
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
if (escalationData.sms) {
|
|
113
|
+
options.push({
|
|
114
|
+
label: 'EG_ALT_CONTACT_SMS',
|
|
115
|
+
type: 'sms',
|
|
116
|
+
value: escalationData.smsNumber,
|
|
117
|
+
icon: 'icon_messaging',
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
if (escalationData.email) {
|
|
121
|
+
options.push({
|
|
122
|
+
label: 'EG_EMAIL',
|
|
123
|
+
type: 'email',
|
|
124
|
+
icon: 'icon_email_svg',
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
return options;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=AgentMessageHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentMessageHandler.js","sourceRoot":"","sources":["../../../../src/core/message/handlers/AgentMessageHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BaseMessageHandler } from '../BaseMessageHandler.js';
|
|
2
|
+
import { Message } from '../Message.js';
|
|
3
|
+
import { MessageHandlerResult } from '../types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Handler for chat history messages
|
|
6
|
+
* Processes system messages containing chat history data
|
|
7
|
+
*/
|
|
8
|
+
export declare class ChatHistoryHandler extends BaseMessageHandler {
|
|
9
|
+
canHandle(message: Message): boolean;
|
|
10
|
+
handle(message: Message): MessageHandlerResult;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=ChatHistoryHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatHistoryHandler.d.ts","sourceRoot":"","sources":["../../../../src/core/message/handlers/ChatHistoryHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGnD;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,kBAAkB;IACxD,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAOpC,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,oBAAoB;CAyC/C"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { BaseMessageHandler } from '../BaseMessageHandler.js';
|
|
2
|
+
import { PERSONA, ROLE } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Handler for chat history messages
|
|
5
|
+
* Processes system messages containing chat history data
|
|
6
|
+
*/
|
|
7
|
+
export class ChatHistoryHandler extends BaseMessageHandler {
|
|
8
|
+
canHandle(message) {
|
|
9
|
+
return (message.persona === PERSONA.SYSTEM &&
|
|
10
|
+
message.role === ROLE.CHAT_HISTORY);
|
|
11
|
+
}
|
|
12
|
+
handle(message) {
|
|
13
|
+
const sessionId = message.sessionId;
|
|
14
|
+
const agentId = message.agentId;
|
|
15
|
+
const chatHistory = message.messageData?.chat_history;
|
|
16
|
+
// Build from object - system is the sender
|
|
17
|
+
const from = {
|
|
18
|
+
name: message.from || 'System',
|
|
19
|
+
isAi: false,
|
|
20
|
+
};
|
|
21
|
+
// Build to object - customer is the recipient
|
|
22
|
+
const to = {
|
|
23
|
+
name: message.to || 'Customer',
|
|
24
|
+
isAi: false,
|
|
25
|
+
};
|
|
26
|
+
// Build message object with persona, role, content, raw data, and chat history
|
|
27
|
+
const messageObj = {
|
|
28
|
+
persona: message.persona,
|
|
29
|
+
role: message.role,
|
|
30
|
+
content: message.content,
|
|
31
|
+
raw: message.messageData || {},
|
|
32
|
+
...(chatHistory && { chatHistory }),
|
|
33
|
+
};
|
|
34
|
+
// Build result in the required format
|
|
35
|
+
const result = {
|
|
36
|
+
type: 'chat_history_processed',
|
|
37
|
+
messageId: message.messageId,
|
|
38
|
+
timestamp: message.timestamp || Date.now(),
|
|
39
|
+
sessionId: sessionId,
|
|
40
|
+
agentId: agentId,
|
|
41
|
+
from: from,
|
|
42
|
+
to: to,
|
|
43
|
+
message: messageObj,
|
|
44
|
+
hasHistory: !!chatHistory,
|
|
45
|
+
};
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=ChatHistoryHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatHistoryHandler.js","sourceRoot":"","sources":["../../../../src/core/message/handlers/ChatHistoryHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG9D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAE5C;;;GAGG;AACH,MAAM,OAAO,kBAAmB,SAAQ,kBAAkB;IACxD,SAAS,CAAC,OAAgB;QACxB,OAAO,CACL,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM;YAClC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,CACnC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,OAAgB;QACrB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACpC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC;QAEtD,2CAA2C;QAC3C,MAAM,IAAI,GAAG;YACX,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,QAAQ;YAC9B,IAAI,EAAE,KAAK;SACZ,CAAC;QAEF,8CAA8C;QAC9C,MAAM,EAAE,GAAG;YACT,IAAI,EAAE,OAAO,CAAC,EAAE,IAAI,UAAU;YAC9B,IAAI,EAAE,KAAK;SACZ,CAAC;QAEF,+EAA+E;QAC/E,MAAM,UAAU,GAAG;YACjB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,GAAG,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;YAC9B,GAAG,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,CAAC;SACpC,CAAC;QAEF,sCAAsC;QACtC,MAAM,MAAM,GAAyB;YACnC,IAAI,EAAE,wBAAwB;YAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;YAC1C,SAAS,EAAE,SAAS;YACpB,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,IAAI;YACV,EAAE,EAAE,EAAE;YACN,OAAO,EAAE,UAAU;YACnB,UAAU,EAAE,CAAC,CAAC,WAAW;SAC1B,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BaseMessageHandler } from '../BaseMessageHandler.js';
|
|
2
|
+
import { Message } from '../Message.js';
|
|
3
|
+
import { MessageHandlerResult } from '../types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Handler for error messages
|
|
6
|
+
* Processes metadata error messages indicating an error occurred
|
|
7
|
+
*/
|
|
8
|
+
export declare class ErrorMessageHandler extends BaseMessageHandler {
|
|
9
|
+
canHandle(message: Message): boolean;
|
|
10
|
+
handle(message: Message): MessageHandlerResult;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=ErrorMessageHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorMessageHandler.d.ts","sourceRoot":"","sources":["../../../../src/core/message/handlers/ErrorMessageHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGnD;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,kBAAkB;IACzD,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAOpC,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,oBAAoB;CAyC/C"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { BaseMessageHandler } from '../BaseMessageHandler.js';
|
|
2
|
+
import { PERSONA, ROLE } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Handler for error messages
|
|
5
|
+
* Processes metadata error messages indicating an error occurred
|
|
6
|
+
*/
|
|
7
|
+
export class ErrorMessageHandler extends BaseMessageHandler {
|
|
8
|
+
canHandle(message) {
|
|
9
|
+
return (message.persona === PERSONA.METADATA &&
|
|
10
|
+
message.role === ROLE.ERROR);
|
|
11
|
+
}
|
|
12
|
+
handle(message) {
|
|
13
|
+
const sessionId = message.sessionId;
|
|
14
|
+
const agentId = message.agentId;
|
|
15
|
+
const errorCode = message.messageData?.error_code;
|
|
16
|
+
// Build from object - metadata/system is the sender
|
|
17
|
+
const from = {
|
|
18
|
+
name: message.from || 'System',
|
|
19
|
+
isAi: false,
|
|
20
|
+
};
|
|
21
|
+
// Build to object - customer/client is the recipient
|
|
22
|
+
const to = {
|
|
23
|
+
name: message.to || 'Client',
|
|
24
|
+
isAi: false,
|
|
25
|
+
};
|
|
26
|
+
// Build message object with persona, role, content, and raw data
|
|
27
|
+
const messageObj = {
|
|
28
|
+
persona: message.persona,
|
|
29
|
+
role: message.role,
|
|
30
|
+
content: message.content,
|
|
31
|
+
raw: message.messageData || {},
|
|
32
|
+
...(errorCode && { errorCode }),
|
|
33
|
+
};
|
|
34
|
+
// Build result in the required format
|
|
35
|
+
const result = {
|
|
36
|
+
type: 'error_message',
|
|
37
|
+
messageId: message.messageId,
|
|
38
|
+
timestamp: message.timestamp || Date.now(),
|
|
39
|
+
sessionId: sessionId,
|
|
40
|
+
agentId: agentId,
|
|
41
|
+
from: from,
|
|
42
|
+
to: to,
|
|
43
|
+
message: messageObj,
|
|
44
|
+
errorCode,
|
|
45
|
+
};
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=ErrorMessageHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorMessageHandler.js","sourceRoot":"","sources":["../../../../src/core/message/handlers/ErrorMessageHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG9D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAE5C;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,kBAAkB;IACzD,SAAS,CAAC,OAAgB;QACxB,OAAO,CACL,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,QAAQ;YACpC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAC5B,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,OAAgB;QACrB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACpC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC;QAElD,oDAAoD;QACpD,MAAM,IAAI,GAAG;YACX,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,QAAQ;YAC9B,IAAI,EAAE,KAAK;SACZ,CAAC;QAEF,qDAAqD;QACrD,MAAM,EAAE,GAAG;YACT,IAAI,EAAE,OAAO,CAAC,EAAE,IAAI,QAAQ;YAC5B,IAAI,EAAE,KAAK;SACZ,CAAC;QAEF,iEAAiE;QACjE,MAAM,UAAU,GAAG;YACjB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,GAAG,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;YAC9B,GAAG,CAAC,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC;SAChC,CAAC;QAEF,sCAAsC;QACtC,MAAM,MAAM,GAAyB;YACnC,IAAI,EAAE,eAAe;YACrB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;YAC1C,SAAS,EAAE,SAAS;YACpB,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,IAAI;YACV,EAAE,EAAE,EAAE;YACN,OAAO,EAAE,UAAU;YACnB,SAAS;SACV,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|