diff --git a/backend/app.js b/backend/app.js
index ebae5af..a3b2c24 100644
--- a/backend/app.js
+++ b/backend/app.js
@@ -11,6 +11,7 @@ const db = require('./db'); // Добавляем импорт db
const aiAssistant = require('./services/ai-assistant'); // Добавляем импорт aiAssistant
const fs = require('fs');
const path = require('path');
+const messagesRoutes = require('./routes/messages');
// Проверка и создание директорий для хранения данных контрактов
const ensureDirectoriesExist = () => {
@@ -77,7 +78,7 @@ app.use(
'http://127.0.0.1:5173', // Добавляем альтернативный origin
],
credentials: true,
- methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
+ methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'],
allowedHeaders: ['Content-Type', 'Authorization', 'Cookie'],
})
);
@@ -163,6 +164,7 @@ app.use('/api/isic', isicRoutes); // Добавленное использова
app.use('/api/geocoding', geocodingRoutes); // Добавленное использование роута
app.use('/api/dle', dleRoutes); // Добавляем маршрут DLE
app.use('/api/settings', settingsRoutes); // Добавляем маршрут настроек
+app.use('/api/messages', messagesRoutes);
const nonceStore = new Map(); // или любая другая реализация хранилища nonce
diff --git a/backend/db.js b/backend/db.js
index 5f306c1..5785645 100644
--- a/backend/db.js
+++ b/backend/db.js
@@ -97,10 +97,4 @@ async function saveGuestMessageToDatabase(message, language, guestId) {
}
// Экспортируем функции для работы с базой данных
-module.exports = {
- getPool,
- getQuery,
- reinitPoolFromDbSettings,
- saveGuestMessageToDatabase,
- setPoolChangeCallback,
-};
+module.exports = { getQuery, pool, getPool, setPoolChangeCallback };
diff --git a/backend/db/migrations/026_add_preferred_language_to_users.sql b/backend/db/migrations/026_add_preferred_language_to_users.sql
new file mode 100644
index 0000000..37c104b
--- /dev/null
+++ b/backend/db/migrations/026_add_preferred_language_to_users.sql
@@ -0,0 +1,2 @@
+-- Добавление поля preferred_language для хранения языков пользователя (множественный выбор)
+ALTER TABLE users ADD COLUMN preferred_language jsonb;
\ No newline at end of file
diff --git a/backend/logs/combined.log b/backend/logs/combined.log
index 7d38af6..abdc70c 100644
--- a/backend/logs/combined.log
+++ b/backend/logs/combined.log
@@ -1,83 +1,664 @@
-{"level":"info","message":"Директория существует: /app/contracts-data","timestamp":"2025-05-28T11:14:31.805Z"}
-{"level":"info","message":"Директория доступна для записи: /app/contracts-data","timestamp":"2025-05-28T11:14:31.808Z"}
-{"level":"info","message":"Директория существует: /app/contracts-data/dles","timestamp":"2025-05-28T11:14:31.808Z"}
-{"level":"info","message":"Директория доступна для записи: /app/contracts-data/dles","timestamp":"2025-05-28T11:14:31.810Z"}
-{"level":"info","message":"Директория существует: /app/temp","timestamp":"2025-05-28T11:14:31.810Z"}
-{"level":"info","message":"Директория доступна для записи: /app/temp","timestamp":"2025-05-28T11:14:31.811Z"}
-{"level":"info","message":"Ethers version: 6.13.5","timestamp":"2025-05-28T11:14:32.459Z"}
-{"level":"info","message":"[EmailBot] start() called","timestamp":"2025-05-28T11:14:32.469Z"}
-{"host":"mail.hostland.ru","keepalive":{"forceNoop":true,"idleInterval":300000,"interval":10000},"level":"info","message":"[EmailBot] IMAP config:","password":"***","port":993,"timestamp":"2025-05-28T11:14:32.522Z","tls":true,"tlsOptions":{"rejectUnauthorized":false},"user":"info@hb3-accelerator.com"}
-{"level":"info","message":"[EmailBot] IMAP connect attempt 1","timestamp":"2025-05-28T11:14:32.523Z"}
-{"level":"info","message":"[EmailBot] IMAP connection ready","timestamp":"2025-05-28T11:14:37.608Z"}
-{"level":"info","message":"[EmailBot] Email bot started and IMAP connection initiated","timestamp":"2025-05-28T11:14:37.612Z"}
-{"level":"info","message":"No new messages found","timestamp":"2025-05-28T11:14:38.439Z"}
-{"level":"info","message":"Директория существует: /app/contracts-data","timestamp":"2025-05-28T11:18:59.102Z"}
-{"level":"info","message":"Директория доступна для записи: /app/contracts-data","timestamp":"2025-05-28T11:18:59.105Z"}
-{"level":"info","message":"Директория существует: /app/contracts-data/dles","timestamp":"2025-05-28T11:18:59.106Z"}
-{"level":"info","message":"Директория доступна для записи: /app/contracts-data/dles","timestamp":"2025-05-28T11:18:59.107Z"}
-{"level":"info","message":"Директория существует: /app/temp","timestamp":"2025-05-28T11:18:59.108Z"}
-{"level":"info","message":"Директория доступна для записи: /app/temp","timestamp":"2025-05-28T11:18:59.109Z"}
-{"level":"info","message":"Ethers version: 6.13.5","timestamp":"2025-05-28T11:18:59.493Z"}
-{"level":"info","message":"[EmailBot] start() called","timestamp":"2025-05-28T11:18:59.514Z"}
-{"host":"mail.hostland.ru","keepalive":{"forceNoop":true,"idleInterval":300000,"interval":10000},"level":"info","message":"[EmailBot] IMAP config:","password":"***","port":993,"timestamp":"2025-05-28T11:18:59.627Z","tls":true,"tlsOptions":{"rejectUnauthorized":false},"user":"info@hb3-accelerator.com"}
-{"level":"info","message":"[EmailBot] IMAP connect attempt 1","timestamp":"2025-05-28T11:18:59.628Z"}
-{"level":"info","message":"[EmailBot] IMAP connection ready","timestamp":"2025-05-28T11:19:00.194Z"}
-{"level":"info","message":"[EmailBot] Email bot started and IMAP connection initiated","timestamp":"2025-05-28T11:19:00.198Z"}
-{"level":"info","message":"[IdentityService] No user found with identity email:avtarabanov@gmail.com","timestamp":"2025-05-28T11:19:01.087Z"}
-{"level":"info","message":"[IdentityService] Saving identity for user 96: email:avtarabanov@gmail.com","timestamp":"2025-05-28T11:19:01.094Z"}
-{"level":"info","message":"[IdentityService] Created new identity email:avtarabanov@gmail.com for user 96","timestamp":"2025-05-28T11:19:01.113Z"}
-{"level":"info","message":"[getLinkedWallet] Called with userId: 96 (Type: number)","timestamp":"2025-05-28T11:19:01.113Z"}
-{"level":"info","message":"[getLinkedWallet] DB query result for userId 96:","timestamp":"2025-05-28T11:19:01.115Z"}
-{"level":"info","message":"[getLinkedWallet] Returning address: undefined for userId 96","timestamp":"2025-05-28T11:19:01.116Z"}
-{"level":"info","message":"Email sent to avtarabanov@gmail.com","timestamp":"2025-05-28T11:19:42.428Z"}
-{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-05-28T11:19:59.653Z"}
-{"level":"warn","message":"[EmailBot] IMAP reconnecting in 10 seconds (attempt 2)...","timestamp":"2025-05-28T11:19:59.654Z"}
-{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T11:19:59.654Z"}
-{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T11:19:59.654Z"}
-{"level":"info","message":"[EmailBot] IMAP connect attempt 2","timestamp":"2025-05-28T11:20:09.668Z"}
-{"level":"info","message":"[EmailBot] IMAP connection ready","timestamp":"2025-05-28T11:20:10.393Z"}
-{"level":"info","message":"[EmailBot] Email bot started and IMAP connection initiated","timestamp":"2025-05-28T11:20:10.394Z"}
-{"level":"info","message":"[IdentityService] Found user 96 with identity email:avtarabanov@gmail.com","timestamp":"2025-05-28T11:20:11.292Z"}
-{"level":"info","message":"[getLinkedWallet] Called with userId: 96 (Type: number)","timestamp":"2025-05-28T11:20:11.293Z"}
-{"level":"info","message":"[getLinkedWallet] DB query result for userId 96:","timestamp":"2025-05-28T11:20:11.295Z"}
-{"level":"info","message":"[getLinkedWallet] Returning address: undefined for userId 96","timestamp":"2025-05-28T11:20:11.295Z"}
-{"level":"info","message":"Email sent to avtarabanov@gmail.com","timestamp":"2025-05-28T11:20:17.273Z"}
-{"level":"info","message":"[IdentityService] Found user 96 with identity email:avtarabanov@gmail.com","timestamp":"2025-05-28T11:20:50.149Z"}
-{"level":"info","message":"[getLinkedWallet] Called with userId: 96 (Type: number)","timestamp":"2025-05-28T11:20:50.150Z"}
-{"level":"info","message":"[getLinkedWallet] DB query result for userId 96:","timestamp":"2025-05-28T11:20:50.151Z"}
-{"level":"info","message":"[getLinkedWallet] Returning address: undefined for userId 96","timestamp":"2025-05-28T11:20:50.152Z"}
-{"level":"info","message":"Email sent to avtarabanov@gmail.com","timestamp":"2025-05-28T11:21:00.967Z"}
-{"level":"info","message":"[IdentityService] Found user 96 with identity email:avtarabanov@gmail.com","timestamp":"2025-05-28T11:21:06.155Z"}
-{"level":"info","message":"[getLinkedWallet] Called with userId: 96 (Type: number)","timestamp":"2025-05-28T11:21:06.155Z"}
-{"level":"info","message":"[getLinkedWallet] DB query result for userId 96:","timestamp":"2025-05-28T11:21:06.157Z"}
-{"level":"info","message":"[getLinkedWallet] Returning address: undefined for userId 96","timestamp":"2025-05-28T11:21:06.157Z"}
-{"level":"info","message":"Email sent to avtarabanov@gmail.com","timestamp":"2025-05-28T11:21:11.991Z"}
-{"level":"info","message":"[IdentityService] Found user 96 with identity email:avtarabanov@gmail.com","timestamp":"2025-05-28T11:21:45.098Z"}
-{"level":"info","message":"[getLinkedWallet] Called with userId: 96 (Type: number)","timestamp":"2025-05-28T11:21:45.099Z"}
-{"level":"info","message":"[getLinkedWallet] DB query result for userId 96:","timestamp":"2025-05-28T11:21:45.100Z"}
-{"level":"info","message":"[getLinkedWallet] Returning address: undefined for userId 96","timestamp":"2025-05-28T11:21:45.101Z"}
-{"level":"info","message":"Email sent to avtarabanov@gmail.com","timestamp":"2025-05-28T11:21:52.644Z"}
-{"level":"info","message":"[IdentityService] Found user 96 with identity email:avtarabanov@gmail.com","timestamp":"2025-05-28T11:22:01.200Z"}
-{"level":"info","message":"[getLinkedWallet] Called with userId: 96 (Type: number)","timestamp":"2025-05-28T11:22:01.200Z"}
-{"level":"info","message":"[getLinkedWallet] DB query result for userId 96:","timestamp":"2025-05-28T11:22:01.202Z"}
-{"level":"info","message":"[getLinkedWallet] Returning address: undefined for userId 96","timestamp":"2025-05-28T11:22:01.202Z"}
-{"code":"EPROTOCOL","command":"CONN","level":"error","message":"Error sending email: Invalid greeting. response=421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220: 421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220","response":"421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220","responseCode":421,"stack":"Error: Invalid greeting. response=421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220: 421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220\n at SMTPConnection._actionGreeting (/app/node_modules/nodemailer/lib/smtp-connection/index.js:1251:27)\n at SMTPConnection._processResponse (/app/node_modules/nodemailer/lib/smtp-connection/index.js:993:20)\n at SMTPConnection._onData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:774:14)\n at SMTPConnection._onSocketData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:195:44)\n at TLSSocket.emit (node:events:524:28)\n at addChunk (node:internal/streams/readable:561:12)\n at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)\n at Readable.push (node:internal/streams/readable:392:5)\n at TLSWrap.onStreamRead (node:internal/stream_base_commons:191:23)","timestamp":"2025-05-28T11:22:09.742Z"}
-{"code":"EPROTOCOL","command":"CONN","level":"error","message":"Error processing incoming email: Invalid greeting. response=421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220: 421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220","response":"421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220","responseCode":421,"stack":"Error: Invalid greeting. response=421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220: 421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220\n at SMTPConnection._actionGreeting (/app/node_modules/nodemailer/lib/smtp-connection/index.js:1251:27)\n at SMTPConnection._processResponse (/app/node_modules/nodemailer/lib/smtp-connection/index.js:993:20)\n at SMTPConnection._onData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:774:14)\n at SMTPConnection._onSocketData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:195:44)\n at TLSSocket.emit (node:events:524:28)\n at addChunk (node:internal/streams/readable:561:12)\n at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)\n at Readable.push (node:internal/streams/readable:392:5)\n at TLSWrap.onStreamRead (node:internal/stream_base_commons:191:23)","timestamp":"2025-05-28T11:22:09.743Z"}
-{"level":"info","message":"[IdentityService] Found user 96 with identity email:avtarabanov@gmail.com","timestamp":"2025-05-28T11:22:40.095Z"}
-{"level":"info","message":"[getLinkedWallet] Called with userId: 96 (Type: number)","timestamp":"2025-05-28T11:22:40.096Z"}
-{"level":"info","message":"[getLinkedWallet] DB query result for userId 96:","timestamp":"2025-05-28T11:22:40.097Z"}
-{"level":"info","message":"[getLinkedWallet] Returning address: undefined for userId 96","timestamp":"2025-05-28T11:22:40.097Z"}
-{"code":"EPROTOCOL","command":"CONN","level":"error","message":"Error sending email: Invalid greeting. response=421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220: 421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220","response":"421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220","responseCode":421,"stack":"Error: Invalid greeting. response=421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220: 421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220\n at SMTPConnection._actionGreeting (/app/node_modules/nodemailer/lib/smtp-connection/index.js:1251:27)\n at SMTPConnection._processResponse (/app/node_modules/nodemailer/lib/smtp-connection/index.js:993:20)\n at SMTPConnection._onData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:774:14)\n at SMTPConnection._onSocketData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:195:44)\n at TLSSocket.emit (node:events:524:28)\n at addChunk (node:internal/streams/readable:561:12)\n at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)\n at Readable.push (node:internal/streams/readable:392:5)\n at TLSWrap.onStreamRead (node:internal/stream_base_commons:191:23)","timestamp":"2025-05-28T11:22:51.094Z"}
-{"code":"EPROTOCOL","command":"CONN","level":"error","message":"Error processing incoming email: Invalid greeting. response=421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220: 421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220","response":"421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220","responseCode":421,"stack":"Error: Invalid greeting. response=421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220: 421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220\n at SMTPConnection._actionGreeting (/app/node_modules/nodemailer/lib/smtp-connection/index.js:1251:27)\n at SMTPConnection._processResponse (/app/node_modules/nodemailer/lib/smtp-connection/index.js:993:20)\n at SMTPConnection._onData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:774:14)\n at SMTPConnection._onSocketData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:195:44)\n at TLSSocket.emit (node:events:524:28)\n at addChunk (node:internal/streams/readable:561:12)\n at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)\n at Readable.push (node:internal/streams/readable:392:5)\n at TLSWrap.onStreamRead (node:internal/stream_base_commons:191:23)","timestamp":"2025-05-28T11:22:51.094Z"}
-{"level":"info","message":"[IdentityService] Found user 96 with identity email:avtarabanov@gmail.com","timestamp":"2025-05-28T11:22:56.139Z"}
-{"level":"info","message":"[getLinkedWallet] Called with userId: 96 (Type: number)","timestamp":"2025-05-28T11:22:56.140Z"}
-{"level":"info","message":"[getLinkedWallet] DB query result for userId 96:","timestamp":"2025-05-28T11:22:56.141Z"}
-{"level":"info","message":"[getLinkedWallet] Returning address: undefined for userId 96","timestamp":"2025-05-28T11:22:56.141Z"}
-{"code":"EPROTOCOL","command":"CONN","level":"error","message":"Error sending email: Invalid greeting. response=421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220: 421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220","response":"421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220","responseCode":421,"stack":"Error: Invalid greeting. response=421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220: 421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220\n at SMTPConnection._actionGreeting (/app/node_modules/nodemailer/lib/smtp-connection/index.js:1251:27)\n at SMTPConnection._processResponse (/app/node_modules/nodemailer/lib/smtp-connection/index.js:993:20)\n at SMTPConnection._onData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:774:14)\n at SMTPConnection._onSocketData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:195:44)\n at TLSSocket.emit (node:events:524:28)\n at addChunk (node:internal/streams/readable:561:12)\n at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)\n at Readable.push (node:internal/streams/readable:392:5)\n at TLSWrap.onStreamRead (node:internal/stream_base_commons:191:23)","timestamp":"2025-05-28T11:23:00.237Z"}
-{"code":"EPROTOCOL","command":"CONN","level":"error","message":"Error processing incoming email: Invalid greeting. response=421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220: 421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220","response":"421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220","responseCode":421,"stack":"Error: Invalid greeting. response=421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220: 421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220\n at SMTPConnection._actionGreeting (/app/node_modules/nodemailer/lib/smtp-connection/index.js:1251:27)\n at SMTPConnection._processResponse (/app/node_modules/nodemailer/lib/smtp-connection/index.js:993:20)\n at SMTPConnection._onData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:774:14)\n at SMTPConnection._onSocketData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:195:44)\n at TLSSocket.emit (node:events:524:28)\n at addChunk (node:internal/streams/readable:561:12)\n at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)\n at Readable.push (node:internal/streams/readable:392:5)\n at TLSWrap.onStreamRead (node:internal/stream_base_commons:191:23)","timestamp":"2025-05-28T11:23:00.237Z"}
-{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T11:23:24.639Z"}
-{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T11:23:24.661Z"}
-{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T11:23:24.673Z"}
-{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T11:23:24.682Z"}
-{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T11:23:24.693Z"}
-{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T11:23:24.704Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:02:07.765Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:02:13.313Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:02:13.318Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:02:13.337Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:02:13.339Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:02:13.350Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:02:13.356Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:02:13.370Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:02:13.374Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:02:13.388Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:02:13.391Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:02:13.407Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:02:13.411Z"}
+{"level":"info","message":"PATCH /api/users/13","timestamp":"2025-05-28T13:02:23.168Z"}
+{"level":"info","message":"PATCH /api/users/13","timestamp":"2025-05-28T13:02:27.166Z"}
+{"level":"info","message":"PATCH /api/users/13","timestamp":"2025-05-28T13:02:29.854Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:02:43.540Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:02:43.545Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:02:43.560Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:02:43.563Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:02:43.573Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:02:43.576Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:02:43.591Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:02:43.597Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:02:43.614Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:02:43.617Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:02:43.636Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:02:43.639Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:02:53.678Z"}
+{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-05-28T13:03:06.859Z"}
+{"level":"warn","message":"[EmailBot] IMAP reconnecting in 10 seconds (attempt 3)...","timestamp":"2025-05-28T13:03:06.860Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:03:06.860Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:03:06.860Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:03:06.860Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:03:06.861Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:03:06.861Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:03:06.861Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:03:06.861Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:03:13.521Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:03:13.531Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:03:13.557Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:03:13.560Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:03:13.593Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:03:13.598Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:03:13.634Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:03:13.642Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:03:13.660Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:03:13.665Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:03:13.683Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:03:13.685Z"}
+{"level":"info","message":"[EmailBot] IMAP connect attempt 3","timestamp":"2025-05-28T13:03:16.868Z"}
+{"level":"info","message":"[EmailBot] IMAP connection ready","timestamp":"2025-05-28T13:03:17.471Z"}
+{"level":"info","message":"[EmailBot] Email bot started and IMAP connection initiated","timestamp":"2025-05-28T13:03:17.473Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:03:23.798Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:03:48.341Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:03:57.375Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:04:04.340Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:04:04.362Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:04:04.379Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:04:04.383Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:04:04.402Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:04:04.409Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:04:04.435Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:04:04.438Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:04:04.457Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:04:04.460Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:04:04.482Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:04:04.485Z"}
+{"level":"info","message":"PATCH /api/users/13","timestamp":"2025-05-28T13:04:06.073Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:04:13.965Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:04:13.967Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:04:13.987Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:04:13.990Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:04:14.010Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:04:14.014Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:04:14.028Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:04:14.032Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:04:14.053Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:04:14.063Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:04:14.079Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:04:14.083Z"}
+{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-05-28T13:04:17.747Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:04:17.747Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:04:17.748Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:04:17.748Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:04:17.748Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:04:43.277Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:04:44.204Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:04:44.208Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:04:44.228Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:04:44.231Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:04:44.247Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:04:44.253Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:04:44.267Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:04:44.269Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:04:44.284Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:04:44.288Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:04:44.312Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:04:44.317Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:04:56.674Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:04:56.745Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:04:56.784Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:05:12.662Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:05:12.663Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:05:38.648Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:05:38.697Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:05:45.752Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:05:45.761Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:05:45.775Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:05:45.777Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:05:45.798Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:05:45.809Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:05:45.847Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:05:45.850Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:05:45.872Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:05:45.874Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:05:45.892Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:05:45.894Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:05:51.635Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:06:07.601Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:06:07.608Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:06:07.609Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:06:32.967Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:06:33.045Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:06:44.699Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:06:44.714Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:06:44.717Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:06:44.744Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:06:44.748Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:06:44.761Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:06:44.764Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:06:44.791Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:06:44.793Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:06:44.807Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:06:44.810Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:06:44.821Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:06:44.823Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:06:58.150Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:07:23.712Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:07:41.568Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:07:41.568Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:07:41.569Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:07:41.569Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:07:41.569Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:07:46.782Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:07:46.789Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:07:46.822Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:07:46.830Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:07:46.845Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:07:46.848Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:07:46.861Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:07:46.863Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:07:46.881Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:07:46.884Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:07:46.894Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:07:46.899Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:07:53.443Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:07:53.491Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:08:22.751Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:08:36.453Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:08:47.821Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:08:47.827Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:08:47.852Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:08:47.869Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:08:47.887Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:08:47.891Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:08:47.909Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:08:47.912Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:08:47.933Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:08:47.935Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:08:47.953Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:08:47.957Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:08:52.415Z"}
+{"level":"info","message":"Директория существует: /app/contracts-data","timestamp":"2025-05-28T13:09:08.491Z"}
+{"level":"info","message":"Директория доступна для записи: /app/contracts-data","timestamp":"2025-05-28T13:09:08.557Z"}
+{"level":"info","message":"Директория существует: /app/contracts-data/dles","timestamp":"2025-05-28T13:09:08.558Z"}
+{"level":"info","message":"Директория доступна для записи: /app/contracts-data/dles","timestamp":"2025-05-28T13:09:08.564Z"}
+{"level":"info","message":"Директория существует: /app/temp","timestamp":"2025-05-28T13:09:08.565Z"}
+{"level":"info","message":"Директория доступна для записи: /app/temp","timestamp":"2025-05-28T13:09:08.567Z"}
+{"level":"info","message":"Ethers version: 6.13.5","timestamp":"2025-05-28T13:09:13.816Z"}
+{"level":"info","message":"[EmailBot] start() called","timestamp":"2025-05-28T13:09:13.842Z"}
+{"host":"mail.hostland.ru","keepalive":{"forceNoop":true,"idleInterval":300000,"interval":10000},"level":"info","message":"[EmailBot] IMAP config:","password":"***","port":993,"timestamp":"2025-05-28T13:09:13.955Z","tls":true,"tlsOptions":{"rejectUnauthorized":false},"user":"info@hb3-accelerator.com"}
+{"level":"info","message":"[EmailBot] IMAP connect attempt 1","timestamp":"2025-05-28T13:09:13.958Z"}
+{"level":"info","message":"[EmailBot] IMAP connection ready","timestamp":"2025-05-28T13:09:19.185Z"}
+{"level":"info","message":"[EmailBot] Email bot started and IMAP connection initiated","timestamp":"2025-05-28T13:09:19.190Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:09:24.232Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:09:49.791Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:09:49.800Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:09:50.292Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:09:50.296Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:09:50.373Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:09:50.376Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:09:50.402Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:09:50.417Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:09:50.440Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:09:50.442Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:09:50.458Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:09:50.460Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:10:15.881Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:10:54.211Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:10:54.216Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:10:54.234Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:10:54.237Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:10:54.251Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:10:54.254Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:10:54.269Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:10:54.273Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:10:54.286Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:10:54.289Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:10:54.310Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:10:54.314Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:11:09.745Z"}
+{"level":"info","message":"Executing UP migration from 026_add_preferred_language_to_users.sql...","timestamp":"2025-05-28T13:11:42.195Z"}
+{"level":"info","message":"Migration 026_add_preferred_language_to_users.sql executed successfully","timestamp":"2025-05-28T13:11:42.217Z"}
+{"level":"info","message":"Function link_guest_messages.sql executed successfully","timestamp":"2025-05-28T13:11:42.971Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:11:49.604Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:11:49.608Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:11:49.619Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:11:49.621Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:11:51.449Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:11:51.470Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:11:51.495Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:11:51.497Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:11:51.508Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:11:51.510Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:11:51.520Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:11:51.522Z"}
+{"level":"info","message":"Директория существует: /app/contracts-data","timestamp":"2025-05-28T13:12:00.418Z"}
+{"level":"info","message":"Директория доступна для записи: /app/contracts-data","timestamp":"2025-05-28T13:12:00.423Z"}
+{"level":"info","message":"Директория существует: /app/contracts-data/dles","timestamp":"2025-05-28T13:12:00.424Z"}
+{"level":"info","message":"Директория доступна для записи: /app/contracts-data/dles","timestamp":"2025-05-28T13:12:00.426Z"}
+{"level":"info","message":"Директория существует: /app/temp","timestamp":"2025-05-28T13:12:00.427Z"}
+{"level":"info","message":"Директория доступна для записи: /app/temp","timestamp":"2025-05-28T13:12:00.429Z"}
+{"level":"info","message":"Ethers version: 6.13.5","timestamp":"2025-05-28T13:12:07.330Z"}
+{"level":"info","message":"[EmailBot] start() called","timestamp":"2025-05-28T13:12:07.358Z"}
+{"host":"mail.hostland.ru","keepalive":{"forceNoop":true,"idleInterval":300000,"interval":10000},"level":"info","message":"[EmailBot] IMAP config:","password":"***","port":993,"timestamp":"2025-05-28T13:12:07.447Z","tls":true,"tlsOptions":{"rejectUnauthorized":false},"user":"info@hb3-accelerator.com"}
+{"level":"info","message":"[EmailBot] IMAP connect attempt 1","timestamp":"2025-05-28T13:12:07.452Z"}
+{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-05-28T13:12:13.523Z"}
+{"level":"warn","message":"[EmailBot] IMAP reconnecting in 10 seconds (attempt 2)...","timestamp":"2025-05-28T13:12:13.524Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:12:13.901Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:13.908Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:18.961Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:18.969Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:12:19.012Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:19.014Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:19.052Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:19.056Z"}
+{"level":"info","message":"GET /api/tokens/balances?address=0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","timestamp":"2025-05-28T13:12:19.088Z"}
+{"level":"info","message":"Fetching token balances for address: 0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","timestamp":"2025-05-28T13:12:19.090Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:19.115Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:19.126Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:19.256Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:19.259Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:12:19.626Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:19.629Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:12:19.653Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:19.669Z"}
+{"level":"info","message":"GET /api/dle","timestamp":"2025-05-28T13:12:19.692Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:12:19.733Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:19.744Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:19.827Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:12:19.834Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:19.837Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:19.841Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:12:19.889Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:19.895Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:20.794Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:20.803Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:12:20.810Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:20.813Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:20.831Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:20.835Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:12:20.839Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:20.842Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:20.873Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:20.878Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:12:20.888Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:20.890Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:20.905Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:20.909Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:20.924Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:12:20.929Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:20.932Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:20.935Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:20.947Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:20.955Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:12:20.963Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:20.974Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:20.993Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:20.996Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:21.016Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:21.021Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:21.040Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:21.042Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:21.061Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:21.068Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:21.085Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:21.087Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:21.103Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:21.107Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:21.127Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:21.129Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:21.145Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:21.148Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:21.174Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:21.178Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:21.196Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:21.198Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:21.214Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:21.217Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:21.236Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:21.240Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:21.257Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:21.261Z"}
+{"level":"info","message":"[EmailBot] IMAP connect attempt 2","timestamp":"2025-05-28T13:12:21.082Z"}
+{"level":"info","message":"[EmailBot] IMAP connection ready","timestamp":"2025-05-28T13:12:22.374Z"}
+{"level":"info","message":"[EmailBot] Email bot started and IMAP connection initiated","timestamp":"2025-05-28T13:12:22.378Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:12:23.844Z"}
+{"level":"info","message":"GET /api/users","timestamp":"2025-05-28T13:12:27.308Z"}
+{"level":"info","message":"GET /api/messages?userId=90","timestamp":"2025-05-28T13:12:33.034Z"}
+{"level":"info","message":"PATCH /api/users/90","timestamp":"2025-05-28T13:12:41.021Z"}
+{"level":"info","message":"PATCH /api/users/90","timestamp":"2025-05-28T13:12:43.063Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:46.888Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:46.891Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:49.531Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:49.534Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:49.546Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:49.550Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:49.571Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:49.580Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:49.601Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:49.604Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:12:49.642Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:12:49.644Z"}
+{"level":"info","message":"PATCH /api/users/90","timestamp":"2025-05-28T13:13:18.947Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:21.855Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:21.859Z"}
+{"level":"info","message":"GET /api/messages?userId=96","timestamp":"2025-05-28T13:13:23.756Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:13:24.400Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:29.681Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:29.700Z"}
+{"level":"info","message":"GET /api/messages?userId=96","timestamp":"2025-05-28T13:13:29.723Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:29.747Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:29.753Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:29.773Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:29.779Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:29.800Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:29.803Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:29.814Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:29.819Z"}
+{"level":"info","message":"PATCH /api/users/96","timestamp":"2025-05-28T13:13:33.171Z"}
+{"level":"info","message":"PATCH /api/users/96","timestamp":"2025-05-28T13:13:33.550Z"}
+{"level":"info","message":"PATCH /api/users/96","timestamp":"2025-05-28T13:13:34.571Z"}
+{"level":"info","message":"PATCH /api/users/96","timestamp":"2025-05-28T13:13:36.772Z"}
+{"level":"info","message":"PATCH /api/users/96","timestamp":"2025-05-28T13:13:39.354Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:13:48.297Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:48.299Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:48.491Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:48.494Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:13:48.517Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:48.519Z"}
+{"level":"info","message":"GET /api/tokens/balances?address=0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","timestamp":"2025-05-28T13:13:48.554Z"}
+{"level":"info","message":"Fetching token balances for address: 0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","timestamp":"2025-05-28T13:13:48.555Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:13:48.559Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:48.562Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:13:49.641Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:52.382Z"}
+{"level":"info","message":"GET /api/users","timestamp":"2025-05-28T13:13:52.400Z"}
+{"level":"info","message":"GET /api/dle","timestamp":"2025-05-28T13:13:52.402Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:52.418Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:52.423Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:13:52.443Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:52.448Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:54.680Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:54.683Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:13:54.687Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:54.692Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:54.709Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:54.719Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:13:54.728Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:54.732Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:54.748Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:54.763Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:13:54.782Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:54.787Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:54.802Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:54.813Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:13:54.833Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:54.840Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:54.864Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:54.867Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:13:54.898Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:54.906Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:54.908Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:54.911Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:54.936Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:54.938Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:13:54.941Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:54.947Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:54.956Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:54.959Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:13:54.978Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:54.982Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:54.987Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:54.994Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:55.014Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:55.018Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:55.051Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:55.053Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:55.070Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:55.073Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:55.092Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:55.094Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:55.111Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:55.114Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:55.131Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:55.134Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:55.151Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:55.154Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:55.168Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:55.171Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:55.198Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:55.202Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:55.225Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:55.228Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:55.245Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:55.250Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:55.271Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:55.273Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:13:55.287Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:13:55.289Z"}
+{"level":"info","message":"POST /api/auth/logout","timestamp":"2025-05-28T13:14:06.836Z"}
+{"address":null,"authType":null,"authenticated":false,"cookie":{"expires":"2025-06-27T11:09:43.800Z","httpOnly":true,"originalMaxAge":2592000000,"path":"/","sameSite":"lax","secure":false},"email":null,"guestId":null,"isAdmin":false,"level":"info","message":"[SessionService] Saving session data:","pendingEmail":null,"previousGuestId":null,"processedGuestIds":[],"telegramId":null,"timestamp":"2025-05-28T13:14:06.837Z","userId":null}
+{"level":"info","message":"Session saved successfully","timestamp":"2025-05-28T13:14:06.842Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:14:06.856Z"}
+{"cookie":{"expires":"2025-06-27T13:14:06.854Z","httpOnly":true,"originalMaxAge":2592000000,"path":"/","sameSite":"lax","secure":false},"guestId":"3fe8a3e22225b0e8b06d7b4b3098ecf9","level":"info","message":"[SessionService] Saving session data:","timestamp":"2025-05-28T13:14:06.857Z"}
+{"level":"info","message":"Session saved successfully","timestamp":"2025-05-28T13:14:06.861Z"}
+{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-05-28T13:14:17.520Z"}
+{"level":"warn","message":"[EmailBot] IMAP reconnecting in 10 seconds (attempt 3)...","timestamp":"2025-05-28T13:14:17.521Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:14:17.521Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:14:17.522Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:14:17.522Z"}
+{"level":"info","message":"[EmailBot] IMAP connect attempt 3","timestamp":"2025-05-28T13:14:27.529Z"}
+{"level":"info","message":"[EmailBot] IMAP connection ready","timestamp":"2025-05-28T13:14:28.651Z"}
+{"level":"info","message":"[EmailBot] Email bot started and IMAP connection initiated","timestamp":"2025-05-28T13:14:28.655Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:14:29.491Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:15:08.086Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:15:28.736Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:16:07.430Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:16:19.287Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:17:03.083Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:17:13.102Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:17:58.822Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:18:14.356Z"}
+{"level":"info","message":"GET /","timestamp":"2025-05-28T13:18:22.790Z"}
+{"level":"error","message":"Error: undefined","timestamp":"2025-05-28T13:18:22.803Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:18:47.896Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:18:48.634Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:18:48.648Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:18:48.658Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:18:48.670Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:18:48.720Z"}
+{"level":"info","message":"GET /api/auth/nonce?address=0xF45aa4917b3775bA37f48Aeb3dc1a943561e9e0B","timestamp":"2025-05-28T13:18:52.434Z"}
+{"level":"info","message":"Nonce 0ca114de0a1d32e9e42068d34968e368 сохранен для адреса 0xF45aa4917b3775bA37f48Aeb3dc1a943561e9e0B","timestamp":"2025-05-28T13:18:52.441Z"}
+{"level":"info","message":"POST /api/auth/verify","timestamp":"2025-05-28T13:18:55.064Z"}
+{"level":"info","message":"[verify] Verifying signature for address: 0xF45aa4917b3775bA37f48Aeb3dc1a943561e9e0B","timestamp":"2025-05-28T13:18:55.065Z"}
+{"level":"info","message":"Checking admin role for address: 0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","timestamp":"2025-05-28T13:18:55.132Z"}
+{"address":"0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","balance":"454852.0","contract":"0x351f59de4fedbdf7601f5592b93db3b9330c1c1d","hasTokens":true,"level":"info","message":"Token balance on polygon:","minBalance":"10.000000000000000000","timestamp":"2025-05-28T13:18:55.711Z"}
+{"level":"info","message":"Found admin tokens on polygon","timestamp":"2025-05-28T13:18:55.712Z"}
+{"address":"0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","balance":"1500000.0","contract":"0xd95a45fc46a7300e6022885afec3d618d7d3f27c","hasTokens":true,"level":"info","message":"Token balance on ethereum:","minBalance":"10.000000000000000000","timestamp":"2025-05-28T13:18:56.141Z"}
+{"level":"info","message":"Found admin tokens on ethereum","timestamp":"2025-05-28T13:18:56.141Z"}
+{"address":"0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","balance":"499999.9","contract":"0xdCe769b847a0a697239777D0B1C7dd33b6012ba0","hasTokens":true,"level":"info","message":"Token balance on arbitrum:","minBalance":"100.000000000000000000","timestamp":"2025-05-28T13:18:56.266Z"}
+{"level":"info","message":"Found admin tokens on arbitrum","timestamp":"2025-05-28T13:18:56.266Z"}
+{"address":"0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","balance":"500000.0","contract":"0x4b294265720b09ca39bfba18c7e368413c0f68eb","hasTokens":true,"level":"info","message":"Token balance on bsc:","minBalance":"10.000000000000000000","timestamp":"2025-05-28T13:18:56.268Z"}
+{"level":"info","message":"Found admin tokens on bsc","timestamp":"2025-05-28T13:18:56.268Z"}
+{"address":"0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","balance":"110.0","contract":"0xef49261169B454f191678D2aFC5E91Ad2e85dfD8","hasTokens":true,"level":"info","message":"Token balance on sepolia:","minBalance":"50.000000000000000000","timestamp":"2025-05-28T13:18:56.276Z"}
+{"level":"info","message":"Found admin tokens on sepolia","timestamp":"2025-05-28T13:18:56.276Z"}
+{"balances":{"arbitrum":"499999.9","bsc":"500000.0","ethereum":"1500000.0","polygon":"454852.0","sepolia":"110.0"},"level":"info","message":"Admin role summary for 0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b:","networks":["polygon","ethereum","arbitrum","bsc","sepolia"],"timestamp":"2025-05-28T13:18:56.277Z"}
+{"level":"info","message":"Admin role granted for 0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","timestamp":"2025-05-28T13:18:56.278Z"}
+{"level":"info","message":"[verify] Found or created user 1 for wallet 0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","timestamp":"2025-05-28T13:18:56.278Z"}
+{"level":"info","message":"[IdentityService] Converting guest identity for user 1 to guest_user_mapping: 3fe8a3e22225b0e8b06d7b4b3098ecf9","timestamp":"2025-05-28T13:18:56.279Z"}
+{"level":"info","message":"Checking admin tokens for address: 0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","timestamp":"2025-05-28T13:18:56.292Z"}
+{"level":"info","message":"Checking admin role for address: 0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","timestamp":"2025-05-28T13:18:56.292Z"}
+{"address":"0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","balance":"500000.0","contract":"0x4b294265720b09ca39bfba18c7e368413c0f68eb","hasTokens":true,"level":"info","message":"Token balance on bsc:","minBalance":"10.000000000000000000","timestamp":"2025-05-28T13:18:56.570Z"}
+{"level":"info","message":"Found admin tokens on bsc","timestamp":"2025-05-28T13:18:56.570Z"}
+{"address":"0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","balance":"110.0","contract":"0xef49261169B454f191678D2aFC5E91Ad2e85dfD8","hasTokens":true,"level":"info","message":"Token balance on sepolia:","minBalance":"50.000000000000000000","timestamp":"2025-05-28T13:18:56.730Z"}
+{"level":"info","message":"Found admin tokens on sepolia","timestamp":"2025-05-28T13:18:56.731Z"}
+{"address":"0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","balance":"1500000.0","contract":"0xd95a45fc46a7300e6022885afec3d618d7d3f27c","hasTokens":true,"level":"info","message":"Token balance on ethereum:","minBalance":"10.000000000000000000","timestamp":"2025-05-28T13:18:56.742Z"}
+{"level":"info","message":"Found admin tokens on ethereum","timestamp":"2025-05-28T13:18:56.742Z"}
+{"address":"0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","balance":"454852.0","contract":"0x351f59de4fedbdf7601f5592b93db3b9330c1c1d","hasTokens":true,"level":"info","message":"Token balance on polygon:","minBalance":"10.000000000000000000","timestamp":"2025-05-28T13:18:56.910Z"}
+{"level":"info","message":"Found admin tokens on polygon","timestamp":"2025-05-28T13:18:56.910Z"}
+{"address":"0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","balance":"499999.9","contract":"0xdCe769b847a0a697239777D0B1C7dd33b6012ba0","hasTokens":true,"level":"info","message":"Token balance on arbitrum:","minBalance":"100.000000000000000000","timestamp":"2025-05-28T13:18:56.928Z"}
+{"level":"info","message":"Found admin tokens on arbitrum","timestamp":"2025-05-28T13:18:56.928Z"}
+{"balances":{"arbitrum":"499999.9","bsc":"500000.0","ethereum":"1500000.0","polygon":"454852.0","sepolia":"110.0"},"level":"info","message":"Admin role summary for 0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b:","networks":["bsc","sepolia","ethereum","polygon","arbitrum"],"timestamp":"2025-05-28T13:18:56.928Z"}
+{"level":"info","message":"Admin role granted for 0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","timestamp":"2025-05-28T13:18:56.929Z"}
+{"level":"info","message":"Updated user 1 role to admin based on token holdings","timestamp":"2025-05-28T13:18:56.934Z"}
+{"address":"0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","authType":"wallet","authenticated":true,"cookie":{"expires":"2025-06-27T13:14:06.854Z","httpOnly":true,"originalMaxAge":2592000000,"path":"/","sameSite":"lax","secure":false},"guestId":"3fe8a3e22225b0e8b06d7b4b3098ecf9","isAdmin":true,"level":"info","message":"[SessionService] Saving session data:","timestamp":"2025-05-28T13:18:56.937Z","userId":1}
+{"level":"info","message":"Session saved successfully","timestamp":"2025-05-28T13:18:56.941Z"}
+{"level":"info","message":"[linkGuestMessages] Starting for user 1 with guestId=3fe8a3e22225b0e8b06d7b4b3098ecf9, previousGuestId=undefined","timestamp":"2025-05-28T13:18:56.943Z"}
+{"level":"info","message":"[processGuestMessagesWrapper] Processing messages: userId=1, guestId=3fe8a3e22225b0e8b06d7b4b3098ecf9","timestamp":"2025-05-28T13:18:56.949Z"}
+{"level":"info","message":"Processing guest messages for user 1 with guest ID 3fe8a3e22225b0e8b06d7b4b3098ecf9","timestamp":"2025-05-28T13:18:56.951Z"}
+{"level":"info","message":"No guest messages found for guest ID 3fe8a3e22225b0e8b06d7b4b3098ecf9","timestamp":"2025-05-28T13:18:56.961Z"}
+{"level":"info","message":"Marked guest mapping as processed (no messages found) for guest ID 3fe8a3e22225b0e8b06d7b4b3098ecf9","timestamp":"2025-05-28T13:18:56.965Z"}
+{"level":"info","message":"[processGuestMessagesWrapper] Processing messages: userId=1, guestId=22ffc8b90cb9797d120322ebfc24fb5f","timestamp":"2025-05-28T13:18:56.969Z"}
+{"level":"info","message":"Processing guest messages for user 1 with guest ID 22ffc8b90cb9797d120322ebfc24fb5f","timestamp":"2025-05-28T13:18:56.969Z"}
+{"level":"info","message":"Guest messages for guest ID 22ffc8b90cb9797d120322ebfc24fb5f were already processed.","timestamp":"2025-05-28T13:18:56.972Z"}
+{"level":"info","message":"[processGuestMessagesWrapper] Processing messages: userId=1, guestId=d66e4157dfd0dd76e64369ee84bf4009","timestamp":"2025-05-28T13:18:56.977Z"}
+{"level":"info","message":"Processing guest messages for user 1 with guest ID d66e4157dfd0dd76e64369ee84bf4009","timestamp":"2025-05-28T13:18:56.977Z"}
+{"level":"info","message":"Guest messages for guest ID d66e4157dfd0dd76e64369ee84bf4009 were already processed.","timestamp":"2025-05-28T13:18:56.979Z"}
+{"level":"info","message":"[processGuestMessagesWrapper] Processing messages: userId=1, guestId=dfb1bffd21993323e084091b0534ff4f","timestamp":"2025-05-28T13:18:56.985Z"}
+{"level":"info","message":"Processing guest messages for user 1 with guest ID dfb1bffd21993323e084091b0534ff4f","timestamp":"2025-05-28T13:18:56.985Z"}
+{"level":"info","message":"Guest messages for guest ID dfb1bffd21993323e084091b0534ff4f were already processed.","timestamp":"2025-05-28T13:18:56.987Z"}
+{"level":"info","message":"[processGuestMessagesWrapper] Processing messages: userId=1, guestId=8f23022510a7d82d4724b6e69619a706","timestamp":"2025-05-28T13:18:56.994Z"}
+{"level":"info","message":"Processing guest messages for user 1 with guest ID 8f23022510a7d82d4724b6e69619a706","timestamp":"2025-05-28T13:18:56.994Z"}
+{"level":"info","message":"Guest messages for guest ID 8f23022510a7d82d4724b6e69619a706 were already processed.","timestamp":"2025-05-28T13:18:56.995Z"}
+{"level":"info","message":"[processGuestMessagesWrapper] Processing messages: userId=1, guestId=b2185db5534f63a29075ae66404db5c1","timestamp":"2025-05-28T13:18:56.999Z"}
+{"level":"info","message":"Processing guest messages for user 1 with guest ID b2185db5534f63a29075ae66404db5c1","timestamp":"2025-05-28T13:18:56.999Z"}
+{"level":"info","message":"Guest messages for guest ID b2185db5534f63a29075ae66404db5c1 were already processed.","timestamp":"2025-05-28T13:18:57.001Z"}
+{"level":"info","message":"[processGuestMessagesWrapper] Processing messages: userId=1, guestId=ec9893a230932ecc5abcd333d350876e","timestamp":"2025-05-28T13:18:57.004Z"}
+{"level":"info","message":"Processing guest messages for user 1 with guest ID ec9893a230932ecc5abcd333d350876e","timestamp":"2025-05-28T13:18:57.005Z"}
+{"level":"info","message":"Guest messages for guest ID ec9893a230932ecc5abcd333d350876e were already processed.","timestamp":"2025-05-28T13:18:57.006Z"}
+{"level":"info","message":"[processGuestMessagesWrapper] Processing messages: userId=1, guestId=dff2dcf575964f9437437d5fd1ff9c0a","timestamp":"2025-05-28T13:18:57.009Z"}
+{"level":"info","message":"Processing guest messages for user 1 with guest ID dff2dcf575964f9437437d5fd1ff9c0a","timestamp":"2025-05-28T13:18:57.010Z"}
+{"level":"info","message":"Guest messages for guest ID dff2dcf575964f9437437d5fd1ff9c0a were already processed.","timestamp":"2025-05-28T13:18:57.011Z"}
+{"level":"info","message":"[processGuestMessagesWrapper] Processing messages: userId=1, guestId=bf01418860b15404bd4a8576f2c71a92","timestamp":"2025-05-28T13:18:57.015Z"}
+{"level":"info","message":"Processing guest messages for user 1 with guest ID bf01418860b15404bd4a8576f2c71a92","timestamp":"2025-05-28T13:18:57.015Z"}
+{"level":"info","message":"Guest messages for guest ID bf01418860b15404bd4a8576f2c71a92 were already processed.","timestamp":"2025-05-28T13:18:57.017Z"}
+{"level":"info","message":"[processGuestMessagesWrapper] Processing messages: userId=1, guestId=f2b6e1c8c2f5ed8ef53d5d1b6bf6e56e","timestamp":"2025-05-28T13:18:57.020Z"}
+{"level":"info","message":"Processing guest messages for user 1 with guest ID f2b6e1c8c2f5ed8ef53d5d1b6bf6e56e","timestamp":"2025-05-28T13:18:57.021Z"}
+{"level":"info","message":"Guest messages for guest ID f2b6e1c8c2f5ed8ef53d5d1b6bf6e56e were already processed.","timestamp":"2025-05-28T13:18:57.023Z"}
+{"level":"info","message":"[processGuestMessagesWrapper] Processing messages: userId=1, guestId=59fc98c0423c96b7a7ba11af5b873ba4","timestamp":"2025-05-28T13:18:57.027Z"}
+{"level":"info","message":"Processing guest messages for user 1 with guest ID 59fc98c0423c96b7a7ba11af5b873ba4","timestamp":"2025-05-28T13:18:57.029Z"}
+{"level":"info","message":"Guest messages for guest ID 59fc98c0423c96b7a7ba11af5b873ba4 were already processed.","timestamp":"2025-05-28T13:18:57.032Z"}
+{"level":"info","message":"[processGuestMessagesWrapper] Processing messages: userId=1, guestId=8a9ae1e5c07ba11c666e5974141e8f54","timestamp":"2025-05-28T13:18:57.035Z"}
+{"level":"info","message":"Processing guest messages for user 1 with guest ID 8a9ae1e5c07ba11c666e5974141e8f54","timestamp":"2025-05-28T13:18:57.036Z"}
+{"level":"info","message":"Guest messages for guest ID 8a9ae1e5c07ba11c666e5974141e8f54 were already processed.","timestamp":"2025-05-28T13:18:57.037Z"}
+{"level":"info","message":"[processGuestMessagesWrapper] Processing messages: userId=1, guestId=d1db5bb388f00ecd1cf268492853c489","timestamp":"2025-05-28T13:18:57.040Z"}
+{"level":"info","message":"Processing guest messages for user 1 with guest ID d1db5bb388f00ecd1cf268492853c489","timestamp":"2025-05-28T13:18:57.040Z"}
+{"level":"info","message":"Guest messages for guest ID d1db5bb388f00ecd1cf268492853c489 were already processed.","timestamp":"2025-05-28T13:18:57.042Z"}
+{"level":"info","message":"[processGuestMessagesWrapper] Processing messages: userId=1, guestId=172cc69ec74cac73b96cfacdc2ebc94c","timestamp":"2025-05-28T13:18:57.044Z"}
+{"level":"info","message":"Processing guest messages for user 1 with guest ID 172cc69ec74cac73b96cfacdc2ebc94c","timestamp":"2025-05-28T13:18:57.045Z"}
+{"level":"info","message":"Guest messages for guest ID 172cc69ec74cac73b96cfacdc2ebc94c were already processed.","timestamp":"2025-05-28T13:18:57.046Z"}
+{"level":"info","message":"[processGuestMessagesWrapper] Processing messages: userId=1, guestId=d2149d70299a2e847d19e783804bf71d","timestamp":"2025-05-28T13:18:57.049Z"}
+{"level":"info","message":"Processing guest messages for user 1 with guest ID d2149d70299a2e847d19e783804bf71d","timestamp":"2025-05-28T13:18:57.050Z"}
+{"level":"info","message":"Guest messages for guest ID d2149d70299a2e847d19e783804bf71d were already processed.","timestamp":"2025-05-28T13:18:57.051Z"}
+{"address":"0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","authType":"wallet","authenticated":true,"cookie":{"expires":"2025-06-27T13:14:06.854Z","httpOnly":true,"originalMaxAge":2592000000,"path":"/","sameSite":"lax","secure":false},"guestId":"3fe8a3e22225b0e8b06d7b4b3098ecf9","isAdmin":true,"level":"info","message":"[SessionService] Saving session data:","processedGuestIds":["3fe8a3e22225b0e8b06d7b4b3098ecf9","22ffc8b90cb9797d120322ebfc24fb5f","d66e4157dfd0dd76e64369ee84bf4009","dfb1bffd21993323e084091b0534ff4f","8f23022510a7d82d4724b6e69619a706","b2185db5534f63a29075ae66404db5c1","ec9893a230932ecc5abcd333d350876e","dff2dcf575964f9437437d5fd1ff9c0a","bf01418860b15404bd4a8576f2c71a92","f2b6e1c8c2f5ed8ef53d5d1b6bf6e56e","59fc98c0423c96b7a7ba11af5b873ba4","8a9ae1e5c07ba11c666e5974141e8f54","d1db5bb388f00ecd1cf268492853c489","172cc69ec74cac73b96cfacdc2ebc94c","d2149d70299a2e847d19e783804bf71d"],"timestamp":"2025-05-28T13:18:57.054Z","userId":1}
+{"level":"info","message":"Session saved successfully","timestamp":"2025-05-28T13:18:57.058Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:18:57.276Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:18:57.278Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:18:57.294Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:18:57.297Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:18:57.311Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:18:57.313Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:18:57.324Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:18:57.326Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:18:57.338Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:18:57.339Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:18:57.352Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:18:57.354Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:18:57.370Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:18:57.371Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:18:57.389Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:18:57.391Z"}
+{"level":"info","message":"GET /api/auth/check","timestamp":"2025-05-28T13:18:57.417Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:18:57.420Z"}
+{"level":"info","message":"GET /api/tokens/balances?address=0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","timestamp":"2025-05-28T13:18:57.442Z"}
+{"level":"info","message":"Fetching token balances for address: 0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","timestamp":"2025-05-28T13:18:57.443Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:18:57.454Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:18:57.458Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:18:57.476Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:18:57.477Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:18:57.491Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:18:57.494Z"}
+{"level":"info","message":"GET /api/tokens/balances?address=0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","timestamp":"2025-05-28T13:18:58.785Z"}
+{"level":"info","message":"Fetching token balances for address: 0xf45aa4917b3775ba37f48aeb3dc1a943561e9e0b","timestamp":"2025-05-28T13:18:58.786Z"}
+{"action":"call","code":"CALL_EXCEPTION","data":null,"info":{"error":{"code":19,"message":"Unable to perform request"},"payload":{"id":2,"jsonrpc":"2.0","method":"eth_call","params":[{"data":"0x70a08231000000000000000000000000f45aa4917b3775ba37f48aeb3dc1a943561e9e0b","to":"0x351f59de4fedbdf7601f5592b93db3b9330c1c1d"},"latest"]}},"invocation":null,"level":"error","message":"[getUserTokenBalances] Ошибка получения баланса для HB3A (0x351f59de4fedbdf7601f5592b93db3b9330c1c1d) в сети polygon: missing revert data (action=\"call\", data=null, reason=null, transaction={ \"data\": \"0x70a08231000000000000000000000000f45aa4917b3775ba37f48aeb3dc1a943561e9e0b\", \"to\": \"0x351F59dE4FEdBDf7601F5592B93db3B9330c1C1d\" }, invocation=null, revert=null, code=CALL_EXCEPTION, version=6.13.5)","reason":null,"revert":null,"shortMessage":"missing revert data","stack":"Error: missing revert data (action=\"call\", data=null, reason=null, transaction={ \"data\": \"0x70a08231000000000000000000000000f45aa4917b3775ba37f48aeb3dc1a943561e9e0b\", \"to\": \"0x351F59dE4FEdBDf7601F5592B93db3B9330c1C1d\" }, invocation=null, revert=null, code=CALL_EXCEPTION, version=6.13.5)\n at makeError (/app/node_modules/ethers/lib.commonjs/utils/errors.js:129:21)\n at getBuiltinCallException (/app/node_modules/ethers/lib.commonjs/abi/abi-coder.js:105:37)\n at AbiCoder.getBuiltinCallException (/app/node_modules/ethers/lib.commonjs/abi/abi-coder.js:206:16)\n at JsonRpcProvider.getRpcError (/app/node_modules/ethers/lib.commonjs/providers/provider-jsonrpc.js:676:43)\n at /app/node_modules/ethers/lib.commonjs/providers/provider-jsonrpc.js:302:45\n at process.processTicksAndRejections (node:internal/process/task_queues:95:5)","timestamp":"2025-05-28T13:19:00.049Z","transaction":{"data":"0x70a08231000000000000000000000000f45aa4917b3775ba37f48aeb3dc1a943561e9e0b","to":"0x351F59dE4FEdBDf7601F5592B93db3B9330c1C1d"}}
+{"level":"info","message":"GET /api/dle","timestamp":"2025-05-28T13:19:00.417Z"}
+{"level":"info","message":"GET /api/users","timestamp":"2025-05-28T13:19:02.102Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:19:04.148Z"}
+{"level":"info","message":"GET /api/messages?userId=90","timestamp":"2025-05-28T13:19:11.148Z"}
+{"level":"info","message":"GET /api/messages?userId=46","timestamp":"2025-05-28T13:19:22.150Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:19:27.570Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:19:27.572Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:19:27.705Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:19:27.707Z"}
+{"level":"info","message":"DELETE /api/users/46","timestamp":"2025-05-28T13:19:30.248Z"}
+{"level":"info","message":"GET /api/users","timestamp":"2025-05-28T13:19:30.277Z"}
+{"level":"info","message":"GET /api/messages?userId=75","timestamp":"2025-05-28T13:19:33.467Z"}
+{"level":"info","message":"DELETE /api/users/75","timestamp":"2025-05-28T13:19:38.198Z"}
+{"level":"info","message":"GET /api/users","timestamp":"2025-05-28T13:19:38.215Z"}
+{"level":"info","message":"GET /api/messages?userId=58","timestamp":"2025-05-28T13:19:41.268Z"}
+{"level":"info","message":"DELETE /api/users/58","timestamp":"2025-05-28T13:19:46.451Z"}
+{"level":"info","message":"GET /api/users","timestamp":"2025-05-28T13:19:46.470Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:19:47.252Z"}
+{"level":"info","message":"GET /api/messages?userId=47","timestamp":"2025-05-28T13:19:50.970Z"}
+{"level":"info","message":"DELETE /api/users/47","timestamp":"2025-05-28T13:19:55.863Z"}
+{"level":"info","message":"GET /api/users","timestamp":"2025-05-28T13:19:55.882Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:19:57.804Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:19:57.805Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:19:57.946Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:19:57.948Z"}
+{"level":"info","message":"GET /api/messages?userId=57","timestamp":"2025-05-28T13:19:59.198Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:19:59.208Z"}
+{"level":"info","message":"DELETE /api/users/57","timestamp":"2025-05-28T13:20:03.449Z"}
+{"level":"info","message":"GET /api/users","timestamp":"2025-05-28T13:20:03.467Z"}
+{"level":"info","message":"GET /api/messages?userId=56","timestamp":"2025-05-28T13:20:07.240Z"}
+{"level":"info","message":"DELETE /api/users/56","timestamp":"2025-05-28T13:20:09.526Z"}
+{"level":"info","message":"GET /api/users","timestamp":"2025-05-28T13:20:09.545Z"}
+{"level":"info","message":"GET /api/messages?userId=55","timestamp":"2025-05-28T13:20:14.152Z"}
+{"level":"info","message":"DELETE /api/users/55","timestamp":"2025-05-28T13:20:18.249Z"}
+{"level":"info","message":"GET /api/users","timestamp":"2025-05-28T13:20:18.267Z"}
+{"level":"info","message":"GET /api/messages?userId=54","timestamp":"2025-05-28T13:20:21.980Z"}
+{"level":"info","message":"DELETE /api/users/54","timestamp":"2025-05-28T13:20:26.596Z"}
+{"level":"info","message":"GET /api/users","timestamp":"2025-05-28T13:20:26.615Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:20:28.030Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:20:28.032Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:20:28.177Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:20:28.178Z"}
+{"level":"info","message":"GET /api/messages?userId=53","timestamp":"2025-05-28T13:20:29.804Z"}
+{"level":"info","message":"DELETE /api/users/53","timestamp":"2025-05-28T13:20:33.840Z"}
+{"level":"info","message":"GET /api/users","timestamp":"2025-05-28T13:20:33.861Z"}
+{"level":"info","message":"GET /api/messages?userId=52","timestamp":"2025-05-28T13:20:36.940Z"}
+{"level":"info","message":"DELETE /api/users/52","timestamp":"2025-05-28T13:20:41.795Z"}
+{"level":"info","message":"GET /api/users","timestamp":"2025-05-28T13:20:41.810Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:20:42.232Z"}
+{"level":"info","message":"GET /api/messages?userId=51","timestamp":"2025-05-28T13:20:46.479Z"}
+{"level":"info","message":"DELETE /api/users/51","timestamp":"2025-05-28T13:20:50.305Z"}
+{"level":"info","message":"GET /api/users","timestamp":"2025-05-28T13:20:50.324Z"}
+{"level":"info","message":"GET /api/messages?userId=50","timestamp":"2025-05-28T13:20:53.902Z"}
+{"level":"info","message":"DELETE /api/users/50","timestamp":"2025-05-28T13:20:57.699Z"}
+{"level":"info","message":"GET /api/users","timestamp":"2025-05-28T13:20:57.719Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:20:58.258Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:20:58.259Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:20:58.389Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:20:58.401Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:20:58.403Z"}
+{"level":"info","message":"GET /api/messages?userId=49","timestamp":"2025-05-28T13:21:03.118Z"}
+{"level":"info","message":"DELETE /api/users/49","timestamp":"2025-05-28T13:21:04.581Z"}
+{"level":"info","message":"GET /api/users","timestamp":"2025-05-28T13:21:04.600Z"}
+{"level":"info","message":"GET /api/messages?userId=48","timestamp":"2025-05-28T13:21:08.081Z"}
+{"level":"info","message":"DELETE /api/users/48","timestamp":"2025-05-28T13:21:11.771Z"}
+{"level":"info","message":"GET /api/users","timestamp":"2025-05-28T13:21:11.789Z"}
+{"level":"info","message":"GET /api/messages?userId=88","timestamp":"2025-05-28T13:21:21.666Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:21:28.491Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:21:28.493Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:21:28.634Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:21:28.636Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:21:32.657Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:21:53.446Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:21:58.743Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:21:58.746Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:21:58.873Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:21:58.875Z"}
+{"level":"info","message":"GET /api/users","timestamp":"2025-05-28T13:22:12.041Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:22:26.447Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:22:26.450Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:22:26.570Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:22:26.572Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:22:28.172Z"}
+{"level":"info","message":"No new messages found","timestamp":"2025-05-28T13:22:48.242Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:22:56.975Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:22:56.978Z"}
+{"level":"info","message":"GET /api/auth/identities","timestamp":"2025-05-28T13:22:56.990Z"}
+{"level":"info","message":"[IdentityService] Found 3 identities for user 1","timestamp":"2025-05-28T13:22:56.992Z"}
diff --git a/backend/logs/error.log b/backend/logs/error.log
index 6356810..887c7b6 100644
--- a/backend/logs/error.log
+++ b/backend/logs/error.log
@@ -1,9 +1,31 @@
-{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-05-28T11:19:59.653Z"}
-{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T11:19:59.654Z"}
-{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T11:19:59.654Z"}
-{"code":"EPROTOCOL","command":"CONN","level":"error","message":"Error sending email: Invalid greeting. response=421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220: 421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220","response":"421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220","responseCode":421,"stack":"Error: Invalid greeting. response=421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220: 421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220\n at SMTPConnection._actionGreeting (/app/node_modules/nodemailer/lib/smtp-connection/index.js:1251:27)\n at SMTPConnection._processResponse (/app/node_modules/nodemailer/lib/smtp-connection/index.js:993:20)\n at SMTPConnection._onData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:774:14)\n at SMTPConnection._onSocketData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:195:44)\n at TLSSocket.emit (node:events:524:28)\n at addChunk (node:internal/streams/readable:561:12)\n at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)\n at Readable.push (node:internal/streams/readable:392:5)\n at TLSWrap.onStreamRead (node:internal/stream_base_commons:191:23)","timestamp":"2025-05-28T11:22:09.742Z"}
-{"code":"EPROTOCOL","command":"CONN","level":"error","message":"Error processing incoming email: Invalid greeting. response=421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220: 421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220","response":"421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220","responseCode":421,"stack":"Error: Invalid greeting. response=421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220: 421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220\n at SMTPConnection._actionGreeting (/app/node_modules/nodemailer/lib/smtp-connection/index.js:1251:27)\n at SMTPConnection._processResponse (/app/node_modules/nodemailer/lib/smtp-connection/index.js:993:20)\n at SMTPConnection._onData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:774:14)\n at SMTPConnection._onSocketData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:195:44)\n at TLSSocket.emit (node:events:524:28)\n at addChunk (node:internal/streams/readable:561:12)\n at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)\n at Readable.push (node:internal/streams/readable:392:5)\n at TLSWrap.onStreamRead (node:internal/stream_base_commons:191:23)","timestamp":"2025-05-28T11:22:09.743Z"}
-{"code":"EPROTOCOL","command":"CONN","level":"error","message":"Error sending email: Invalid greeting. response=421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220: 421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220","response":"421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220","responseCode":421,"stack":"Error: Invalid greeting. response=421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220: 421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220\n at SMTPConnection._actionGreeting (/app/node_modules/nodemailer/lib/smtp-connection/index.js:1251:27)\n at SMTPConnection._processResponse (/app/node_modules/nodemailer/lib/smtp-connection/index.js:993:20)\n at SMTPConnection._onData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:774:14)\n at SMTPConnection._onSocketData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:195:44)\n at TLSSocket.emit (node:events:524:28)\n at addChunk (node:internal/streams/readable:561:12)\n at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)\n at Readable.push (node:internal/streams/readable:392:5)\n at TLSWrap.onStreamRead (node:internal/stream_base_commons:191:23)","timestamp":"2025-05-28T11:22:51.094Z"}
-{"code":"EPROTOCOL","command":"CONN","level":"error","message":"Error processing incoming email: Invalid greeting. response=421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220: 421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220","response":"421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220","responseCode":421,"stack":"Error: Invalid greeting. response=421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220: 421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220\n at SMTPConnection._actionGreeting (/app/node_modules/nodemailer/lib/smtp-connection/index.js:1251:27)\n at SMTPConnection._processResponse (/app/node_modules/nodemailer/lib/smtp-connection/index.js:993:20)\n at SMTPConnection._onData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:774:14)\n at SMTPConnection._onSocketData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:195:44)\n at TLSSocket.emit (node:events:524:28)\n at addChunk (node:internal/streams/readable:561:12)\n at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)\n at Readable.push (node:internal/streams/readable:392:5)\n at TLSWrap.onStreamRead (node:internal/stream_base_commons:191:23)","timestamp":"2025-05-28T11:22:51.094Z"}
-{"code":"EPROTOCOL","command":"CONN","level":"error","message":"Error sending email: Invalid greeting. response=421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220: 421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220","response":"421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220","responseCode":421,"stack":"Error: Invalid greeting. response=421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220: 421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220\n at SMTPConnection._actionGreeting (/app/node_modules/nodemailer/lib/smtp-connection/index.js:1251:27)\n at SMTPConnection._processResponse (/app/node_modules/nodemailer/lib/smtp-connection/index.js:993:20)\n at SMTPConnection._onData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:774:14)\n at SMTPConnection._onSocketData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:195:44)\n at TLSSocket.emit (node:events:524:28)\n at addChunk (node:internal/streams/readable:561:12)\n at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)\n at Readable.push (node:internal/streams/readable:392:5)\n at TLSWrap.onStreamRead (node:internal/stream_base_commons:191:23)","timestamp":"2025-05-28T11:23:00.237Z"}
-{"code":"EPROTOCOL","command":"CONN","level":"error","message":"Error processing incoming email: Invalid greeting. response=421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220: 421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220","response":"421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220","responseCode":421,"stack":"Error: Invalid greeting. response=421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220: 421 4.7.0 smtp.hostland.ru Error: too many connections from 5.139.232.220\n at SMTPConnection._actionGreeting (/app/node_modules/nodemailer/lib/smtp-connection/index.js:1251:27)\n at SMTPConnection._processResponse (/app/node_modules/nodemailer/lib/smtp-connection/index.js:993:20)\n at SMTPConnection._onData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:774:14)\n at SMTPConnection._onSocketData (/app/node_modules/nodemailer/lib/smtp-connection/index.js:195:44)\n at TLSSocket.emit (node:events:524:28)\n at addChunk (node:internal/streams/readable:561:12)\n at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)\n at Readable.push (node:internal/streams/readable:392:5)\n at TLSWrap.onStreamRead (node:internal/stream_base_commons:191:23)","timestamp":"2025-05-28T11:23:00.237Z"}
+{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-05-28T13:03:06.859Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:03:06.860Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:03:06.860Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:03:06.860Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:03:06.861Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:03:06.861Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:03:06.861Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:03:06.861Z"}
+{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-05-28T13:04:17.747Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:04:17.747Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:04:17.748Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:04:17.748Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:04:17.748Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:04:43.277Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:05:12.662Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:05:12.663Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:06:07.601Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:06:07.608Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:06:07.609Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:07:41.568Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:07:41.568Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:07:41.569Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:07:41.569Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:07:41.569Z"}
+{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-05-28T13:12:13.523Z"}
+{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-05-28T13:14:17.520Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:14:17.521Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:14:17.522Z"}
+{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-05-28T13:14:17.522Z"}
+{"level":"error","message":"Error: undefined","timestamp":"2025-05-28T13:18:22.803Z"}
+{"action":"call","code":"CALL_EXCEPTION","data":null,"info":{"error":{"code":19,"message":"Unable to perform request"},"payload":{"id":2,"jsonrpc":"2.0","method":"eth_call","params":[{"data":"0x70a08231000000000000000000000000f45aa4917b3775ba37f48aeb3dc1a943561e9e0b","to":"0x351f59de4fedbdf7601f5592b93db3b9330c1c1d"},"latest"]}},"invocation":null,"level":"error","message":"[getUserTokenBalances] Ошибка получения баланса для HB3A (0x351f59de4fedbdf7601f5592b93db3b9330c1c1d) в сети polygon: missing revert data (action=\"call\", data=null, reason=null, transaction={ \"data\": \"0x70a08231000000000000000000000000f45aa4917b3775ba37f48aeb3dc1a943561e9e0b\", \"to\": \"0x351F59dE4FEdBDf7601F5592B93db3B9330c1C1d\" }, invocation=null, revert=null, code=CALL_EXCEPTION, version=6.13.5)","reason":null,"revert":null,"shortMessage":"missing revert data","stack":"Error: missing revert data (action=\"call\", data=null, reason=null, transaction={ \"data\": \"0x70a08231000000000000000000000000f45aa4917b3775ba37f48aeb3dc1a943561e9e0b\", \"to\": \"0x351F59dE4FEdBDf7601F5592B93db3B9330c1C1d\" }, invocation=null, revert=null, code=CALL_EXCEPTION, version=6.13.5)\n at makeError (/app/node_modules/ethers/lib.commonjs/utils/errors.js:129:21)\n at getBuiltinCallException (/app/node_modules/ethers/lib.commonjs/abi/abi-coder.js:105:37)\n at AbiCoder.getBuiltinCallException (/app/node_modules/ethers/lib.commonjs/abi/abi-coder.js:206:16)\n at JsonRpcProvider.getRpcError (/app/node_modules/ethers/lib.commonjs/providers/provider-jsonrpc.js:676:43)\n at /app/node_modules/ethers/lib.commonjs/providers/provider-jsonrpc.js:302:45\n at process.processTicksAndRejections (node:internal/process/task_queues:95:5)","timestamp":"2025-05-28T13:19:00.049Z","transaction":{"data":"0x70a08231000000000000000000000000f45aa4917b3775ba37f48aeb3dc1a943561e9e0b","to":"0x351F59dE4FEdBDf7601F5592B93db3B9330c1C1d"}}
diff --git a/backend/routes/messages.js b/backend/routes/messages.js
new file mode 100644
index 0000000..ccc6c5b
--- /dev/null
+++ b/backend/routes/messages.js
@@ -0,0 +1,23 @@
+const express = require('express');
+const router = express.Router();
+const db = require('../db');
+
+// GET /api/messages?userId=123
+router.get('/', async (req, res) => {
+ const userId = req.query.userId;
+ if (!userId) return res.status(400).json({ error: 'userId required' });
+ try {
+ const result = await db.getQuery()(
+ `SELECT id, user_id, sender_type, content, channel, role, direction, created_at, attachment_filename, attachment_mimetype, attachment_size, attachment_data, metadata
+ FROM messages
+ WHERE user_id = $1
+ ORDER BY created_at ASC`,
+ [userId]
+ );
+ res.json(result.rows);
+ } catch (e) {
+ res.status(500).json({ error: 'DB error', details: e.message });
+ }
+});
+
+module.exports = router;
\ No newline at end of file
diff --git a/backend/routes/users.js b/backend/routes/users.js
index 2139a04..3f1afd3 100644
--- a/backend/routes/users.js
+++ b/backend/routes/users.js
@@ -138,4 +138,54 @@ router.get('/', async (req, res) => {
});
*/
+// PATCH /api/users/:id — обновить имя и язык
+router.patch('/:id', async (req, res) => {
+ const userId = req.params.id;
+ const { name, language } = req.body;
+ if (!name && !language) return res.status(400).json({ error: 'Nothing to update' });
+ try {
+ const fields = [];
+ const values = [];
+ let idx = 1;
+ if (name !== undefined) {
+ // Разделяем имя на first_name и last_name (по пробелу)
+ const [firstName, ...lastNameArr] = name.split(' ');
+ fields.push(`first_name = $${idx++}`);
+ values.push(firstName);
+ fields.push(`last_name = $${idx++}`);
+ values.push(lastNameArr.join(' ') || null);
+ }
+ if (language !== undefined) {
+ fields.push(`preferred_language = $${idx++}`);
+ values.push(Array.isArray(language) ? JSON.stringify(language) : language);
+ }
+ values.push(userId);
+ const sql = `UPDATE users SET ${fields.join(', ')} WHERE id = $${idx} RETURNING *`;
+ const result = await db.getQuery()(sql, values);
+ res.json(result.rows[0]);
+ } catch (e) {
+ res.status(500).json({ error: 'DB error', details: e.message });
+ }
+});
+
+// DELETE /api/users/:id — удалить контакт и все связанные данные
+router.delete('/:id', async (req, res) => {
+ const userId = req.params.id;
+ const client = await db.getPool().connect();
+ try {
+ await client.query('BEGIN');
+ await client.query('DELETE FROM user_identities WHERE user_id = $1', [userId]);
+ await client.query('DELETE FROM messages WHERE user_id = $1', [userId]);
+ // Добавьте другие связанные таблицы, если нужно
+ await client.query('DELETE FROM users WHERE id = $1', [userId]);
+ await client.query('COMMIT');
+ res.json({ success: true });
+ } catch (e) {
+ await client.query('ROLLBACK');
+ res.status(500).json({ error: 'DB error', details: e.message });
+ } finally {
+ client.release();
+ }
+});
+
module.exports = router;
diff --git a/frontend/src/components/ContactDetails.vue b/frontend/src/components/ContactDetails.vue
new file mode 100644
index 0000000..cbffd3d
--- /dev/null
+++ b/frontend/src/components/ContactDetails.vue
@@ -0,0 +1,320 @@
+
+ Детали контакта
+
+
+
+