# Удалённые JS-скрипты задач Документ описывает scripting-слой, который позволяет обновлять логику банковских скриптов **без пересборки и переустановки приложения** — JS-файлы тянутся с сервера и исполняются внутри `QJSEngine`. > **Статус.** Фреймворк и удалённое обновление полностью реализованы. На JS > перенесены: `Black::GetProfileInfo` (PoC); **все 7 скриптов Ozon** — > `get_profile_info`, `login_and_check_accounts`, `get_card_info`, `pay_by_card`, > `pay_by_phone`, `get_last_transactions`. Остальные банки (Dushanbe, оставшийся > Black) — на C++, мигрируются. --- ## 1. Зачем это нужно Банковские UI меняются часто: переезжают кнопки, появляются новые экраны подтверждения, шрифты ломают OCR. Раньше любая такая правка требовала: 1. Обновить C++-код скрипта. 2. Пересобрать релиз под Windows/macOS. 3. Раскатить новый exe на все десктопы. При живом потоке задач каждый раз это «окно простоя» в несколько часов. Удалённые JS-скрипты позволяют деплоить правку парсинга/последовательности тапов за минуты, без релизного цикла. C++-скрипты при этом **не убираются**: при любой ошибке загрузки/исполнения JS runtime прозрачно откатывается на текущую C++-реализацию. Это страхует от ситуации «сервер отдал битый JS — все устройства встали». --- ## 2. Архитектура ``` ┌──────────────────────────────────────────────────────────────────┐ │ config.ini [scripting] │ │ enabled, use_js_for, manifest_url, cache_dir, bundled_dir │ └──────────────────────────────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────────────────────┐ │ main.cpp → startScriptUpdater() │ │ └─ Scripting::ScriptUpdater │ │ └─ GET manifest_url → JSON {scripts:[{bank,script, │ │ version,url,sha256}]} │ │ └─ для каждой записи: GET url → SHA-256 check → │ │ ScriptCache::installFromBytes │ └──────────────────────────────────────────────────────────────────┘ │ ▼ (атомарно через QSaveFile) //