ваше сообщение коммита
This commit is contained in:
@@ -1,48 +1,26 @@
|
||||
FROM node:20-bookworm as nodebase
|
||||
|
||||
FROM ubuntu:24.04
|
||||
FROM node:20-bookworm
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Устанавливаем зависимости, включая Python для node-gyp
|
||||
RUN apt-get update && apt-get install -y \
|
||||
python3 make g++ cmake openssl libssl-dev \
|
||||
ca-certificates curl gnupg lsb-release \
|
||||
build-essential python3-dev libc6-dev \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
# Устанавливаем только docker-cli (без демона)
|
||||
RUN apt-get update && \
|
||||
apt-get install -y ca-certificates curl gnupg lsb-release && \
|
||||
install -m 0755 -d /etc/apt/keyrings && \
|
||||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \
|
||||
chmod a+r /etc/apt/keyrings/docker.gpg && \
|
||||
echo \
|
||||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
|
||||
$(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
|
||||
tee /etc/apt/sources.list.d/docker.list > /dev/null && \
|
||||
apt-get update && \
|
||||
apt-get install -y docker-ce-cli && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Устанавливаем Node.js 20 и yarn
|
||||
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
|
||||
apt-get install -y nodejs && \
|
||||
npm install -g yarn
|
||||
|
||||
# Копируем libnode.so.109 из node:20-bookworm
|
||||
COPY --from=nodebase /usr/lib/x86_64-linux-gnu/libnode.so.109 /usr/lib/x86_64-linux-gnu/libnode.so.109
|
||||
|
||||
# Устанавливаем node-gyp глобально
|
||||
RUN npm install -g node-gyp
|
||||
|
||||
# Копируем package.json и yarn.lock для установки зависимостей
|
||||
COPY package.json yarn.lock ./
|
||||
|
||||
# Устанавливаем зависимости
|
||||
RUN yarn install --frozen-lockfile
|
||||
|
||||
# ПРИНУДИТЕЛЬНО пересобираем hnswlib-node из исходников
|
||||
RUN echo "Пересобираем hnswlib-node из исходников..." && \
|
||||
cd node_modules/hnswlib-node && \
|
||||
rm -rf build/ && \
|
||||
node-gyp rebuild --verbose
|
||||
|
||||
# Проверяем версию libstdc++ и наличие нужного символа
|
||||
RUN echo "Версия libstdc++:" && strings /lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX | tail -5
|
||||
RUN echo "Проверка GLIBCXX_3.4.32:" && strings /lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX_3.4.32 || echo "GLIBCXX_3.4.32 not found"
|
||||
|
||||
# Копируем остальные файлы проекта
|
||||
COPY . .
|
||||
|
||||
# Экспозим порт
|
||||
EXPOSE 8000
|
||||
|
||||
# Команда запуска по умолчанию
|
||||
CMD ["yarn", "run", "dev"]
|
||||
@@ -16,7 +16,6 @@ const userTagsRoutes = require('./routes/userTags');
|
||||
const tagsInitRoutes = require('./routes/tagsInit');
|
||||
const tagsRoutes = require('./routes/tags');
|
||||
const ragRoutes = require('./routes/rag'); // Новый роут для RAG-ассистента
|
||||
const cloudflareRoutes = require('./routes/cloudflare');
|
||||
const monitoringRoutes = require('./routes/monitoring');
|
||||
|
||||
// Проверка и создание директорий для хранения данных контрактов
|
||||
@@ -192,7 +191,6 @@ app.use('/api/tags', tagsInitRoutes);
|
||||
app.use('/api/tags', tagsRoutes);
|
||||
app.use('/api/identities', identitiesRoutes);
|
||||
app.use('/api/rag', ragRoutes); // Подключаем роут
|
||||
app.use('/api/cloudflare', cloudflareRoutes);
|
||||
app.use('/api/monitoring', monitoringRoutes);
|
||||
|
||||
const nonceStore = new Map(); // или любая другая реализация хранилища nonce
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
function writeCloudflaredEnv({ tunnelToken, domain }) {
|
||||
console.log('[writeCloudflaredEnv] tunnelToken:', tunnelToken, 'domain:', domain);
|
||||
const envPath = path.join(__dirname, '../cloudflared.env');
|
||||
let content = '';
|
||||
if (tunnelToken) content += `TUNNEL_TOKEN=${tunnelToken}\n`;
|
||||
if (domain) content += `DOMAIN=${domain}\n`;
|
||||
console.log('[writeCloudflaredEnv] Writing to:', envPath, 'content:', content);
|
||||
fs.writeFileSync(envPath, content, 'utf8');
|
||||
console.log('[writeCloudflaredEnv] File written successfully');
|
||||
}
|
||||
|
||||
module.exports = { writeCloudflaredEnv };
|
||||
@@ -1,6 +0,0 @@
|
||||
CREATE TABLE IF NOT EXISTS ipfs_publications (
|
||||
id SERIAL PRIMARY KEY,
|
||||
cid TEXT NOT NULL,
|
||||
url TEXT NOT NULL,
|
||||
published_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
@@ -1,7 +0,0 @@
|
||||
CREATE TABLE IF NOT EXISTS cloudflare_settings (
|
||||
id SERIAL PRIMARY KEY,
|
||||
api_token TEXT,
|
||||
tunnel_token TEXT,
|
||||
domain TEXT,
|
||||
updated_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
@@ -1 +0,0 @@
|
||||
ALTER TABLE cloudflare_settings ADD COLUMN account_id TEXT;
|
||||
@@ -1 +0,0 @@
|
||||
ALTER TABLE cloudflare_settings ADD COLUMN tunnel_id TEXT;
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2116,3 +2116,300 @@
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-04T13:45:08.332Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-04T13:45:08.332Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-04T13:45:08.333Z"}
|
||||
{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-07-04T21:13:45.482Z"}
|
||||
{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-07-04T21:20:44.495Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-04T21:20:44.496Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-04T21:20:44.496Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-04T21:20:44.496Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-04T21:20:44.496Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-04T21:20:44.496Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-04T21:20:44.496Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-04T21:20:44.496Z"}
|
||||
{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-07-04T21:24:28.352Z"}
|
||||
{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-07-04T21:27:02.147Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-04T21:27:02.148Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-04T21:27:02.149Z"}
|
||||
{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-07-04T21:28:27.860Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-04T21:28:27.860Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-04T21:28:27.861Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-04T21:28:27.861Z"}
|
||||
{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-07-04T21:28:43.060Z"}
|
||||
{"level":"error","message":"Uncaught Exception: Not authenticated","stack":"Error: Not authenticated\n at Connection.openBox (/app/node_modules/imap/lib/Connection.js:409:11)\n at Connection.<anonymous> (/app/services/emailBot.js:105:19)\n at Object.onceWrapper (node:events:638:28)\n at Connection.emit (node:events:536:35)\n at Connection.<anonymous> (/app/node_modules/imap/lib/Connection.js:1623:12)\n at Connection._resTagged (/app/node_modules/imap/lib/Connection.js:1535:22)\n at Parser.<anonymous> (/app/node_modules/imap/lib/Connection.js:194:10)\n at Parser.emit (node:events:524:28)\n at Parser._resTagged (/app/node_modules/imap/lib/Parser.js:175:10)\n at Parser._parse (/app/node_modules/imap/lib/Parser.js:139:16)","timestamp":"2025-07-04T21:29:10.790Z"}
|
||||
{"level":"error","message":"Uncaught Exception: Cannot read properties of undefined (reading 'type')","stack":"TypeError: Cannot read properties of undefined (reading 'type')\n at Connection._resUntagged (/app/node_modules/imap/lib/Connection.js:1265:52)\n at Parser.<anonymous> (/app/node_modules/imap/lib/Connection.js:191:10)\n at Parser.emit (node:events:524:28)\n at Parser._resUntagged (/app/node_modules/imap/lib/Parser.js:271:10)\n at Parser._parse (/app/node_modules/imap/lib/Parser.js:137:16)\n at Parser._tryread (/app/node_modules/imap/lib/Parser.js:82:15)\n at Parser._cbReadable (/app/node_modules/imap/lib/Parser.js:53:12)\n at TLSSocket.emit (node:events:524:28)\n at emitReadable_ (node:internal/streams/readable:834:12)\n at process.processTicksAndRejections (node:internal/process/task_queues:81:21)","timestamp":"2025-07-04T21:30:17.484Z"}
|
||||
{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-07-04T21:30:30.493Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-04T21:30:30.494Z"}
|
||||
{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-07-04T21:30:45.693Z"}
|
||||
{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-07-04T21:34:57.254Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-04T21:34:57.255Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-04T21:34:57.255Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-04T21:34:57.255Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-04T21:34:57.255Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-04T21:34:57.255Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-04T21:34:57.255Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-04T21:34:57.255Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-04T21:34:57.255Z"}
|
||||
{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-07-05T08:53:24.175Z"}
|
||||
{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-07-05T09:03:27.719Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:03:27.720Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:03:27.720Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:03:27.720Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:03:27.720Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:03:27.720Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:03:27.720Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:03:27.720Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:03:27.720Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:03:27.720Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:03:27.720Z"}
|
||||
{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-07-05T09:04:32.829Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:04:32.829Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:04:32.829Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:04:53.116Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:05:58.665Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:05:58.666Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:06:43.823Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:10:20.491Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:10:20.491Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:10:20.491Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:10:20.491Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:10:20.491Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:10:20.492Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:10:20.492Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:12:31.430Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:12:31.431Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:12:31.432Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T09:12:31.432Z"}
|
||||
{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-07-05T18:46:34.929Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:46:34.930Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:46:34.930Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:46:34.931Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:46:34.931Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:46:34.931Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:46:34.931Z"}
|
||||
{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-07-05T18:53:14.933Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:53:14.935Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:53:14.935Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:53:14.936Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:53:14.936Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:53:14.936Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:53:14.936Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:53:14.936Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:53:14.936Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:53:14.936Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:53:14.936Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:53:14.936Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:53:14.937Z"}
|
||||
{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-07-05T18:53:33.976Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:53:33.977Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:53:33.977Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:58:00.676Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:58:00.676Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:58:00.676Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:58:00.676Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:58:00.677Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:58:00.677Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:58:00.677Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:58:00.677Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:58:00.677Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:58:00.677Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:58:00.678Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:58:00.678Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:58:48.278Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:59:11.087Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T18:59:11.087Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:01:01.557Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:01:01.558Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:01:01.558Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:01:01.558Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:01:20.679Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:01:20.679Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:02:08.281Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:02:27.341Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:02:27.342Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:03:14.921Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:03:34.104Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:03:34.104Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:04:40.711Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:04:40.712Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:04:40.712Z"}
|
||||
{"level":"error","message":"Uncaught Exception: Cannot set properties of undefined (setting 'name')","stack":"TypeError: Cannot set properties of undefined (setting 'name')\n at Connection.<anonymous> (/app/node_modules/imap/lib/Connection.js:431:22)\n at Connection._resTagged (/app/node_modules/imap/lib/Connection.js:1535:22)\n at Parser.<anonymous> (/app/node_modules/imap/lib/Connection.js:194:10)\n at Parser.emit (node:events:524:28)\n at Parser._resTagged (/app/node_modules/imap/lib/Parser.js:175:10)\n at Parser._parse (/app/node_modules/imap/lib/Parser.js:139:16)\n at Parser._tryread (/app/node_modules/imap/lib/Parser.js:82:15)\n at Parser._cbReadable (/app/node_modules/imap/lib/Parser.js:53:12)\n at TLSSocket.emit (node:events:524:28)\n at emitReadable_ (node:internal/streams/readable:834:12)","timestamp":"2025-07-05T19:05:46.917Z"}
|
||||
{"level":"error","message":"Uncaught Exception: Cannot read properties of undefined (reading 'type')","stack":"TypeError: Cannot read properties of undefined (reading 'type')\n at Connection._resUntagged (/app/node_modules/imap/lib/Connection.js:1265:52)\n at Parser.<anonymous> (/app/node_modules/imap/lib/Connection.js:191:10)\n at Parser.emit (node:events:524:28)\n at Parser._resUntagged (/app/node_modules/imap/lib/Parser.js:271:10)\n at Parser._parse (/app/node_modules/imap/lib/Parser.js:137:16)\n at Parser._tryread (/app/node_modules/imap/lib/Parser.js:82:15)\n at Parser._cbReadable (/app/node_modules/imap/lib/Parser.js:53:12)\n at TLSSocket.emit (node:events:524:28)\n at emitReadable_ (node:internal/streams/readable:834:12)\n at process.processTicksAndRejections (node:internal/process/task_queues:81:21)","timestamp":"2025-07-05T19:05:47.002Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:05:47.493Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:05:47.494Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:05:47.494Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:08:04.642Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:08:04.643Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:08:04.643Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:08:04.643Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:08:04.643Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:08:04.643Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:09:07.514Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:09:07.515Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:09:07.515Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:09:55.004Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:10:14.238Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:10:14.239Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:11:24.583Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:11:24.587Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:11:24.588Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:12:27.512Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:12:27.512Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:12:27.513Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:15:47.485Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:15:47.486Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:15:47.487Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:15:47.487Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:15:47.488Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:15:47.488Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:15:47.488Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:15:47.488Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:15:47.488Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:16:54.457Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:16:54.458Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:16:54.458Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:17:41.916Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:18:00.784Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:18:00.784Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:19:07.422Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:19:07.423Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:19:07.423Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:21:20.991Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:21:20.992Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:21:20.992Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:21:20.992Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:21:20.993Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:21:20.993Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:22:27.568Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:22:27.568Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:22:27.569Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: write after end","timestamp":"2025-07-05T19:23:29.108Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: write after end","timestamp":"2025-07-05T19:23:29.108Z"}
|
||||
{"level":"error","message":"Uncaught Exception: Cannot set properties of undefined (setting 'name')","stack":"TypeError: Cannot set properties of undefined (setting 'name')\n at Connection.<anonymous> (/app/node_modules/imap/lib/Connection.js:431:22)\n at Connection._resTagged (/app/node_modules/imap/lib/Connection.js:1535:22)\n at Parser.<anonymous> (/app/node_modules/imap/lib/Connection.js:194:10)\n at Parser.emit (node:events:524:28)\n at Parser._resTagged (/app/node_modules/imap/lib/Parser.js:175:10)\n at Parser._parse (/app/node_modules/imap/lib/Parser.js:139:16)\n at Parser._tryread (/app/node_modules/imap/lib/Parser.js:82:15)\n at Parser._cbReadable (/app/node_modules/imap/lib/Parser.js:53:12)\n at TLSSocket.emit (node:events:524:28)\n at emitReadable_ (node:internal/streams/readable:834:12)","timestamp":"2025-07-05T19:24:40.124Z"}
|
||||
{"level":"error","message":"Uncaught Exception: Cannot read properties of undefined (reading 'type')","stack":"TypeError: Cannot read properties of undefined (reading 'type')\n at Connection._resUntagged (/app/node_modules/imap/lib/Connection.js:1265:52)\n at Parser.<anonymous> (/app/node_modules/imap/lib/Connection.js:191:10)\n at Parser.emit (node:events:524:28)\n at Parser._resUntagged (/app/node_modules/imap/lib/Parser.js:271:10)\n at Parser._parse (/app/node_modules/imap/lib/Parser.js:137:16)\n at Parser._tryread (/app/node_modules/imap/lib/Parser.js:82:15)\n at Parser._cbReadable (/app/node_modules/imap/lib/Parser.js:53:12)\n at TLSSocket.emit (node:events:524:28)\n at emitReadable_ (node:internal/streams/readable:834:12)\n at process.processTicksAndRejections (node:internal/process/task_queues:81:21)","timestamp":"2025-07-05T19:24:40.309Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:24:40.889Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:24:40.890Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:24:40.890Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:24:40.890Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:25:28.668Z"}
|
||||
{"level":"error","message":"Uncaught Exception: Cannot set properties of undefined (setting 'name')","stack":"TypeError: Cannot set properties of undefined (setting 'name')\n at Connection.<anonymous> (/app/node_modules/imap/lib/Connection.js:431:22)\n at Connection._resTagged (/app/node_modules/imap/lib/Connection.js:1535:22)\n at Parser.<anonymous> (/app/node_modules/imap/lib/Connection.js:194:10)\n at Parser.emit (node:events:524:28)\n at Parser._resTagged (/app/node_modules/imap/lib/Parser.js:175:10)\n at Parser._parse (/app/node_modules/imap/lib/Parser.js:139:16)\n at Parser._tryread (/app/node_modules/imap/lib/Parser.js:82:15)\n at Parser._cbReadable (/app/node_modules/imap/lib/Parser.js:53:12)\n at TLSSocket.emit (node:events:524:28)\n at emitReadable_ (node:internal/streams/readable:834:12)","timestamp":"2025-07-05T19:29:06.521Z"}
|
||||
{"level":"error","message":"Uncaught Exception: Cannot read properties of undefined (reading 'type')","stack":"TypeError: Cannot read properties of undefined (reading 'type')\n at Connection._resUntagged (/app/node_modules/imap/lib/Connection.js:1265:52)\n at Parser.<anonymous> (/app/node_modules/imap/lib/Connection.js:191:10)\n at Parser.emit (node:events:524:28)\n at Parser._resUntagged (/app/node_modules/imap/lib/Parser.js:271:10)\n at Parser._parse (/app/node_modules/imap/lib/Parser.js:137:16)\n at Parser._tryread (/app/node_modules/imap/lib/Parser.js:82:15)\n at Parser._cbReadable (/app/node_modules/imap/lib/Parser.js:53:12)\n at TLSSocket.emit (node:events:524:28)\n at emitReadable_ (node:internal/streams/readable:834:12)\n at process.processTicksAndRejections (node:internal/process/task_queues:81:21)","timestamp":"2025-07-05T19:29:06.612Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:29:07.497Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:29:07.497Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:29:07.498Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:29:07.498Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:29:07.498Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:29:07.498Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:29:07.498Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:29:07.498Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:29:07.498Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:29:07.498Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:29:07.499Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:31:24.682Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:31:24.682Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:31:24.682Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:31:24.682Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:31:24.683Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:31:24.683Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:32:31.089Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:32:31.090Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:32:31.090Z"}
|
||||
{"level":"error","message":"Uncaught Exception: Cannot set properties of undefined (setting 'name')","stack":"TypeError: Cannot set properties of undefined (setting 'name')\n at Connection.<anonymous> (/app/node_modules/imap/lib/Connection.js:431:22)\n at Connection._resTagged (/app/node_modules/imap/lib/Connection.js:1535:22)\n at Parser.<anonymous> (/app/node_modules/imap/lib/Connection.js:194:10)\n at Parser.emit (node:events:524:28)\n at Parser._resTagged (/app/node_modules/imap/lib/Parser.js:175:10)\n at Parser._parse (/app/node_modules/imap/lib/Parser.js:139:16)\n at Parser._tryread (/app/node_modules/imap/lib/Parser.js:82:15)\n at Parser._cbReadable (/app/node_modules/imap/lib/Parser.js:53:12)\n at TLSSocket.emit (node:events:524:28)\n at emitReadable_ (node:internal/streams/readable:834:12)","timestamp":"2025-07-05T19:33:33.543Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:33:34.415Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:33:34.415Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:33:34.416Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:34:40.859Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:34:40.861Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:34:40.861Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:36:35.004Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:36:35.008Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:36:35.009Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:36:35.009Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:36:54.176Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:36:54.177Z"}
|
||||
{"level":"error","message":"Uncaught Exception: Cannot set properties of undefined (setting 'name')","stack":"TypeError: Cannot set properties of undefined (setting 'name')\n at Connection.<anonymous> (/app/node_modules/imap/lib/Connection.js:431:22)\n at Connection._resTagged (/app/node_modules/imap/lib/Connection.js:1535:22)\n at Parser.<anonymous> (/app/node_modules/imap/lib/Connection.js:194:10)\n at Parser.emit (node:events:524:28)\n at Parser._resTagged (/app/node_modules/imap/lib/Parser.js:175:10)\n at Parser._parse (/app/node_modules/imap/lib/Parser.js:139:16)\n at Parser._tryread (/app/node_modules/imap/lib/Parser.js:82:15)\n at Parser._cbReadable (/app/node_modules/imap/lib/Parser.js:53:12)\n at TLSSocket.emit (node:events:524:28)\n at emitReadable_ (node:internal/streams/readable:834:12)","timestamp":"2025-07-05T19:37:59.957Z"}
|
||||
{"level":"error","message":"Uncaught Exception: Cannot read properties of undefined (reading 'type')","stack":"TypeError: Cannot read properties of undefined (reading 'type')\n at Connection._resUntagged (/app/node_modules/imap/lib/Connection.js:1265:52)\n at Parser.<anonymous> (/app/node_modules/imap/lib/Connection.js:191:10)\n at Parser.emit (node:events:524:28)\n at Parser._resUntagged (/app/node_modules/imap/lib/Parser.js:271:10)\n at Parser._parse (/app/node_modules/imap/lib/Parser.js:137:16)\n at Parser._tryread (/app/node_modules/imap/lib/Parser.js:82:15)\n at Parser._cbReadable (/app/node_modules/imap/lib/Parser.js:53:12)\n at TLSSocket.emit (node:events:524:28)\n at emitReadable_ (node:internal/streams/readable:834:12)\n at process.processTicksAndRejections (node:internal/process/task_queues:81:21)","timestamp":"2025-07-05T19:38:00.033Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:38:00.883Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:38:00.884Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:38:00.886Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:39:55.053Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:39:55.053Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:39:55.053Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:39:55.053Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:40:14.258Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:40:14.259Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:42:08.418Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:42:08.419Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:42:08.419Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:42:08.419Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:42:27.622Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:42:27.623Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:43:34.383Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:43:34.385Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:43:34.385Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:44:21.795Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:44:44.785Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:44:44.786Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:45:47.637Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:45:47.638Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:45:47.638Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:46:35.188Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:47:41.684Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:47:41.684Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:47:41.685Z"}
|
||||
{"level":"error","message":"Uncaught Exception: Cannot set properties of undefined (setting 'name')","stack":"TypeError: Cannot set properties of undefined (setting 'name')\n at Connection.<anonymous> (/app/node_modules/imap/lib/Connection.js:431:22)\n at Connection._resTagged (/app/node_modules/imap/lib/Connection.js:1535:22)\n at Parser.<anonymous> (/app/node_modules/imap/lib/Connection.js:194:10)\n at Parser.emit (node:events:524:28)\n at Parser._resTagged (/app/node_modules/imap/lib/Parser.js:175:10)\n at Parser._parse (/app/node_modules/imap/lib/Parser.js:139:16)\n at Parser._tryread (/app/node_modules/imap/lib/Parser.js:82:15)\n at Parser._cbReadable (/app/node_modules/imap/lib/Parser.js:53:12)\n at TLSSocket.emit (node:events:524:28)\n at emitReadable_ (node:internal/streams/readable:834:12)","timestamp":"2025-07-05T19:50:13.481Z"}
|
||||
{"level":"error","message":"Uncaught Exception: Cannot read properties of undefined (reading 'type')","stack":"TypeError: Cannot read properties of undefined (reading 'type')\n at Connection._resUntagged (/app/node_modules/imap/lib/Connection.js:1265:52)\n at Parser.<anonymous> (/app/node_modules/imap/lib/Connection.js:191:10)\n at Parser.emit (node:events:524:28)\n at Parser._resUntagged (/app/node_modules/imap/lib/Parser.js:271:10)\n at Parser._parse (/app/node_modules/imap/lib/Parser.js:137:16)\n at Parser._tryread (/app/node_modules/imap/lib/Parser.js:82:15)\n at Parser._cbReadable (/app/node_modules/imap/lib/Parser.js:53:12)\n at TLSSocket.emit (node:events:524:28)\n at emitReadable_ (node:internal/streams/readable:834:12)\n at process.processTicksAndRejections (node:internal/process/task_queues:81:21)","timestamp":"2025-07-05T19:50:13.727Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:50:14.449Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:50:14.450Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:50:14.450Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:50:14.450Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:50:14.450Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:50:14.450Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:50:14.451Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:50:14.451Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:52:31.318Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:52:31.319Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:52:31.320Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:52:31.320Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:52:31.320Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:52:31.320Z"}
|
||||
{"level":"error","message":"Uncaught Exception: Cannot set properties of undefined (setting 'name')","stack":"TypeError: Cannot set properties of undefined (setting 'name')\n at Connection.<anonymous> (/app/node_modules/imap/lib/Connection.js:431:22)\n at Connection._resTagged (/app/node_modules/imap/lib/Connection.js:1535:22)\n at Parser.<anonymous> (/app/node_modules/imap/lib/Connection.js:194:10)\n at Parser.emit (node:events:524:28)\n at Parser._resTagged (/app/node_modules/imap/lib/Parser.js:175:10)\n at Parser._parse (/app/node_modules/imap/lib/Parser.js:139:16)\n at Parser._tryread (/app/node_modules/imap/lib/Parser.js:82:15)\n at Parser._cbReadable (/app/node_modules/imap/lib/Parser.js:53:12)\n at TLSSocket.emit (node:events:524:28)\n at emitReadable_ (node:internal/streams/readable:834:12)","timestamp":"2025-07-05T19:53:33.130Z"}
|
||||
{"level":"error","message":"Uncaught Exception: Cannot read properties of undefined (reading 'type')","stack":"TypeError: Cannot read properties of undefined (reading 'type')\n at Connection._resUntagged (/app/node_modules/imap/lib/Connection.js:1265:52)\n at Parser.<anonymous> (/app/node_modules/imap/lib/Connection.js:191:10)\n at Parser.emit (node:events:524:28)\n at Parser._resUntagged (/app/node_modules/imap/lib/Parser.js:271:10)\n at Parser._parse (/app/node_modules/imap/lib/Parser.js:137:16)\n at Parser._tryread (/app/node_modules/imap/lib/Parser.js:82:15)\n at Parser._cbReadable (/app/node_modules/imap/lib/Parser.js:53:12)\n at TLSSocket.emit (node:events:524:28)\n at emitReadable_ (node:internal/streams/readable:834:12)\n at process.processTicksAndRejections (node:internal/process/task_queues:81:21)","timestamp":"2025-07-05T19:53:33.218Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:53:34.200Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:53:34.201Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:53:34.201Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:55:47.542Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:55:47.542Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:55:47.542Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:55:47.542Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:55:47.542Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T19:55:47.542Z"}
|
||||
{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-07-05T21:13:18.670Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T21:13:18.671Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T21:13:18.671Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T21:13:18.671Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T21:13:18.671Z"}
|
||||
{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-07-05T21:13:40.553Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T21:13:40.555Z"}
|
||||
{"level":"error","message":"[SessionService] Error cleaning session NNzFlSqL-TP1U2wa0GL9tgqO7QsdgZVB: Cannot use a pool after calling end on the pool","stack":"Error: Cannot use a pool after calling end on the pool\n at /app/node_modules/pg-pool/index.js:45:11\n at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n at async SessionService.cleanupProcessedGuestIds (/app/services/session-service.js:295:13)\n at async cleanupSessions (/app/scripts/cleanup-sessions.js:8:20)","timestamp":"2025-07-05T21:26:16.251Z"}
|
||||
{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-07-05T21:26:25.952Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T21:26:25.954Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T21:26:25.954Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T21:26:25.954Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T21:26:25.954Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T21:26:25.954Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T21:26:25.954Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T21:26:25.954Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T21:26:25.955Z"}
|
||||
{"level":"error","message":"[SessionService] Error preparing update for session NNzFlSqL-TP1U2wa0GL9tgqO7QsdgZVB: Cannot use a pool after calling end on the pool","stack":"Error: Cannot use a pool after calling end on the pool\n at /app/node_modules/pg-pool/index.js:45:11\n at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n at async /app/services/session-service.js:303:34\n at async Promise.allSettled (index 0)\n at async SessionService.cleanupProcessedGuestIds (/app/services/session-service.js:319:29)\n at async cleanupSessions (/app/scripts/cleanup-sessions.js:8:20)","timestamp":"2025-07-05T21:28:03.634Z"}
|
||||
{"code":"42883","file":"parse_func.c","hint":"No function matches the given name and argument types. You might need to add explicit type casts.","length":224,"level":"error","line":"629","message":"[SessionService] Error during cleanup: function jsonb_set(json, unknown, jsonb) does not exist","name":"error","position":"37","routine":"ParseFuncOrColumn","severity":"ERROR","stack":"error: function jsonb_set(json, unknown, jsonb) does not exist\n at /app/node_modules/pg-pool/index.js:45:11\n at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n at async SessionService.cleanupProcessedGuestIds (/app/services/session-service.js:285:22)\n at async cleanupSessions (/app/scripts/cleanup-sessions.js:8:20)","timestamp":"2025-07-05T21:28:50.654Z"}
|
||||
{"code":"42883","file":"parse_oper.c","hint":"No operator matches the given name and argument types. You might need to add explicit type casts.","length":199,"level":"error","line":"647","message":"[SessionService] Error during cleanup: operator does not exist: json - unknown","name":"error","position":"42","routine":"op_error","severity":"ERROR","stack":"error: operator does not exist: json - unknown\n at /app/node_modules/pg-pool/index.js:45:11\n at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n at async SessionService.cleanupProcessedGuestIds (/app/services/session-service.js:285:22)\n at async cleanupSessions (/app/scripts/cleanup-sessions.js:8:20)","timestamp":"2025-07-05T21:29:17.406Z"}
|
||||
{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-07-05T21:34:08.008Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T21:34:08.009Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T21:34:08.009Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T21:34:08.010Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T21:34:08.010Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T21:34:08.010Z"}
|
||||
{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-07-05T21:35:31.211Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T21:35:31.212Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T21:35:31.212Z"}
|
||||
{"level":"error","message":"IMAP connection error during check: Timed out while authenticating with server","timestamp":"2025-07-05T21:35:31.213Z"}
|
||||
{"level":"error","message":"[EmailBot] IMAP connection error: Timed out while authenticating with server","timestamp":"2025-07-05T21:35:50.053Z"}
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
"@openzeppelin/contracts": "5.2.0",
|
||||
"archiver": "^7.0.1",
|
||||
"axios": "^1.8.4",
|
||||
"cloudflare": "^4.4.1",
|
||||
"connect-pg-simple": "^10.0.0",
|
||||
"cookie": "^1.0.2",
|
||||
"cors": "^2.8.5",
|
||||
|
||||
@@ -457,8 +457,7 @@ router.post('/telegram/init', async (req, res) => {
|
||||
// и получаем результат (код и ссылку на бота)
|
||||
const result = await initTelegramAuth(req.session);
|
||||
|
||||
// Логируем сессию перед сохранением
|
||||
logger.info('[telegram/init] Session object before save:', req.session);
|
||||
|
||||
|
||||
// Сохраняем сессию, чтобы guestId точно записался в базу данных
|
||||
await sessionService.saveSession(req.session);
|
||||
|
||||
@@ -1,700 +0,0 @@
|
||||
const express = require('express');
|
||||
const router = express.Router();
|
||||
let Cloudflare;
|
||||
try {
|
||||
Cloudflare = require('cloudflare');
|
||||
} catch (e) {
|
||||
console.warn('[Cloudflare] Cloudflare package not available:', e.message);
|
||||
Cloudflare = null;
|
||||
}
|
||||
const db = require('../db');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const { exec } = require('child_process');
|
||||
const dockerComposePath = path.join(__dirname, '../../docker-compose.cloudflared.yml');
|
||||
const { addCloudflaredToCompose } = require('../utils/cloudflaredCompose');
|
||||
const { writeCloudflaredEnv } = require('../cloudflaredEnv');
|
||||
const axios = require('axios');
|
||||
const credentialsDir = '/home/alex/DApp-for-Business/.cloudflared';
|
||||
const tunnelName = 'hb3-accelerator'; // или из настроек
|
||||
|
||||
// --- Вспомогательные функции ---
|
||||
async function getSettings() {
|
||||
try {
|
||||
const { rows } = await db.query('SELECT * FROM cloudflare_settings ORDER BY id DESC LIMIT 1');
|
||||
return rows[0] || {};
|
||||
} catch (e) {
|
||||
console.error('[Cloudflare] Error getting settings:', e);
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
async function upsertSettings(fields) {
|
||||
try {
|
||||
const current = await getSettings();
|
||||
if (current.id) {
|
||||
const updates = [];
|
||||
const values = [];
|
||||
let idx = 1;
|
||||
for (const [k, v] of Object.entries(fields)) {
|
||||
updates.push(`${k} = $${idx}`);
|
||||
values.push(v);
|
||||
idx++;
|
||||
}
|
||||
values.push(current.id);
|
||||
await db.query(`UPDATE cloudflare_settings SET ${updates.join(', ')}, updated_at = NOW() WHERE id = $${idx}`, values);
|
||||
} else {
|
||||
const keys = Object.keys(fields);
|
||||
const values = Object.values(fields);
|
||||
await db.query(`INSERT INTO cloudflare_settings (${keys.join(',')}) VALUES (${keys.map((_,i)=>`$${i+1}`).join(',')})` , values);
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('[Cloudflare] Error upserting settings:', e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
function generateDockerCompose(tunnelToken) {
|
||||
return `version: '3.8'
|
||||
services:
|
||||
cloudflared:
|
||||
image: cloudflare/cloudflared:latest
|
||||
command: tunnel --no-autoupdate run
|
||||
environment:
|
||||
- TUNNEL_TOKEN=${tunnelToken}
|
||||
restart: unless-stopped
|
||||
`;
|
||||
}
|
||||
|
||||
function runDockerCompose() {
|
||||
return new Promise((resolve, reject) => {
|
||||
exec(`docker-compose -f ${dockerComposePath} up -d cloudflared`, (err, stdout, stderr) => {
|
||||
if (err) return reject(stderr || err.message);
|
||||
resolve(stdout);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function checkCloudflaredStatus() {
|
||||
return new Promise((resolve) => {
|
||||
exec('docker ps --filter "name=cloudflared" --format "{{.Status}}"', (err, stdout) => {
|
||||
if (err) return resolve('not_installed');
|
||||
if (stdout.trim()) return resolve('running');
|
||||
resolve('not_running');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// --- API ---
|
||||
// Получить все настройки
|
||||
router.get('/settings', async (req, res) => {
|
||||
try {
|
||||
const settings = await getSettings();
|
||||
res.json({ success: true, settings });
|
||||
} catch (e) {
|
||||
res.json({ success: false, message: 'Ошибка получения настроек: ' + e.message });
|
||||
}
|
||||
});
|
||||
// Сохранить API Token
|
||||
router.post('/token', async (req, res) => {
|
||||
const { token } = req.body;
|
||||
if (!token) return res.status(400).json({ success: false, message: 'Token required' });
|
||||
try {
|
||||
await upsertSettings({ api_token: token });
|
||||
res.json({ success: true, message: 'API Token сохранён!' });
|
||||
} catch (e) {
|
||||
res.json({ success: false, message: 'Ошибка сохранения токена: ' + e.message });
|
||||
}
|
||||
});
|
||||
// Получить список аккаунтов пользователя по API Token
|
||||
router.post('/accounts', async (req, res) => {
|
||||
const { api_token } = req.body;
|
||||
if (!api_token) return res.status(400).json({ success: false, message: 'Token required' });
|
||||
try {
|
||||
const resp = await axios.get('https://api.cloudflare.com/client/v4/accounts', {
|
||||
headers: { Authorization: `Bearer ${api_token}` }
|
||||
});
|
||||
res.json({ success: true, accounts: resp.data.result });
|
||||
} catch (e) {
|
||||
res.json({ success: false, message: 'Ошибка Cloudflare API: ' + e.message });
|
||||
}
|
||||
});
|
||||
// Сохранить выбранный account_id
|
||||
router.post('/account-id', async (req, res) => {
|
||||
const { account_id } = req.body;
|
||||
if (!account_id) return res.status(400).json({ success: false, message: 'Account ID required' });
|
||||
try {
|
||||
await upsertSettings({ account_id });
|
||||
res.json({ success: true, message: 'Account ID сохранён!' });
|
||||
} catch (e) {
|
||||
res.json({ success: false, message: 'Ошибка сохранения Account ID: ' + e.message });
|
||||
}
|
||||
});
|
||||
// Новый /domain: полный цикл автоматизации через Cloudflare API
|
||||
router.post('/domain', async (req, res) => {
|
||||
const steps = [];
|
||||
try {
|
||||
console.log('[Cloudflare /domain] Starting domain connection process');
|
||||
|
||||
// 1. Сохраняем домен, если он пришёл с фронта
|
||||
const { domain: domainFromBody } = req.body;
|
||||
if (domainFromBody) {
|
||||
console.log('[Cloudflare /domain] Saving domain:', domainFromBody);
|
||||
await upsertSettings({ domain: domainFromBody });
|
||||
}
|
||||
|
||||
// 2. Получаем актуальные настройки
|
||||
const settings = await getSettings();
|
||||
console.log('[Cloudflare /domain] Current settings:', { ...settings, api_token: settings.api_token ? '[HIDDEN]' : 'null' });
|
||||
|
||||
const { api_token, domain, account_id, tunnel_id, tunnel_token } = settings;
|
||||
if (!api_token || !domain || !account_id) {
|
||||
console.error('[Cloudflare /domain] Missing required parameters:', { api_token: !!api_token, domain: !!domain, account_id: !!account_id });
|
||||
return res.json({ success: false, error: 'Не все параметры Cloudflare заданы (api_token, domain, account_id)' });
|
||||
}
|
||||
let tunnelId = tunnel_id;
|
||||
let tunnelToken = tunnel_token;
|
||||
// 1. Создание туннеля через Cloudflare API (только если нет tunnel_id)
|
||||
if (!tunnelId || !tunnelToken) {
|
||||
try {
|
||||
const tunnelName = `dapp-tunnel-${domain}`;
|
||||
const tunnelResp = await axios.post(
|
||||
`https://api.cloudflare.com/client/v4/accounts/${account_id}/cfd_tunnel`,
|
||||
{ name: tunnelName },
|
||||
{ headers: { Authorization: `Bearer ${api_token}` } }
|
||||
);
|
||||
tunnelId = tunnelResp.data.result.id;
|
||||
tunnelToken = tunnelResp.data.result.token;
|
||||
console.log('[Cloudflare] Получен tunnelId:', tunnelId, 'tunnelToken:', tunnelToken);
|
||||
// Сохраняем tunnel_id и tunnel_token в базу
|
||||
await upsertSettings({ tunnel_id: tunnelId, tunnel_token: tunnelToken, api_token, account_id, domain });
|
||||
steps.push({ step: 'create_tunnel', status: 'ok', message: 'Туннель создан через Cloudflare API и все параметры сохранены.' });
|
||||
} catch (e) {
|
||||
steps.push({ step: 'create_tunnel', status: 'error', message: 'Ошибка создания туннеля: ' + e.message });
|
||||
return res.json({ success: false, steps, error: e.message });
|
||||
}
|
||||
} else {
|
||||
steps.push({ step: 'use_existing_tunnel', status: 'ok', message: 'Используется существующий туннель.' });
|
||||
}
|
||||
// 2. Сохранение tunnel_token в cloudflared.env
|
||||
try {
|
||||
writeCloudflaredEnv({ tunnelToken, domain });
|
||||
steps.push({ step: 'save_token', status: 'ok', message: 'TUNNEL_TOKEN сохранён в cloudflared.env.' });
|
||||
} catch (e) {
|
||||
steps.push({ step: 'save_token', status: 'error', message: 'Ошибка сохранения tunnel_token: ' + e.message });
|
||||
return res.json({ success: false, steps, error: e.message });
|
||||
}
|
||||
// 3. Создание маршрута (ingress) через Cloudflare API
|
||||
try {
|
||||
await axios.put(
|
||||
`https://api.cloudflare.com/client/v4/accounts/${account_id}/cfd_tunnel/${tunnelId}/configurations`,
|
||||
{
|
||||
config: {
|
||||
ingress: [
|
||||
{ hostname: domain, service: 'http://localhost:5173' },
|
||||
{ service: 'http_status:404' }
|
||||
]
|
||||
}
|
||||
},
|
||||
{ headers: { Authorization: `Bearer ${api_token}` } }
|
||||
);
|
||||
steps.push({ step: 'create_route', status: 'ok', message: 'Маршрут для домена создан.' });
|
||||
} catch (e) {
|
||||
let errorMsg = e.message;
|
||||
if (e.response && e.response.data) {
|
||||
errorMsg += ' | ' + JSON.stringify(e.response.data);
|
||||
}
|
||||
steps.push({ step: 'create_route', status: 'error', message: 'Ошибка создания маршрута: ' + errorMsg });
|
||||
return res.json({ success: false, steps, error: errorMsg });
|
||||
}
|
||||
|
||||
// 3.5. Автоматическое создание DNS записей для туннеля
|
||||
try {
|
||||
console.log('[Cloudflare /domain] Creating DNS records automatically...');
|
||||
|
||||
// Получаем зону для домена
|
||||
const zonesResp = await axios.get('https://api.cloudflare.com/client/v4/zones', {
|
||||
headers: { Authorization: `Bearer ${api_token}` },
|
||||
params: { name: domain }
|
||||
});
|
||||
|
||||
const zones = zonesResp.data.result;
|
||||
if (!zones || zones.length === 0) {
|
||||
steps.push({ step: 'create_dns', status: 'error', message: 'Домен не найден в Cloudflare аккаунте для создания DNS записей' });
|
||||
console.log('[Cloudflare /domain] Domain not found in Cloudflare account, skipping DNS creation');
|
||||
} else {
|
||||
const zoneId = zones[0].id;
|
||||
|
||||
// Получаем существующие DNS записи
|
||||
const recordsResp = await axios.get(`https://api.cloudflare.com/client/v4/zones/${zoneId}/dns_records`, {
|
||||
headers: { Authorization: `Bearer ${api_token}` }
|
||||
});
|
||||
|
||||
const existingRecords = recordsResp.data.result || [];
|
||||
|
||||
// Проверяем, есть ли уже запись для основного домена, указывающая на туннель
|
||||
const tunnelCnamePattern = new RegExp(`${tunnelId}\.cfargotunnel\.com`);
|
||||
const hasMainRecord = existingRecords.some(record =>
|
||||
record.name === domain &&
|
||||
(
|
||||
(record.type === 'CNAME' && tunnelCnamePattern.test(record.content)) ||
|
||||
(record.type === 'CNAME' && record.content.includes('cfargotunnel.com'))
|
||||
)
|
||||
);
|
||||
|
||||
if (!hasMainRecord) {
|
||||
// Удаляем конфликтующие записи для основного домена (A, AAAA, CNAME)
|
||||
const conflictingRecords = existingRecords.filter(record =>
|
||||
record.name === domain && ['A', 'AAAA', 'CNAME'].includes(record.type)
|
||||
);
|
||||
|
||||
for (const conflictRecord of conflictingRecords) {
|
||||
try {
|
||||
await axios.delete(
|
||||
`https://api.cloudflare.com/client/v4/zones/${zoneId}/dns_records/${conflictRecord.id}`,
|
||||
{ headers: { Authorization: `Bearer ${api_token}` } }
|
||||
);
|
||||
console.log('[Cloudflare /domain] Removed conflicting record:', conflictRecord.type, conflictRecord.name, conflictRecord.content);
|
||||
} catch (delErr) {
|
||||
console.warn('[Cloudflare /domain] Failed to delete conflicting record:', delErr.message);
|
||||
}
|
||||
}
|
||||
|
||||
// Создаем CNAME запись для основного домена
|
||||
const cnameRecord = {
|
||||
type: 'CNAME',
|
||||
name: domain,
|
||||
content: `${tunnelId}.cfargotunnel.com`,
|
||||
ttl: 1,
|
||||
proxied: true
|
||||
};
|
||||
|
||||
const createResp = await axios.post(
|
||||
`https://api.cloudflare.com/client/v4/zones/${zoneId}/dns_records`,
|
||||
cnameRecord,
|
||||
{ headers: { Authorization: `Bearer ${api_token}` } }
|
||||
);
|
||||
|
||||
console.log('[Cloudflare /domain] Main CNAME record created:', createResp.data.result);
|
||||
steps.push({ step: 'create_dns', status: 'ok', message: `DNS запись создана: ${domain} -> ${tunnelId}.cfargotunnel.com (проксирована)` });
|
||||
} else {
|
||||
console.log('[Cloudflare /domain] Main record already exists and points to tunnel');
|
||||
steps.push({ step: 'create_dns', status: 'ok', message: 'DNS запись для основного домена уже существует и настроена правильно' });
|
||||
}
|
||||
|
||||
// Создаем www поддомен только для корневых доменов (не для поддоменов)
|
||||
const domainParts = domain.split('.');
|
||||
const isRootDomain = domainParts.length === 2; // example.com, а не subdomain.example.com
|
||||
|
||||
if (isRootDomain) {
|
||||
// Обновляем список записей после возможных изменений
|
||||
const updatedRecordsResp = await axios.get(`https://api.cloudflare.com/client/v4/zones/${zoneId}/dns_records`, {
|
||||
headers: { Authorization: `Bearer ${api_token}` }
|
||||
});
|
||||
const updatedRecords = updatedRecordsResp.data.result || [];
|
||||
|
||||
// Проверяем, есть ли уже запись для www поддомена
|
||||
const hasWwwRecord = updatedRecords.some(record =>
|
||||
record.name === `www.${domain}` &&
|
||||
(
|
||||
(record.type === 'CNAME' && tunnelCnamePattern.test(record.content)) ||
|
||||
(record.type === 'CNAME' && record.content.includes('cfargotunnel.com'))
|
||||
)
|
||||
);
|
||||
|
||||
if (!hasWwwRecord) {
|
||||
// Удаляем конфликтующие записи для www поддомена
|
||||
const conflictingWwwRecords = updatedRecords.filter(record =>
|
||||
record.name === `www.${domain}` && ['A', 'AAAA', 'CNAME'].includes(record.type)
|
||||
);
|
||||
|
||||
for (const conflictRecord of conflictingWwwRecords) {
|
||||
try {
|
||||
await axios.delete(
|
||||
`https://api.cloudflare.com/client/v4/zones/${zoneId}/dns_records/${conflictRecord.id}`,
|
||||
{ headers: { Authorization: `Bearer ${api_token}` } }
|
||||
);
|
||||
console.log('[Cloudflare /domain] Removed conflicting www record:', conflictRecord.type, conflictRecord.name, conflictRecord.content);
|
||||
} catch (delErr) {
|
||||
console.warn('[Cloudflare /domain] Failed to delete conflicting www record:', delErr.message);
|
||||
}
|
||||
}
|
||||
|
||||
// Создаем CNAME запись для www поддомена
|
||||
const wwwCnameRecord = {
|
||||
type: 'CNAME',
|
||||
name: `www.${domain}`,
|
||||
content: `${tunnelId}.cfargotunnel.com`,
|
||||
ttl: 1,
|
||||
proxied: true
|
||||
};
|
||||
|
||||
const createWwwResp = await axios.post(
|
||||
`https://api.cloudflare.com/client/v4/zones/${zoneId}/dns_records`,
|
||||
wwwCnameRecord,
|
||||
{ headers: { Authorization: `Bearer ${api_token}` } }
|
||||
);
|
||||
|
||||
console.log('[Cloudflare /domain] WWW CNAME record created:', createWwwResp.data.result);
|
||||
steps.push({ step: 'create_dns_www', status: 'ok', message: `DNS запись создана: www.${domain} -> ${tunnelId}.cfargotunnel.com (проксирована)` });
|
||||
} else {
|
||||
console.log('[Cloudflare /domain] WWW record already exists and points to tunnel');
|
||||
steps.push({ step: 'create_dns_www', status: 'ok', message: 'DNS запись для www поддомена уже существует и настроена правильно' });
|
||||
}
|
||||
} else {
|
||||
console.log('[Cloudflare /domain] Skipping www subdomain creation for non-root domain');
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('[Cloudflare /domain] Error creating DNS records:', e);
|
||||
steps.push({ step: 'create_dns', status: 'error', message: 'Ошибка создания DNS записей: ' + (e.response?.data?.errors?.[0]?.message || e.message) });
|
||||
// Не прерываем процесс, DNS можно настроить вручную
|
||||
}
|
||||
// 4. Перезапуск cloudflared через docker compose
|
||||
try {
|
||||
console.log('[Cloudflare /domain] Restarting cloudflared via docker compose...');
|
||||
const { exec } = require('child_process');
|
||||
|
||||
await new Promise((resolve, reject) => {
|
||||
exec('cd /app && docker compose restart cloudflared', (err, stdout, stderr) => {
|
||||
if (err) {
|
||||
console.error('[Cloudflare /domain] Docker compose restart error:', stderr || err.message);
|
||||
reject(new Error(stderr || err.message));
|
||||
} else {
|
||||
console.log('[Cloudflare /domain] Docker compose restart success:', stdout);
|
||||
resolve(stdout);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
steps.push({ step: 'restart_cloudflared', status: 'ok', message: 'cloudflared перезапущен.' });
|
||||
} catch (e) {
|
||||
console.error('[Cloudflare /domain] Error restarting cloudflared:', e.message);
|
||||
steps.push({ step: 'restart_cloudflared', status: 'error', message: 'Ошибка перезапуска cloudflared: ' + e.message });
|
||||
// Не возвращаем ошибку, так как туннель создан
|
||||
console.log('[Cloudflare /domain] Continuing despite restart error...');
|
||||
}
|
||||
// 5. Возврат app_url
|
||||
res.json({
|
||||
success: true,
|
||||
app_url: `https://${domain}`,
|
||||
message: 'Туннель и маршрут успешно созданы. Ваше приложение доступно по ссылке.',
|
||||
steps
|
||||
});
|
||||
} catch (e) {
|
||||
steps.push({ step: 'fatal', status: 'error', message: e.message });
|
||||
res.json({ success: false, steps, error: e.message });
|
||||
}
|
||||
});
|
||||
// Проверить домен через Cloudflare API (опционально)
|
||||
router.post('/check-domain', async (req, res) => {
|
||||
if (!Cloudflare) return res.json({ success: false, message: 'Cloudflare не доступен на сервере' });
|
||||
const { api_token, domain } = req.body;
|
||||
if (!api_token || !domain) return res.status(400).json({ success: false, message: 'Token и domain обязательны' });
|
||||
try {
|
||||
const cf = new Cloudflare({ apiToken: api_token });
|
||||
const zones = await cf.zones.browse();
|
||||
const found = zones.result.find(z => z.name === domain);
|
||||
if (!found) return res.status(400).json({ success: false, message: 'Домен не найден в Cloudflare аккаунте' });
|
||||
res.json({ success: true, message: 'Домен найден в Cloudflare аккаунте' });
|
||||
} catch (e) {
|
||||
res.json({ success: false, message: 'Ошибка Cloudflare API: ' + e.message });
|
||||
}
|
||||
});
|
||||
// Установить Cloudflared в Docker (добавить в compose и запустить)
|
||||
router.post('/install', async (req, res) => {
|
||||
console.log('[CloudflareInstall] Запрос на установку cloudflared');
|
||||
const settings = await getSettings();
|
||||
console.log('[CloudflareInstall] Текущие настройки:', settings);
|
||||
if (!settings.tunnel_token) {
|
||||
console.warn('[CloudflareInstall] Нет tunnel_token, установка невозможна');
|
||||
return res.status(400).json({ success: false, message: 'Сначала сохраните Tunnel Token' });
|
||||
}
|
||||
try {
|
||||
console.log('[CloudflareInstall] Запись cloudflared.env...');
|
||||
writeCloudflaredEnv({ tunnelToken: settings.tunnel_token, domain: settings.domain });
|
||||
console.log('[CloudflareInstall] Перезапуск cloudflared через docker compose...');
|
||||
exec('docker-compose up -d cloudflared', (err, stdout, stderr) => {
|
||||
if (err) {
|
||||
console.error('[CloudflareInstall] Ошибка docker compose:', stderr || err.message);
|
||||
return res.json({ success: false, message: 'Ошибка docker compose: ' + (stderr || err.message) });
|
||||
}
|
||||
console.log('[CloudflareInstall] Cloudflared перезапущен:', stdout);
|
||||
res.json({ success: true, message: 'Cloudflared переменные обновлены и контейнер перезапущен!' });
|
||||
});
|
||||
} catch (e) {
|
||||
console.error('[CloudflareInstall] Ошибка:', e);
|
||||
res.json({ success: false, message: 'Ошибка: ' + (e.message || e) });
|
||||
}
|
||||
});
|
||||
// Получить статус Cloudflared, домена и туннеля
|
||||
router.get('/status', async (req, res) => {
|
||||
const status = await checkCloudflaredStatus();
|
||||
const settings = await getSettings();
|
||||
let domainStatus = 'not_configured';
|
||||
let domainMsg = 'Cloudflare не настроен';
|
||||
let tunnelStatus = 'not_configured';
|
||||
let tunnelMsg = 'Cloudflare не настроен';
|
||||
if (!Cloudflare) {
|
||||
return res.json({
|
||||
success: true,
|
||||
status,
|
||||
domainStatus: 'not_available',
|
||||
domainMsg: 'Пакет cloudflare не установлен',
|
||||
tunnelStatus: 'not_available',
|
||||
tunnelMsg: 'Пакет cloudflare не установлен',
|
||||
message: 'Cloudflare не доступен на сервере'
|
||||
});
|
||||
}
|
||||
if (settings.api_token && settings.domain) {
|
||||
try {
|
||||
const cf = new Cloudflare({ apiToken: settings.api_token });
|
||||
const zonesResp = await cf.zones.list();
|
||||
const zones = zonesResp.result;
|
||||
const found = zones.find(z => z.name === settings.domain);
|
||||
if (found) {
|
||||
domainStatus = 'ok';
|
||||
domainMsg = 'Домен найден в Cloudflare аккаунте';
|
||||
} else {
|
||||
domainStatus = 'not_found';
|
||||
domainMsg = 'Домен не найден в Cloudflare аккаунте';
|
||||
}
|
||||
} catch (e) {
|
||||
domainStatus = 'error';
|
||||
domainMsg = 'Ошибка Cloudflare API: ' + e.message;
|
||||
}
|
||||
}
|
||||
if (settings.api_token && settings.tunnel_id && settings.account_id) {
|
||||
try {
|
||||
console.log('[Cloudflare /status] Checking tunnel status...');
|
||||
const tunnelsResp = await axios.get(
|
||||
`https://api.cloudflare.com/client/v4/accounts/${settings.account_id}/cfd_tunnel`,
|
||||
{ headers: { Authorization: `Bearer ${settings.api_token}` } }
|
||||
);
|
||||
const tunnels = tunnelsResp.data.result || [];
|
||||
console.log('[Cloudflare /status] Found tunnels:', tunnels.map(t => ({ id: t.id, name: t.name, status: t.status })));
|
||||
|
||||
const foundTunnel = tunnels.find(t => t.id === settings.tunnel_id);
|
||||
if (foundTunnel) {
|
||||
tunnelStatus = foundTunnel.status || 'active';
|
||||
tunnelMsg = `Туннель найден: ${foundTunnel.name || foundTunnel.id}, статус: ${foundTunnel.status}`;
|
||||
console.log('[Cloudflare /status] Tunnel found:', foundTunnel);
|
||||
} else {
|
||||
tunnelStatus = 'not_found';
|
||||
tunnelMsg = 'Туннель не найден в Cloudflare аккаунте';
|
||||
console.log('[Cloudflare /status] Tunnel not found. Looking for tunnel_id:', settings.tunnel_id);
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('[Cloudflare /status] Error checking tunnel:', e);
|
||||
tunnelStatus = 'error';
|
||||
tunnelMsg = 'Ошибка Cloudflare API (туннель): ' + e.message;
|
||||
}
|
||||
}
|
||||
res.json({
|
||||
success: true,
|
||||
status,
|
||||
domainStatus,
|
||||
domainMsg,
|
||||
tunnelStatus,
|
||||
tunnelMsg,
|
||||
message: `Cloudflared статус: ${status}, домен: ${domainStatus}, туннель: ${tunnelStatus}`
|
||||
});
|
||||
});
|
||||
|
||||
// --- DNS Управление ---
|
||||
|
||||
// Получить список DNS записей для домена
|
||||
router.get('/dns-records', async (req, res) => {
|
||||
try {
|
||||
const settings = await getSettings();
|
||||
const { api_token, domain } = settings;
|
||||
|
||||
if (!api_token || !domain) {
|
||||
return res.json({
|
||||
success: false,
|
||||
message: 'API Token и домен должны быть настроены'
|
||||
});
|
||||
}
|
||||
|
||||
// Получаем зону для домена
|
||||
const zonesResp = await axios.get('https://api.cloudflare.com/client/v4/zones', {
|
||||
headers: { Authorization: `Bearer ${api_token}` },
|
||||
params: { name: domain }
|
||||
});
|
||||
|
||||
const zones = zonesResp.data.result;
|
||||
if (!zones || zones.length === 0) {
|
||||
return res.json({
|
||||
success: false,
|
||||
message: 'Домен не найден в Cloudflare аккаунте'
|
||||
});
|
||||
}
|
||||
|
||||
const zoneId = zones[0].id;
|
||||
|
||||
// Получаем DNS записи для зоны
|
||||
const recordsResp = await axios.get(`https://api.cloudflare.com/client/v4/zones/${zoneId}/dns_records`, {
|
||||
headers: { Authorization: `Bearer ${api_token}` }
|
||||
});
|
||||
|
||||
const records = recordsResp.data.result || [];
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
records: records.map(record => ({
|
||||
id: record.id,
|
||||
type: record.type,
|
||||
name: record.name,
|
||||
content: record.content,
|
||||
ttl: record.ttl,
|
||||
proxied: record.proxied,
|
||||
zone_id: record.zone_id,
|
||||
zone_name: record.zone_name,
|
||||
created_on: record.created_on,
|
||||
modified_on: record.modified_on
|
||||
})),
|
||||
zone_id: zoneId
|
||||
});
|
||||
} catch (e) {
|
||||
console.error('[Cloudflare /dns-records] Error:', e);
|
||||
res.json({
|
||||
success: false,
|
||||
message: 'Ошибка получения DNS записей: ' + (e.response?.data?.errors?.[0]?.message || e.message)
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Создать/обновить DNS запись
|
||||
router.post('/dns-records', async (req, res) => {
|
||||
try {
|
||||
const settings = await getSettings();
|
||||
const { api_token, domain } = settings;
|
||||
const { type, name, content, ttl = 1, proxied = false, recordId } = req.body;
|
||||
|
||||
if (!api_token || !domain) {
|
||||
return res.json({
|
||||
success: false,
|
||||
message: 'API Token и домен должны быть настроены'
|
||||
});
|
||||
}
|
||||
|
||||
if (!type || !name || !content) {
|
||||
return res.json({
|
||||
success: false,
|
||||
message: 'Обязательные поля: type, name, content'
|
||||
});
|
||||
}
|
||||
|
||||
// Получаем зону для домена
|
||||
const zonesResp = await axios.get('https://api.cloudflare.com/client/v4/zones', {
|
||||
headers: { Authorization: `Bearer ${api_token}` },
|
||||
params: { name: domain }
|
||||
});
|
||||
|
||||
const zones = zonesResp.data.result;
|
||||
if (!zones || zones.length === 0) {
|
||||
return res.json({
|
||||
success: false,
|
||||
message: 'Домен не найден в Cloudflare аккаунте'
|
||||
});
|
||||
}
|
||||
|
||||
const zoneId = zones[0].id;
|
||||
const recordData = { type, name, content, ttl };
|
||||
|
||||
// Добавляем proxied только для типов записей, которые поддерживают прокси
|
||||
if (['A', 'AAAA', 'CNAME'].includes(type)) {
|
||||
recordData.proxied = proxied;
|
||||
}
|
||||
|
||||
let result;
|
||||
if (recordId) {
|
||||
// Обновляем существующую запись
|
||||
const updateResp = await axios.put(
|
||||
`https://api.cloudflare.com/client/v4/zones/${zoneId}/dns_records/${recordId}`,
|
||||
recordData,
|
||||
{ headers: { Authorization: `Bearer ${api_token}` } }
|
||||
);
|
||||
result = updateResp.data.result;
|
||||
} else {
|
||||
// Создаем новую запись
|
||||
const createResp = await axios.post(
|
||||
`https://api.cloudflare.com/client/v4/zones/${zoneId}/dns_records`,
|
||||
recordData,
|
||||
{ headers: { Authorization: `Bearer ${api_token}` } }
|
||||
);
|
||||
result = createResp.data.result;
|
||||
}
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
message: recordId ? 'DNS запись обновлена' : 'DNS запись создана',
|
||||
record: {
|
||||
id: result.id,
|
||||
type: result.type,
|
||||
name: result.name,
|
||||
content: result.content,
|
||||
ttl: result.ttl,
|
||||
proxied: result.proxied,
|
||||
zone_id: result.zone_id
|
||||
}
|
||||
});
|
||||
} catch (e) {
|
||||
console.error('[Cloudflare /dns-records POST] Error:', e);
|
||||
res.json({
|
||||
success: false,
|
||||
message: 'Ошибка создания/обновления DNS записи: ' + (e.response?.data?.errors?.[0]?.message || e.message)
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Удалить DNS запись
|
||||
router.delete('/dns-records/:recordId', async (req, res) => {
|
||||
try {
|
||||
const settings = await getSettings();
|
||||
const { api_token, domain } = settings;
|
||||
const { recordId } = req.params;
|
||||
|
||||
if (!api_token || !domain) {
|
||||
return res.json({
|
||||
success: false,
|
||||
message: 'API Token и домен должны быть настроены'
|
||||
});
|
||||
}
|
||||
|
||||
// Получаем зону для домена
|
||||
const zonesResp = await axios.get('https://api.cloudflare.com/client/v4/zones', {
|
||||
headers: { Authorization: `Bearer ${api_token}` },
|
||||
params: { name: domain }
|
||||
});
|
||||
|
||||
const zones = zonesResp.data.result;
|
||||
if (!zones || zones.length === 0) {
|
||||
return res.json({
|
||||
success: false,
|
||||
message: 'Домен не найден в Cloudflare аккаунте'
|
||||
});
|
||||
}
|
||||
|
||||
const zoneId = zones[0].id;
|
||||
|
||||
// Удаляем DNS запись
|
||||
await axios.delete(
|
||||
`https://api.cloudflare.com/client/v4/zones/${zoneId}/dns_records/${recordId}`,
|
||||
{ headers: { Authorization: `Bearer ${api_token}` } }
|
||||
);
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
message: 'DNS запись удалена'
|
||||
});
|
||||
} catch (e) {
|
||||
console.error('[Cloudflare /dns-records DELETE] Error:', e);
|
||||
res.json({
|
||||
success: false,
|
||||
message: 'Ошибка удаления DNS записи: ' + (e.response?.data?.errors?.[0]?.message || e.message)
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
23
backend/scripts/cleanup-sessions.js
Normal file
23
backend/scripts/cleanup-sessions.js
Normal file
@@ -0,0 +1,23 @@
|
||||
const sessionService = require('../services/session-service');
|
||||
const db = require('../db');
|
||||
|
||||
async function cleanupSessions() {
|
||||
try {
|
||||
console.log('Starting session cleanup...');
|
||||
|
||||
const result = await sessionService.cleanupProcessedGuestIds();
|
||||
|
||||
if (result) {
|
||||
console.log('Session cleanup completed successfully');
|
||||
} else {
|
||||
console.log('Session cleanup failed');
|
||||
}
|
||||
|
||||
process.exit(0);
|
||||
} catch (error) {
|
||||
console.error('Error during cleanup:', error);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
cleanupSessions();
|
||||
@@ -13,16 +13,12 @@ class SessionService {
|
||||
*/
|
||||
async saveSession(session) {
|
||||
try {
|
||||
// Логируем содержимое сессии перед сохранением
|
||||
logger.info('[SessionService] Saving session data:', session);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
session.save((err) => {
|
||||
if (err) {
|
||||
logger.error('Error saving session:', err);
|
||||
reject(err);
|
||||
} else {
|
||||
logger.info('Session saved successfully');
|
||||
resolve(true);
|
||||
}
|
||||
});
|
||||
@@ -41,16 +37,7 @@ class SessionService {
|
||||
*/
|
||||
async linkGuestMessages(session, userId) {
|
||||
try {
|
||||
logger.info(
|
||||
`[linkGuestMessages] Starting for user ${userId} with guestId=${session.guestId}, previousGuestId=${session.previousGuestId}`
|
||||
);
|
||||
|
||||
// Инициализируем массив обработанных гостевых ID, если его нет
|
||||
if (!session.processedGuestIds) {
|
||||
session.processedGuestIds = [];
|
||||
}
|
||||
|
||||
// Получаем все гостевые ID для текущего пользователя из новой таблицы
|
||||
// Получаем все гостевые ID для текущего пользователя из таблицы
|
||||
const guestIdsResult = await db.getQuery()(
|
||||
'SELECT guest_id FROM guest_user_mapping WHERE user_id = $1',
|
||||
[userId]
|
||||
@@ -60,39 +47,52 @@ class SessionService {
|
||||
// Собираем все гостевые ID, которые нужно обработать
|
||||
const guestIdsToProcess = new Set();
|
||||
|
||||
// Добавляем текущий гостевой ID
|
||||
if (session.guestId && !session.processedGuestIds.includes(session.guestId)) {
|
||||
guestIdsToProcess.add(session.guestId);
|
||||
// Добавляем текущий гостевой ID, если он есть и не обработан в БД
|
||||
if (session.guestId) {
|
||||
const isProcessed = await this.isGuestIdProcessed(session.guestId);
|
||||
if (!isProcessed) {
|
||||
guestIdsToProcess.add(session.guestId);
|
||||
|
||||
// Записываем связь с пользователем в новую таблицу
|
||||
await db.getQuery()(
|
||||
'INSERT INTO guest_user_mapping (user_id, guest_id) VALUES ($1, $2) ON CONFLICT (guest_id) DO UPDATE SET user_id = $1',
|
||||
[userId, session.guestId]
|
||||
);
|
||||
// Записываем связь с пользователем в новую таблицу
|
||||
await db.getQuery()(
|
||||
'INSERT INTO guest_user_mapping (user_id, guest_id) VALUES ($1, $2) ON CONFLICT (guest_id) DO UPDATE SET user_id = $1',
|
||||
[userId, session.guestId]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Добавляем предыдущий гостевой ID
|
||||
if (session.previousGuestId && !session.processedGuestIds.includes(session.previousGuestId)) {
|
||||
guestIdsToProcess.add(session.previousGuestId);
|
||||
// Добавляем предыдущий гостевой ID, если он есть и не обработан в БД
|
||||
if (session.previousGuestId) {
|
||||
const isProcessed = await this.isGuestIdProcessed(session.previousGuestId);
|
||||
if (!isProcessed) {
|
||||
guestIdsToProcess.add(session.previousGuestId);
|
||||
|
||||
// Записываем связь с пользователем в новую таблицу
|
||||
await db.getQuery()(
|
||||
'INSERT INTO guest_user_mapping (user_id, guest_id) VALUES ($1, $2) ON CONFLICT (guest_id) DO UPDATE SET user_id = $1',
|
||||
[userId, session.previousGuestId]
|
||||
);
|
||||
// Записываем связь с пользователем в новую таблицу
|
||||
await db.getQuery()(
|
||||
'INSERT INTO guest_user_mapping (user_id, guest_id) VALUES ($1, $2) ON CONFLICT (guest_id) DO UPDATE SET user_id = $1',
|
||||
[userId, session.previousGuestId]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Добавляем все гостевые ID пользователя из таблицы
|
||||
// Добавляем все гостевые ID пользователя из таблицы, которые еще не обработаны
|
||||
for (const guestId of userGuestIds) {
|
||||
if (!session.processedGuestIds.includes(guestId)) {
|
||||
const isProcessed = await this.isGuestIdProcessed(guestId);
|
||||
if (!isProcessed) {
|
||||
guestIdsToProcess.add(guestId);
|
||||
}
|
||||
}
|
||||
|
||||
// Логируем только если есть что обрабатывать
|
||||
if (guestIdsToProcess.size > 0) {
|
||||
logger.info(
|
||||
`[linkGuestMessages] Processing ${guestIdsToProcess.size} guest IDs for user ${userId}`
|
||||
);
|
||||
}
|
||||
|
||||
// Обрабатываем все собранные гостевые ID
|
||||
for (const guestId of guestIdsToProcess) {
|
||||
await this.processGuestMessagesWrapper(userId, guestId);
|
||||
session.processedGuestIds.push(guestId);
|
||||
|
||||
// Помечаем guestId как обработанный в базе данных
|
||||
await db.getQuery()(
|
||||
@@ -101,9 +101,6 @@ class SessionService {
|
||||
);
|
||||
}
|
||||
|
||||
// Сохраняем сессию
|
||||
await this.saveSession(session);
|
||||
|
||||
return { success: true };
|
||||
} catch (error) {
|
||||
logger.error('[linkGuestMessages] Error:', error);
|
||||
@@ -111,6 +108,25 @@ class SessionService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет, был ли guest ID уже обработан
|
||||
* @param {string} guestId - ID гостя
|
||||
* @returns {Promise<boolean>} - Был ли guest ID обработан
|
||||
*/
|
||||
async isGuestIdProcessed(guestId) {
|
||||
try {
|
||||
const result = await db.getQuery()(
|
||||
'SELECT processed FROM guest_user_mapping WHERE guest_id = $1',
|
||||
[guestId]
|
||||
);
|
||||
|
||||
return result.rows.length > 0 && result.rows[0].processed === true;
|
||||
} catch (error) {
|
||||
logger.error(`[isGuestIdProcessed] Error checking guest ID ${guestId}:`, error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Обертка для функции processGuestMessages
|
||||
* @param {number} userId - ID пользователя
|
||||
@@ -119,9 +135,6 @@ class SessionService {
|
||||
*/
|
||||
async processGuestMessagesWrapper(userId, guestId) {
|
||||
try {
|
||||
logger.info(
|
||||
`[processGuestMessagesWrapper] Processing messages: userId=${userId}, guestId=${guestId}`
|
||||
);
|
||||
return await processGuestMessages(userId, guestId);
|
||||
} catch (error) {
|
||||
logger.error(`[processGuestMessagesWrapper] Error: ${error.message}`, error);
|
||||
@@ -260,6 +273,29 @@ class SessionService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Очищает все массивы processedGuestIds из сессий в базе данных
|
||||
* @returns {Promise<boolean>} - Результат операции
|
||||
*/
|
||||
async cleanupProcessedGuestIds() {
|
||||
try {
|
||||
logger.info('[SessionService] Starting cleanup of processedGuestIds from sessions');
|
||||
|
||||
// Используем один SQL-запрос для обновления всех сессий
|
||||
const result = await db.getQuery()(
|
||||
`UPDATE session
|
||||
SET sess = (sess::jsonb - 'processedGuestIds')::json
|
||||
WHERE sess::text LIKE '%"processedGuestIds"%'`
|
||||
);
|
||||
|
||||
logger.info(`[SessionService] Cleaned processedGuestIds from ${result.rowCount} sessions`);
|
||||
return true;
|
||||
} catch (error) {
|
||||
logger.error('[SessionService] Error during cleanup:', error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Очищает данные аутентификации в сессии
|
||||
* @param {object} session - Объект сессии
|
||||
@@ -286,6 +322,11 @@ class SessionService {
|
||||
delete session.telegramUsername;
|
||||
delete session.telegramFirstName;
|
||||
|
||||
// Очищаем массив processedGuestIds для экономии места
|
||||
if (session.processedGuestIds) {
|
||||
delete session.processedGuestIds;
|
||||
}
|
||||
|
||||
// Восстанавливаем гостевой ID для продолжения работы
|
||||
if (guestId) {
|
||||
session.guestId = guestId;
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const yaml = require('js-yaml');
|
||||
|
||||
const composePath = '/docker-compose.yml';
|
||||
|
||||
function addCloudflaredToCompose(tunnelToken) {
|
||||
console.log('[cloudflaredCompose] process.cwd():', process.cwd());
|
||||
console.log('[cloudflaredCompose] __dirname:', __dirname);
|
||||
console.log('[cloudflaredCompose] Ожидаемый путь к compose:', composePath);
|
||||
if (!fs.existsSync(composePath)) {
|
||||
console.error('[cloudflaredCompose] Файл не найден:', composePath);
|
||||
throw new Error('docker-compose.yml не найден по пути: ' + composePath);
|
||||
}
|
||||
let doc;
|
||||
try {
|
||||
doc = yaml.load(fs.readFileSync(composePath, 'utf8'));
|
||||
} catch (e) {
|
||||
console.error('[cloudflaredCompose] Ошибка чтения compose:', e);
|
||||
throw e;
|
||||
}
|
||||
doc.services = doc.services || {};
|
||||
doc.services.cloudflared = {
|
||||
image: 'cloudflare/cloudflared:latest',
|
||||
command: 'tunnel --no-autoupdate run',
|
||||
environment: [`TUNNEL_TOKEN=${tunnelToken}`],
|
||||
restart: 'unless-stopped'
|
||||
};
|
||||
try {
|
||||
fs.writeFileSync(composePath, yaml.dump(doc), 'utf8');
|
||||
console.log('[cloudflaredCompose] cloudflared добавлен в compose:', composePath);
|
||||
} catch (e) {
|
||||
console.error('[cloudflaredCompose] Ошибка записи compose:', e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { addCloudflaredToCompose };
|
||||
@@ -89,19 +89,19 @@
|
||||
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0"
|
||||
integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==
|
||||
|
||||
"@eslint/config-array@^0.20.1":
|
||||
version "0.20.1"
|
||||
resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.20.1.tgz#454f89be82b0e5b1ae872c154c7e2f3dd42c3979"
|
||||
integrity sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==
|
||||
"@eslint/config-array@^0.21.0":
|
||||
version "0.21.0"
|
||||
resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.0.tgz#abdbcbd16b124c638081766392a4d6b509f72636"
|
||||
integrity sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==
|
||||
dependencies:
|
||||
"@eslint/object-schema" "^2.1.6"
|
||||
debug "^4.3.1"
|
||||
minimatch "^3.1.2"
|
||||
|
||||
"@eslint/config-helpers@^0.2.1":
|
||||
version "0.2.3"
|
||||
resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.2.3.tgz#39d6da64ed05d7662659aa7035b54cd55a9f3672"
|
||||
integrity sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==
|
||||
"@eslint/config-helpers@^0.3.0":
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.3.0.tgz#3e09a90dfb87e0005c7694791e58e97077271286"
|
||||
integrity sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==
|
||||
|
||||
"@eslint/core@^0.14.0":
|
||||
version "0.14.0"
|
||||
@@ -132,10 +132,10 @@
|
||||
minimatch "^3.1.2"
|
||||
strip-json-comments "^3.1.1"
|
||||
|
||||
"@eslint/js@9.29.0":
|
||||
version "9.29.0"
|
||||
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.29.0.tgz#dc6fd117c19825f8430867a662531da36320fe56"
|
||||
integrity sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==
|
||||
"@eslint/js@9.30.1":
|
||||
version "9.30.1"
|
||||
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.30.1.tgz#ebe9dd52a38345784c486300175a28c6013c088d"
|
||||
integrity sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==
|
||||
|
||||
"@eslint/object-schema@^2.1.6":
|
||||
version "2.1.6"
|
||||
@@ -367,9 +367,9 @@
|
||||
integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==
|
||||
|
||||
"@google/genai@^1.0.1":
|
||||
version "1.7.0"
|
||||
resolved "https://registry.yarnpkg.com/@google/genai/-/genai-1.7.0.tgz#4af2fe86343e990eebfb4adcd0fa744cb0e6907e"
|
||||
integrity sha512-s/OZLkrIfBwc+SFFaZoKdEogkw4in0YRTGc4Q483jnfchNBWzrNe560eZEfGJHQRPn6YfzJgECCx0sqEOMWvYw==
|
||||
version "1.8.0"
|
||||
resolved "https://registry.yarnpkg.com/@google/genai/-/genai-1.8.0.tgz#b99d776bfc83160431240b79b8eb57526cb8fbdc"
|
||||
integrity sha512-n3KiMFesQCy2R9iSdBIuJ0JWYQ1HZBJJkmt4PPZMGZKvlgHhBAGw1kUMyX+vsAIzprN3lK45DI755lm70wPOOg==
|
||||
dependencies:
|
||||
google-auth-library "^9.14.2"
|
||||
ws "^8.18.0"
|
||||
@@ -427,6 +427,18 @@
|
||||
resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba"
|
||||
integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==
|
||||
|
||||
"@isaacs/balanced-match@^4.0.1":
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz#3081dadbc3460661b751e7591d7faea5df39dd29"
|
||||
integrity sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==
|
||||
|
||||
"@isaacs/brace-expansion@^5.0.0":
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz#4b3dabab7d8e75a429414a96bd67bf4c1d13e0f3"
|
||||
integrity sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==
|
||||
dependencies:
|
||||
"@isaacs/balanced-match" "^4.0.1"
|
||||
|
||||
"@isaacs/cliui@^8.0.2":
|
||||
version "8.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
|
||||
@@ -445,9 +457,9 @@
|
||||
integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
|
||||
|
||||
"@jridgewell/sourcemap-codec@^1.4.10":
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
|
||||
integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
|
||||
version "1.5.4"
|
||||
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz#7358043433b2e5da569aa02cbc4c121da3af27d7"
|
||||
integrity sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==
|
||||
|
||||
"@jridgewell/trace-mapping@0.3.9":
|
||||
version "0.3.9"
|
||||
@@ -463,9 +475,9 @@
|
||||
integrity sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==
|
||||
|
||||
"@langchain/community@^0.3.34":
|
||||
version "0.3.47"
|
||||
resolved "https://registry.yarnpkg.com/@langchain/community/-/community-0.3.47.tgz#224d7eae9ae1b1de934761888131cb7b8b30d322"
|
||||
integrity sha512-Vo42kAfkXpTFSevhEkeqqE55az8NyQgDktCbitXYuhipNbFYx08XVvqEDkFkB20MM/Z7u+cvLb+DxCqnKuH0CQ==
|
||||
version "0.3.48"
|
||||
resolved "https://registry.yarnpkg.com/@langchain/community/-/community-0.3.48.tgz#3487ada66da38ed47e2e1fa08d7299264a9be8bf"
|
||||
integrity sha512-0KceBKSx34lL5cnbKybWIMQAFTgkZJMOzcZ1YdcagIwgoDa5a4MsJdtTABxaY0gu+87Uo3KqMj+GXx2wQqnZWA==
|
||||
dependencies:
|
||||
"@langchain/openai" ">=0.2.0 <0.6.0"
|
||||
"@langchain/weaviate" "^0.2.0"
|
||||
@@ -504,9 +516,9 @@
|
||||
uuid "^10.0.0"
|
||||
|
||||
"@langchain/openai@>=0.1.0 <0.6.0", "@langchain/openai@>=0.2.0 <0.6.0":
|
||||
version "0.5.15"
|
||||
resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.5.15.tgz#d426684107cf8b3cac8dfff0344d6635d3699a55"
|
||||
integrity sha512-ANadEHyAj5sufQpz+SOPpKbyoMcTLhnh8/d+afbSPUqWsIMPpEFX3HoSY3nrBPG6l4NQQNG5P5oHb4SdC8+YIg==
|
||||
version "0.5.18"
|
||||
resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.5.18.tgz#59ebbf48044d711ce9503d3b9854a3533cb54683"
|
||||
integrity sha512-CX1kOTbT5xVFNdtLjnM0GIYNf+P7oMSu+dGCFxxWRa3dZwWiuyuBXCm+dToUGxDLnsHuV1bKBtIzrY1mLq/A1Q==
|
||||
dependencies:
|
||||
js-tiktoken "^1.0.12"
|
||||
openai "^5.3.0"
|
||||
@@ -520,9 +532,9 @@
|
||||
js-tiktoken "^1.0.12"
|
||||
|
||||
"@langchain/weaviate@^0.2.0":
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@langchain/weaviate/-/weaviate-0.2.0.tgz#cc21452a14cf1ed3c533a74dae366ecb417a5480"
|
||||
integrity sha512-gAtTCxSllR8Z92qAuRn2ir0cop241VmftQHQN+UYtTeoLge8hvZT5k0j55PDVaXTVpjx0ecx6DKv5I/wLRQI+A==
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@langchain/weaviate/-/weaviate-0.2.1.tgz#51ad20cf6d40e63d6149e5d01f91597cdff66744"
|
||||
integrity sha512-rlfAKF+GB0A5MUrol34oDrBkl4q6AefARk9KDW+LfzhV/74pZZLZyIPYPxvE4XwI3gvpwp024DNsDxK/4UW0/g==
|
||||
dependencies:
|
||||
uuid "^10.0.0"
|
||||
weaviate-client "^3.5.2"
|
||||
@@ -1171,9 +1183,11 @@
|
||||
integrity sha512-R/BdP7OxEMc44l2Ex5lSXHoIXTB2JLNa3y2QISIbr58U/YcsffyQrYW//hZSdrfxrjRZj3GcUoxMPGdO8gSYuw==
|
||||
|
||||
"@types/minimatch@*":
|
||||
version "5.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca"
|
||||
integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-6.0.0.tgz#4d207b1cc941367bdcd195a3a781a7e4fc3b1e03"
|
||||
integrity sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA==
|
||||
dependencies:
|
||||
minimatch "*"
|
||||
|
||||
"@types/mocha@>=9.1.0":
|
||||
version "10.0.10"
|
||||
@@ -1189,9 +1203,9 @@
|
||||
form-data "^4.0.0"
|
||||
|
||||
"@types/node@*", "@types/node@>=13.7.0":
|
||||
version "24.0.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-24.0.4.tgz#dbae889912bda33a7f57669fb8587c1a56bc0c1f"
|
||||
integrity sha512-ulyqAkrhnuNq9pB76DRBTkcS6YsmDALy6Ua63V8OhrOBgbcYt6IOdzpw5P1+dyRIyMerzLkeYWBeOXPpA9GMAA==
|
||||
version "24.0.10"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-24.0.10.tgz#f65a169779bf0d70203183a1890be7bee8ca2ddb"
|
||||
integrity sha512-ENHwaH+JIRTDIEEbDK6QSQntAYGtbvdDXnMXnZaZ6k13Du1dPMmprkEHIL7ok2Wl2aZevetwTAb5S+7yIF+enA==
|
||||
dependencies:
|
||||
undici-types "~7.8.0"
|
||||
|
||||
@@ -1203,9 +1217,9 @@
|
||||
undici-types "~6.19.2"
|
||||
|
||||
"@types/node@^18.11.18":
|
||||
version "18.19.112"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.112.tgz#cd2aee9c075402e0e1942a44101428881dbeb110"
|
||||
integrity sha512-i+Vukt9POdS/MBI7YrrkkI5fMfwFtOjphSmt4WXYLfwqsfr6z/HdCx7LqT9M7JktGob8WNgj8nFB4TbGNE4Cog==
|
||||
version "18.19.115"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.115.tgz#cd94caf14472021b4443c99bcd7aac6bb5c4f672"
|
||||
integrity sha512-kNrFiTgG4a9JAn1LMQeLOv3MvXIPokzXziohMrMsvpYgLpdEt/mMiVYc4sGKtDfyxM5gIDF4VgrPRyCw4fHOYg==
|
||||
dependencies:
|
||||
undici-types "~5.26.4"
|
||||
|
||||
@@ -1628,9 +1642,9 @@ bare-events@^2.2.0, bare-events@^2.5.4:
|
||||
integrity sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==
|
||||
|
||||
bare-fs@^4.0.1:
|
||||
version "4.1.5"
|
||||
resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-4.1.5.tgz#1d06c076e68cc8bf97010d29af9e3ac3808cdcf7"
|
||||
integrity sha512-1zccWBMypln0jEE05LzZt+V/8y8AQsQQqxtklqaIyg5nu6OAYFhZxPXinJTSG+kU5qyNmeLgcn9AW7eHiCHVLA==
|
||||
version "4.1.6"
|
||||
resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-4.1.6.tgz#0925521e7310f65cb1f154cab264f0b647a7cdef"
|
||||
integrity sha512-25RsLF33BqooOEFNdMcEhMpJy8EoR88zSMrnOQOaM3USnOK2VmaJ1uaQEwPA6AQjrv1lXChScosN6CzbwbO9OQ==
|
||||
dependencies:
|
||||
bare-events "^2.5.4"
|
||||
bare-path "^3.0.0"
|
||||
@@ -2040,19 +2054,6 @@ cliui@^8.0.1:
|
||||
strip-ansi "^6.0.1"
|
||||
wrap-ansi "^7.0.0"
|
||||
|
||||
cloudflare@^4.4.1:
|
||||
version "4.4.1"
|
||||
resolved "https://registry.yarnpkg.com/cloudflare/-/cloudflare-4.4.1.tgz#a3a395b2eed46e6b2e5175a62cc962267cef3981"
|
||||
integrity sha512-wrtQ9WMflnfRcmdQZf/XfVVkeucgwzzYeqFDfgbNdADTaexsPwrtt3etzUvPGvVUeEk9kOPfNkl8MSzObxrIsg==
|
||||
dependencies:
|
||||
"@types/node" "^18.11.18"
|
||||
"@types/node-fetch" "^2.6.4"
|
||||
abort-controller "^3.0.0"
|
||||
agentkeepalive "^4.2.1"
|
||||
form-data-encoder "1.7.2"
|
||||
formdata-node "^4.3.2"
|
||||
node-fetch "^2.6.7"
|
||||
|
||||
color-convert@^1.9.0, color-convert@^1.9.3:
|
||||
version "1.9.3"
|
||||
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
|
||||
@@ -2507,9 +2508,9 @@ domutils@^3.0.1:
|
||||
domhandler "^5.0.3"
|
||||
|
||||
dotenv@^16.0.3:
|
||||
version "16.5.0"
|
||||
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.5.0.tgz#092b49f25f808f020050051d1ff258e404c78692"
|
||||
integrity sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==
|
||||
version "16.6.1"
|
||||
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.6.1.tgz#773f0e69527a8315c7285d5ee73c4459d20a8020"
|
||||
integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==
|
||||
|
||||
dunder-proto@^1.0.0, dunder-proto@^1.0.1:
|
||||
version "1.0.1"
|
||||
@@ -2772,17 +2773,17 @@ eslint-visitor-keys@^4.2.1:
|
||||
integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==
|
||||
|
||||
eslint@^9.21.0:
|
||||
version "9.29.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.29.0.tgz#65e3db3b7e5a5b04a8af541741a0f3648d0a81a6"
|
||||
integrity sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==
|
||||
version "9.30.1"
|
||||
resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.30.1.tgz#d4107b39964412acd9b5c0744f1c6df514fa1211"
|
||||
integrity sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==
|
||||
dependencies:
|
||||
"@eslint-community/eslint-utils" "^4.2.0"
|
||||
"@eslint-community/regexpp" "^4.12.1"
|
||||
"@eslint/config-array" "^0.20.1"
|
||||
"@eslint/config-helpers" "^0.2.1"
|
||||
"@eslint/config-array" "^0.21.0"
|
||||
"@eslint/config-helpers" "^0.3.0"
|
||||
"@eslint/core" "^0.14.0"
|
||||
"@eslint/eslintrc" "^3.3.1"
|
||||
"@eslint/js" "9.29.0"
|
||||
"@eslint/js" "9.30.1"
|
||||
"@eslint/plugin-kit" "^0.3.1"
|
||||
"@humanfs/node" "^0.16.6"
|
||||
"@humanwhocodes/module-importer" "^1.0.1"
|
||||
@@ -2959,9 +2960,9 @@ ethers@6.13.5:
|
||||
ws "8.17.1"
|
||||
|
||||
ethers@^6.14.0:
|
||||
version "6.14.4"
|
||||
resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.14.4.tgz#0f6fbc562a8425c7c888da307fa71ef796be0c04"
|
||||
integrity sha512-Jm/dzRs2Z9iBrT6e9TvGxyb5YVKAPLlpna7hjxH7KH/++DSh2T/JVmQUv7iHI5E55hDbp/gEVvstWYXVxXFzsA==
|
||||
version "6.15.0"
|
||||
resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.15.0.tgz#2980f2a3baf0509749b7e21f8692fa8a8349c0e3"
|
||||
integrity sha512-Kf/3ZW54L4UT0pZtsY/rf+EkBU7Qi5nnhonjUb8yTXcxH3cdcWrV2cRyk0Xk/4jK6OoHhxxZHriyhje20If2hQ==
|
||||
dependencies:
|
||||
"@adraffy/ens-normalize" "1.10.1"
|
||||
"@noble/curves" "1.2.0"
|
||||
@@ -3529,9 +3530,9 @@ globals@^14.0.0:
|
||||
integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==
|
||||
|
||||
globals@^16.0.0:
|
||||
version "16.2.0"
|
||||
resolved "https://registry.yarnpkg.com/globals/-/globals-16.2.0.tgz#19efcd1ddde2bd5efce128e5c2e441df1abc6f7c"
|
||||
integrity sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==
|
||||
version "16.3.0"
|
||||
resolved "https://registry.yarnpkg.com/globals/-/globals-16.3.0.tgz#66118e765ddaf9e2d880f7e17658543f93f1f667"
|
||||
integrity sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==
|
||||
|
||||
globalthis@^1.0.4:
|
||||
version "1.0.4"
|
||||
@@ -4439,9 +4440,9 @@ langsmith@^0.1.43:
|
||||
uuid "^10.0.0"
|
||||
|
||||
langsmith@^0.3.33:
|
||||
version "0.3.33"
|
||||
resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.3.33.tgz#f6c56b338cd6a9aa139dbbafcf4b037320eb3041"
|
||||
integrity sha512-imNIaBL6+ElE5eMzNHYwFxo6W/6rHlqcaUjCYoIeGdCYWlARxE3CTGKul5DJnaUgGP2CTLFeNXyvRx5HWC/4KQ==
|
||||
version "0.3.39"
|
||||
resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.3.39.tgz#668918ad6a19e9772c7bbc551c03867ea48f07d0"
|
||||
integrity sha512-dzrsERzrDh/jSuhOACcZaZf3zENSROk+1XGWFdBxeBa/aFuV7sQzG+wYH+Pdr+VOw2RUoFzl+PHzkuWZw1zuRQ==
|
||||
dependencies:
|
||||
"@types/uuid" "^10.0.0"
|
||||
chalk "^4.1.2"
|
||||
@@ -4484,10 +4485,10 @@ libbase64@1.3.0:
|
||||
resolved "https://registry.yarnpkg.com/libbase64/-/libbase64-1.3.0.tgz#053314755a05d2e5f08bbfc48d0290e9322f4406"
|
||||
integrity sha512-GgOXd0Eo6phYgh0DJtjQ2tO8dc0IVINtZJeARPeiIJqge+HdsWSuaDTe8ztQ7j/cONByDZ3zeB325AHiv5O0dg==
|
||||
|
||||
libmime@5.3.6:
|
||||
version "5.3.6"
|
||||
resolved "https://registry.yarnpkg.com/libmime/-/libmime-5.3.6.tgz#e6dfc655b6b4614bad90e8e65817957903b56580"
|
||||
integrity sha512-j9mBC7eiqi6fgBPAGvKCXJKJSIASanYF4EeA4iBzSG0HxQxmXnR3KbyWqTn4CwsKSebqCv2f5XZfAO6sKzgvwA==
|
||||
libmime@5.3.7:
|
||||
version "5.3.7"
|
||||
resolved "https://registry.yarnpkg.com/libmime/-/libmime-5.3.7.tgz#3835b6443d982d5cd1ac32ee241adbbc11b34406"
|
||||
integrity sha512-FlDb3Wtha8P01kTL3P9M+ZDNDWPKPmKHWaU/cG/lg5pfuAwdflVpZE+wm9m7pKmC5ww6s+zTxBKS1p6yl3KpSw==
|
||||
dependencies:
|
||||
encoding-japanese "2.2.0"
|
||||
iconv-lite "0.6.3"
|
||||
@@ -4591,28 +4592,28 @@ luxon@~3.6.0:
|
||||
integrity sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==
|
||||
|
||||
mailparser@^3.7.2:
|
||||
version "3.7.3"
|
||||
resolved "https://registry.yarnpkg.com/mailparser/-/mailparser-3.7.3.tgz#3c718cd73539c0165be25317e3ffbe704adc444a"
|
||||
integrity sha512-0RM14cZF0gO1y2Q/82hhWranispZOUSYHwvQ21h12x90NwD6+D5q59S5nOLqCtCdYitHN58LJXWEHa4RWm7BYA==
|
||||
version "3.7.4"
|
||||
resolved "https://registry.yarnpkg.com/mailparser/-/mailparser-3.7.4.tgz#dd70550b066fdc35563eda94bee5ab7a8d0c2439"
|
||||
integrity sha512-Beh4yyR4jLq3CZZ32asajByrXnW8dLyKCAQD3WvtTiBnMtFWhxO+wa93F6sJNjDmfjxXs4NRNjw3XAGLqZR3Vg==
|
||||
dependencies:
|
||||
encoding-japanese "2.2.0"
|
||||
he "1.2.0"
|
||||
html-to-text "9.0.5"
|
||||
iconv-lite "0.6.3"
|
||||
libmime "5.3.6"
|
||||
libmime "5.3.7"
|
||||
linkify-it "5.0.0"
|
||||
mailsplit "5.4.3"
|
||||
nodemailer "7.0.3"
|
||||
mailsplit "5.4.5"
|
||||
nodemailer "7.0.4"
|
||||
punycode.js "2.3.1"
|
||||
tlds "1.259.0"
|
||||
|
||||
mailsplit@5.4.3:
|
||||
version "5.4.3"
|
||||
resolved "https://registry.yarnpkg.com/mailsplit/-/mailsplit-5.4.3.tgz#470ebca836d87bd8fa6a72d36536238b85921765"
|
||||
integrity sha512-PFV0BBh4Tv7Omui5FtXXVtN4ExAxIi8Yvmb9JgBz+J6Hnnrv/YYXLlKKudLhXwd3/qWEATOslRsnzVCWDeCnmQ==
|
||||
mailsplit@5.4.5:
|
||||
version "5.4.5"
|
||||
resolved "https://registry.yarnpkg.com/mailsplit/-/mailsplit-5.4.5.tgz#dca1ea58419664fe01870ba8845773a048aa6384"
|
||||
integrity sha512-oMfhmvclR689IIaQmIcR5nODnZRRVwAKtqFT407TIvmhX2OLUBnshUTcxzQBt3+96sZVDud9NfSe1NxAkUNXEQ==
|
||||
dependencies:
|
||||
libbase64 "1.3.0"
|
||||
libmime "5.3.6"
|
||||
libmime "5.3.7"
|
||||
libqp "2.1.1"
|
||||
|
||||
make-error@^1.1.1:
|
||||
@@ -4706,6 +4707,13 @@ minimalistic-crypto-utils@^1.0.1:
|
||||
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
|
||||
integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==
|
||||
|
||||
minimatch@*:
|
||||
version "10.0.3"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.3.tgz#cf7a0314a16c4d9ab73a7730a0e8e3c3502d47aa"
|
||||
integrity sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==
|
||||
dependencies:
|
||||
"@isaacs/brace-expansion" "^5.0.0"
|
||||
|
||||
"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
|
||||
@@ -4926,10 +4934,10 @@ node-telegram-bot-api@^0.66.0:
|
||||
mime "^1.6.0"
|
||||
pump "^2.0.0"
|
||||
|
||||
nodemailer@7.0.3:
|
||||
version "7.0.3"
|
||||
resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-7.0.3.tgz#c098ce79ac60c7c111a86949eed2f99bd00cdac3"
|
||||
integrity sha512-Ajq6Sz1x7cIK3pN6KesGTah+1gnwMnx5gKl3piQlQQE/PwyJ4Mbc8is2psWYxK3RJTVeqsDaCv8ZzXLCDHMTZw==
|
||||
nodemailer@7.0.4:
|
||||
version "7.0.4"
|
||||
resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-7.0.4.tgz#1204ca673026e93155d4a46eaa7c498a30fdd72a"
|
||||
integrity sha512-9O00Vh89/Ld2EcVCqJ/etd7u20UhME0f/NToPfArwPEe1Don1zy4mAIz6ariRr7mJ2RDxtaDzN0WJVdVXPtZaw==
|
||||
|
||||
nodemailer@^6.10.0:
|
||||
version "6.10.1"
|
||||
@@ -5056,9 +5064,9 @@ openai@^4.102.0:
|
||||
node-fetch "^2.6.7"
|
||||
|
||||
openai@^5.3.0:
|
||||
version "5.7.0"
|
||||
resolved "https://registry.yarnpkg.com/openai/-/openai-5.7.0.tgz#5f26b51c8348017f014db51795a983f495abac7c"
|
||||
integrity sha512-zXWawZl6J/P5Wz57/nKzVT3kJQZvogfuyuNVCdEp4/XU2UNrjL7SsuNpWAyLZbo6HVymwmnfno9toVzBhelygA==
|
||||
version "5.8.2"
|
||||
resolved "https://registry.yarnpkg.com/openai/-/openai-5.8.2.tgz#b12f968618deb87f6231b35a21b590d0b529d70b"
|
||||
integrity sha512-8C+nzoHYgyYOXhHGN6r0fcb4SznuEn1R7YZMvlqDbnCuE0FM2mm3T1HiYW6WIcMS/F1Of2up/cSPjLPaWt0X9Q==
|
||||
|
||||
openapi-types@^12.1.3:
|
||||
version "12.1.3"
|
||||
@@ -5271,10 +5279,10 @@ performance-now@^2.1.0:
|
||||
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
|
||||
integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==
|
||||
|
||||
pg-cloudflare@^1.2.6:
|
||||
version "1.2.6"
|
||||
resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.2.6.tgz#3f3afa99495492002d757df645b1be2b5aca099f"
|
||||
integrity sha512-uxmJAnmIgmYgnSFzgOf2cqGQBzwnRYcrEgXuFjJNEkpedEIPBSEzxY7ph4uA9k1mI+l/GR0HjPNS6FKNZe8SBQ==
|
||||
pg-cloudflare@^1.2.7:
|
||||
version "1.2.7"
|
||||
resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.2.7.tgz#a1f3d226bab2c45ae75ea54d65ec05ac6cfafbef"
|
||||
integrity sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==
|
||||
|
||||
pg-connection-string@^2.9.1:
|
||||
version "2.9.1"
|
||||
@@ -5291,10 +5299,10 @@ pg-pool@^3.10.1:
|
||||
resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.10.1.tgz#481047c720be2d624792100cac1816f8850d31b2"
|
||||
integrity sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==
|
||||
|
||||
pg-protocol@^1.10.2:
|
||||
version "1.10.2"
|
||||
resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.10.2.tgz#76a07dd7f13ce67d7f9cf162dca181923b6641fa"
|
||||
integrity sha512-Ci7jy8PbaWxfsck2dwZdERcDG2A0MG8JoQILs+uZNjABFuBuItAZCWUNz8sXRDMoui24rJw7WlXqgpMdBSN/vQ==
|
||||
pg-protocol@^1.10.3:
|
||||
version "1.10.3"
|
||||
resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.10.3.tgz#ac9e4778ad3f84d0c5670583bab976ea0a34f69f"
|
||||
integrity sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==
|
||||
|
||||
pg-types@2.2.0:
|
||||
version "2.2.0"
|
||||
@@ -5308,17 +5316,17 @@ pg-types@2.2.0:
|
||||
postgres-interval "^1.1.0"
|
||||
|
||||
pg@^8.10.0, pg@^8.12.0:
|
||||
version "8.16.2"
|
||||
resolved "https://registry.yarnpkg.com/pg/-/pg-8.16.2.tgz#1b3744531abe86ce80209ac560fb6f0e8e15f943"
|
||||
integrity sha512-OtLWF0mKLmpxelOt9BqVq83QV6bTfsS0XLegIeAKqKjurRnRKie1Dc1iL89MugmSLhftxw6NNCyZhm1yQFLMEQ==
|
||||
version "8.16.3"
|
||||
resolved "https://registry.yarnpkg.com/pg/-/pg-8.16.3.tgz#160741d0b44fdf64680e45374b06d632e86c99fd"
|
||||
integrity sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==
|
||||
dependencies:
|
||||
pg-connection-string "^2.9.1"
|
||||
pg-pool "^3.10.1"
|
||||
pg-protocol "^1.10.2"
|
||||
pg-protocol "^1.10.3"
|
||||
pg-types "2.2.0"
|
||||
pgpass "1.0.5"
|
||||
optionalDependencies:
|
||||
pg-cloudflare "^1.2.6"
|
||||
pg-cloudflare "^1.2.7"
|
||||
|
||||
pgpass@1.0.5:
|
||||
version "1.0.5"
|
||||
@@ -5390,9 +5398,9 @@ prettier@^2.3.1:
|
||||
integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==
|
||||
|
||||
prettier@^3.5.3:
|
||||
version "3.6.1"
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.6.1.tgz#cc3bce21c09a477b1e987b76ce9663925d86ae44"
|
||||
integrity sha512-5xGWRa90Sp2+x1dQtNpIpeOQpTDBs9cZDmA/qs2vDNN2i18PdapqY7CmBeyLlMuGqXJRIOPaCaVZTLNQRWUH/A==
|
||||
version "3.6.2"
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.6.2.tgz#ccda02a1003ebbb2bfda6f83a074978f608b9393"
|
||||
integrity sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==
|
||||
|
||||
process-nextick-args@~2.0.0:
|
||||
version "2.0.1"
|
||||
@@ -5943,12 +5951,13 @@ setprototypeof@1.2.0:
|
||||
integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
|
||||
|
||||
sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8:
|
||||
version "2.4.11"
|
||||
resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
|
||||
integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
|
||||
version "2.4.12"
|
||||
resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.12.tgz#eb8b568bf383dfd1867a32c3f2b74eb52bdbf23f"
|
||||
integrity sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==
|
||||
dependencies:
|
||||
inherits "^2.0.1"
|
||||
safe-buffer "^5.0.1"
|
||||
inherits "^2.0.4"
|
||||
safe-buffer "^5.2.1"
|
||||
to-buffer "^1.2.0"
|
||||
|
||||
sha1@^1.1.1:
|
||||
version "1.1.1"
|
||||
@@ -6388,9 +6397,9 @@ table@^6.8.0:
|
||||
strip-ansi "^6.0.1"
|
||||
|
||||
tar-fs@^3.0.0:
|
||||
version "3.0.10"
|
||||
resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.10.tgz#60f8ccd60fe30164bdd3d6606619650236ed38f7"
|
||||
integrity sha512-C1SwlQGNLe/jPNqapK8epDsXME7CAJR5RL3GcE6KWx1d9OUByzoHVcbu1VPI8tevg9H8Alae0AApHHFGzrD5zA==
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.1.0.tgz#4675e2254d81410e609d91581a762608de999d25"
|
||||
integrity sha512-5Mty5y/sOF1YWj1J6GiBodjlDc05CUR8PKXrsnFAiSG0xA+GHeWLovaZPYUDXkH/1iKRf2+M5+OrRgzC7O9b7w==
|
||||
dependencies:
|
||||
pump "^3.0.0"
|
||||
tar-stream "^3.1.5"
|
||||
@@ -6892,9 +6901,9 @@ verror@1.10.0:
|
||||
extsprintf "^1.2.0"
|
||||
|
||||
viem@^2.23.15, viem@^2.27.0:
|
||||
version "2.31.4"
|
||||
resolved "https://registry.yarnpkg.com/viem/-/viem-2.31.4.tgz#a8cce5579cc495a2586a16dd4062deecc0f53f1d"
|
||||
integrity sha512-0UZ/asvzl6p44CIBRDbwEcn3HXIQQurBZcMo5qmLhQ8s27Ockk+RYohgTLlpLvkYs8/t4UUEREAbHLuek1kXcw==
|
||||
version "2.31.7"
|
||||
resolved "https://registry.yarnpkg.com/viem/-/viem-2.31.7.tgz#1b8afa221a96a98edf9349760c6925f67c123dd6"
|
||||
integrity sha512-mpB8Hp6xK77E/b/yJmpAIQcxcOfpbrwWNItjnXaIA8lxZYt4JS433Pge2gg6Hp3PwyFtaUMh01j5L8EXnLTjQQ==
|
||||
dependencies:
|
||||
"@noble/curves" "1.9.2"
|
||||
"@noble/hashes" "1.8.0"
|
||||
@@ -7122,9 +7131,9 @@ write-file-atomic@3.0.3:
|
||||
typedarray-to-buffer "^3.1.5"
|
||||
|
||||
ws@8.17.1, ws@8.18.2, ws@^7.4.6, ws@^8.18.0, ws@^8.18.1:
|
||||
version "8.18.2"
|
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.2.tgz#42738b2be57ced85f46154320aabb51ab003705a"
|
||||
integrity sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==
|
||||
version "8.18.3"
|
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472"
|
||||
integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==
|
||||
|
||||
xtend@^4.0.0, xtend@^4.0.2:
|
||||
version "4.0.2"
|
||||
@@ -7212,6 +7221,6 @@ zod-to-json-schema@^3.22.3, zod-to-json-schema@^3.22.4:
|
||||
integrity sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==
|
||||
|
||||
zod@^3.22.4, zod@^3.25.32:
|
||||
version "3.25.67"
|
||||
resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.67.tgz#62987e4078e2ab0f63b491ef0c4f33df24236da8"
|
||||
integrity sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==
|
||||
version "3.25.74"
|
||||
resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.74.tgz#9368a3986fe756bd94b9a5baad9919660ff3f250"
|
||||
integrity sha512-J8poo92VuhKjNknViHRAIuuN6li/EwFbAC8OedzI8uxpEPGiXHGQu9wemIAioIpqgfB4SySaJhdk0mH5Y4ICBg==
|
||||
|
||||
Reference in New Issue
Block a user