langmart-gateway-type3 3.0.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 (75) hide show
  1. package/.env.example +29 -0
  2. package/README.md +480 -0
  3. package/dist/bash-tools.d.ts +56 -0
  4. package/dist/bash-tools.d.ts.map +1 -0
  5. package/dist/bash-tools.js +188 -0
  6. package/dist/bash-tools.js.map +1 -0
  7. package/dist/core-tools.d.ts +94 -0
  8. package/dist/core-tools.d.ts.map +1 -0
  9. package/dist/core-tools.js +694 -0
  10. package/dist/core-tools.js.map +1 -0
  11. package/dist/debug-utils.d.ts +22 -0
  12. package/dist/debug-utils.d.ts.map +1 -0
  13. package/dist/debug-utils.js +37 -0
  14. package/dist/debug-utils.js.map +1 -0
  15. package/dist/devops-tools.d.ts +147 -0
  16. package/dist/devops-tools.d.ts.map +1 -0
  17. package/dist/devops-tools.js +718 -0
  18. package/dist/devops-tools.js.map +1 -0
  19. package/dist/gateway-config.d.ts +56 -0
  20. package/dist/gateway-config.d.ts.map +1 -0
  21. package/dist/gateway-config.js +198 -0
  22. package/dist/gateway-config.js.map +1 -0
  23. package/dist/gateway-mode.d.ts +58 -0
  24. package/dist/gateway-mode.d.ts.map +1 -0
  25. package/dist/gateway-mode.js +240 -0
  26. package/dist/gateway-mode.js.map +1 -0
  27. package/dist/gateway-server.d.ts +208 -0
  28. package/dist/gateway-server.d.ts.map +1 -0
  29. package/dist/gateway-server.js +1811 -0
  30. package/dist/gateway-server.js.map +1 -0
  31. package/dist/headless-session.d.ts +192 -0
  32. package/dist/headless-session.d.ts.map +1 -0
  33. package/dist/headless-session.js +584 -0
  34. package/dist/headless-session.js.map +1 -0
  35. package/dist/index-server.d.ts +4 -0
  36. package/dist/index-server.d.ts.map +1 -0
  37. package/dist/index-server.js +129 -0
  38. package/dist/index-server.js.map +1 -0
  39. package/dist/index.d.ts +6 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +101 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/key-vault.d.ts +102 -0
  44. package/dist/key-vault.d.ts.map +1 -0
  45. package/dist/key-vault.js +365 -0
  46. package/dist/key-vault.js.map +1 -0
  47. package/dist/local-vault.d.ts +195 -0
  48. package/dist/local-vault.d.ts.map +1 -0
  49. package/dist/local-vault.js +571 -0
  50. package/dist/local-vault.js.map +1 -0
  51. package/dist/marketplace-tools.d.ts +104 -0
  52. package/dist/marketplace-tools.d.ts.map +1 -0
  53. package/dist/marketplace-tools.js +2846 -0
  54. package/dist/marketplace-tools.js.map +1 -0
  55. package/dist/mcp-manager.d.ts +114 -0
  56. package/dist/mcp-manager.d.ts.map +1 -0
  57. package/dist/mcp-manager.js +338 -0
  58. package/dist/mcp-manager.js.map +1 -0
  59. package/dist/web-tools.d.ts +86 -0
  60. package/dist/web-tools.d.ts.map +1 -0
  61. package/dist/web-tools.js +431 -0
  62. package/dist/web-tools.js.map +1 -0
  63. package/dist/websocket-handler.d.ts +131 -0
  64. package/dist/websocket-handler.d.ts.map +1 -0
  65. package/dist/websocket-handler.js +596 -0
  66. package/dist/websocket-handler.js.map +1 -0
  67. package/dist/welcome-pages.d.ts +6 -0
  68. package/dist/welcome-pages.d.ts.map +1 -0
  69. package/dist/welcome-pages.js +200 -0
  70. package/dist/welcome-pages.js.map +1 -0
  71. package/package.json +168 -0
  72. package/scripts/install-remote.sh +282 -0
  73. package/scripts/start.sh +85 -0
  74. package/scripts/status.sh +79 -0
  75. package/scripts/stop.sh +67 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-handler.d.ts","sourceRoot":"","sources":["../websocket-handler.ts"],"names":[],"mappings":"AAIA,OAAO,SAAS,MAAM,IAAI,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC;;;;;;;;;;GAUG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IACzC,EAAE,EAAE,SAAS,GAAG,IAAI,CAAQ;IACnC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,oBAAoB,CAAc;IAC1C,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,eAAe,CAAmD;IAC1E,OAAO,CAAC,cAAc,CAAmB;IACzC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,OAAO,CAKb;gBAEU,MAAM,EAAE;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE;YAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAC;KAChD;IAqBD;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA+CrC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;OAEG;YACW,aAAa;IA6C3B;;OAEG;YACW,sBAAsB;IAwFpC;;OAEG;YACW,iBAAiB;IA4C/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoC1B;;OAEG;YACW,wBAAwB;IAwFtC;;OAEG;IACH,OAAO,CAAC,eAAe;IA4BvB;;OAEG;YACW,mBAAmB;IA0BjC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAKjC;;OAEG;IACH,OAAO,CAAC,WAAW;IAKnB;;OAEG;IACH,OAAO,CAAC,cAAc;IAetB;;OAEG;IACH,OAAO,CAAC,aAAa;IAOrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAepB;;OAEG;YACW,eAAe;IAoB7B;;OAEG;IACH,OAAO,CAAC,WAAW;IAoBnB;;OAEG;IACI,UAAU,IAAI,IAAI;CAU5B;AAED;;;;;;;;;;;;;;;;;GAiBG"}
