From 22968084b4d7fe9cb38ead81dcda07e3d3ea5a2a Mon Sep 17 00:00:00 2001 From: kalugin66 Date: Thu, 21 May 2026 22:58:44 +0500 Subject: [PATCH] v2 --- src/xray-panel.ts | 43 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/src/xray-panel.ts b/src/xray-panel.ts index 74017f5..3b39df0 100644 --- a/src/xray-panel.ts +++ b/src/xray-panel.ts @@ -316,6 +316,9 @@ export async function syncNovavpsToXray( } const outbounds = (config.outbounds as Record[]) || []; + console.log(`[${panelLabel}] Всего outbound'ов в конфиге ДО: ${outbounds.length}`); + const existingNovavpsTags = outbounds.filter((o) => String(o.tag || "").startsWith("novavps")); + console.log(`[${panelLabel}] Из них с тегом novavps*: ${existingNovavpsTags.length}`); connections.forEach((conn, idx) => { const tag = `novavps${idx + 1}`; @@ -324,15 +327,17 @@ export async function syncNovavpsToXray( const existingIdx = outbounds.findIndex((o) => o.tag === tag); if (existingIdx >= 0) { outbounds[existingIdx] = newOutbound; - console.log(`[${panelLabel}] Outbound ${tag} обновлён`); + console.log(`[${panelLabel}] Outbound ${tag} обновлён (${conn.address})`); } else { outbounds.push(newOutbound); - console.log(`[${panelLabel}] Outbound ${tag} добавлен`); + console.log(`[${panelLabel}] Outbound ${tag} добавлен (${conn.address})`); } }); config.outbounds = outbounds; const modifiedJson = JSON.stringify(config, null, 2); + const novavpsCountAfter = (outbounds.filter((o) => String(o.tag || "").startsWith("novavps"))).length; + console.log(`[${panelLabel}] После модификации: всего outbound'ов ${outbounds.length}, novavps*: ${novavpsCountAfter}`); await page.evaluate((json) => { const cm = document.querySelector(".CodeMirror") as unknown as { CodeMirror?: { setValue: (v: string) => void } }; @@ -350,7 +355,7 @@ export async function syncNovavpsToXray( }); }, modifiedJson); - await page.waitForTimeout(500); + await page.waitForTimeout(1500); const saved = await page.evaluate(() => { let clicked = false; @@ -366,13 +371,41 @@ export async function syncNovavpsToXray( }); if (saved) { - console.log(`[${panelLabel}] Конфиг сохранён`); - await page.waitForTimeout(2000); + console.log(`[${panelLabel}] Кнопка 'Сохранить' нажата, жду сохранения...`); + await page.waitForTimeout(3000); await page.waitForLoadState("networkidle"); } else { console.log(`[${panelLabel}] Кнопка 'Сохранить' не найдена`); } + // Верификация — читаем JSON из редактора и проверяем novavps-теги + console.log(`[${panelLabel}] Проверка сохранённого JSON...`); + const verifyJson = await page.evaluate(() => { + const cm = document.querySelector(".CodeMirror") as unknown as { CodeMirror?: { getValue: () => string } }; + if (cm?.CodeMirror) return cm.CodeMirror.getValue(); + const ta = document.querySelector("textarea"); + return ta?.value || ""; + }); + + if (verifyJson) { + try { + const verifyConfig = JSON.parse(verifyJson); + const verifyOutbounds = (verifyConfig.outbounds as Record[]) || []; + const verifyNovavps = verifyOutbounds.filter((o) => String(o.tag || "").startsWith("novavps")); + console.log(`[${panelLabel}] После сохранения: outbound'ов ${verifyOutbounds.length}, novavps*: ${verifyNovavps.length}`); + verifyNovavps.forEach((o) => { + const settings = (o as Record).settings as Record | undefined; + const vnext = settings?.vnext as Record[] | undefined; + const addr = vnext?.[0]?.address as string | undefined; + console.log(`[${panelLabel}] ${o.tag}: ${addr || "N/A"}`); + }); + } catch (e) { + console.log(`[${panelLabel}] Ошибка парсинга JSON при верификации: ${e}`); + } + } else { + console.log(`[${panelLabel}] Не удалось прочитать JSON после сохранения`); + } + await page.goto(`${baseUrl}/panel/`, { waitUntil: "networkidle", timeout: 30000 }); await page.waitForTimeout(3000);