n8n-nodes-chat2crm 0.1.14 → 0.1.16
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.
|
@@ -96,8 +96,28 @@ class Chat2CrmTrigger {
|
|
|
96
96
|
// Создаем подключения к Redis только для нужных баз данных
|
|
97
97
|
const redisConnections = new Map();
|
|
98
98
|
for (const db of streamsByDb.keys()) {
|
|
99
|
+
// Создаем отдельное соединение для каждой базы данных
|
|
100
|
+
// ВАЖНО: Каждое соединение уже настроено на свою базу данных через параметр db
|
|
99
101
|
const redis = await RedisConnection_1.createRedisConnection.call(this, credentials, db);
|
|
100
102
|
redisConnections.set(db, redis);
|
|
103
|
+
// ДИАГНОСТИКА: Сразу после создания соединения проверяем stream'ы
|
|
104
|
+
try {
|
|
105
|
+
const testKeys = await redis.keys('*');
|
|
106
|
+
console.log(`[Chat2Crm Trigger] Keys in DB ${db} immediately after connection:`, testKeys);
|
|
107
|
+
// Проверяем конкретно N8N_INCOMING_MESSAGE
|
|
108
|
+
if (streamsByDb.get(db)?.includes('N8N_INCOMING_MESSAGE')) {
|
|
109
|
+
try {
|
|
110
|
+
const testInfo = await redis.xinfo('STREAM', 'N8N_INCOMING_MESSAGE');
|
|
111
|
+
console.log(`[Chat2Crm Trigger] N8N_INCOMING_MESSAGE found immediately after connection!`, testInfo);
|
|
112
|
+
}
|
|
113
|
+
catch (e) {
|
|
114
|
+
console.error(`[Chat2Crm Trigger] N8N_INCOMING_MESSAGE NOT found immediately after connection:`, e.message);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
console.error(`[Chat2Crm Trigger] Error checking keys in DB ${db}:`, error.message);
|
|
120
|
+
}
|
|
101
121
|
}
|
|
102
122
|
// Храним последние прочитанные ID для каждого stream
|
|
103
123
|
const lastReadIds = new Map();
|
|
@@ -108,16 +128,63 @@ class Chat2CrmTrigger {
|
|
|
108
128
|
const redis = redisConnections.get(db);
|
|
109
129
|
// ИСПРАВЛЕНИЕ: Явно выбираем базу данных перед проверкой stream'ов
|
|
110
130
|
try {
|
|
111
|
-
await redis.select(db);
|
|
112
|
-
console.log(`[Chat2Crm Trigger]
|
|
131
|
+
const selectResult = await redis.select(db);
|
|
132
|
+
console.log(`[Chat2Crm Trigger] SELECT ${db} result:`, selectResult);
|
|
133
|
+
// ДИАГНОСТИКА: Проверяем текущую базу данных через CLIENT INFO или другой способ
|
|
134
|
+
// Попробуем напрямую проверить stream после SELECT
|
|
135
|
+
for (const stream of dbStreams) {
|
|
136
|
+
try {
|
|
137
|
+
console.log(`[Chat2Crm Trigger] Direct XINFO check for "${stream}" immediately after SELECT ${db}`);
|
|
138
|
+
const directInfo = await redis.xinfo('STREAM', stream);
|
|
139
|
+
console.log(`[Chat2Crm Trigger] Direct XINFO SUCCESS for "${stream}":`, directInfo);
|
|
140
|
+
}
|
|
141
|
+
catch (directError) {
|
|
142
|
+
console.error(`[Chat2Crm Trigger] Direct XINFO FAILED for "${stream}":`, directError.message);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// ДИАГНОСТИКА: Проверяем все stream'ы через SCAN
|
|
146
|
+
const streamKeys = [];
|
|
147
|
+
let cursor = '0';
|
|
148
|
+
do {
|
|
149
|
+
const [nextCursor, keys] = await redis.scan(cursor, 'MATCH', '*', 'COUNT', 100);
|
|
150
|
+
cursor = nextCursor;
|
|
151
|
+
for (const key of keys) {
|
|
152
|
+
const keyType = await redis.type(key);
|
|
153
|
+
if (keyType === 'stream') {
|
|
154
|
+
streamKeys.push(key);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
} while (cursor !== '0');
|
|
158
|
+
console.log(`[Chat2Crm Trigger] Found ${streamKeys.length} streams in DB ${db}:`, streamKeys);
|
|
159
|
+
console.log(`[Chat2Crm Trigger] Looking for:`, dbStreams);
|
|
160
|
+
// ДИАГНОСТИКА: Проверяем конкретно N8N_INCOMING_MESSAGE через разные методы
|
|
161
|
+
if (dbStreams.includes('N8N_INCOMING_MESSAGE')) {
|
|
162
|
+
console.log(`[Chat2Crm Trigger] Special check for N8N_INCOMING_MESSAGE in DB ${db}`);
|
|
163
|
+
try {
|
|
164
|
+
const exists = await redis.exists('N8N_INCOMING_MESSAGE');
|
|
165
|
+
console.log(`[Chat2Crm Trigger] EXISTS check for N8N_INCOMING_MESSAGE:`, exists);
|
|
166
|
+
}
|
|
167
|
+
catch (e) {
|
|
168
|
+
console.error(`[Chat2Crm Trigger] EXISTS check failed:`, e.message);
|
|
169
|
+
}
|
|
170
|
+
try {
|
|
171
|
+
const type = await redis.type('N8N_INCOMING_MESSAGE');
|
|
172
|
+
console.log(`[Chat2Crm Trigger] TYPE check for N8N_INCOMING_MESSAGE:`, type);
|
|
173
|
+
}
|
|
174
|
+
catch (e) {
|
|
175
|
+
console.error(`[Chat2Crm Trigger] TYPE check failed:`, e.message);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
113
178
|
}
|
|
114
179
|
catch (error) {
|
|
115
180
|
console.error(`[Chat2Crm Trigger] Failed to select DB ${db}:`, error.message);
|
|
116
181
|
}
|
|
117
182
|
for (const stream of dbStreams) {
|
|
118
183
|
try {
|
|
184
|
+
console.log(`[Chat2Crm Trigger] Checking stream "${stream}" in DB ${db}`);
|
|
119
185
|
// Пытаемся получить информацию о stream
|
|
120
186
|
const streamInfo = await redis.xinfo('STREAM', stream);
|
|
187
|
+
console.log(`[Chat2Crm Trigger] Stream "${stream}" found! Info:`, streamInfo);
|
|
121
188
|
if (streamInfo && Array.isArray(streamInfo)) {
|
|
122
189
|
// Ищем 'last-entry' в информации о stream
|
|
123
190
|
const lastEntryIndex = streamInfo.indexOf('last-entry');
|
|
@@ -172,7 +172,7 @@ async function createRedisConnection(credentials, db = 0) {
|
|
|
172
172
|
const redis = new ioredis_1.default({
|
|
173
173
|
host: redisHost,
|
|
174
174
|
port: redisPort,
|
|
175
|
-
db: selectedDb,
|
|
175
|
+
db: selectedDb,
|
|
176
176
|
password: credentials.password,
|
|
177
177
|
enableReadyCheck: true,
|
|
178
178
|
maxRetriesPerRequest: 3,
|
|
@@ -182,6 +182,18 @@ async function createRedisConnection(credentials, db = 0) {
|
|
|
182
182
|
return delay;
|
|
183
183
|
},
|
|
184
184
|
});
|
|
185
|
+
// Ждем подключения и явно выбираем базу данных
|
|
186
|
+
await new Promise((resolve, reject) => {
|
|
187
|
+
redis.once('ready', () => {
|
|
188
|
+
resolve();
|
|
189
|
+
});
|
|
190
|
+
redis.once('error', (err) => {
|
|
191
|
+
reject(err);
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
// Явно выбираем базу данных после подключения
|
|
195
|
+
await redis.select(selectedDb);
|
|
196
|
+
console.log(`[Redis Connection] Explicitly selected DB ${selectedDb} after connection`);
|
|
185
197
|
// Добавляем обработчики событий для диагностики
|
|
186
198
|
redis.on('connect', () => {
|
|
187
199
|
console.log(`[Redis Connection] Connected to Redis at ${redisHost}:${redisPort}, DB ${selectedDb}`);
|