@@ -0,0 +1,596 @@
1
+ "use strict";
2
+ // File: gateway-type3/websocket-handler.ts
3
+ // Generated from: interface-api.md + process-core.md
4
+ // Process ID: Type 3 Gateway WebSocket Implementation
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.Type3GatewayClient = void 0;
10
+ const ws_1 = __importDefault(require("ws"));
11
+ const uuid_1 = require("uuid");
12
+ const events_1 = require("events");
13
+ const axios_1 = __importDefault(require("axios"));
14
+ /**
15
+ * Type 3 Gateway WebSocket Client
16
+ * Connects seller's infrastructure to marketplace
17
+ *
18
+ * Key Features:
19
+ * - Persistent WebSocket connection to marketplace
20
+ * - Automatic reconnection with exponential backoff
21
+ * - Heartbeat monitoring
22
+ * - Request/response routing to provider APIs
23
+ * - Version management with auto-upgrade
24
+ */
25
+ class Type3GatewayClient extends events_1.EventEmitter {
26
+ constructor(config) {
27
+ super();
28
+ this.ws = null;
29
+ this.reconnectAttempts = 0;
30
+ this.maxReconnectAttempts = 10;
31
+ this.heartbeatInterval = null;
32
+ this.requestHandlers = new Map();
33
+ this.currentVersion = '1.0.0';
34
+ this.providerApiKeys = new Map();
35
+ this.gatewayId = config.gatewayId;
36
+ this.apiKey = config.apiKey;
37
+ this.marketplaceUrl = config.marketplaceUrl || 'wss://gateway.marketplace.ai';
38
+ this.marketplaceApiUrl = config.marketplaceUrl?.replace('wss://', 'https://').replace('gateway.', 'api.') || 'https://api.marketplace.ai';
39
+ this.nodeId = `node_${this.gatewayId}_${(0, uuid_1.v4)().substring(0, 8)}`;
40
+ // Store provider API keys
41
+ Object.entries(config.providerKeys).forEach(([provider, key]) => {
42
+ this.providerApiKeys.set(provider, key);
43
+ });
44
+ this.metrics = {
45
+ uptime: Date.now(),
46
+ requestsHandled: 0,
47
+ errorsCount: 0,
48
+ lastHeartbeat: new Date()
49
+ };
50
+ }
51
+ /**
52
+ * Connect to marketplace WebSocket
53
+ */
54
+ async connect() {
55
+ return new Promise((resolve, reject) => {
56
+ try {
57
+ const wsUrl = `${this.marketplaceUrl}/v1/gateway/connect`;
58
+ this.ws = new ws_1.default(wsUrl, {
59
+ headers: {
60
+ 'Authorization': `Bearer ${this.apiKey}`,
61
+ 'X-Gateway-ID': this.gatewayId,
62
+ 'X-Gateway-Version': this.currentVersion,
63
+ 'X-Node-ID': this.nodeId
64
+ }
65
+ });
66
+ this.ws.on('open', () => {
67
+ console.log(`[${this.nodeId}] Connected to marketplace`);
68
+ this.reconnectAttempts = 0;
69
+ this.startHeartbeat();
70
+ this.sendIdentification();
71
+ resolve();
72
+ });
73
+ this.ws.on('message', (data) => {
74
+ this.handleMessage(data.toString());
75
+ });
76
+ this.ws.on('error', (error) => {
77
+ console.error(`[${this.nodeId}] WebSocket error:`, error);
78
+ this.emit('error', error);
79
+ });
80
+ this.ws.on('close', (code, reason) => {
81
+ console.log(`[${this.nodeId}] Disconnected: ${code} - ${reason}`);
82
+ this.stopHeartbeat();
83
+ this.handleDisconnection();
84
+ });
85
+ this.ws.on('ping', () => {
86
+ this.ws?.pong();
87
+ });
88
+ }
89
+ catch (error) {
90
+ reject(error);
91
+ }
92
+ });
93
+ }
94
+ /**
95
+ * Send gateway identification after connection
96
+ */
97
+ sendIdentification() {
98
+ const identification = {
99
+ event: 'gateway_identification',
100
+ gateway_id: this.gatewayId,
101
+ node_id: this.nodeId,
102
+ version: this.currentVersion,
103
+ timestamp: new Date().toISOString(),
104
+ capabilities: {
105
+ supports_streaming: true,
106
+ supports_functions: true,
107
+ max_concurrent_requests: 100,
108
+ providers: Array.from(this.providerApiKeys.keys())
109
+ },
110
+ metrics: {
111
+ uptime_seconds: Math.floor((Date.now() - this.metrics.uptime) / 1000),
112
+ requests_handled: this.metrics.requestsHandled,
113
+ errors_count: this.metrics.errorsCount
114
+ }
115
+ };
116
+ this.sendMessage(identification);
117
+ }
118
+ /**
119
+ * Handle incoming WebSocket messages
120
+ */
121
+ async handleMessage(data) {
122
+ try {
123
+ const message = JSON.parse(data);
124
+ switch (message.event) {
125
+ case 'inference_request':
126
+ await this.handleInferenceRequest(message);
127
+ break;
128
+ case 'heartbeat':
129
+ this.handleHeartbeat(message);
130
+ break;
131
+ case 'version_update':
132
+ await this.handleVersionUpdate(message);
133
+ break;
134
+ case 'configuration_update':
135
+ this.handleConfigurationUpdate(message);
136
+ break;
137
+ case 'error':
138
+ this.handleError(message);
139
+ break;
140
+ default:
141
+ console.warn(`[${this.nodeId}] Unknown event: ${message.event}`);
142
+ }
143
+ }
144
+ catch (error) {
145
+ console.error(`[${this.nodeId}] Message handling error:`, error);
146
+ // Report message handling errors
147
+ await this.reportErrorToMarketplace({
148
+ request_id: 'msg_' + (0, uuid_1.v4)(),
149
+ error: {
150
+ code: 'GATEWAY3_MESSAGE_001',
151
+ message: 'Failed to handle marketplace message',
152
+ stack: error.stack
153
+ },
154
+ latency_ms: 0
155
+ });
156
+ }
157
+ }
158
+ /**
159
+ * Handle inference request from marketplace
160
+ */
161
+ async handleInferenceRequest(message) {
162
+ const requestId = message.request_id;
163
+ const startTime = Date.now();
164
+ try {
165
+ console.log(`[${this.nodeId}] Processing request ${requestId}`);
166
+ // Extract provider and endpoint from request
167
+ // Gateway Type 1 puts these fields directly in message, not in data
168
+ const provider = message.provider || message.data?.provider || 'openai';
169
+ const endpoint = message.endpoint || message.data?.endpoint || '/chat/completions';
170
+ const model = message.model || message.data?.model;
171
+ const messages = message.messages || message.data?.messages;
172
+ const stream = message.stream || message.data?.stream || false;
173
+ const temperature = message.temperature || message.data?.temperature;
174
+ const max_tokens = message.max_tokens || message.data?.max_tokens;
175
+ // Get provider API key
176
+ const apiKey = this.providerApiKeys.get(provider);
177
+ if (!apiKey) {
178
+ throw new Error(`No API key configured for provider: ${provider}`);
179
+ }
180
+ // Forward request to provider
181
+ const providerResponse = await this.forwardToProvider(provider, endpoint, apiKey, {
182
+ model,
183
+ messages,
184
+ stream,
185
+ temperature,
186
+ max_tokens
187
+ });
188
+ // Send response back to marketplace
189
+ const response = {
190
+ event: 'inference_complete',
191
+ request_id: requestId,
192
+ timestamp: new Date().toISOString(),
193
+ data: providerResponse,
194
+ metrics: {
195
+ latency_ms: Date.now() - startTime,
196
+ tokens: providerResponse.usage || {},
197
+ model: model
198
+ }
199
+ };
200
+ this.sendMessage(response);
201
+ this.metrics.requestsHandled++;
202
+ }
203
+ catch (error) {
204
+ console.error(`[${this.nodeId}] Request ${requestId} failed:`, error);
205
+ // Report error to marketplace API
206
+ const errorReport = await this.reportErrorToMarketplace({
207
+ request_id: requestId,
208
+ error,
209
+ provider: message.data?.provider,
210
+ model: message.data?.model,
211
+ user_id: message.user_id,
212
+ api_key_id: message.api_key_id,
213
+ latency_ms: Date.now() - startTime
214
+ });
215
+ // Send error response back through WebSocket
216
+ const errorResponse = {
217
+ event: 'inference_error',
218
+ request_id: requestId,
219
+ timestamp: new Date().toISOString(),
220
+ error: errorReport?.translated_response?.error || {
221
+ code: this.mapErrorCode(error),
222
+ message: error.message || 'Internal error',
223
+ type: error.type || 'provider_error'
224
+ },
225
+ metrics: {
226
+ latency_ms: Date.now() - startTime,
227
+ error_instance_id: errorReport?.error_instance_id
228
+ }
229
+ };
230
+ this.sendMessage(errorResponse);
231
+ this.metrics.errorsCount++;
232
+ }
233
+ }
234
+ /**
235
+ * Forward request to provider API
236
+ */
237
+ async forwardToProvider(provider, endpoint, apiKey, payload) {
238
+ // Build provider URL
239
+ const providerUrls = {
240
+ 'openai': 'https://api.openai.com/v1',
241
+ 'anthropic': 'https://api.anthropic.com/v1',
242
+ 'google': 'https://generativelanguage.googleapis.com/v1',
243
+ 'deepseek': 'https://api.deepseek.com',
244
+ 'groq': 'https://api.groq.com/openai/v1'
245
+ };
246
+ const baseUrl = providerUrls[provider] || `https://api.${provider}.com/v1`;
247
+ const url = `${baseUrl}${endpoint}`;
248
+ // Set appropriate headers for each provider
249
+ const headers = this.getProviderHeaders(provider, apiKey);
250
+ // Make request to provider
251
+ const response = await axios_1.default.post(url, payload, {
252
+ headers,
253
+ timeout: parseInt(process.env.PROVIDER_TIMEOUT || '600000', 10), // 10 minute timeout (configurable)
254
+ validateStatus: (status) => status < 500 // Don't throw on 4xx
255
+ });
256
+ // Check for rate limit headers and store
257
+ if (response.headers['x-ratelimit-limit-requests']) {
258
+ await this.storeRateLimits(provider, response.headers);
259
+ }
260
+ // Handle errors
261
+ if (response.status >= 400) {
262
+ const error = new Error(response.data?.error?.message || 'Provider error');
263
+ error.code = response.status;
264
+ error.type = response.data?.error?.type;
265
+ throw error;
266
+ }
267
+ return response.data;
268
+ }
269
+ /**
270
+ * Get provider-specific headers
271
+ */
272
+ getProviderHeaders(provider, apiKey) {
273
+ const baseHeaders = {
274
+ 'Content-Type': 'application/json',
275
+ 'User-Agent': `LangMartGateway/${this.currentVersion}`
276
+ };
277
+ switch (provider) {
278
+ case 'openai':
279
+ case 'deepseek':
280
+ case 'groq':
281
+ return {
282
+ ...baseHeaders,
283
+ 'Authorization': `Bearer ${apiKey}`
284
+ };
285
+ case 'anthropic':
286
+ return {
287
+ ...baseHeaders,
288
+ 'x-api-key': apiKey,
289
+ 'anthropic-version': '2023-06-01'
290
+ };
291
+ case 'google':
292
+ return {
293
+ ...baseHeaders,
294
+ 'x-goog-api-key': apiKey
295
+ };
296
+ default:
297
+ return {
298
+ ...baseHeaders,
299
+ 'Authorization': `Bearer ${apiKey}`
300
+ };
301
+ }
302
+ }
303
+ /**
304
+ * Report error to marketplace API
305
+ */
306
+ async reportErrorToMarketplace(params) {
307
+ try {
308
+ // Determine error code based on error type
309
+ let errorCode = 'GATEWAY3_PROXY_001';
310
+ let statusCode = params.error.code || params.error.response?.status || 500;
311
+ if (params.error.code === 'ECONNREFUSED') {
312
+ errorCode = 'GATEWAY3_CONN_001';
313
+ }
314
+ else if (params.error.code === 'ETIMEDOUT' || params.error.code === 'ECONNABORTED') {
315
+ errorCode = 'GATEWAY3_TIMEOUT_001';
316
+ }
317
+ else if (statusCode === 401) {
318
+ errorCode = 'GATEWAY3_AUTH_001';
319
+ }
320
+ else if (statusCode === 429) {
321
+ errorCode = 'GATEWAY3_RATELIMIT_001';
322
+ }
323
+ else if (statusCode >= 500) {
324
+ errorCode = 'GATEWAY3_PROVIDER_001';
325
+ }
326
+ else if (!params.provider) {
327
+ errorCode = 'GATEWAY3_CONFIG_001';
328
+ }
329
+ const errorReport = {
330
+ error_code: errorCode,
331
+ component: 'gateway-type3',
332
+ layer: 'GATEWAY',
333
+ message: params.error.message || 'Provider request failed',
334
+ status_code: statusCode,
335
+ gateway_type: 3,
336
+ gateway_id: this.gatewayId,
337
+ request_id: params.request_id,
338
+ user_id: params.user_id,
339
+ api_key_id: params.api_key_id,
340
+ provider: params.provider,
341
+ provider_error: params.error.response?.data?.error ? {
342
+ code: params.error.response?.data?.error?.code || params.error.code,
343
+ message: params.error.response?.data?.error?.message || params.error.message,
344
+ response: params.error.response?.data
345
+ } : params.error.type ? {
346
+ code: params.error.type,
347
+ message: params.error.message
348
+ } : undefined,
349
+ context_data: {
350
+ model: params.model,
351
+ latency_ms: params.latency_ms,
352
+ node_id: this.nodeId,
353
+ gateway_id: this.gatewayId
354
+ },
355
+ stack_trace: params.error.stack,
356
+ occurred_at: new Date().toISOString()
357
+ };
358
+ // POST to marketplace API error endpoint
359
+ const response = await axios_1.default.post(`${this.marketplaceApiUrl}/v1/errors/report`, errorReport, {
360
+ headers: {
361
+ 'Content-Type': 'application/json',
362
+ 'X-Gateway-Type': '3',
363
+ 'X-Gateway-ID': this.gatewayId,
364
+ 'Authorization': `Bearer ${this.apiKey}` // Use gateway's API key
365
+ },
366
+ timeout: 5000, // 5 second timeout for error reporting
367
+ validateStatus: () => true // Don't throw on any status
368
+ });
369
+ if (response.status === 201 || response.status === 200) {
370
+ console.log(`[${this.nodeId}] Error reported: ${response.data.error_instance_id}`);
371
+ return response.data;
372
+ }
373
+ else {
374
+ console.error(`[${this.nodeId}] Failed to report error: ${response.status}`);
375
+ return null;
376
+ }
377
+ }
378
+ catch (reportError) {
379
+ console.error(`[${this.nodeId}] Error reporting failed:`, reportError);
380
+ return null;
381
+ }
382
+ }
383
+ /**
384
+ * Handle heartbeat from marketplace
385
+ */
386
+ handleHeartbeat(message) {
387
+ this.metrics.lastHeartbeat = new Date();
388
+ // Check for version update in heartbeat
389
+ if (message.latest_version && message.latest_version !== this.currentVersion) {
390
+ console.log(`[${this.nodeId}] New version available: ${message.latest_version}`);
391
+ this.emit('version_available', message.latest_version);
392
+ }
393
+ // Send heartbeat response with metrics
394
+ const response = {
395
+ event: 'heartbeat_response',
396
+ gateway_id: this.gatewayId,
397
+ node_id: this.nodeId,
398
+ timestamp: new Date().toISOString(),
399
+ metrics: {
400
+ uptime_seconds: Math.floor((Date.now() - this.metrics.uptime) / 1000),
401
+ requests_handled: this.metrics.requestsHandled,
402
+ errors_count: this.metrics.errorsCount,
403
+ memory_usage_mb: Math.round(process.memoryUsage().heapUsed / 1024 / 1024),
404
+ cpu_usage_percent: this.getCpuUsage()
405
+ },
406
+ status: 'healthy'
407
+ };
408
+ this.sendMessage(response);
409
+ }
410
+ /**
411
+ * Handle version update notification
412
+ */
413
+ async handleVersionUpdate(message) {
414
+ const { version, download_url, checksum, immediate_upgrade } = message;
415
+ console.log(`[${this.nodeId}] Version update: ${version} (immediate: ${immediate_upgrade})`);
416
+ if (immediate_upgrade) {
417
+ // Trigger immediate upgrade
418
+ this.emit('upgrade_required', {
419
+ version,
420
+ download_url,
421
+ checksum
422
+ });
423
+ // Report update status
424
+ this.sendMessage({
425
+ event: 'update_status',
426
+ gateway_id: this.gatewayId,
427
+ node_id: this.nodeId,
428
+ from_version: this.currentVersion,
429
+ to_version: version,
430
+ status: 'downloading',
431
+ timestamp: new Date().toISOString()
432
+ });
433
+ }
434
+ }
435
+ /**
436
+ * Handle configuration update
437
+ */
438
+ handleConfigurationUpdate(message) {
439
+ console.log(`[${this.nodeId}] Configuration update:`, message.config);
440
+ this.emit('config_update', message.config);
441
+ }
442
+ /**
443
+ * Handle error messages
444
+ */
445
+ handleError(message) {
446
+ console.error(`[${this.nodeId}] Error from marketplace:`, message.error);
447
+ this.emit('marketplace_error', message.error);
448
+ }
449
+ /**
450
+ * Start heartbeat monitoring
451
+ */
452
+ startHeartbeat() {
453
+ this.heartbeatInterval = setInterval(() => {
454
+ if (this.ws?.readyState === ws_1.default.OPEN) {
455
+ this.ws.ping();
456
+ // Check if we haven't received heartbeat in 2 minutes
457
+ const timeSinceLastHeartbeat = Date.now() - this.metrics.lastHeartbeat.getTime();
458
+ if (timeSinceLastHeartbeat > 120000) {
459
+ console.warn(`[${this.nodeId}] No heartbeat for 2 minutes, reconnecting`);
460
+ this.ws.close();
461
+ }
462
+ }
463
+ }, 30000); // Every 30 seconds
464
+ }
465
+ /**
466
+ * Stop heartbeat monitoring
467
+ */
468
+ stopHeartbeat() {
469
+ if (this.heartbeatInterval) {
470
+ clearInterval(this.heartbeatInterval);
471
+ this.heartbeatInterval = null;
472
+ }
473
+ }
474
+ /**
475
+ * Handle disconnection and attempt reconnection
476
+ */
477
+ handleDisconnection() {
478
+ this.ws = null;
479
+ if (this.reconnectAttempts < this.maxReconnectAttempts) {
480
+ const delay = Math.min(1000 * Math.pow(2, this.reconnectAttempts), 30000);
481
+ console.log(`[${this.nodeId}] Reconnecting in ${delay}ms (attempt ${this.reconnectAttempts + 1})`);
482
+ setTimeout(() => {
483
+ this.reconnectAttempts++;
484
+ this.connect().catch(console.error);
485
+ }, delay);
486
+ }
487
+ else {
488
+ console.error(`[${this.nodeId}] Max reconnection attempts reached`);
489
+ this.emit('max_reconnect_reached');
490
+ }
491
+ }
492
+ /**
493
+ * Send message to marketplace
494
+ */
495
+ sendMessage(message) {
496
+ if (this.ws?.readyState === ws_1.default.OPEN) {
497
+ this.ws.send(JSON.stringify(message));
498
+ }
499
+ else {
500
+ console.warn(`[${this.nodeId}] WebSocket not open, cannot send message`);
501
+ }
502
+ }
503
+ /**
504
+ * Map error codes to standard codes
505
+ */
506
+ mapErrorCode(error) {
507
+ if (error.code)
508
+ return error.code;
509
+ const message = error.message?.toLowerCase() || '';
510
+ if (message.includes('rate limit'))
511
+ return 429;
512
+ if (message.includes('unauthorized'))
513
+ return 401;
514
+ if (message.includes('forbidden'))
515
+ return 403;
516
+ if (message.includes('not found'))
517
+ return 404;
518
+ if (message.includes('timeout'))
519
+ return 504;
520
+ if (message.includes('bad request'))
521
+ return 400;
522
+ return 500;
523
+ }
524
+ /**
525
+ * Store learned rate limits
526
+ */
527
+ async storeRateLimits(provider, headers) {
528
+ const rateLimits = {
529
+ rpm: headers['x-ratelimit-limit-requests'],
530
+ tpm: headers['x-ratelimit-limit-tokens'],
531
+ rpd: headers['x-ratelimit-limit-requests-day'],
532
+ tpd: headers['x-ratelimit-limit-tokens-day'],
533
+ remaining: headers['x-ratelimit-remaining-requests'],
534
+ reset: headers['x-ratelimit-reset-requests']
535
+ };
536
+ // Report rate limits to marketplace
537
+ this.sendMessage({
538
+ event: 'rate_limits_learned',
539
+ gateway_id: this.gatewayId,
540
+ provider,
541
+ rate_limits: rateLimits,
542
+ timestamp: new Date().toISOString()
543
+ });
544
+ }
545
+ /**
546
+ * Get CPU usage (simplified)
547
+ */
548
+ getCpuUsage() {
549
+ // Simplified CPU usage calculation
550
+ const cpus = require('os').cpus();
551
+ let totalIdle = 0;
552
+ let totalTick = 0;
553
+ cpus.forEach((cpu) => {
554
+ for (const type in cpu.times) {
555
+ totalTick += cpu.times[type];
556
+ }
557
+ totalIdle += cpu.times.idle;
558
+ });
559
+ const idle = totalIdle / cpus.length;
560
+ const total = totalTick / cpus.length;
561
+ const usage = 100 - ~~(100 * idle / total);
562
+ return usage;
563
+ }
564
+ /**
565
+ * Disconnect from marketplace
566
+ */
567
+ disconnect() {
568
+ console.log(`[${this.nodeId}] Disconnecting from marketplace`);
569
+ this.reconnectAttempts = this.maxReconnectAttempts; // Prevent reconnection
570
+ this.stopHeartbeat();
571
+ if (this.ws) {
572
+ this.ws.close(1000, 'Client disconnect');
573
+ this.ws = null;
574
+ }
575
+ }
576
+ }
577
+ exports.Type3GatewayClient = Type3GatewayClient;
578
+ /**
579
+ * Usage Example:
580
+ *
581
+ * const gateway = new Type3GatewayClient({
582
+ * gatewayId: 'gw_abc123',
583
+ * apiKey: 'sk-marketplace-key',
584
+ * providerKeys: {
585
+ * 'openai': 'sk-openai-key',
586
+ * 'anthropic': 'sk-anthropic-key'
587
+ * }
588
+ * });
589
+ *
590
+ * gateway.on('error', (err) => console.error('Gateway error:', err));
591
+ * gateway.on('version_available', (ver) => console.log('Update available:', ver));
592
+ * gateway.on('upgrade_required', (info) => performUpgrade(info));
593
+ *
594
+ * await gateway.connect();
595
+ */
596
+ //# sourceMappingURL=websocket-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-handler.js","sourceRoot":"","sources":["../websocket-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Welcome Page Content for LangMart CLI
3
+ * Simple text-based pages without box-drawing characters
4
+ */
5
+ export declare const buildWelcomePage: (pageNumber: number) => string[];
6
+ //# sourceMappingURL=welcome-pages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"welcome-pages.d.ts","sourceRoot":"","sources":["../welcome-pages.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,gBAAgB,GAAI,YAAY,MAAM,KAAG,MAAM,EAa3D,CAAC"}