@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.
Files changed (164) hide show
  1. package/README.md +295 -0
  2. package/dist/browser.js +22739 -0
  3. package/dist/core/AiAgent.d.ts +1126 -0
  4. package/dist/core/AiAgent.d.ts.map +1 -0
  5. package/dist/core/AiAgent.js +2037 -0
  6. package/dist/core/AiAgent.js.map +1 -0
  7. package/dist/core/api/ApiHelper.d.ts +433 -0
  8. package/dist/core/api/ApiHelper.d.ts.map +1 -0
  9. package/dist/core/api/ApiHelper.js +689 -0
  10. package/dist/core/api/ApiHelper.js.map +1 -0
  11. package/dist/core/api/CacheAdapter.d.ts +295 -0
  12. package/dist/core/api/CacheAdapter.d.ts.map +1 -0
  13. package/dist/core/api/CacheAdapter.js +298 -0
  14. package/dist/core/api/CacheAdapter.js.map +1 -0
  15. package/dist/core/auth/AnonymousAuthStrategy.d.ts +87 -0
  16. package/dist/core/auth/AnonymousAuthStrategy.d.ts.map +1 -0
  17. package/dist/core/auth/AnonymousAuthStrategy.js +257 -0
  18. package/dist/core/auth/AnonymousAuthStrategy.js.map +1 -0
  19. package/dist/core/auth/AuthProvider.d.ts +13 -0
  20. package/dist/core/auth/AuthProvider.d.ts.map +1 -0
  21. package/dist/core/auth/AuthProvider.js +2 -0
  22. package/dist/core/auth/AuthProvider.js.map +1 -0
  23. package/dist/core/auth/AuthStrategy.d.ts +74 -0
  24. package/dist/core/auth/AuthStrategy.d.ts.map +1 -0
  25. package/dist/core/auth/AuthStrategy.js +2 -0
  26. package/dist/core/auth/AuthStrategy.js.map +1 -0
  27. package/dist/core/auth/AuthenticationService.d.ts +226 -0
  28. package/dist/core/auth/AuthenticationService.d.ts.map +1 -0
  29. package/dist/core/auth/AuthenticationService.js +344 -0
  30. package/dist/core/auth/AuthenticationService.js.map +1 -0
  31. package/dist/core/auth/ClientCredentialsAuthStrategy.d.ts +62 -0
  32. package/dist/core/auth/ClientCredentialsAuthStrategy.d.ts.map +1 -0
  33. package/dist/core/auth/ClientCredentialsAuthStrategy.js +78 -0
  34. package/dist/core/auth/ClientCredentialsAuthStrategy.js.map +1 -0
  35. package/dist/core/auth/PKCEAuthStrategy.d.ts +136 -0
  36. package/dist/core/auth/PKCEAuthStrategy.d.ts.map +1 -0
  37. package/dist/core/auth/PKCEAuthStrategy.js +409 -0
  38. package/dist/core/auth/PKCEAuthStrategy.js.map +1 -0
  39. package/dist/core/auth/PreAuthStrategy.d.ts +101 -0
  40. package/dist/core/auth/PreAuthStrategy.d.ts.map +1 -0
  41. package/dist/core/auth/PreAuthStrategy.js +216 -0
  42. package/dist/core/auth/PreAuthStrategy.js.map +1 -0
  43. package/dist/core/auth/msal-browser.js +19683 -0
  44. package/dist/core/auth/msal-loader.d.ts +14 -0
  45. package/dist/core/auth/msal-loader.d.ts.map +1 -0
  46. package/dist/core/auth/msal-loader.js +43 -0
  47. package/dist/core/auth/msal-loader.js.map +1 -0
  48. package/dist/core/connection/Connection.d.ts +168 -0
  49. package/dist/core/connection/Connection.d.ts.map +1 -0
  50. package/dist/core/connection/Connection.js +290 -0
  51. package/dist/core/connection/Connection.js.map +1 -0
  52. package/dist/core/connection/ConnectionState.d.ts +11 -0
  53. package/dist/core/connection/ConnectionState.d.ts.map +1 -0
  54. package/dist/core/connection/ConnectionState.js +12 -0
  55. package/dist/core/connection/ConnectionState.js.map +1 -0
  56. package/dist/core/connection/Transport.d.ts +98 -0
  57. package/dist/core/connection/Transport.d.ts.map +1 -0
  58. package/dist/core/connection/Transport.js +27 -0
  59. package/dist/core/connection/Transport.js.map +1 -0
  60. package/dist/core/connection/WebSocketTransport.d.ts +65 -0
  61. package/dist/core/connection/WebSocketTransport.d.ts.map +1 -0
  62. package/dist/core/connection/WebSocketTransport.js +177 -0
  63. package/dist/core/connection/WebSocketTransport.js.map +1 -0
  64. package/dist/core/errors/SDKError.d.ts +27 -0
  65. package/dist/core/errors/SDKError.d.ts.map +1 -0
  66. package/dist/core/errors/SDKError.js +43 -0
  67. package/dist/core/errors/SDKError.js.map +1 -0
  68. package/dist/core/events/EventEmitter.d.ts +120 -0
  69. package/dist/core/events/EventEmitter.d.ts.map +1 -0
  70. package/dist/core/events/EventEmitter.js +183 -0
  71. package/dist/core/events/EventEmitter.js.map +1 -0
  72. package/dist/core/logging/LogLevel.d.ts +33 -0
  73. package/dist/core/logging/LogLevel.d.ts.map +1 -0
  74. package/dist/core/logging/LogLevel.js +40 -0
  75. package/dist/core/logging/LogLevel.js.map +1 -0
  76. package/dist/core/logging/Logger.d.ts +120 -0
  77. package/dist/core/logging/Logger.d.ts.map +1 -0
  78. package/dist/core/logging/Logger.js +204 -0
  79. package/dist/core/logging/Logger.js.map +1 -0
  80. package/dist/core/logging/globalLogger.d.ts +8 -0
  81. package/dist/core/logging/globalLogger.d.ts.map +1 -0
  82. package/dist/core/logging/globalLogger.js +12 -0
  83. package/dist/core/logging/globalLogger.js.map +1 -0
  84. package/dist/core/logging/types.d.ts +45 -0
  85. package/dist/core/logging/types.d.ts.map +1 -0
  86. package/dist/core/logging/types.js +2 -0
  87. package/dist/core/logging/types.js.map +1 -0
  88. package/dist/core/message/BaseMessageHandler.d.ts +208 -0
  89. package/dist/core/message/BaseMessageHandler.d.ts.map +1 -0
  90. package/dist/core/message/BaseMessageHandler.js +155 -0
  91. package/dist/core/message/BaseMessageHandler.js.map +1 -0
  92. package/dist/core/message/Message.d.ts +69 -0
  93. package/dist/core/message/Message.d.ts.map +1 -0
  94. package/dist/core/message/Message.js +131 -0
  95. package/dist/core/message/Message.js.map +1 -0
  96. package/dist/core/message/MessageProcessor.d.ts +51 -0
  97. package/dist/core/message/MessageProcessor.d.ts.map +1 -0
  98. package/dist/core/message/MessageProcessor.js +123 -0
  99. package/dist/core/message/MessageProcessor.js.map +1 -0
  100. package/dist/core/message/MessageTypes.d.ts +123 -0
  101. package/dist/core/message/MessageTypes.d.ts.map +1 -0
  102. package/dist/core/message/MessageTypes.js +106 -0
  103. package/dist/core/message/MessageTypes.js.map +1 -0
  104. package/dist/core/message/Transcript.d.ts +373 -0
  105. package/dist/core/message/Transcript.d.ts.map +1 -0
  106. package/dist/core/message/Transcript.js +355 -0
  107. package/dist/core/message/Transcript.js.map +1 -0
  108. package/dist/core/message/handlers/AgentMessageHandler.d.ts +26 -0
  109. package/dist/core/message/handlers/AgentMessageHandler.d.ts.map +1 -0
  110. package/dist/core/message/handlers/AgentMessageHandler.js +130 -0
  111. package/dist/core/message/handlers/AgentMessageHandler.js.map +1 -0
  112. package/dist/core/message/handlers/ChatHistoryHandler.d.ts +12 -0
  113. package/dist/core/message/handlers/ChatHistoryHandler.d.ts.map +1 -0
  114. package/dist/core/message/handlers/ChatHistoryHandler.js +49 -0
  115. package/dist/core/message/handlers/ChatHistoryHandler.js.map +1 -0
  116. package/dist/core/message/handlers/ErrorMessageHandler.d.ts +12 -0
  117. package/dist/core/message/handlers/ErrorMessageHandler.d.ts.map +1 -0
  118. package/dist/core/message/handlers/ErrorMessageHandler.js +49 -0
  119. package/dist/core/message/handlers/ErrorMessageHandler.js.map +1 -0
  120. package/dist/core/message/handlers/HeartbeatHandler.d.ts +12 -0
  121. package/dist/core/message/handlers/HeartbeatHandler.d.ts.map +1 -0
  122. package/dist/core/message/handlers/HeartbeatHandler.js +46 -0
  123. package/dist/core/message/handlers/HeartbeatHandler.js.map +1 -0
  124. package/dist/core/message/handlers/TokenRefreshHandler.d.ts +30 -0
  125. package/dist/core/message/handlers/TokenRefreshHandler.d.ts.map +1 -0
  126. package/dist/core/message/handlers/TokenRefreshHandler.js +84 -0
  127. package/dist/core/message/handlers/TokenRefreshHandler.js.map +1 -0
  128. package/dist/core/message/types.d.ts +107 -0
  129. package/dist/core/message/types.d.ts.map +1 -0
  130. package/dist/core/message/types.js +30 -0
  131. package/dist/core/message/types.js.map +1 -0
  132. package/dist/core/platform/HookContract.d.ts +112 -0
  133. package/dist/core/platform/HookContract.d.ts.map +1 -0
  134. package/dist/core/platform/HookContract.js +13 -0
  135. package/dist/core/platform/HookContract.js.map +1 -0
  136. package/dist/core/platform/PlatformComponentService.d.ts +40 -0
  137. package/dist/core/platform/PlatformComponentService.d.ts.map +1 -0
  138. package/dist/core/platform/PlatformComponentService.js +12 -0
  139. package/dist/core/platform/PlatformComponentService.js.map +1 -0
  140. package/dist/core/platform/PlatformScriptLoader.d.ts +41 -0
  141. package/dist/core/platform/PlatformScriptLoader.d.ts.map +1 -0
  142. package/dist/core/platform/PlatformScriptLoader.js +110 -0
  143. package/dist/core/platform/PlatformScriptLoader.js.map +1 -0
  144. package/dist/core/polyfills.d.ts +16 -0
  145. package/dist/core/polyfills.d.ts.map +1 -0
  146. package/dist/core/polyfills.js +168 -0
  147. package/dist/core/polyfills.js.map +1 -0
  148. package/dist/core/portal-initializer/PortalInitializer.d.ts +234 -0
  149. package/dist/core/portal-initializer/PortalInitializer.d.ts.map +1 -0
  150. package/dist/core/portal-initializer/PortalInitializer.js +636 -0
  151. package/dist/core/portal-initializer/PortalInitializer.js.map +1 -0
  152. package/dist/core/queue/MessageQueue.d.ts +277 -0
  153. package/dist/core/queue/MessageQueue.d.ts.map +1 -0
  154. package/dist/core/queue/MessageQueue.js +291 -0
  155. package/dist/core/queue/MessageQueue.js.map +1 -0
  156. package/dist/core/types/PortalTypes.d.ts +51 -0
  157. package/dist/core/types/PortalTypes.d.ts.map +1 -0
  158. package/dist/core/types/PortalTypes.js +8 -0
  159. package/dist/core/types/PortalTypes.js.map +1 -0
  160. package/dist/index.d.ts +91 -0
  161. package/dist/index.d.ts.map +1 -0
  162. package/dist/index.js +82 -0
  163. package/dist/index.js.map +1 -0
  164. package/package.json +84 -0
