@juspay/neurolink 6.0.0 → 6.2.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 (283) hide show
  1. package/CHANGELOG.md +14 -3
  2. package/dist/cli/commands/config.d.ts +13 -13
  3. package/dist/cli/index.js +3 -9
  4. package/dist/core/analytics.d.ts +11 -1
  5. package/dist/core/analytics.js +2 -2
  6. package/dist/core/base-provider.js +4 -18
  7. package/dist/core/dynamic-models.d.ts +8 -8
  8. package/dist/core/factory.js +3 -11
  9. package/dist/index.d.ts +2 -4
  10. package/dist/index.js +2 -11
  11. package/dist/lib/core/analytics.d.ts +11 -1
  12. package/dist/lib/core/analytics.js +2 -2
  13. package/dist/lib/core/base-provider.js +4 -18
  14. package/dist/lib/core/dynamic-models.d.ts +8 -8
  15. package/dist/lib/core/factory.js +3 -11
  16. package/dist/lib/index.d.ts +2 -4
  17. package/dist/lib/index.js +2 -11
  18. package/dist/lib/mcp/factory.d.ts +1 -1
  19. package/dist/lib/mcp/index.d.ts +7 -19
  20. package/dist/lib/mcp/index.js +15 -56
  21. package/dist/lib/neurolink.d.ts +1 -9
  22. package/dist/lib/neurolink.js +21 -70
  23. package/dist/lib/providers/amazon-bedrock.js +5 -16
  24. package/dist/lib/providers/anthropic-baseprovider.js +3 -21
  25. package/dist/lib/providers/anthropic.js +4 -7
  26. package/dist/lib/providers/azure-openai.js +4 -2
  27. package/dist/lib/providers/google-vertex.js +5 -9
  28. package/dist/lib/providers/huggingFace.js +5 -10
  29. package/dist/lib/providers/mistral.js +5 -8
  30. package/dist/lib/providers/openAI.js +4 -7
  31. package/dist/lib/utils/providerConfig.d.ts +117 -0
  32. package/dist/lib/utils/providerConfig.js +353 -0
  33. package/dist/lib/utils/providerUtils.d.ts +2 -1
  34. package/dist/lib/utils/providerUtils.js +53 -36
  35. package/dist/lib/utils/timeout.d.ts +72 -1
  36. package/dist/lib/utils/timeout.js +203 -2
  37. package/dist/mcp/factory.d.ts +1 -1
  38. package/dist/mcp/index.d.ts +7 -19
  39. package/dist/mcp/index.js +15 -56
  40. package/dist/neurolink.d.ts +1 -9
  41. package/dist/neurolink.js +21 -70
  42. package/dist/providers/amazon-bedrock.js +5 -16
  43. package/dist/providers/anthropic-baseprovider.js +3 -21
  44. package/dist/providers/anthropic.js +4 -7
  45. package/dist/providers/azure-openai.js +4 -2
  46. package/dist/providers/google-vertex.js +5 -9
  47. package/dist/providers/huggingFace.js +5 -10
  48. package/dist/providers/mistral.js +5 -8
  49. package/dist/providers/openAI.js +4 -7
  50. package/dist/utils/providerConfig.d.ts +117 -0
  51. package/dist/utils/providerConfig.js +353 -0
  52. package/dist/utils/providerUtils.d.ts +2 -1
  53. package/dist/utils/providerUtils.js +53 -36
  54. package/dist/utils/timeout.d.ts +72 -1
  55. package/dist/utils/timeout.js +203 -2
  56. package/package.json +2 -1
  57. package/dist/chat/client-utils.d.ts +0 -95
  58. package/dist/chat/client-utils.js +0 -315
  59. package/dist/chat/index.d.ts +0 -24
  60. package/dist/chat/index.js +0 -33
  61. package/dist/chat/session-storage.d.ts +0 -77
  62. package/dist/chat/session-storage.js +0 -233
  63. package/dist/chat/session.d.ts +0 -96
  64. package/dist/chat/session.js +0 -257
  65. package/dist/chat/sse-handler.d.ts +0 -49
  66. package/dist/chat/sse-handler.js +0 -259
  67. package/dist/chat/types.d.ts +0 -74
  68. package/dist/chat/types.js +0 -5
  69. package/dist/chat/websocket-chat-handler.d.ts +0 -37
  70. package/dist/chat/websocket-chat-handler.js +0 -262
  71. package/dist/cli/commands/mcp.d.ts +0 -20
  72. package/dist/cli/commands/mcp.js +0 -1272
  73. package/dist/core/defaults.d.ts +0 -19
  74. package/dist/core/defaults.js +0 -29
  75. package/dist/core/evaluation-config.d.ts +0 -29
  76. package/dist/core/evaluation-config.js +0 -144
  77. package/dist/factories/compatibility-factory.d.ts +0 -35
  78. package/dist/factories/compatibility-factory.js +0 -71
  79. package/dist/factories/provider-generate-factory.d.ts +0 -20
  80. package/dist/factories/provider-generate-factory.js +0 -93
  81. package/dist/lib/chat/client-utils.d.ts +0 -95
  82. package/dist/lib/chat/client-utils.js +0 -315
  83. package/dist/lib/chat/index.d.ts +0 -24
  84. package/dist/lib/chat/index.js +0 -33
  85. package/dist/lib/chat/session-storage.d.ts +0 -77
  86. package/dist/lib/chat/session-storage.js +0 -233
  87. package/dist/lib/chat/session.d.ts +0 -96
  88. package/dist/lib/chat/session.js +0 -257
  89. package/dist/lib/chat/sse-handler.d.ts +0 -49
  90. package/dist/lib/chat/sse-handler.js +0 -259
  91. package/dist/lib/chat/types.d.ts +0 -74
  92. package/dist/lib/chat/types.js +0 -5
  93. package/dist/lib/chat/websocket-chat-handler.d.ts +0 -37
  94. package/dist/lib/chat/websocket-chat-handler.js +0 -262
  95. package/dist/lib/core/defaults.d.ts +0 -19
  96. package/dist/lib/core/defaults.js +0 -29
  97. package/dist/lib/core/evaluation-config.d.ts +0 -29
  98. package/dist/lib/core/evaluation-config.js +0 -144
  99. package/dist/lib/factories/compatibility-factory.d.ts +0 -35
  100. package/dist/lib/factories/compatibility-factory.js +0 -71
  101. package/dist/lib/factories/provider-generate-factory.d.ts +0 -20
  102. package/dist/lib/factories/provider-generate-factory.js +0 -93
  103. package/dist/lib/mcp/adapters/plugin-bridge.d.ts +0 -40
  104. package/dist/lib/mcp/adapters/plugin-bridge.js +0 -89
  105. package/dist/lib/mcp/auto-discovery.d.ts +0 -62
  106. package/dist/lib/mcp/auto-discovery.js +0 -149
  107. package/dist/lib/mcp/client.d.ts +0 -68
  108. package/dist/lib/mcp/client.js +0 -248
  109. package/dist/lib/mcp/config.d.ts +0 -31
  110. package/dist/lib/mcp/config.js +0 -99
  111. package/dist/lib/mcp/context-manager.d.ts +0 -171
  112. package/dist/lib/mcp/context-manager.js +0 -362
  113. package/dist/lib/mcp/contracts/mcp-contract.d.ts +0 -169
  114. package/dist/lib/mcp/contracts/mcp-contract.js +0 -58
  115. package/dist/lib/mcp/core/plugin-manager.d.ts +0 -46
  116. package/dist/lib/mcp/core/plugin-manager.js +0 -110
  117. package/dist/lib/mcp/demo/plugin-demo.d.ts +0 -20
  118. package/dist/lib/mcp/demo/plugin-demo.js +0 -118
  119. package/dist/lib/mcp/dynamic-chain-executor.d.ts +0 -225
  120. package/dist/lib/mcp/dynamic-chain-executor.js +0 -489
  121. package/dist/lib/mcp/dynamic-orchestrator.d.ts +0 -115
  122. package/dist/lib/mcp/dynamic-orchestrator.js +0 -351
  123. package/dist/lib/mcp/ecosystem.d.ts +0 -75
  124. package/dist/lib/mcp/ecosystem.js +0 -161
  125. package/dist/lib/mcp/error-manager.d.ts +0 -254
  126. package/dist/lib/mcp/error-manager.js +0 -501
  127. package/dist/lib/mcp/error-recovery.d.ts +0 -159
  128. package/dist/lib/mcp/error-recovery.js +0 -405
  129. package/dist/lib/mcp/external-client.d.ts +0 -88
  130. package/dist/lib/mcp/external-client.js +0 -331
  131. package/dist/lib/mcp/external-manager.d.ts +0 -112
  132. package/dist/lib/mcp/external-manager.js +0 -308
  133. package/dist/lib/mcp/function-calling.d.ts +0 -65
  134. package/dist/lib/mcp/function-calling.js +0 -642
  135. package/dist/lib/mcp/health-monitor.d.ts +0 -257
  136. package/dist/lib/mcp/health-monitor.js +0 -630
  137. package/dist/lib/mcp/initialize-tools.d.ts +0 -29
  138. package/dist/lib/mcp/initialize-tools.js +0 -261
  139. package/dist/lib/mcp/initialize.d.ts +0 -18
  140. package/dist/lib/mcp/initialize.js +0 -62
  141. package/dist/lib/mcp/manager.d.ts +0 -68
  142. package/dist/lib/mcp/manager.js +0 -176
  143. package/dist/lib/mcp/neurolink-mcp-client.d.ts +0 -97
  144. package/dist/lib/mcp/neurolink-mcp-client.js +0 -462
  145. package/dist/lib/mcp/orchestrator.d.ts +0 -302
  146. package/dist/lib/mcp/orchestrator.js +0 -703
  147. package/dist/lib/mcp/plugin-manager.d.ts +0 -98
  148. package/dist/lib/mcp/plugin-manager.js +0 -296
  149. package/dist/lib/mcp/plugins/core/filesystem-mcp.d.ts +0 -36
  150. package/dist/lib/mcp/plugins/core/filesystem-mcp.js +0 -142
  151. package/dist/lib/mcp/plugins/filesystem-mcp.d.ts +0 -37
  152. package/dist/lib/mcp/plugins/filesystem-mcp.js +0 -54
  153. package/dist/lib/mcp/security-manager.d.ts +0 -87
  154. package/dist/lib/mcp/security-manager.js +0 -344
  155. package/dist/lib/mcp/semaphore-manager.d.ts +0 -137
  156. package/dist/lib/mcp/semaphore-manager.js +0 -329
  157. package/dist/lib/mcp/session-manager.d.ts +0 -187
  158. package/dist/lib/mcp/session-manager.js +0 -400
  159. package/dist/lib/mcp/session-persistence.d.ts +0 -93
  160. package/dist/lib/mcp/session-persistence.js +0 -301
  161. package/dist/lib/mcp/tool-integration.d.ts +0 -58
  162. package/dist/lib/mcp/tool-integration.js +0 -203
  163. package/dist/lib/mcp/transport-manager.d.ts +0 -154
  164. package/dist/lib/mcp/transport-manager.js +0 -334
  165. package/dist/lib/mcp/unified-mcp.d.ts +0 -133
  166. package/dist/lib/mcp/unified-mcp.js +0 -251
  167. package/dist/lib/mcp/unified-registry.d.ts +0 -165
  168. package/dist/lib/mcp/unified-registry.js +0 -538
  169. package/dist/lib/providers/analytics-helper.d.ts +0 -38
  170. package/dist/lib/providers/analytics-helper.js +0 -216
  171. package/dist/lib/providers/function-calling-provider.d.ts +0 -142
  172. package/dist/lib/providers/function-calling-provider.js +0 -630
  173. package/dist/lib/providers/mcp-provider.d.ts +0 -75
  174. package/dist/lib/providers/mcp-provider.js +0 -283
  175. package/dist/lib/providers/timeout-wrapper.d.ts +0 -40
  176. package/dist/lib/providers/timeout-wrapper.js +0 -100
  177. package/dist/lib/sdk/tool-extension.d.ts +0 -181
  178. package/dist/lib/sdk/tool-extension.js +0 -284
  179. package/dist/lib/services/streaming/streaming-manager.d.ts +0 -29
  180. package/dist/lib/services/streaming/streaming-manager.js +0 -245
  181. package/dist/lib/services/types.d.ts +0 -156
  182. package/dist/lib/services/types.js +0 -2
  183. package/dist/lib/services/websocket/websocket-server.d.ts +0 -34
  184. package/dist/lib/services/websocket/websocket-server.js +0 -305
  185. package/dist/lib/utils/provider-validation.d.ts +0 -36
  186. package/dist/lib/utils/provider-validation.js +0 -625
  187. package/dist/lib/utils/providerUtils-fixed.d.ts +0 -8
  188. package/dist/lib/utils/providerUtils-fixed.js +0 -94
  189. package/dist/lib/utils/streaming-utils.d.ts +0 -79
  190. package/dist/lib/utils/streaming-utils.js +0 -198
  191. package/dist/lib/utils/timeout-manager.d.ts +0 -75
  192. package/dist/lib/utils/timeout-manager.js +0 -244
  193. package/dist/mcp/adapters/plugin-bridge.d.ts +0 -40
  194. package/dist/mcp/adapters/plugin-bridge.js +0 -89
  195. package/dist/mcp/auto-discovery.d.ts +0 -62
  196. package/dist/mcp/auto-discovery.js +0 -149
  197. package/dist/mcp/client.d.ts +0 -68
  198. package/dist/mcp/client.js +0 -248
  199. package/dist/mcp/config.d.ts +0 -31
  200. package/dist/mcp/config.js +0 -99
  201. package/dist/mcp/context-manager.d.ts +0 -171
  202. package/dist/mcp/context-manager.js +0 -362
  203. package/dist/mcp/contracts/mcp-contract.d.ts +0 -169
  204. package/dist/mcp/contracts/mcp-contract.js +0 -58
  205. package/dist/mcp/core/plugin-manager.d.ts +0 -46
  206. package/dist/mcp/core/plugin-manager.js +0 -110
  207. package/dist/mcp/demo/plugin-demo.d.ts +0 -20
  208. package/dist/mcp/demo/plugin-demo.js +0 -118
  209. package/dist/mcp/dynamic-chain-executor.d.ts +0 -225
  210. package/dist/mcp/dynamic-chain-executor.js +0 -489
  211. package/dist/mcp/dynamic-orchestrator.d.ts +0 -115
  212. package/dist/mcp/dynamic-orchestrator.js +0 -351
  213. package/dist/mcp/ecosystem.d.ts +0 -75
  214. package/dist/mcp/ecosystem.js +0 -162
  215. package/dist/mcp/error-manager.d.ts +0 -254
  216. package/dist/mcp/error-manager.js +0 -501
  217. package/dist/mcp/error-recovery.d.ts +0 -159
  218. package/dist/mcp/error-recovery.js +0 -405
  219. package/dist/mcp/external-client.d.ts +0 -88
  220. package/dist/mcp/external-client.js +0 -331
  221. package/dist/mcp/external-manager.d.ts +0 -112
  222. package/dist/mcp/external-manager.js +0 -308
  223. package/dist/mcp/function-calling.d.ts +0 -65
  224. package/dist/mcp/function-calling.js +0 -642
  225. package/dist/mcp/health-monitor.d.ts +0 -257
  226. package/dist/mcp/health-monitor.js +0 -630
  227. package/dist/mcp/initialize-tools.d.ts +0 -29
  228. package/dist/mcp/initialize-tools.js +0 -262
  229. package/dist/mcp/initialize.d.ts +0 -18
  230. package/dist/mcp/initialize.js +0 -62
  231. package/dist/mcp/manager.d.ts +0 -68
  232. package/dist/mcp/manager.js +0 -176
  233. package/dist/mcp/neurolink-mcp-client.d.ts +0 -97
  234. package/dist/mcp/neurolink-mcp-client.js +0 -462
  235. package/dist/mcp/orchestrator.d.ts +0 -302
  236. package/dist/mcp/orchestrator.js +0 -703
  237. package/dist/mcp/plugin-manager.d.ts +0 -98
  238. package/dist/mcp/plugin-manager.js +0 -297
  239. package/dist/mcp/plugins/core/filesystem-mcp.d.ts +0 -36
  240. package/dist/mcp/plugins/core/filesystem-mcp.js +0 -142
  241. package/dist/mcp/plugins/core/neurolink-mcp.json +0 -17
  242. package/dist/mcp/plugins/filesystem-mcp.d.ts +0 -37
  243. package/dist/mcp/plugins/filesystem-mcp.js +0 -54
  244. package/dist/mcp/security-manager.d.ts +0 -87
  245. package/dist/mcp/security-manager.js +0 -344
  246. package/dist/mcp/semaphore-manager.d.ts +0 -137
  247. package/dist/mcp/semaphore-manager.js +0 -329
  248. package/dist/mcp/session-manager.d.ts +0 -187
  249. package/dist/mcp/session-manager.js +0 -400
  250. package/dist/mcp/session-persistence.d.ts +0 -93
  251. package/dist/mcp/session-persistence.js +0 -302
  252. package/dist/mcp/tool-integration.d.ts +0 -58
  253. package/dist/mcp/tool-integration.js +0 -203
  254. package/dist/mcp/transport-manager.d.ts +0 -154
  255. package/dist/mcp/transport-manager.js +0 -335
  256. package/dist/mcp/unified-mcp.d.ts +0 -133
  257. package/dist/mcp/unified-mcp.js +0 -251
  258. package/dist/mcp/unified-registry.d.ts +0 -165
  259. package/dist/mcp/unified-registry.js +0 -539
  260. package/dist/providers/analytics-helper.d.ts +0 -38
  261. package/dist/providers/analytics-helper.js +0 -216
  262. package/dist/providers/function-calling-provider.d.ts +0 -142
  263. package/dist/providers/function-calling-provider.js +0 -630
  264. package/dist/providers/mcp-provider.d.ts +0 -75
  265. package/dist/providers/mcp-provider.js +0 -283
  266. package/dist/providers/timeout-wrapper.d.ts +0 -40
  267. package/dist/providers/timeout-wrapper.js +0 -100
  268. package/dist/sdk/tool-extension.d.ts +0 -181
  269. package/dist/sdk/tool-extension.js +0 -284
  270. package/dist/services/streaming/streaming-manager.d.ts +0 -29
  271. package/dist/services/streaming/streaming-manager.js +0 -245
  272. package/dist/services/types.d.ts +0 -156
  273. package/dist/services/types.js +0 -2
  274. package/dist/services/websocket/websocket-server.d.ts +0 -34
  275. package/dist/services/websocket/websocket-server.js +0 -306
  276. package/dist/utils/provider-validation.d.ts +0 -36
  277. package/dist/utils/provider-validation.js +0 -625
  278. package/dist/utils/providerUtils-fixed.d.ts +0 -8
  279. package/dist/utils/providerUtils-fixed.js +0 -94
  280. package/dist/utils/streaming-utils.d.ts +0 -79
  281. package/dist/utils/streaming-utils.js +0 -198
  282. package/dist/utils/timeout-manager.d.ts +0 -75
  283. package/dist/utils/timeout-manager.js +0 -244
