iwgt 2.4.5 → 2.4.7
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.
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": "2.0",
|
|
3
|
-
"generatedAt": "2025-10-07T13:
|
|
3
|
+
"generatedAt": "2025-10-07T13:24:37.308Z",
|
|
4
4
|
"description": "Справочник по библиотеке common.v2.js для InSales - набор готовых скриптов для разработки шаблонов",
|
|
5
5
|
"installation": {
|
|
6
6
|
"method": "liquid_tag",
|
package/dist/server-http.js
CHANGED
|
@@ -7,7 +7,6 @@ import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
|
|
|
7
7
|
import { createServer } from 'http';
|
|
8
8
|
import { fileURLToPath } from 'url';
|
|
9
9
|
import { dirname } from 'path';
|
|
10
|
-
import crypto from 'crypto';
|
|
11
10
|
const __filename = fileURLToPath(import.meta.url);
|
|
12
11
|
const __dirname = dirname(__filename);
|
|
13
12
|
// Импортируем класс WidgetServer
|
|
@@ -58,7 +57,7 @@ const httpServer = createServer(async (req, res) => {
|
|
|
58
57
|
res.end(JSON.stringify({
|
|
59
58
|
status: 'ok',
|
|
60
59
|
service: 'InSales Widgets MCP Server',
|
|
61
|
-
version: '2.4.
|
|
60
|
+
version: '2.4.7',
|
|
62
61
|
transport: 'SSE',
|
|
63
62
|
endpoints: {
|
|
64
63
|
sse: '/sse',
|
|
@@ -72,23 +71,22 @@ const httpServer = createServer(async (req, res) => {
|
|
|
72
71
|
if (req.url === '/sse' && req.method === 'GET') {
|
|
73
72
|
console.log('📡 New SSE connection established');
|
|
74
73
|
try {
|
|
75
|
-
// Генерируем уникальный sessionId
|
|
76
|
-
const sessionId = crypto.randomUUID();
|
|
77
74
|
// Создаем новый MCP сервер для этого соединения
|
|
78
75
|
const widgetServer = new WidgetServer();
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
76
|
+
// SSEServerTransport автоматически генерирует sessionId
|
|
77
|
+
const transport = new SSEServerTransport('/message', res);
|
|
78
|
+
// Сохраняем сессию используя sessionId от транспорта
|
|
79
|
+
activeSessions.set(transport.sessionId, { server: widgetServer, transport });
|
|
80
|
+
console.log(`📝 Session created: ${transport.sessionId} (active: ${activeSessions.size})`);
|
|
83
81
|
// Подключаем транспорт через публичный метод
|
|
84
82
|
await widgetServer.connect(transport);
|
|
85
83
|
console.log('✅ MCP server connected via SSE');
|
|
86
84
|
// Обработка закрытия соединения
|
|
87
85
|
req.on('close', () => {
|
|
88
|
-
console.log(`📡 SSE connection closed for session ${sessionId}`);
|
|
89
|
-
activeSessions.delete(sessionId);
|
|
86
|
+
console.log(`📡 SSE connection closed for session ${transport.sessionId}`);
|
|
87
|
+
activeSessions.delete(transport.sessionId);
|
|
90
88
|
transport.close();
|
|
91
|
-
console.log(`📝 Session deleted: ${sessionId} (active: ${activeSessions.size})`);
|
|
89
|
+
console.log(`📝 Session deleted: ${transport.sessionId} (active: ${activeSessions.size})`);
|
|
92
90
|
});
|
|
93
91
|
}
|
|
94
92
|
catch (error) {
|
|
@@ -99,9 +97,8 @@ const httpServer = createServer(async (req, res) => {
|
|
|
99
97
|
return;
|
|
100
98
|
}
|
|
101
99
|
// Message endpoint для отправки сообщений
|
|
102
|
-
// Проверяем, что URL начинается с /message (может быть /message?sessionId=xxx)
|
|
103
100
|
if (req.url?.startsWith('/message') && req.method === 'POST') {
|
|
104
|
-
// Извлекаем sessionId из
|
|
101
|
+
// Извлекаем sessionId из query параметров
|
|
105
102
|
const urlObj = new URL(req.url, `http://${req.headers.host}`);
|
|
106
103
|
const sessionId = urlObj.searchParams.get('sessionId');
|
|
107
104
|
if (!sessionId) {
|
|
@@ -116,36 +113,15 @@ const httpServer = createServer(async (req, res) => {
|
|
|
116
113
|
return;
|
|
117
114
|
}
|
|
118
115
|
try {
|
|
119
|
-
//
|
|
120
|
-
|
|
121
|
-
if (typeof session.transport.handlePostMessage === 'function') {
|
|
122
|
-
await session.transport.handlePostMessage(req, res);
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
// Fallback: читаем тело и отправляем ответ вручную
|
|
126
|
-
let body = '';
|
|
127
|
-
req.on('data', (chunk) => {
|
|
128
|
-
body += chunk.toString();
|
|
129
|
-
});
|
|
130
|
-
req.on('end', async () => {
|
|
131
|
-
try {
|
|
132
|
-
const message = JSON.parse(body);
|
|
133
|
-
console.log(`📥 Received POST message:`, message.method || 'unknown');
|
|
134
|
-
// Просто подтверждаем получение
|
|
135
|
-
res.writeHead(202, { 'Content-Type': 'application/json' });
|
|
136
|
-
res.end(JSON.stringify({ status: 'accepted' }));
|
|
137
|
-
}
|
|
138
|
-
catch (error) {
|
|
139
|
-
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
140
|
-
res.end(JSON.stringify({ error: 'Invalid JSON' }));
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
}
|
|
116
|
+
// Используем handlePostMessage из SSEServerTransport
|
|
117
|
+
await session.transport.handlePostMessage(req, res);
|
|
144
118
|
}
|
|
145
119
|
catch (error) {
|
|
146
|
-
console.error('❌ Error handling POST:', error);
|
|
147
|
-
res.
|
|
148
|
-
|
|
120
|
+
console.error('❌ Error handling POST message:', error);
|
|
121
|
+
if (!res.headersSent) {
|
|
122
|
+
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
123
|
+
res.end(JSON.stringify({ error: 'Internal server error' }));
|
|
124
|
+
}
|
|
149
125
|
}
|
|
150
126
|
return;
|
|
151
127
|
}
|
package/dist/server.js
CHANGED