Open Stream Deck

Разрешения

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}"]

Что открывает каждое

РазрешениеЗначениеЧто открывает
loopbackДиапазоны портов "9222", "9222-9322" (от 1024, до 1000 портов в диапазоне)http, wsOpen к 127.0.0.1 и localhost через брокер хоста. Без заголовка Origin, без CORS, без перенаправлений
networkАдреса вида https://api.example.com, wss://*.example.com, http://*:8123fetch и WebSocket из кода плагина и команды http, wsOpen к этим адресам. Работает политика CORS браузерного движка
clipboardtrueКоманда clipboard: только запись текста
launchСписок приложенийappStatus, appLaunch, appQuit для объявленных программ

Для 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. Поля событий описаны в разделе протокол.

Риски каждого разрешения разобраны в разделе безопасность.