@@ -1,156 +0,0 @@
1
- import type { UnknownRecord, Unknown } from "../types/common.js";
2
- export interface StreamingSession {
3
- id: string;
4
- connectionId: string;
5
- provider: string;
6
- status: "active" | "paused" | "terminated";
7
- startTime: number;
8
- lastActivity: number;
9
- config: StreamingConfig;
10
- metrics: {
11
- bytesTransferred: number;
12
- messagesCount: number;
13
- averageLatency: number;
14
- errorCount: number;
15
- };
16
- }
17
- export interface WebSocketOptions {
18
- port?: number;
19
- maxConnections?: number;
20
- heartbeatInterval?: number;
21
- enableCompression?: boolean;
22
- enableBackpressure?: boolean;
23
- bufferSize?: number;
24
- timeoutMs?: number;
25
- }
26
- export interface StreamingConfig {
27
- provider: string;
28
- model: string;
29
- streamingMode: "real-time" | "buffered" | "adaptive";
30
- compressionEnabled: boolean;
31
- maxChunkSize: number;
32
- bufferSize: number;
33
- latencyTarget: number;
34
- }
35
- export interface StreamingPool {
36
- id: string;
37
- maxSessions: number;
38
- activeSessions: Set<string>;
39
- config: StreamingPoolConfig;
40
- loadBalancer: LoadBalancingStrategy;
41
- }
42
- export interface StreamingPoolConfig {
43
- maxConcurrentSessions: number;
44
- sessionTimeout: number;
45
- loadBalancing: LoadBalancingStrategy;
46
- autoScaling: {
47
- enabled: boolean;
48
- minSessions: number;
49
- maxSessions: number;
50
- scaleUpThreshold: number;
51
- scaleDownThreshold: number;
52
- };
53
- }
54
- export type LoadBalancingStrategy = "round-robin" | "least-connections" | "weighted" | "adaptive";
55
- export interface StreamingChannel {
56
- id: string;
57
- connectionId: string;
58
- type: "ai-response" | "mcp-tool" | "chat" | "notification";
59
- status: "open" | "closed" | "error";
60
- buffer: StreamingBuffer;
61
- onData: (data: Unknown) => void;
62
- onError: (error: Error) => void;
63
- onClose: () => void;
64
- }
65
- export interface StreamingBuffer {
66
- data: Unknown[];
67
- maxSize: number;
68
- currentSize: number;
69
- flushThreshold: number;
70
- lastFlush: number;
71
- }
72
- export interface StreamingMetrics {
73
- sessionId?: string;
74
- activeSessions: number;
75
- totalBytesTransferred: number;
76
- averageLatency: number;
77
- throughputBps: number;
78
- errorRate: number;
79
- connectionCount: number;
80
- uptime: number;
81
- }
82
- export interface StreamingHealthStatus {
83
- status: "healthy" | "degraded" | "unhealthy";
84
- activeSessions: number;
85
- errorRate: number;
86
- averageLatency: number;
87
- lastHealthCheck: number;
88
- issues: string[];
89
- }
90
- export interface WebSocketMessage {
91
- id: string;
92
- type: "chat" | "ai-response" | "tool-result" | "system" | "heartbeat" | "error";
93
- connectionId: string;
94
- roomId?: string;
95
- timestamp: number;
96
- data: Unknown;
97
- metadata?: {
98
- provider?: string;
99
- model?: string;
100
- tokens?: number;
101
- latency?: number;
102
- };
103
- }
104
- export interface ChatRequest {
105
- prompt: string;
106
- sessionId?: string;
107
- options?: {
108
- temperature?: number;
109
- maxTokens?: number;
110
- streaming?: boolean;
111
- enableTools?: boolean;
112
- };
113
- }
114
- export interface GroupChatRequest extends ChatRequest {
115
- roomId: string;
116
- userId?: string;
117
- broadcastToRoom?: boolean;
118
- }
119
- export interface StreamingChatRequest extends ChatRequest {
120
- streamingOptions?: {
121
- chunkSize?: number;
122
- flushInterval?: number;
123
- enableCompression?: boolean;
124
- };
125
- }
126
- export interface MultiModalContent {
127
- type: "text" | "image" | "audio" | "video" | "file";
128
- content: string | Buffer;
129
- metadata?: {
130
- mimeType?: string;
131
- size?: number;
132
- duration?: number;
133
- dimensions?: {
134
- width: number;
135
- height: number;
136
- };
137
- };
138
- }
139
- export interface BufferConfig {
140
- maxSize: number;
141
- flushThreshold: number;
142
- flushInterval: number;
143
- compressionEnabled: boolean;
144
- persistToDisk: boolean;
145
- }
146
- export interface ConnectionInfo {
147
- id: string;
148
- userId?: string;
149
- userAgent?: string;
150
- ipAddress?: string;
151
- connectedAt: number;
152
- lastActivity: number;
153
- rooms: Set<string>;
154
- subscriptions: Set<string>;
155
- metadata: UnknownRecord;
156
- }
@@ -1,2 +0,0 @@
1
- // Real-time Services Types
2
- export {};
@@ -1,34 +0,0 @@
1
- import { EventEmitter } from "events";
2
- import type { WebSocketOptions, WebSocketMessage, StreamingChannel } from "../types.js";
3
- export declare class NeuroLinkWebSocketServer extends EventEmitter {
4
- private wss;
5
- private connections;
6
- private connectionInfo;
7
- private rooms;
8
- private streamingChannels;
9
- private heartbeatInterval?;
10
- private options;
11
- constructor(options?: WebSocketOptions);
12
- private setupEventHandlers;
13
- private handleConnection;
14
- private handleMessage;
15
- private handleDisconnection;
16
- joinRoom(connectionId: string, roomId: string): boolean;
17
- leaveRoom(connectionId: string, roomId: string): boolean;
18
- broadcastToRoom(roomId: string, message: WebSocketMessage): void;
19
- createStreamingChannel(connectionId: string, channelId: string): StreamingChannel;
20
- destroyStreamingChannel(channelId: string): void;
21
- sendMessage(connectionId: string, message: WebSocketMessage): boolean;
22
- private sendError;
23
- private updateLastActivity;
24
- private handleHeartbeat;
25
- private handleChatMessage;
26
- private startHeartbeat;
27
- getConnectionCount(): number;
28
- getRoomCount(): number;
29
- getActiveChannels(): number;
30
- close(): void;
31
- private handleChannelData;
32
- private handleChannelError;
33
- private handleChannelClose;
34
- }
@@ -1,305 +0,0 @@
1
- import { WebSocketServer, WebSocket } from "ws";
2
- import { EventEmitter } from "events";
3
- import { randomUUID } from "crypto";
4
- import { logger } from "../../utils/logger.js";
5
- export class NeuroLinkWebSocketServer extends EventEmitter {
6
- wss;
7
- connections = new Map();
8
- connectionInfo = new Map();
9
- rooms = new Map();
10
- streamingChannels = new Map();
11
- heartbeatInterval;
12
- options;
13
- constructor(options = {}) {
14
- super();
15
- this.options = {
16
- port: options.port || 8080,
17
- maxConnections: options.maxConnections || 1000,
18
- heartbeatInterval: options.heartbeatInterval || 30000,
19
- enableCompression: options.enableCompression ?? true,
20
- enableBackpressure: options.enableBackpressure ?? true,
21
- bufferSize: options.bufferSize || 8192,
22
- timeoutMs: options.timeoutMs || 30000,
23
- };
24
- this.wss = new WebSocketServer({
25
- port: this.options.port,
26
- perMessageDeflate: this.options.enableCompression,
27
- });
28
- this.setupEventHandlers();
29
- this.startHeartbeat();
30
- }
31
- setupEventHandlers() {
32
- this.wss.on("connection", (ws, request) => {
33
- this.handleConnection(ws, request);
34
- });
35
- this.wss.on("error", (error) => {
36
- logger.error("[WebSocket Server] Error:", error);
37
- this.emit("error", error);
38
- });
39
- }
40
- handleConnection(ws, request) {
41
- if (this.connections.size >= this.options.maxConnections) {
42
- ws.close(1013, "Server at capacity");
43
- return;
44
- }
45
- const connectionId = randomUUID();
46
- const userAgent = request.headers["user-agent"];
47
- const ipAddress = request.socket?.remoteAddress;
48
- // Store connection
49
- this.connections.set(connectionId, ws);
50
- this.connectionInfo.set(connectionId, {
51
- id: connectionId,
52
- userAgent,
53
- ipAddress,
54
- connectedAt: Date.now(),
55
- lastActivity: Date.now(),
56
- rooms: new Set(),
57
- subscriptions: new Set(),
58
- metadata: {},
59
- });
60
- // Setup WebSocket event handlers
61
- ws.on("message", (data) => {
62
- this.handleMessage(connectionId, data);
63
- });
64
- ws.on("close", () => {
65
- this.handleDisconnection(connectionId);
66
- });
67
- ws.on("error", (error) => {
68
- logger.error(`[WebSocket] Connection ${connectionId} error:`, error);
69
- this.handleDisconnection(connectionId);
70
- });
71
- // Send connection confirmation
72
- this.sendMessage(connectionId, {
73
- id: randomUUID(),
74
- type: "system",
75
- connectionId,
76
- timestamp: Date.now(),
77
- data: {
78
- event: "connected",
79
- connectionId,
80
- serverInfo: {
81
- version: "3.0.1",
82
- features: ["streaming", "rooms", "tools"],
83
- },
84
- },
85
- });
86
- logger.debug(`[WebSocket] New connection: ${connectionId} (${this.connections.size}/${this.options.maxConnections})`);
87
- this.emit("connection", { connectionId, userAgent, ipAddress });
88
- }
89
- handleMessage(connectionId, data) {
90
- try {
91
- const message = JSON.parse(data.toString());
92
- this.updateLastActivity(connectionId);
93
- switch (message.type) {
94
- case "heartbeat":
95
- this.handleHeartbeat(connectionId);
96
- break;
97
- case "chat":
98
- this.handleChatMessage(connectionId, message);
99
- break;
100
- default:
101
- this.emit("message", { connectionId, message });
102
- }
103
- }
104
- catch (error) {
105
- logger.error(`[WebSocket] Invalid message from ${connectionId}:`, error);
106
- this.sendError(connectionId, "Invalid message format");
107
- }
108
- }
109
- handleDisconnection(connectionId) {
110
- const connection = this.connectionInfo.get(connectionId);
111
- if (!connection) {
112
- return;
113
- }
114
- // Leave all rooms
115
- connection.rooms.forEach((roomId) => {
116
- this.leaveRoom(connectionId, roomId);
117
- });
118
- // Close streaming channels
119
- this.streamingChannels.forEach((channel, channelId) => {
120
- if (channel.connectionId === connectionId) {
121
- channel.onClose();
122
- this.streamingChannels.delete(channelId);
123
- }
124
- });
125
- // Clean up
126
- this.connections.delete(connectionId);
127
- this.connectionInfo.delete(connectionId);
128
- logger.debug(`[WebSocket] Disconnected: ${connectionId} (${this.connections.size}/${this.options.maxConnections})`);
129
- this.emit("disconnection", { connectionId });
130
- }
131
- // Room Management
132
- joinRoom(connectionId, roomId) {
133
- const connection = this.connectionInfo.get(connectionId);
134
- if (!connection) {
135
- return false;
136
- }
137
- if (!this.rooms.has(roomId)) {
138
- this.rooms.set(roomId, new Set());
139
- }
140
- this.rooms.get(roomId).add(connectionId);
141
- connection.rooms.add(roomId);
142
- this.sendMessage(connectionId, {
143
- id: randomUUID(),
144
- type: "system",
145
- connectionId,
146
- roomId,
147
- timestamp: Date.now(),
148
- data: {
149
- event: "room_joined",
150
- roomId,
151
- memberCount: this.rooms.get(roomId).size,
152
- },
153
- });
154
- logger.debug(`[WebSocket] ${connectionId} joined room ${roomId}`);
155
- return true;
156
- }
157
- leaveRoom(connectionId, roomId) {
158
- const connection = this.connectionInfo.get(connectionId);
159
- if (!connection) {
160
- return false;
161
- }
162
- const room = this.rooms.get(roomId);
163
- if (!room) {
164
- return false;
165
- }
166
- room.delete(connectionId);
167
- connection.rooms.delete(roomId);
168
- if (room.size === 0) {
169
- this.rooms.delete(roomId);
170
- }
171
- this.sendMessage(connectionId, {
172
- id: randomUUID(),
173
- type: "system",
174
- connectionId,
175
- roomId,
176
- timestamp: Date.now(),
177
- data: {
178
- event: "room_left",
179
- roomId,
180
- memberCount: room.size,
181
- },
182
- });
183
- logger.debug(`[WebSocket] ${connectionId} left room ${roomId}`);
184
- return true;
185
- }
186
- broadcastToRoom(roomId, message) {
187
- const room = this.rooms.get(roomId);
188
- if (!room) {
189
- return;
190
- }
191
- room.forEach((connectionId) => {
192
- this.sendMessage(connectionId, { ...message, roomId });
193
- });
194
- }
195
- // Streaming Support
196
- createStreamingChannel(connectionId, channelId) {
197
- const channel = {
198
- id: channelId,
199
- connectionId,
200
- type: "ai-response",
201
- status: "open",
202
- buffer: {
203
- data: [],
204
- maxSize: this.options.bufferSize,
205
- currentSize: 0,
206
- flushThreshold: Math.floor(this.options.bufferSize * 0.8),
207
- lastFlush: Date.now(),
208
- },
209
- onData: (data) => this.handleChannelData(channelId, data),
210
- onError: (error) => this.handleChannelError(channelId, error),
211
- onClose: () => this.handleChannelClose(channelId),
212
- };
213
- this.streamingChannels.set(channelId, channel);
214
- return channel;
215
- }
216
- destroyStreamingChannel(channelId) {
217
- const channel = this.streamingChannels.get(channelId);
218
- if (channel) {
219
- channel.status = "closed";
220
- channel.onClose();
221
- this.streamingChannels.delete(channelId);
222
- }
223
- }
224
- // Helper methods
225
- sendMessage(connectionId, message) {
226
- const ws = this.connections.get(connectionId);
227
- if (!ws || ws.readyState !== WebSocket.OPEN) {
228
- return false;
229
- }
230
- try {
231
- ws.send(JSON.stringify(message));
232
- return true;
233
- }
234
- catch (error) {
235
- logger.error(`[WebSocket] Failed to send message to ${connectionId}:`, error);
236
- return false;
237
- }
238
- }
239
- sendError(connectionId, errorMessage) {
240
- this.sendMessage(connectionId, {
241
- id: randomUUID(),
242
- type: "error",
243
- connectionId,
244
- timestamp: Date.now(),
245
- data: { error: errorMessage },
246
- });
247
- }
248
- updateLastActivity(connectionId) {
249
- const connection = this.connectionInfo.get(connectionId);
250
- if (connection) {
251
- connection.lastActivity = Date.now();
252
- }
253
- }
254
- handleHeartbeat(connectionId) {
255
- this.sendMessage(connectionId, {
256
- id: randomUUID(),
257
- type: "heartbeat",
258
- connectionId,
259
- timestamp: Date.now(),
260
- data: { pong: true },
261
- });
262
- }
263
- handleChatMessage(connectionId, message) {
264
- this.emit("chat-message", { connectionId, message });
265
- }
266
- startHeartbeat() {
267
- this.heartbeatInterval = setInterval(() => {
268
- this.connections.forEach((ws, connectionId) => {
269
- if (ws.readyState === WebSocket.OPEN) {
270
- const connection = this.connectionInfo.get(connectionId);
271
- if (connection &&
272
- Date.now() - connection.lastActivity > this.options.timeoutMs) {
273
- logger.debug(`[WebSocket] Timeout for connection ${connectionId}`);
274
- ws.terminate();
275
- }
276
- }
277
- });
278
- }, this.options.heartbeatInterval);
279
- }
280
- // Public getters
281
- getConnectionCount() {
282
- return this.connections.size;
283
- }
284
- getRoomCount() {
285
- return this.rooms.size;
286
- }
287
- getActiveChannels() {
288
- return this.streamingChannels.size;
289
- }
290
- close() {
291
- if (this.heartbeatInterval) {
292
- clearInterval(this.heartbeatInterval);
293
- }
294
- this.wss.close();
295
- }
296
- handleChannelData(channelId, data) {
297
- // Implementation for channel data handling
298
- }
299
- handleChannelError(channelId, error) {
300
- logger.error(`[Streaming Channel] ${channelId} error:`, error);
301
- }
302
- handleChannelClose(channelId) {
303
- logger.debug(`[Streaming Channel] ${channelId} closed`);
304
- }
305
- }
@@ -1,36 +0,0 @@
1
- /**
2
- * Enhanced Provider Validation Utilities
3
- *
4
- * Fixes false positives in provider status checking by implementing:
5
- * - API key format validation
6
- * - Lightweight authentication checks
7
- * - Proper error classification
8
- * - Rate-limit friendly validation
9
- */
10
- import type { UnknownRecord } from "../types/common.js";
11
- export interface ProviderValidationResult {
12
- configured: boolean;
13
- formatValid: boolean;
14
- authenticated: boolean;
15
- available: boolean;
16
- error?: string;
17
- errorType?: "config" | "format" | "auth" | "network" | "quota" | "unknown";
18
- responseTime?: number;
19
- details?: UnknownRecord;
20
- }
21
- /**
22
- * Validate API key format for a specific provider
23
- */
24
- export declare function validateApiKeyFormat(provider: string, apiKey: string): boolean;
25
- /**
26
- * Comprehensive provider validation that prevents false positives
27
- */
28
- export declare function validateProvider(provider: string): Promise<ProviderValidationResult>;
29
- /**
30
- * Batch validate multiple providers efficiently
31
- */
32
- export declare function validateProviders(providers: string[]): Promise<Record<string, ProviderValidationResult>>;
33
- /**
34
- * Check if provider validation should be cached (to avoid rate limits)
35
- */
36
- export declare function shouldCacheValidation(result: ProviderValidationResult): boolean;