На этой страницеJavaScript внутри Donutgram
Среда выполнения
Что предоставляет QuickJS и какие возможности остаются за нативным хостом.
JavaScript внутри Donutgram
У каждого плагина и аккаунта отдельный QuickJS runtime. Он выполняет только установленный проверенный исходный код и обращается к приложению через ограниченный API.
Это не браузер
Нет DOM, document, window, WebView и браузерного fetch. Для интерфейса используется api.ui, для публичной сети — api.network.
Это не Node.js
Нет process, require, fs, произвольных сокетов и стандартных модулей ОС. Node.js в SDK нужен исключительно разработчику для mock-тестов.
Выполнение кода
Пакетные ES-модули разрешены. eval, конструкторы Function, загружаемый код и QuickJS-байткод не предоставляются как способ исполнения плагина. Таймеры браузера или Node.js не являются частью публичного bootstrap API.
Ограничения
Хост ограничивает память, стек, время вычислений, задачи, callbacks, команды, объём данных и частоту действий. Одновременно для аккаунта работает не более четырёх runtime.
Долгие вычисления и бесконечные циклы не подходят для обработчика события или изменения черновика. Превышение бюджета может остановить плагин.
Фон и энергосбережение
Смена аккаунта, уход в фон, общая пауза и режим энергосбережения влияют на выполнение. Не обещайте пользователю непрерывную фоновую автоматизацию.
Ошибки обработчиков
Один отклонённый callback не обязательно выключает плагин. Есть отдельные ограничения для повторных ошибок: пять событий подряд, три трансформации подряд и три исходящих обработчика подряд.
Разработчик должен проверять нативный результат каждой операции. Изоляция интерпретатора не является отдельным процессом ОС и не отменяет необходимость тестирования.