@@ -0,0 +1,27 @@
1
+ import { EventEmitter } from '../events/EventEmitter.js';
2
+ import { globalLogger } from '../logging/globalLogger.js';
3
+ /**
4
+ * Abstract base class for transport implementations.
5
+ *
6
+ * Any transport mechanism (WebSocket, SSE, HTTP polling, etc.) should extend
7
+ * this class and implement the abstract methods.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * class MyCustomTransport extends Transport {
12
+ * async connect(): Promise<void> { ... }
13
+ * disconnect(): void { ... }
14
+ * async send(data: any): Promise<void> { ... }
15
+ * isConnected(): boolean { ... }
16
+ * }
17
+ * ```
18
+ */
19
+ export class Transport extends EventEmitter {
20
+ constructor(config) {
21
+ super();
22
+ this.endpoint = config.endpoint;
23
+ this.connectionTimeout = config.connectionTimeout ?? 10000;
24
+ this.logger = config.logger ?? globalLogger;
25
+ }
26
+ }
27
+ //# sourceMappingURL=Transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Transport.js","sourceRoot":"","sources":["../../../src/core/connection/Transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAiD1D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAgB,SAAU,SAAQ,YAA6B;IAKnE,YAAY,MAAuB;QACjC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,IAAI,KAAK,CAAC;QAC3D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,YAAY,CAAC;IAC9C,CAAC;CA2BF"}
@@ -0,0 +1,65 @@
1
+ import { Transport, TransportConfig } from './Transport.js';
2
+ /**
3
+ * WebSocket transport configuration
4
+ */
5
+ export interface WebSocketTransportConfig extends TransportConfig {
6
+ /**
7
+ * WebSocket protocols (optional)
8
+ */
9
+ protocols?: string | string[];
10
+ }
11
+ /**
12
+ * WebSocket-based transport implementation.
13
+ *
14
+ * This transport uses the native WebSocket API to establish
15
+ * bidirectional communication with the server.
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const transport = new WebSocketTransport({
20
+ * endpoint: 'wss://api.example.com/ws'
21
+ * });
22
+ *
23
+ * transport.on('message', ({ data }) => {
24
+ * console.log('Received:', data);
25
+ * });
26
+ *
27
+ * await transport.connect();
28
+ * await transport.send({ text: 'Hello' });
29
+ * ```
30
+ */
31
+ export declare class WebSocketTransport extends Transport {
32
+ private ws;
33
+ private connectTimeoutTimer;
34
+ private protocols?;
35
+ constructor(config: WebSocketTransportConfig);
36
+ /**
37
+ * Get the transport type identifier
38
+ */
39
+ getType(): string;
40
+ /**
41
+ * Check if the WebSocket is currently connected
42
+ */
43
+ isConnected(): boolean;
44
+ /**
45
+ * Establish the WebSocket connection
46
+ */
47
+ connect(): Promise<void>;
48
+ /**
49
+ * Close the WebSocket connection
50
+ */
51
+ disconnect(): void;
52
+ /**
53
+ * Send data through the WebSocket
54
+ */
55
+ send(data: any): Promise<void>;
56
+ /**
57
+ * Handle incoming WebSocket message
58
+ */
59
+ private handleMessage;
60
+ /**
61
+ * Clear connection timeout timer
62
+ */
63
+ private clearConnectTimeout;
64
+ }
65
+ //# sourceMappingURL=WebSocketTransport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSocketTransport.d.ts","sourceRoot":"","sources":["../../../src/core/connection/WebSocketTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAG5D;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,eAAe;IAC/D;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,kBAAmB,SAAQ,SAAS;IAC/C,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,mBAAmB,CAA8C;IACzE,OAAO,CAAC,SAAS,CAAC,CAAoB;gBAE1B,MAAM,EAAE,wBAAwB;IAK5C;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAyE9B;;OAEG;IACH,UAAU,IAAI,IAAI;IAUlB;;OAEG;IACG,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBpC;;OAEG;IACH,OAAO,CAAC,aAAa;IAyBrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAM5B"}
@@ -0,0 +1,177 @@
1
+ import { Transport } from './Transport.js';
2
+ import { ConnectionError } from '../errors/SDKError.js';
3
+ /**
4
+ * WebSocket-based transport implementation.
5
+ *
6
+ * This transport uses the native WebSocket API to establish
7
+ * bidirectional communication with the server.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * const transport = new WebSocketTransport({
12
+ * endpoint: 'wss://api.example.com/ws'
13
+ * });
14
+ *
15
+ * transport.on('message', ({ data }) => {
16
+ * console.log('Received:', data);
17
+ * });
18
+ *
19
+ * await transport.connect();
20
+ * await transport.send({ text: 'Hello' });
21
+ * ```
22
+ */
23
+ export class WebSocketTransport extends Transport {
24
+ constructor(config) {
25
+ super(config);
26
+ this.ws = null;
27
+ this.connectTimeoutTimer = null;
28
+ this.protocols = config.protocols;
29
+ }
30
+ /**
31
+ * Get the transport type identifier
32
+ */
33
+ getType() {
34
+ return 'websocket';
35
+ }
36
+ /**
37
+ * Check if the WebSocket is currently connected
38
+ */
39
+ isConnected() {
40
+ return this.ws !== null && this.ws.readyState === WebSocket.OPEN;
41
+ }
42
+ /**
43
+ * Establish the WebSocket connection
44
+ */
45
+ async connect() {
46
+ if (this.isConnected()) {
47
+ this.logger.debug('WebSocket already connected', { endpoint: this.endpoint });
48
+ return;
49
+ }
50
+ this.logger.debug('Connecting WebSocket', { endpoint: this.endpoint, protocols: this.protocols });
51
+ return new Promise((resolve, reject) => {
52
+ try {
53
+ // Create WebSocket connection
54
+ this.ws = new WebSocket(this.endpoint, this.protocols);
55
+ // Set connection timeout
56
+ this.connectTimeoutTimer = setTimeout(() => {
57
+ if (this.ws && this.ws.readyState !== WebSocket.OPEN) {
58
+ this.ws.close();
59
+ const error = new ConnectionError('Connection timeout');
60
+ this.logger.error('WebSocket connection timeout', error, { endpoint: this.endpoint });
61
+ this.emit('error', { error, timestamp: Date.now() });
62
+ reject(error);
63
+ }
64
+ }, this.connectionTimeout);
65
+ // Handle successful connection
66
+ this.ws.onopen = () => {
67
+ this.clearConnectTimeout();
68
+ this.logger.info('WebSocket connected', { endpoint: this.endpoint });
69
+ this.emit('connected', { timestamp: Date.now() });
70
+ resolve();
71
+ };
72
+ // Handle incoming messages
73
+ this.ws.onmessage = (event) => {
74
+ this.handleMessage(event);
75
+ };
76
+ // Handle errors
77
+ this.ws.onerror = (event) => {
78
+ const error = new ConnectionError('WebSocket error');
79
+ this.logger.error('WebSocket error', error, { endpoint: this.endpoint });
80
+ this.emit('error', { error, timestamp: Date.now() });
81
+ };
82
+ // Handle connection close
83
+ this.ws.onclose = (event) => {
84
+ this.clearConnectTimeout();
85
+ this.ws = null;
86
+ this.logger.info('WebSocket closed', {
87
+ endpoint: this.endpoint,
88
+ code: event.code,
89
+ reason: event.reason
90
+ });
91
+ this.emit('closed', {
92
+ code: event.code,
93
+ reason: event.reason,
94
+ timestamp: Date.now(),
95
+ });
96
+ };
97
+ }
98
+ catch (error) {
99
+ this.clearConnectTimeout();
100
+ const connError = new ConnectionError('Failed to establish WebSocket connection', error instanceof Error ? error : new Error(String(error)));
101
+ this.logger.error('Failed to establish WebSocket connection', connError, { endpoint: this.endpoint });
102
+ this.emit('error', { error: connError, timestamp: Date.now() });
103
+ reject(connError);
104
+ }
105
+ });
106
+ }
107
+ /**
108
+ * Close the WebSocket connection
109
+ */
110
+ disconnect() {
111
+ this.clearConnectTimeout();
112
+ if (this.ws) {
113
+ this.logger.debug('Disconnecting WebSocket', { endpoint: this.endpoint });
114
+ this.ws.close(1000, 'Client disconnect');
115
+ this.ws = null;
116
+ }
117
+ }
118
+ /**
119
+ * Send data through the WebSocket
120
+ */
121
+ async send(data) {
122
+ if (!this.isConnected() || !this.ws) {
123
+ const error = new ConnectionError('Cannot send message: not connected');
124
+ this.logger.warn('Cannot send message: WebSocket not connected', { endpoint: this.endpoint });
125
+ throw error;
126
+ }
127
+ try {
128
+ const message = typeof data === 'string' ? data : JSON.stringify(data);
129
+ this.logger.debug('Sending WebSocket message', { endpoint: this.endpoint, messageLength: message.length });
130
+ this.ws.send(message);
131
+ }
132
+ catch (error) {
133
+ const connError = new ConnectionError('Failed to send message', error instanceof Error ? error : new Error(String(error)));
134
+ this.logger.error('Failed to send WebSocket message', connError, { endpoint: this.endpoint });
135
+ throw connError;
136
+ }
137
+ }
138
+ /**
139
+ * Handle incoming WebSocket message
140
+ */
141
+ handleMessage(event) {
142
+ try {
143
+ let data;
144
+ if (typeof event.data === 'string') {
145
+ try {
146
+ data = JSON.parse(event.data);
147
+ }
148
+ catch {
149
+ data = event.data;
150
+ }
151
+ }
152
+ else {
153
+ data = event.data;
154
+ }
155
+ this.logger.debug('WebSocket message received', { endpoint: this.endpoint, dataType: typeof data });
156
+ this.emit('message', { data, timestamp: Date.now() });
157
+ }
158
+ catch (error) {
159
+ const err = error instanceof Error ? error : new Error(String(error));
160
+ this.logger.error('Failed to handle WebSocket message', err, { endpoint: this.endpoint });
161
+ this.emit('error', {
162
+ error: err,
163
+ timestamp: Date.now(),
164
+ });
165
+ }
166
+ }
167
+ /**
168
+ * Clear connection timeout timer
169
+ */
170
+ clearConnectTimeout() {
171
+ if (this.connectTimeoutTimer) {
172
+ clearTimeout(this.connectTimeoutTimer);
173
+ this.connectTimeoutTimer = null;
174
+ }
175
+ }
176
+ }
177
+ //# sourceMappingURL=WebSocketTransport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSocketTransport.js","sourceRoot":"","sources":["../../../src/core/connection/WebSocketTransport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Base error class for all SDK errors
3
+ */
4
+ export declare class SDKError extends Error {
5
+ readonly code?: string | undefined;
6
+ readonly cause?: Error | undefined;
7
+ constructor(message: string, code?: string | undefined, cause?: Error | undefined);
8
+ }
9
+ /**
10
+ * Authentication-related errors
11
+ */
12
+ export declare class AuthError extends SDKError {
13
+ constructor(message: string, cause?: Error);
14
+ }
15
+ /**
16
+ * Connection-related errors
17
+ */
18
+ export declare class ConnectionError extends SDKError {
19
+ constructor(message: string, cause?: Error);
20
+ }
21
+ /**
22
+ * Message-related errors
23
+ */
24
+ export declare class MessageError extends SDKError {
25
+ constructor(message: string, cause?: Error);
26
+ }
27
+ //# sourceMappingURL=SDKError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SDKError.d.ts","sourceRoot":"","sources":["../../../src/core/errors/SDKError.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;aAGf,IAAI,CAAC;aACL,KAAK,CAAC;gBAFtB,OAAO,EAAE,MAAM,EACC,IAAI,CAAC,oBAAQ,EACb,KAAK,CAAC,mBAAO;CAMhC;AAED;;GAEG;AACH,qBAAa,SAAU,SAAQ,QAAQ;gBACzB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAK3C;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;gBAC/B,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAK3C;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,QAAQ;gBAC5B,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAK3C"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Base error class for all SDK errors
3
+ */
4
+ export class SDKError extends Error {
5
+ constructor(message, code, cause) {
6
+ super(message);
7
+ this.code = code;
8
+ this.cause = cause;
9
+ this.name = 'SDKError';
10
+ Object.setPrototypeOf(this, SDKError.prototype);
11
+ }
12
+ }
13
+ /**
14
+ * Authentication-related errors
15
+ */
16
+ export class AuthError extends SDKError {
17
+ constructor(message, cause) {
18
+ super(message, 'AUTH_ERROR', cause);
19
+ this.name = 'AuthError';
20
+ Object.setPrototypeOf(this, AuthError.prototype);
21
+ }
22
+ }
23
+ /**
24
+ * Connection-related errors
25
+ */
26
+ export class ConnectionError extends SDKError {
27
+ constructor(message, cause) {
28
+ super(message, 'CONNECTION_ERROR', cause);
29
+ this.name = 'ConnectionError';
30
+ Object.setPrototypeOf(this, ConnectionError.prototype);
31
+ }
32
+ }
33
+ /**
34
+ * Message-related errors
35
+ */
36
+ export class MessageError extends SDKError {
37
+ constructor(message, cause) {
38
+ super(message, 'MESSAGE_ERROR', cause);
39
+ this.name = 'MessageError';
40
+ Object.setPrototypeOf(this, MessageError.prototype);
41
+ }
42
+ }
43
+ //# sourceMappingURL=SDKError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SDKError.js","sourceRoot":"","sources":["../../../src/core/errors/SDKError.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjC,YACE,OAAe,EACC,IAAa,EACb,KAAa;QAE7B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAS;QACb,UAAK,GAAL,KAAK,CAAQ;QAG7B,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,SAAU,SAAQ,QAAQ;IACrC,YAAY,OAAe,EAAE,KAAa;QACxC,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAC3C,YAAY,OAAe,EAAE,KAAa;QACxC,KAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,QAAQ;IACxC,YAAY,OAAe,EAAE,KAAa;QACxC,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC;CACF"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Handler function for events.
3
+ * Can be synchronous or return a Promise for async handling.
4
+ * @typeParam T - The event data type
5
+ */
6
+ type EventHandler<T = any> = (data: T) => void | Promise<void>;
7
+ /**
8
+ * Map of event names to their data types.
9
+ */
10
+ type EventMap = Record<string, any>;
11
+ /**
12
+ * Type-safe event emitter implementation.
13
+ *
14
+ * Compatible with both browser and Node.js environments.
15
+ * Provides a foundation for event-driven communication throughout the SDK.
16
+ *
17
+ * @typeParam T - Event map defining event names and their data types
18
+ *
19
+ * @example Creating a custom event emitter
20
+ * ```typescript
21
+ * import { EventEmitter } from "@eGain/ai-agent-sdk";
22
+ *
23
+ * interface MyEvents {
24
+ * data: { value: number };
25
+ * error: { message: string };
26
+ * }
27
+ *
28
+ * class MyService extends EventEmitter<MyEvents> {
29
+ * doSomething() {
30
+ * this.emit("data", { value: 42 });
31
+ * }
32
+ * }
33
+ *
34
+ * const service = new MyService();
35
+ * service.on("data", (event) => {
36
+ * console.log(event.value); // Typed as number
37
+ * });
38
+ * ```
39
+ *
40
+ * @category Events
41
+ */
42
+ export declare class EventEmitter<T extends EventMap = EventMap> {
43
+ private handlers;
44
+ private onceHandlers;
45
+ /**
46
+ * Register an event handler.
47
+ *
48
+ * The handler will be called every time the event is emitted.
49
+ *
50
+ * @param event - The event name to listen for
51
+ * @param handler - The function to call when the event is emitted
52
+ * @returns `this` for method chaining
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * agent.on("message", (event) => {
57
+ * console.log("Received:", event.payload);
58
+ * });
59
+ * ```
60
+ */
61
+ on<K extends keyof T>(event: K, handler: EventHandler<T[K]>): this;
62
+ /**
63
+ * Register a one-time event handler.
64
+ *
65
+ * The handler will be called only once, then automatically removed.
66
+ *
67
+ * @param event - The event name to listen for
68
+ * @param handler - The function to call when the event is emitted
69
+ * @returns `this` for method chaining
70
+ *
71
+ * @example
72
+ * ```typescript
73
+ * agent.once("connected", () => {
74
+ * console.log("First connection established!");
75
+ * });
76
+ * ```
77
+ */
78
+ once<K extends keyof T>(event: K, handler: EventHandler<T[K]>): this;
79
+ /**
80
+ * Remove an event handler.
81
+ *
82
+ * If no handler is specified, removes all handlers for the event.
83
+ *
84
+ * @param event - The event name
85
+ * @param handler - The specific handler to remove (optional)
86
+ * @returns `this` for method chaining
87
+ *
88
+ * @example Remove specific handler
89
+ * ```typescript
90
+ * const handler = (event) => console.log(event);
91
+ * agent.on("message", handler);
92
+ * agent.off("message", handler);
93
+ * ```
94
+ *
95
+ * @example Remove all handlers
96
+ * ```typescript
97
+ * agent.off("message");
98
+ * ```
99
+ */
100
+ off<K extends keyof T>(event: K, handler?: EventHandler<T[K]>): this;
101
+ /**
102
+ * Emit an event
103
+ * Handlers are protected from exceptions - errors are caught and logged
104
+ */
105
+ protected emit<K extends keyof T>(event: K, data: T[K]): boolean;
106
+ /**
107
+ * Safely execute a handler, catching any exceptions
108
+ */
109
+ private safeEmit;
110
+ /**
111
+ * Remove all event handlers
112
+ */
113
+ removeAllListeners<K extends keyof T>(event?: K): this;
114
+ /**
115
+ * Get the number of listeners for an event
116
+ */
117
+ listenerCount<K extends keyof T>(event: K): number;
118
+ }
119
+ export {};
120
+ //# sourceMappingURL=EventEmitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventEmitter.d.ts","sourceRoot":"","sources":["../../../src/core/events/EventEmitter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,KAAK,YAAY,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE/D;;GAEG;AACH,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,YAAY,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ;IACrD,OAAO,CAAC,QAAQ,CAA8C;IAC9D,OAAO,CAAC,YAAY,CAA8C;IAElE;;;;;;;;;;;;;;;OAeG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAQlE;;;;;;;;;;;;;;;OAeG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAQpE;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAYpE;;;OAGG;IACH,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;IAyBhE;;OAEG;IACH,OAAO,CAAC,QAAQ;IAgBhB;;OAEG;IACH,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI;IAWtD;;OAEG;IACH,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM;CAKnD"}
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Type-safe event emitter implementation.
3
+ *
4
+ * Compatible with both browser and Node.js environments.
5
+ * Provides a foundation for event-driven communication throughout the SDK.
6
+ *
7
+ * @typeParam T - Event map defining event names and their data types
8
+ *
9
+ * @example Creating a custom event emitter
10
+ * ```typescript
11
+ * import { EventEmitter } from "@eGain/ai-agent-sdk";
12
+ *
13
+ * interface MyEvents {
14
+ * data: { value: number };
15
+ * error: { message: string };
16
+ * }
17
+ *
18
+ * class MyService extends EventEmitter<MyEvents> {
19
+ * doSomething() {
20
+ * this.emit("data", { value: 42 });
21
+ * }
22
+ * }
23
+ *
24
+ * const service = new MyService();
25
+ * service.on("data", (event) => {
26
+ * console.log(event.value); // Typed as number
27
+ * });
28
+ * ```
29
+ *
30
+ * @category Events
31
+ */
32
+ export class EventEmitter {
33
+ constructor() {
34
+ this.handlers = new Map();
35
+ this.onceHandlers = new Map();
36
+ }
37
+ /**
38
+ * Register an event handler.
39
+ *
40
+ * The handler will be called every time the event is emitted.
41
+ *
42
+ * @param event - The event name to listen for
43
+ * @param handler - The function to call when the event is emitted
44
+ * @returns `this` for method chaining
45
+ *
46
+ * @example
47
+ * ```typescript
48
+ * agent.on("message", (event) => {
49
+ * console.log("Received:", event.payload);
50
+ * });
51
+ * ```
52
+ */
53
+ on(event, handler) {
54
+ if (!this.handlers.has(event)) {
55
+ this.handlers.set(event, new Set());
56
+ }
57
+ this.handlers.get(event).add(handler);
58
+ return this;
59
+ }
60
+ /**
61
+ * Register a one-time event handler.
62
+ *
63
+ * The handler will be called only once, then automatically removed.
64
+ *
65
+ * @param event - The event name to listen for
66
+ * @param handler - The function to call when the event is emitted
67
+ * @returns `this` for method chaining
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * agent.once("connected", () => {
72
+ * console.log("First connection established!");
73
+ * });
74
+ * ```
75
+ */
76
+ once(event, handler) {
77
+ if (!this.onceHandlers.has(event)) {
78
+ this.onceHandlers.set(event, new Set());
79
+ }
80
+ this.onceHandlers.get(event).add(handler);
81
+ return this;
82
+ }
83
+ /**
84
+ * Remove an event handler.
85
+ *
86
+ * If no handler is specified, removes all handlers for the event.
87
+ *
88
+ * @param event - The event name
89
+ * @param handler - The specific handler to remove (optional)
90
+ * @returns `this` for method chaining
91
+ *
92
+ * @example Remove specific handler
93
+ * ```typescript
94
+ * const handler = (event) => console.log(event);
95
+ * agent.on("message", handler);
96
+ * agent.off("message", handler);
97
+ * ```
98
+ *
99
+ * @example Remove all handlers
100
+ * ```typescript
101
+ * agent.off("message");
102
+ * ```
103
+ */
104
+ off(event, handler) {
105
+ if (handler) {
106
+ this.handlers.get(event)?.delete(handler);
107
+ this.onceHandlers.get(event)?.delete(handler);
108
+ }
109
+ else {
110
+ // Remove all handlers for this event
111
+ this.handlers.delete(event);
112
+ this.onceHandlers.delete(event);
113
+ }
114
+ return this;
115
+ }
116
+ /**
117
+ * Emit an event
118
+ * Handlers are protected from exceptions - errors are caught and logged
119
+ */
120
+ emit(event, data) {
121
+ let hasHandlers = false;
122
+ // Execute regular handlers
123
+ const regularHandlers = this.handlers.get(event);
124
+ if (regularHandlers) {
125
+ hasHandlers = true;
126
+ for (const handler of regularHandlers) {
127
+ this.safeEmit(handler, data);
128
+ }
129
+ }
130
+ // Execute once handlers and remove them
131
+ const onceHandlers = this.onceHandlers.get(event);
132
+ if (onceHandlers) {
133
+ hasHandlers = true;
134
+ for (const handler of onceHandlers) {
135
+ this.safeEmit(handler, data);
136
+ }
137
+ onceHandlers.clear();
138
+ }
139
+ return hasHandlers;
140
+ }
141
+ /**
142
+ * Safely execute a handler, catching any exceptions
143
+ */
144
+ safeEmit(handler, data) {
145
+ try {
146
+ const result = handler(data);
147
+ // Handle async handlers
148
+ if (result instanceof Promise) {
149
+ result.catch((error) => {
150
+ // Silently catch async errors to prevent SDK crashes
151
+ // In production, this could be logged to an error reporting service
152
+ });
153
+ }
154
+ }
155
+ catch (error) {
156
+ // Silently catch sync errors to prevent SDK crashes
157
+ // In production, this could be logged to an error reporting service
158
+ }
159
+ }
160
+ /**
161
+ * Remove all event handlers
162
+ */
163
+ removeAllListeners(event) {
164
+ if (event) {
165
+ this.handlers.delete(event);
166
+ this.onceHandlers.delete(event);
167
+ }
168
+ else {
169
+ this.handlers.clear();
170
+ this.onceHandlers.clear();
171
+ }
172
+ return this;
173
+ }
174
+ /**
175
+ * Get the number of listeners for an event
176
+ */
177
+ listenerCount(event) {
178
+ const regular = this.handlers.get(event)?.size ?? 0;
179
+ const once = this.onceHandlers.get(event)?.size ?? 0;
180
+ return regular + once;
181
+ }
182
+ }
183
+ //# sourceMappingURL=EventEmitter.js.map