@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,277 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* # Message Queue
|
|
3
|
+
*
|
|
4
|
+
* The Message Queue feature provides automatic message buffering when the
|
|
5
|
+
* connection is unavailable. Messages are queued locally and automatically
|
|
6
|
+
* sent when the connection is restored.
|
|
7
|
+
*
|
|
8
|
+
* ## Overview
|
|
9
|
+
*
|
|
10
|
+
* When you call `agent.send()` while disconnected:
|
|
11
|
+
* 1. The message is added to an internal queue
|
|
12
|
+
* 2. The SDK continues without throwing an error
|
|
13
|
+
* 3. When connection is restored, queued messages are sent automatically
|
|
14
|
+
* 4. A `queueFlushed` event is emitted with the count of sent messages
|
|
15
|
+
*
|
|
16
|
+
* ## Quick Start
|
|
17
|
+
*
|
|
18
|
+
* Message queuing works automatically:
|
|
19
|
+
*
|
|
20
|
+
* ```typescript
|
|
21
|
+
* // This works even if disconnected
|
|
22
|
+
* await agent.send("Hello!"); // Queued if offline
|
|
23
|
+
*
|
|
24
|
+
* // Check queue status
|
|
25
|
+
* const queueSize = agent.getQueueSize();
|
|
26
|
+
* console.log(`${queueSize} messages waiting`);
|
|
27
|
+
*
|
|
28
|
+
* // Clear the queue if needed
|
|
29
|
+
* agent.clearQueue();
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* ## Queue Events
|
|
33
|
+
*
|
|
34
|
+
* Listen for queue-related events:
|
|
35
|
+
*
|
|
36
|
+
* ```typescript
|
|
37
|
+
* agent.on('queueFlushed', (event) => {
|
|
38
|
+
* console.log(`Sent ${event.payload.count} queued messages`);
|
|
39
|
+
* });
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* ## Configuration
|
|
43
|
+
*
|
|
44
|
+
* Configure queue behavior when creating the agent:
|
|
45
|
+
*
|
|
46
|
+
* ```typescript
|
|
47
|
+
* const agent = new AiAgent({
|
|
48
|
+
* id: "agent-id",
|
|
49
|
+
* endpoint: "https://your-endpoint.com",
|
|
50
|
+
* maxQueueSize: 1000 // Maximum messages to queue (default: 1000)
|
|
51
|
+
* });
|
|
52
|
+
* ```
|
|
53
|
+
*
|
|
54
|
+
* ## Retry Behavior
|
|
55
|
+
*
|
|
56
|
+
* The queue includes automatic retry logic:
|
|
57
|
+
* - Each message is retried up to 3 times
|
|
58
|
+
* - Failed messages are removed after max attempts
|
|
59
|
+
* - An error event is emitted for failed messages
|
|
60
|
+
*
|
|
61
|
+
* ## Use Cases
|
|
62
|
+
*
|
|
63
|
+
* - **Offline Support**: Continue sending while temporarily disconnected
|
|
64
|
+
* - **Network Resilience**: Handle flaky network connections
|
|
65
|
+
* - **User Experience**: No need to handle connection state in UI
|
|
66
|
+
*
|
|
67
|
+
* @module MessageQueue
|
|
68
|
+
* @category Features
|
|
69
|
+
*/
|
|
70
|
+
/**
|
|
71
|
+
* Queued message with metadata for retry handling.
|
|
72
|
+
*
|
|
73
|
+
* Each queued message includes a unique ID for idempotency,
|
|
74
|
+
* timestamp for ordering, and attempt counter for retry logic.
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* const queuedMessage: QueuedMessage = {
|
|
79
|
+
* id: "msg-123",
|
|
80
|
+
* data: { persona: "customer", content: "Hello" },
|
|
81
|
+
* timestamp: Date.now(),
|
|
82
|
+
* attempts: 0
|
|
83
|
+
* };
|
|
84
|
+
* ```
|
|
85
|
+
*
|
|
86
|
+
* @category Features
|
|
87
|
+
* @group MessageQueue
|
|
88
|
+
*/
|
|
89
|
+
export interface QueuedMessage {
|
|
90
|
+
/** Unique message identifier for idempotency */
|
|
91
|
+
id: string;
|
|
92
|
+
/** The message payload to be sent */
|
|
93
|
+
data: any;
|
|
94
|
+
/** Timestamp when the message was queued */
|
|
95
|
+
timestamp: number;
|
|
96
|
+
/** Number of send attempts made */
|
|
97
|
+
attempts: number;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* FIFO message queue with idempotency and retry support.
|
|
101
|
+
*
|
|
102
|
+
* The MessageQueue class manages outgoing messages when the connection
|
|
103
|
+
* is unavailable. Messages are stored in order and sent when the
|
|
104
|
+
* connection is restored.
|
|
105
|
+
*
|
|
106
|
+
* @example Basic usage
|
|
107
|
+
* ```typescript
|
|
108
|
+
* const queue = new MessageQueue(1000, 3); // max 1000 messages, 3 retries
|
|
109
|
+
*
|
|
110
|
+
* // Add a message
|
|
111
|
+
* const id = queue.enqueue({ text: "Hello" });
|
|
112
|
+
*
|
|
113
|
+
* // Check queue status
|
|
114
|
+
* console.log(`Queue size: ${queue.size()}`);
|
|
115
|
+
* console.log(`Is empty: ${queue.isEmpty()}`);
|
|
116
|
+
*
|
|
117
|
+
* // Process messages
|
|
118
|
+
* while (!queue.isEmpty()) {
|
|
119
|
+
* const message = queue.peek();
|
|
120
|
+
* try {
|
|
121
|
+
* await sendToServer(message.data);
|
|
122
|
+
* queue.dequeue(); // Remove on success
|
|
123
|
+
* } catch (error) {
|
|
124
|
+
* const shouldRetry = queue.markAttempted(message.id);
|
|
125
|
+
* if (!shouldRetry) {
|
|
126
|
+
* queue.remove(message.id); // Max retries exceeded
|
|
127
|
+
* }
|
|
128
|
+
* }
|
|
129
|
+
* }
|
|
130
|
+
* ```
|
|
131
|
+
*
|
|
132
|
+
* @example With custom ID
|
|
133
|
+
* ```typescript
|
|
134
|
+
* // Use custom ID for idempotency
|
|
135
|
+
* const messageId = queue.enqueue(data, "custom-id-123");
|
|
136
|
+
*
|
|
137
|
+
* // Later, you can remove by ID
|
|
138
|
+
* queue.remove("custom-id-123");
|
|
139
|
+
* ```
|
|
140
|
+
*
|
|
141
|
+
* @category Features
|
|
142
|
+
* @group MessageQueue
|
|
143
|
+
*/
|
|
144
|
+
export declare class MessageQueue {
|
|
145
|
+
private queue;
|
|
146
|
+
private maxSize;
|
|
147
|
+
private maxAttempts;
|
|
148
|
+
/**
|
|
149
|
+
* Create a new MessageQueue
|
|
150
|
+
* @param maxSize - Maximum number of messages to queue (default: 1000)
|
|
151
|
+
* @param maxAttempts - Maximum send attempts per message (default: 3)
|
|
152
|
+
*/
|
|
153
|
+
constructor(maxSize?: number, maxAttempts?: number);
|
|
154
|
+
/**
|
|
155
|
+
* Add a message to the queue.
|
|
156
|
+
*
|
|
157
|
+
* Messages are added to the end of the queue (FIFO order).
|
|
158
|
+
* If the queue is full, a MessageError is thrown.
|
|
159
|
+
*
|
|
160
|
+
* @param data - The message data to queue
|
|
161
|
+
* @param id - Optional custom message ID (auto-generated if not provided)
|
|
162
|
+
* @returns The message ID
|
|
163
|
+
* @throws MessageError if queue is full
|
|
164
|
+
*
|
|
165
|
+
* @example
|
|
166
|
+
* ```typescript
|
|
167
|
+
* // Auto-generated ID
|
|
168
|
+
* const id1 = queue.enqueue({ text: "Hello" });
|
|
169
|
+
*
|
|
170
|
+
* // Custom ID for tracking
|
|
171
|
+
* const id2 = queue.enqueue({ text: "World" }, "my-message-id");
|
|
172
|
+
* ```
|
|
173
|
+
*/
|
|
174
|
+
enqueue(data: any, id?: string): string;
|
|
175
|
+
/**
|
|
176
|
+
* Get the next message without removing it.
|
|
177
|
+
*
|
|
178
|
+
* Use this to inspect the next message before deciding
|
|
179
|
+
* whether to process and remove it.
|
|
180
|
+
*
|
|
181
|
+
* @returns The next message or null if queue is empty
|
|
182
|
+
*
|
|
183
|
+
* @example
|
|
184
|
+
* ```typescript
|
|
185
|
+
* const next = queue.peek();
|
|
186
|
+
* if (next) {
|
|
187
|
+
* console.log(`Next message: ${next.id}`);
|
|
188
|
+
* }
|
|
189
|
+
* ```
|
|
190
|
+
*/
|
|
191
|
+
peek(): QueuedMessage | null;
|
|
192
|
+
/**
|
|
193
|
+
* Remove and return the next message from the queue.
|
|
194
|
+
*
|
|
195
|
+
* Call this after successfully processing a message.
|
|
196
|
+
*
|
|
197
|
+
* @returns The removed message or null if queue is empty
|
|
198
|
+
*
|
|
199
|
+
* @example
|
|
200
|
+
* ```typescript
|
|
201
|
+
* const message = queue.dequeue();
|
|
202
|
+
* if (message) {
|
|
203
|
+
* await processMessage(message.data);
|
|
204
|
+
* }
|
|
205
|
+
* ```
|
|
206
|
+
*/
|
|
207
|
+
dequeue(): QueuedMessage | null;
|
|
208
|
+
/**
|
|
209
|
+
* Mark a message as attempted and check if retry is allowed.
|
|
210
|
+
*
|
|
211
|
+
* Call this when a send attempt fails. Returns true if the
|
|
212
|
+
* message should be retried, false if max attempts exceeded.
|
|
213
|
+
*
|
|
214
|
+
* @param id - The message ID to mark
|
|
215
|
+
* @returns True if retry is allowed, false if max attempts reached
|
|
216
|
+
*
|
|
217
|
+
* @example
|
|
218
|
+
* ```typescript
|
|
219
|
+
* try {
|
|
220
|
+
* await sendMessage(message.data);
|
|
221
|
+
* queue.dequeue();
|
|
222
|
+
* } catch (error) {
|
|
223
|
+
* const shouldRetry = queue.markAttempted(message.id);
|
|
224
|
+
* if (!shouldRetry) {
|
|
225
|
+
* queue.remove(message.id);
|
|
226
|
+
* console.error(`Message ${message.id} failed permanently`);
|
|
227
|
+
* }
|
|
228
|
+
* }
|
|
229
|
+
* ```
|
|
230
|
+
*/
|
|
231
|
+
markAttempted(id: string): boolean;
|
|
232
|
+
/**
|
|
233
|
+
* Remove a message by ID.
|
|
234
|
+
*
|
|
235
|
+
* Use this to remove a message that failed permanently
|
|
236
|
+
* or is no longer needed.
|
|
237
|
+
*
|
|
238
|
+
* @param id - The message ID to remove
|
|
239
|
+
* @returns True if message was found and removed
|
|
240
|
+
*
|
|
241
|
+
* @example
|
|
242
|
+
* ```typescript
|
|
243
|
+
* const removed = queue.remove("message-id");
|
|
244
|
+
* console.log(removed ? "Removed" : "Not found");
|
|
245
|
+
* ```
|
|
246
|
+
*/
|
|
247
|
+
remove(id: string): boolean;
|
|
248
|
+
/**
|
|
249
|
+
* Get the current number of messages in the queue.
|
|
250
|
+
* @returns Number of queued messages
|
|
251
|
+
*/
|
|
252
|
+
size(): number;
|
|
253
|
+
/**
|
|
254
|
+
* Check if the queue is empty.
|
|
255
|
+
* @returns True if no messages are queued
|
|
256
|
+
*/
|
|
257
|
+
isEmpty(): boolean;
|
|
258
|
+
/**
|
|
259
|
+
* Remove all messages from the queue.
|
|
260
|
+
*
|
|
261
|
+
* Use with caution - all queued messages will be lost.
|
|
262
|
+
*/
|
|
263
|
+
clear(): void;
|
|
264
|
+
/**
|
|
265
|
+
* Get all messages in the queue (for debugging).
|
|
266
|
+
*
|
|
267
|
+
* Returns a read-only copy of the queue contents.
|
|
268
|
+
*
|
|
269
|
+
* @returns Array of all queued messages
|
|
270
|
+
*/
|
|
271
|
+
getAll(): readonly QueuedMessage[];
|
|
272
|
+
/**
|
|
273
|
+
* Generate a unique message ID
|
|
274
|
+
*/
|
|
275
|
+
private generateId;
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=MessageQueue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageQueue.d.ts","sourceRoot":"","sources":["../../../src/core/queue/MessageQueue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AAIH;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,qCAAqC;IACrC,IAAI,EAAE,GAAG,CAAC;IACV,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAS;IAE5B;;;;OAIG;gBACS,OAAO,GAAE,MAAa,EAAE,WAAW,GAAE,MAAU;IAK3D;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAiBvC;;;;;;;;;;;;;;;OAeG;IACH,IAAI,IAAI,aAAa,GAAG,IAAI;IAI5B;;;;;;;;;;;;;;OAcG;IACH,OAAO,IAAI,aAAa,GAAG,IAAI;IAI/B;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IASlC;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAS3B;;;OAGG;IACH,IAAI,IAAI,MAAM;IAId;;;OAGG;IACH,OAAO,IAAI,OAAO;IAIlB;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAIb;;;;;;OAMG;IACH,MAAM,IAAI,SAAS,aAAa,EAAE;IAIlC;;OAEG;IACH,OAAO,CAAC,UAAU;CAGnB"}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* # Message Queue
|
|
3
|
+
*
|
|
4
|
+
* The Message Queue feature provides automatic message buffering when the
|
|
5
|
+
* connection is unavailable. Messages are queued locally and automatically
|
|
6
|
+
* sent when the connection is restored.
|
|
7
|
+
*
|
|
8
|
+
* ## Overview
|
|
9
|
+
*
|
|
10
|
+
* When you call `agent.send()` while disconnected:
|
|
11
|
+
* 1. The message is added to an internal queue
|
|
12
|
+
* 2. The SDK continues without throwing an error
|
|
13
|
+
* 3. When connection is restored, queued messages are sent automatically
|
|
14
|
+
* 4. A `queueFlushed` event is emitted with the count of sent messages
|
|
15
|
+
*
|
|
16
|
+
* ## Quick Start
|
|
17
|
+
*
|
|
18
|
+
* Message queuing works automatically:
|
|
19
|
+
*
|
|
20
|
+
* ```typescript
|
|
21
|
+
* // This works even if disconnected
|
|
22
|
+
* await agent.send("Hello!"); // Queued if offline
|
|
23
|
+
*
|
|
24
|
+
* // Check queue status
|
|
25
|
+
* const queueSize = agent.getQueueSize();
|
|
26
|
+
* console.log(`${queueSize} messages waiting`);
|
|
27
|
+
*
|
|
28
|
+
* // Clear the queue if needed
|
|
29
|
+
* agent.clearQueue();
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* ## Queue Events
|
|
33
|
+
*
|
|
34
|
+
* Listen for queue-related events:
|
|
35
|
+
*
|
|
36
|
+
* ```typescript
|
|
37
|
+
* agent.on('queueFlushed', (event) => {
|
|
38
|
+
* console.log(`Sent ${event.payload.count} queued messages`);
|
|
39
|
+
* });
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* ## Configuration
|
|
43
|
+
*
|
|
44
|
+
* Configure queue behavior when creating the agent:
|
|
45
|
+
*
|
|
46
|
+
* ```typescript
|
|
47
|
+
* const agent = new AiAgent({
|
|
48
|
+
* id: "agent-id",
|
|
49
|
+
* endpoint: "https://your-endpoint.com",
|
|
50
|
+
* maxQueueSize: 1000 // Maximum messages to queue (default: 1000)
|
|
51
|
+
* });
|
|
52
|
+
* ```
|
|
53
|
+
*
|
|
54
|
+
* ## Retry Behavior
|
|
55
|
+
*
|
|
56
|
+
* The queue includes automatic retry logic:
|
|
57
|
+
* - Each message is retried up to 3 times
|
|
58
|
+
* - Failed messages are removed after max attempts
|
|
59
|
+
* - An error event is emitted for failed messages
|
|
60
|
+
*
|
|
61
|
+
* ## Use Cases
|
|
62
|
+
*
|
|
63
|
+
* - **Offline Support**: Continue sending while temporarily disconnected
|
|
64
|
+
* - **Network Resilience**: Handle flaky network connections
|
|
65
|
+
* - **User Experience**: No need to handle connection state in UI
|
|
66
|
+
*
|
|
67
|
+
* @module MessageQueue
|
|
68
|
+
* @category Features
|
|
69
|
+
*/
|
|
70
|
+
import { MessageError } from '../errors/SDKError.js';
|
|
71
|
+
/**
|
|
72
|
+
* FIFO message queue with idempotency and retry support.
|
|
73
|
+
*
|
|
74
|
+
* The MessageQueue class manages outgoing messages when the connection
|
|
75
|
+
* is unavailable. Messages are stored in order and sent when the
|
|
76
|
+
* connection is restored.
|
|
77
|
+
*
|
|
78
|
+
* @example Basic usage
|
|
79
|
+
* ```typescript
|
|
80
|
+
* const queue = new MessageQueue(1000, 3); // max 1000 messages, 3 retries
|
|
81
|
+
*
|
|
82
|
+
* // Add a message
|
|
83
|
+
* const id = queue.enqueue({ text: "Hello" });
|
|
84
|
+
*
|
|
85
|
+
* // Check queue status
|
|
86
|
+
* console.log(`Queue size: ${queue.size()}`);
|
|
87
|
+
* console.log(`Is empty: ${queue.isEmpty()}`);
|
|
88
|
+
*
|
|
89
|
+
* // Process messages
|
|
90
|
+
* while (!queue.isEmpty()) {
|
|
91
|
+
* const message = queue.peek();
|
|
92
|
+
* try {
|
|
93
|
+
* await sendToServer(message.data);
|
|
94
|
+
* queue.dequeue(); // Remove on success
|
|
95
|
+
* } catch (error) {
|
|
96
|
+
* const shouldRetry = queue.markAttempted(message.id);
|
|
97
|
+
* if (!shouldRetry) {
|
|
98
|
+
* queue.remove(message.id); // Max retries exceeded
|
|
99
|
+
* }
|
|
100
|
+
* }
|
|
101
|
+
* }
|
|
102
|
+
* ```
|
|
103
|
+
*
|
|
104
|
+
* @example With custom ID
|
|
105
|
+
* ```typescript
|
|
106
|
+
* // Use custom ID for idempotency
|
|
107
|
+
* const messageId = queue.enqueue(data, "custom-id-123");
|
|
108
|
+
*
|
|
109
|
+
* // Later, you can remove by ID
|
|
110
|
+
* queue.remove("custom-id-123");
|
|
111
|
+
* ```
|
|
112
|
+
*
|
|
113
|
+
* @category Features
|
|
114
|
+
* @group MessageQueue
|
|
115
|
+
*/
|
|
116
|
+
export class MessageQueue {
|
|
117
|
+
/**
|
|
118
|
+
* Create a new MessageQueue
|
|
119
|
+
* @param maxSize - Maximum number of messages to queue (default: 1000)
|
|
120
|
+
* @param maxAttempts - Maximum send attempts per message (default: 3)
|
|
121
|
+
*/
|
|
122
|
+
constructor(maxSize = 1000, maxAttempts = 3) {
|
|
123
|
+
this.queue = [];
|
|
124
|
+
this.maxSize = maxSize;
|
|
125
|
+
this.maxAttempts = maxAttempts;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Add a message to the queue.
|
|
129
|
+
*
|
|
130
|
+
* Messages are added to the end of the queue (FIFO order).
|
|
131
|
+
* If the queue is full, a MessageError is thrown.
|
|
132
|
+
*
|
|
133
|
+
* @param data - The message data to queue
|
|
134
|
+
* @param id - Optional custom message ID (auto-generated if not provided)
|
|
135
|
+
* @returns The message ID
|
|
136
|
+
* @throws MessageError if queue is full
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```typescript
|
|
140
|
+
* // Auto-generated ID
|
|
141
|
+
* const id1 = queue.enqueue({ text: "Hello" });
|
|
142
|
+
*
|
|
143
|
+
* // Custom ID for tracking
|
|
144
|
+
* const id2 = queue.enqueue({ text: "World" }, "my-message-id");
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
enqueue(data, id) {
|
|
148
|
+
if (this.queue.length >= this.maxSize) {
|
|
149
|
+
throw new MessageError(`Queue is full (max size: ${this.maxSize})`);
|
|
150
|
+
}
|
|
151
|
+
const messageId = id || this.generateId();
|
|
152
|
+
const message = {
|
|
153
|
+
id: messageId,
|
|
154
|
+
data,
|
|
155
|
+
timestamp: Date.now(),
|
|
156
|
+
attempts: 0,
|
|
157
|
+
};
|
|
158
|
+
this.queue.push(message);
|
|
159
|
+
return messageId;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Get the next message without removing it.
|
|
163
|
+
*
|
|
164
|
+
* Use this to inspect the next message before deciding
|
|
165
|
+
* whether to process and remove it.
|
|
166
|
+
*
|
|
167
|
+
* @returns The next message or null if queue is empty
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* ```typescript
|
|
171
|
+
* const next = queue.peek();
|
|
172
|
+
* if (next) {
|
|
173
|
+
* console.log(`Next message: ${next.id}`);
|
|
174
|
+
* }
|
|
175
|
+
* ```
|
|
176
|
+
*/
|
|
177
|
+
peek() {
|
|
178
|
+
return this.queue.length > 0 ? this.queue[0] : null;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Remove and return the next message from the queue.
|
|
182
|
+
*
|
|
183
|
+
* Call this after successfully processing a message.
|
|
184
|
+
*
|
|
185
|
+
* @returns The removed message or null if queue is empty
|
|
186
|
+
*
|
|
187
|
+
* @example
|
|
188
|
+
* ```typescript
|
|
189
|
+
* const message = queue.dequeue();
|
|
190
|
+
* if (message) {
|
|
191
|
+
* await processMessage(message.data);
|
|
192
|
+
* }
|
|
193
|
+
* ```
|
|
194
|
+
*/
|
|
195
|
+
dequeue() {
|
|
196
|
+
return this.queue.shift() || null;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Mark a message as attempted and check if retry is allowed.
|
|
200
|
+
*
|
|
201
|
+
* Call this when a send attempt fails. Returns true if the
|
|
202
|
+
* message should be retried, false if max attempts exceeded.
|
|
203
|
+
*
|
|
204
|
+
* @param id - The message ID to mark
|
|
205
|
+
* @returns True if retry is allowed, false if max attempts reached
|
|
206
|
+
*
|
|
207
|
+
* @example
|
|
208
|
+
* ```typescript
|
|
209
|
+
* try {
|
|
210
|
+
* await sendMessage(message.data);
|
|
211
|
+
* queue.dequeue();
|
|
212
|
+
* } catch (error) {
|
|
213
|
+
* const shouldRetry = queue.markAttempted(message.id);
|
|
214
|
+
* if (!shouldRetry) {
|
|
215
|
+
* queue.remove(message.id);
|
|
216
|
+
* console.error(`Message ${message.id} failed permanently`);
|
|
217
|
+
* }
|
|
218
|
+
* }
|
|
219
|
+
* ```
|
|
220
|
+
*/
|
|
221
|
+
markAttempted(id) {
|
|
222
|
+
const message = this.queue.find((msg) => msg.id === id);
|
|
223
|
+
if (message) {
|
|
224
|
+
message.attempts++;
|
|
225
|
+
return message.attempts < this.maxAttempts;
|
|
226
|
+
}
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Remove a message by ID.
|
|
231
|
+
*
|
|
232
|
+
* Use this to remove a message that failed permanently
|
|
233
|
+
* or is no longer needed.
|
|
234
|
+
*
|
|
235
|
+
* @param id - The message ID to remove
|
|
236
|
+
* @returns True if message was found and removed
|
|
237
|
+
*
|
|
238
|
+
* @example
|
|
239
|
+
* ```typescript
|
|
240
|
+
* const removed = queue.remove("message-id");
|
|
241
|
+
* console.log(removed ? "Removed" : "Not found");
|
|
242
|
+
* ```
|
|
243
|
+
*/
|
|
244
|
+
remove(id) {
|
|
245
|
+
const index = this.queue.findIndex((msg) => msg.id === id);
|
|
246
|
+
if (index !== -1) {
|
|
247
|
+
this.queue.splice(index, 1);
|
|
248
|
+
return true;
|
|
249
|
+
}
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Get the current number of messages in the queue.
|
|
254
|
+
* @returns Number of queued messages
|
|
255
|
+
*/
|
|
256
|
+
size() {
|
|
257
|
+
return this.queue.length;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Check if the queue is empty.
|
|
261
|
+
* @returns True if no messages are queued
|
|
262
|
+
*/
|
|
263
|
+
isEmpty() {
|
|
264
|
+
return this.queue.length === 0;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Remove all messages from the queue.
|
|
268
|
+
*
|
|
269
|
+
* Use with caution - all queued messages will be lost.
|
|
270
|
+
*/
|
|
271
|
+
clear() {
|
|
272
|
+
this.queue = [];
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Get all messages in the queue (for debugging).
|
|
276
|
+
*
|
|
277
|
+
* Returns a read-only copy of the queue contents.
|
|
278
|
+
*
|
|
279
|
+
* @returns Array of all queued messages
|
|
280
|
+
*/
|
|
281
|
+
getAll() {
|
|
282
|
+
return [...this.queue];
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Generate a unique message ID
|
|
286
|
+
*/
|
|
287
|
+
generateId() {
|
|
288
|
+
return `${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=MessageQueue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageQueue.js","sourceRoot":"","sources":["../../../src/core/queue/MessageQueue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Portal types for the CC (Contact Center) widget initialization flow.
|
|
3
|
+
* Derived from the cc-widget's portalService and store types.
|
|
4
|
+
*
|
|
5
|
+
* @module PortalTypes
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Represents a knowledge portal accessible to the user.
|
|
9
|
+
*
|
|
10
|
+
* @interface Portal
|
|
11
|
+
*/
|
|
12
|
+
export interface Portal {
|
|
13
|
+
/** Unique identifier (string or number) */
|
|
14
|
+
id: string | number;
|
|
15
|
+
/** Display name of the portal */
|
|
16
|
+
name: string;
|
|
17
|
+
/** Optional description */
|
|
18
|
+
description?: string;
|
|
19
|
+
/** Optional department association */
|
|
20
|
+
department?: {
|
|
21
|
+
id: number;
|
|
22
|
+
name: string;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Represents a user profile within a portal.
|
|
27
|
+
*
|
|
28
|
+
* @interface UserProfile
|
|
29
|
+
*/
|
|
30
|
+
export interface UserProfile {
|
|
31
|
+
/** Unique identifier (string or number) */
|
|
32
|
+
id: string | number;
|
|
33
|
+
/** Display name of the profile */
|
|
34
|
+
name: string;
|
|
35
|
+
/** Whether this profile was last used in the current portal */
|
|
36
|
+
isLastUsedInPortal?: boolean;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Represents an AI agent in the agent selection list.
|
|
40
|
+
*
|
|
41
|
+
* @interface AgentListItem
|
|
42
|
+
*/
|
|
43
|
+
export interface AgentListItem {
|
|
44
|
+
/** Unique agent identifier */
|
|
45
|
+
agentId: string;
|
|
46
|
+
/** Display name of the agent */
|
|
47
|
+
name: string;
|
|
48
|
+
/** Optional description */
|
|
49
|
+
description?: string;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=PortalTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PortalTypes.d.ts","sourceRoot":"","sources":["../../../src/core/types/PortalTypes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,WAAW,MAAM;IACrB,2CAA2C;IAC3C,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,UAAU,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PortalTypes.js","sourceRoot":"","sources":["../../../src/core/types/PortalTypes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|