Чинит загрузку данных админ-панели: origin воркера в CSP (#174)#175
Conversation
Adding .gitkeep for PR creation (default mode). This file will be removed when the task is complete. Issue: #174
) Админ-панель загружает все данные из кросс-доменного Cloudflare Worker (/admin/api/*), но его origin отсутствовал в директиве connect-src CSP админ-страницы. Браузер блокировал все запросы к воркеру, поэтому панель показывала баннер ошибки и пустые метрики — эффект исправления #172/#173 был не виден после деплоя через установщик. - admin-page.njk и собранный admin/index.html: добавлен https://ton-bridge-worker.tonbankcard.workers.dev в connect-src (установщик переписывает его на реальный URL воркера, как для redeem). - admin.js: DEFAULT_API_BASE выровнен с auth.js и списком замен установщика (был нерабочий плейсхолдер ...YOUR_ACCOUNT...). - Регрессионные проверки: deployment-assets.test.php и installer.test.php (PHP) + csp-sri.spec.js (e2e) проверяют наличие origin воркера в connect-src админ-страницы и его переписывание установщиком. Существующие admin.spec.js патчат window.fetch до запуска скриптов и намеренно обходят CSP, поэтому не могли поймать этот баг.
Working session summaryГотово. Issue #174 решена, PR #175 обновлён и готов к ревью. Что было не такАдмин-панель тянет все данные из кросс-доменного Cloudflare Worker ( Браузер блокировал все запросы к воркеру ещё до отправки → баннер Подтверждено эмпирически в браузере (Playwright): ошибка Исправление
Регрессионная защитаСуществующие
Статус
PR: #175 This summary was automatically extracted from the AI working session output. |
🤖 Solution Draft LogThis log file contains the complete execution trace of the AI solution draft process. 💰 Cost: $8.098061📊 Context and tokens usage:Claude Opus 4.7: (2 sub-sessions)
Total: (14.1K new + 293.4K cache writes + 8.5M cache reads) input tokens, 77.2K output tokens, $8.098061 cost 🤖 Models used:
📎 Log file uploaded as Gist (3935KB)Now working session is ended, feel free to review and add any feedback on the solution draft. |
✅ Ready to mergeThis pull request is now ready to be merged:
Monitored by hive-mind with --auto-restart-until-mergeable flag |
This reverts commit 7d9df07.
Проблема (issue #174)
После исправлений #172/#173 и деплоя через установщик админ-панель по-прежнему не показывала никаких данных — «всё осталось как до решения issue».
Корневая причина
Админ-панель загружает все наборы данных из кросс-доменного Cloudflare Worker (
/admin/api/*, см.assets/js/admin.js→worker/src/adminPanel.js). Но origin воркера отсутствовал в директивеconnect-srcCSP админ-страницы:Браузер блокировал все запросы к воркеру (
stats,fraud-flags,top-users,users,audit-log) ещё до отправки. Поэтому панель показывала баннерFailed to load data…и пустые метрики—. Логика загрузки из #172 была корректной, но её эффект был не виден — запросы не доходили до сети.Остальные страницы, работающие с воркером (
redeem,intro,otc,referral), уже перечисляют его origin вconnect-src— админ-страница была единственным исключением.Воспроизведение
experiments/admin-csp-repro.mjsподнимает статический сайт (origin A) и mock-воркер (origin B), как при реальном деплое. В консоли браузера:Исправление
src/_includes/admin-page.njkи собранныйadmin/index.html: вconnect-srcдобавленhttps://ton-bridge-worker.tonbankcard.workers.dev. Установщик переписывает этот литерал на реальный URL воркера (tonbridge_installer_static_replacements) — ровно так же, как дляredeem-страницы.assets/js/admin.js:DEFAULT_API_BASEвыровнен сauth.js(https://ton-bridge-worker.tonbankcard.workers.dev). Раньше там был нерабочий плейсхолдер...YOUR_ACCOUNT..., которого нет в списке замен установщика.Тесты (регрессионная защита)
Существующие
tests/admin.spec.jsпатчатwindow.fetchдо запуска скриптов и намеренно обходят CSP, поэтому этот баг поймать не могли. Добавлены проверки на уровне статического контента:tests/deployment-assets.test.php— собранныйadmin/index.htmlнесёт origin воркера вconnect-src.tests/installer.test.php— установщик переписывает origin воркера в админ-CSP.tests/csp-sri.spec.js(e2e) —connect-srcадмин-страницы вdist/содержит origin воркера.Все проверки проходят локально:
npm run test:installer,npm run test:admin-panel,npm run check:i18n, e2ecsp-sri+admin(88 passed).Скриншоты
До (CSP блокирует запросы — баннер ошибки, метрики
—):После (origin воркера разрешён — данные загружаются):
Closes #174