Donutgramплагины
На этой странице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 не обязательно выключает плагин. Есть отдельные ограничения для повторных ошибок: пять событий подряд, три трансформации подряд и три исходящих обработчика подряд.

Разработчик должен проверять нативный результат каждой операции. Изоляция интерпретатора не является отдельным процессом ОС и не отменяет необходимость тестирования.