@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,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MSAL Loader Module
|
|
3
|
+
*
|
|
4
|
+
* This module ensures MSAL is loaded and available as window.msal
|
|
5
|
+
* The msal-browser.js is a UMD module that sets window.msal when executed.
|
|
6
|
+
* We import it as a side-effect so it executes and sets window.msal.
|
|
7
|
+
*/
|
|
8
|
+
import './msal-browser.js';
|
|
9
|
+
/**
|
|
10
|
+
* Ensure MSAL is available on window object
|
|
11
|
+
* This function verifies that window.msal was set by the UMD module
|
|
12
|
+
*/
|
|
13
|
+
export declare function ensureMSALLoaded(): void;
|
|
14
|
+
//# sourceMappingURL=msal-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"msal-loader.d.ts","sourceRoot":"","sources":["../../../src/core/auth/msal-loader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,mBAAmB,CAAC;AAE3B;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAiBvC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MSAL Loader Module
|
|
3
|
+
*
|
|
4
|
+
* This module ensures MSAL is loaded and available as window.msal
|
|
5
|
+
* The msal-browser.js is a UMD module that sets window.msal when executed.
|
|
6
|
+
* We import it as a side-effect so it executes and sets window.msal.
|
|
7
|
+
*/
|
|
8
|
+
// Import MSAL as a side-effect - the UMD module will execute and set window.msal
|
|
9
|
+
// When esbuild bundles this, the UMD wrapper executes and sets window.msal
|
|
10
|
+
import './msal-browser.js';
|
|
11
|
+
/**
|
|
12
|
+
* Ensure MSAL is available on window object
|
|
13
|
+
* This function verifies that window.msal was set by the UMD module
|
|
14
|
+
*/
|
|
15
|
+
export function ensureMSALLoaded() {
|
|
16
|
+
if (typeof window === 'undefined') {
|
|
17
|
+
return; // Not in browser environment
|
|
18
|
+
}
|
|
19
|
+
// The UMD module should have set window.msal when it executed
|
|
20
|
+
// We verify it's available
|
|
21
|
+
if (!window.msal) {
|
|
22
|
+
// In a bundled environment, the UMD wrapper should execute synchronously
|
|
23
|
+
// If window.msal is not available, there may be a bundling issue
|
|
24
|
+
throw new Error('MSAL library not found. Please ensure msal-browser.js is loaded. The SDK bundle should include MSAL automatically.');
|
|
25
|
+
}
|
|
26
|
+
// Verify that PublicClientApplication is available
|
|
27
|
+
if (!window.msal.PublicClientApplication) {
|
|
28
|
+
throw new Error('MSAL PublicClientApplication not found. The MSAL library may not have loaded correctly.');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Ensure MSAL is loaded when this module is imported
|
|
32
|
+
// Use a small delay to ensure the UMD module has executed
|
|
33
|
+
if (typeof window !== 'undefined') {
|
|
34
|
+
// The UMD module executes synchronously, but we check after a microtask
|
|
35
|
+
// to ensure it has completed
|
|
36
|
+
Promise.resolve().then(() => {
|
|
37
|
+
ensureMSALLoaded();
|
|
38
|
+
}).catch(() => {
|
|
39
|
+
// If ensureMSALLoaded throws, it means MSAL wasn't loaded
|
|
40
|
+
// This will be caught when PKCEAuthStrategy tries to use it
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=msal-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"msal-loader.js","sourceRoot":"","sources":["../../../src/core/auth/msal-loader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,iFAAiF;AACjF,2EAA2E;AAC3E,OAAO,mBAAmB,CAAC;AAE3B;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,CAAC,6BAA6B;IACvC,CAAC;IAED,8DAA8D;IAC9D,2BAA2B;IAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACjB,yEAAyE;QACzE,iEAAiE;QACjE,MAAM,IAAI,KAAK,CAAC,oHAAoH,CAAC,CAAC;IACxI,CAAC;IAED,mDAAmD;IACnD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,yFAAyF,CAAC,CAAC;IAC7G,CAAC;AACH,CAAC;AAED,qDAAqD;AACrD,0DAA0D;AAC1D,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IAClC,wEAAwE;IACxE,6BAA6B;IAC7B,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QAC1B,gBAAgB,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QACZ,0DAA0D;QAC1D,4DAA4D;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { EventEmitter } from '../events/EventEmitter.js';
|
|
2
|
+
import { ConnectionState } from './ConnectionState.js';
|
|
3
|
+
import { Transport } from './Transport.js';
|
|
4
|
+
import { Logger } from '../logging/Logger.js';
|
|
5
|
+
/**
|
|
6
|
+
* Connection event map
|
|
7
|
+
*/
|
|
8
|
+
export interface ConnectionEvents {
|
|
9
|
+
connected: {
|
|
10
|
+
timestamp: number;
|
|
11
|
+
};
|
|
12
|
+
message: {
|
|
13
|
+
data: any;
|
|
14
|
+
timestamp: number;
|
|
15
|
+
};
|
|
16
|
+
error: {
|
|
17
|
+
error: Error;
|
|
18
|
+
timestamp: number;
|
|
19
|
+
};
|
|
20
|
+
closed: {
|
|
21
|
+
code?: number;
|
|
22
|
+
reason?: string;
|
|
23
|
+
timestamp: number;
|
|
24
|
+
};
|
|
25
|
+
stateChanged: {
|
|
26
|
+
state: ConnectionState;
|
|
27
|
+
previousState: ConnectionState;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Connection configuration options
|
|
32
|
+
*/
|
|
33
|
+
export interface ConnectionConfig {
|
|
34
|
+
/**
|
|
35
|
+
* The transport instance to use for communication.
|
|
36
|
+
* If not provided, a WebSocketTransport will be created using the endpoint.
|
|
37
|
+
*/
|
|
38
|
+
transport?: Transport;
|
|
39
|
+
/**
|
|
40
|
+
* WebSocket endpoint URL (used when transport is not provided)
|
|
41
|
+
*/
|
|
42
|
+
endpoint?: string;
|
|
43
|
+
/**
|
|
44
|
+
* Maximum reconnection attempts
|
|
45
|
+
* @default Infinity
|
|
46
|
+
*/
|
|
47
|
+
maxReconnectAttempts?: number;
|
|
48
|
+
/**
|
|
49
|
+
* Base reconnection delay in milliseconds
|
|
50
|
+
* @default 1000
|
|
51
|
+
*/
|
|
52
|
+
baseReconnectDelay?: number;
|
|
53
|
+
/**
|
|
54
|
+
* Maximum reconnection delay in milliseconds
|
|
55
|
+
* @default 30000
|
|
56
|
+
*/
|
|
57
|
+
maxReconnectDelay?: number;
|
|
58
|
+
/**
|
|
59
|
+
* Logger instance (optional)
|
|
60
|
+
* If not provided, uses globalLogger
|
|
61
|
+
*/
|
|
62
|
+
logger?: Logger;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Connection manager with automatic reconnection.
|
|
66
|
+
*
|
|
67
|
+
* This class wraps a Transport implementation and adds:
|
|
68
|
+
* - Connection state management
|
|
69
|
+
* - Automatic reconnection with exponential backoff
|
|
70
|
+
* - Event forwarding and normalization
|
|
71
|
+
*
|
|
72
|
+
* The Connection class is transport-agnostic - it can work with any
|
|
73
|
+
* transport that implements the Transport interface (WebSocket, SSE, etc.)
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```typescript
|
|
77
|
+
* // Using default WebSocket transport
|
|
78
|
+
* const conn = new Connection({
|
|
79
|
+
* endpoint: 'wss://api.example.com/ws'
|
|
80
|
+
* });
|
|
81
|
+
*
|
|
82
|
+
* // Using custom transport
|
|
83
|
+
* const customTransport = new MyCustomTransport({ endpoint: '...' });
|
|
84
|
+
* const conn = new Connection({ transport: customTransport });
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
export declare class Connection extends EventEmitter<ConnectionEvents> {
|
|
88
|
+
private transport;
|
|
89
|
+
private state;
|
|
90
|
+
private reconnectAttempts;
|
|
91
|
+
private reconnectTimer;
|
|
92
|
+
private shouldReconnect;
|
|
93
|
+
private maxReconnectAttempts;
|
|
94
|
+
private baseReconnectDelay;
|
|
95
|
+
private maxReconnectDelay;
|
|
96
|
+
private logger;
|
|
97
|
+
constructor(config: ConnectionConfig);
|
|
98
|
+
/**
|
|
99
|
+
* @deprecated Use ConnectionConfig object instead
|
|
100
|
+
*/
|
|
101
|
+
constructor(endpoint: string);
|
|
102
|
+
/**
|
|
103
|
+
* Create default WebSocket transport
|
|
104
|
+
*/
|
|
105
|
+
private createDefaultTransport;
|
|
106
|
+
/**
|
|
107
|
+
* Get the underlying transport instance
|
|
108
|
+
*/
|
|
109
|
+
getTransport(): Transport;
|
|
110
|
+
/**
|
|
111
|
+
* Get the transport type
|
|
112
|
+
*/
|
|
113
|
+
getTransportType(): string;
|
|
114
|
+
/**
|
|
115
|
+
* Get current connection state
|
|
116
|
+
*/
|
|
117
|
+
getState(): ConnectionState;
|
|
118
|
+
/**
|
|
119
|
+
* Check if connected
|
|
120
|
+
*/
|
|
121
|
+
isConnected(): boolean;
|
|
122
|
+
/**
|
|
123
|
+
* Connect using the underlying transport
|
|
124
|
+
*/
|
|
125
|
+
connect(): Promise<void>;
|
|
126
|
+
/**
|
|
127
|
+
* Disconnect and stop reconnecting
|
|
128
|
+
*/
|
|
129
|
+
disconnect(): void;
|
|
130
|
+
/**
|
|
131
|
+
* Send a message through the transport
|
|
132
|
+
*/
|
|
133
|
+
send(data: any): Promise<void>;
|
|
134
|
+
/**
|
|
135
|
+
* Set maximum reconnection attempts
|
|
136
|
+
*/
|
|
137
|
+
setMaxReconnectAttempts(maxAttempts: number): void;
|
|
138
|
+
/**
|
|
139
|
+
* Set reconnection delay parameters
|
|
140
|
+
*/
|
|
141
|
+
setReconnectDelays(baseDelay: number, maxDelay: number): void;
|
|
142
|
+
/**
|
|
143
|
+
* Set up event forwarding from transport
|
|
144
|
+
*/
|
|
145
|
+
private setupTransportEvents;
|
|
146
|
+
/**
|
|
147
|
+
* Attempt to establish a connection
|
|
148
|
+
* @param isInitialAttempt - If true, throw error on failure instead of scheduling reconnect
|
|
149
|
+
*/
|
|
150
|
+
private attemptConnect;
|
|
151
|
+
/**
|
|
152
|
+
* Handle connection failure
|
|
153
|
+
*/
|
|
154
|
+
private handleConnectionFailure;
|
|
155
|
+
/**
|
|
156
|
+
* Schedule a reconnection attempt with exponential backoff
|
|
157
|
+
*/
|
|
158
|
+
private scheduleReconnect;
|
|
159
|
+
/**
|
|
160
|
+
* Update connection state and emit event
|
|
161
|
+
*/
|
|
162
|
+
private setState;
|
|
163
|
+
/**
|
|
164
|
+
* Clear reconnect timer
|
|
165
|
+
*/
|
|
166
|
+
private clearReconnectTimer;
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=Connection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Connection.d.ts","sourceRoot":"","sources":["../../../src/core/connection/Connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,OAAO,EAAE;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,KAAK,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,YAAY,EAAE;QAAE,KAAK,EAAE,eAAe,CAAC;QAAC,aAAa,EAAE,eAAe,CAAA;KAAE,CAAC;CAC1E;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,UAAW,SAAQ,YAAY,CAAC,gBAAgB,CAAC;IAC5D,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,KAAK,CAAyC;IACtD,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,oBAAoB,CAAY;IACxC,OAAO,CAAC,kBAAkB,CAAQ;IAClC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,gBAAgB;IACpC;;OAEG;gBACS,QAAQ,EAAE,MAAM;IA2C5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAO9B;;OAEG;IACH,YAAY,IAAI,SAAS;IAIzB;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,QAAQ,IAAI,eAAe;IAI3B;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAW9B;;OAEG;IACH,UAAU,IAAI,IAAI;IAQlB;;OAEG;IACG,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAWpC;;OAEG;IACH,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIlD;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAK7D;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAoC5B;;;OAGG;YACW,cAAc;IA4B5B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAe/B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAyCzB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAehB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAM5B"}
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import { EventEmitter } from '../events/EventEmitter.js';
|
|
2
|
+
import { ConnectionState } from './ConnectionState.js';
|
|
3
|
+
import { ConnectionError } from '../errors/SDKError.js';
|
|
4
|
+
import { WebSocketTransport } from './WebSocketTransport.js';
|
|
5
|
+
import { globalLogger } from '../logging/globalLogger.js';
|
|
6
|
+
/**
|
|
7
|
+
* Connection manager with automatic reconnection.
|
|
8
|
+
*
|
|
9
|
+
* This class wraps a Transport implementation and adds:
|
|
10
|
+
* - Connection state management
|
|
11
|
+
* - Automatic reconnection with exponential backoff
|
|
12
|
+
* - Event forwarding and normalization
|
|
13
|
+
*
|
|
14
|
+
* The Connection class is transport-agnostic - it can work with any
|
|
15
|
+
* transport that implements the Transport interface (WebSocket, SSE, etc.)
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* // Using default WebSocket transport
|
|
20
|
+
* const conn = new Connection({
|
|
21
|
+
* endpoint: 'wss://api.example.com/ws'
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* // Using custom transport
|
|
25
|
+
* const customTransport = new MyCustomTransport({ endpoint: '...' });
|
|
26
|
+
* const conn = new Connection({ transport: customTransport });
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export class Connection extends EventEmitter {
|
|
30
|
+
constructor(configOrEndpoint) {
|
|
31
|
+
super();
|
|
32
|
+
this.state = ConnectionState.IDLE;
|
|
33
|
+
this.reconnectAttempts = 0;
|
|
34
|
+
this.reconnectTimer = null;
|
|
35
|
+
this.shouldReconnect = false;
|
|
36
|
+
this.maxReconnectAttempts = Infinity;
|
|
37
|
+
this.baseReconnectDelay = 1000; // 1 second
|
|
38
|
+
this.maxReconnectDelay = 30000; // 30 seconds
|
|
39
|
+
// Handle legacy constructor signature
|
|
40
|
+
if (typeof configOrEndpoint === 'string') {
|
|
41
|
+
// Legacy constructor - use global logger
|
|
42
|
+
this.logger = globalLogger;
|
|
43
|
+
this.transport = this.createDefaultTransport(configOrEndpoint);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
const config = configOrEndpoint;
|
|
47
|
+
// Set logger first (needed for createDefaultTransport)
|
|
48
|
+
this.logger = config.logger ?? globalLogger;
|
|
49
|
+
if (config.transport) {
|
|
50
|
+
// Use provided transport
|
|
51
|
+
this.transport = config.transport;
|
|
52
|
+
}
|
|
53
|
+
else if (config.endpoint) {
|
|
54
|
+
// Create default WebSocket transport
|
|
55
|
+
this.transport = this.createDefaultTransport(config.endpoint);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
throw new Error('Either transport or endpoint must be provided');
|
|
59
|
+
}
|
|
60
|
+
// Apply configuration
|
|
61
|
+
if (config.maxReconnectAttempts !== undefined) {
|
|
62
|
+
this.maxReconnectAttempts = config.maxReconnectAttempts;
|
|
63
|
+
}
|
|
64
|
+
if (config.baseReconnectDelay !== undefined) {
|
|
65
|
+
this.baseReconnectDelay = config.baseReconnectDelay;
|
|
66
|
+
}
|
|
67
|
+
if (config.maxReconnectDelay !== undefined) {
|
|
68
|
+
this.maxReconnectDelay = config.maxReconnectDelay;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Set up transport event forwarding
|
|
72
|
+
this.setupTransportEvents();
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Create default WebSocket transport
|
|
76
|
+
*/
|
|
77
|
+
createDefaultTransport(endpoint) {
|
|
78
|
+
return new WebSocketTransport({
|
|
79
|
+
endpoint,
|
|
80
|
+
logger: this.logger,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Get the underlying transport instance
|
|
85
|
+
*/
|
|
86
|
+
getTransport() {
|
|
87
|
+
return this.transport;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get the transport type
|
|
91
|
+
*/
|
|
92
|
+
getTransportType() {
|
|
93
|
+
return this.transport.getType();
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get current connection state
|
|
97
|
+
*/
|
|
98
|
+
getState() {
|
|
99
|
+
return this.state;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Check if connected
|
|
103
|
+
*/
|
|
104
|
+
isConnected() {
|
|
105
|
+
return this.state === ConnectionState.CONNECTED && this.transport.isConnected();
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Connect using the underlying transport
|
|
109
|
+
*/
|
|
110
|
+
async connect() {
|
|
111
|
+
if (this.state === ConnectionState.CONNECTED || this.state === ConnectionState.CONNECTING) {
|
|
112
|
+
this.logger.debug('Connection already connected or connecting', { state: this.state });
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
this.logger.debug('Initiating connection', { endpoint: this.transport.getType() });
|
|
116
|
+
this.shouldReconnect = true;
|
|
117
|
+
await this.attemptConnect(true); // Initial attempt - throw on failure
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Disconnect and stop reconnecting
|
|
121
|
+
*/
|
|
122
|
+
disconnect() {
|
|
123
|
+
this.logger.debug('Disconnecting', { state: this.state });
|
|
124
|
+
this.shouldReconnect = false;
|
|
125
|
+
this.clearReconnectTimer();
|
|
126
|
+
this.transport.disconnect();
|
|
127
|
+
this.setState(ConnectionState.CLOSED);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Send a message through the transport
|
|
131
|
+
*/
|
|
132
|
+
async send(data) {
|
|
133
|
+
if (!this.isConnected()) {
|
|
134
|
+
const error = new ConnectionError('Cannot send message: not connected');
|
|
135
|
+
this.logger.warn('Cannot send message: not connected', { state: this.state });
|
|
136
|
+
throw error;
|
|
137
|
+
}
|
|
138
|
+
this.logger.debug('Sending message via transport', { transportType: this.transport.getType() });
|
|
139
|
+
await this.transport.send(data);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Set maximum reconnection attempts
|
|
143
|
+
*/
|
|
144
|
+
setMaxReconnectAttempts(maxAttempts) {
|
|
145
|
+
this.maxReconnectAttempts = maxAttempts;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Set reconnection delay parameters
|
|
149
|
+
*/
|
|
150
|
+
setReconnectDelays(baseDelay, maxDelay) {
|
|
151
|
+
this.baseReconnectDelay = baseDelay;
|
|
152
|
+
this.maxReconnectDelay = maxDelay;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Set up event forwarding from transport
|
|
156
|
+
*/
|
|
157
|
+
setupTransportEvents() {
|
|
158
|
+
this.transport.on('connected', (event) => {
|
|
159
|
+
this.logger.info('Transport connected', { transportType: this.transport.getType() });
|
|
160
|
+
this.reconnectAttempts = 0;
|
|
161
|
+
this.setState(ConnectionState.CONNECTED);
|
|
162
|
+
this.emit('connected', event);
|
|
163
|
+
});
|
|
164
|
+
this.transport.on('message', (event) => {
|
|
165
|
+
this.logger.debug('Message received from transport', { transportType: this.transport.getType() });
|
|
166
|
+
this.emit('message', event);
|
|
167
|
+
});
|
|
168
|
+
this.transport.on('error', (event) => {
|
|
169
|
+
this.logger.error('Transport error', event.error, { transportType: this.transport.getType() });
|
|
170
|
+
this.emit('error', event);
|
|
171
|
+
});
|
|
172
|
+
this.transport.on('closed', (event) => {
|
|
173
|
+
this.logger.info('Transport closed', {
|
|
174
|
+
code: event.code,
|
|
175
|
+
reason: event.reason,
|
|
176
|
+
transportType: this.transport.getType()
|
|
177
|
+
});
|
|
178
|
+
this.emit('closed', event);
|
|
179
|
+
// Attempt reconnection if needed
|
|
180
|
+
if (this.shouldReconnect && event.code !== 1000) {
|
|
181
|
+
// Don't reconnect on normal closure
|
|
182
|
+
this.scheduleReconnect();
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
this.setState(ConnectionState.CLOSED);
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Attempt to establish a connection
|
|
191
|
+
* @param isInitialAttempt - If true, throw error on failure instead of scheduling reconnect
|
|
192
|
+
*/
|
|
193
|
+
async attemptConnect(isInitialAttempt = false) {
|
|
194
|
+
if (this.state === ConnectionState.CONNECTING || this.state === ConnectionState.CONNECTED) {
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
this.setState(ConnectionState.CONNECTING);
|
|
198
|
+
this.logger.debug('Attempting to connect', { transportType: this.transport.getType() });
|
|
199
|
+
try {
|
|
200
|
+
await this.transport.connect();
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
const connectionError = error instanceof ConnectionError
|
|
204
|
+
? error
|
|
205
|
+
: new ConnectionError('Failed to establish connection', error instanceof Error ? error : new Error(String(error)));
|
|
206
|
+
// For initial connection attempt, throw the error so caller knows it failed
|
|
207
|
+
if (isInitialAttempt) {
|
|
208
|
+
this.handleConnectionFailure(connectionError);
|
|
209
|
+
throw connectionError;
|
|
210
|
+
}
|
|
211
|
+
this.handleConnectionFailure(connectionError);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Handle connection failure
|
|
216
|
+
*/
|
|
217
|
+
handleConnectionFailure(error) {
|
|
218
|
+
this.logger.warn('Connection attempt failed', {
|
|
219
|
+
error: error.message,
|
|
220
|
+
reconnectAttempts: this.reconnectAttempts,
|
|
221
|
+
transportType: this.transport.getType()
|
|
222
|
+
});
|
|
223
|
+
this.emit('error', { error, timestamp: Date.now() });
|
|
224
|
+
if (this.shouldReconnect) {
|
|
225
|
+
this.scheduleReconnect();
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
this.setState(ConnectionState.CLOSED);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Schedule a reconnection attempt with exponential backoff
|
|
233
|
+
*/
|
|
234
|
+
scheduleReconnect() {
|
|
235
|
+
if (!this.shouldReconnect) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
if (this.reconnectAttempts >= this.maxReconnectAttempts) {
|
|
239
|
+
this.logger.error('Max reconnection attempts reached', new ConnectionError('Max reconnection attempts reached'), {
|
|
240
|
+
maxAttempts: this.maxReconnectAttempts,
|
|
241
|
+
transportType: this.transport.getType()
|
|
242
|
+
});
|
|
243
|
+
this.setState(ConnectionState.CLOSED);
|
|
244
|
+
this.emit('error', {
|
|
245
|
+
error: new ConnectionError('Max reconnection attempts reached'),
|
|
246
|
+
timestamp: Date.now(),
|
|
247
|
+
});
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
this.setState(ConnectionState.RECONNECTING);
|
|
251
|
+
// Calculate delay with exponential backoff
|
|
252
|
+
const delay = Math.min(this.baseReconnectDelay * Math.pow(2, this.reconnectAttempts), this.maxReconnectDelay);
|
|
253
|
+
this.reconnectAttempts++;
|
|
254
|
+
this.logger.debug('Scheduling reconnection attempt', {
|
|
255
|
+
attempt: this.reconnectAttempts,
|
|
256
|
+
delay,
|
|
257
|
+
transportType: this.transport.getType()
|
|
258
|
+
});
|
|
259
|
+
this.reconnectTimer = setTimeout(() => {
|
|
260
|
+
this.reconnectTimer = null;
|
|
261
|
+
this.attemptConnect(false); // Reconnection attempt - don't throw, schedule next reconnect
|
|
262
|
+
}, delay);
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Update connection state and emit event
|
|
266
|
+
*/
|
|
267
|
+
setState(newState) {
|
|
268
|
+
if (this.state === newState) {
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
const previousState = this.state;
|
|
272
|
+
this.state = newState;
|
|
273
|
+
this.logger.debug('Connection state changed', {
|
|
274
|
+
previousState,
|
|
275
|
+
newState,
|
|
276
|
+
transportType: this.transport.getType()
|
|
277
|
+
});
|
|
278
|
+
this.emit('stateChanged', { state: newState, previousState });
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Clear reconnect timer
|
|
282
|
+
*/
|
|
283
|
+
clearReconnectTimer() {
|
|
284
|
+
if (this.reconnectTimer) {
|
|
285
|
+
clearTimeout(this.reconnectTimer);
|
|
286
|
+
this.reconnectTimer = null;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=Connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Connection.js","sourceRoot":"","sources":["../../../src/core/connection/Connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Connection state enumeration
|
|
3
|
+
*/
|
|
4
|
+
export declare enum ConnectionState {
|
|
5
|
+
IDLE = "IDLE",
|
|
6
|
+
CONNECTING = "CONNECTING",
|
|
7
|
+
CONNECTED = "CONNECTED",
|
|
8
|
+
RECONNECTING = "RECONNECTING",
|
|
9
|
+
CLOSED = "CLOSED"
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=ConnectionState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectionState.d.ts","sourceRoot":"","sources":["../../../src/core/connection/ConnectionState.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,eAAe;IACzB,IAAI,SAAS;IACb,UAAU,eAAe;IACzB,SAAS,cAAc;IACvB,YAAY,iBAAiB;IAC7B,MAAM,WAAW;CAClB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Connection state enumeration
|
|
3
|
+
*/
|
|
4
|
+
export var ConnectionState;
|
|
5
|
+
(function (ConnectionState) {
|
|
6
|
+
ConnectionState["IDLE"] = "IDLE";
|
|
7
|
+
ConnectionState["CONNECTING"] = "CONNECTING";
|
|
8
|
+
ConnectionState["CONNECTED"] = "CONNECTED";
|
|
9
|
+
ConnectionState["RECONNECTING"] = "RECONNECTING";
|
|
10
|
+
ConnectionState["CLOSED"] = "CLOSED";
|
|
11
|
+
})(ConnectionState || (ConnectionState = {}));
|
|
12
|
+
//# sourceMappingURL=ConnectionState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectionState.js","sourceRoot":"","sources":["../../../src/core/connection/ConnectionState.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAN,IAAY,eAMX;AAND,WAAY,eAAe;IACzB,gCAAa,CAAA;IACb,4CAAyB,CAAA;IACzB,0CAAuB,CAAA;IACvB,gDAA6B,CAAA;IAC7B,oCAAiB,CAAA;AACnB,CAAC,EANW,eAAe,KAAf,eAAe,QAM1B"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { EventEmitter } from '../events/EventEmitter.js';
|
|
2
|
+
import { Logger } from '../logging/Logger.js';
|
|
3
|
+
/**
|
|
4
|
+
* Transport event map - events that any transport must emit
|
|
5
|
+
*/
|
|
6
|
+
export interface TransportEvents {
|
|
7
|
+
/**
|
|
8
|
+
* Emitted when transport connection is established
|
|
9
|
+
*/
|
|
10
|
+
connected: {
|
|
11
|
+
timestamp: number;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Emitted when a message is received
|
|
15
|
+
*/
|
|
16
|
+
message: {
|
|
17
|
+
data: any;
|
|
18
|
+
timestamp: number;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Emitted when an error occurs
|
|
22
|
+
*/
|
|
23
|
+
error: {
|
|
24
|
+
error: Error;
|
|
25
|
+
timestamp: number;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Emitted when connection is closed
|
|
29
|
+
*/
|
|
30
|
+
closed: {
|
|
31
|
+
code?: number;
|
|
32
|
+
reason?: string;
|
|
33
|
+
timestamp: number;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Transport configuration options
|
|
38
|
+
*/
|
|
39
|
+
export interface TransportConfig {
|
|
40
|
+
/**
|
|
41
|
+
* Connection endpoint URL
|
|
42
|
+
*/
|
|
43
|
+
endpoint: string;
|
|
44
|
+
/**
|
|
45
|
+
* Connection timeout in milliseconds
|
|
46
|
+
* @default 10000
|
|
47
|
+
*/
|
|
48
|
+
connectionTimeout?: number;
|
|
49
|
+
/**
|
|
50
|
+
* Logger instance (optional)
|
|
51
|
+
* If not provided, uses globalLogger
|
|
52
|
+
*/
|
|
53
|
+
logger?: Logger;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Abstract base class for transport implementations.
|
|
57
|
+
*
|
|
58
|
+
* Any transport mechanism (WebSocket, SSE, HTTP polling, etc.) should extend
|
|
59
|
+
* this class and implement the abstract methods.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```typescript
|
|
63
|
+
* class MyCustomTransport extends Transport {
|
|
64
|
+
* async connect(): Promise<void> { ... }
|
|
65
|
+
* disconnect(): void { ... }
|
|
66
|
+
* async send(data: any): Promise<void> { ... }
|
|
67
|
+
* isConnected(): boolean { ... }
|
|
68
|
+
* }
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
export declare abstract class Transport extends EventEmitter<TransportEvents> {
|
|
72
|
+
protected readonly endpoint: string;
|
|
73
|
+
protected readonly connectionTimeout: number;
|
|
74
|
+
protected readonly logger: Logger;
|
|
75
|
+
constructor(config: TransportConfig);
|
|
76
|
+
/**
|
|
77
|
+
* Establish the transport connection
|
|
78
|
+
*/
|
|
79
|
+
abstract connect(): Promise<void>;
|
|
80
|
+
/**
|
|
81
|
+
* Close the transport connection
|
|
82
|
+
*/
|
|
83
|
+
abstract disconnect(): void;
|
|
84
|
+
/**
|
|
85
|
+
* Send data through the transport
|
|
86
|
+
* @param data - The data to send
|
|
87
|
+
*/
|
|
88
|
+
abstract send(data: any): Promise<void>;
|
|
89
|
+
/**
|
|
90
|
+
* Check if the transport is currently connected
|
|
91
|
+
*/
|
|
92
|
+
abstract isConnected(): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Get the transport type identifier
|
|
95
|
+
*/
|
|
96
|
+
abstract getType(): string;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=Transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Transport.d.ts","sourceRoot":"","sources":["../../../src/core/connection/Transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,SAAS,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAEjC;;OAEG;IACH,OAAO,EAAE;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAE1C;;OAEG;IACH,KAAK,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAE3C;;OAEG;IACH,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;GAeG;AACH,8BAAsB,SAAU,SAAQ,YAAY,CAAC,eAAe,CAAC;IACnE,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IACpC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEtB,MAAM,EAAE,eAAe;IAOnC;;OAEG;IACH,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAEjC;;OAEG;IACH,QAAQ,CAAC,UAAU,IAAI,IAAI;IAE3B;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,WAAW,IAAI,OAAO;IAE/B;;OAEG;IACH,QAAQ,CAAC,OAAO,IAAI,MAAM;CAC3B"}
|