#pragma once #include #include class QObject; namespace Scripting { class ScriptRuntime { public: enum class Result { // Скрипт выполнился до конца. outResult — пустая строка или бизнес-ошибка // (то, что вернёт `run()` из JS как строку). EventHandler трактует строку // как ошибку задачи; пусто — как success. Completed, // Не удалось загрузить/распарсить/выполнить скрипт (JS-ошибка, не business). // В outResult — диагностика. Caller обязан сделать fallback на C++. EngineError, // Скрипт не разрешён к запуску (флаг выключен / нет файла / нет SHA). // outResult — причина. Caller делает fallback. Disabled }; // Синхронно запускает скрипт / в свежем QJSEngine. // Должен вызываться из того же потока, где будет использоваться (worker-поток // EventHandler'а — там разрешён блокирующий sleep и DAO). // // params видны JS как host.params.. // // signalSink — опциональный QObject, на котором JS может эмитить сигналы // через host.script.emit(jsonStr). Используется для скриптов // вроде GetLastTransactionsScript, которые транслируют распарсенные // транзакции в EventHandler через Qt-сигнал. Передавать `this` из C++ // оригинального скрипта. static Result run(const QString &bank, const QString &scriptName, const QVariantMap ¶ms, QString *outResult, QObject *signalSink = nullptr); }; } // namespace Scripting