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:06:51.090Z",
3
+ "generatedAt": "2025-10-07T13:24:37.308Z",
4
4
  "description": "Справочник по библиотеке common.v2.js для InSales - набор готовых скриптов для разработки шаблонов",
5
5
  "installation": {
6
6
  "method": "liquid_tag",
@@ -4,7 +4,7 @@
4
4
  "description": "Liquid фильтры InSales",
5
5
  "totalCategories": 7,
6
6
  "totalFilters": 53,
7
- "generatedAt": "2025-10-07T13:06:51.074Z"
7
+ "generatedAt": "2025-10-07T13:24:37.298Z"
8
8
  },
9
9
  "categories": [
10
10
  {
@@ -4,7 +4,7 @@
4
4
  "description": "Liquid переменные InSales",
5
5
  "totalCategories": 19,
6
6
  "totalVariables": 436,
7
- "generatedAt": "2025-10-07T13:06:50.724Z"
7
+ "generatedAt": "2025-10-07T13:24:37.082Z"
8
8
  },
9
9
  "categories": [
10
10
  {
@@ -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.3',
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
- const transport = new SSEServerTransport(`/message?sessionId=${sessionId}`, res);
80
- // Сохраняем сессию
81
- activeSessions.set(sessionId, { server: widgetServer, transport });
82
- console.log(`📝 Session created: ${sessionId} (active: ${activeSessions.size})`);
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 из URL
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
- // Передаём запрос в SSE транспорт для обработки
120
- // @ts-ignore - метод может существовать в runtime, но не в типах
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.writeHead(500, { 'Content-Type': 'application/json' });
148
- res.end(JSON.stringify({ error: 'Internal server error' }));
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
@@ -25,7 +25,7 @@ export class WidgetServer {
25
25
  constructor() {
26
26
  this.server = new Server({
27
27
  name: 'insales-widgets',
28
- version: '2.4.3',
28
+ version: '2.4.7',
29
29
  }, {
30
30
  capabilities: {
31
31
  tools: {},
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iwgt",
3
- "version": "2.4.5",
3
+ "version": "2.4.7",
4
4
  "description": "MCP server",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",