Разрешения
loopback, network, clipboard и launch: что открывает каждое разрешение и как работает согласие пользователя.
Разрешения объявляются в [permissions]. Ни одно из них не работает до согласия пользователя в «Настройки», «Плагины». Согласие привязано к SHA-256 от всего раздела: если новая версия пакета просит другое, согласие запрашивается заново. Выдача и отзыв перезапускают плагин.
[permissions]
loopback = ["9222-9322"]
network = ["https://api.example.com"]
clipboard = true
[[permissions.launch]]
id = "editor"
name = "Example Editor"
windows = ["%LOCALAPPDATA%/Programs/Editor/editor.exe"]
macos = ["/Applications/Editor.app"]
linux = ["/usr/bin/editor"]
args = ["--port={0}"]Что открывает каждое
Для launch пути задаются отдельно для каждой ОС. Раскрываются %LOCALAPPDATA%, %APPDATA%, %PROGRAMFILES%, %PROGRAMFILES(X86)% и начальный ~/. Аргументы фиксированы в манифесте: плагин может подставить в {0}..{9} только числа.
Без согласия операции брокеров отвечают событием denied, а адреса из network не попадают в политику безопасности среды.
Брокеры
Операции http и wsOpen к 127.0.0.1 и localhost, а также appStatus, appLaunch, appQuit и clipboard выполняет бэкенд приложения на Rust. Плагин отправляет команду с id и сразу продолжает работу, ответ приходит отдельным событием с тем же id: httpResponse, wsOpen, wsMessage, wsClose, appStatus, done или denied. Поля событий описаны в разделе протокол.
Риски каждого разрешения разобраны в разделе безопасность.